Agda 2.4.2.5 → 2.5.1
raw patch · 310 files changed
+35147/−20667 lines, 310 filesdep +EdisonAPIdep +EdisonCoredep +filemanipdep ~Agdadep ~QuickCheckdep ~basesetup-changednew-component:exe:agda-ghc-namesPVP ok
version bump matches the API change (PVP)
Dependencies added: EdisonAPI, EdisonCore, filemanip, monadplus, shuffle, uhc-light, uhc-util, uulib
Dependency ranges changed: Agda, QuickCheck, base, binary, process, template-haskell, time, transformers, unordered-containers
API changes (from Hackage documentation)
- Agda.Compiler.Epic.Injection: instance Agda.Compiler.Epic.Injection.Injectible a => Agda.Compiler.Epic.Injection.Injectible (Agda.Syntax.Internal.Arg a)
- Agda.Compiler.Epic.Static: instance Agda.Compiler.Epic.Static.Evaluate a => Agda.Compiler.Epic.Static.Evaluate (Agda.Syntax.Internal.Arg a)
- Agda.Compiler.HaskellTypes: haskellKind :: Type -> TCM HaskellKind
- Agda.Compiler.HaskellTypes: isHaskellKind :: Type -> TCM Bool
- Agda.Compiler.HaskellTypes: notAHaskellKind :: Type -> TCM a
- Agda.Compiler.MAlonzo.Compiler: [ccCatchAll] :: CCEnv -> Maybe CompiledClauses
- Agda.Compiler.MAlonzo.Compiler: [ccFunName] :: CCEnv -> Maybe QName
- Agda.Compiler.MAlonzo.Compiler: argpatts :: [NamedArg Pattern] -> [Pat] -> TCM [Pat]
- Agda.Compiler.MAlonzo.Compiler: branch :: Pat -> CompiledClauses -> CC Alt
- Agda.Compiler.MAlonzo.Compiler: casetree :: CompiledClauses -> CC Exp
- Agda.Compiler.MAlonzo.Compiler: catchAllAlts :: Maybe CompiledClauses -> CC [Alt]
- Agda.Compiler.MAlonzo.Compiler: clause :: QName -> Maybe String -> (Nat, Bool, Clause) -> TCM Decl
- Agda.Compiler.MAlonzo.Compiler: clausebody :: ClauseBody -> TCM Exp
- Agda.Compiler.MAlonzo.Compiler: compileDir :: TCM FilePath
- Agda.Compiler.MAlonzo.Compiler: conAlts :: Int -> Map QName (WithArity CompiledClauses) -> CC [Alt]
- Agda.Compiler.MAlonzo.Compiler: conArityAndPars :: QName -> TCM (Nat, Nat)
- Agda.Compiler.MAlonzo.Compiler: lambdas :: Int -> CC Exp -> CC Exp
- Agda.Compiler.MAlonzo.Compiler: lambdasUpTo :: Int -> CC Exp -> CC Exp
- Agda.Compiler.MAlonzo.Compiler: litAlts :: Map Literal CompiledClauses -> CC [Alt]
- Agda.Compiler.MAlonzo.Compiler: lookupLevel :: Int -> CCContext -> Name
- Agda.Compiler.MAlonzo.Compiler: mkLams :: [Name] -> Exp -> Exp
- Agda.Compiler.MAlonzo.Compiler: mkRecord :: Map QName Exp -> CC Exp
- Agda.Compiler.MAlonzo.Compiler: recConFromProj :: QName -> TCM ConHead
- Agda.Compiler.MAlonzo.Compiler: replaceVar :: Int -> Int -> ([Name] -> CC a) -> CC a
- Agda.Compiler.MAlonzo.Compiler: rteModule :: Module
- Agda.Compiler.MAlonzo.Compiler: term' :: Arg Term -> CC Exp
- Agda.Compiler.MAlonzo.Compiler: updateCatchAll :: Maybe CompiledClauses -> CC a -> CC a
- Agda.Compiler.MAlonzo.Misc: curDefs :: TCM Definitions
- Agda.Compiler.MAlonzo.Misc: curIF :: TCM Interface
- Agda.Compiler.MAlonzo.Misc: curMName :: TCM ModuleName
- Agda.Compiler.MAlonzo.Misc: curSig :: TCM Signature
- Agda.Compiler.MAlonzo.Misc: dsubname :: QName -> Nat -> Name
- Agda.Compiler.MAlonzo.Misc: rtmMod :: ModuleName
- Agda.Compiler.MAlonzo.Misc: setInterface :: Interface -> TCM ()
- Agda.Compiler.MAlonzo.Misc: sigMName :: Signature -> ModuleName
- Agda.Compiler.MAlonzo.Misc: tlmname :: ModuleName -> TCM ModuleName
- Agda.Compiler.MAlonzo.Primitives: declsForPrim :: TCM [Decl]
- Agda.Compiler.MAlonzo.Primitives: hasCompiledData :: [String] -> TCM Bool
- Agda.Compiler.MAlonzo.Primitives: mazBoolToHBool :: String
- Agda.Compiler.MAlonzo.Primitives: mazCharToInteger :: String
- Agda.Compiler.MAlonzo.Primitives: mazHBoolToBool :: String
- Agda.Compiler.MAlonzo.Primitives: mazHListToList :: String
- Agda.Compiler.MAlonzo.Primitives: mazIntToNat :: String
- Agda.Compiler.MAlonzo.Primitives: mazIntegerToNat :: String
- Agda.Compiler.MAlonzo.Primitives: mazListToHList :: String
- Agda.Compiler.MAlonzo.Primitives: mazListToString :: String
- Agda.Compiler.MAlonzo.Primitives: mazNatToInt :: String
- Agda.Compiler.MAlonzo.Primitives: mazNatToInteger :: String
- Agda.Compiler.MAlonzo.Primitives: mazStringToList :: String
- Agda.Compiler.MAlonzo.Primitives: repl :: [String] -> String -> String
- Agda.Interaction.EmacsCommand: instance Agda.Utils.Pretty.Pretty a => GHC.Show.Show (Agda.Interaction.EmacsCommand.Lisp a)
- Agda.Interaction.InteractionTop: setCommandLineOptions' :: CommandLineOptions -> CommandM ()
- Agda.Interaction.Options: [optCompile] :: CommandLineOptions -> Bool
- Agda.Interaction.Options: [optIncludeDirs] :: CommandLineOptions -> IncludeDirs
- Agda.Interaction.Options: type IncludeDirs = Either [FilePath] [AbsolutePath] 'Left' is used temporarily, before the paths have been made absolute. An empty 'Left' list is interpreted as @["."]@ (see 'Agda.TypeChecking.Monad.Options.makeIncludeDirsAbsolute').
- Agda.Interaction.Options.Lenses: class LensIncludeDirs a where setIncludeDirs = mapIncludeDirs . const mapIncludeDirs f a = setIncludeDirs (f $ getIncludeDirs a) a
- Agda.Interaction.Options.Lenses: getIncludeDirs :: LensIncludeDirs a => a -> IncludeDirs
- Agda.Interaction.Options.Lenses: instance Agda.Interaction.Options.Lenses.LensIncludeDirs Agda.Interaction.Options.CommandLineOptions
- Agda.Interaction.Options.Lenses: instance Agda.Interaction.Options.Lenses.LensIncludeDirs Agda.TypeChecking.Monad.Base.PersistentTCState
- Agda.Interaction.Options.Lenses: instance Agda.Interaction.Options.Lenses.LensIncludeDirs Agda.TypeChecking.Monad.Base.TCState
- Agda.Interaction.Options.Lenses: mapIncludeDirs :: LensIncludeDirs a => (IncludeDirs -> IncludeDirs) -> a -> a
- Agda.Interaction.Options.Lenses: modifyIncludeDirs :: (IncludeDirs -> IncludeDirs) -> TCM ()
- Agda.Interaction.Options.Lenses: putIncludeDirs :: IncludeDirs -> TCM ()
- Agda.Interaction.Options.Lenses: setIncludeDirs :: LensIncludeDirs a => IncludeDirs -> a -> a
- Agda.Syntax.Abstract: EtaPragma :: QName -> Pragma
- Agda.Syntax.Abstract: instance Agda.Syntax.Abstract.AllNames a => Agda.Syntax.Abstract.AllNames (Agda.Syntax.Abstract.Arg a)
- Agda.Syntax.Abstract: instance Agda.Syntax.Abstract.IsProjP a => Agda.Syntax.Abstract.IsProjP (Agda.Syntax.Common.Arg c a)
- Agda.Syntax.Abstract: instance Agda.Syntax.Abstract.SubstExpr a => Agda.Syntax.Abstract.SubstExpr (Agda.Syntax.Abstract.Arg a)
- Agda.Syntax.Abstract: instance GHC.Classes.Eq (Agda.Syntax.Abstract.LHSCore' e)
- Agda.Syntax.Abstract: instance GHC.Classes.Eq (Agda.Syntax.Abstract.Pattern' e)
- Agda.Syntax.Abstract: instance GHC.Classes.Eq Agda.Syntax.Abstract.Color
- Agda.Syntax.Abstract: instance GHC.Classes.Ord Agda.Syntax.Abstract.Color
- Agda.Syntax.Abstract: type Arg a = Arg Color a
- Agda.Syntax.Abstract: type ArgInfo = ArgInfo Color
- Agda.Syntax.Abstract: type Color = Expr
- Agda.Syntax.Abstract: type Dom a = Dom Color a
- Agda.Syntax.Abstract: type NamedArg a = NamedArg Color a
- Agda.Syntax.Abstract.Copatterns: instance Agda.Syntax.Abstract.Copatterns.Alpha a => Agda.Syntax.Abstract.Copatterns.Alpha (Agda.Syntax.Abstract.Arg a)
- Agda.Syntax.Abstract.Copatterns: instance Agda.Syntax.Abstract.Copatterns.Rename a => Agda.Syntax.Abstract.Copatterns.Rename (Agda.Syntax.Abstract.Arg a)
- Agda.Syntax.Abstract.Views: deepUnScope :: Expr -> Expr
- Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike (Agda.Syntax.Abstract.Clause' a)
- Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike a => Agda.Syntax.Abstract.Views.ExprLike (Agda.Syntax.Common.Arg c a)
- Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike a => Agda.Syntax.Abstract.Views.ExprLike (x, a)
- Agda.Syntax.Common: [argInfoColors] :: ArgInfo c -> [c]
- Agda.Syntax.Common: argColors :: Arg c a -> [c]
- Agda.Syntax.Common: defaultColoredArg :: ([c], a) -> Arg c a
- Agda.Syntax.Common: domColors :: Dom c a -> [c]
- Agda.Syntax.Common: instance (Agda.Syntax.Position.KillRange c, Agda.Syntax.Position.KillRange a) => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.Arg c a)
- Agda.Syntax.Common: instance (Agda.Syntax.Position.KillRange c, Agda.Syntax.Position.KillRange a) => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.Dom c a)
- Agda.Syntax.Common: instance (GHC.Classes.Eq a, GHC.Classes.Eq c) => GHC.Classes.Eq (Agda.Syntax.Common.Arg c a)
- Agda.Syntax.Common: instance (GHC.Classes.Eq c, GHC.Classes.Eq e) => GHC.Classes.Eq (Agda.Syntax.Common.Dom c e)
- Agda.Syntax.Common: instance (GHC.Classes.Ord c, GHC.Classes.Ord e) => GHC.Classes.Ord (Agda.Syntax.Common.Arg c e)
- Agda.Syntax.Common: instance (GHC.Classes.Ord c, GHC.Classes.Ord e) => GHC.Classes.Ord (Agda.Syntax.Common.Dom c e)
- Agda.Syntax.Common: instance (GHC.Show.Show a, GHC.Show.Show c) => GHC.Show.Show (Agda.Syntax.Common.Arg c a)
- Agda.Syntax.Common: instance (GHC.Show.Show a, GHC.Show.Show c) => GHC.Show.Show (Agda.Syntax.Common.Dom c a)
- Agda.Syntax.Common: instance Agda.Syntax.Common.LensHiding (Agda.Syntax.Common.Arg c e)
- Agda.Syntax.Common: instance Agda.Syntax.Common.LensHiding (Agda.Syntax.Common.ArgInfo c)
- Agda.Syntax.Common: instance Agda.Syntax.Common.LensHiding (Agda.Syntax.Common.Dom c e)
- Agda.Syntax.Common: instance Agda.Syntax.Common.LensRelevance (Agda.Syntax.Common.Arg c e)
- Agda.Syntax.Common: instance Agda.Syntax.Common.LensRelevance (Agda.Syntax.Common.ArgInfo c)
- Agda.Syntax.Common: instance Agda.Syntax.Common.LensRelevance (Agda.Syntax.Common.Dom c e)
- Agda.Syntax.Common: instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.Arg c a)
- Agda.Syntax.Common: instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.Dom c a)
- Agda.Syntax.Common: instance Agda.Syntax.Position.KillRange c => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.ArgInfo c)
- Agda.Syntax.Common: instance Agda.Syntax.Position.SetRange a => Agda.Syntax.Position.SetRange (Agda.Syntax.Common.Arg c a)
- Agda.Syntax.Common: instance Agda.Utils.Functor.Decoration (Agda.Syntax.Common.Arg c)
- Agda.Syntax.Common: instance Agda.Utils.Functor.Decoration (Agda.Syntax.Common.Dom c)
- Agda.Syntax.Common: instance Data.Foldable.Foldable (Agda.Syntax.Common.Arg c)
- Agda.Syntax.Common: instance Data.Foldable.Foldable (Agda.Syntax.Common.Dom c)
- Agda.Syntax.Common: instance Data.Foldable.Foldable Agda.Syntax.Common.ArgInfo
- Agda.Syntax.Common: instance Data.Traversable.Traversable (Agda.Syntax.Common.Arg c)
- Agda.Syntax.Common: instance Data.Traversable.Traversable (Agda.Syntax.Common.Dom c)
- Agda.Syntax.Common: instance Data.Traversable.Traversable Agda.Syntax.Common.ArgInfo
- Agda.Syntax.Common: instance GHC.Base.Functor (Agda.Syntax.Common.Arg c)
- Agda.Syntax.Common: instance GHC.Base.Functor (Agda.Syntax.Common.Dom c)
- Agda.Syntax.Common: instance GHC.Base.Functor Agda.Syntax.Common.ArgInfo
- Agda.Syntax.Common: instance GHC.Classes.Eq c => GHC.Classes.Eq (Agda.Syntax.Common.ArgInfo c)
- Agda.Syntax.Common: instance GHC.Classes.Ord c => GHC.Classes.Ord (Agda.Syntax.Common.ArgInfo c)
- Agda.Syntax.Common: instance GHC.Show.Show c => GHC.Show.Show (Agda.Syntax.Common.ArgInfo c)
- Agda.Syntax.Common: mapArgColors :: ([c] -> [c']) -> Arg c a -> Arg c' a
- Agda.Syntax.Common: mapArgInfoColors :: ([c] -> [c']) -> ArgInfo c -> ArgInfo c'
- Agda.Syntax.Common: mapDomInfo :: (ArgInfo c -> ArgInfo c') -> Dom c a -> Dom c' a
- Agda.Syntax.Common: noColorArg :: Hiding -> Relevance -> a -> Arg c a
- Agda.Syntax.Common: setArgColors :: [c] -> Arg c' a -> Arg c a
- Agda.Syntax.Concrete: EtaPragma :: !Range -> QName -> Pragma
- Agda.Syntax.Concrete: Hiding :: [ImportedName] -> UsingOrHiding
- Agda.Syntax.Concrete: ImportDirective :: !Range -> UsingOrHiding -> [Renaming] -> Bool -> ImportDirective
- Agda.Syntax.Concrete: ImportedModule :: Name -> ImportedName
- Agda.Syntax.Concrete: ImportedName :: Name -> ImportedName
- Agda.Syntax.Concrete: Renaming :: ImportedName -> Name -> Range -> Renaming
- Agda.Syntax.Concrete: Using :: [ImportedName] -> UsingOrHiding
- Agda.Syntax.Concrete: WithColors :: [Color] -> TypedBinding -> ColoredTypedBinding
- Agda.Syntax.Concrete: [importDirRange] :: ImportDirective -> !Range
- Agda.Syntax.Concrete: [importedName] :: ImportedName -> Name
- Agda.Syntax.Concrete: [publicOpen] :: ImportDirective -> Bool
- Agda.Syntax.Concrete: [renFrom] :: Renaming -> ImportedName
- Agda.Syntax.Concrete: [renToRange] :: Renaming -> Range
- Agda.Syntax.Concrete: [renTo] :: Renaming -> Name
- Agda.Syntax.Concrete: [renaming] :: ImportDirective -> [Renaming]
- Agda.Syntax.Concrete: [usingOrHiding] :: ImportDirective -> UsingOrHiding
- Agda.Syntax.Concrete: data ColoredTypedBinding
- Agda.Syntax.Concrete: data ImportDirective
- Agda.Syntax.Concrete: data ImportedName
- Agda.Syntax.Concrete: data Renaming
- Agda.Syntax.Concrete: data UsingOrHiding
- Agda.Syntax.Concrete: defaultImportDir :: ImportDirective
- Agda.Syntax.Concrete: instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.ImportDirective
- Agda.Syntax.Concrete: instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.ImportedName
- Agda.Syntax.Concrete: instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Renaming
- Agda.Syntax.Concrete: instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.UsingOrHiding
- Agda.Syntax.Concrete: instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.ImportDirective
- Agda.Syntax.Concrete: instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.ImportedName
- Agda.Syntax.Concrete: instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.Renaming
- Agda.Syntax.Concrete: instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.UsingOrHiding
- Agda.Syntax.Concrete: instance Control.DeepSeq.NFData Agda.Syntax.Concrete.LHSCore
- Agda.Syntax.Concrete: instance GHC.Classes.Eq Agda.Syntax.Concrete.ImportedName
- Agda.Syntax.Concrete: instance GHC.Classes.Ord Agda.Syntax.Concrete.ImportedName
- Agda.Syntax.Concrete: instance GHC.Show.Show Agda.Syntax.Concrete.ImportedName
- Agda.Syntax.Concrete: type Arg a = Arg Color a
- Agda.Syntax.Concrete: type ArgInfo = ArgInfo Color
- Agda.Syntax.Concrete: type Color = Expr
- Agda.Syntax.Concrete: type Constructor = TypeSignature
- Agda.Syntax.Concrete: type NamedArg a = NamedArg Color a
- Agda.Syntax.Concrete.Generic: instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Concrete.Arg a)
- Agda.Syntax.Concrete.Operators.Parser: binop :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e (e -> e -> e)
- Agda.Syntax.Concrete.Operators.Parser: infixP :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e e -> ReadP e e
- Agda.Syntax.Concrete.Operators.Parser: infixlP :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e e -> ReadP e e
- Agda.Syntax.Concrete.Operators.Parser: infixrP :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e e -> ReadP e e
- Agda.Syntax.Concrete.Operators.Parser: nonfixP :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e e -> ReadP e e
- Agda.Syntax.Concrete.Operators.Parser: postfixP :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e e -> ReadP e e
- Agda.Syntax.Concrete.Operators.Parser: postop :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e (e -> e)
- Agda.Syntax.Concrete.Operators.Parser: prefixP :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e e -> ReadP e e
- Agda.Syntax.Concrete.Operators.Parser: preop :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e (e -> e)
- Agda.Syntax.Concrete.Operators.Parser: rebuild :: IsExpr e => NewNotation -> Range -> [e] -> e
- Agda.Syntax.Concrete.Operators.Parser: rebuildBinding :: IsExpr e => ExprView e -> LamBinding
- Agda.Syntax.Concrete.Pretty: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Concrete.ColoredTypedBinding
- Agda.Syntax.Concrete.Pretty: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Concrete.ImportDirective
- Agda.Syntax.Concrete.Pretty: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Concrete.ImportedName
- Agda.Syntax.Concrete.Pretty: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Concrete.UsingOrHiding
- Agda.Syntax.Concrete.Pretty: instance Agda.Utils.Pretty.Pretty e => Agda.Utils.Pretty.Pretty (Agda.Syntax.Concrete.Arg e)
- Agda.Syntax.Concrete.Pretty: instance GHC.Show.Show Agda.Syntax.Concrete.ImportDirective
- Agda.Syntax.Concrete.Pretty: pColors :: String -> [Color] -> Doc
- Agda.Syntax.Fixity: defaultFixity' :: Fixity'
- Agda.Syntax.Internal: ExtLam :: [Clause] -> Args -> Term
- Agda.Syntax.Internal: [clausePerm] :: Clause -> Permutation
- Agda.Syntax.Internal: data Substitution
- Agda.Syntax.Internal: instance Agda.Syntax.Abstract.IsProjP Agda.Syntax.Internal.Pattern
- Agda.Syntax.Internal: instance Agda.Syntax.Internal.LensSort a => Agda.Syntax.Internal.LensSort (Agda.Syntax.Common.Dom c a)
- Agda.Syntax.Internal: instance Agda.Syntax.Internal.SgTel (Agda.Syntax.Internal.ArgName, Agda.Syntax.Internal.Dom Agda.Syntax.Internal.Type)
- Agda.Syntax.Internal: instance Agda.Syntax.Internal.SgTel (Agda.Syntax.Internal.Dom (Agda.Syntax.Internal.ArgName, Agda.Syntax.Internal.Type))
- Agda.Syntax.Internal: instance Agda.Syntax.Internal.SgTel (Agda.Syntax.Internal.Dom Agda.Syntax.Internal.Type)
- Agda.Syntax.Internal: instance Agda.Syntax.Internal.TermSize Agda.Syntax.Internal.Substitution
- Agda.Syntax.Internal: instance Agda.Syntax.Position.KillRange Agda.Syntax.Internal.Pattern
- Agda.Syntax.Internal: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (Agda.Syntax.Internal.Arg a)
- Agda.Syntax.Internal: instance GHC.Show.Show Agda.Syntax.Internal.Substitution
- Agda.Syntax.Internal: shared :: Term -> Term
- Agda.Syntax.Internal: sharedType :: Type -> Type
- Agda.Syntax.Internal: type Arg a = Arg Color a
- Agda.Syntax.Internal: type ArgInfo = ArgInfo Color
- Agda.Syntax.Internal: type Color = Term
- Agda.Syntax.Internal: type Dom a = Dom Color a
- Agda.Syntax.Internal: type NamedArg a = NamedArg Color a
- Agda.Syntax.Internal.Defs: instance (Agda.Syntax.Internal.Defs.GetDefs c, Agda.Syntax.Internal.Defs.GetDefs a) => Agda.Syntax.Internal.Defs.GetDefs (Agda.Syntax.Common.Arg c a)
- Agda.Syntax.Internal.Defs: instance (Agda.Syntax.Internal.Defs.GetDefs c, Agda.Syntax.Internal.Defs.GetDefs a) => Agda.Syntax.Internal.Defs.GetDefs (Agda.Syntax.Common.Dom c a)
- Agda.Syntax.Internal.Defs: instance Agda.Syntax.Internal.Defs.GetDefs c => Agda.Syntax.Internal.Defs.GetDefs (Agda.Syntax.Common.ArgInfo c)
- Agda.Syntax.Internal.Generic: instance Agda.Syntax.Internal.Generic.TermLike a => Agda.Syntax.Internal.Generic.TermLike (Agda.Syntax.Internal.Arg a)
- Agda.Syntax.Internal.Generic: instance Agda.Syntax.Internal.Generic.TermLike a => Agda.Syntax.Internal.Generic.TermLike (Agda.Syntax.Internal.Dom a)
- Agda.Syntax.Internal.Pattern: Hole :: OneHolePattern
- Agda.Syntax.Internal.Pattern: OHCon :: ConHead -> ConPatternInfo -> OneHolePatterns -> OneHolePattern
- Agda.Syntax.Internal.Pattern: OHPats :: [NamedArg Pattern] -> (NamedArg OneHolePattern) -> [NamedArg Pattern] -> OneHolePatterns
- Agda.Syntax.Internal.Pattern: allHoles :: [NamedArg Pattern] -> [OneHolePatterns]
- Agda.Syntax.Internal.Pattern: allHolesWithContents :: [NamedArg Pattern] -> [(Pattern, OneHolePatterns)]
- Agda.Syntax.Internal.Pattern: data OneHolePattern
- Agda.Syntax.Internal.Pattern: data OneHolePatterns
- Agda.Syntax.Internal.Pattern: instance Agda.Syntax.Internal.Pattern.LabelPatVars a b i => Agda.Syntax.Internal.Pattern.LabelPatVars (Agda.Syntax.Common.Arg c a) (Agda.Syntax.Common.Arg c b) i
- Agda.Syntax.Internal.Pattern: instance GHC.Show.Show Agda.Syntax.Internal.Pattern.OneHolePattern
- Agda.Syntax.Internal.Pattern: instance GHC.Show.Show Agda.Syntax.Internal.Pattern.OneHolePatterns
- Agda.Syntax.Internal.Pattern: plugHole :: Pattern -> OneHolePatterns -> [NamedArg Pattern]
- Agda.Syntax.Literal: LitInt :: Range -> Integer -> Literal
- Agda.Syntax.Notation: defaultNotation :: Notation
- Agda.Syntax.Parser.Tokens: KwETA :: Keyword
- Agda.Syntax.Position: Range :: [Interval' a] -> Range' a
- Agda.Syntax.Position: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (Agda.Syntax.Position.Interval' (GHC.Base.Maybe a))
- Agda.Syntax.Position: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (Agda.Syntax.Position.Position' (GHC.Base.Maybe a))
- Agda.Syntax.Position: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (Agda.Syntax.Position.Range' (GHC.Base.Maybe a))
- Agda.Syntax.Position: instance GHC.Show.Show a => GHC.Show.Show (Agda.Syntax.Position.Interval' (GHC.Base.Maybe a))
- Agda.Syntax.Position: instance GHC.Show.Show a => GHC.Show.Show (Agda.Syntax.Position.Position' (GHC.Base.Maybe a))
- Agda.Syntax.Position: newtype Range' a
- Agda.Syntax.Scope.Base: AllowAmbiguousConstructors :: AllowAmbiguousConstructors
- Agda.Syntax.Scope.Base: NoAmbiguousConstructors :: AllowAmbiguousConstructors
- Agda.Syntax.Scope.Base: data AllowAmbiguousConstructors
- Agda.Syntax.Scope.Base: instance Control.DeepSeq.NFData Agda.Syntax.Scope.Base.LocalVar
- Agda.Syntax.Scope.Base: instance GHC.Classes.Eq Agda.Syntax.Scope.Base.AllowAmbiguousConstructors
- Agda.Syntax.Scope.Monad: modifyScopeInfo :: (ScopeInfo -> ScopeInfo) -> ScopeM ()
- Agda.Syntax.Translation.AbstractToConcrete: instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Common.ArgInfo ac) Agda.Syntax.Concrete.ArgInfo
- Agda.Syntax.Translation.AbstractToConcrete: instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a c => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Common.Arg ac a) (Agda.Syntax.Concrete.Arg c)
- Agda.Syntax.Translation.ConcreteToAbstract: [insideScope] :: TopLevelInfo -> ScopeInfo
- Agda.Syntax.Translation.ConcreteToAbstract: [outsideScope] :: TopLevelInfo -> ScopeInfo
- Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract Agda.Syntax.Concrete.ArgInfo Agda.Syntax.Abstract.ArgInfo
- Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract Agda.Syntax.Translation.ConcreteToAbstract.OldName Agda.Syntax.Abstract.Name.QName
- Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract c a => Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract (Agda.Syntax.Abstract.NamedArg c) (Agda.Syntax.Abstract.NamedArg a)
- Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract c a => Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract (Agda.Syntax.Concrete.Arg c) (Agda.Syntax.Abstract.Arg a)
- Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.DotVars a => Agda.Syntax.Translation.InternalToAbstract.DotVars (Agda.Syntax.Abstract.Arg a)
- Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.Reify Agda.Syntax.Internal.ArgInfo Agda.Syntax.Abstract.ArgInfo
- Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.Reify i a => Agda.Syntax.Translation.InternalToAbstract.Reify (Agda.Syntax.Internal.Arg i) (Agda.Syntax.Abstract.Arg a)
- Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.Reify i a => Agda.Syntax.Translation.InternalToAbstract.Reify (Agda.Syntax.Internal.Dom i) (Agda.Syntax.Abstract.Arg a)
- Agda.Termination.CallGraph: instance GHC.Base.Monoid cinfo => GHC.Base.Monoid (Agda.Termination.CallGraph.CallGraph cinfo)
- Agda.Termination.SparseMatrix: instance (GHC.Show.Show i, GHC.Classes.Ord i, GHC.Real.Integral i, GHC.Enum.Enum i, GHC.Arr.Ix i, Test.QuickCheck.Arbitrary.CoArbitrary b, Agda.Termination.Semiring.HasZero b) => Test.QuickCheck.Arbitrary.CoArbitrary (Agda.Termination.SparseMatrix.Matrix i b)
- Agda.Termination.SparseMatrix: instance (Test.QuickCheck.Arbitrary.Arbitrary i, GHC.Num.Num i, GHC.Real.Integral i, Test.QuickCheck.Arbitrary.Arbitrary b, Agda.Termination.Semiring.HasZero b) => Test.QuickCheck.Arbitrary.Arbitrary (Agda.Termination.SparseMatrix.Matrix i b)
- Agda.Termination.SparseMatrix: instance (Test.QuickCheck.Arbitrary.Arbitrary i, GHC.Real.Integral i) => Test.QuickCheck.Arbitrary.Arbitrary (Agda.Termination.SparseMatrix.MIx i)
- Agda.Termination.SparseMatrix: instance (Test.QuickCheck.Arbitrary.Arbitrary i, GHC.Real.Integral i) => Test.QuickCheck.Arbitrary.Arbitrary (Agda.Termination.SparseMatrix.Size i)
- Agda.Termination.TermCheck: instance Agda.Termination.TermCheck.ExtractCalls a => Agda.Termination.TermCheck.ExtractCalls (Agda.Syntax.Internal.Arg a)
- Agda.Termination.TermCheck: instance Agda.Termination.TermCheck.ExtractCalls a => Agda.Termination.TermCheck.ExtractCalls (Agda.Syntax.Internal.Dom a)
- Agda.Termination.TermCheck: instance Agda.Termination.TermCheck.StripAllProjections a => Agda.Termination.TermCheck.StripAllProjections (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.Abstract: class AbstractTerm a
- Agda.TypeChecking.Abstract: instance (Agda.TypeChecking.Abstract.AbstractTerm a, Agda.TypeChecking.Abstract.AbstractTerm b) => Agda.TypeChecking.Abstract.AbstractTerm (a, b)
- Agda.TypeChecking.Abstract: instance (Agda.TypeChecking.Substitute.Subst a, Agda.TypeChecking.Abstract.AbstractTerm a) => Agda.TypeChecking.Abstract.AbstractTerm (Agda.Syntax.Internal.Abs a)
- Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbstractTerm Agda.Syntax.Internal.Level
- Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbstractTerm Agda.Syntax.Internal.LevelAtom
- Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbstractTerm Agda.Syntax.Internal.PlusLevel
- Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbstractTerm Agda.Syntax.Internal.Sort
- Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbstractTerm Agda.Syntax.Internal.Term
- Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbstractTerm Agda.Syntax.Internal.Type
- Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbstractTerm a => Agda.TypeChecking.Abstract.AbstractTerm (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbstractTerm a => Agda.TypeChecking.Abstract.AbstractTerm (Agda.Syntax.Internal.Dom a)
- Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbstractTerm a => Agda.TypeChecking.Abstract.AbstractTerm (Agda.Syntax.Internal.Elim' a)
- Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbstractTerm a => Agda.TypeChecking.Abstract.AbstractTerm (Agda.Utils.Pointer.Ptr a)
- Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbstractTerm a => Agda.TypeChecking.Abstract.AbstractTerm (GHC.Base.Maybe a)
- Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbstractTerm a => Agda.TypeChecking.Abstract.AbstractTerm [a]
- Agda.TypeChecking.Coverage: [scPerm] :: SplitClause -> Permutation
- Agda.TypeChecking.Coverage.SplitTree: instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.TypeChecking.Coverage.SplitTree.SplitTree' a)
- Agda.TypeChecking.DisplayForm: instance Agda.TypeChecking.DisplayForm.Match a => Agda.TypeChecking.DisplayForm.Match (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' a c => Agda.TypeChecking.Free.Lazy.Free' (Agda.Syntax.Internal.Arg a) c
- Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' a c => Agda.TypeChecking.Free.Lazy.Free' (Agda.Syntax.Internal.Dom a) c
- Agda.TypeChecking.Free.Lazy: instance GHC.Enum.Bounded Agda.TypeChecking.Free.Lazy.FlexRig
- Agda.TypeChecking.Free.Lazy: instance GHC.Enum.Enum Agda.TypeChecking.Free.Lazy.FlexRig
- Agda.TypeChecking.Free.Old: instance Agda.TypeChecking.Free.Old.Free a => Agda.TypeChecking.Free.Old.Free (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.Free.Old: instance Agda.TypeChecking.Free.Old.Free a => Agda.TypeChecking.Free.Old.Free (Agda.Syntax.Internal.Dom a)
- Agda.TypeChecking.InstanceArguments: type Candidate = (Term, Type)
- Agda.TypeChecking.InstanceArguments: type Candidates = [Candidate]
- Agda.TypeChecking.MetaVars: instance Agda.TypeChecking.MetaVars.NoProjectedVar a => Agda.TypeChecking.MetaVars.NoProjectedVar (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.MetaVars.Mention: instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta t => Agda.TypeChecking.MetaVars.Mention.MentionsMeta (Agda.Syntax.Internal.Arg t)
- Agda.TypeChecking.MetaVars.Mention: instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta t => Agda.TypeChecking.MetaVars.Mention.MentionsMeta (Agda.Syntax.Internal.Dom t)
- Agda.TypeChecking.MetaVars.Occurs: instance (Agda.TypeChecking.MetaVars.Occurs.Occurs a, Agda.TypeChecking.Substitute.Subst a) => Agda.TypeChecking.MetaVars.Occurs.Occurs (Agda.Syntax.Internal.Abs a)
- Agda.TypeChecking.MetaVars.Occurs: instance (Agda.TypeChecking.Substitute.Subst a, Agda.TypeChecking.MetaVars.Occurs.FoldRigid a) => Agda.TypeChecking.MetaVars.Occurs.FoldRigid (Agda.Syntax.Internal.Abs a)
- Agda.TypeChecking.MetaVars.Occurs: instance Agda.TypeChecking.MetaVars.Occurs.FoldRigid a => Agda.TypeChecking.MetaVars.Occurs.FoldRigid (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.MetaVars.Occurs: instance Agda.TypeChecking.MetaVars.Occurs.FoldRigid a => Agda.TypeChecking.MetaVars.Occurs.FoldRigid (Agda.Syntax.Internal.Dom a)
- Agda.TypeChecking.MetaVars.Occurs: instance Agda.TypeChecking.MetaVars.Occurs.Occurs a => Agda.TypeChecking.MetaVars.Occurs.Occurs (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.MetaVars.Occurs: instance Agda.TypeChecking.MetaVars.Occurs.Occurs a => Agda.TypeChecking.MetaVars.Occurs.Occurs (Agda.Syntax.Internal.Dom a)
- Agda.TypeChecking.Monad.Base: ColorMismatch :: [Color] -> [Color] -> TypeError
- Agda.TypeChecking.Monad.Base: DontExpandInstanceArguments :: ExpandInstances
- Agda.TypeChecking.Monad.Base: ExpandInstanceArguments :: ExpandInstances
- Agda.TypeChecking.Monad.Base: NotAConstructor :: String -> Term -> UnquoteError
- Agda.TypeChecking.Monad.Base: NotALiteral :: String -> Term -> UnquoteError
- Agda.TypeChecking.Monad.Base: RhsUsesDottedVar :: [Int] -> Term -> UnquoteError
- Agda.TypeChecking.Monad.Base: SafeFlagNoTerminationCheck :: TypeError
- Agda.TypeChecking.Monad.Base: UnequalColors :: Term -> Term -> TypeError
- Agda.TypeChecking.Monad.Base: [envColors] :: TCEnv -> [Color]
- Agda.TypeChecking.Monad.Base: [envReifyUnquoted] :: TCEnv -> Bool
- Agda.TypeChecking.Monad.Base: [funCopy] :: Defn -> Bool
- Agda.TypeChecking.Monad.Base: [recEtaEquality] :: Defn -> Bool
- Agda.TypeChecking.Monad.Base: [stPreFreshNameId] :: PreScopeState -> NameId
- Agda.TypeChecking.Monad.Base: [stPreInteractionPoints] :: PreScopeState -> InteractionPoints
- Agda.TypeChecking.Monad.Base: data ExpandInstances
- Agda.TypeChecking.Monad.Base: defColors :: Definition -> [Color]
- Agda.TypeChecking.Monad.Base: defCopy :: Definition -> Bool
- Agda.TypeChecking.Monad.Base: getMetaColors :: MetaVariable -> [Color]
- Agda.TypeChecking.Monad.Base: instance (Agda.Utils.Except.Error err, Agda.TypeChecking.Monad.Base.MonadTCM tcm) => Agda.TypeChecking.Monad.Base.MonadTCM (Control.Monad.Trans.Except.ExceptT err tcm)
- Agda.TypeChecking.Monad.Base: instance GHC.Classes.Eq Agda.TypeChecking.Monad.Base.ExpandInstances
- Agda.TypeChecking.Monad.Builtin: builtinAgdaDataDef :: String
- Agda.TypeChecking.Monad.Builtin: builtinAgdaFunDef :: String
- Agda.TypeChecking.Monad.Builtin: builtinAgdaFunDefCon :: String
- Agda.TypeChecking.Monad.Builtin: builtinAgdaRecordDef :: String
- Agda.TypeChecking.Monad.Builtin: builtinAgdaType :: String
- Agda.TypeChecking.Monad.Builtin: builtinAgdaTypeEl :: String
- Agda.TypeChecking.Monad.Builtin: builtinIrrAxiom :: String
- Agda.TypeChecking.Monad.Builtin: primAgdaDataDef :: TCM Term
- Agda.TypeChecking.Monad.Builtin: primAgdaFunDef :: TCM Term
- Agda.TypeChecking.Monad.Builtin: primAgdaFunDefCon :: TCM Term
- Agda.TypeChecking.Monad.Builtin: primAgdaRecordDef :: TCM Term
- Agda.TypeChecking.Monad.Builtin: primAgdaType :: TCM Term
- Agda.TypeChecking.Monad.Builtin: primAgdaTypeEl :: TCM Term
- Agda.TypeChecking.Monad.Builtin: primIrrAxiom :: TCM Term
- Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext (Agda.Syntax.Abstract.Name.Name, Agda.Syntax.Internal.Dom Agda.Syntax.Internal.Type)
- Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext (Agda.Syntax.Internal.Dom (Agda.Syntax.Abstract.Name.Name, Agda.Syntax.Internal.Type))
- Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext (Agda.Syntax.Internal.Dom (GHC.Base.String, Agda.Syntax.Internal.Type))
- Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext (Agda.Syntax.Internal.Dom Agda.Syntax.Internal.Type)
- Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext (GHC.Base.String, Agda.Syntax.Internal.Dom Agda.Syntax.Internal.Type)
- Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext ([Agda.Syntax.Abstract.Name.Name], Agda.Syntax.Internal.Dom Agda.Syntax.Internal.Type)
- Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext ([Agda.Syntax.Common.WithHiding Agda.Syntax.Abstract.Name.Name], Agda.Syntax.Internal.Dom Agda.Syntax.Internal.Type)
- Agda.TypeChecking.Monad.Env: isReifyingUnquoted :: TCM Bool
- Agda.TypeChecking.Monad.Env: nowReifyingUnquoted :: TCM a -> TCM a
- Agda.TypeChecking.Monad.MetaVars: instance Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta a => Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta (Agda.Syntax.Common.Arg c a)
- Agda.TypeChecking.Monad.Sharing: disableDestructiveUpdate :: TCM a -> TCM a
- Agda.TypeChecking.Monad.Signature: colOfConst :: QName -> TCM [Color]
- Agda.TypeChecking.Monad.Signature: getDefType :: QName -> Type -> TCM (Maybe Type)
- Agda.TypeChecking.Patterns.Abstract: instance Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms a => Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms (Agda.Syntax.Common.Arg c a)
- Agda.TypeChecking.Polarity: instance Agda.TypeChecking.Polarity.HasPolarity a => Agda.TypeChecking.Polarity.HasPolarity (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.Polarity: instance Agda.TypeChecking.Polarity.HasPolarity a => Agda.TypeChecking.Polarity.HasPolarity (Agda.Syntax.Internal.Dom a)
- Agda.TypeChecking.Positivity: Here :: OccursWhere
- Agda.TypeChecking.Positivity: computeEdge :: Set QName -> OccursWhere -> TCM (Node, Edge)
- Agda.TypeChecking.Positivity: concatOccurs :: [Occurrences] -> Occurrences
- Agda.TypeChecking.Positivity: here :: Item -> Occurrences
- Agda.TypeChecking.Positivity: instance Agda.TypeChecking.Positivity.ComputeOccurrences a => Agda.TypeChecking.Positivity.ComputeOccurrences (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.Positivity: instance Agda.TypeChecking.Positivity.ComputeOccurrences a => Agda.TypeChecking.Positivity.ComputeOccurrences (Agda.Syntax.Internal.Dom a)
- Agda.TypeChecking.Positivity: occursAs :: (OccursWhere -> OccursWhere) -> Occurrences -> Occurrences
- Agda.TypeChecking.Positivity: onlyVarsUpTo :: Nat -> Occurrences -> Occurrences
- Agda.TypeChecking.Positivity.Occurrence: prop_Occurrence_distributive :: Occurrence -> Occurrence -> Occurrence -> Bool
- Agda.TypeChecking.Positivity.Occurrence: prop_Occurrence_oplus_associative :: Occurrence -> Occurrence -> Occurrence -> Bool
- Agda.TypeChecking.Positivity.Occurrence: prop_Occurrence_oplus_commutative :: Occurrence -> Occurrence -> Bool
- Agda.TypeChecking.Positivity.Occurrence: prop_Occurrence_oplus_ozero :: Occurrence -> Bool
- Agda.TypeChecking.Positivity.Occurrence: prop_Occurrence_ostar :: Occurrence -> Bool
- Agda.TypeChecking.Positivity.Occurrence: prop_Occurrence_otimes_associative :: Occurrence -> Occurrence -> Occurrence -> Bool
- Agda.TypeChecking.Positivity.Occurrence: prop_Occurrence_otimes_oone :: Occurrence -> Bool
- Agda.TypeChecking.Positivity.Occurrence: prop_Occurrence_otimes_ozero :: Occurrence -> Bool
- Agda.TypeChecking.Pretty: instance (Agda.Syntax.Translation.InternalToAbstract.Reify a e, Agda.Syntax.Translation.AbstractToConcrete.ToConcrete e c, Agda.Utils.Pretty.Pretty c) => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.Pretty: instance (Agda.Syntax.Translation.InternalToAbstract.Reify a e, Agda.Syntax.Translation.AbstractToConcrete.ToConcrete e c, Agda.Utils.Pretty.Pretty c) => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Internal.Dom a)
- Agda.TypeChecking.Primitive: instance (Agda.TypeChecking.Primitive.PrimTerm a, Agda.TypeChecking.Primitive.ToTerm a) => Agda.TypeChecking.Primitive.ToTerm [a]
- Agda.TypeChecking.Primitive: instance Agda.TypeChecking.Primitive.ToTerm Agda.Syntax.Internal.ArgInfo
- Agda.TypeChecking.Primitive: primDataConstructors :: TCM PrimitiveImpl
- Agda.TypeChecking.Primitive: primQNameDefinition :: TCM PrimitiveImpl
- Agda.TypeChecking.Primitive: primQNameType :: TCM PrimitiveImpl
- Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst a, Agda.TypeChecking.Reduce.InstantiateFull a) => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Internal.Tele a)
- Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst a, Agda.TypeChecking.Reduce.Normalise a) => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Internal.Tele a)
- Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst a, Agda.TypeChecking.Reduce.Simplify a) => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Internal.Tele a)
- Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst t, Agda.TypeChecking.Reduce.InstantiateFull t) => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Internal.Abs t)
- Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst t, Agda.TypeChecking.Reduce.Normalise t) => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Internal.Abs t)
- Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst t, Agda.TypeChecking.Reduce.Reduce t) => Agda.TypeChecking.Reduce.Reduce (Agda.Syntax.Internal.Abs t)
- Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst t, Agda.TypeChecking.Reduce.Simplify t) => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Internal.Abs t)
- Agda.TypeChecking.Reduce: instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k, Agda.TypeChecking.Reduce.InstantiateFull e) => Agda.TypeChecking.Reduce.InstantiateFull (Data.HashMap.Base.HashMap k e)
- Agda.TypeChecking.Reduce: instance (GHC.Classes.Ord k, Agda.TypeChecking.Reduce.Instantiate e) => Agda.TypeChecking.Reduce.Instantiate (Data.Map.Base.Map k e)
- Agda.TypeChecking.Reduce: instance (GHC.Classes.Ord k, Agda.TypeChecking.Reduce.InstantiateFull e) => Agda.TypeChecking.Reduce.InstantiateFull (Data.Map.Base.Map k e)
- Agda.TypeChecking.Reduce: instance (GHC.Classes.Ord k, Agda.TypeChecking.Reduce.Normalise e) => Agda.TypeChecking.Reduce.Normalise (Data.Map.Base.Map k e)
- Agda.TypeChecking.Reduce: instance (GHC.Classes.Ord k, Agda.TypeChecking.Reduce.Reduce e) => Agda.TypeChecking.Reduce.Reduce (Data.Map.Base.Map k e)
- Agda.TypeChecking.Reduce: instance (GHC.Classes.Ord k, Agda.TypeChecking.Reduce.Simplify e) => Agda.TypeChecking.Reduce.Simplify (Data.Map.Base.Map k e)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Agda.Syntax.Internal.Arg t)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Agda.Syntax.Internal.Dom t)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Internal.Pattern
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Internal.Arg t)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Internal.Dom t)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Normalise Agda.Syntax.Internal.Pattern
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Internal.Arg t)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Internal.Dom t)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Reduce t => Agda.TypeChecking.Reduce.Reduce (Agda.Syntax.Internal.Arg t)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Reduce t => Agda.TypeChecking.Reduce.Reduce (Agda.Syntax.Internal.Dom t)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Internal.Arg t)
- Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Internal.Dom t)
- Agda.TypeChecking.Rewriting.NonLinMatch: instance (Agda.TypeChecking.Rewriting.NonLinMatch.Match a b, Agda.TypeChecking.Substitute.Subst b, Agda.TypeChecking.Free.Free b, Agda.TypeChecking.Pretty.PrettyTCM a, Agda.TypeChecking.Pretty.PrettyTCM b) => Agda.TypeChecking.Rewriting.NonLinMatch.Match (Agda.Syntax.Internal.Abs a) (Agda.Syntax.Internal.Abs b)
- Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.Match a b => Agda.TypeChecking.Rewriting.NonLinMatch.Match (Agda.Syntax.Internal.Arg a) (Agda.Syntax.Internal.Arg b)
- Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.Match a b => Agda.TypeChecking.Rewriting.NonLinMatch.Match (Agda.Syntax.Internal.Dom a) (Agda.Syntax.Internal.Dom b)
- Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.PatternFrom a b => Agda.TypeChecking.Rewriting.NonLinMatch.PatternFrom (Agda.Syntax.Internal.Arg a) (Agda.Syntax.Internal.Arg b)
- Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.PatternFrom a b => Agda.TypeChecking.Rewriting.NonLinMatch.PatternFrom (Agda.Syntax.Internal.Dom a) (Agda.Syntax.Internal.Dom b)
- Agda.TypeChecking.Rules.LHS: dotPatternInsts :: [NamedArg Pattern] -> Substitution -> [Dom Type] -> TCM [DotPatternInst]
- Agda.TypeChecking.Rules.LHS: instance Agda.TypeChecking.Rules.LHS.IsFlexiblePattern a => Agda.TypeChecking.Rules.LHS.IsFlexiblePattern (Agda.Syntax.Common.Arg c a)
- Agda.TypeChecking.Rules.LHS: instantiatePattern :: Substitution -> Permutation -> [NamedArg Pattern] -> [NamedArg Pattern]
- Agda.TypeChecking.Rules.LHS: instantiatePattern' :: Substitution -> Permutation -> [NamedArg Pattern] -> [NamedArg Pattern]
- Agda.TypeChecking.Rules.LHS.Problem: [focusHoleIx] :: Focus -> Int
- Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Substitute.Subst (Agda.TypeChecking.Rules.LHS.Problem.Problem' p)
- Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Substitute.Subst Agda.TypeChecking.Rules.LHS.Problem.AsBinding
- Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Substitute.Subst Agda.TypeChecking.Rules.LHS.Problem.DotPatternInst
- Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Substitute.Subst Agda.TypeChecking.Rules.LHS.Problem.ProblemRest
- Agda.TypeChecking.Rules.LHS.Problem: instance GHC.Classes.Ord (Agda.TypeChecking.Rules.LHS.Problem.FlexibleVar Agda.Syntax.Common.Nat)
- Agda.TypeChecking.Rules.LHS.Problem: instance GHC.Classes.Ord Agda.TypeChecking.Rules.LHS.Problem.FlexibleVarKind
- Agda.TypeChecking.Rules.LHS.Unify: (|->) :: Nat -> (Term, Type) -> Unify ()
- Agda.TypeChecking.Rules.LHS.Unify: ConstructorMismatch :: Type -> Term -> Term -> UnifyException
- Agda.TypeChecking.Rules.LHS.Unify: DefSh :: QName -> ShapeView a
- Agda.TypeChecking.Rules.LHS.Unify: Definitely :: Unifiable
- Agda.TypeChecking.Rules.LHS.Unify: ElseSh :: ShapeView a
- Agda.TypeChecking.Rules.LHS.Unify: Equal :: TypeHH -> Term -> Term -> Equality
- Agda.TypeChecking.Rules.LHS.Unify: FunSh :: (Dom a) -> a -> ShapeView a
- Agda.TypeChecking.Rules.LHS.Unify: GenericUnifyException :: String -> UnifyException
- Agda.TypeChecking.Rules.LHS.Unify: Het :: a -> a -> HomHet a
- Agda.TypeChecking.Rules.LHS.Unify: Hom :: a -> HomHet a
- Agda.TypeChecking.Rules.LHS.Unify: LitSh :: Literal -> ShapeView a
- Agda.TypeChecking.Rules.LHS.Unify: MayNotPostpone :: UnifyMayPostpone
- Agda.TypeChecking.Rules.LHS.Unify: MayPostpone :: UnifyMayPostpone
- Agda.TypeChecking.Rules.LHS.Unify: MetaSh :: ShapeView a
- Agda.TypeChecking.Rules.LHS.Unify: PiSh :: (Dom a) -> (Abs a) -> ShapeView a
- Agda.TypeChecking.Rules.LHS.Unify: Possibly :: Unifiable
- Agda.TypeChecking.Rules.LHS.Unify: SortSh :: ShapeView a
- Agda.TypeChecking.Rules.LHS.Unify: StronglyRigidOccurrence :: Type -> Term -> Term -> UnifyException
- Agda.TypeChecking.Rules.LHS.Unify: U :: ReaderT UnifyEnv (WriterT UnifyOutput (ExceptionT UnifyException (StateT UnifyState TCM))) a -> Unify a
- Agda.TypeChecking.Rules.LHS.Unify: USt :: Sub -> [Equality] -> UnifyState
- Agda.TypeChecking.Rules.LHS.Unify: UnclearOccurrence :: Type -> Term -> Term -> UnifyException
- Agda.TypeChecking.Rules.LHS.Unify: VarSh :: Nat -> ShapeView a
- Agda.TypeChecking.Rules.LHS.Unify: WithoutKException :: Type -> Term -> Term -> UnifyException
- Agda.TypeChecking.Rules.LHS.Unify: [unUnify] :: Unify a -> ReaderT UnifyEnv (WriterT UnifyOutput (ExceptionT UnifyException (StateT UnifyState TCM))) a
- Agda.TypeChecking.Rules.LHS.Unify: [uniConstr] :: UnifyState -> [Equality]
- Agda.TypeChecking.Rules.LHS.Unify: [uniSub] :: UnifyState -> Sub
- Agda.TypeChecking.Rules.LHS.Unify: absAppHH :: SubstHH t tHH => Abs t -> TermHH -> tHH
- Agda.TypeChecking.Rules.LHS.Unify: addEquality :: Type -> Term -> Term -> Unify ()
- Agda.TypeChecking.Rules.LHS.Unify: addEqualityHH :: TypeHH -> Term -> Term -> Unify ()
- Agda.TypeChecking.Rules.LHS.Unify: applyHH :: ApplyHH t => t -> HomHet Args -> HomHet t
- Agda.TypeChecking.Rules.LHS.Unify: askPostpone :: Unify UnifyMayPostpone
- Agda.TypeChecking.Rules.LHS.Unify: checkEqualities :: [Equality] -> TCM ()
- Agda.TypeChecking.Rules.LHS.Unify: checkEquality :: Type -> Term -> Term -> TCM ()
- Agda.TypeChecking.Rules.LHS.Unify: checkEqualityHH :: TypeHH -> Term -> Term -> Unify ()
- Agda.TypeChecking.Rules.LHS.Unify: class ApplyHH t
- Agda.TypeChecking.Rules.LHS.Unify: class SubstHH t tHH
- Agda.TypeChecking.Rules.LHS.Unify: class UReduce t
- Agda.TypeChecking.Rules.LHS.Unify: constructorMismatch :: Type -> Term -> Term -> Unify a
- Agda.TypeChecking.Rules.LHS.Unify: constructorMismatchHH :: TypeHH -> Term -> Term -> Unify a
- Agda.TypeChecking.Rules.LHS.Unify: data Equality
- Agda.TypeChecking.Rules.LHS.Unify: data HomHet a
- Agda.TypeChecking.Rules.LHS.Unify: data ShapeView a
- Agda.TypeChecking.Rules.LHS.Unify: data Unifiable
- Agda.TypeChecking.Rules.LHS.Unify: data UnifyException
- Agda.TypeChecking.Rules.LHS.Unify: data UnifyMayPostpone
- Agda.TypeChecking.Rules.LHS.Unify: data UnifyState
- Agda.TypeChecking.Rules.LHS.Unify: dataOrRecordType :: ConHead -> Type -> TCM (Maybe Type)
- Agda.TypeChecking.Rules.LHS.Unify: dataOrRecordType' :: ConHead -> Type -> TCM (Maybe (QName, Type, Args, Args))
- Agda.TypeChecking.Rules.LHS.Unify: dataOrRecordTypeHH :: ConHead -> TypeHH -> TCM (Maybe TypeHH)
- Agda.TypeChecking.Rules.LHS.Unify: dataOrRecordTypeHH' :: ConHead -> TypeHH -> TCM (Maybe (QName, Type, HomHet (Args, Args)))
- Agda.TypeChecking.Rules.LHS.Unify: emptyUEnv :: UnifyEnv
- Agda.TypeChecking.Rules.LHS.Unify: emptyUState :: UnifyState
- Agda.TypeChecking.Rules.LHS.Unify: flattenSubstitution :: Substitution -> Substitution
- Agda.TypeChecking.Rules.LHS.Unify: forceHom :: TypeHH -> TCM Type
- Agda.TypeChecking.Rules.LHS.Unify: fromHom :: HomHet a -> a
- Agda.TypeChecking.Rules.LHS.Unify: getSub :: Unify Sub
- Agda.TypeChecking.Rules.LHS.Unify: ifClean :: Unify () -> Unify a -> Unify a -> Unify a
- Agda.TypeChecking.Rules.LHS.Unify: instance (Agda.TypeChecking.Free.Free a, Agda.TypeChecking.Substitute.Subst a) => Agda.TypeChecking.Rules.LHS.Unify.SubstHH (Agda.TypeChecking.Rules.LHS.Unify.HomHet a) (Agda.TypeChecking.Rules.LHS.Unify.HomHet a)
- Agda.TypeChecking.Rules.LHS.Unify: instance (Agda.TypeChecking.Rules.LHS.Unify.SubstHH a a', Agda.TypeChecking.Rules.LHS.Unify.SubstHH b b') => Agda.TypeChecking.Rules.LHS.Unify.SubstHH (a, b) (a', b')
- Agda.TypeChecking.Rules.LHS.Unify: instance (Agda.TypeChecking.Rules.LHS.Unify.UReduce a, Agda.TypeChecking.Rules.LHS.Unify.UReduce b) => Agda.TypeChecking.Rules.LHS.Unify.UReduce (a, b)
- Agda.TypeChecking.Rules.LHS.Unify: instance (Agda.TypeChecking.Rules.LHS.Unify.UReduce a, Agda.TypeChecking.Rules.LHS.Unify.UReduce b, Agda.TypeChecking.Rules.LHS.Unify.UReduce c) => Agda.TypeChecking.Rules.LHS.Unify.UReduce (a, b, c)
- Agda.TypeChecking.Rules.LHS.Unify: instance (GHC.Classes.Eq a, Agda.TypeChecking.Substitute.Subst a) => GHC.Classes.Eq (Agda.TypeChecking.Rules.LHS.Unify.ShapeView a)
- Agda.TypeChecking.Rules.LHS.Unify: instance (GHC.Classes.Ord a, Agda.TypeChecking.Substitute.Subst a) => GHC.Classes.Ord (Agda.TypeChecking.Rules.LHS.Unify.ShapeView a)
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Monad.Base.MonadTCM Agda.TypeChecking.Rules.LHS.Unify.Unify
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Monad.Exception.MonadException Agda.TypeChecking.Rules.LHS.Unify.UnifyException Agda.TypeChecking.Rules.LHS.Unify.Unify
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Monad.Signature.HasConstInfo Agda.TypeChecking.Rules.LHS.Unify.Unify
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Pretty.PrettyTCM a => Agda.TypeChecking.Pretty.PrettyTCM (Agda.TypeChecking.Rules.LHS.Unify.HomHet a)
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.ApplyHH Agda.Syntax.Internal.Term
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.ApplyHH Agda.Syntax.Internal.Type
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.SubstHH Agda.Syntax.Internal.Term (Agda.TypeChecking.Rules.LHS.Unify.HomHet Agda.Syntax.Internal.Term)
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.SubstHH Agda.Syntax.Internal.Type (Agda.TypeChecking.Rules.LHS.Unify.HomHet Agda.Syntax.Internal.Type)
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.SubstHH a b => Agda.TypeChecking.Rules.LHS.Unify.SubstHH (Agda.Syntax.Internal.Abs a) (Agda.Syntax.Internal.Abs b)
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.SubstHH a b => Agda.TypeChecking.Rules.LHS.Unify.SubstHH (Agda.Syntax.Internal.Arg a) (Agda.Syntax.Internal.Arg b)
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.SubstHH a b => Agda.TypeChecking.Rules.LHS.Unify.SubstHH (Agda.Syntax.Internal.Dom a) (Agda.Syntax.Internal.Dom b)
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.SubstHH a b => Agda.TypeChecking.Rules.LHS.Unify.SubstHH (Agda.Syntax.Internal.Tele a) (Agda.Syntax.Internal.Tele b)
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.UReduce Agda.Syntax.Internal.Term
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.UReduce Agda.Syntax.Internal.Type
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.UReduce a => Agda.TypeChecking.Rules.LHS.Unify.UReduce (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.UReduce a => Agda.TypeChecking.Rules.LHS.Unify.UReduce [a]
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.UReduce t => Agda.TypeChecking.Rules.LHS.Unify.UReduce (Agda.TypeChecking.Rules.LHS.Unify.HomHet t)
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Rules.LHS.Unify.UReduce t => Agda.TypeChecking.Rules.LHS.Unify.UReduce (GHC.Base.Maybe t)
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Substitute.Subst Agda.TypeChecking.Rules.LHS.Unify.Equality
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Substitute.Subst a => Agda.TypeChecking.Substitute.Subst (Agda.TypeChecking.Rules.LHS.Unify.HomHet a)
- Agda.TypeChecking.Rules.LHS.Unify: instance Agda.Utils.Except.Error Agda.TypeChecking.Rules.LHS.Unify.UnifyException
- Agda.TypeChecking.Rules.LHS.Unify: instance Control.Monad.IO.Class.MonadIO Agda.TypeChecking.Rules.LHS.Unify.Unify
- Agda.TypeChecking.Rules.LHS.Unify: instance Control.Monad.Reader.Class.MonadReader Agda.TypeChecking.Monad.Base.TCEnv Agda.TypeChecking.Rules.LHS.Unify.Unify
- Agda.TypeChecking.Rules.LHS.Unify: instance Control.Monad.State.Class.MonadState Agda.TypeChecking.Monad.Base.TCState Agda.TypeChecking.Rules.LHS.Unify.Unify
- Agda.TypeChecking.Rules.LHS.Unify: instance Control.Monad.Writer.Class.MonadWriter Agda.TypeChecking.Rules.LHS.Unify.UnifyOutput Agda.TypeChecking.Rules.LHS.Unify.Unify
- Agda.TypeChecking.Rules.LHS.Unify: instance Data.Foldable.Foldable Agda.TypeChecking.Rules.LHS.Unify.HomHet
- Agda.TypeChecking.Rules.LHS.Unify: instance Data.Traversable.Traversable Agda.TypeChecking.Rules.LHS.Unify.HomHet
- Agda.TypeChecking.Rules.LHS.Unify: instance GHC.Base.Applicative Agda.TypeChecking.Rules.LHS.Unify.Unify
- Agda.TypeChecking.Rules.LHS.Unify: instance GHC.Base.Functor Agda.TypeChecking.Rules.LHS.Unify.HomHet
- Agda.TypeChecking.Rules.LHS.Unify: instance GHC.Base.Functor Agda.TypeChecking.Rules.LHS.Unify.ShapeView
- Agda.TypeChecking.Rules.LHS.Unify: instance GHC.Base.Functor Agda.TypeChecking.Rules.LHS.Unify.Unify
- Agda.TypeChecking.Rules.LHS.Unify: instance GHC.Base.Monad Agda.TypeChecking.Rules.LHS.Unify.Unify
- Agda.TypeChecking.Rules.LHS.Unify: instance GHC.Base.Monoid Agda.TypeChecking.Rules.LHS.Unify.Unifiable
- Agda.TypeChecking.Rules.LHS.Unify: instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.TypeChecking.Rules.LHS.Unify.HomHet a)
- Agda.TypeChecking.Rules.LHS.Unify: instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.TypeChecking.Rules.LHS.Unify.HomHet a)
- Agda.TypeChecking.Rules.LHS.Unify: instance GHC.Show.Show a => GHC.Show.Show (Agda.TypeChecking.Rules.LHS.Unify.HomHet a)
- Agda.TypeChecking.Rules.LHS.Unify: instance GHC.Show.Show a => GHC.Show.Show (Agda.TypeChecking.Rules.LHS.Unify.ShapeView a)
- Agda.TypeChecking.Rules.LHS.Unify: isEtaRecordTypeHH :: MonadTCM tcm => TypeHH -> tcm (Maybe (QName, HomHet Args))
- Agda.TypeChecking.Rules.LHS.Unify: isHom :: HomHet a -> Bool
- Agda.TypeChecking.Rules.LHS.Unify: leftHH :: HomHet a -> a
- Agda.TypeChecking.Rules.LHS.Unify: makeHom :: TypeHH -> TCM (Maybe Type)
- Agda.TypeChecking.Rules.LHS.Unify: makeSubstitution :: Sub -> Substitution
- Agda.TypeChecking.Rules.LHS.Unify: modSub :: (Sub -> Sub) -> Unify ()
- Agda.TypeChecking.Rules.LHS.Unify: newtype Unify a
- Agda.TypeChecking.Rules.LHS.Unify: noPostponing :: Unify a -> Unify a
- Agda.TypeChecking.Rules.LHS.Unify: occursCheck :: Nat -> Term -> Type -> Unify ()
- Agda.TypeChecking.Rules.LHS.Unify: projectionMismatch :: QName -> QName -> Unify a
- Agda.TypeChecking.Rules.LHS.Unify: reportPostponing :: Unify ()
- Agda.TypeChecking.Rules.LHS.Unify: rightHH :: HomHet a -> a
- Agda.TypeChecking.Rules.LHS.Unify: shapeView :: Type -> Unify (Type, ShapeView Type)
- Agda.TypeChecking.Rules.LHS.Unify: shapeViewHH :: TypeHH -> Unify (TypeHH, ShapeView TypeHH)
- Agda.TypeChecking.Rules.LHS.Unify: substHH :: SubstHH t tHH => TermHH -> t -> tHH
- Agda.TypeChecking.Rules.LHS.Unify: substUnderHH :: SubstHH t tHH => Nat -> TermHH -> t -> tHH
- Agda.TypeChecking.Rules.LHS.Unify: takeEqualities :: Unify [Equality]
- Agda.TypeChecking.Rules.LHS.Unify: telViewUpToHH :: Int -> TypeHH -> Unify TelViewHH
- Agda.TypeChecking.Rules.LHS.Unify: trivialHH :: SubstHH t tHH => t -> tHH
- Agda.TypeChecking.Rules.LHS.Unify: tryHom :: TypeHH -> Term -> Term -> TCM TermHH
- Agda.TypeChecking.Rules.LHS.Unify: type ArgsHH = HomHet Args
- Agda.TypeChecking.Rules.LHS.Unify: type Sub = IntMap Term
- Agda.TypeChecking.Rules.LHS.Unify: type TelHH = Tele (Dom TypeHH)
- Agda.TypeChecking.Rules.LHS.Unify: type TelViewHH = TelV TypeHH
- Agda.TypeChecking.Rules.LHS.Unify: type TermHH = HomHet Term
- Agda.TypeChecking.Rules.LHS.Unify: type TypeHH = HomHet Type
- Agda.TypeChecking.Rules.LHS.Unify: type UnifyEnv = UnifyMayPostpone
- Agda.TypeChecking.Rules.LHS.Unify: type UnifyOutput = Unifiable
- Agda.TypeChecking.Rules.LHS.Unify: ureduce :: UReduce t => t -> Unify t
- Agda.TypeChecking.Rules.Term: class ConvColor a i
- Agda.TypeChecking.Rules.Term: convColor :: ConvColor a i => a -> i
- Agda.TypeChecking.Rules.Term: instance Agda.TypeChecking.Rules.Term.ConvColor (Agda.Syntax.Abstract.Arg e) (Agda.Syntax.Internal.Arg e)
- Agda.TypeChecking.Rules.Term: instance Agda.TypeChecking.Rules.Term.ConvColor (Agda.Syntax.Abstract.Dom e) (Agda.Syntax.Internal.Dom e)
- Agda.TypeChecking.Rules.Term: instance Agda.TypeChecking.Rules.Term.ConvColor Agda.Syntax.Abstract.ArgInfo Agda.Syntax.Internal.ArgInfo
- Agda.TypeChecking.Rules.Term: instance Agda.TypeChecking.Rules.Term.ConvColor a i => Agda.TypeChecking.Rules.Term.ConvColor [a] [i]
- Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Expr
- Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.LamBinding
- Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.LetBinding
- Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Pattern
- Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.TypedBinding
- Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.TypedBindings
- Agda.TypeChecking.Serialise.Instances.Common: instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj c) => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.Arg c a)
- Agda.TypeChecking.Serialise.Instances.Common: instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj c) => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.Dom c a)
- Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Position.Interval
- Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Position.Position
- Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj c => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.ArgInfo c)
- Agda.TypeChecking.SizedTypes: canonicalizeSizeConstraint :: SizeConstraint -> Maybe SizeConstraint
- Agda.TypeChecking.SizedTypes: computeSizeConstraint :: Constraint -> TCM (Maybe SizeConstraint)
- Agda.TypeChecking.SizedTypes: computeSizeConstraints :: [Closure Constraint] -> TCM [SizeConstraint]
- Agda.TypeChecking.SizedTypes: data SizeConstraint
- Agda.TypeChecking.SizedTypes: data SizeExpr
- Agda.TypeChecking.SizedTypes: instance GHC.Classes.Eq Agda.TypeChecking.SizedTypes.SizeExpr
- Agda.TypeChecking.SizedTypes: instance GHC.Show.Show Agda.TypeChecking.SizedTypes.SizeConstraint
- Agda.TypeChecking.SizedTypes: instance GHC.Show.Show Agda.TypeChecking.SizedTypes.SizeExpr
- Agda.TypeChecking.SizedTypes: sizeExpr :: Term -> TCM (SizeExpr, Int)
- Agda.TypeChecking.SizedTypes: solveSizeConstraints :: TCM ()
- Agda.TypeChecking.SizedTypes.Solve: instance Agda.TypeChecking.Substitute.Subst (Agda.TypeChecking.SizedTypes.Syntax.SizeExpr' Agda.TypeChecking.SizedTypes.Solve.NamedRigid Agda.TypeChecking.SizedTypes.Solve.SizeMeta)
- Agda.TypeChecking.SizedTypes.Solve: instance Agda.TypeChecking.Substitute.Subst Agda.TypeChecking.SizedTypes.Solve.SizeConstraint
- Agda.TypeChecking.SizedTypes.Solve: instance Agda.TypeChecking.Substitute.Subst Agda.TypeChecking.SizedTypes.Solve.SizeMeta
- Agda.TypeChecking.SizedTypes.Syntax: instance GHC.Classes.Ord flex => Agda.TypeChecking.SizedTypes.Syntax.Flexs flex (Agda.TypeChecking.SizedTypes.Syntax.SizeExpr' rigid flex)
- Agda.TypeChecking.SizedTypes.WarshallSolver: instance (GHC.Show.Show r, GHC.Show.Show f, GHC.Show.Show a, GHC.Classes.Ord r, GHC.Classes.Ord f, Agda.TypeChecking.SizedTypes.Utils.Dioid a) => Agda.TypeChecking.SizedTypes.Utils.Dioid (Agda.TypeChecking.SizedTypes.WarshallSolver.Edge' r f a)
- Agda.TypeChecking.SizedTypes.WarshallSolver: instance (GHC.Show.Show r, GHC.Show.Show f, GHC.Show.Show a, GHC.Classes.Ord r, GHC.Classes.Ord f, Agda.TypeChecking.SizedTypes.Utils.MeetSemiLattice a) => Agda.TypeChecking.SizedTypes.Utils.MeetSemiLattice (Agda.TypeChecking.SizedTypes.WarshallSolver.Edge' r f a)
- Agda.TypeChecking.Substitute: data Substitution
- Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst a, Agda.TypeChecking.Substitute.Subst b) => Agda.TypeChecking.Substitute.Subst (a, b)
- Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst a, Agda.TypeChecking.Substitute.Subst b, Agda.TypeChecking.Substitute.Subst c) => Agda.TypeChecking.Substitute.Subst (a, b, c)
- Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst a, Agda.TypeChecking.Substitute.Subst b, Agda.TypeChecking.Substitute.Subst c, Agda.TypeChecking.Substitute.Subst d) => Agda.TypeChecking.Substitute.Subst (a, b, c, d)
- Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst a, GHC.Classes.Eq a) => GHC.Classes.Eq (Agda.Syntax.Internal.Abs a)
- Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst a, GHC.Classes.Eq a) => GHC.Classes.Eq (Agda.Syntax.Internal.Elim' a)
- Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst a, GHC.Classes.Eq a) => GHC.Classes.Eq (Agda.Syntax.Internal.Tele a)
- Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst a, GHC.Classes.Ord a) => GHC.Classes.Ord (Agda.Syntax.Internal.Abs a)
- Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst a, GHC.Classes.Ord a) => GHC.Classes.Ord (Agda.Syntax.Internal.Elim' a)
- Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst a, GHC.Classes.Ord a) => GHC.Classes.Ord (Agda.Syntax.Internal.Tele a)
- Agda.TypeChecking.Substitute: instance (GHC.Classes.Eq a, Agda.TypeChecking.Substitute.Subst a) => GHC.Classes.Eq (Agda.TypeChecking.Substitute.TelV a)
- Agda.TypeChecking.Substitute: instance (GHC.Classes.Ord a, Agda.TypeChecking.Substitute.Subst a) => GHC.Classes.Ord (Agda.TypeChecking.Substitute.TelV a)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Apply Agda.Syntax.Internal.Type
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst ()
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Abstract.Name.Name
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Clause
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.ClauseBody
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.ConPatternInfo
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Level
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.LevelAtom
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Pattern
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.PlusLevel
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Sort
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Substitution
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.TypeChecking.Monad.Base.Constraint
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.TypeChecking.Monad.Base.DisplayForm
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.TypeChecking.Monad.Base.DisplayTerm
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.TypeChecking.Monad.Base.NLPat
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst GHC.Base.String
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst GHC.Types.Bool
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst a => Agda.TypeChecking.Substitute.Apply (Agda.Syntax.Internal.Tele a)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst a => Agda.TypeChecking.Substitute.Subst (Agda.Syntax.Common.Named name a)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst a => Agda.TypeChecking.Substitute.Subst (Agda.Syntax.Internal.Abs a)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst a => Agda.TypeChecking.Substitute.Subst (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst a => Agda.TypeChecking.Substitute.Subst (Agda.Syntax.Internal.Dom a)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst a => Agda.TypeChecking.Substitute.Subst (Agda.Syntax.Internal.Elim' a)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst a => Agda.TypeChecking.Substitute.Subst (Agda.Syntax.Internal.Tele a)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst a => Agda.TypeChecking.Substitute.Subst (Agda.Syntax.Internal.Type' a)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst a => Agda.TypeChecking.Substitute.Subst (Agda.Utils.Pointer.Ptr a)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst a => Agda.TypeChecking.Substitute.Subst (GHC.Base.Maybe a)
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst a => Agda.TypeChecking.Substitute.Subst [a]
- Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst t => Agda.TypeChecking.Substitute.Subst (Agda.Syntax.Internal.Blocked t)
- Agda.TypeChecking.Substitute: instance GHC.Classes.Eq Agda.Syntax.Internal.Substitution
- Agda.TypeChecking.Substitute: instance GHC.Classes.Ord Agda.Syntax.Internal.Substitution
- Agda.TypeChecking.SyntacticEquality: instance (Agda.TypeChecking.Substitute.Subst a, Agda.TypeChecking.SyntacticEquality.SynEq a) => Agda.TypeChecking.SyntacticEquality.SynEq (Agda.Syntax.Internal.Abs a)
- Agda.TypeChecking.SyntacticEquality: instance (Agda.TypeChecking.SyntacticEquality.SynEq a, Agda.TypeChecking.SyntacticEquality.SynEq c) => Agda.TypeChecking.SyntacticEquality.SynEq (Agda.Syntax.Common.Arg c a)
- Agda.TypeChecking.SyntacticEquality: instance (Agda.TypeChecking.SyntacticEquality.SynEq a, Agda.TypeChecking.SyntacticEquality.SynEq c) => Agda.TypeChecking.SyntacticEquality.SynEq (Agda.Syntax.Common.Dom c a)
- Agda.TypeChecking.SyntacticEquality: instance Agda.TypeChecking.SyntacticEquality.SynEq c => Agda.TypeChecking.SyntacticEquality.SynEq (Agda.Syntax.Common.ArgInfo c)
- Agda.TypeChecking.Test.Generators: instance (Agda.TypeChecking.Test.Generators.GenC c, Agda.TypeChecking.Test.Generators.GenC a) => Agda.TypeChecking.Test.Generators.GenC (Agda.Syntax.Common.Arg c a)
- Agda.TypeChecking.Test.Generators: instance (Agda.TypeChecking.Test.Generators.GenC c, Agda.TypeChecking.Test.Generators.GenC a) => Agda.TypeChecking.Test.Generators.GenC (Agda.Syntax.Common.Dom c a)
- Agda.TypeChecking.Test.Generators: instance Agda.TypeChecking.Test.Generators.KillVar a => Agda.TypeChecking.Test.Generators.KillVar (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.Test.Generators: instance Agda.TypeChecking.Test.Generators.KillVar a => Agda.TypeChecking.Test.Generators.KillVar (Agda.Syntax.Internal.Dom a)
- Agda.TypeChecking.Test.Generators: instance Agda.TypeChecking.Test.Generators.ShrinkC a b => Agda.TypeChecking.Test.Generators.ShrinkC (Agda.Syntax.Internal.Arg a) (Agda.Syntax.Internal.Arg b)
- Agda.TypeChecking.Test.Generators: instance Agda.TypeChecking.Test.Generators.ShrinkC a b => Agda.TypeChecking.Test.Generators.ShrinkC (Agda.Syntax.Internal.Dom a) (Agda.Syntax.Internal.Dom b)
- Agda.TypeChecking.Unquote: UnQFun :: Type -> [Clause] -> UnquotedFunDef
- Agda.TypeChecking.Unquote: data UnquotedFunDef
- Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Internal.ArgInfo
- Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Internal.Clause
- Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Internal.ConHead
- Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Internal.Level
- Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Internal.Pattern
- Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Internal.Sort
- Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Internal.Term
- Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Internal.Type
- Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.TypeChecking.Unquote.UnquotedFunDef
- Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote a => Agda.TypeChecking.Unquote.Unquote (Agda.Syntax.Internal.Abs a)
- Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote a => Agda.TypeChecking.Unquote.Unquote (Agda.Syntax.Internal.Arg a)
- Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote a => Agda.TypeChecking.Unquote.Unquote (Agda.Syntax.Internal.Elim' a)
- Agda.TypeChecking.Unquote: reifyUnquoted :: Reify a e => a -> TCM e
- Agda.Utils.BiMap: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Classes.Ord a, GHC.Classes.Ord b) => GHC.Show.Show (Agda.Utils.BiMap.BiMap a b)
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: allPaths :: (SemiRing e, Ord n, Ord c) => (e -> c) -> n -> n -> Graph n n e -> [e]
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: findPath :: (SemiRing e, Ord n) => (e -> Bool) -> n -> n -> Graph n n e -> Maybe e
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: instance (GHC.Classes.Ord n, Agda.Utils.SemiRing.SemiRing e, Test.QuickCheck.Arbitrary.Arbitrary n, Test.QuickCheck.Arbitrary.Arbitrary e) => Test.QuickCheck.Arbitrary.Arbitrary (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Graph n n e)
- Agda.Utils.Graph.AdjacencyMap.Unidirectional.Tests: instance Agda.Utils.SemiRing.SemiRing Agda.Utils.Graph.AdjacencyMap.Unidirectional.Tests.ExtendedNatural
- Agda.Utils.Graph.AdjacencyMap.Unidirectional.Tests: instance Agda.Utils.SemiRing.StarSemiRing Agda.Utils.Graph.AdjacencyMap.Unidirectional.Tests.ExtendedNatural
- Agda.Utils.Graph.AdjacencyMap.Unidirectional.Tests: instance GHC.Classes.Eq Agda.Utils.Graph.AdjacencyMap.Unidirectional.Tests.ExtendedNatural
- Agda.Utils.Graph.AdjacencyMap.Unidirectional.Tests: instance GHC.Classes.Ord Agda.Utils.Graph.AdjacencyMap.Unidirectional.Tests.ExtendedNatural
- Agda.Utils.Graph.AdjacencyMap.Unidirectional.Tests: instance GHC.Show.Show Agda.Utils.Graph.AdjacencyMap.Unidirectional.Tests.ExtendedNatural
- Agda.Utils.HashMap: alter :: (Eq k, Hashable k) => (Maybe a -> Maybe a) -> k -> HashMap k a -> HashMap k a
- Agda.Utils.HashMap: mapMaybe :: (a -> Maybe b) -> HashMap k a -> HashMap k b
- Agda.Utils.List: prop_uniqOn :: [Integer] -> Bool
- Agda.Utils.ReadP: (+++) :: ReadP t a -> ReadP t a -> ReadP t a
- Agda.Utils.ReadP: (<++) :: ReadP t a -> ReadP t a -> ReadP t a
- Agda.Utils.ReadP: between :: ReadP t open -> ReadP t close -> ReadP t a -> ReadP t a
- Agda.Utils.ReadP: chainl :: ReadP t a -> ReadP t (a -> a -> a) -> a -> ReadP t a
- Agda.Utils.ReadP: chainl1 :: ReadP t a -> ReadP t (a -> a -> a) -> ReadP t a
- Agda.Utils.ReadP: chainr :: ReadP t a -> ReadP t (a -> a -> a) -> a -> ReadP t a
- Agda.Utils.ReadP: chainr1 :: ReadP t a -> ReadP t (a -> a -> a) -> ReadP t a
- Agda.Utils.ReadP: char :: Eq t => t -> ReadP t t
- Agda.Utils.ReadP: choice :: [ReadP t a] -> ReadP t a
- Agda.Utils.ReadP: count :: Int -> ReadP t a -> ReadP t [a]
- Agda.Utils.ReadP: data ReadP t a
- Agda.Utils.ReadP: endBy :: ReadP t a -> ReadP t sep -> ReadP t [a]
- Agda.Utils.ReadP: endBy1 :: ReadP t a -> ReadP t sep -> ReadP t [a]
- Agda.Utils.ReadP: gather :: ReadP t a -> ReadP t ([t], a)
- Agda.Utils.ReadP: get :: ReadP t t
- Agda.Utils.ReadP: instance GHC.Base.Alternative (Agda.Utils.ReadP.P t)
- Agda.Utils.ReadP: instance GHC.Base.Alternative (Agda.Utils.ReadP.ReadP t)
- Agda.Utils.ReadP: instance GHC.Base.Applicative (Agda.Utils.ReadP.P t)
- Agda.Utils.ReadP: instance GHC.Base.Applicative (Agda.Utils.ReadP.ReadP t)
- Agda.Utils.ReadP: instance GHC.Base.Functor (Agda.Utils.ReadP.P t)
- Agda.Utils.ReadP: instance GHC.Base.Functor (Agda.Utils.ReadP.ReadP t)
- Agda.Utils.ReadP: instance GHC.Base.Monad (Agda.Utils.ReadP.P t)
- Agda.Utils.ReadP: instance GHC.Base.Monad (Agda.Utils.ReadP.ReadP t)
- Agda.Utils.ReadP: instance GHC.Base.MonadPlus (Agda.Utils.ReadP.P t)
- Agda.Utils.ReadP: instance GHC.Base.MonadPlus (Agda.Utils.ReadP.ReadP t)
- Agda.Utils.ReadP: look :: ReadP t [t]
- Agda.Utils.ReadP: many :: ReadP t a -> ReadP t [a]
- Agda.Utils.ReadP: many1 :: ReadP t a -> ReadP t [a]
- Agda.Utils.ReadP: manyTill :: ReadP t a -> ReadP t end -> ReadP t [a]
- Agda.Utils.ReadP: munch :: (t -> Bool) -> ReadP t [t]
- Agda.Utils.ReadP: munch1 :: (t -> Bool) -> ReadP t [t]
- Agda.Utils.ReadP: option :: a -> ReadP t a -> ReadP t a
- Agda.Utils.ReadP: optional :: ReadP t a -> ReadP t ()
- Agda.Utils.ReadP: parse :: ReadP t a -> [t] -> [a]
- Agda.Utils.ReadP: parse' :: ReadP t a -> [t] -> Either a [t]
- Agda.Utils.ReadP: pfail :: ReadP t a
- Agda.Utils.ReadP: satisfy :: (t -> Bool) -> ReadP t t
- Agda.Utils.ReadP: sepBy :: ReadP t a -> ReadP t sep -> ReadP t [a]
- Agda.Utils.ReadP: sepBy1 :: ReadP t a -> ReadP t sep -> ReadP t [a]
- Agda.Utils.ReadP: skipMany :: ReadP t a -> ReadP t ()
- Agda.Utils.ReadP: skipMany1 :: ReadP t a -> ReadP t ()
- Agda.Utils.ReadP: skipSpaces :: ReadP Char ()
- Agda.Utils.ReadP: string :: Eq t => [t] -> ReadP t [t]
+ Agda.Benchmarking: CheckLHS :: Phase
+ Agda.Benchmarking: DeadCode :: Phase
+ Agda.Benchmarking: UnifyIndices :: Phase
+ Agda.Compiler.Common: IsMain :: IsMain
+ Agda.Compiler.Common: NotMain :: IsMain
+ Agda.Compiler.Common: compileDir :: TCM FilePath
+ Agda.Compiler.Common: conArityAndPars :: QName -> TCM (Nat, Nat)
+ Agda.Compiler.Common: curDefs :: TCM Definitions
+ Agda.Compiler.Common: curIF :: TCM Interface
+ Agda.Compiler.Common: curMName :: TCM ModuleName
+ Agda.Compiler.Common: curSig :: TCM Signature
+ Agda.Compiler.Common: data IsMain
+ Agda.Compiler.Common: doCompile :: IsMain -> Interface -> (IsMain -> Interface -> TCM ()) -> TCM ()
+ Agda.Compiler.Common: inCompilerEnv :: Interface -> TCM a -> TCM a
+ Agda.Compiler.Common: instance GHC.Classes.Eq Agda.Compiler.Common.IsMain
+ Agda.Compiler.Common: repl :: [String] -> String -> String
+ Agda.Compiler.Common: setInterface :: Interface -> TCM ()
+ Agda.Compiler.Common: sigMName :: Signature -> ModuleName
+ Agda.Compiler.Common: sortDefs :: Definitions -> [(QName, Definition)]
+ Agda.Compiler.Common: topLevelModuleName :: ModuleName -> TCM ModuleName
+ Agda.Compiler.Epic.Injection: instance Agda.Compiler.Epic.Injection.Injectible a => Agda.Compiler.Epic.Injection.Injectible (Agda.Syntax.Common.Arg a)
+ Agda.Compiler.Epic.Static: instance Agda.Compiler.Epic.Static.Evaluate a => Agda.Compiler.Epic.Static.Evaluate (Agda.Syntax.Common.Arg a)
+ Agda.Compiler.MAlonzo.Compiler: alt :: Int -> TAlt -> CC Alt
+ Agda.Compiler.MAlonzo.Compiler: compilePrim :: TPrim -> Exp
+ Agda.Compiler.MAlonzo.Compiler: copyRTEModules :: TCM ()
+ Agda.Compiler.MAlonzo.Compiler: freshNames :: Int -> ([Name] -> CC a) -> CC a
+ Agda.Compiler.MAlonzo.Compiler: hsCastApp :: Exp -> Exp
+ Agda.Compiler.MAlonzo.Compiler: litString :: String -> Exp
+ Agda.Compiler.MAlonzo.Misc: dname :: QName -> Name
+ Agda.Compiler.MAlonzo.Misc: duname :: QName -> Name
+ Agda.Compiler.MAlonzo.Misc: fakeDecl :: String -> Decl
+ Agda.Compiler.MAlonzo.Misc: hsAppView :: Exp -> [Exp]
+ Agda.Compiler.MAlonzo.Misc: hsInt :: Integer -> Exp
+ Agda.Compiler.MAlonzo.Misc: hsLambda :: [Pat] -> Exp -> Exp
+ Agda.Compiler.MAlonzo.Misc: hsLet :: Name -> Exp -> Exp -> Exp
+ Agda.Compiler.MAlonzo.Misc: hsMapAlt :: (Exp -> Exp) -> Alt -> Alt
+ Agda.Compiler.MAlonzo.Misc: hsMapRHS :: (Exp -> Exp) -> Rhs -> Rhs
+ Agda.Compiler.MAlonzo.Misc: hsName :: String -> QName
+ Agda.Compiler.MAlonzo.Misc: hsOpToExp :: QOp -> Exp
+ Agda.Compiler.MAlonzo.Misc: hsPrimOp :: String -> QOp
+ Agda.Compiler.MAlonzo.Misc: hsPrimOpApp :: String -> Exp -> Exp -> Exp
+ Agda.Compiler.MAlonzo.Misc: hsTypedInt :: Integer -> Exp
+ Agda.Compiler.MAlonzo.Misc: hspLet :: Pat -> Exp -> Exp -> Exp
+ Agda.Compiler.MAlonzo.Misc: mazCoerceName :: String
+ Agda.Compiler.MAlonzo.Misc: mazErasedName :: String
+ Agda.Compiler.MAlonzo.Misc: mazUnreachableError :: Exp
+ Agda.Compiler.MAlonzo.Misc: rtmUnreachableError :: Exp
+ Agda.Compiler.MAlonzo.Primitives: noCheckCover :: QName -> TCM Bool
+ Agda.Compiler.ToTreeless: closedTermToTreeless :: Term -> TCM TTerm
+ Agda.Compiler.ToTreeless: toTreeless :: QName -> TCM (Maybe TTerm)
+ Agda.Compiler.Treeless.Builtin: translateBuiltins :: TTerm -> TCM TTerm
+ Agda.Compiler.Treeless.Compare: equalTerms :: TTerm -> TTerm -> Bool
+ Agda.Compiler.Treeless.Erase: eraseTerms :: QName -> TTerm -> TCM TTerm
+ Agda.Compiler.Treeless.Erase: instance GHC.Classes.Eq Agda.Compiler.Treeless.Erase.TypeInfo
+ Agda.Compiler.Treeless.Erase: instance GHC.Show.Show Agda.Compiler.Treeless.Erase.TypeInfo
+ Agda.Compiler.Treeless.GuardsToPrims: convertGuards :: TTerm -> TTerm
+ Agda.Compiler.Treeless.NormalizeNames: normalizeNames :: TTerm -> TCM TTerm
+ Agda.Compiler.Treeless.Pretty: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Treeless.TTerm
+ Agda.Compiler.Treeless.Simplify: instance GHC.Classes.Eq Agda.Compiler.Treeless.Simplify.Atom
+ Agda.Compiler.Treeless.Simplify: instance GHC.Classes.Ord Agda.Compiler.Treeless.Simplify.Atom
+ Agda.Compiler.Treeless.Simplify: instance GHC.Show.Show Agda.Compiler.Treeless.Simplify.Atom
+ Agda.Compiler.Treeless.Simplify: simplifyTTerm :: TTerm -> TCM TTerm
+ Agda.Compiler.Treeless.Subst: Binder :: Int -> a -> Binder a
+ Agda.Compiler.Treeless.Subst: InSeq :: a -> InSeq a
+ Agda.Compiler.Treeless.Subst: Occurs :: Int -> UnderLambda -> SeqArg -> Occurs
+ Agda.Compiler.Treeless.Subst: SeqArg :: All -> SeqArg
+ Agda.Compiler.Treeless.Subst: UnderLambda :: Any -> UnderLambda
+ Agda.Compiler.Treeless.Subst: class HasFree a
+ Agda.Compiler.Treeless.Subst: data Binder a
+ Agda.Compiler.Treeless.Subst: data Occurs
+ Agda.Compiler.Treeless.Subst: freeIn :: HasFree a => Int -> a -> Bool
+ Agda.Compiler.Treeless.Subst: freeVars :: HasFree a => a -> Map Int Occurs
+ Agda.Compiler.Treeless.Subst: inSeq :: Occurs -> Occurs
+ Agda.Compiler.Treeless.Subst: instance (Agda.Compiler.Treeless.Subst.HasFree a, Agda.Compiler.Treeless.Subst.HasFree b) => Agda.Compiler.Treeless.Subst.HasFree (a, b)
+ Agda.Compiler.Treeless.Subst: instance Agda.Compiler.Treeless.Subst.HasFree Agda.Syntax.Treeless.TAlt
+ Agda.Compiler.Treeless.Subst: instance Agda.Compiler.Treeless.Subst.HasFree Agda.Syntax.Treeless.TTerm
+ Agda.Compiler.Treeless.Subst: instance Agda.Compiler.Treeless.Subst.HasFree GHC.Types.Int
+ Agda.Compiler.Treeless.Subst: instance Agda.Compiler.Treeless.Subst.HasFree a => Agda.Compiler.Treeless.Subst.HasFree (Agda.Compiler.Treeless.Subst.Binder a)
+ Agda.Compiler.Treeless.Subst: instance Agda.Compiler.Treeless.Subst.HasFree a => Agda.Compiler.Treeless.Subst.HasFree (Agda.Compiler.Treeless.Subst.InSeq a)
+ Agda.Compiler.Treeless.Subst: instance Agda.Compiler.Treeless.Subst.HasFree a => Agda.Compiler.Treeless.Subst.HasFree [a]
+ Agda.Compiler.Treeless.Subst: instance Agda.TypeChecking.Substitute.DeBruijn Agda.Syntax.Treeless.TTerm
+ Agda.Compiler.Treeless.Subst: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Treeless.TTerm Agda.Syntax.Treeless.TAlt
+ Agda.Compiler.Treeless.Subst: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Treeless.TTerm Agda.Syntax.Treeless.TTerm
+ Agda.Compiler.Treeless.Subst: instance GHC.Base.Monoid Agda.Compiler.Treeless.Subst.Occurs
+ Agda.Compiler.Treeless.Subst: instance GHC.Base.Monoid Agda.Compiler.Treeless.Subst.SeqArg
+ Agda.Compiler.Treeless.Subst: instance GHC.Base.Monoid Agda.Compiler.Treeless.Subst.UnderLambda
+ Agda.Compiler.Treeless.Subst: instance GHC.Classes.Eq Agda.Compiler.Treeless.Subst.Occurs
+ Agda.Compiler.Treeless.Subst: instance GHC.Classes.Eq Agda.Compiler.Treeless.Subst.SeqArg
+ Agda.Compiler.Treeless.Subst: instance GHC.Classes.Eq Agda.Compiler.Treeless.Subst.UnderLambda
+ Agda.Compiler.Treeless.Subst: instance GHC.Classes.Ord Agda.Compiler.Treeless.Subst.Occurs
+ Agda.Compiler.Treeless.Subst: instance GHC.Classes.Ord Agda.Compiler.Treeless.Subst.SeqArg
+ Agda.Compiler.Treeless.Subst: instance GHC.Classes.Ord Agda.Compiler.Treeless.Subst.UnderLambda
+ Agda.Compiler.Treeless.Subst: instance GHC.Show.Show Agda.Compiler.Treeless.Subst.Occurs
+ Agda.Compiler.Treeless.Subst: instance GHC.Show.Show Agda.Compiler.Treeless.Subst.SeqArg
+ Agda.Compiler.Treeless.Subst: instance GHC.Show.Show Agda.Compiler.Treeless.Subst.UnderLambda
+ Agda.Compiler.Treeless.Subst: newtype InSeq a
+ Agda.Compiler.Treeless.Subst: newtype SeqArg
+ Agda.Compiler.Treeless.Subst: newtype UnderLambda
+ Agda.Compiler.Treeless.Subst: occursIn :: HasFree a => Int -> a -> Occurs
+ Agda.Compiler.Treeless.Subst: once :: Occurs
+ Agda.Compiler.Treeless.Subst: underLambda :: Occurs -> Occurs
+ Agda.Compiler.Treeless.Uncase: caseToSeq :: Monad m => TTerm -> m TTerm
+ Agda.Compiler.Treeless.Unused: stripUnusedArguments :: [Bool] -> TTerm -> TTerm
+ Agda.Compiler.Treeless.Unused: usedArguments :: QName -> TTerm -> TCM [Bool]
+ Agda.Compiler.UHC.Bridge: class Serialize a
+ Agda.Compiler.UHC.Bridge: ctagCons :: EHCOpts -> CTag
+ Agda.Compiler.UHC.Bridge: ctagFalse :: EHCOpts -> CTag
+ Agda.Compiler.UHC.Bridge: ctagNil :: EHCOpts -> CTag
+ Agda.Compiler.UHC.Bridge: ctagTrue :: EHCOpts -> CTag
+ Agda.Compiler.UHC.Bridge: ctagUnit :: CTag
+ Agda.Compiler.UHC.Bridge: data CAlt
+ Agda.Compiler.UHC.Bridge: data CBind
+ Agda.Compiler.UHC.Bridge: data CDataCon
+ Agda.Compiler.UHC.Bridge: data CDeclMeta
+ Agda.Compiler.UHC.Bridge: data CExport
+ Agda.Compiler.UHC.Bridge: data CExpr
+ Agda.Compiler.UHC.Bridge: data CImport
+ Agda.Compiler.UHC.Bridge: data CModule
+ Agda.Compiler.UHC.Bridge: data CPat
+ Agda.Compiler.UHC.Bridge: data CPatFld
+ Agda.Compiler.UHC.Bridge: data CTag
+ Agda.Compiler.UHC.Bridge: data EHCOpts
+ Agda.Compiler.UHC.Bridge: data HsName
+ Agda.Compiler.UHC.Bridge: defaultEHCOpts :: EHCOpts
+ Agda.Compiler.UHC.Bridge: destructCTag :: a -> (HsName -> HsName -> Int -> Int -> a) -> CTag -> a
+ Agda.Compiler.UHC.Bridge: disp :: PP_Doc -> Int -> ShowS
+ Agda.Compiler.UHC.Bridge: instance Agda.Compiler.UHC.Bridge.PP Agda.Compiler.UHC.Bridge.CExpr
+ Agda.Compiler.UHC.Bridge: instance Agda.Compiler.UHC.Bridge.Serialize Agda.Compiler.UHC.Bridge.CExpr
+ Agda.Compiler.UHC.Bridge: instance Agda.Compiler.UHC.Bridge.Serialize Agda.Compiler.UHC.Bridge.CModule
+ Agda.Compiler.UHC.Bridge: instance Agda.Compiler.UHC.Bridge.Serialize Agda.Compiler.UHC.Bridge.CTag
+ Agda.Compiler.UHC.Bridge: instance Agda.Compiler.UHC.Bridge.Serialize Agda.Compiler.UHC.Bridge.HsName
+ Agda.Compiler.UHC.Bridge: instance GHC.Classes.Eq Agda.Compiler.UHC.Bridge.CExpr
+ Agda.Compiler.UHC.Bridge: instance GHC.Classes.Eq Agda.Compiler.UHC.Bridge.CTag
+ Agda.Compiler.UHC.Bridge: instance GHC.Classes.Eq Agda.Compiler.UHC.Bridge.HsName
+ Agda.Compiler.UHC.Bridge: instance GHC.Classes.Ord Agda.Compiler.UHC.Bridge.CExpr
+ Agda.Compiler.UHC.Bridge: instance GHC.Classes.Ord Agda.Compiler.UHC.Bridge.CTag
+ Agda.Compiler.UHC.Bridge: instance GHC.Classes.Ord Agda.Compiler.UHC.Bridge.HsName
+ Agda.Compiler.UHC.Bridge: instance GHC.Show.Show Agda.Compiler.UHC.Bridge.CExpr
+ Agda.Compiler.UHC.Bridge: instance GHC.Show.Show Agda.Compiler.UHC.Bridge.CTag
+ Agda.Compiler.UHC.Bridge: instance GHC.Show.Show Agda.Compiler.UHC.Bridge.HsName
+ Agda.Compiler.UHC.Bridge: mkAlt :: CPat -> CExpr -> CAlt
+ Agda.Compiler.UHC.Bridge: mkApp :: CExpr -> [CExpr] -> CExpr
+ Agda.Compiler.UHC.Bridge: mkBind1 :: HsName -> CExpr -> CBind
+ Agda.Compiler.UHC.Bridge: mkBind1Nm1 :: HsName -> CBind
+ Agda.Compiler.UHC.Bridge: mkCTag :: HsName -> HsName -> Int -> Int -> CTag
+ Agda.Compiler.UHC.Bridge: mkCase :: CExpr -> [CAlt] -> CExpr
+ Agda.Compiler.UHC.Bridge: mkChar :: Char -> CExpr
+ Agda.Compiler.UHC.Bridge: mkError :: EHCOpts -> String -> CExpr
+ Agda.Compiler.UHC.Bridge: mkExport :: HsName -> CExport
+ Agda.Compiler.UHC.Bridge: mkHsName :: [String] -> String -> HsName
+ Agda.Compiler.UHC.Bridge: mkHsName1 :: String -> HsName
+ Agda.Compiler.UHC.Bridge: mkImport :: HsName -> CImport
+ Agda.Compiler.UHC.Bridge: mkInt :: EHCOpts -> Int -> CExpr
+ Agda.Compiler.UHC.Bridge: mkInteger :: EHCOpts -> Integer -> CExpr
+ Agda.Compiler.UHC.Bridge: mkLam :: [HsName] -> CExpr -> CExpr
+ Agda.Compiler.UHC.Bridge: mkLet1Plain :: HsName -> CExpr -> CExpr -> CExpr
+ Agda.Compiler.UHC.Bridge: mkLet1Strict :: HsName -> CExpr -> CExpr -> CExpr
+ Agda.Compiler.UHC.Bridge: mkLetRec :: [CBind] -> CExpr -> CExpr
+ Agda.Compiler.UHC.Bridge: mkMain :: HsName -> CExpr
+ Agda.Compiler.UHC.Bridge: mkMetaData :: HsName -> [CDataCon] -> CDeclMeta
+ Agda.Compiler.UHC.Bridge: mkMetaDataCon :: HsName -> Int -> Int -> CDataCon
+ Agda.Compiler.UHC.Bridge: mkMetaDataConFromCTag :: CTag -> Maybe CDataCon
+ Agda.Compiler.UHC.Bridge: mkModule :: HsName -> [CExport] -> [CImport] -> [CDeclMeta] -> CExpr -> CModule
+ Agda.Compiler.UHC.Bridge: mkPatCon :: CTag -> CPatRest -> [CPatFld] -> CPat
+ Agda.Compiler.UHC.Bridge: mkPatFldBind :: (HsName, CExpr) -> CBind -> CPatFld
+ Agda.Compiler.UHC.Bridge: mkPatRestEmpty :: CPatRest
+ Agda.Compiler.UHC.Bridge: mkString :: EHCOpts -> String -> CExpr
+ Agda.Compiler.UHC.Bridge: mkTagTup :: CTag -> [CExpr] -> CExpr
+ Agda.Compiler.UHC.Bridge: mkUndefined :: EHCOpts -> CExpr
+ Agda.Compiler.UHC.Bridge: mkUniqueHsName :: String -> [String] -> String -> HsName
+ Agda.Compiler.UHC.Bridge: mkUnit :: EHCOpts -> CExpr
+ Agda.Compiler.UHC.Bridge: mkVar :: HsName -> CExpr
+ Agda.Compiler.UHC.Bridge: parseExpr :: EHCOpts -> String -> Either [String] CExpr
+ Agda.Compiler.UHC.Bridge: pp :: PP a => a -> PP_Doc
+ Agda.Compiler.UHC.Bridge: printModule :: EHCOpts -> CModule -> PP_Doc
+ Agda.Compiler.UHC.Bridge: putPPFile :: String -> PP_Doc -> Int -> IO ()
+ Agda.Compiler.UHC.Bridge: putSerializeFile :: FilePath -> a -> IO ()
+ Agda.Compiler.UHC.Bridge: serialize :: x -> Put
+ Agda.Compiler.UHC.Bridge: type PP_Doc = String
+ Agda.Compiler.UHC.Bridge: uhcBackendEnabled :: Bool
+ Agda.Compiler.UHC.Bridge: unserialize :: Get x
+ Agda.Compiler.UHC.CompileState: addExports :: Monad m => [HsName] -> CompileT m ()
+ Agda.Compiler.UHC.CompileState: addMetaCon :: QName -> CDataCon -> Compile ()
+ Agda.Compiler.UHC.CompileState: addMetaData :: QName -> ([CDataCon] -> CDeclMeta) -> Compile ()
+ Agda.Compiler.UHC.CompileState: conArityAndPars :: QName -> TCM (Nat, Nat)
+ Agda.Compiler.UHC.CompileState: data CompileT m a
+ Agda.Compiler.UHC.CompileState: data CoreMeta
+ Agda.Compiler.UHC.CompileState: dataRecCons :: Defn -> [QName]
+ Agda.Compiler.UHC.CompileState: freshLocalName :: Monad m => CompileT m HsName
+ Agda.Compiler.UHC.CompileState: getConstrCTag :: QName -> Compile CTag
+ Agda.Compiler.UHC.CompileState: getConstrFun :: QName -> Compile HsName
+ Agda.Compiler.UHC.CompileState: getCoreName :: QName -> Compile HsName
+ Agda.Compiler.UHC.CompileState: getCoreName1 :: QName -> TCM HsName
+ Agda.Compiler.UHC.CompileState: getDeclMetas :: Compile [CDeclMeta]
+ Agda.Compiler.UHC.CompileState: getExports :: Compile [CExport]
+ Agda.Compiler.UHC.CompileState: instance Agda.TypeChecking.Monad.Base.MonadTCM m => Agda.TypeChecking.Monad.Base.MonadTCM (Agda.Compiler.UHC.CompileState.CompileT m)
+ Agda.Compiler.UHC.CompileState: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Agda.Compiler.UHC.CompileState.CompileT m)
+ Agda.Compiler.UHC.CompileState: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Agda.Compiler.UHC.CompileState.CompileT m)
+ Agda.Compiler.UHC.CompileState: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Agda.Compiler.UHC.CompileState.CompileT m)
+ Agda.Compiler.UHC.CompileState: instance Control.Monad.Trans.Class.MonadTrans Agda.Compiler.UHC.CompileState.CompileT
+ Agda.Compiler.UHC.CompileState: instance GHC.Base.Functor m => GHC.Base.Functor (Agda.Compiler.UHC.CompileState.CompileT m)
+ Agda.Compiler.UHC.CompileState: instance GHC.Base.Monad m => GHC.Base.Applicative (Agda.Compiler.UHC.CompileState.CompileT m)
+ Agda.Compiler.UHC.CompileState: instance GHC.Base.Monad m => GHC.Base.Monad (Agda.Compiler.UHC.CompileState.CompileT m)
+ Agda.Compiler.UHC.CompileState: instance GHC.Base.Monoid Agda.Compiler.UHC.CompileState.CoreMeta
+ Agda.Compiler.UHC.CompileState: moduleNameToCoreName :: ModuleName -> HsName
+ Agda.Compiler.UHC.CompileState: moduleNameToCoreNameParts :: ModuleName -> [String]
+ Agda.Compiler.UHC.CompileState: runCompileT :: MonadIO m => ModuleName -> CompileT m a -> m a
+ Agda.Compiler.UHC.CompileState: type Compile = CompileT TCM
+ Agda.Compiler.UHC.Compiler: compilerMain :: IsMain -> Interface -> TCM ()
+ Agda.Compiler.UHC.FromAgda: BuiltinKit :: (QName -> Bool) -> (QName -> Bool) -> BuiltinKit
+ Agda.Compiler.UHC.FromAgda: TTEnv :: [HsName] -> TTEnv
+ Agda.Compiler.UHC.FromAgda: [isInt] :: BuiltinKit -> QName -> Bool
+ Agda.Compiler.UHC.FromAgda: [isNat] :: BuiltinKit -> QName -> Bool
+ Agda.Compiler.UHC.FromAgda: [nmEnv] :: TTEnv -> [HsName]
+ Agda.Compiler.UHC.FromAgda: addToEnv :: [HsName] -> TT a -> TT a
+ Agda.Compiler.UHC.FromAgda: buildPrimCases :: CExpr -> CExpr -> [TAlt] -> CExpr -> TT CExpr
+ Agda.Compiler.UHC.FromAgda: builtinKit :: TCM BuiltinKit
+ Agda.Compiler.UHC.FromAgda: compileConAlt :: TAlt -> TT CAlt
+ Agda.Compiler.UHC.FromAgda: compilePrim :: TPrim -> CExpr
+ Agda.Compiler.UHC.FromAgda: compileTerm :: TTerm -> TT CExpr
+ Agda.Compiler.UHC.FromAgda: coreError :: String -> CExpr
+ Agda.Compiler.UHC.FromAgda: createMainModule :: ModuleName -> HsName -> CModule
+ Agda.Compiler.UHC.FromAgda: data BuiltinKit
+ Agda.Compiler.UHC.FromAgda: data TTEnv
+ Agda.Compiler.UHC.FromAgda: defaultBranches :: QName -> [TAlt] -> CExpr -> TT [CAlt]
+ Agda.Compiler.UHC.FromAgda: fromAgdaModule :: ModuleName -> [ModuleName] -> Interface -> TCM CModule
+ Agda.Compiler.UHC.FromAgda: getCTagArity :: CTag -> Int
+ Agda.Compiler.UHC.FromAgda: litToCore :: Literal -> CExpr
+ Agda.Compiler.UHC.FromAgda: makeConAlt :: QName -> ([HsName] -> TT CExpr) -> TT CAlt
+ Agda.Compiler.UHC.FromAgda: mkIfThenElse :: CExpr -> CExpr -> CExpr -> CExpr
+ Agda.Compiler.UHC.FromAgda: opts :: EHCOpts
+ Agda.Compiler.UHC.FromAgda: runTT :: TT a -> Compile a
+ Agda.Compiler.UHC.FromAgda: translateDefn :: (QName, Definition) -> Compile [CBind]
+ Agda.Compiler.UHC.FromAgda: type TT = ReaderT TTEnv Compile
+ Agda.Compiler.UHC.MagicTypes: HsDataType :: HsName -> HsDataType
+ Agda.Compiler.UHC.MagicTypes: HsUnit :: HsDataType
+ Agda.Compiler.UHC.MagicTypes: builtinUnitCtor :: HsName
+ Agda.Compiler.UHC.MagicTypes: data HsDataType
+ Agda.Compiler.UHC.MagicTypes: getMagicTypes :: MagicTypeInfo
+ Agda.Compiler.UHC.MagicTypes: type MagicConstrInfo = Map MagicName CTag
+ Agda.Compiler.UHC.MagicTypes: type MagicName = String
+ Agda.Compiler.UHC.MagicTypes: type MagicTypeInfo = Map MagicName (HsDataType, MagicConstrInfo)
+ Agda.Compiler.UHC.Pragmas.Base: CCMagic :: MagicName -> MagicName -> CoreConstr
+ Agda.Compiler.UHC.Pragmas.Base: CCNormal :: HsName -> HsName -> Int -> CoreConstr
+ Agda.Compiler.UHC.Pragmas.Base: CTMagic :: MagicName -> CoreType
+ Agda.Compiler.UHC.Pragmas.Base: CTNormal :: String -> CoreType
+ Agda.Compiler.UHC.Pragmas.Base: coreConstrToCTag :: CoreConstr -> Int -> CTag
+ Agda.Compiler.UHC.Pragmas.Base: data CoreConstr
+ Agda.Compiler.UHC.Pragmas.Base: data CoreType
+ Agda.Compiler.UHC.Pragmas.Base: data HsName
+ Agda.Compiler.UHC.Pragmas.Base: instance GHC.Classes.Eq Agda.Compiler.UHC.Pragmas.Base.CoreConstr
+ Agda.Compiler.UHC.Pragmas.Base: instance GHC.Classes.Eq Agda.Compiler.UHC.Pragmas.Base.CoreType
+ Agda.Compiler.UHC.Pragmas.Base: instance GHC.Show.Show Agda.Compiler.UHC.Pragmas.Base.CoreConstr
+ Agda.Compiler.UHC.Pragmas.Base: instance GHC.Show.Show Agda.Compiler.UHC.Pragmas.Base.CoreType
+ Agda.Compiler.UHC.Pragmas.Base: setTag :: CoreConstr -> Int -> CoreConstr
+ Agda.Compiler.UHC.Pragmas.Base: type CoreExpr = String
+ Agda.Compiler.UHC.Pragmas.Parse: coreExprToCExpr :: CoreExpr -> Either String CExpr
+ Agda.Compiler.UHC.Pragmas.Parse: parseCoreConstrs :: MonadTCM m => CoreType -> [String] -> m [CoreConstr]
+ Agda.Compiler.UHC.Pragmas.Parse: parseCoreData :: MonadTCM m => String -> m CoreType
+ Agda.Compiler.UHC.Pragmas.Parse: parseCoreExpr :: String -> Either String CoreExpr
+ Agda.Compiler.UHC.Primitives: primFunNm :: String -> HsName
+ Agda.Compiler.UHC.Primitives: primFunctions :: Map String ((CompileT TCM) CExpr)
+ Agda.Interaction.BasicOps: getModuleContents :: Rewrite -> QName -> TCM ([Name], [(Name, Type)])
+ Agda.Interaction.BasicOps: getRecordContents :: Rewrite -> Expr -> TCM ([Name], [(Name, Type)])
+ Agda.Interaction.BasicOps: isQName :: Expr -> Maybe QName
+ Agda.Interaction.EmacsCommand: instance GHC.Show.Show (Agda.Interaction.EmacsCommand.Lisp GHC.Base.String)
+ Agda.Interaction.Highlighting.Generate: printSyntaxInfo :: Range -> TCM ()
+ Agda.Interaction.Highlighting.Precise: Macro :: NameKind
+ Agda.Interaction.Highlighting.Precise: selectC :: Range -> CompressedFile -> CompressedFile
+ Agda.Interaction.Highlighting.Range: rangeToEndPoints :: Range -> Maybe (Int, Int)
+ Agda.Interaction.InteractionTop: Cmd_search_about_toplevel :: Rewrite -> String -> Interaction' range
+ Agda.Interaction.InteractionTop: Intro :: GiveRefine
+ Agda.Interaction.InteractionTop: handleCommand :: (forall a. CommandM a -> CommandM a) -> CommandM () -> CommandM () -> CommandM ()
+ Agda.Interaction.InteractionTop: handleCommand_ :: CommandM () -> CommandM ()
+ Agda.Interaction.InteractionTop: maybeTimed :: CommandM a -> CommandM (Maybe Doc, a)
+ Agda.Interaction.InteractionTop: searchAbout :: Rewrite -> Range -> String -> CommandM ()
+ Agda.Interaction.InteractionTop: setCommandLineOpts :: CommandLineOptions -> CommandM ()
+ Agda.Interaction.Library: getDefaultLibraries :: FilePath -> LibM ([LibName], [FilePath])
+ Agda.Interaction.Library: getInstalledLibraries :: Maybe FilePath -> LibM [AgdaLibFile]
+ Agda.Interaction.Library: instance GHC.Show.Show Agda.Interaction.Library.LibError
+ Agda.Interaction.Library: libraryIncludePaths :: Maybe FilePath -> [AgdaLibFile] -> [LibName] -> LibM [FilePath]
+ Agda.Interaction.Library: type LibM = ExceptT Doc IO
+ Agda.Interaction.Library: type LibName = String
+ Agda.Interaction.Library.Base: AgdaLib :: LibName -> FilePath -> [FilePath] -> [LibName] -> AgdaLibFile
+ Agda.Interaction.Library.Base: [libDepends] :: AgdaLibFile -> [LibName]
+ Agda.Interaction.Library.Base: [libFile] :: AgdaLibFile -> FilePath
+ Agda.Interaction.Library.Base: [libIncludes] :: AgdaLibFile -> [FilePath]
+ Agda.Interaction.Library.Base: [libName] :: AgdaLibFile -> LibName
+ Agda.Interaction.Library.Base: data AgdaLibFile
+ Agda.Interaction.Library.Base: instance GHC.Show.Show Agda.Interaction.Library.Base.AgdaLibFile
+ Agda.Interaction.Library.Base: type LibName = String
+ Agda.Interaction.Library.Parse: instance GHC.Show.Show Agda.Interaction.Library.Parse.GenericLine
+ Agda.Interaction.Library.Parse: parseLibFile :: FilePath -> IO (P AgdaLibFile)
+ Agda.Interaction.Library.Parse: splitCommas :: String -> [String]
+ Agda.Interaction.Library.Parse: stripComments :: String -> String
+ Agda.Interaction.Options: [optAbsoluteIncludePaths] :: CommandLineOptions -> [AbsolutePath]
+ Agda.Interaction.Options: [optCaching] :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: [optDefaultLibs] :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: [optEta] :: PragmaOptions -> Bool
+ Agda.Interaction.Options: [optExactSplit] :: PragmaOptions -> Bool
+ Agda.Interaction.Options: [optGhcCallGhc] :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: [optGhcCompile] :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: [optIncludePaths] :: CommandLineOptions -> [FilePath]
+ Agda.Interaction.Options: [optLibraries] :: CommandLineOptions -> [LibName]
+ Agda.Interaction.Options: [optOptimSmashing] :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: [optOverrideLibrariesFile] :: CommandLineOptions -> Maybe FilePath
+ Agda.Interaction.Options: [optSharing] :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: [optUHCBin] :: CommandLineOptions -> Maybe FilePath
+ Agda.Interaction.Options: [optUHCCallUHC] :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: [optUHCCompile] :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: [optUHCFlags] :: CommandLineOptions -> [String]
+ Agda.Interaction.Options: [optUHCTextualCore] :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: [optUHCTraceLevel] :: CommandLineOptions -> Int
+ Agda.Interaction.Options: instance GHC.Classes.Eq Agda.Interaction.Options.PragmaOptions
+ Agda.Interaction.Options: parseStandardOptions' :: [String] -> Flag CommandLineOptions
+ Agda.Interaction.Options: runOptM :: OptM a -> IO (Either String a)
+ Agda.Interaction.Options: type OptM = ExceptT String IO
+ Agda.Interaction.Options.Lenses: class LensIncludePaths a where setIncludePaths = mapIncludePaths . const mapIncludePaths f a = setIncludePaths (f $ getIncludePaths a) a setAbsoluteIncludePaths = mapAbsoluteIncludePaths . const mapAbsoluteIncludePaths f a = setAbsoluteIncludePaths (f $ getAbsoluteIncludePaths a) a
+ Agda.Interaction.Options.Lenses: getAbsoluteIncludePaths :: LensIncludePaths a => a -> [AbsolutePath]
+ Agda.Interaction.Options.Lenses: getIncludePaths :: LensIncludePaths a => a -> [FilePath]
+ Agda.Interaction.Options.Lenses: instance Agda.Interaction.Options.Lenses.LensIncludePaths Agda.Interaction.Options.CommandLineOptions
+ Agda.Interaction.Options.Lenses: instance Agda.Interaction.Options.Lenses.LensIncludePaths Agda.TypeChecking.Monad.Base.PersistentTCState
+ Agda.Interaction.Options.Lenses: instance Agda.Interaction.Options.Lenses.LensIncludePaths Agda.TypeChecking.Monad.Base.TCState
+ Agda.Interaction.Options.Lenses: mapAbsoluteIncludePaths :: LensIncludePaths a => ([AbsolutePath] -> [AbsolutePath]) -> a -> a
+ Agda.Interaction.Options.Lenses: mapIncludePaths :: LensIncludePaths a => ([FilePath] -> [FilePath]) -> a -> a
+ Agda.Interaction.Options.Lenses: modifyAbsoluteIncludePaths :: ([AbsolutePath] -> [AbsolutePath]) -> TCM ()
+ Agda.Interaction.Options.Lenses: modifyIncludePaths :: ([FilePath] -> [FilePath]) -> TCM ()
+ Agda.Interaction.Options.Lenses: putAbsoluteIncludePaths :: [AbsolutePath] -> TCM ()
+ Agda.Interaction.Options.Lenses: putIncludePaths :: [FilePath] -> TCM ()
+ Agda.Interaction.Options.Lenses: setAbsoluteIncludePaths :: LensIncludePaths a => [AbsolutePath] -> a -> a
+ Agda.Interaction.Options.Lenses: setIncludePaths :: LensIncludePaths a => [FilePath] -> a -> a
+ Agda.Interaction.Response: Info_SearchAbout :: Doc -> DisplayInfo
+ Agda.Interaction.Response: Info_Time :: Doc -> DisplayInfo
+ Agda.Interaction.SearchAbout: findMentions :: Rewrite -> Range -> String -> TCM [(Name, Type)]
+ Agda.Syntax.Abstract: CompiledDataUHCPragma :: QName -> String -> [String] -> Pragma
+ Agda.Syntax.Abstract: CompiledDeclareDataPragma :: QName -> String -> Pragma
+ Agda.Syntax.Abstract: CompiledUHCPragma :: QName -> String -> Pragma
+ Agda.Syntax.Abstract: DisplayPragma :: QName -> [NamedArg Pattern] -> Expr -> Pragma
+ Agda.Syntax.Abstract: InlinePragma :: QName -> Pragma
+ Agda.Syntax.Abstract: LetDeclaredVariable :: Name -> LetBinding
+ Agda.Syntax.Abstract: Macro :: QName -> Expr
+ Agda.Syntax.Abstract: NoSmashingPragma :: QName -> Pragma
+ Agda.Syntax.Abstract: RecP :: PatInfo -> [FieldAssignment' (Pattern' e)] -> Pattern' e
+ Agda.Syntax.Abstract: Tactic :: ExprInfo -> Expr -> [NamedArg Expr] -> [NamedArg Expr] -> Expr
+ Agda.Syntax.Abstract: UnquoteDef :: [DefInfo] -> [QName] -> Expr -> Declaration
+ Agda.Syntax.Abstract: [clauseCatchall] :: Clause' lhs -> Bool
+ Agda.Syntax.Abstract: instance (Agda.Syntax.Abstract.SubstExpr a, Agda.Syntax.Abstract.SubstExpr b) => Agda.Syntax.Abstract.SubstExpr (Data.Either.Either a b)
+ Agda.Syntax.Abstract: instance Agda.Syntax.Abstract.AllNames a => Agda.Syntax.Abstract.AllNames (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Abstract: instance Agda.Syntax.Abstract.IsProjP a => Agda.Syntax.Abstract.IsProjP (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Abstract: instance Agda.Syntax.Abstract.SubstExpr Agda.Syntax.Abstract.Assign
+ Agda.Syntax.Abstract: instance Agda.Syntax.Abstract.SubstExpr Agda.Syntax.Abstract.Name.ModuleName
+ Agda.Syntax.Abstract: instance Agda.Syntax.Abstract.SubstExpr a => Agda.Syntax.Abstract.SubstExpr (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Abstract: instance Data.Generics.Geniplate.UniverseBi Agda.Syntax.Abstract.Declaration (Agda.Syntax.Abstract.Pattern' Data.Void.Void)
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq Agda.Syntax.Abstract.Declaration
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq Agda.Syntax.Abstract.Expr
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq Agda.Syntax.Abstract.LamBinding
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq Agda.Syntax.Abstract.LetBinding
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq Agda.Syntax.Abstract.ModuleApplication
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq Agda.Syntax.Abstract.Pragma
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq Agda.Syntax.Abstract.RHS
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq Agda.Syntax.Abstract.SpineLHS
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq Agda.Syntax.Abstract.TypedBinding
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq Agda.Syntax.Abstract.TypedBindings
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq e => GHC.Classes.Eq (Agda.Syntax.Abstract.LHSCore' e)
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq e => GHC.Classes.Eq (Agda.Syntax.Abstract.Pattern' e)
+ Agda.Syntax.Abstract: instance GHC.Classes.Eq lhs => GHC.Classes.Eq (Agda.Syntax.Abstract.Clause' lhs)
+ Agda.Syntax.Abstract: mkLet :: ExprInfo -> [LetBinding] -> Expr -> Expr
+ Agda.Syntax.Abstract: nameExpr :: AbstractName -> Expr
+ Agda.Syntax.Abstract: type ImportDirective = ImportDirective' QName ModuleName
+ Agda.Syntax.Abstract: type ImportedName = ImportedName' QName ModuleName
+ Agda.Syntax.Abstract: type RecordAssign = Either Assign ModuleName
+ Agda.Syntax.Abstract: type RecordAssigns = [RecordAssign]
+ Agda.Syntax.Abstract: type Renaming = Renaming' QName ModuleName
+ Agda.Syntax.Abstract.Copatterns: instance (Agda.Syntax.Abstract.Copatterns.Rename a, Agda.Syntax.Abstract.Copatterns.Rename b) => Agda.Syntax.Abstract.Copatterns.Rename (Data.Either.Either a b)
+ Agda.Syntax.Abstract.Copatterns: instance Agda.Syntax.Abstract.Copatterns.Alpha a => Agda.Syntax.Abstract.Copatterns.Alpha (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Abstract.Copatterns: instance Agda.Syntax.Abstract.Copatterns.Rename Agda.Syntax.Abstract.Name.ModuleName
+ Agda.Syntax.Abstract.Copatterns: instance Agda.Syntax.Abstract.Copatterns.Rename Agda.Syntax.Abstract.Name.Name
+ Agda.Syntax.Abstract.Copatterns: instance Agda.Syntax.Abstract.Copatterns.Rename a => Agda.Syntax.Abstract.Copatterns.Rename (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Abstract.Copatterns: instance Agda.Syntax.Abstract.Copatterns.Rename a => Agda.Syntax.Abstract.Copatterns.Rename (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.Syntax.Abstract.Name: instance Agda.Syntax.Concrete.Name.NumHoles Agda.Syntax.Abstract.Name.Name
+ Agda.Syntax.Abstract.Name: instance Agda.Syntax.Concrete.Name.NumHoles Agda.Syntax.Abstract.Name.QName
+ Agda.Syntax.Abstract.Name: instance Control.DeepSeq.NFData Agda.Syntax.Abstract.Name.ModuleName
+ Agda.Syntax.Abstract.Name: instance Control.DeepSeq.NFData Agda.Syntax.Abstract.Name.Name
+ Agda.Syntax.Abstract.Name: instance Control.DeepSeq.NFData Agda.Syntax.Abstract.Name.QName
+ Agda.Syntax.Abstract.Views: deepUnscope :: ExprLike a => a -> a
+ Agda.Syntax.Abstract.Views: deepUnscopeDecl :: Declaration -> [Declaration]
+ Agda.Syntax.Abstract.Views: deepUnscopeDecls :: [Declaration] -> [Declaration]
+ Agda.Syntax.Abstract.Views: instance (Agda.Syntax.Abstract.Views.ExprLike a, Agda.Syntax.Abstract.Views.ExprLike b) => Agda.Syntax.Abstract.Views.ExprLike (Data.Either.Either a b)
+ Agda.Syntax.Abstract.Views: instance (Agda.Syntax.Abstract.Views.ExprLike a, Agda.Syntax.Abstract.Views.ExprLike b) => Agda.Syntax.Abstract.Views.ExprLike (a, b)
+ Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike Agda.Syntax.Abstract.Declaration
+ Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike Agda.Syntax.Abstract.LHS
+ Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike Agda.Syntax.Abstract.ModuleApplication
+ Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike Agda.Syntax.Abstract.Name.ModuleName
+ Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike Agda.Syntax.Abstract.Name.QName
+ Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike Agda.Syntax.Abstract.Pragma
+ Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike Agda.Syntax.Abstract.RHS
+ Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike Agda.Syntax.Abstract.SpineLHS
+ Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike Data.Void.Void
+ Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike a => Agda.Syntax.Abstract.Views.ExprLike (Agda.Syntax.Abstract.Clause' a)
+ Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike a => Agda.Syntax.Abstract.Views.ExprLike (Agda.Syntax.Abstract.LHSCore' a)
+ Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike a => Agda.Syntax.Abstract.Views.ExprLike (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Abstract.Views: instance Agda.Syntax.Abstract.Views.ExprLike a => Agda.Syntax.Abstract.Views.ExprLike (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.Syntax.Common: Beginning :: Placeholder
+ Agda.Syntax.Common: End :: Placeholder
+ Agda.Syntax.Common: ImportDirective :: Range -> Using' a b -> [ImportedName' a b] -> [Renaming' a b] -> Bool -> ImportDirective' a b
+ Agda.Syntax.Common: ImportedModule :: b -> ImportedName' a b
+ Agda.Syntax.Common: ImportedName :: a -> ImportedName' a b
+ Agda.Syntax.Common: MacroDef :: IsMacro
+ Agda.Syntax.Common: Middle :: Placeholder
+ Agda.Syntax.Common: NoPlaceholder :: e -> MaybePlaceholder e
+ Agda.Syntax.Common: NotMacroDef :: IsMacro
+ Agda.Syntax.Common: Placeholder :: !Placeholder -> MaybePlaceholder e
+ Agda.Syntax.Common: Renaming :: ImportedName' a b -> ImportedName' a b -> Range -> Renaming' a b
+ Agda.Syntax.Common: UseEverything :: Using' a b
+ Agda.Syntax.Common: Using :: [ImportedName' a b] -> Using' a b
+ Agda.Syntax.Common: [hiding] :: ImportDirective' a b -> [ImportedName' a b]
+ Agda.Syntax.Common: [impRenaming] :: ImportDirective' a b -> [Renaming' a b]
+ Agda.Syntax.Common: [importDirRange] :: ImportDirective' a b -> Range
+ Agda.Syntax.Common: [publicOpen] :: ImportDirective' a b -> Bool
+ Agda.Syntax.Common: [renFrom] :: Renaming' a b -> ImportedName' a b
+ Agda.Syntax.Common: [renToRange] :: Renaming' a b -> Range
+ Agda.Syntax.Common: [renTo] :: Renaming' a b -> ImportedName' a b
+ Agda.Syntax.Common: [using] :: ImportDirective' a b -> Using' a b
+ Agda.Syntax.Common: class LensArgInfo a where setArgInfo ai = mapArgInfo (const ai) mapArgInfo f a = setArgInfo (f $ getArgInfo a) a
+ Agda.Syntax.Common: data ImportDirective' a b
+ Agda.Syntax.Common: data ImportedName' a b
+ Agda.Syntax.Common: data IsMacro
+ Agda.Syntax.Common: data MaybePlaceholder e
+ Agda.Syntax.Common: data Placeholder
+ Agda.Syntax.Common: data Renaming' a b
+ Agda.Syntax.Common: data Using' a b
+ Agda.Syntax.Common: defaultImportDir :: ImportDirective' a b
+ Agda.Syntax.Common: getArgInfo :: LensArgInfo a => a -> ArgInfo
+ Agda.Syntax.Common: hideOrKeepInstance :: LensHiding a => a -> a
+ Agda.Syntax.Common: instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b) => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.ImportDirective' a b)
+ Agda.Syntax.Common: instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b) => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.ImportedName' a b)
+ Agda.Syntax.Common: instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b) => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.Renaming' a b)
+ Agda.Syntax.Common: instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b) => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.Using' a b)
+ Agda.Syntax.Common: instance (Agda.Syntax.Position.KillRange a, Agda.Syntax.Position.KillRange b) => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.ImportDirective' a b)
+ Agda.Syntax.Common: instance (Agda.Syntax.Position.KillRange a, Agda.Syntax.Position.KillRange b) => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.ImportedName' a b)
+ Agda.Syntax.Common: instance (Agda.Syntax.Position.KillRange a, Agda.Syntax.Position.KillRange b) => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.Renaming' a b)
+ Agda.Syntax.Common: instance (Agda.Syntax.Position.KillRange a, Agda.Syntax.Position.KillRange b) => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.Using' a b)
+ Agda.Syntax.Common: instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData b) => Control.DeepSeq.NFData (Agda.Syntax.Common.ImportDirective' a b)
+ Agda.Syntax.Common: instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData b) => Control.DeepSeq.NFData (Agda.Syntax.Common.ImportedName' a b)
+ Agda.Syntax.Common: instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData b) => Control.DeepSeq.NFData (Agda.Syntax.Common.Renaming' a b)
+ Agda.Syntax.Common: instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData b) => Control.DeepSeq.NFData (Agda.Syntax.Common.Using' a b)
+ Agda.Syntax.Common: instance (Control.DeepSeq.NFData name, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Agda.Syntax.Common.Named name a)
+ Agda.Syntax.Common: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => GHC.Classes.Eq (Agda.Syntax.Common.ImportDirective' a b)
+ Agda.Syntax.Common: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => GHC.Classes.Eq (Agda.Syntax.Common.ImportedName' a b)
+ Agda.Syntax.Common: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => GHC.Classes.Eq (Agda.Syntax.Common.Renaming' a b)
+ Agda.Syntax.Common: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => GHC.Classes.Eq (Agda.Syntax.Common.Using' a b)
+ Agda.Syntax.Common: instance (GHC.Classes.Ord a, GHC.Classes.Ord b) => GHC.Classes.Ord (Agda.Syntax.Common.ImportedName' a b)
+ Agda.Syntax.Common: instance (GHC.Show.Show a, GHC.Show.Show b) => GHC.Show.Show (Agda.Syntax.Common.ImportedName' a b)
+ Agda.Syntax.Common: instance Agda.Syntax.Common.LensArgInfo (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Common: instance Agda.Syntax.Common.LensArgInfo (Agda.Syntax.Common.Dom e)
+ Agda.Syntax.Common: instance Agda.Syntax.Common.LensArgInfo Agda.Syntax.Common.ArgInfo
+ Agda.Syntax.Common: instance Agda.Syntax.Common.LensHiding (Agda.Syntax.Common.Arg e)
+ Agda.Syntax.Common: instance Agda.Syntax.Common.LensHiding (Agda.Syntax.Common.Dom e)
+ Agda.Syntax.Common: instance Agda.Syntax.Common.LensHiding Agda.Syntax.Common.ArgInfo
+ Agda.Syntax.Common: instance Agda.Syntax.Common.LensRelevance (Agda.Syntax.Common.Arg e)
+ Agda.Syntax.Common: instance Agda.Syntax.Common.LensRelevance (Agda.Syntax.Common.Dom e)
+ Agda.Syntax.Common: instance Agda.Syntax.Common.LensRelevance Agda.Syntax.Common.ArgInfo
+ Agda.Syntax.Common: instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.IsInstance
+ Agda.Syntax.Common: instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.IsMacro
+ Agda.Syntax.Common: instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Common: instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.Dom a)
+ Agda.Syntax.Common: instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.MaybePlaceholder a)
+ Agda.Syntax.Common: instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.ArgInfo
+ Agda.Syntax.Common: instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.IsInstance
+ Agda.Syntax.Common: instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.IsMacro
+ Agda.Syntax.Common: instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Common: instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.Dom a)
+ Agda.Syntax.Common: instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.MaybePlaceholder a)
+ Agda.Syntax.Common: instance Agda.Syntax.Position.SetRange a => Agda.Syntax.Position.SetRange (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Common: instance Agda.Utils.Functor.Decoration Agda.Syntax.Common.Arg
+ Agda.Syntax.Common: instance Agda.Utils.Functor.Decoration Agda.Syntax.Common.Dom
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData Agda.Syntax.Common.ArgInfo
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData Agda.Syntax.Common.Big
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData Agda.Syntax.Common.Hiding
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData Agda.Syntax.Common.Induction
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData Agda.Syntax.Common.IsInstance
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData Agda.Syntax.Common.MetaId
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData Agda.Syntax.Common.NameId
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData Agda.Syntax.Common.Relevance
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Common.MaybePlaceholder a)
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Common.Ranged a)
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Common.TerminationCheck a)
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Common.WithHiding a)
+ Agda.Syntax.Common: instance Control.DeepSeq.NFData e => Control.DeepSeq.NFData (Agda.Syntax.Common.Arg e)
+ Agda.Syntax.Common: instance Data.Foldable.Foldable Agda.Syntax.Common.Arg
+ Agda.Syntax.Common: instance Data.Foldable.Foldable Agda.Syntax.Common.Dom
+ Agda.Syntax.Common: instance Data.Foldable.Foldable Agda.Syntax.Common.MaybePlaceholder
+ Agda.Syntax.Common: instance Data.Traversable.Traversable Agda.Syntax.Common.Arg
+ Agda.Syntax.Common: instance Data.Traversable.Traversable Agda.Syntax.Common.Dom
+ Agda.Syntax.Common: instance Data.Traversable.Traversable Agda.Syntax.Common.MaybePlaceholder
+ Agda.Syntax.Common: instance GHC.Base.Functor Agda.Syntax.Common.Arg
+ Agda.Syntax.Common: instance GHC.Base.Functor Agda.Syntax.Common.Dom
+ Agda.Syntax.Common: instance GHC.Base.Functor Agda.Syntax.Common.MaybePlaceholder
+ Agda.Syntax.Common: instance GHC.Base.Monoid (Agda.Syntax.Common.Using' a b)
+ Agda.Syntax.Common: instance GHC.Classes.Eq Agda.Syntax.Common.ArgInfo
+ Agda.Syntax.Common: instance GHC.Classes.Eq Agda.Syntax.Common.IsMacro
+ Agda.Syntax.Common: instance GHC.Classes.Eq Agda.Syntax.Common.Placeholder
+ Agda.Syntax.Common: instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Common: instance GHC.Classes.Eq e => GHC.Classes.Eq (Agda.Syntax.Common.Dom e)
+ Agda.Syntax.Common: instance GHC.Classes.Eq e => GHC.Classes.Eq (Agda.Syntax.Common.MaybePlaceholder e)
+ Agda.Syntax.Common: instance GHC.Classes.Ord Agda.Syntax.Common.ArgInfo
+ Agda.Syntax.Common: instance GHC.Classes.Ord Agda.Syntax.Common.IsMacro
+ Agda.Syntax.Common: instance GHC.Classes.Ord Agda.Syntax.Common.Placeholder
+ Agda.Syntax.Common: instance GHC.Classes.Ord e => GHC.Classes.Ord (Agda.Syntax.Common.Arg e)
+ Agda.Syntax.Common: instance GHC.Classes.Ord e => GHC.Classes.Ord (Agda.Syntax.Common.Dom e)
+ Agda.Syntax.Common: instance GHC.Classes.Ord e => GHC.Classes.Ord (Agda.Syntax.Common.MaybePlaceholder e)
+ Agda.Syntax.Common: instance GHC.Show.Show Agda.Syntax.Common.ArgInfo
+ Agda.Syntax.Common: instance GHC.Show.Show Agda.Syntax.Common.IsMacro
+ Agda.Syntax.Common: instance GHC.Show.Show Agda.Syntax.Common.Placeholder
+ Agda.Syntax.Common: instance GHC.Show.Show a => GHC.Show.Show (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Common: instance GHC.Show.Show a => GHC.Show.Show (Agda.Syntax.Common.Dom a)
+ Agda.Syntax.Common: instance GHC.Show.Show e => GHC.Show.Show (Agda.Syntax.Common.MaybePlaceholder e)
+ Agda.Syntax.Common: isDefaultImportDir :: ImportDirective' a b -> Bool
+ Agda.Syntax.Common: setArgInfo :: LensArgInfo a => ArgInfo -> a -> a
+ Agda.Syntax.Common: setImportedName :: ImportedName' a a -> a -> ImportedName' a a
+ Agda.Syntax.Common: type PositivityCheck = Bool
+ Agda.Syntax.Concrete: CatchallPragma :: Range -> Pragma
+ Agda.Syntax.Concrete: CompiledDataUHCPragma :: Range -> QName -> String -> [String] -> Pragma
+ Agda.Syntax.Concrete: CompiledDeclareDataPragma :: Range -> QName -> String -> Pragma
+ Agda.Syntax.Concrete: CompiledUHCPragma :: Range -> QName -> String -> Pragma
+ Agda.Syntax.Concrete: DisplayPragma :: Range -> Pattern -> Expr -> Pragma
+ Agda.Syntax.Concrete: ExprWhere :: Expr -> WhereClause -> ExprWhere
+ Agda.Syntax.Concrete: FieldAssignment :: Name -> a -> FieldAssignment' a
+ Agda.Syntax.Concrete: HaskellCodePragma :: Range -> String -> Pragma
+ Agda.Syntax.Concrete: ImportUHCPragma :: Range -> String -> Pragma
+ Agda.Syntax.Concrete: InlinePragma :: Range -> QName -> Pragma
+ Agda.Syntax.Concrete: Macro :: Range -> [Declaration] -> Declaration
+ Agda.Syntax.Concrete: ModuleAssignment :: QName -> [Expr] -> ImportDirective -> ModuleAssignment
+ Agda.Syntax.Concrete: NoPositivityCheckPragma :: Range -> Pragma
+ Agda.Syntax.Concrete: NoSmashingPragma :: Range -> QName -> Pragma
+ Agda.Syntax.Concrete: RecP :: Range -> [FieldAssignment' Pattern] -> Pattern
+ Agda.Syntax.Concrete: UnquoteDef :: Range -> [Name] -> Expr -> Declaration
+ Agda.Syntax.Concrete: [_exprFieldA] :: FieldAssignment' a -> a
+ Agda.Syntax.Concrete: [_exprModA] :: ModuleAssignment -> [Expr]
+ Agda.Syntax.Concrete: [_importDirModA] :: ModuleAssignment -> ImportDirective
+ Agda.Syntax.Concrete: [_nameFieldA] :: FieldAssignment' a -> Name
+ Agda.Syntax.Concrete: [_qnameModA] :: ModuleAssignment -> QName
+ Agda.Syntax.Concrete: data ExprWhere
+ Agda.Syntax.Concrete: data FieldAssignment' a
+ Agda.Syntax.Concrete: data ModuleAssignment
+ Agda.Syntax.Concrete: exprFieldA :: Lens' a (FieldAssignment' a)
+ Agda.Syntax.Concrete: instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.ModuleAssignment
+ Agda.Syntax.Concrete: instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.Syntax.Concrete: instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.ModuleAssignment
+ Agda.Syntax.Concrete: instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.Syntax.Concrete: instance Agda.Utils.Null.Null (Agda.Syntax.Concrete.WhereClause' a)
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData Agda.Syntax.Concrete.AsName
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData Agda.Syntax.Concrete.BoundName
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Declaration
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData Agda.Syntax.Concrete.LHS
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData Agda.Syntax.Concrete.ModuleApplication
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData Agda.Syntax.Concrete.ModuleAssignment
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Pragma
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.LamBinding' a)
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.OpApp a)
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.RHS' a)
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.TypedBinding' a)
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.TypedBindings' a)
+ Agda.Syntax.Concrete: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.WhereClause' a)
+ Agda.Syntax.Concrete: instance Data.Foldable.Foldable Agda.Syntax.Concrete.FieldAssignment'
+ Agda.Syntax.Concrete: instance Data.Traversable.Traversable Agda.Syntax.Concrete.FieldAssignment'
+ Agda.Syntax.Concrete: instance GHC.Base.Functor Agda.Syntax.Concrete.FieldAssignment'
+ Agda.Syntax.Concrete: instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.Syntax.Concrete: instance GHC.Show.Show a => GHC.Show.Show (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.Syntax.Concrete: nameFieldA :: Lens' Name (FieldAssignment' a)
+ Agda.Syntax.Concrete: spanAllowedBeforeModule :: [Declaration] -> ([Declaration], [Declaration])
+ Agda.Syntax.Concrete: type FieldAssignment = FieldAssignment' Expr
+ Agda.Syntax.Concrete: type ImportDirective = ImportDirective' Name Name
+ Agda.Syntax.Concrete: type ImportedName = ImportedName' Name Name
+ Agda.Syntax.Concrete: type RecordAssignment = Either FieldAssignment ModuleAssignment
+ Agda.Syntax.Concrete: type RecordAssignments = [RecordAssignment]
+ Agda.Syntax.Concrete: type Renaming = Renaming' Name Name
+ Agda.Syntax.Concrete: type Using = Using' Name Name
+ Agda.Syntax.Concrete.Definitions: BadMacroDef :: NiceDeclaration -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: InvalidCatchallPragma :: Range -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: InvalidNoPositivityCheckPragma :: Range -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: NiceUnquoteDef :: Range -> [Fixity'] -> Access -> IsAbstract -> TerminationCheck -> [Name] -> Expr -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: UnquoteDefRequiresSignature :: [Name] -> DeclarationException
+ Agda.Syntax.Concrete.Generic: instance (Agda.Syntax.Concrete.Generic.ExprLike a, Agda.Syntax.Concrete.Generic.ExprLike b) => Agda.Syntax.Concrete.Generic.ExprLike (Data.Either.Either a b)
+ Agda.Syntax.Concrete.Generic: instance (Agda.Syntax.Concrete.Generic.ExprLike a, Agda.Syntax.Concrete.Generic.ExprLike b, Agda.Syntax.Concrete.Generic.ExprLike c, Agda.Syntax.Concrete.Generic.ExprLike d) => Agda.Syntax.Concrete.Generic.ExprLike (a, b, c, d)
+ Agda.Syntax.Concrete.Generic: instance Agda.Syntax.Concrete.Generic.ExprLike Agda.Syntax.Concrete.FieldAssignment
+ Agda.Syntax.Concrete.Generic: instance Agda.Syntax.Concrete.Generic.ExprLike Agda.Syntax.Concrete.ModuleAssignment
+ Agda.Syntax.Concrete.Generic: instance Agda.Syntax.Concrete.Generic.ExprLike GHC.Types.Bool
+ Agda.Syntax.Concrete.Generic: instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Concrete.Generic: instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Common.MaybePlaceholder a)
+ Agda.Syntax.Concrete.Name: class NumHoles a
+ Agda.Syntax.Concrete.Name: instance Agda.Syntax.Concrete.Name.NumHoles Agda.Syntax.Concrete.Name.Name
+ Agda.Syntax.Concrete.Name: instance Agda.Syntax.Concrete.Name.NumHoles Agda.Syntax.Concrete.Name.QName
+ Agda.Syntax.Concrete.Name: instance Agda.Syntax.Concrete.Name.NumHoles [Agda.Syntax.Concrete.Name.NamePart]
+ Agda.Syntax.Concrete.Name: instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Name.NamePart
+ Agda.Syntax.Concrete.Name: instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Name.QName
+ Agda.Syntax.Concrete.Name: numHoles :: NumHoles a => a -> Int
+ Agda.Syntax.Concrete.Operators: instance GHC.Classes.Eq Agda.Syntax.Concrete.Operators.ExprKind
+ Agda.Syntax.Concrete.Operators: instance GHC.Show.Show Agda.Syntax.Concrete.Operators.ExprKind
+ Agda.Syntax.Concrete.Operators.Parser: AppK :: MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: DoNotParseSections :: ParseSections
+ Agda.Syntax.Concrete.Operators.Parser: In :: NK InfixNotation
+ Agda.Syntax.Concrete.Operators.Parser: NodeK :: (Either Integer Integer) -> MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: Non :: NK NonfixNotation
+ Agda.Syntax.Concrete.Operators.Parser: NonfixK :: MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: ParseSections :: ParseSections
+ Agda.Syntax.Concrete.Operators.Parser: Post :: NK PostfixNotation
+ Agda.Syntax.Concrete.Operators.Parser: PostLeftsK :: (Either Integer Integer) -> MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: Pre :: NK PrefixNotation
+ Agda.Syntax.Concrete.Operators.Parser: TopK :: MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: data MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: data NK (k :: NotationKind) :: *
+ Agda.Syntax.Concrete.Operators.Parser: data ParseSections
+ Agda.Syntax.Concrete.Operators.Parser: instance Data.Hashable.Class.Hashable Agda.Syntax.Concrete.Operators.Parser.MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: instance GHC.Classes.Eq Agda.Syntax.Concrete.Operators.Parser.MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: instance GHC.Classes.Eq Agda.Syntax.Concrete.Operators.Parser.ParseSections
+ Agda.Syntax.Concrete.Operators.Parser: instance GHC.Generics.Constructor Agda.Syntax.Concrete.Operators.Parser.C1_0MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: instance GHC.Generics.Constructor Agda.Syntax.Concrete.Operators.Parser.C1_1MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: instance GHC.Generics.Constructor Agda.Syntax.Concrete.Operators.Parser.C1_2MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: instance GHC.Generics.Constructor Agda.Syntax.Concrete.Operators.Parser.C1_3MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: instance GHC.Generics.Constructor Agda.Syntax.Concrete.Operators.Parser.C1_4MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: instance GHC.Generics.Datatype Agda.Syntax.Concrete.Operators.Parser.D1MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: instance GHC.Generics.Generic Agda.Syntax.Concrete.Operators.Parser.MemoKey
+ Agda.Syntax.Concrete.Operators.Parser: instance GHC.Show.Show Agda.Syntax.Concrete.Operators.Parser.ParseSections
+ Agda.Syntax.Concrete.Operators.Parser: maybePlaceholder :: Maybe Placeholder -> Parser e e -> Parser e (MaybePlaceholder e)
+ Agda.Syntax.Concrete.Operators.Parser: notPlaceholder :: Parser e e
+ Agda.Syntax.Concrete.Operators.Parser: parse :: IsExpr e => (ParseSections, Parser e a) -> [e] -> [a]
+ Agda.Syntax.Concrete.Operators.Parser: placeholder :: Placeholder -> Parser e (MaybePlaceholder e)
+ Agda.Syntax.Concrete.Operators.Parser: sat' :: (e -> Bool) -> Parser e e
+ Agda.Syntax.Concrete.Operators.Parser: type Parser tok a = Parser MemoKey tok (MaybePlaceholder tok) a
+ Agda.Syntax.Concrete.Pretty: instance (Agda.Utils.Pretty.Pretty a, Agda.Utils.Pretty.Pretty b) => Agda.Utils.Pretty.Pretty (Agda.Syntax.Common.ImportDirective' a b)
+ Agda.Syntax.Concrete.Pretty: instance (Agda.Utils.Pretty.Pretty a, Agda.Utils.Pretty.Pretty b) => Agda.Utils.Pretty.Pretty (Agda.Syntax.Common.ImportedName' a b)
+ Agda.Syntax.Concrete.Pretty: instance (Agda.Utils.Pretty.Pretty a, Agda.Utils.Pretty.Pretty b) => Agda.Utils.Pretty.Pretty (Agda.Syntax.Common.Using' a b)
+ Agda.Syntax.Concrete.Pretty: instance (Agda.Utils.Pretty.Pretty a, Agda.Utils.Pretty.Pretty b) => Agda.Utils.Pretty.Pretty (Data.Either.Either a b)
+ Agda.Syntax.Concrete.Pretty: instance (Agda.Utils.Pretty.Pretty a, Agda.Utils.Pretty.Pretty b) => GHC.Show.Show (Agda.Syntax.Common.ImportDirective' a b)
+ Agda.Syntax.Concrete.Pretty: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Concrete.ModuleAssignment
+ Agda.Syntax.Concrete.Pretty: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (Agda.Syntax.Common.MaybePlaceholder a)
+ Agda.Syntax.Concrete.Pretty: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.Syntax.Concrete.Pretty: instance Agda.Utils.Pretty.Pretty e => Agda.Utils.Pretty.Pretty (Agda.Syntax.Common.Arg e)
+ Agda.Syntax.Fixity: NotationSection :: NewNotation -> NotationKind -> Maybe PrecedenceLevel -> Bool -> NotationSection
+ Agda.Syntax.Fixity: Related :: !Integer -> PrecedenceLevel
+ Agda.Syntax.Fixity: Unrelated :: PrecedenceLevel
+ Agda.Syntax.Fixity: [notaIsOperator] :: NewNotation -> Bool
+ Agda.Syntax.Fixity: [sectIsSection] :: NotationSection -> Bool
+ Agda.Syntax.Fixity: [sectKind] :: NotationSection -> NotationKind
+ Agda.Syntax.Fixity: [sectLevel] :: NotationSection -> Maybe PrecedenceLevel
+ Agda.Syntax.Fixity: [sectNotation] :: NotationSection -> NewNotation
+ Agda.Syntax.Fixity: _fixityAssoc :: Lens' Associativity Fixity
+ Agda.Syntax.Fixity: _fixityLevel :: Lens' PrecedenceLevel Fixity
+ Agda.Syntax.Fixity: _notaFixity :: Lens' Fixity NewNotation
+ Agda.Syntax.Fixity: data NotationSection
+ Agda.Syntax.Fixity: data PrecedenceLevel
+ Agda.Syntax.Fixity: instance Control.DeepSeq.NFData Agda.Syntax.Fixity.Fixity
+ Agda.Syntax.Fixity: instance Control.DeepSeq.NFData Agda.Syntax.Fixity.Fixity'
+ Agda.Syntax.Fixity: instance GHC.Classes.Eq Agda.Syntax.Fixity.Precedence
+ Agda.Syntax.Fixity: instance GHC.Classes.Eq Agda.Syntax.Fixity.PrecedenceLevel
+ Agda.Syntax.Fixity: instance GHC.Classes.Ord Agda.Syntax.Fixity.PrecedenceLevel
+ Agda.Syntax.Fixity: instance GHC.Show.Show Agda.Syntax.Fixity.NotationSection
+ Agda.Syntax.Fixity: instance GHC.Show.Show Agda.Syntax.Fixity.PrecedenceLevel
+ Agda.Syntax.Fixity: noSection :: NewNotation -> NotationSection
+ Agda.Syntax.Fixity: useDefaultFixity :: NewNotation -> NewNotation
+ Agda.Syntax.Info: [defMacro] :: DefInfo -> IsMacro
+ Agda.Syntax.Info: [mutualPositivityCheck] :: MutualInfo -> PositivityCheck
+ Agda.Syntax.Info: instance GHC.Classes.Eq Agda.Syntax.Info.ConPatInfo
+ Agda.Syntax.Info: instance GHC.Classes.Eq Agda.Syntax.Info.DeclInfo
+ Agda.Syntax.Info: instance GHC.Classes.Eq Agda.Syntax.Info.DefInfo
+ Agda.Syntax.Info: instance GHC.Classes.Eq Agda.Syntax.Info.ExprInfo
+ Agda.Syntax.Info: instance GHC.Classes.Eq Agda.Syntax.Info.LHSInfo
+ Agda.Syntax.Info: instance GHC.Classes.Eq Agda.Syntax.Info.LetInfo
+ Agda.Syntax.Info: instance GHC.Classes.Eq Agda.Syntax.Info.MetaInfo
+ Agda.Syntax.Info: instance GHC.Classes.Eq Agda.Syntax.Info.ModuleInfo
+ Agda.Syntax.Info: instance GHC.Classes.Eq Agda.Syntax.Info.MutualInfo
+ Agda.Syntax.Internal: EqualityType :: Sort -> QName -> Arg Term -> Arg Term -> Arg Term -> Arg Term -> EqualityView
+ Agda.Syntax.Internal: OtherType :: Type -> EqualityView
+ Agda.Syntax.Internal: [clauseCatchall] :: Clause -> Bool
+ Agda.Syntax.Internal: [eqtLevel] :: EqualityView -> Arg Term
+ Agda.Syntax.Internal: [eqtLhs] :: EqualityView -> Arg Term
+ Agda.Syntax.Internal: [eqtName] :: EqualityView -> QName
+ Agda.Syntax.Internal: [eqtRhs] :: EqualityView -> Arg Term
+ Agda.Syntax.Internal: [eqtSort] :: EqualityView -> Sort
+ Agda.Syntax.Internal: [eqtType] :: EqualityView -> Arg Term
+ Agda.Syntax.Internal: allProjElims :: Elims -> Maybe [QName]
+ Agda.Syntax.Internal: data EqualityView
+ Agda.Syntax.Internal: data Substitution' a
+ Agda.Syntax.Internal: instance Agda.Syntax.Abstract.IsProjP (Agda.Syntax.Internal.Pattern' a)
+ Agda.Syntax.Internal: instance Agda.Syntax.Internal.LensSort a => Agda.Syntax.Internal.LensSort (Agda.Syntax.Common.Dom a)
+ Agda.Syntax.Internal: instance Agda.Syntax.Internal.SgTel (Agda.Syntax.Common.Dom (Agda.Syntax.Internal.ArgName, Agda.Syntax.Internal.Type))
+ Agda.Syntax.Internal: instance Agda.Syntax.Internal.SgTel (Agda.Syntax.Common.Dom Agda.Syntax.Internal.Type)
+ Agda.Syntax.Internal: instance Agda.Syntax.Internal.SgTel (Agda.Syntax.Internal.ArgName, Agda.Syntax.Common.Dom Agda.Syntax.Internal.Type)
+ Agda.Syntax.Internal: instance Agda.Syntax.Internal.TermSize a => Agda.Syntax.Internal.TermSize (Agda.Syntax.Internal.Substitution' a)
+ Agda.Syntax.Internal: instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Internal.Pattern' a)
+ Agda.Syntax.Internal: instance Data.Foldable.Foldable Agda.Syntax.Internal.Substitution'
+ Agda.Syntax.Internal: instance Data.Traversable.Traversable Agda.Syntax.Internal.Substitution'
+ Agda.Syntax.Internal: instance GHC.Base.Functor Agda.Syntax.Internal.Substitution'
+ Agda.Syntax.Internal: instance GHC.Show.Show a => GHC.Show.Show (Agda.Syntax.Internal.Substitution' a)
+ Agda.Syntax.Internal: isEqualityType :: EqualityView -> Bool
+ Agda.Syntax.Internal: namedDBVarP :: Int -> PatVarName -> Named (Ranged PatVarName) DeBruijnPattern
+ Agda.Syntax.Internal: shared_ :: Term -> Term
+ Agda.Syntax.Internal: type PatternSubstitution = Substitution' DeBruijnPattern
+ Agda.Syntax.Internal: type Substitution = Substitution' Term
+ Agda.Syntax.Internal.Defs: instance Agda.Syntax.Internal.Defs.GetDefs a => Agda.Syntax.Internal.Defs.GetDefs (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Internal.Defs: instance Agda.Syntax.Internal.Defs.GetDefs a => Agda.Syntax.Internal.Defs.GetDefs (Agda.Syntax.Common.Dom a)
+ Agda.Syntax.Internal.Generic: instance Agda.Syntax.Internal.Generic.TermLike Agda.Syntax.Internal.EqualityView
+ Agda.Syntax.Internal.Generic: instance Agda.Syntax.Internal.Generic.TermLike a => Agda.Syntax.Internal.Generic.TermLike (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Internal.Generic: instance Agda.Syntax.Internal.Generic.TermLike a => Agda.Syntax.Internal.Generic.TermLike (Agda.Syntax.Common.Dom a)
+ Agda.Syntax.Internal.Names: PSyn :: PatternSynDefn -> PSyn
+ Agda.Syntax.Internal.Names: class NamesIn a
+ Agda.Syntax.Internal.Names: instance (Agda.Syntax.Internal.Names.NamesIn a, Agda.Syntax.Internal.Names.NamesIn b) => Agda.Syntax.Internal.Names.NamesIn (a, b)
+ Agda.Syntax.Internal.Names: instance (Agda.Syntax.Internal.Names.NamesIn a, Agda.Syntax.Internal.Names.NamesIn b, Agda.Syntax.Internal.Names.NamesIn c) => Agda.Syntax.Internal.Names.NamesIn (a, b, c)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Abstract.Pattern' a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Internal.Pattern' a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Abstract.Name.AmbiguousQName
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Abstract.Name.QName
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.Clause
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.ConHead
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.Level
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.LevelAtom
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.Names.PSyn
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.PlusLevel
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.Sort
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.Term
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Literal.Literal
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.CompiledClause.CompiledClauses
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.Definition
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.Defn
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.DisplayForm
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.DisplayTerm
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Common.Dom a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Common.Named n a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Internal.Abs a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Internal.ClauseBodyF a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Internal.Elim' a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Internal.Tele a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Internal.Type' a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.TypeChecking.CompiledClause.Case a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.TypeChecking.CompiledClause.WithArity a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.TypeChecking.Monad.Base.Open a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (GHC.Base.Maybe a)
+ Agda.Syntax.Internal.Names: instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn [a]
+ Agda.Syntax.Internal.Names: namesIn :: NamesIn a => a -> Set QName
+ Agda.Syntax.Internal.Names: namesInFoldable :: (Foldable f, NamesIn a) => f a -> Set QName
+ Agda.Syntax.Internal.Names: newtype PSyn
+ Agda.Syntax.Internal.Pattern: clausePerm :: Clause -> Permutation
+ Agda.Syntax.Internal.Pattern: dbPatPerm :: [NamedArg DeBruijnPattern] -> Permutation
+ Agda.Syntax.Internal.Pattern: instance Agda.Syntax.Internal.Pattern.LabelPatVars a b i => Agda.Syntax.Internal.Pattern.LabelPatVars (Agda.Syntax.Common.Arg a) (Agda.Syntax.Common.Arg b) i
+ Agda.Syntax.Internal.Pattern: patternToElim :: Arg DeBruijnPattern -> Elim
+ Agda.Syntax.Internal.Pattern: patternToTerm :: DeBruijnPattern -> Term
+ Agda.Syntax.Internal.Pattern: unlabelPatVars :: LabelPatVars a b i => b -> a
+ Agda.Syntax.Internal.Pattern: unnumberPatVars :: LabelPatVars a b i => b -> a
+ Agda.Syntax.Literal: LitMeta :: Range -> AbsolutePath -> MetaId -> Literal
+ Agda.Syntax.Literal: LitNat :: Range -> !Integer -> Literal
+ Agda.Syntax.Literal: instance Control.DeepSeq.NFData Agda.Syntax.Literal.Literal
+ Agda.Syntax.Notation: WildHole :: !Int -> GenPart
+ Agda.Syntax.Notation: instance Control.DeepSeq.NFData Agda.Syntax.Notation.GenPart
+ Agda.Syntax.Notation: isNormalHole :: GenPart -> Bool
+ Agda.Syntax.Parser: [errSrcFile] :: ParseError -> !SrcFile
+ Agda.Syntax.Parser: exprWhereParser :: Parser ExprWhere
+ Agda.Syntax.Parser.Alex: [lexSrcFile] :: AlexInput -> !SrcFile
+ Agda.Syntax.Parser.Monad: [errSrcFile] :: ParseError -> !SrcFile
+ Agda.Syntax.Parser.Monad: [parseSrcFile] :: ParseState -> !SrcFile
+ Agda.Syntax.Parser.Parser: exprWhereParser :: Parser ExprWhere
+ Agda.Syntax.Parser.Parser: instance GHC.Classes.Eq Agda.Syntax.Parser.Parser.RecordDirective
+ Agda.Syntax.Parser.Parser: instance GHC.Show.Show Agda.Syntax.Parser.Parser.RecordDirective
+ Agda.Syntax.Parser.Tokens: KwCATCHALL :: Keyword
+ Agda.Syntax.Parser.Tokens: KwCOMPILED_DATA_UHC :: Keyword
+ Agda.Syntax.Parser.Tokens: KwCOMPILED_DECLARE_DATA :: Keyword
+ Agda.Syntax.Parser.Tokens: KwCOMPILED_UHC :: Keyword
+ Agda.Syntax.Parser.Tokens: KwDISPLAY :: Keyword
+ Agda.Syntax.Parser.Tokens: KwEta :: Keyword
+ Agda.Syntax.Parser.Tokens: KwHASKELL :: Keyword
+ Agda.Syntax.Parser.Tokens: KwIMPORT_UHC :: Keyword
+ Agda.Syntax.Parser.Tokens: KwINLINE :: Keyword
+ Agda.Syntax.Parser.Tokens: KwMacro :: Keyword
+ Agda.Syntax.Parser.Tokens: KwNO_POSITIVITY_CHECK :: Keyword
+ Agda.Syntax.Parser.Tokens: KwNO_SMASHING :: Keyword
+ Agda.Syntax.Parser.Tokens: KwNoEta :: Keyword
+ Agda.Syntax.Parser.Tokens: KwUnquoteDef :: Keyword
+ Agda.Syntax.Position: consecutiveAndSeparated :: Ord a => [Interval' a] -> Bool
+ Agda.Syntax.Position: data Range' a
+ Agda.Syntax.Position: instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b) => Agda.Syntax.Position.HasRange (Data.Either.Either a b)
+ Agda.Syntax.Position: instance Agda.Syntax.Position.HasRange GHC.Types.Bool
+ Agda.Syntax.Position: instance Agda.Syntax.Position.KillRange Data.Void.Void
+ Agda.Syntax.Position: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Position.IntervalWithoutFile
+ Agda.Syntax.Position: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Position.PositionWithoutFile
+ Agda.Syntax.Position: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (Agda.Syntax.Position.Interval' (Data.Strict.Maybe.Maybe a))
+ Agda.Syntax.Position: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (Agda.Syntax.Position.Position' (Data.Strict.Maybe.Maybe a))
+ Agda.Syntax.Position: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (Agda.Syntax.Position.Range' (Data.Strict.Maybe.Maybe a))
+ Agda.Syntax.Position: instance GHC.Generics.Constructor Agda.Syntax.Position.C1_0Interval'
+ Agda.Syntax.Position: instance GHC.Generics.Constructor Agda.Syntax.Position.C1_0Position'
+ Agda.Syntax.Position: instance GHC.Generics.Constructor Agda.Syntax.Position.C1_0Range'
+ Agda.Syntax.Position: instance GHC.Generics.Constructor Agda.Syntax.Position.C1_1Range'
+ Agda.Syntax.Position: instance GHC.Generics.Datatype Agda.Syntax.Position.D1Interval'
+ Agda.Syntax.Position: instance GHC.Generics.Datatype Agda.Syntax.Position.D1Position'
+ Agda.Syntax.Position: instance GHC.Generics.Datatype Agda.Syntax.Position.D1Range'
+ Agda.Syntax.Position: instance GHC.Generics.Generic (Agda.Syntax.Position.Interval' a)
+ Agda.Syntax.Position: instance GHC.Generics.Generic (Agda.Syntax.Position.Position' a)
+ Agda.Syntax.Position: instance GHC.Generics.Generic (Agda.Syntax.Position.Range' a)
+ Agda.Syntax.Position: instance GHC.Generics.Selector Agda.Syntax.Position.S1_0_0Interval'
+ Agda.Syntax.Position: instance GHC.Generics.Selector Agda.Syntax.Position.S1_0_0Position'
+ Agda.Syntax.Position: instance GHC.Generics.Selector Agda.Syntax.Position.S1_0_1Interval'
+ Agda.Syntax.Position: instance GHC.Generics.Selector Agda.Syntax.Position.S1_0_1Position'
+ Agda.Syntax.Position: instance GHC.Generics.Selector Agda.Syntax.Position.S1_0_2Position'
+ Agda.Syntax.Position: instance GHC.Generics.Selector Agda.Syntax.Position.S1_0_3Position'
+ Agda.Syntax.Position: instance GHC.Show.Show Agda.Syntax.Position.IntervalWithoutFile
+ Agda.Syntax.Position: instance GHC.Show.Show Agda.Syntax.Position.PositionWithoutFile
+ Agda.Syntax.Position: instance GHC.Show.Show a => GHC.Show.Show (Agda.Syntax.Position.Interval' (Data.Strict.Maybe.Maybe a))
+ Agda.Syntax.Position: instance GHC.Show.Show a => GHC.Show.Show (Agda.Syntax.Position.Position' (Data.Strict.Maybe.Maybe a))
+ Agda.Syntax.Position: instance GHC.Show.Show a => GHC.Show.Show (Agda.Syntax.Position.Range' (Data.Strict.Maybe.Maybe a))
+ Agda.Syntax.Position: instance Test.QuickCheck.Arbitrary.CoArbitrary a => Test.QuickCheck.Arbitrary.CoArbitrary (Agda.Syntax.Position.Interval' a)
+ Agda.Syntax.Position: instance Test.QuickCheck.Arbitrary.CoArbitrary a => Test.QuickCheck.Arbitrary.CoArbitrary (Agda.Syntax.Position.Position' a)
+ Agda.Syntax.Position: instance Test.QuickCheck.Arbitrary.CoArbitrary a => Test.QuickCheck.Arbitrary.CoArbitrary (Agda.Syntax.Position.Range' a)
+ Agda.Syntax.Position: intervalsToRange :: a -> [IntervalWithoutFile] -> Range' a
+ Agda.Syntax.Position: posToInterval :: a -> PositionWithoutFile -> PositionWithoutFile -> Interval' a
+ Agda.Syntax.Position: posToRange' :: a -> PositionWithoutFile -> PositionWithoutFile -> Range' a
+ Agda.Syntax.Position: rEnd' :: Range' a -> Maybe PositionWithoutFile
+ Agda.Syntax.Position: rStart' :: Range' a -> Maybe PositionWithoutFile
+ Agda.Syntax.Position: rangeFile :: Range -> SrcFile
+ Agda.Syntax.Position: rangeIntervals :: Range' a -> [IntervalWithoutFile]
+ Agda.Syntax.Position: type IntervalWithoutFile = Interval' ()
+ Agda.Syntax.Position: type PositionWithoutFile = Position' ()
+ Agda.Syntax.Position: type SrcFile = Maybe AbsolutePath
+ Agda.Syntax.Reflected: Abs :: String -> a -> Abs a
+ Agda.Syntax.Reflected: AbsurdClause :: [Arg Pattern] -> Clause
+ Agda.Syntax.Reflected: AbsurdP :: Pattern
+ Agda.Syntax.Reflected: Apply :: (Arg a) -> Elim' a
+ Agda.Syntax.Reflected: Axiom :: Definition
+ Agda.Syntax.Reflected: Clause :: [Arg Pattern] -> Term -> Clause
+ Agda.Syntax.Reflected: Con :: QName -> Elims -> Term
+ Agda.Syntax.Reflected: ConP :: QName -> [Arg Pattern] -> Pattern
+ Agda.Syntax.Reflected: DataConstructor :: Definition
+ Agda.Syntax.Reflected: DataDef :: Definition
+ Agda.Syntax.Reflected: Def :: QName -> Elims -> Term
+ Agda.Syntax.Reflected: DotP :: Pattern
+ Agda.Syntax.Reflected: ExtLam :: [Clause] -> Elims -> Term
+ Agda.Syntax.Reflected: FunDef :: Type -> [Clause] -> Definition
+ Agda.Syntax.Reflected: Lam :: Hiding -> (Abs Term) -> Term
+ Agda.Syntax.Reflected: Lit :: Literal -> Term
+ Agda.Syntax.Reflected: LitP :: Literal -> Pattern
+ Agda.Syntax.Reflected: LitS :: Integer -> Sort
+ Agda.Syntax.Reflected: Meta :: MetaId -> Elims -> Term
+ Agda.Syntax.Reflected: Pi :: (Dom Type) -> (Abs Type) -> Term
+ Agda.Syntax.Reflected: Primitive :: Definition
+ Agda.Syntax.Reflected: ProjP :: QName -> Pattern
+ Agda.Syntax.Reflected: RecordDef :: Definition
+ Agda.Syntax.Reflected: SetS :: Term -> Sort
+ Agda.Syntax.Reflected: Sort :: Sort -> Term
+ Agda.Syntax.Reflected: Unknown :: Term
+ Agda.Syntax.Reflected: UnknownS :: Sort
+ Agda.Syntax.Reflected: Var :: Int -> Elims -> Term
+ Agda.Syntax.Reflected: VarP :: String -> Pattern
+ Agda.Syntax.Reflected: argsToElims :: Args -> Elims
+ Agda.Syntax.Reflected: data Abs a
+ Agda.Syntax.Reflected: data Clause
+ Agda.Syntax.Reflected: data Definition
+ Agda.Syntax.Reflected: data Elim' a
+ Agda.Syntax.Reflected: data Pattern
+ Agda.Syntax.Reflected: data Sort
+ Agda.Syntax.Reflected: data Term
+ Agda.Syntax.Reflected: instance GHC.Show.Show Agda.Syntax.Reflected.Clause
+ Agda.Syntax.Reflected: instance GHC.Show.Show Agda.Syntax.Reflected.Definition
+ Agda.Syntax.Reflected: instance GHC.Show.Show Agda.Syntax.Reflected.Pattern
+ Agda.Syntax.Reflected: instance GHC.Show.Show Agda.Syntax.Reflected.Sort
+ Agda.Syntax.Reflected: instance GHC.Show.Show Agda.Syntax.Reflected.Term
+ Agda.Syntax.Reflected: instance GHC.Show.Show a => GHC.Show.Show (Agda.Syntax.Reflected.Abs a)
+ Agda.Syntax.Reflected: instance GHC.Show.Show a => GHC.Show.Show (Agda.Syntax.Reflected.Elim' a)
+ Agda.Syntax.Reflected: type Args = [Arg Term]
+ Agda.Syntax.Reflected: type Elim = Elim' Term
+ Agda.Syntax.Reflected: type Elims = [Elim]
+ Agda.Syntax.Reflected: type Type = Term
+ Agda.Syntax.Scope.Base: AmbiguousAnything :: AllowAmbiguousNames
+ Agda.Syntax.Scope.Base: AmbiguousConstructors :: AllowAmbiguousNames
+ Agda.Syntax.Scope.Base: AmbiguousNothing :: AllowAmbiguousNames
+ Agda.Syntax.Scope.Base: MacroName :: KindOfName
+ Agda.Syntax.Scope.Base: [nsInScope] :: NameSpace -> InScopeSet
+ Agda.Syntax.Scope.Base: [scopeInScope] :: ScopeInfo -> InScopeSet
+ Agda.Syntax.Scope.Base: [scopeInverseModule] :: ScopeInfo -> Map ModuleName [QName]
+ Agda.Syntax.Scope.Base: [scopeInverseName] :: ScopeInfo -> Map QName [QName]
+ Agda.Syntax.Scope.Base: concreteNamesInScope :: ScopeInfo -> Set QName
+ Agda.Syntax.Scope.Base: data AllowAmbiguousNames
+ Agda.Syntax.Scope.Base: instance GHC.Classes.Eq Agda.Syntax.Scope.Base.AllowAmbiguousNames
+ Agda.Syntax.Scope.Base: instance GHC.Classes.Eq Agda.Syntax.Scope.Base.NameSpace
+ Agda.Syntax.Scope.Base: instance GHC.Classes.Eq Agda.Syntax.Scope.Base.Scope
+ Agda.Syntax.Scope.Base: instance GHC.Classes.Eq Agda.Syntax.Scope.Base.ScopeInfo
+ Agda.Syntax.Scope.Base: isNameInScope :: QName -> ScopeInfo -> Bool
+ Agda.Syntax.Scope.Base: mapScope' :: NameSpaceId -> (NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope) -> (InScopeSet -> InScopeSet) -> Scope -> Scope
+ Agda.Syntax.Scope.Base: mapScopeInfo :: (Scope -> Scope) -> ScopeInfo -> ScopeInfo
+ Agda.Syntax.Scope.Base: publicNames :: ScopeInfo -> Set AbstractName
+ Agda.Syntax.Scope.Base: recomputeInScopeSets :: Scope -> Scope
+ Agda.Syntax.Scope.Base: recomputeInverseScopeMaps :: ScopeInfo -> ScopeInfo
+ Agda.Syntax.Scope.Base: restrictLocalPrivate :: ModuleName -> Scope -> Scope
+ Agda.Syntax.Scope.Base: type InScopeSet = Set QName
+ Agda.Syntax.Scope.Base: type UsingOrHiding = Either Using [ImportedName]
+ Agda.Syntax.Scope.Base: usingOrHiding :: ImportDirective -> UsingOrHiding
+ Agda.Syntax.Scope.Monad: lookupImportedName :: (Eq a, Eq b) => ImportedName' a b -> [ImportedName' (a, c) (b, d)] -> ImportedName' c d
+ Agda.Syntax.Scope.Monad: mapImportDir :: (Eq a, Eq b) => [ImportedName' (a, c) (b, d)] -> [ImportedName' (a, c) (b, d)] -> ImportDirective' a b -> ImportDirective' c d
+ Agda.Syntax.Scope.Monad: mapRenaming :: (Eq a, Eq b) => [ImportedName' (a, c) (b, d)] -> [ImportedName' (a, c) (b, d)] -> Renaming' a b -> Renaming' c d
+ Agda.Syntax.Scope.Monad: mapUsing :: (Eq a, Eq b) => [ImportedName' (a, c) (b, d)] -> Using' a b -> Using' c d
+ Agda.Syntax.Translation.AbstractToConcrete: instance (Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a1 c1, Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a2 c2) => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Data.Either.Either a1 a2) (Data.Either.Either c1 c2)
+ Agda.Syntax.Translation.AbstractToConcrete: instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a c => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Common.Arg a) (Agda.Syntax.Common.Arg c)
+ Agda.Syntax.Translation.AbstractToConcrete: instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a c => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Concrete.FieldAssignment' a) (Agda.Syntax.Concrete.FieldAssignment' c)
+ Agda.Syntax.Translation.ConcreteToAbstract: [topLevelScope] :: TopLevelInfo -> ScopeInfo
+ Agda.Syntax.Translation.ConcreteToAbstract: instance (Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract c1 a1, Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract c2 a2) => Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract (Data.Either.Either c1 c2) (Data.Either.Either a1 a2)
+ Agda.Syntax.Translation.ConcreteToAbstract: instance (GHC.Show.Show a, Agda.Syntax.Translation.ConcreteToAbstract.ToQName a) => Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract (Agda.Syntax.Translation.ConcreteToAbstract.OldName a) Agda.Syntax.Abstract.Name.QName
+ Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract Agda.Syntax.Concrete.ModuleAssignment (Agda.Syntax.Abstract.Name.ModuleName, [Agda.Syntax.Abstract.LetBinding])
+ Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract c a => Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract (Agda.Syntax.Common.Arg c) (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract c a => Agda.Syntax.Translation.ConcreteToAbstract.ToAbstract (Agda.Syntax.Concrete.FieldAssignment' c) (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.ToQName Agda.Syntax.Concrete.Name.Name
+ Agda.Syntax.Translation.ConcreteToAbstract: instance Agda.Syntax.Translation.ConcreteToAbstract.ToQName Agda.Syntax.Concrete.Name.QName
+ Agda.Syntax.Translation.InternalToAbstract: instance (Agda.Syntax.Translation.InternalToAbstract.DotVars a, Agda.Syntax.Translation.InternalToAbstract.DotVars b) => Agda.Syntax.Translation.InternalToAbstract.DotVars (Data.Either.Either a b)
+ Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.DotVars Agda.Syntax.Abstract.Name.ModuleName
+ Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.DotVars a => Agda.Syntax.Translation.InternalToAbstract.DotVars (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.DotVars a => Agda.Syntax.Translation.InternalToAbstract.DotVars (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.Reify i a => Agda.Syntax.Translation.InternalToAbstract.Reify (Agda.Syntax.Common.Arg i) (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.Reify i a => Agda.Syntax.Translation.InternalToAbstract.Reify (Agda.Syntax.Common.Dom i) (Agda.Syntax.Common.Arg a)
+ Agda.Syntax.Translation.InternalToAbstract: instance Agda.TypeChecking.Monad.Base.MonadTCM tcm => Agda.TypeChecking.Monad.Base.MonadTCM (Agda.Syntax.Translation.InternalToAbstract.TickT tcm)
+ Agda.Syntax.Translation.InternalToAbstract: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Agda.Syntax.Translation.InternalToAbstract.TickT m)
+ Agda.Syntax.Translation.InternalToAbstract: instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Agda.Syntax.Translation.InternalToAbstract.TickT m)
+ Agda.Syntax.Translation.InternalToAbstract: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Agda.Syntax.Translation.InternalToAbstract.TickT m)
+ Agda.Syntax.Translation.InternalToAbstract: instance Control.Monad.Trans.Class.MonadTrans Agda.Syntax.Translation.InternalToAbstract.TickT
+ Agda.Syntax.Translation.InternalToAbstract: instance GHC.Base.Functor m => GHC.Base.Functor (Agda.Syntax.Translation.InternalToAbstract.TickT m)
+ Agda.Syntax.Translation.InternalToAbstract: instance GHC.Base.Monad m => Agda.Syntax.Translation.InternalToAbstract.MonadTick (Agda.Syntax.Translation.InternalToAbstract.TickT m)
+ Agda.Syntax.Translation.InternalToAbstract: instance GHC.Base.Monad m => GHC.Base.Applicative (Agda.Syntax.Translation.InternalToAbstract.TickT m)
+ Agda.Syntax.Translation.InternalToAbstract: instance GHC.Base.Monad m => GHC.Base.Monad (Agda.Syntax.Translation.InternalToAbstract.TickT m)
+ Agda.Syntax.Translation.ReflectedToAbstract: askName :: Int -> WithNames (Maybe Name)
+ Agda.Syntax.Translation.ReflectedToAbstract: class ToAbstract r a | r -> a
+ Agda.Syntax.Translation.ReflectedToAbstract: instance Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract (Agda.Syntax.Abstract.Expr, Agda.Syntax.Reflected.Elim) Agda.Syntax.Abstract.Expr
+ Agda.Syntax.Translation.ReflectedToAbstract: instance Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract (Agda.Syntax.Abstract.Expr, Agda.Syntax.Reflected.Elims) Agda.Syntax.Abstract.Expr
+ Agda.Syntax.Translation.ReflectedToAbstract: instance Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract (Agda.Syntax.Abstract.Name.QNamed Agda.Syntax.Reflected.Clause) Agda.Syntax.Abstract.Clause
+ Agda.Syntax.Translation.ReflectedToAbstract: instance Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract Agda.Syntax.Literal.Literal Agda.Syntax.Abstract.Expr
+ Agda.Syntax.Translation.ReflectedToAbstract: instance Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract Agda.Syntax.Reflected.Pattern (Agda.Syntax.Translation.ReflectedToAbstract.Names, Agda.Syntax.Abstract.Pattern)
+ Agda.Syntax.Translation.ReflectedToAbstract: instance Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract Agda.Syntax.Reflected.Sort Agda.Syntax.Abstract.Expr
+ Agda.Syntax.Translation.ReflectedToAbstract: instance Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract Agda.Syntax.Reflected.Term Agda.Syntax.Abstract.Expr
+ Agda.Syntax.Translation.ReflectedToAbstract: instance Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract [Agda.Syntax.Abstract.Name.QNamed Agda.Syntax.Reflected.Clause] [Agda.Syntax.Abstract.Clause]
+ Agda.Syntax.Translation.ReflectedToAbstract: instance Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract [Agda.Syntax.Common.Arg Agda.Syntax.Reflected.Term] [Agda.Syntax.Common.NamedArg Agda.Syntax.Abstract.Expr]
+ Agda.Syntax.Translation.ReflectedToAbstract: instance Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract r Agda.Syntax.Abstract.Expr => Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract (Agda.Syntax.Common.Dom r, Agda.Syntax.Abstract.Name.Name) Agda.Syntax.Abstract.TypedBindings
+ Agda.Syntax.Translation.ReflectedToAbstract: instance Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract r a => Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract (Agda.Syntax.Common.Arg r) (Agda.Syntax.Common.NamedArg a)
+ Agda.Syntax.Translation.ReflectedToAbstract: instance Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract r a => Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract (Agda.Syntax.Common.Named name r) (Agda.Syntax.Common.Named name a)
+ Agda.Syntax.Translation.ReflectedToAbstract: instance Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract r a => Agda.Syntax.Translation.ReflectedToAbstract.ToAbstract (Agda.Syntax.Reflected.Abs r) (a, Agda.Syntax.Abstract.Name.Name)
+ Agda.Syntax.Translation.ReflectedToAbstract: mkSet :: Expr -> Expr
+ Agda.Syntax.Translation.ReflectedToAbstract: toAbstract :: ToAbstract r a => r -> WithNames a
+ Agda.Syntax.Translation.ReflectedToAbstract: toAbstractPats :: [Arg Pattern] -> WithNames (Names, [NamedArg Pattern])
+ Agda.Syntax.Translation.ReflectedToAbstract: toAbstractWithoutImplicit :: ToAbstract r a => r -> TCM a
+ Agda.Syntax.Translation.ReflectedToAbstract: toAbstract_ :: ToAbstract r a => r -> TCM a
+ Agda.Syntax.Translation.ReflectedToAbstract: type Names = [Name]
+ Agda.Syntax.Translation.ReflectedToAbstract: type WithNames a = ReaderT Names TCM a
+ Agda.Syntax.Translation.ReflectedToAbstract: withName :: String -> (Name -> WithNames a) -> WithNames a
+ Agda.Syntax.Treeless: CTChar :: CaseType
+ Agda.Syntax.Treeless: CTData :: QName -> CaseType
+ Agda.Syntax.Treeless: CTQName :: CaseType
+ Agda.Syntax.Treeless: CTString :: CaseType
+ Agda.Syntax.Treeless: Compiled :: TTerm -> [Bool] -> Compiled
+ Agda.Syntax.Treeless: PAdd :: TPrim
+ Agda.Syntax.Treeless: PEq :: TPrim
+ Agda.Syntax.Treeless: PGeq :: TPrim
+ Agda.Syntax.Treeless: PIf :: TPrim
+ Agda.Syntax.Treeless: PLt :: TPrim
+ Agda.Syntax.Treeless: PMul :: TPrim
+ Agda.Syntax.Treeless: PQuot :: TPrim
+ Agda.Syntax.Treeless: PRem :: TPrim
+ Agda.Syntax.Treeless: PSeq :: TPrim
+ Agda.Syntax.Treeless: PSub :: TPrim
+ Agda.Syntax.Treeless: TACon :: QName -> Int -> TTerm -> TAlt
+ Agda.Syntax.Treeless: TAGuard :: TTerm -> TTerm -> TAlt
+ Agda.Syntax.Treeless: TALit :: Literal -> TTerm -> TAlt
+ Agda.Syntax.Treeless: TApp :: TTerm -> Args -> TTerm
+ Agda.Syntax.Treeless: TCase :: Int -> CaseType -> TTerm -> [TAlt] -> TTerm
+ Agda.Syntax.Treeless: TCon :: QName -> TTerm
+ Agda.Syntax.Treeless: TDef :: QName -> TTerm
+ Agda.Syntax.Treeless: TErased :: TTerm
+ Agda.Syntax.Treeless: TError :: TError -> TTerm
+ Agda.Syntax.Treeless: TLam :: TTerm -> TTerm
+ Agda.Syntax.Treeless: TLet :: TTerm -> TTerm -> TTerm
+ Agda.Syntax.Treeless: TLit :: Literal -> TTerm
+ Agda.Syntax.Treeless: TPrim :: TPrim -> TTerm
+ Agda.Syntax.Treeless: TSort :: TTerm
+ Agda.Syntax.Treeless: TUnit :: TTerm
+ Agda.Syntax.Treeless: TUnreachable :: TError
+ Agda.Syntax.Treeless: TVar :: Int -> TTerm
+ Agda.Syntax.Treeless: [aArity] :: TAlt -> Int
+ Agda.Syntax.Treeless: [aBody] :: TAlt -> TTerm
+ Agda.Syntax.Treeless: [aCon] :: TAlt -> QName
+ Agda.Syntax.Treeless: [aGuard] :: TAlt -> TTerm
+ Agda.Syntax.Treeless: [aLit] :: TAlt -> Literal
+ Agda.Syntax.Treeless: [cArgUsage] :: Compiled -> [Bool]
+ Agda.Syntax.Treeless: [cTreeless] :: Compiled -> TTerm
+ Agda.Syntax.Treeless: class Unreachable a
+ Agda.Syntax.Treeless: data CaseType
+ Agda.Syntax.Treeless: data Compiled
+ Agda.Syntax.Treeless: data TAlt
+ Agda.Syntax.Treeless: data TError
+ Agda.Syntax.Treeless: data TPrim
+ Agda.Syntax.Treeless: data TTerm
+ Agda.Syntax.Treeless: instance Agda.Syntax.Position.KillRange Agda.Syntax.Treeless.Compiled
+ Agda.Syntax.Treeless: instance Agda.Syntax.Treeless.Unreachable Agda.Syntax.Treeless.TAlt
+ Agda.Syntax.Treeless: instance Agda.Syntax.Treeless.Unreachable Agda.Syntax.Treeless.TTerm
+ Agda.Syntax.Treeless: instance GHC.Classes.Eq Agda.Syntax.Treeless.CaseType
+ Agda.Syntax.Treeless: instance GHC.Classes.Eq Agda.Syntax.Treeless.Compiled
+ Agda.Syntax.Treeless: instance GHC.Classes.Eq Agda.Syntax.Treeless.TAlt
+ Agda.Syntax.Treeless: instance GHC.Classes.Eq Agda.Syntax.Treeless.TError
+ Agda.Syntax.Treeless: instance GHC.Classes.Eq Agda.Syntax.Treeless.TPrim
+ Agda.Syntax.Treeless: instance GHC.Classes.Eq Agda.Syntax.Treeless.TTerm
+ Agda.Syntax.Treeless: instance GHC.Classes.Ord Agda.Syntax.Treeless.CaseType
+ Agda.Syntax.Treeless: instance GHC.Classes.Ord Agda.Syntax.Treeless.Compiled
+ Agda.Syntax.Treeless: instance GHC.Classes.Ord Agda.Syntax.Treeless.TAlt
+ Agda.Syntax.Treeless: instance GHC.Classes.Ord Agda.Syntax.Treeless.TError
+ Agda.Syntax.Treeless: instance GHC.Classes.Ord Agda.Syntax.Treeless.TPrim
+ Agda.Syntax.Treeless: instance GHC.Classes.Ord Agda.Syntax.Treeless.TTerm
+ Agda.Syntax.Treeless: instance GHC.Show.Show Agda.Syntax.Treeless.CaseType
+ Agda.Syntax.Treeless: instance GHC.Show.Show Agda.Syntax.Treeless.Compiled
+ Agda.Syntax.Treeless: instance GHC.Show.Show Agda.Syntax.Treeless.TAlt
+ Agda.Syntax.Treeless: instance GHC.Show.Show Agda.Syntax.Treeless.TError
+ Agda.Syntax.Treeless: instance GHC.Show.Show Agda.Syntax.Treeless.TPrim
+ Agda.Syntax.Treeless: instance GHC.Show.Show Agda.Syntax.Treeless.TTerm
+ Agda.Syntax.Treeless: intView :: TTerm -> Maybe Integer
+ Agda.Syntax.Treeless: isUnreachable :: Unreachable a => a -> Bool
+ Agda.Syntax.Treeless: mkLet :: TTerm -> TTerm -> TTerm
+ Agda.Syntax.Treeless: mkTApp :: TTerm -> Args -> TTerm
+ Agda.Syntax.Treeless: negPlusKView :: TTerm -> Maybe (Integer, TTerm)
+ Agda.Syntax.Treeless: plusKView :: TTerm -> Maybe (Integer, TTerm)
+ Agda.Syntax.Treeless: tAppView :: TTerm -> [TTerm]
+ Agda.Syntax.Treeless: tInt :: Integer -> TTerm
+ Agda.Syntax.Treeless: tNegPlusK :: Integer -> TTerm -> TTerm
+ Agda.Syntax.Treeless: tOp :: TPrim -> TTerm -> TTerm -> TTerm
+ Agda.Syntax.Treeless: tPlusK :: Integer -> TTerm -> TTerm
+ Agda.Syntax.Treeless: tUnreachable :: TTerm
+ Agda.Syntax.Treeless: type Args = [TTerm]
+ Agda.Termination.CallGraph: instance GHC.Base.Monoid (Agda.Termination.CallGraph.CallGraph cinfo)
+ Agda.Termination.SparseMatrix: instance (GHC.Real.Integral i, Test.QuickCheck.Arbitrary.Arbitrary b, Agda.Termination.Semiring.HasZero b) => Test.QuickCheck.Arbitrary.Arbitrary (Agda.Termination.SparseMatrix.Matrix i b)
+ Agda.Termination.SparseMatrix: instance (GHC.Real.Integral i, Test.QuickCheck.Arbitrary.CoArbitrary b, Agda.Termination.Semiring.HasZero b) => Test.QuickCheck.Arbitrary.CoArbitrary (Agda.Termination.SparseMatrix.Matrix i b)
+ Agda.Termination.SparseMatrix: instance GHC.Real.Integral i => Test.QuickCheck.Arbitrary.Arbitrary (Agda.Termination.SparseMatrix.MIx i)
+ Agda.Termination.SparseMatrix: instance GHC.Real.Integral i => Test.QuickCheck.Arbitrary.Arbitrary (Agda.Termination.SparseMatrix.Size i)
+ Agda.Termination.TermCheck: instance Agda.Termination.TermCheck.ExtractCalls a => Agda.Termination.TermCheck.ExtractCalls (Agda.Syntax.Common.Arg a)
+ Agda.Termination.TermCheck: instance Agda.Termination.TermCheck.ExtractCalls a => Agda.Termination.TermCheck.ExtractCalls (Agda.Syntax.Common.Dom a)
+ Agda.Termination.TermCheck: instance Agda.Termination.TermCheck.StripAllProjections a => Agda.Termination.TermCheck.StripAllProjections (Agda.Syntax.Common.Arg a)
+ Agda.TheTypeChecker: checkDeclCached :: Declaration -> TCM ()
+ Agda.TypeChecking.Abstract: absTerm :: AbsTerm a => Term -> a -> a
+ Agda.TypeChecking.Abstract: abstractType :: Type -> Term -> Type -> TCM Type
+ Agda.TypeChecking.Abstract: class AbsTerm a
+ Agda.TypeChecking.Abstract: instance (Agda.TypeChecking.Abstract.AbsTerm a, Agda.TypeChecking.Abstract.AbsTerm b) => Agda.TypeChecking.Abstract.AbsTerm (a, b)
+ Agda.TypeChecking.Abstract: instance (Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term a, Agda.TypeChecking.Abstract.AbsTerm a) => Agda.TypeChecking.Abstract.AbsTerm (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbsTerm Agda.Syntax.Internal.Level
+ Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbsTerm Agda.Syntax.Internal.LevelAtom
+ Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbsTerm Agda.Syntax.Internal.PlusLevel
+ Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbsTerm Agda.Syntax.Internal.Sort
+ Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbsTerm Agda.Syntax.Internal.Term
+ Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbsTerm Agda.Syntax.Internal.Type
+ Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbsTerm a => Agda.TypeChecking.Abstract.AbsTerm (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbsTerm a => Agda.TypeChecking.Abstract.AbsTerm (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbsTerm a => Agda.TypeChecking.Abstract.AbsTerm (Agda.Syntax.Internal.Elim' a)
+ Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbsTerm a => Agda.TypeChecking.Abstract.AbsTerm (Agda.Utils.Pointer.Ptr a)
+ Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbsTerm a => Agda.TypeChecking.Abstract.AbsTerm (GHC.Base.Maybe a)
+ Agda.TypeChecking.Abstract: instance Agda.TypeChecking.Abstract.AbsTerm a => Agda.TypeChecking.Abstract.AbsTerm [a]
+ Agda.TypeChecking.Abstract: piAbstract :: (Term, EqualityView) -> Type -> TCM Type
+ Agda.TypeChecking.Abstract: swap01 :: (Subst Term a) => a -> a
+ Agda.TypeChecking.Abstract: typeOf :: Type -> Type
+ Agda.TypeChecking.CheckInternal: Action :: (Type -> Term -> TCM Term) -> (Type -> Term -> TCM Term) -> Action
+ Agda.TypeChecking.CheckInternal: [postAction] :: Action -> Type -> Term -> TCM Term
+ Agda.TypeChecking.CheckInternal: [preAction] :: Action -> Type -> Term -> TCM Term
+ Agda.TypeChecking.CheckInternal: checkInternal' :: Action -> Term -> Type -> TCM Term
+ Agda.TypeChecking.CheckInternal: data Action
+ Agda.TypeChecking.CheckInternal: defaultAction :: Action
+ Agda.TypeChecking.Conversion: equalLevel' :: Level -> Level -> TCM ()
+ Agda.TypeChecking.Coverage.Match: DotMP :: MPat -> MPat
+ Agda.TypeChecking.Coverage.Match: instance GHC.Show.Show Agda.TypeChecking.Coverage.Match.MPat
+ Agda.TypeChecking.Coverage.Match: isTrivialMPattern :: MPat -> Bool
+ Agda.TypeChecking.Datatypes: DataCon :: Nat -> ConstructorInfo
+ Agda.TypeChecking.Datatypes: NoEta :: HasEta
+ Agda.TypeChecking.Datatypes: RecordCon :: HasEta -> [Arg QName] -> ConstructorInfo
+ Agda.TypeChecking.Datatypes: YesEta :: HasEta
+ Agda.TypeChecking.Datatypes: data ConstructorInfo
+ Agda.TypeChecking.Datatypes: data HasEta
+ Agda.TypeChecking.Datatypes: getConstructorInfo :: QName -> TCM ConstructorInfo
+ Agda.TypeChecking.Datatypes: instance GHC.Classes.Eq Agda.TypeChecking.Datatypes.HasEta
+ Agda.TypeChecking.DeadCode: eliminateDeadCode :: DisplayForms -> Signature -> TCM (DisplayForms, Signature)
+ Agda.TypeChecking.DisplayForm: instance Agda.TypeChecking.DisplayForm.Match a => Agda.TypeChecking.DisplayForm.Match (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Free: allVars :: FreeVars -> VarSet
+ Agda.TypeChecking.Free: class Free' a c
+ Agda.TypeChecking.Free: instance Agda.Utils.Null.Null Agda.TypeChecking.Free.FreeVars
+ Agda.TypeChecking.Free: relevantVars :: FreeVars -> VarSet
+ Agda.TypeChecking.Free: rigidVars :: FreeVars -> VarSet
+ Agda.TypeChecking.Free: runFree :: (Monoid c, Free' a c) => SingleVar c -> IgnoreSorts -> a -> c
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' Agda.Syntax.Internal.EqualityView c
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' a c => Agda.TypeChecking.Free.Lazy.Free' (Agda.Syntax.Common.Arg a) c
+ Agda.TypeChecking.Free.Lazy: instance Agda.TypeChecking.Free.Lazy.Free' a c => Agda.TypeChecking.Free.Lazy.Free' (Agda.Syntax.Common.Dom a) c
+ Agda.TypeChecking.Free.Old: instance Agda.TypeChecking.Free.Old.Free a => Agda.TypeChecking.Free.Old.Free (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Free.Old: instance Agda.TypeChecking.Free.Old.Free a => Agda.TypeChecking.Free.Old.Free (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.InstanceArguments: areThereNonRigidMetaArguments :: Term -> TCM (Maybe MetaId)
+ Agda.TypeChecking.InstanceArguments: dropSameCandidates :: MetaId -> [(Candidate, Term, Type, a)] -> TCM [(Candidate, Term, Type, a)]
+ Agda.TypeChecking.InstanceArguments: filterResetingState :: MetaId -> [Candidate] -> (Candidate -> TCM Bool) -> TCM [Candidate]
+ Agda.TypeChecking.InstanceArguments: isRigid :: MetaId -> TCM Bool
+ Agda.TypeChecking.MetaVars: instance Agda.TypeChecking.MetaVars.NoProjectedVar a => Agda.TypeChecking.MetaVars.NoProjectedVar (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.MetaVars.Mention: instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta t => Agda.TypeChecking.MetaVars.Mention.MentionsMeta (Agda.Syntax.Common.Arg t)
+ Agda.TypeChecking.MetaVars.Mention: instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta t => Agda.TypeChecking.MetaVars.Mention.MentionsMeta (Agda.Syntax.Common.Dom t)
+ Agda.TypeChecking.MetaVars.Occurs: instance (Agda.TypeChecking.MetaVars.Occurs.Occurs a, Agda.TypeChecking.Substitute.Subst t a) => Agda.TypeChecking.MetaVars.Occurs.Occurs (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.MetaVars.Occurs: instance (Agda.TypeChecking.Substitute.Subst t a, Agda.TypeChecking.MetaVars.Occurs.FoldRigid a) => Agda.TypeChecking.MetaVars.Occurs.FoldRigid (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.MetaVars.Occurs: instance Agda.TypeChecking.MetaVars.Occurs.FoldRigid a => Agda.TypeChecking.MetaVars.Occurs.FoldRigid (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.MetaVars.Occurs: instance Agda.TypeChecking.MetaVars.Occurs.FoldRigid a => Agda.TypeChecking.MetaVars.Occurs.FoldRigid (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.MetaVars.Occurs: instance Agda.TypeChecking.MetaVars.Occurs.Occurs a => Agda.TypeChecking.MetaVars.Occurs.Occurs (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.MetaVars.Occurs: instance Agda.TypeChecking.MetaVars.Occurs.Occurs a => Agda.TypeChecking.MetaVars.Occurs.Occurs (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Monad.Base: Candidate :: Term -> Type -> ExplicitToInstance -> Candidate
+ Agda.TypeChecking.Monad.Base: CheckProjection :: Range -> QName -> Type -> Call
+ Agda.TypeChecking.Monad.Base: CopatternReductions :: AllowedReduction
+ Agda.TypeChecking.Monad.Base: CoverageNoExactSplit :: QName -> Clause -> TypeError
+ Agda.TypeChecking.Monad.Base: CrConstr :: CoreConstr -> CoreRepresentation
+ Agda.TypeChecking.Monad.Base: CrDefn :: CoreExpr -> CoreRepresentation
+ Agda.TypeChecking.Monad.Base: CrType :: CoreType -> CoreRepresentation
+ Agda.TypeChecking.Monad.Base: Decl :: !Declaration -> TypeCheckAction
+ Agda.TypeChecking.Monad.Base: EnterSection :: !ModuleInfo -> !ModuleName -> ![TypedBindings] -> TypeCheckAction
+ Agda.TypeChecking.Monad.Base: ExplicitStayExplicit :: ExplicitToInstance
+ Agda.TypeChecking.Monad.Base: ExplicitToInstance :: ExplicitToInstance
+ Agda.TypeChecking.Monad.Base: Inferred :: !Bool -> EtaEquality
+ Agda.TypeChecking.Monad.Base: InlineReductions :: AllowedReduction
+ Agda.TypeChecking.Monad.Base: LeaveSection :: !ModuleName -> TypeCheckAction
+ Agda.TypeChecking.Monad.Base: LoadedFileCache :: !CachedTypeCheckLog -> !CurrentTypeCheckLog -> LoadedFileCache
+ Agda.TypeChecking.Monad.Base: ModuleContents :: Call
+ Agda.TypeChecking.Monad.Base: NonCanonical :: String -> Term -> UnquoteError
+ Agda.TypeChecking.Monad.Base: OperatorChangeMessage :: TypeError -> TypeError
+ Agda.TypeChecking.Monad.Base: OperatorInformation :: [NotationSection] -> TypeError -> TypeError
+ Agda.TypeChecking.Monad.Base: Pragmas :: !PragmaOptions -> TypeCheckAction
+ Agda.TypeChecking.Monad.Base: SafeFlagNoPositivityCheck :: TypeError
+ Agda.TypeChecking.Monad.Base: Specified :: !Bool -> EtaEquality
+ Agda.TypeChecking.Monad.Base: UnificationRecursiveEq :: Type -> Int -> Term -> TypeError
+ Agda.TypeChecking.Monad.Base: UnificationStuck :: Telescope -> [Term] -> [Term] -> TypeError
+ Agda.TypeChecking.Monad.Base: UnifyConflict :: ConHead -> ConHead -> TypeError
+ Agda.TypeChecking.Monad.Base: UnifyCycle :: Int -> Term -> TypeError
+ Agda.TypeChecking.Monad.Base: UnifyIndicesNotVars :: Type -> Term -> Term -> Args -> TypeError
+ Agda.TypeChecking.Monad.Base: UnquoteTactic :: Term -> Term -> Type -> TypeCheckingProblem
+ Agda.TypeChecking.Monad.Base: WrongInstanceDeclaration :: TypeError
+ Agda.TypeChecking.Monad.Base: [candidateEti] :: Candidate -> ExplicitToInstance
+ Agda.TypeChecking.Monad.Base: [candidateTerm] :: Candidate -> Term
+ Agda.TypeChecking.Monad.Base: [candidateType] :: Candidate -> Type
+ Agda.TypeChecking.Monad.Base: [compiledCore] :: CompiledRepresentation -> Maybe CoreRepresentation
+ Agda.TypeChecking.Monad.Base: [defCopy] :: Definition -> Bool
+ Agda.TypeChecking.Monad.Base: [envCheckingWhere] :: TCEnv -> Bool
+ Agda.TypeChecking.Monad.Base: [funInline] :: Defn -> Bool
+ Agda.TypeChecking.Monad.Base: [funSmashable] :: Defn -> Bool
+ Agda.TypeChecking.Monad.Base: [funTreeless] :: Defn -> Maybe Compiled
+ Agda.TypeChecking.Monad.Base: [iDisplayForms] :: Interface -> DisplayForms
+ Agda.TypeChecking.Monad.Base: [iHaskellCode] :: Interface -> [String]
+ Agda.TypeChecking.Monad.Base: [iHaskellImportsUHC] :: Interface -> Set String
+ Agda.TypeChecking.Monad.Base: [lfcCached] :: LoadedFileCache -> !CachedTypeCheckLog
+ Agda.TypeChecking.Monad.Base: [lfcCurrent] :: LoadedFileCache -> !CurrentTypeCheckLog
+ Agda.TypeChecking.Monad.Base: [recEtaEquality'] :: Defn -> EtaEquality
+ Agda.TypeChecking.Monad.Base: [stLoadedFileCache] :: PersistentTCState -> !(Maybe LoadedFileCache)
+ Agda.TypeChecking.Monad.Base: [stPostFreshNameId] :: PostScopeState -> NameId
+ Agda.TypeChecking.Monad.Base: [stPostImportedDisplayForms] :: PostScopeState -> !DisplayForms
+ Agda.TypeChecking.Monad.Base: [stPostImportsDisplayForms] :: PostScopeState -> !DisplayForms
+ Agda.TypeChecking.Monad.Base: [stPreHaskellCode] :: PreScopeState -> [String]
+ Agda.TypeChecking.Monad.Base: [stPreHaskellImportsUHC] :: PreScopeState -> Set String
+ Agda.TypeChecking.Monad.Base: class Monad m => ReadTCState m
+ Agda.TypeChecking.Monad.Base: data Candidate
+ Agda.TypeChecking.Monad.Base: data CoreRepresentation
+ Agda.TypeChecking.Monad.Base: data EtaEquality
+ Agda.TypeChecking.Monad.Base: data ExplicitToInstance
+ Agda.TypeChecking.Monad.Base: data LoadedFileCache
+ Agda.TypeChecking.Monad.Base: data TypeCheckAction
+ Agda.TypeChecking.Monad.Base: defCoreDef :: Definition -> Maybe CoreRepresentation
+ Agda.TypeChecking.Monad.Base: defParameters :: Definition -> Maybe Nat
+ Agda.TypeChecking.Monad.Base: disableDestructiveUpdate :: TCM a -> TCM a
+ Agda.TypeChecking.Monad.Base: etaEqualityToBool :: EtaEquality -> Bool
+ Agda.TypeChecking.Monad.Base: getTCState :: ReadTCState m => m TCState
+ Agda.TypeChecking.Monad.Base: instance Agda.Syntax.Position.KillRange Agda.TypeChecking.Monad.Base.CtxId
+ Agda.TypeChecking.Monad.Base: instance Agda.Syntax.Position.KillRange Agda.TypeChecking.Monad.Base.EtaEquality
+ Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Monad.Base.MonadTCM tcm => Agda.TypeChecking.Monad.Base.MonadTCM (Control.Monad.Trans.Except.ExceptT err tcm)
+ Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Monad.Base.ReadTCState Agda.TypeChecking.Monad.Base.ReduceM
+ Agda.TypeChecking.Monad.Base: instance Control.Monad.IO.Class.MonadIO m => Agda.TypeChecking.Monad.Base.ReadTCState (Agda.TypeChecking.Monad.Base.TCMT m)
+ Agda.TypeChecking.Monad.Base: instance GHC.Classes.Eq Agda.TypeChecking.Monad.Base.ExplicitToInstance
+ Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.Candidate
+ Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.CoreRepresentation
+ Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.EtaEquality
+ Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.ExplicitToInstance
+ Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.TCState
+ Agda.TypeChecking.Monad.Base: nextFresh' :: HasFresh i => i -> i
+ Agda.TypeChecking.Monad.Base: recEtaEquality :: Defn -> Bool
+ Agda.TypeChecking.Monad.Base: setEtaEquality :: EtaEquality -> Bool -> EtaEquality
+ Agda.TypeChecking.Monad.Base: stHaskellCode :: Lens' [String] TCState
+ Agda.TypeChecking.Monad.Base: stHaskellImportsUHC :: Lens' (Set String) TCState
+ Agda.TypeChecking.Monad.Base: stImportedDisplayForms :: Lens' DisplayForms TCState
+ Agda.TypeChecking.Monad.Base: stImportsDisplayForms :: Lens' DisplayForms TCState
+ Agda.TypeChecking.Monad.Base: type CachedTypeCheckLog = [(TypeCheckAction, PostScopeState)]
+ Agda.TypeChecking.Monad.Base: type CurrentTypeCheckLog = [(TypeCheckAction, PostScopeState)]
+ Agda.TypeChecking.Monad.Base: type DisplayForms = HashMap QName [Open DisplayForm]
+ Agda.TypeChecking.Monad.Benchmark: reset :: MonadBench a m => m ()
+ Agda.TypeChecking.Monad.Builtin: builtinAbs :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAbsAbs :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaErrorPart :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaErrorPartName :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaErrorPartString :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaErrorPartTerm :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaLitMeta :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaMeta :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCM :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMBind :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMBlockOnMeta :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMCatchError :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMCheckType :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMCommit :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMDeclareDef :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMDefineFun :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMExtendContext :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMFreshName :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMGetContext :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMGetDefinition :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMGetType :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMInContext :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMInferType :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMNormalise :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMQuoteTerm :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMReturn :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMTypeError :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMUnify :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTCMUnquoteTerm :: String
+ Agda.TypeChecking.Monad.Builtin: builtinAgdaTermMeta :: String
+ Agda.TypeChecking.Monad.Builtin: builtinFromNat :: String
+ Agda.TypeChecking.Monad.Builtin: builtinFromNeg :: String
+ Agda.TypeChecking.Monad.Builtin: builtinFromString :: String
+ Agda.TypeChecking.Monad.Builtin: builtinIntegerNegSuc :: String
+ Agda.TypeChecking.Monad.Builtin: builtinIntegerPos :: String
+ Agda.TypeChecking.Monad.Builtin: builtinUnit :: String
+ Agda.TypeChecking.Monad.Builtin: builtinUnitUnit :: String
+ Agda.TypeChecking.Monad.Builtin: equalityUnview :: EqualityView -> Type
+ Agda.TypeChecking.Monad.Builtin: equalityView :: Type -> TCM EqualityView
+ Agda.TypeChecking.Monad.Builtin: primAbs :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAbsAbs :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaErrorPart :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaErrorPartName :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaErrorPartString :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaErrorPartTerm :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaLitMeta :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaMeta :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCM :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMBind :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMBlockOnMeta :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMCatchError :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMCheckType :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMCommit :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMDeclareDef :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMDefineFun :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMExtendContext :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMFreshName :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMGetContext :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMGetDefinition :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMGetType :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMInContext :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMInferType :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMNormalise :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMQuoteTerm :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMReturn :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMTypeError :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMUnify :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTCMUnquoteTerm :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTermMeta :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primFromNat :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primFromNeg :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primFromString :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primIntegerNegSuc :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primIntegerPos :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primUnit :: TCM Term
+ Agda.TypeChecking.Monad.Builtin: primUnitUnit :: TCM Term
+ Agda.TypeChecking.Monad.Caching: activateLoadedFileCache :: TCM ()
+ Agda.TypeChecking.Monad.Caching: cacheCurrentLog :: TCM ()
+ Agda.TypeChecking.Monad.Caching: cachingStarts :: TCM ()
+ Agda.TypeChecking.Monad.Caching: cleanCachedLog :: TCM ()
+ Agda.TypeChecking.Monad.Caching: readFromCachedLog :: TCM (Maybe (TypeCheckAction, PostScopeState))
+ Agda.TypeChecking.Monad.Caching: restorePostScopeState :: PostScopeState -> TCM ()
+ Agda.TypeChecking.Monad.Caching: writeToCurrentLog :: TypeCheckAction -> TCM ()
+ Agda.TypeChecking.Monad.Constraints: partitionM :: (a -> TCM Bool) -> [a] -> TCM ([a], [a])
+ Agda.TypeChecking.Monad.Context: getContextNames :: (Applicative m, MonadReader TCEnv m) => m [Name]
+ Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext (Agda.Syntax.Abstract.Name.Name, Agda.Syntax.Common.Dom Agda.Syntax.Internal.Type)
+ Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext (Agda.Syntax.Common.Dom (Agda.Syntax.Abstract.Name.Name, Agda.Syntax.Internal.Type))
+ Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext (Agda.Syntax.Common.Dom (GHC.Base.String, Agda.Syntax.Internal.Type))
+ Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext (Agda.Syntax.Common.Dom Agda.Syntax.Internal.Type)
+ Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext (GHC.Base.String, Agda.Syntax.Common.Dom Agda.Syntax.Internal.Type)
+ Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext ([Agda.Syntax.Abstract.Name.Name], Agda.Syntax.Common.Dom Agda.Syntax.Internal.Type)
+ Agda.TypeChecking.Monad.Context: instance Agda.TypeChecking.Monad.Context.AddContext ([Agda.Syntax.Common.WithHiding Agda.Syntax.Abstract.Name.Name], Agda.Syntax.Common.Dom Agda.Syntax.Internal.Type)
+ Agda.TypeChecking.Monad.Exception: instance (GHC.Base.Monad m, Agda.TypeChecking.Monad.Exception.MonadException err m) => Agda.TypeChecking.Monad.Exception.MonadException err (Control.Monad.Trans.State.Lazy.StateT s m)
+ Agda.TypeChecking.Monad.MetaVars: instance Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta a => Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Monad.Mutual: mutualBlockOf :: QName -> TCM MutualId
+ Agda.TypeChecking.Monad.Open: isClosed :: Open a -> Bool
+ Agda.TypeChecking.Monad.Options: addDefaultLibraries :: RelativeTo -> CommandLineOptions -> TCM CommandLineOptions
+ Agda.TypeChecking.Monad.Options: enableCaching :: TCM Bool
+ Agda.TypeChecking.Monad.Options: etaEnabled :: TCM Bool
+ Agda.TypeChecking.Monad.Options: getProjectRoot :: RelativeTo -> TCM AbsolutePath
+ Agda.TypeChecking.Monad.Options: libToTCM :: LibM a -> TCM a
+ Agda.TypeChecking.Monad.Options: setCommandLineOptions' :: RelativeTo -> CommandLineOptions -> TCM ()
+ Agda.TypeChecking.Monad.Options: setLibraryIncludes :: CommandLineOptions -> TCM CommandLineOptions
+ Agda.TypeChecking.Monad.Options: setLibraryPaths :: RelativeTo -> CommandLineOptions -> TCM CommandLineOptions
+ Agda.TypeChecking.Monad.Options: shared :: HasOptions m => Term -> m Term
+ Agda.TypeChecking.Monad.Options: sharedFun :: HasOptions m => m (Term -> Term)
+ Agda.TypeChecking.Monad.Options: sharedType :: HasOptions m => Type -> m Type
+ Agda.TypeChecking.Monad.Signature: addCoreCode :: QName -> CoreExpr -> TCM ()
+ Agda.TypeChecking.Monad.Signature: addCoreConstr :: QName -> CoreConstr -> TCM ()
+ Agda.TypeChecking.Monad.Signature: addCoreType :: QName -> CoreType -> TCM ()
+ Agda.TypeChecking.Monad.Signature: chaseDisplayForms :: QName -> TCM (Set QName)
+ Agda.TypeChecking.Monad.Signature: ensureNoCompiledHaskell :: QName -> TCM ()
+ Agda.TypeChecking.Monad.Signature: getCompiled :: QName -> TCM (Maybe Compiled)
+ Agda.TypeChecking.Monad.Signature: getCompiledArgUse :: QName -> TCM [Bool]
+ Agda.TypeChecking.Monad.Signature: getDisplayForms :: QName -> TCM [Open DisplayForm]
+ Agda.TypeChecking.Monad.Signature: getTreeless :: QName -> TCM (Maybe TTerm)
+ Agda.TypeChecking.Monad.Signature: hasLoopingDisplayForm :: QName -> TCM Bool
+ Agda.TypeChecking.Monad.Signature: inFreshModuleIfFreeParams :: TCM a -> TCM a
+ Agda.TypeChecking.Monad.Signature: isInlineFun :: Defn -> Bool
+ Agda.TypeChecking.Monad.Signature: isStaticFun :: Defn -> Bool
+ Agda.TypeChecking.Monad.Signature: markInline :: QName -> TCM ()
+ Agda.TypeChecking.Monad.Signature: markNoSmashing :: QName -> TCM ()
+ Agda.TypeChecking.Monad.Signature: setCompiledArgUse :: QName -> [Bool] -> TCM ()
+ Agda.TypeChecking.Monad.Signature: setTreeless :: QName -> TTerm -> TCM ()
+ Agda.TypeChecking.Monad.SizedTypes: class IsSizeType a
+ Agda.TypeChecking.Monad.SizedTypes: instance Agda.TypeChecking.Monad.SizedTypes.IsSizeType Agda.Syntax.Internal.Term
+ Agda.TypeChecking.Monad.SizedTypes: instance Agda.TypeChecking.Monad.SizedTypes.IsSizeType a => Agda.TypeChecking.Monad.SizedTypes.IsSizeType (Agda.Syntax.Internal.Type' a)
+ Agda.TypeChecking.Monad.State: addHaskellImportUHC :: String -> TCM ()
+ Agda.TypeChecking.Monad.State: addInlineHaskell :: String -> TCM ()
+ Agda.TypeChecking.Monad.State: getHaskellImportsUHC :: TCM (Set String)
+ Agda.TypeChecking.Monad.State: modifyGlobalDefinition :: QName -> (Definition -> Definition) -> TCM ()
+ Agda.TypeChecking.Monad.State: modifyScope_ :: (ScopeInfo -> ScopeInfo) -> TCM ()
+ Agda.TypeChecking.Patterns.Abstract: instance Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms a => Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Patterns.Abstract: instance Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms a => Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.TypeChecking.Polarity: instance Agda.TypeChecking.Polarity.HasPolarity a => Agda.TypeChecking.Polarity.HasPolarity (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Polarity: instance Agda.TypeChecking.Polarity.HasPolarity a => Agda.TypeChecking.Polarity.HasPolarity (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Positivity: (:++) :: OccursWheres -> OccursWheres -> OccursWheres
+ Agda.TypeChecking.Positivity: Concat :: [OccurrencesBuilder] -> OccurrencesBuilder
+ Agda.TypeChecking.Positivity: Concat' :: [OccurrencesBuilder'] -> OccurrencesBuilder'
+ Agda.TypeChecking.Positivity: Known :: (Seq Where) -> OccursWhere
+ Agda.TypeChecking.Positivity: Occurs :: OccursWhere -> OccursWheres
+ Agda.TypeChecking.Positivity: OccursAs :: Where -> OccurrencesBuilder -> OccurrencesBuilder
+ Agda.TypeChecking.Positivity: OccursAs' :: Where -> OccurrencesBuilder' -> OccurrencesBuilder'
+ Agda.TypeChecking.Positivity: OccursHere :: Item -> OccurrencesBuilder
+ Agda.TypeChecking.Positivity: OccursHere' :: Item -> OccursWhere -> OccurrencesBuilder'
+ Agda.TypeChecking.Positivity: OnlyVarsUpTo :: Nat -> OccurrencesBuilder -> OccurrencesBuilder
+ Agda.TypeChecking.Positivity: computeEdges :: Set QName -> QName -> OccurrencesBuilder -> TCM [Edge Node Node Edge]
+ Agda.TypeChecking.Positivity: computeOccurrences' :: QName -> TCM OccurrencesBuilder
+ Agda.TypeChecking.Positivity: data OccurrencesBuilder
+ Agda.TypeChecking.Positivity: data OccurrencesBuilder'
+ Agda.TypeChecking.Positivity: data OccursWheres
+ Agda.TypeChecking.Positivity: data Where
+ Agda.TypeChecking.Positivity: emptyOB :: OccurrencesBuilder
+ Agda.TypeChecking.Positivity: flatten :: OccurrencesBuilder -> Occurrences
+ Agda.TypeChecking.Positivity: instance Agda.TypeChecking.Positivity.ComputeOccurrences a => Agda.TypeChecking.Positivity.ComputeOccurrences (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Positivity: instance Agda.TypeChecking.Positivity.ComputeOccurrences a => Agda.TypeChecking.Positivity.ComputeOccurrences (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Positivity: instance Agda.Utils.Size.Sized Agda.TypeChecking.Positivity.OccursWhere
+ Agda.TypeChecking.Positivity: instance GHC.Classes.Eq Agda.TypeChecking.Positivity.Where
+ Agda.TypeChecking.Positivity: instance GHC.Classes.Ord Agda.TypeChecking.Positivity.Where
+ Agda.TypeChecking.Positivity: instance GHC.Show.Show Agda.TypeChecking.Positivity.Where
+ Agda.TypeChecking.Positivity: instance Test.QuickCheck.Arbitrary.Arbitrary Agda.TypeChecking.Positivity.Where
+ Agda.TypeChecking.Positivity: instance Test.QuickCheck.Arbitrary.CoArbitrary Agda.TypeChecking.Positivity.Where
+ Agda.TypeChecking.Positivity: preprocess :: OccurrencesBuilder -> OccurrencesBuilder'
+ Agda.TypeChecking.Positivity.Occurrence: boundToEverySome :: Map Occurrence [(Occurrence -> Bool, Occurrence -> Bool)]
+ Agda.TypeChecking.Positivity.Occurrence: productOfEdgesInBoundedWalk :: (SemiRing e, Ord n) => (e -> Occurrence) -> Graph n n e -> n -> n -> Occurrence -> Maybe e
+ Agda.TypeChecking.Pretty: instance (Agda.Syntax.Translation.InternalToAbstract.Reify a e, Agda.Syntax.Translation.AbstractToConcrete.ToConcrete e c, Agda.Utils.Pretty.Pretty c) => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Pretty: instance (Agda.Syntax.Translation.InternalToAbstract.Reify a e, Agda.Syntax.Translation.AbstractToConcrete.ToConcrete e c, Agda.Utils.Pretty.Pretty c) => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Pretty: instance (GHC.Show.Show a, Agda.TypeChecking.Pretty.PrettyTCM a, Agda.TypeChecking.Substitute.Subst a a) => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Internal.Substitution' a)
+ Agda.TypeChecking.Pretty: instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Internal.EqualityView
+ Agda.TypeChecking.Pretty: instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Reflected.Term
+ Agda.TypeChecking.Pretty: instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.CtxId
+ Agda.TypeChecking.Primitive: floatEq :: Double -> Double -> Bool
+ Agda.TypeChecking.Primitive: floatLt :: Double -> Double -> Bool
+ Agda.TypeChecking.Primitive: floatShow :: Double -> String
+ Agda.TypeChecking.Primitive: genPrimForce :: TCM Type -> (Term -> Arg Term -> Term) -> TCM PrimitiveImpl
+ Agda.TypeChecking.Primitive: getBuiltinName :: String -> TCM (Maybe QName)
+ Agda.TypeChecking.Primitive: instance Agda.Syntax.Internal.Generic.TermLike Agda.TypeChecking.Primitive.Nat
+ Agda.TypeChecking.Primitive: instance Agda.TypeChecking.Primitive.FromTerm Agda.Syntax.Common.MetaId
+ Agda.TypeChecking.Primitive: instance Agda.TypeChecking.Primitive.PrimTerm Agda.Syntax.Common.MetaId
+ Agda.TypeChecking.Primitive: instance Agda.TypeChecking.Primitive.ToTerm Agda.Syntax.Common.ArgInfo
+ Agda.TypeChecking.Primitive: instance Agda.TypeChecking.Primitive.ToTerm Agda.Syntax.Common.MetaId
+ Agda.TypeChecking.Primitive: instance Agda.TypeChecking.Primitive.ToTerm a => Agda.TypeChecking.Primitive.ToTerm [a]
+ Agda.TypeChecking.Primitive: isBuiltin :: QName -> String -> TCM Bool
+ Agda.TypeChecking.Primitive: primForce :: TCM PrimitiveImpl
+ Agda.TypeChecking.Primitive: primForceLemma :: TCM PrimitiveImpl
+ Agda.TypeChecking.Primitive: sSizeUniv :: Sort
+ Agda.TypeChecking.Quote: [quoteDefnWithKit] :: QuotingKit -> Definition -> ReduceM Term
+ Agda.TypeChecking.Quote: [quoteListWithKit] :: QuotingKit -> forall a. (a -> ReduceM Term) -> [a] -> ReduceM Term
+ Agda.TypeChecking.Quote: quoteDefn :: Definition -> TCM Term
+ Agda.TypeChecking.Quote: quoteDom :: Dom Type -> TCM Term
+ Agda.TypeChecking.Quote: quoteList :: [Term] -> TCM Term
+ Agda.TypeChecking.Quote: quoteMeta :: AbsolutePath -> MetaId -> Term
+ Agda.TypeChecking.Quote: quoteNat :: Integer -> Term
+ Agda.TypeChecking.Quote: quoteString :: String -> Term
+ Agda.TypeChecking.ReconstructParameters: dropParameters :: TermLike a => a -> TCM a
+ Agda.TypeChecking.ReconstructParameters: reconstructParameters :: Type -> Term -> TCM Term
+ Agda.TypeChecking.ReconstructParameters: reconstructParametersInEqView :: EqualityView -> TCM EqualityView
+ Agda.TypeChecking.ReconstructParameters: reconstructParametersInTel :: Telescope -> TCM Telescope
+ Agda.TypeChecking.ReconstructParameters: reconstructParametersInType :: Type -> TCM Type
+ Agda.TypeChecking.Records: getDefType :: QName -> Type -> TCM (Maybe Type)
+ Agda.TypeChecking.Records: insertMissingFields :: QName -> (Name -> a) -> [FieldAssignment' a] -> [Arg Name] -> TCM [NamedArg a]
+ Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst t a, Agda.TypeChecking.Reduce.InstantiateFull a) => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst t a, Agda.TypeChecking.Reduce.InstantiateFull a) => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Internal.Tele a)
+ Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst t a, Agda.TypeChecking.Reduce.Normalise a) => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst t a, Agda.TypeChecking.Reduce.Normalise a) => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Internal.Tele a)
+ Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst t a, Agda.TypeChecking.Reduce.Reduce a) => Agda.TypeChecking.Reduce.Reduce (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst t a, Agda.TypeChecking.Reduce.Simplify a) => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.Reduce: instance (Agda.TypeChecking.Substitute.Subst t a, Agda.TypeChecking.Reduce.Simplify a) => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Internal.Tele a)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Instantiate Agda.Syntax.Internal.EqualityView
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Instantiate Agda.TypeChecking.Monad.Base.Candidate
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Instantiate e => Agda.TypeChecking.Reduce.Instantiate (Data.Map.Base.Map k e)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Agda.Syntax.Common.Arg t)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Agda.Syntax.Common.Dom t)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Internal.EqualityView
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.Candidate
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.InstantiateFull GHC.Types.Int
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.InstantiateFull a => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Internal.Pattern' a)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.InstantiateFull e => Agda.TypeChecking.Reduce.InstantiateFull (Data.HashMap.Base.HashMap k e)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.InstantiateFull e => Agda.TypeChecking.Reduce.InstantiateFull (Data.Map.Base.Map k e)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Common.Arg t)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Common.Dom t)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Normalise Agda.Syntax.Internal.EqualityView
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Normalise Agda.TypeChecking.Monad.Base.Candidate
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Normalise GHC.Types.Char
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Normalise GHC.Types.Int
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Normalise a => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Internal.Pattern' a)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Normalise e => Agda.TypeChecking.Reduce.Normalise (Data.Map.Base.Map k e)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Common.Arg t)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Common.Dom t)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Reduce Agda.Syntax.Internal.EqualityView
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Reduce Agda.TypeChecking.Monad.Base.Candidate
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Reduce e => Agda.TypeChecking.Reduce.Reduce (Data.Map.Base.Map k e)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Reduce t => Agda.TypeChecking.Reduce.Reduce (Agda.Syntax.Common.Arg t)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Reduce t => Agda.TypeChecking.Reduce.Reduce (Agda.Syntax.Common.Dom t)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Simplify Agda.Syntax.Internal.EqualityView
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Simplify Agda.TypeChecking.Monad.Base.Candidate
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Simplify e => Agda.TypeChecking.Reduce.Simplify (Data.Map.Base.Map k e)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Common.Arg t)
+ Agda.TypeChecking.Reduce: instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Common.Dom t)
+ Agda.TypeChecking.Rewriting: class KillCtxId a
+ Agda.TypeChecking.Rewriting: instance (GHC.Base.Functor f, Agda.TypeChecking.Rewriting.KillCtxId a) => Agda.TypeChecking.Rewriting.KillCtxId (f a)
+ Agda.TypeChecking.Rewriting: instance Agda.TypeChecking.Rewriting.KillCtxId Agda.TypeChecking.Monad.Base.NLPat
+ Agda.TypeChecking.Rewriting: instance Agda.TypeChecking.Rewriting.KillCtxId Agda.TypeChecking.Monad.Base.RewriteRule
+ Agda.TypeChecking.Rewriting: killCtxId :: KillCtxId a => a -> a
+ Agda.TypeChecking.Rewriting.NonLinMatch: class RaiseNLP a where raiseNLP = raiseNLPFrom 0
+ Agda.TypeChecking.Rewriting.NonLinMatch: instance (Agda.TypeChecking.Rewriting.NonLinMatch.Match a b, Agda.TypeChecking.Substitute.Subst t1 a, Agda.TypeChecking.Substitute.Subst t2 b) => Agda.TypeChecking.Rewriting.NonLinMatch.Match (Agda.Syntax.Internal.Abs a) (Agda.Syntax.Internal.Abs b)
+ Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.Match a b => Agda.TypeChecking.Rewriting.NonLinMatch.Match (Agda.Syntax.Common.Arg a) (Agda.Syntax.Common.Arg b)
+ Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.Match a b => Agda.TypeChecking.Rewriting.NonLinMatch.Match (Agda.Syntax.Common.Dom a) (Agda.Syntax.Common.Dom b)
+ Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.PatternFrom a b => Agda.TypeChecking.Rewriting.NonLinMatch.PatternFrom (Agda.Syntax.Common.Arg a) (Agda.Syntax.Common.Arg b)
+ Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.PatternFrom a b => Agda.TypeChecking.Rewriting.NonLinMatch.PatternFrom (Agda.Syntax.Common.Dom a) (Agda.Syntax.Common.Dom b)
+ Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP Agda.TypeChecking.Monad.Base.NLPat
+ Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP a => Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP a => Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP a => Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP a => Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP (Agda.Syntax.Internal.Elim' a)
+ Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP a => Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP (Agda.Syntax.Internal.Type' a)
+ Agda.TypeChecking.Rewriting.NonLinMatch: instance Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP a => Agda.TypeChecking.Rewriting.NonLinMatch.RaiseNLP [a]
+ Agda.TypeChecking.Rewriting.NonLinMatch: raiseNLP :: RaiseNLP a => Int -> a -> a
+ Agda.TypeChecking.Rewriting.NonLinMatch: raiseNLPFrom :: RaiseNLP a => Int -> Int -> a -> a
+ Agda.TypeChecking.Rules.Builtin: bindUntypedBuiltin :: String -> Expr -> TCM ()
+ Agda.TypeChecking.Rules.Builtin: isUntypedBuiltin :: String -> Bool
+ Agda.TypeChecking.Rules.Decl: assertCurrentModule :: QName -> String -> TCM ()
+ Agda.TypeChecking.Rules.Decl: checkDeclCached :: Declaration -> TCM ()
+ Agda.TypeChecking.Rules.Decl: checkUnquoteDef :: [DefInfo] -> [QName] -> Expr -> TCM ()
+ Agda.TypeChecking.Rules.Decl: unquoteTop :: [QName] -> Expr -> TCM [QName]
+ Agda.TypeChecking.Rules.Def: checkWithRHS :: QName -> QName -> Type -> LHSResult -> [Term] -> [EqualityView] -> [Clause] -> TCM (ClauseBody, WithFunctionProblem)
+ Agda.TypeChecking.Rules.Display: checkDisplayPragma :: QName -> [NamedArg Pattern] -> Expr -> TCM ()
+ Agda.TypeChecking.Rules.LHS: checkLeftoverDotPatterns :: [NamedArg Pattern] -> [Int] -> [Dom Type] -> [DotPatternInst] -> TCM ()
+ Agda.TypeChecking.Rules.LHS: instance Agda.TypeChecking.Rules.LHS.IsFlexiblePattern a => Agda.TypeChecking.Rules.LHS.IsFlexiblePattern (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Rules.LHS: updateInPatterns :: [Dom Type] -> [NamedArg Pattern] -> [Arg DeBruijnPattern] -> TCM ([NamedArg Pattern], [DotPatternInst])
+ Agda.TypeChecking.Rules.LHS.Problem: ChooseEither :: FlexChoice
+ Agda.TypeChecking.Rules.LHS.Problem: ChooseLeft :: FlexChoice
+ Agda.TypeChecking.Rules.LHS.Problem: ChooseRight :: FlexChoice
+ Agda.TypeChecking.Rules.LHS.Problem: ExpandBoth :: FlexChoice
+ Agda.TypeChecking.Rules.LHS.Problem: [dotPatternInst] :: DotPatternInst -> Term
+ Agda.TypeChecking.Rules.LHS.Problem: [dotPatternType] :: DotPatternInst -> Dom Type
+ Agda.TypeChecking.Rules.LHS.Problem: [dotPatternUserExpr] :: DotPatternInst -> Maybe Expr
+ Agda.TypeChecking.Rules.LHS.Problem: chooseFlex :: ChooseFlex a => a -> a -> FlexChoice
+ Agda.TypeChecking.Rules.LHS.Problem: class ChooseFlex a
+ Agda.TypeChecking.Rules.LHS.Problem: data FlexChoice
+ Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex Agda.Syntax.Common.Hiding
+ Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex Agda.TypeChecking.Rules.LHS.Problem.FlexibleVarKind
+ Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex GHC.Types.Int
+ Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex a => Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex (Agda.TypeChecking.Rules.LHS.Problem.FlexibleVar a)
+ Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex a => Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex [a]
+ Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term (Agda.TypeChecking.Rules.LHS.Problem.Problem' p)
+ Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.Rules.LHS.Problem.AsBinding
+ Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.Rules.LHS.Problem.DotPatternInst
+ Agda.TypeChecking.Rules.LHS.Problem: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.Rules.LHS.Problem.ProblemRest
+ Agda.TypeChecking.Rules.LHS.Problem: instance GHC.Base.Monoid Agda.TypeChecking.Rules.LHS.Problem.FlexChoice
+ Agda.TypeChecking.Rules.LHS.Problem: instance GHC.Classes.Eq Agda.TypeChecking.Rules.LHS.Problem.FlexChoice
+ Agda.TypeChecking.Rules.LHS.Problem: instance GHC.Show.Show Agda.TypeChecking.Rules.LHS.Problem.FlexChoice
+ Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Rules.LHS.Unify.UnifyState
+ Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Reduce.Normalise Agda.TypeChecking.Rules.LHS.Unify.UnifyState
+ Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Reduce.Reduce Agda.TypeChecking.Rules.LHS.Unify.Equality
+ Agda.TypeChecking.Rules.LHS.Unify: instance Agda.TypeChecking.Reduce.Reduce Agda.TypeChecking.Rules.LHS.Unify.UnifyState
+ Agda.TypeChecking.Rules.LHS.Unify: instance GHC.Base.Monoid Agda.TypeChecking.Rules.LHS.Unify.UnifyOutput
+ Agda.TypeChecking.Rules.LHS.Unify: instance GHC.Show.Show Agda.TypeChecking.Rules.LHS.Unify.UnifyState
+ Agda.TypeChecking.Rules.LHS.Unify: instance GHC.Show.Show Agda.TypeChecking.Rules.LHS.Unify.UnifyStep
+ Agda.TypeChecking.Rules.Term: catchIlltypedPatternBlockedOnMeta :: TCM () -> TCM (Maybe (TCErr, MetaId))
+ Agda.TypeChecking.Rules.Term: expandModuleAssigns :: [Either Assign ModuleName] -> [Name] -> TCM Assigns
+ Agda.TypeChecking.Rules.Term: quoteContext :: TCM (Either [MetaId] Term)
+ Agda.TypeChecking.Rules.Term: quoteGoal :: Type -> TCM (Either [MetaId] Term)
+ Agda.TypeChecking.Rules.Term: unquoteM :: Expr -> Term -> Type -> TCM Term -> TCM Term
+ Agda.TypeChecking.Rules.Term: unquoteTactic :: Term -> Term -> Type -> TCM Term -> TCM Term
+ Agda.TypeChecking.Serialise.Base: [bstringC] :: Dict -> !(IORef FreshAndReuse)
+ Agda.TypeChecking.Serialise.Base: [bstringD] :: Dict -> !(HashTable ByteString Int32)
+ Agda.TypeChecking.Serialise.Base: [bstringE] :: St -> !(Array Int32 ByteString)
+ Agda.TypeChecking.Serialise.Base: [mkShared] :: St -> Term -> Term
+ Agda.TypeChecking.Serialise.Base: icode15 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l, EmbPrj m, EmbPrj n, EmbPrj o) => Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> o -> S Int32
+ Agda.TypeChecking.Serialise.Base: valu15 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l, EmbPrj m, EmbPrj n, EmbPrj o) => (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> o -> p) -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> R p
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Abstract.Pattern' a)
+ Agda.TypeChecking.Serialise.Instances.Common: instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj b) => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.Either.Either a b)
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.ArgInfo
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.MetaId
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Fixity.PrecedenceLevel
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Data.ByteString.Lazy.Internal.ByteString
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Data.Void.Void
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Concrete.FieldAssignment' a)
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Position.Interval' a)
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Position.Position' a)
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.Sequence.Seq a)
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.Strict.Maybe.Maybe a)
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.UHC.Bridge.HsName
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.UHC.Pragmas.Base.CoreConstr
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.UHC.Pragmas.Base.CoreType
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.CoreRepresentation
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.EtaEquality
+ Agda.TypeChecking.SizedTypes: data OldSizeConstraint
+ Agda.TypeChecking.SizedTypes: data OldSizeExpr
+ Agda.TypeChecking.SizedTypes: instance GHC.Classes.Eq Agda.TypeChecking.SizedTypes.OldSizeExpr
+ Agda.TypeChecking.SizedTypes: instance GHC.Show.Show Agda.TypeChecking.SizedTypes.OldSizeConstraint
+ Agda.TypeChecking.SizedTypes: instance GHC.Show.Show Agda.TypeChecking.SizedTypes.OldSizeExpr
+ Agda.TypeChecking.SizedTypes: oldCanonicalizeSizeConstraint :: OldSizeConstraint -> Maybe OldSizeConstraint
+ Agda.TypeChecking.SizedTypes: oldComputeSizeConstraint :: Constraint -> TCM (Maybe OldSizeConstraint)
+ Agda.TypeChecking.SizedTypes: oldComputeSizeConstraints :: [Closure Constraint] -> TCM [OldSizeConstraint]
+ Agda.TypeChecking.SizedTypes: oldSizeExpr :: Term -> TCM (OldSizeExpr, Int)
+ Agda.TypeChecking.SizedTypes: oldSolveSizeConstraints :: TCM ()
+ Agda.TypeChecking.SizedTypes.Solve: DefaultToInfty :: DefaultToInfty
+ Agda.TypeChecking.SizedTypes.Solve: DontDefaultToInfty :: DefaultToInfty
+ Agda.TypeChecking.SizedTypes.Solve: data DefaultToInfty
+ Agda.TypeChecking.SizedTypes.Solve: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term (Agda.TypeChecking.SizedTypes.Syntax.SizeExpr' Agda.TypeChecking.SizedTypes.Solve.NamedRigid Agda.TypeChecking.SizedTypes.Solve.SizeMeta)
+ Agda.TypeChecking.SizedTypes.Solve: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.SizedTypes.Solve.SizeConstraint
+ Agda.TypeChecking.SizedTypes.Solve: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.SizedTypes.Solve.SizeMeta
+ Agda.TypeChecking.SizedTypes.Solve: instance GHC.Classes.Eq Agda.TypeChecking.SizedTypes.Solve.DefaultToInfty
+ Agda.TypeChecking.SizedTypes.Solve: instance GHC.Classes.Ord Agda.TypeChecking.SizedTypes.Solve.DefaultToInfty
+ Agda.TypeChecking.SizedTypes.Solve: instance GHC.Show.Show Agda.TypeChecking.SizedTypes.Solve.DefaultToInfty
+ Agda.TypeChecking.SizedTypes.Solve: instance GHC.Show.Show Agda.TypeChecking.SizedTypes.Solve.SizeMeta
+ Agda.TypeChecking.SizedTypes.Syntax: instance Agda.TypeChecking.SizedTypes.Syntax.Flexs flex (Agda.TypeChecking.SizedTypes.Syntax.SizeExpr' rigid flex)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: instance (GHC.Classes.Ord r, GHC.Classes.Ord f, Agda.TypeChecking.SizedTypes.Utils.Dioid a) => Agda.TypeChecking.SizedTypes.Utils.Dioid (Agda.TypeChecking.SizedTypes.WarshallSolver.Edge' r f a)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: instance (GHC.Classes.Ord r, GHC.Classes.Ord f, Agda.TypeChecking.SizedTypes.Utils.MeetSemiLattice a) => Agda.TypeChecking.SizedTypes.Utils.MeetSemiLattice (Agda.TypeChecking.SizedTypes.WarshallSolver.Edge' r f a)
+ Agda.TypeChecking.Substitute: applys :: Apply t => t -> [Term] -> t
+ Agda.TypeChecking.Substitute: class DeBruijn a where debruijnVar = debruijnNamedVar underscore debruijnNamedVar _ = debruijnVar
+ Agda.TypeChecking.Substitute: data Substitution' a
+ Agda.TypeChecking.Substitute: debruijnNamedVar :: DeBruijn a => String -> Int -> a
+ Agda.TypeChecking.Substitute: debruijnVar :: DeBruijn a => Int -> a
+ Agda.TypeChecking.Substitute: debruijnView :: DeBruijn a => a -> Maybe Int
+ Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst t a, Agda.TypeChecking.Substitute.Subst t b) => Agda.TypeChecking.Substitute.Subst t (a, b)
+ Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst t a, Agda.TypeChecking.Substitute.Subst t b, Agda.TypeChecking.Substitute.Subst t c) => Agda.TypeChecking.Substitute.Subst t (a, b, c)
+ Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst t a, Agda.TypeChecking.Substitute.Subst t b, Agda.TypeChecking.Substitute.Subst t c, Agda.TypeChecking.Substitute.Subst t d) => Agda.TypeChecking.Substitute.Subst t (a, b, c, d)
+ Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst t a, GHC.Classes.Eq a) => GHC.Classes.Eq (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst t a, GHC.Classes.Eq a) => GHC.Classes.Eq (Agda.Syntax.Internal.Elim' a)
+ Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst t a, GHC.Classes.Eq a) => GHC.Classes.Eq (Agda.Syntax.Internal.Tele a)
+ Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst t a, GHC.Classes.Eq a) => GHC.Classes.Eq (Agda.TypeChecking.Substitute.TelV a)
+ Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst t a, GHC.Classes.Ord a) => GHC.Classes.Ord (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst t a, GHC.Classes.Ord a) => GHC.Classes.Ord (Agda.Syntax.Internal.Elim' a)
+ Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst t a, GHC.Classes.Ord a) => GHC.Classes.Ord (Agda.Syntax.Internal.Tele a)
+ Agda.TypeChecking.Substitute: instance (Agda.TypeChecking.Substitute.Subst t a, GHC.Classes.Ord a) => GHC.Classes.Ord (Agda.TypeChecking.Substitute.TelV a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.DeBruijn Agda.Syntax.Internal.Term
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term ()
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.Syntax.Abstract.Name.Name
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.Syntax.Internal.ClauseBody
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.Syntax.Internal.ConPatternInfo
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.Syntax.Internal.EqualityView
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.Syntax.Internal.Level
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.Syntax.Internal.LevelAtom
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.Syntax.Internal.Pattern
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.Syntax.Internal.PlusLevel
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.Syntax.Internal.Sort
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.Syntax.Internal.Term
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.Monad.Base.Candidate
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.Monad.Base.Constraint
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.Monad.Base.DisplayForm
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.Monad.Base.DisplayTerm
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.Monad.Base.NLPat
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term Agda.TypeChecking.Monad.Base.RewriteRule
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term GHC.Base.String
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term a => Agda.TypeChecking.Substitute.Apply (Agda.Syntax.Internal.Tele a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term a => Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.Term (Agda.Syntax.Internal.Type' a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst a a => Agda.TypeChecking.Substitute.Subst a (Agda.Syntax.Internal.Substitution' a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst t a => Agda.TypeChecking.Substitute.Subst t (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst t a => Agda.TypeChecking.Substitute.Subst t (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst t a => Agda.TypeChecking.Substitute.Subst t (Agda.Syntax.Common.Named name a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst t a => Agda.TypeChecking.Substitute.Subst t (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst t a => Agda.TypeChecking.Substitute.Subst t (Agda.Syntax.Internal.Blocked a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst t a => Agda.TypeChecking.Substitute.Subst t (Agda.Syntax.Internal.Elim' a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst t a => Agda.TypeChecking.Substitute.Subst t (Agda.Syntax.Internal.Tele a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst t a => Agda.TypeChecking.Substitute.Subst t (Agda.Utils.Pointer.Ptr a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst t a => Agda.TypeChecking.Substitute.Subst t (GHC.Base.Maybe a)
+ Agda.TypeChecking.Substitute: instance Agda.TypeChecking.Substitute.Subst t a => Agda.TypeChecking.Substitute.Subst t [a]
+ Agda.TypeChecking.Substitute: instance GHC.Classes.Eq (Agda.Syntax.Internal.Substitution' Agda.Syntax.Internal.Term)
+ Agda.TypeChecking.Substitute: instance GHC.Classes.Eq Agda.TypeChecking.Monad.Base.Candidate
+ Agda.TypeChecking.Substitute: instance GHC.Classes.Ord (Agda.Syntax.Internal.Substitution' Agda.Syntax.Internal.Term)
+ Agda.TypeChecking.Substitute: type Substitution = Substitution' Term
+ Agda.TypeChecking.Substitute.Pattern: applyPatSubst :: (Subst Term a) => PatternSubstitution -> a -> a
+ Agda.TypeChecking.Substitute.Pattern: fromPatternSubstitution :: PatternSubstitution -> Substitution
+ Agda.TypeChecking.Substitute.Pattern: instance Agda.TypeChecking.Substitute.DeBruijn Agda.Syntax.Internal.DeBruijnPattern
+ Agda.TypeChecking.Substitute.Pattern: instance Agda.TypeChecking.Substitute.Subst Agda.Syntax.Internal.DeBruijnPattern Agda.Syntax.Internal.DeBruijnPattern
+ Agda.TypeChecking.SyntacticEquality: instance (Agda.TypeChecking.Substitute.Subst t a, Agda.TypeChecking.SyntacticEquality.SynEq a) => Agda.TypeChecking.SyntacticEquality.SynEq (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.SyntacticEquality: instance Agda.TypeChecking.SyntacticEquality.SynEq Agda.Syntax.Common.ArgInfo
+ Agda.TypeChecking.SyntacticEquality: instance Agda.TypeChecking.SyntacticEquality.SynEq a => Agda.TypeChecking.SyntacticEquality.SynEq (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.SyntacticEquality: instance Agda.TypeChecking.SyntacticEquality.SynEq a => Agda.TypeChecking.SyntacticEquality.SynEq (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Telescope: OutputTypeVar :: OutputTypeName
+ Agda.TypeChecking.Telescope: expandTelescopeVar :: Telescope -> Int -> Telescope -> ConHead -> (Telescope, PatternSubstitution)
+ Agda.TypeChecking.Telescope: instantiateTelescope :: Telescope -> Int -> Term -> Maybe (Telescope, PatternSubstitution, Permutation)
+ Agda.TypeChecking.Telescope: permuteTel :: Permutation -> Telescope -> Telescope
+ Agda.TypeChecking.Telescope: splitTelescopeExact :: [Int] -> Telescope -> Maybe SplitTel
+ Agda.TypeChecking.Telescope: teleNamedArgs :: (DeBruijn a) => Telescope -> [NamedArg a]
+ Agda.TypeChecking.Telescope: varDependencies :: Telescope -> IntSet -> IntSet
+ Agda.TypeChecking.Test.Generators: instance Agda.TypeChecking.Test.Generators.GenC a => Agda.TypeChecking.Test.Generators.GenC (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Test.Generators: instance Agda.TypeChecking.Test.Generators.GenC a => Agda.TypeChecking.Test.Generators.GenC (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Test.Generators: instance Agda.TypeChecking.Test.Generators.KillVar a => Agda.TypeChecking.Test.Generators.KillVar (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Test.Generators: instance Agda.TypeChecking.Test.Generators.KillVar a => Agda.TypeChecking.Test.Generators.KillVar (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Test.Generators: instance Agda.TypeChecking.Test.Generators.ShrinkC a b => Agda.TypeChecking.Test.Generators.ShrinkC (Agda.Syntax.Common.Arg a) (Agda.Syntax.Common.Arg b)
+ Agda.TypeChecking.Test.Generators: instance Agda.TypeChecking.Test.Generators.ShrinkC a b => Agda.TypeChecking.Test.Generators.ShrinkC (Agda.Syntax.Common.Dom a) (Agda.Syntax.Common.Dom b)
+ Agda.TypeChecking.Unquote: Clean :: Dirty
+ Agda.TypeChecking.Unquote: Dirty :: Dirty
+ Agda.TypeChecking.Unquote: NamePart :: QName -> ErrorPart
+ Agda.TypeChecking.Unquote: StrPart :: String -> ErrorPart
+ Agda.TypeChecking.Unquote: TermPart :: Term -> ErrorPart
+ Agda.TypeChecking.Unquote: agdaTypeType :: TCM Type
+ Agda.TypeChecking.Unquote: data Dirty
+ Agda.TypeChecking.Unquote: data ErrorPart
+ Agda.TypeChecking.Unquote: evalTCM :: Term -> UnquoteM Term
+ Agda.TypeChecking.Unquote: getCurrentPath :: TCM AbsolutePath
+ Agda.TypeChecking.Unquote: inOriginalContext :: UnquoteM a -> UnquoteM a
+ Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Unquote.ErrorPart
+ Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Common.ArgInfo
+ Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Common.MetaId
+ Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Reflected.Clause
+ Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Reflected.Elim
+ Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Reflected.Pattern
+ Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Reflected.Sort
+ Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.Syntax.Reflected.Term
+ Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote Agda.TypeChecking.Unquote.ErrorPart
+ Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote a => Agda.TypeChecking.Unquote.Unquote (Agda.Syntax.Common.Arg a)
+ Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote a => Agda.TypeChecking.Unquote.Unquote (Agda.Syntax.Common.Dom a)
+ Agda.TypeChecking.Unquote: instance Agda.TypeChecking.Unquote.Unquote a => Agda.TypeChecking.Unquote.Unquote (Agda.Syntax.Reflected.Abs a)
+ Agda.TypeChecking.Unquote: instance GHC.Classes.Eq Agda.TypeChecking.Unquote.Dirty
+ Agda.TypeChecking.Unquote: isDef :: QName -> TCM Term -> UnquoteM Bool
+ Agda.TypeChecking.Unquote: liftU :: TCM a -> UnquoteM a
+ Agda.TypeChecking.Unquote: liftU1 :: (TCM (UnquoteRes a) -> TCM (UnquoteRes b)) -> UnquoteM a -> UnquoteM b
+ Agda.TypeChecking.Unquote: liftU2 :: (TCM (UnquoteRes a) -> TCM (UnquoteRes b) -> TCM (UnquoteRes c)) -> UnquoteM a -> UnquoteM b -> UnquoteM c
+ Agda.TypeChecking.Unquote: packUnquoteM :: (Context -> UnquoteState -> TCM (UnquoteRes a)) -> UnquoteM a
+ Agda.TypeChecking.Unquote: reduceQuotedTerm :: Term -> UnquoteM Term
+ Agda.TypeChecking.Unquote: type UnquoteRes a = Either UnquoteError ((a, UnquoteState), [QName])
+ Agda.TypeChecking.Unquote: type UnquoteState = (Dirty, TCState)
+ Agda.TypeChecking.Unquote: unpackUnquoteM :: UnquoteM a -> Context -> UnquoteState -> TCM (UnquoteRes a)
+ Agda.TypeChecking.Unquote: unquoteNString :: Arg Term -> UnquoteM String
+ Agda.TypeChecking.Unquote: unquoteString :: Term -> UnquoteM String
+ Agda.TypeChecking.Unquote: unquoteTCM :: Term -> Term -> UnquoteM Term
+ Agda.TypeChecking.With: withArguments :: [Term] -> [EqualityView] -> [Term]
+ Agda.Utils.Benchmark: instance Agda.Utils.Benchmark.MonadBench a m => Agda.Utils.Benchmark.MonadBench a (Control.Monad.Trans.State.Lazy.StateT r m)
+ Agda.Utils.Benchmark: reset :: MonadBench a m => m ()
+ Agda.Utils.BiMap: instance (GHC.Show.Show a, GHC.Show.Show b) => GHC.Show.Show (Agda.Utils.BiMap.BiMap a b)
+ Agda.Utils.Environment: expandEnvironmentVariables :: String -> IO String
+ Agda.Utils.Environment: instance GHC.Classes.Eq Agda.Utils.Environment.Token
+ Agda.Utils.Environment: instance GHC.Show.Show Agda.Utils.Environment.Token
+ Agda.Utils.FileName: instance Test.QuickCheck.Arbitrary.CoArbitrary Agda.Utils.FileName.AbsolutePath
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: instance (GHC.Classes.Ord n, Test.QuickCheck.Arbitrary.Arbitrary n, Test.QuickCheck.Arbitrary.Arbitrary e) => Test.QuickCheck.Arbitrary.Arbitrary (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Graph n n e)
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: reachableFrom :: Ord n => Graph n n e -> n -> Map n (Int, [Edge n n e])
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: walkSatisfying :: Ord n => (e -> Bool) -> (e -> Bool) -> Graph n n e -> n -> n -> Maybe [Edge n n e]
+ Agda.Utils.IO.Directory: copyDirContent :: FilePath -> FilePath -> IO ()
+ Agda.Utils.Lens: key :: Ord k => k -> Lens' (Maybe v) (Map k v)
+ Agda.Utils.List: chopWhen :: (a -> Bool) -> [a] -> [[a]]
+ Agda.Utils.List: editDistance :: Eq a => [a] -> [a] -> Int
+ Agda.Utils.List: editDistanceSpec :: Eq a => [a] -> [a] -> Int
+ Agda.Utils.List: nubOn :: Ord b => (a -> b) -> [a] -> [a]
+ Agda.Utils.List: prop_chop_intercalate :: Property
+ Agda.Utils.List: prop_editDistance :: Property
+ Agda.Utils.List: prop_nubOn :: (Integer -> Integer) -> [Integer] -> Bool
+ Agda.Utils.List: prop_uniqOn1 :: (Integer -> Integer) -> [Integer] -> Bool
+ Agda.Utils.List: prop_uniqOn2 :: (Integer -> Integer) -> [Integer] -> Bool
+ Agda.Utils.ListT: liftListT :: (Monad m, Monad m') => (forall a. m a -> m' a) -> ListT m a -> ListT m' a
+ Agda.Utils.Maybe.Strict: instance Test.QuickCheck.Arbitrary.CoArbitrary a => Test.QuickCheck.Arbitrary.CoArbitrary (Data.Strict.Maybe.Maybe a)
+ Agda.Utils.Memo: memo :: MonadState s m => Lens' (Maybe a) s -> m a -> m a
+ Agda.Utils.Memo: memoRec :: MonadState s m => Lens' (Maybe a) s -> a -> m a -> m a
+ Agda.Utils.Monad: allM :: (Functor f, Foldable f, Monad m) => f a -> (a -> m Bool) -> m Bool
+ Agda.Utils.Monad: anyM :: (Functor f, Foldable f, Monad m) => f a -> (a -> m Bool) -> m Bool
+ Agda.Utils.Parser.MemoisedCPS: chainl1 :: Parser k r tok a -> Parser k r tok (a -> a -> a) -> Parser k r tok a
+ Agda.Utils.Parser.MemoisedCPS: chainr1 :: Parser k r tok a -> Parser k r tok (a -> a -> a) -> Parser k r tok a
+ Agda.Utils.Parser.MemoisedCPS: data Parser k r tok a
+ Agda.Utils.Parser.MemoisedCPS: instance GHC.Base.Alternative (Agda.Utils.Parser.MemoisedCPS.Parser k r tok)
+ Agda.Utils.Parser.MemoisedCPS: instance GHC.Base.Applicative (Agda.Utils.Parser.MemoisedCPS.Parser k r tok)
+ Agda.Utils.Parser.MemoisedCPS: instance GHC.Base.Functor (Agda.Utils.Parser.MemoisedCPS.Parser k r tok)
+ Agda.Utils.Parser.MemoisedCPS: instance GHC.Base.Monad (Agda.Utils.Parser.MemoisedCPS.Parser k r tok)
+ Agda.Utils.Parser.MemoisedCPS: memoise :: (Eq k, Hashable k) => k -> Parser k r tok r -> Parser k r tok r
+ Agda.Utils.Parser.MemoisedCPS: parse :: Parser k r tok a -> [tok] -> [a]
+ Agda.Utils.Parser.MemoisedCPS: sat :: (tok -> Bool) -> Parser k r tok tok
+ Agda.Utils.Parser.MemoisedCPS: tok :: Eq tok => tok -> Parser k r tok tok
+ Agda.Utils.Parser.MemoisedCPS: token :: Parser k r tok tok
+ Agda.Utils.Parser.ReadP: (+++) :: ReadP t a -> ReadP t a -> ReadP t a
+ Agda.Utils.Parser.ReadP: (<++) :: ReadP t a -> ReadP t a -> ReadP t a
+ Agda.Utils.Parser.ReadP: between :: ReadP t open -> ReadP t close -> ReadP t a -> ReadP t a
+ Agda.Utils.Parser.ReadP: chainl :: ReadP t a -> ReadP t (a -> a -> a) -> a -> ReadP t a
+ Agda.Utils.Parser.ReadP: chainl1 :: ReadP t a -> ReadP t (a -> a -> a) -> ReadP t a
+ Agda.Utils.Parser.ReadP: chainr :: ReadP t a -> ReadP t (a -> a -> a) -> a -> ReadP t a
+ Agda.Utils.Parser.ReadP: chainr1 :: ReadP t a -> ReadP t (a -> a -> a) -> ReadP t a
+ Agda.Utils.Parser.ReadP: char :: Eq t => t -> ReadP t t
+ Agda.Utils.Parser.ReadP: choice :: [ReadP t a] -> ReadP t a
+ Agda.Utils.Parser.ReadP: count :: Int -> ReadP t a -> ReadP t [a]
+ Agda.Utils.Parser.ReadP: data ReadP t a
+ Agda.Utils.Parser.ReadP: endBy :: ReadP t a -> ReadP t sep -> ReadP t [a]
+ Agda.Utils.Parser.ReadP: endBy1 :: ReadP t a -> ReadP t sep -> ReadP t [a]
+ Agda.Utils.Parser.ReadP: gather :: ReadP t a -> ReadP t ([t], a)
+ Agda.Utils.Parser.ReadP: get :: ReadP t t
+ Agda.Utils.Parser.ReadP: instance GHC.Base.Alternative (Agda.Utils.Parser.ReadP.P t)
+ Agda.Utils.Parser.ReadP: instance GHC.Base.Alternative (Agda.Utils.Parser.ReadP.ReadP t)
+ Agda.Utils.Parser.ReadP: instance GHC.Base.Applicative (Agda.Utils.Parser.ReadP.P t)
+ Agda.Utils.Parser.ReadP: instance GHC.Base.Applicative (Agda.Utils.Parser.ReadP.ReadP t)
+ Agda.Utils.Parser.ReadP: instance GHC.Base.Functor (Agda.Utils.Parser.ReadP.P t)
+ Agda.Utils.Parser.ReadP: instance GHC.Base.Functor (Agda.Utils.Parser.ReadP.ReadP t)
+ Agda.Utils.Parser.ReadP: instance GHC.Base.Monad (Agda.Utils.Parser.ReadP.P t)
+ Agda.Utils.Parser.ReadP: instance GHC.Base.Monad (Agda.Utils.Parser.ReadP.ReadP t)
+ Agda.Utils.Parser.ReadP: instance GHC.Base.MonadPlus (Agda.Utils.Parser.ReadP.P t)
+ Agda.Utils.Parser.ReadP: instance GHC.Base.MonadPlus (Agda.Utils.Parser.ReadP.ReadP t)
+ Agda.Utils.Parser.ReadP: look :: ReadP t [t]
+ Agda.Utils.Parser.ReadP: many :: ReadP t a -> ReadP t [a]
+ Agda.Utils.Parser.ReadP: many1 :: ReadP t a -> ReadP t [a]
+ Agda.Utils.Parser.ReadP: manyTill :: ReadP t a -> ReadP t end -> ReadP t [a]
+ Agda.Utils.Parser.ReadP: munch :: (t -> Bool) -> ReadP t [t]
+ Agda.Utils.Parser.ReadP: munch1 :: (t -> Bool) -> ReadP t [t]
+ Agda.Utils.Parser.ReadP: option :: a -> ReadP t a -> ReadP t a
+ Agda.Utils.Parser.ReadP: optional :: ReadP t a -> ReadP t ()
+ Agda.Utils.Parser.ReadP: parse :: ReadP t a -> [t] -> [a]
+ Agda.Utils.Parser.ReadP: parse' :: ReadP t a -> [t] -> Either a [t]
+ Agda.Utils.Parser.ReadP: pfail :: ReadP t a
+ Agda.Utils.Parser.ReadP: satisfy :: (t -> Bool) -> ReadP t t
+ Agda.Utils.Parser.ReadP: sepBy :: ReadP t a -> ReadP t sep -> ReadP t [a]
+ Agda.Utils.Parser.ReadP: sepBy1 :: ReadP t a -> ReadP t sep -> ReadP t [a]
+ Agda.Utils.Parser.ReadP: skipMany :: ReadP t a -> ReadP t ()
+ Agda.Utils.Parser.ReadP: skipMany1 :: ReadP t a -> ReadP t ()
+ Agda.Utils.Parser.ReadP: skipSpaces :: ReadP Char ()
+ Agda.Utils.Parser.ReadP: string :: Eq t => [t] -> ReadP t [t]
+ Agda.Utils.Trie: everyPrefix :: [k] -> v -> Trie k v
+ Agda.Utils.Trie: instance (GHC.Classes.Eq k, GHC.Classes.Eq v) => GHC.Classes.Eq (Agda.Utils.Trie.Trie k v)
+ Agda.Utils.Trie: lookup :: Ord k => [k] -> Trie k v -> Maybe v
+ Agda.Utils.Trie: member :: Ord k => [k] -> Trie k v -> Bool
+ Agda.Utils.Trie: tests :: IO Bool
- Agda.Auto.NarrowingSearch: mmmcase :: Refinable a blk => MM a blk -> MetaEnv (MB b blk) -> (a -> MetaEnv (MB b blk)) -> MetaEnv (MB b blk)
+ Agda.Auto.NarrowingSearch: mmmcase :: MM a blk -> MetaEnv (MB b blk) -> (a -> MetaEnv (MB b blk)) -> MetaEnv (MB b blk)
- Agda.Compiler.CallCompiler: callCompiler :: FilePath -> [String] -> TCM ()
+ Agda.Compiler.CallCompiler: callCompiler :: Bool -> FilePath -> [String] -> TCM ()
- Agda.Compiler.Epic.Erasure: diff :: (Ord k, Eq a) => Map k a -> Map k a -> [(k, (a, a))]
+ Agda.Compiler.Epic.Erasure: diff :: Eq a => Map k a -> Map k a -> [(k, (a, a))]
- Agda.Compiler.Epic.Erasure: relevant :: (Functor m, Monad m) => Var -> Expr -> Erasure m Relevance
+ Agda.Compiler.Epic.Erasure: relevant :: Monad m => Var -> Expr -> Erasure m Relevance
- Agda.Compiler.Epic.Injection: substForDot :: [NamedArg Pattern] -> Substitution
+ Agda.Compiler.Epic.Injection: substForDot :: [NamedArg (Pattern' a)] -> Substitution
- Agda.Compiler.MAlonzo.Compiler: CCEnv :: Maybe QName -> NameSupply -> CCContext -> Maybe CompiledClauses -> CCEnv
+ Agda.Compiler.MAlonzo.Compiler: CCEnv :: NameSupply -> CCContext -> CCEnv
- Agda.Compiler.MAlonzo.Compiler: callGHC :: Bool -> Interface -> TCM ()
+ Agda.Compiler.MAlonzo.Compiler: callGHC :: IsMain -> Interface -> TCM ()
- Agda.Compiler.MAlonzo.Compiler: closedTerm :: Term -> TCM Exp
+ Agda.Compiler.MAlonzo.Compiler: closedTerm :: TTerm -> TCM Exp
- Agda.Compiler.MAlonzo.Compiler: compilerMain :: Bool -> Interface -> TCM ()
+ Agda.Compiler.MAlonzo.Compiler: compilerMain :: IsMain -> Interface -> TCM ()
- Agda.Compiler.MAlonzo.Compiler: infodecl :: QName -> Decl
+ Agda.Compiler.MAlonzo.Compiler: infodecl :: QName -> [Decl] -> [Decl]
- Agda.Compiler.MAlonzo.Compiler: initCCEnv :: Maybe QName -> CCEnv
+ Agda.Compiler.MAlonzo.Compiler: initCCEnv :: CCEnv
- Agda.Compiler.MAlonzo.Compiler: intros :: Int -> ([Name] -> CC Exp) -> CC Exp
+ Agda.Compiler.MAlonzo.Compiler: intros :: Int -> ([Name] -> CC a) -> CC a
- Agda.Compiler.MAlonzo.Compiler: term :: Term -> CC Exp
+ Agda.Compiler.MAlonzo.Compiler: term :: TTerm -> CC Exp
- Agda.Interaction.EmacsTop: mimicGHCi :: TCM ()
+ Agda.Interaction.EmacsTop: mimicGHCi :: TCM () -> TCM ()
- Agda.Interaction.Imports: addImportedThings :: Signature -> BuiltinThings PrimFun -> Set String -> PatternSynDefns -> TCM ()
+ Agda.Interaction.Imports: addImportedThings :: Signature -> BuiltinThings PrimFun -> Set String -> Set String -> PatternSynDefns -> DisplayForms -> TCM ()
- Agda.Interaction.Imports: buildInterface :: AbsolutePath -> TopLevelInfo -> HighlightingInfo -> Set String -> [OptionsPragma] -> TCM Interface
+ Agda.Interaction.Imports: buildInterface :: AbsolutePath -> TopLevelInfo -> HighlightingInfo -> Set String -> Set String -> [OptionsPragma] -> TCM Interface
- Agda.Interaction.InteractionTop: Cmd_compile :: Backend -> FilePath -> [FilePath] -> Interaction' range
+ Agda.Interaction.InteractionTop: Cmd_compile :: Backend -> FilePath -> [String] -> Interaction' range
- Agda.Interaction.InteractionTop: Cmd_load :: FilePath -> [FilePath] -> Interaction' range
+ Agda.Interaction.InteractionTop: Cmd_load :: FilePath -> [String] -> Interaction' range
- Agda.Interaction.InteractionTop: CommandState :: [InteractionId] -> Maybe (AbsolutePath, ClockTime) -> CommandLineOptions -> OldInteractionScopes -> CommandState
+ Agda.Interaction.InteractionTop: CommandState :: [InteractionId] -> Maybe (AbsolutePath, ClockTime) -> CommandLineOptions -> !OldInteractionScopes -> CommandState
- Agda.Interaction.InteractionTop: [oldInteractionScopes] :: CommandState -> OldInteractionScopes
+ Agda.Interaction.InteractionTop: [oldInteractionScopes] :: CommandState -> !OldInteractionScopes
- Agda.Interaction.InteractionTop: cmd_load' :: FilePath -> [FilePath] -> Bool -> ((Interface, MaybeWarnings) -> CommandM ()) -> CommandM ()
+ Agda.Interaction.InteractionTop: cmd_load' :: FilePath -> [String] -> Bool -> ((Interface, MaybeWarnings) -> CommandM ()) -> CommandM ()
- Agda.Interaction.Options: Options :: String -> Maybe FilePath -> IncludeDirs -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe FilePath -> Bool -> Bool -> Bool -> Maybe FilePath -> FilePath -> FilePath -> Maybe FilePath -> Bool -> Bool -> [String] -> PragmaOptions -> [String] -> Bool -> CommandLineOptions
+ Agda.Interaction.Options: Options :: String -> Maybe FilePath -> [FilePath] -> [AbsolutePath] -> [LibName] -> Maybe FilePath -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> [String] -> Bool -> Bool -> Bool -> Maybe FilePath -> Bool -> Bool -> Int -> [String] -> Bool -> Maybe FilePath -> Bool -> Bool -> Bool -> Maybe FilePath -> FilePath -> FilePath -> Maybe FilePath -> Bool -> Bool -> PragmaOptions -> [String] -> Bool -> Bool -> Bool -> CommandLineOptions
- Agda.Interaction.Options: PragmaOptions :: Bool -> Bool -> Verbosity -> Bool -> Bool -> Bool -> Bool -> CutOff -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> PragmaOptions
+ Agda.Interaction.Options: PragmaOptions :: Bool -> Bool -> Verbosity -> Bool -> Bool -> Bool -> Bool -> CutOff -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> PragmaOptions
- Agda.Interaction.Options: parsePragmaOptions :: [String] -> CommandLineOptions -> Either String PragmaOptions
+ Agda.Interaction.Options: parsePragmaOptions :: [String] -> CommandLineOptions -> OptM PragmaOptions
- Agda.Interaction.Options: parseStandardOptions :: [String] -> Either String CommandLineOptions
+ Agda.Interaction.Options: parseStandardOptions :: [String] -> OptM CommandLineOptions
- Agda.Interaction.Options: type Flag opts = opts -> Either String opts
+ Agda.Interaction.Options: type Flag opts = opts -> OptM opts
- Agda.Interaction.Options: usage :: [OptDescr ()] -> [(String, String, [String], [OptDescr ()])] -> String -> String
+ Agda.Interaction.Options: usage :: [OptDescr ()] -> String -> String
- Agda.Syntax.Abstract: Apply :: ModuleInfo -> ModuleName -> ModuleApplication -> (Ren QName) -> (Ren ModuleName) -> Declaration
+ Agda.Syntax.Abstract: Apply :: ModuleInfo -> ModuleName -> ModuleApplication -> (Ren QName) -> (Ren ModuleName) -> ImportDirective -> Declaration
- Agda.Syntax.Abstract: Clause :: lhs -> RHS -> [Declaration] -> Clause' lhs
+ Agda.Syntax.Abstract: Clause :: lhs -> RHS -> [Declaration] -> Bool -> Clause' lhs
- Agda.Syntax.Abstract: Import :: ModuleInfo -> ModuleName -> Declaration
+ Agda.Syntax.Abstract: Import :: ModuleInfo -> ModuleName -> ImportDirective -> Declaration
- Agda.Syntax.Abstract: LetApply :: ModuleInfo -> ModuleName -> ModuleApplication -> (Ren QName) -> (Ren ModuleName) -> LetBinding
+ Agda.Syntax.Abstract: LetApply :: ModuleInfo -> ModuleName -> ModuleApplication -> (Ren QName) -> (Ren ModuleName) -> ImportDirective -> LetBinding
- Agda.Syntax.Abstract: LetOpen :: ModuleInfo -> ModuleName -> LetBinding
+ Agda.Syntax.Abstract: LetOpen :: ModuleInfo -> ModuleName -> ImportDirective -> LetBinding
- Agda.Syntax.Abstract: Open :: ModuleInfo -> ModuleName -> Declaration
+ Agda.Syntax.Abstract: Open :: ModuleInfo -> ModuleName -> ImportDirective -> Declaration
- Agda.Syntax.Abstract: PatternSynDef :: QName -> [Arg Name] -> Pattern -> Declaration
+ Agda.Syntax.Abstract: PatternSynDef :: QName -> [Arg Name] -> (Pattern' Void) -> Declaration
- Agda.Syntax.Abstract: QuoteContext :: ExprInfo -> Name -> Expr -> Expr
+ Agda.Syntax.Abstract: QuoteContext :: ExprInfo -> Expr
- Agda.Syntax.Abstract: Rec :: ExprInfo -> Assigns -> Expr
+ Agda.Syntax.Abstract: Rec :: ExprInfo -> RecordAssigns -> Expr
- Agda.Syntax.Abstract: RecDef :: DefInfo -> QName -> (Maybe (Ranged Induction)) -> (Maybe QName) -> [LamBinding] -> Expr -> [Declaration] -> Declaration
+ Agda.Syntax.Abstract: RecDef :: DefInfo -> QName -> (Maybe (Ranged Induction)) -> (Maybe Bool) -> (Maybe QName) -> [LamBinding] -> Expr -> [Declaration] -> Declaration
- Agda.Syntax.Abstract: UnquoteDecl :: MutualInfo -> DefInfo -> QName -> Expr -> Declaration
+ Agda.Syntax.Abstract: UnquoteDecl :: MutualInfo -> [DefInfo] -> [QName] -> Expr -> Declaration
- Agda.Syntax.Abstract: type Assign = (Name, Expr)
+ Agda.Syntax.Abstract: type Assign = FieldAssignment' Expr
- Agda.Syntax.Abstract: type PatternSynDefn = ([Arg Name], Pattern)
+ Agda.Syntax.Abstract: type PatternSynDefn = ([Arg Name], Pattern' Void)
- Agda.Syntax.Abstract.Name: Name :: NameId -> Name -> Range -> Fixity' -> Name
+ Agda.Syntax.Abstract.Name: Name :: !NameId -> Name -> Range -> Fixity' -> Name
- Agda.Syntax.Abstract.Name: [nameId] :: Name -> NameId
+ Agda.Syntax.Abstract.Name: [nameId] :: Name -> !NameId
- Agda.Syntax.Abstract.Views: class ExprLike a where recurseExpr = traverse . recurseExpr foldExpr f = getConst . recurseExpr (\ pre post -> Const $ f pre) traverseExpr f = recurseExpr (\ pre post -> f =<< post) mapExpr f e = runIdentity $ traverseExpr (Identity . f) e
+ Agda.Syntax.Abstract.Views: class ExprLike a where recurseExpr = traverse . recurseExpr foldExpr f = getConst . recurseExpr (\ pre post -> Const (f pre) <* post) traverseExpr f = recurseExpr (\ pre post -> f =<< post) mapExpr f = runIdentity . traverseExpr (Identity . f)
- Agda.Syntax.Abstract.Views: traverseExpr :: (ExprLike a, Monad m, Applicative m) => (Expr -> m Expr) -> a -> m a
+ Agda.Syntax.Abstract.Views: traverseExpr :: (ExprLike a, Monad m) => (Expr -> m Expr) -> a -> m a
- Agda.Syntax.Common: Arg :: ArgInfo c -> e -> Arg c e
+ Agda.Syntax.Common: Arg :: ArgInfo -> e -> Arg e
- Agda.Syntax.Common: ArgInfo :: Hiding -> Relevance -> [c] -> ArgInfo c
+ Agda.Syntax.Common: ArgInfo :: Hiding -> Relevance -> ArgInfo
- Agda.Syntax.Common: Dom :: ArgInfo c -> e -> Dom c e
+ Agda.Syntax.Common: Dom :: ArgInfo -> e -> Dom e
- Agda.Syntax.Common: NameId :: Integer -> Integer -> NameId
+ Agda.Syntax.Common: NameId :: !Integer -> !Integer -> NameId
- Agda.Syntax.Common: TerminationMeasure :: !Range -> m -> TerminationCheck m
+ Agda.Syntax.Common: TerminationMeasure :: Range -> m -> TerminationCheck m
- Agda.Syntax.Common: WithHiding :: Hiding -> a -> WithHiding a
+ Agda.Syntax.Common: WithHiding :: !Hiding -> a -> WithHiding a
- Agda.Syntax.Common: [argInfoHiding] :: ArgInfo c -> Hiding
+ Agda.Syntax.Common: [argInfoHiding] :: ArgInfo -> Hiding
- Agda.Syntax.Common: [argInfoRelevance] :: ArgInfo c -> Relevance
+ Agda.Syntax.Common: [argInfoRelevance] :: ArgInfo -> Relevance
- Agda.Syntax.Common: [argInfo] :: Arg c e -> ArgInfo c
+ Agda.Syntax.Common: [argInfo] :: Arg e -> ArgInfo
- Agda.Syntax.Common: [domInfo] :: Dom c e -> ArgInfo c
+ Agda.Syntax.Common: [domInfo] :: Dom e -> ArgInfo
- Agda.Syntax.Common: [unArg] :: Arg c e -> e
+ Agda.Syntax.Common: [unArg] :: Arg e -> e
- Agda.Syntax.Common: [unDom] :: Dom c e -> e
+ Agda.Syntax.Common: [unDom] :: Dom e -> e
- Agda.Syntax.Common: argFromDom :: Dom c a -> Arg c a
+ Agda.Syntax.Common: argFromDom :: Dom a -> Arg a
- Agda.Syntax.Common: data Arg c e
+ Agda.Syntax.Common: data Arg e
- Agda.Syntax.Common: data ArgInfo c
+ Agda.Syntax.Common: data ArgInfo
- Agda.Syntax.Common: data Dom c e
+ Agda.Syntax.Common: data Dom e
- Agda.Syntax.Common: defaultArg :: a -> Arg c a
+ Agda.Syntax.Common: defaultArg :: a -> Arg a
- Agda.Syntax.Common: defaultArgInfo :: ArgInfo c
+ Agda.Syntax.Common: defaultArgInfo :: ArgInfo
- Agda.Syntax.Common: defaultDom :: a -> Dom c a
+ Agda.Syntax.Common: defaultDom :: a -> Dom a
- Agda.Syntax.Common: defaultNamedArg :: a -> NamedArg c a
+ Agda.Syntax.Common: defaultNamedArg :: a -> NamedArg a
- Agda.Syntax.Common: domFromArg :: Arg c a -> Dom c a
+ Agda.Syntax.Common: domFromArg :: Arg a -> Dom a
- Agda.Syntax.Common: mapArgInfo :: (ArgInfo c -> ArgInfo c') -> Arg c a -> Arg c' a
+ Agda.Syntax.Common: mapArgInfo :: LensArgInfo a => (ArgInfo -> ArgInfo) -> a -> a
- Agda.Syntax.Common: namedArg :: NamedArg c a -> a
+ Agda.Syntax.Common: namedArg :: NamedArg a -> a
- Agda.Syntax.Common: type NamedArg c a = Arg c (Named_ a)
+ Agda.Syntax.Common: type NamedArg a = Arg (Named_ a)
- Agda.Syntax.Common: updateNamedArg :: (a -> b) -> NamedArg c a -> NamedArg c b
+ Agda.Syntax.Common: updateNamedArg :: (a -> b) -> NamedArg a -> NamedArg b
- Agda.Syntax.Common: withArgsFrom :: [a] -> [Arg c b] -> [Arg c a]
+ Agda.Syntax.Common: withArgsFrom :: [a] -> [Arg b] -> [Arg a]
- Agda.Syntax.Common: withNamedArgsFrom :: [a] -> [NamedArg c b] -> [NamedArg c a]
+ Agda.Syntax.Common: withNamedArgsFrom :: [a] -> [NamedArg b] -> [NamedArg a]
- Agda.Syntax.Concrete: Abstract :: !Range -> [Declaration] -> Declaration
+ Agda.Syntax.Concrete: Abstract :: Range -> [Declaration] -> Declaration
- Agda.Syntax.Concrete: Absurd :: !Range -> Expr
+ Agda.Syntax.Concrete: Absurd :: Range -> Expr
- Agda.Syntax.Concrete: AbsurdLam :: !Range -> Hiding -> Expr
+ Agda.Syntax.Concrete: AbsurdLam :: Range -> Hiding -> Expr
- Agda.Syntax.Concrete: AbsurdP :: !Range -> Pattern
+ Agda.Syntax.Concrete: AbsurdP :: Range -> Pattern
- Agda.Syntax.Concrete: App :: !Range -> Expr -> (NamedArg Expr) -> Expr
+ Agda.Syntax.Concrete: App :: Range -> Expr -> (NamedArg Expr) -> Expr
- Agda.Syntax.Concrete: As :: !Range -> Name -> Expr -> Expr
+ Agda.Syntax.Concrete: As :: Range -> Name -> Expr -> Expr
- Agda.Syntax.Concrete: AsP :: !Range -> Name -> Pattern -> Pattern
+ Agda.Syntax.Concrete: AsP :: Range -> Name -> Pattern -> Pattern
- Agda.Syntax.Concrete: BuiltinPragma :: !Range -> String -> Expr -> Pragma
+ Agda.Syntax.Concrete: BuiltinPragma :: Range -> String -> Expr -> Pragma
- Agda.Syntax.Concrete: CompiledDataPragma :: !Range -> QName -> String -> [String] -> Pragma
+ Agda.Syntax.Concrete: CompiledDataPragma :: Range -> QName -> String -> [String] -> Pragma
- Agda.Syntax.Concrete: CompiledEpicPragma :: !Range -> QName -> String -> Pragma
+ Agda.Syntax.Concrete: CompiledEpicPragma :: Range -> QName -> String -> Pragma
- Agda.Syntax.Concrete: CompiledExportPragma :: !Range -> QName -> String -> Pragma
+ Agda.Syntax.Concrete: CompiledExportPragma :: Range -> QName -> String -> Pragma
- Agda.Syntax.Concrete: CompiledJSPragma :: !Range -> QName -> String -> Pragma
+ Agda.Syntax.Concrete: CompiledJSPragma :: Range -> QName -> String -> Pragma
- Agda.Syntax.Concrete: CompiledPragma :: !Range -> QName -> String -> Pragma
+ Agda.Syntax.Concrete: CompiledPragma :: Range -> QName -> String -> Pragma
- Agda.Syntax.Concrete: CompiledTypePragma :: !Range -> QName -> String -> Pragma
+ Agda.Syntax.Concrete: CompiledTypePragma :: Range -> QName -> String -> Pragma
- Agda.Syntax.Concrete: Data :: !Range -> Induction -> Name -> [LamBinding] -> (Maybe Expr) -> [Constructor] -> Declaration
+ Agda.Syntax.Concrete: Data :: Range -> Induction -> Name -> [LamBinding] -> (Maybe Expr) -> [TypeSignatureOrInstanceBlock] -> Declaration
- Agda.Syntax.Concrete: DataSig :: !Range -> Induction -> Name -> [LamBinding] -> Expr -> Declaration
+ Agda.Syntax.Concrete: DataSig :: Range -> Induction -> Name -> [LamBinding] -> Expr -> Declaration
- Agda.Syntax.Concrete: Dot :: !Range -> Expr -> Expr
+ Agda.Syntax.Concrete: Dot :: Range -> Expr -> Expr
- Agda.Syntax.Concrete: DotP :: !Range -> Expr -> Pattern
+ Agda.Syntax.Concrete: DotP :: Range -> Expr -> Pattern
- Agda.Syntax.Concrete: Equal :: !Range -> Expr -> Expr -> Expr
+ Agda.Syntax.Concrete: Equal :: Range -> Expr -> Expr -> Expr
- Agda.Syntax.Concrete: ExtendedLam :: !Range -> [(LHS, RHS, WhereClause)] -> Expr
+ Agda.Syntax.Concrete: ExtendedLam :: Range -> [(LHS, RHS, WhereClause, Bool)] -> Expr
- Agda.Syntax.Concrete: Field :: Name -> (Arg Expr) -> Declaration
+ Agda.Syntax.Concrete: Field :: IsInstance -> Name -> (Arg Expr) -> Declaration
- Agda.Syntax.Concrete: Fun :: !Range -> Expr -> Expr -> Expr
+ Agda.Syntax.Concrete: Fun :: Range -> Expr -> Expr -> Expr
- Agda.Syntax.Concrete: FunClause :: LHS -> RHS -> WhereClause -> Declaration
+ Agda.Syntax.Concrete: FunClause :: LHS -> RHS -> WhereClause -> Bool -> Declaration
- Agda.Syntax.Concrete: HiddenArg :: !Range -> (Named_ Expr) -> Expr
+ Agda.Syntax.Concrete: HiddenArg :: Range -> (Named_ Expr) -> Expr
- Agda.Syntax.Concrete: HiddenP :: !Range -> (Named_ Pattern) -> Pattern
+ Agda.Syntax.Concrete: HiddenP :: Range -> (Named_ Pattern) -> Pattern
- Agda.Syntax.Concrete: Import :: !Range -> QName -> (Maybe AsName) -> OpenShortHand -> ImportDirective -> Declaration
+ Agda.Syntax.Concrete: Import :: Range -> QName -> (Maybe AsName) -> !OpenShortHand -> ImportDirective -> Declaration
- Agda.Syntax.Concrete: ImportPragma :: !Range -> String -> Pragma
+ Agda.Syntax.Concrete: ImportPragma :: Range -> String -> Pragma
- Agda.Syntax.Concrete: ImpossiblePragma :: !Range -> Pragma
+ Agda.Syntax.Concrete: ImpossiblePragma :: Range -> Pragma
- Agda.Syntax.Concrete: InstanceArg :: !Range -> (Named_ Expr) -> Expr
+ Agda.Syntax.Concrete: InstanceArg :: Range -> (Named_ Expr) -> Expr
- Agda.Syntax.Concrete: InstanceB :: !Range -> [Declaration] -> Declaration
+ Agda.Syntax.Concrete: InstanceB :: Range -> [Declaration] -> Declaration
- Agda.Syntax.Concrete: InstanceP :: !Range -> (Named_ Pattern) -> Pattern
+ Agda.Syntax.Concrete: InstanceP :: Range -> (Named_ Pattern) -> Pattern
- Agda.Syntax.Concrete: LHSHead :: Name -> [NamedArg Pattern] -> LHSCore
+ Agda.Syntax.Concrete: LHSHead :: QName -> [NamedArg Pattern] -> LHSCore
- Agda.Syntax.Concrete: Lam :: !Range -> [LamBinding] -> Expr -> Expr
+ Agda.Syntax.Concrete: Lam :: Range -> [LamBinding] -> Expr -> Expr
- Agda.Syntax.Concrete: Let :: !Range -> [Declaration] -> Expr -> Expr
+ Agda.Syntax.Concrete: Let :: Range -> [Declaration] -> Expr -> Expr
- Agda.Syntax.Concrete: Module :: !Range -> QName -> [TypedBindings] -> [Declaration] -> Declaration
+ Agda.Syntax.Concrete: Module :: Range -> QName -> [TypedBindings] -> [Declaration] -> Declaration
- Agda.Syntax.Concrete: ModuleMacro :: !Range -> Name -> ModuleApplication -> OpenShortHand -> ImportDirective -> Declaration
+ Agda.Syntax.Concrete: ModuleMacro :: Range -> Name -> ModuleApplication -> !OpenShortHand -> ImportDirective -> Declaration
- Agda.Syntax.Concrete: Mutual :: !Range -> [Declaration] -> Declaration
+ Agda.Syntax.Concrete: Mutual :: Range -> [Declaration] -> Declaration
- Agda.Syntax.Concrete: OpApp :: !Range -> QName -> (Set Name) -> [NamedArg (OpApp Expr)] -> Expr
+ Agda.Syntax.Concrete: OpApp :: Range -> QName -> (Set Name) -> [NamedArg (MaybePlaceholder (OpApp Expr))] -> Expr
- Agda.Syntax.Concrete: OpAppP :: !Range -> QName -> (Set Name) -> [NamedArg Pattern] -> Pattern
+ Agda.Syntax.Concrete: OpAppP :: Range -> QName -> (Set Name) -> [NamedArg Pattern] -> Pattern
- Agda.Syntax.Concrete: Open :: !Range -> QName -> ImportDirective -> Declaration
+ Agda.Syntax.Concrete: Open :: Range -> QName -> ImportDirective -> Declaration
- Agda.Syntax.Concrete: OptionsPragma :: !Range -> [String] -> Pragma
+ Agda.Syntax.Concrete: OptionsPragma :: Range -> [String] -> Pragma
- Agda.Syntax.Concrete: Paren :: !Range -> Expr -> Expr
+ Agda.Syntax.Concrete: Paren :: Range -> Expr -> Expr
- Agda.Syntax.Concrete: ParenP :: !Range -> Pattern -> Pattern
+ Agda.Syntax.Concrete: ParenP :: Range -> Pattern -> Pattern
- Agda.Syntax.Concrete: PatternSyn :: !Range -> Name -> [Arg Name] -> Pattern -> Declaration
+ Agda.Syntax.Concrete: PatternSyn :: Range -> Name -> [Arg Name] -> Pattern -> Declaration
- Agda.Syntax.Concrete: Postulate :: !Range -> [TypeSignatureOrInstanceBlock] -> Declaration
+ Agda.Syntax.Concrete: Postulate :: Range -> [TypeSignatureOrInstanceBlock] -> Declaration
- Agda.Syntax.Concrete: Primitive :: !Range -> [TypeSignature] -> Declaration
+ Agda.Syntax.Concrete: Primitive :: Range -> [TypeSignature] -> Declaration
- Agda.Syntax.Concrete: Private :: !Range -> [Declaration] -> Declaration
+ Agda.Syntax.Concrete: Private :: Range -> [Declaration] -> Declaration
- Agda.Syntax.Concrete: Prop :: !Range -> Expr
+ Agda.Syntax.Concrete: Prop :: Range -> Expr
- Agda.Syntax.Concrete: QuestionMark :: !Range -> (Maybe Nat) -> Expr
+ Agda.Syntax.Concrete: QuestionMark :: Range -> (Maybe Nat) -> Expr
- Agda.Syntax.Concrete: Quote :: !Range -> Expr
+ Agda.Syntax.Concrete: Quote :: Range -> Expr
- Agda.Syntax.Concrete: QuoteContext :: !Range -> Name -> Expr -> Expr
+ Agda.Syntax.Concrete: QuoteContext :: Range -> Expr
- Agda.Syntax.Concrete: QuoteGoal :: !Range -> Name -> Expr -> Expr
+ Agda.Syntax.Concrete: QuoteGoal :: Range -> Name -> Expr -> Expr
- Agda.Syntax.Concrete: QuoteP :: !Range -> Pattern
+ Agda.Syntax.Concrete: QuoteP :: Range -> Pattern
- Agda.Syntax.Concrete: QuoteTerm :: !Range -> Expr
+ Agda.Syntax.Concrete: QuoteTerm :: Range -> Expr
- Agda.Syntax.Concrete: RawApp :: !Range -> [Expr] -> Expr
+ Agda.Syntax.Concrete: RawApp :: Range -> [Expr] -> Expr
- Agda.Syntax.Concrete: RawAppP :: !Range -> [Pattern] -> Pattern
+ Agda.Syntax.Concrete: RawAppP :: Range -> [Pattern] -> Pattern
- Agda.Syntax.Concrete: Rec :: !Range -> [(Name, Expr)] -> Expr
+ Agda.Syntax.Concrete: Rec :: Range -> RecordAssignments -> Expr
- Agda.Syntax.Concrete: RecUpdate :: !Range -> Expr -> [(Name, Expr)] -> Expr
+ Agda.Syntax.Concrete: RecUpdate :: Range -> Expr -> [FieldAssignment] -> Expr
- Agda.Syntax.Concrete: Record :: !Range -> Name -> (Maybe (Ranged Induction)) -> (Maybe Name) -> [LamBinding] -> (Maybe Expr) -> [Declaration] -> Declaration
+ Agda.Syntax.Concrete: Record :: Range -> Name -> (Maybe (Ranged Induction)) -> (Maybe Bool) -> (Maybe (Name, IsInstance)) -> [LamBinding] -> (Maybe Expr) -> [Declaration] -> Declaration
- Agda.Syntax.Concrete: RecordSig :: !Range -> Name -> [LamBinding] -> Expr -> Declaration
+ Agda.Syntax.Concrete: RecordSig :: Range -> Name -> [LamBinding] -> Expr -> Declaration
- Agda.Syntax.Concrete: RewritePragma :: !Range -> QName -> Pragma
+ Agda.Syntax.Concrete: RewritePragma :: Range -> QName -> Pragma
- Agda.Syntax.Concrete: Set :: !Range -> Expr
+ Agda.Syntax.Concrete: Set :: Range -> Expr
- Agda.Syntax.Concrete: SetN :: !Range -> Integer -> Expr
+ Agda.Syntax.Concrete: SetN :: Range -> Integer -> Expr
- Agda.Syntax.Concrete: StaticPragma :: !Range -> QName -> Pragma
+ Agda.Syntax.Concrete: StaticPragma :: Range -> QName -> Pragma
- Agda.Syntax.Concrete: SyntaxBindingLambda :: !Range -> [LamBinding] -> e -> OpApp e
+ Agda.Syntax.Concrete: SyntaxBindingLambda :: Range -> [LamBinding] -> e -> OpApp e
- Agda.Syntax.Concrete: TBind :: !Range -> [WithHiding BoundName] -> e -> TypedBinding' e
+ Agda.Syntax.Concrete: TBind :: Range -> [WithHiding BoundName] -> e -> TypedBinding' e
- Agda.Syntax.Concrete: TLet :: !Range -> [Declaration] -> TypedBinding' e
+ Agda.Syntax.Concrete: TLet :: Range -> [Declaration] -> TypedBinding' e
- Agda.Syntax.Concrete: Tactic :: !Range -> Expr -> [Expr] -> Expr
+ Agda.Syntax.Concrete: Tactic :: Range -> Expr -> [Expr] -> Expr
- Agda.Syntax.Concrete: TerminationCheckPragma :: !Range -> (TerminationCheck Name) -> Pragma
+ Agda.Syntax.Concrete: TerminationCheckPragma :: Range -> (TerminationCheck Name) -> Pragma
- Agda.Syntax.Concrete: TypedBindings :: !Range -> (Arg a) -> TypedBindings' a
+ Agda.Syntax.Concrete: TypedBindings :: Range -> (Arg a) -> TypedBindings' a
- Agda.Syntax.Concrete: Underscore :: !Range -> (Maybe String) -> Expr
+ Agda.Syntax.Concrete: Underscore :: Range -> (Maybe String) -> Expr
- Agda.Syntax.Concrete: Unquote :: !Range -> Expr
+ Agda.Syntax.Concrete: Unquote :: Range -> Expr
- Agda.Syntax.Concrete: UnquoteDecl :: !Range -> Name -> Expr -> Declaration
+ Agda.Syntax.Concrete: UnquoteDecl :: Range -> [Name] -> Expr -> Declaration
- Agda.Syntax.Concrete: WildP :: !Range -> Pattern
+ Agda.Syntax.Concrete: WildP :: Range -> Pattern
- Agda.Syntax.Concrete: WithApp :: !Range -> Expr -> [Expr] -> Expr
+ Agda.Syntax.Concrete: WithApp :: Range -> Expr -> [Expr] -> Expr
- Agda.Syntax.Concrete: [lhsDefName] :: LHSCore -> Name
+ Agda.Syntax.Concrete: [lhsDefName] :: LHSCore -> QName
- Agda.Syntax.Concrete.Definitions: Clause :: Name -> LHS -> RHS -> WhereClause -> [Clause] -> Clause
+ Agda.Syntax.Concrete.Definitions: Clause :: Name -> Catchall -> LHS -> RHS -> WhereClause -> [Clause] -> Clause
- Agda.Syntax.Concrete.Definitions: DataDef :: Range -> Fixity' -> IsAbstract -> Name -> [LamBinding] -> [NiceConstructor] -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: DataDef :: Range -> Fixity' -> IsAbstract -> Name -> [LamBinding] -> PositivityCheck -> [NiceConstructor] -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: FunSig :: Range -> Fixity' -> Access -> IsInstance -> ArgInfo -> TerminationCheck -> Name -> Expr -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: FunSig :: Range -> Fixity' -> Access -> IsInstance -> IsMacro -> ArgInfo -> TerminationCheck -> Name -> Expr -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: NiceDataSig :: Range -> Fixity' -> Access -> Name -> [LamBinding] -> Expr -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: NiceDataSig :: Range -> Fixity' -> Access -> Name -> [LamBinding] -> Expr -> PositivityCheck -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: NiceField :: Range -> Fixity' -> Access -> IsAbstract -> Name -> (Arg Expr) -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: NiceField :: Range -> IsInstance -> Fixity' -> Access -> IsAbstract -> Name -> (Arg Expr) -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: NiceFunClause :: Range -> Access -> IsAbstract -> TerminationCheck -> Declaration -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: NiceFunClause :: Range -> Access -> IsAbstract -> TerminationCheck -> Catchall -> Declaration -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: NiceMutual :: Range -> TerminationCheck -> [NiceDeclaration] -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: NiceMutual :: Range -> TerminationCheck -> PositivityCheck -> [NiceDeclaration] -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: NiceRecSig :: Range -> Fixity' -> Access -> Name -> [LamBinding] -> Expr -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: NiceRecSig :: Range -> Fixity' -> Access -> Name -> [LamBinding] -> Expr -> PositivityCheck -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: NiceUnquoteDecl :: Range -> Fixity' -> Access -> IsInstance -> IsAbstract -> TerminationCheck -> Name -> Expr -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: NiceUnquoteDecl :: Range -> [Fixity'] -> Access -> IsInstance -> IsAbstract -> TerminationCheck -> [Name] -> Expr -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: RecDef :: Range -> Fixity' -> IsAbstract -> Name -> (Maybe (Ranged Induction)) -> (Maybe (ThingWithFixity Name)) -> [LamBinding] -> [NiceDeclaration] -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: RecDef :: Range -> Fixity' -> IsAbstract -> Name -> (Maybe (Ranged Induction)) -> (Maybe Bool) -> (Maybe (ThingWithFixity Name, IsInstance)) -> [LamBinding] -> PositivityCheck -> [NiceDeclaration] -> NiceDeclaration
- Agda.Syntax.Concrete.Generic: class ExprLike a where traverseExpr = (throwImpossible (Impossible "src/full/Agda/Syntax/Concrete/Generic.hs" 34)) foldExpr = (throwImpossible (Impossible "src/full/Agda/Syntax/Concrete/Generic.hs" 35))
+ Agda.Syntax.Concrete.Generic: class ExprLike a where traverseExpr = (throwImpossible (Impossible "src/full/Agda/Syntax/Concrete/Generic.hs" 44)) foldExpr = (throwImpossible (Impossible "src/full/Agda/Syntax/Concrete/Generic.hs" 45))
- Agda.Syntax.Concrete.Generic: traverseExpr :: (ExprLike a, Monad m, Applicative m) => (Expr -> m Expr) -> a -> m a
+ Agda.Syntax.Concrete.Generic: traverseExpr :: (ExprLike a, Monad m) => (Expr -> m Expr) -> a -> m a
- Agda.Syntax.Concrete.Name: Name :: !Range -> [NamePart] -> Name
+ Agda.Syntax.Concrete.Name: Name :: Range -> [NamePart] -> Name
- Agda.Syntax.Concrete.Name: NoName :: !Range -> NameId -> Name
+ Agda.Syntax.Concrete.Name: NoName :: Range -> NameId -> Name
- Agda.Syntax.Concrete.Operators: parseLHS :: Name -> Pattern -> ScopeM LHSCore
+ Agda.Syntax.Concrete.Operators: parseLHS :: QName -> Pattern -> ScopeM LHSCore
- Agda.Syntax.Concrete.Operators.Parser: OpAppV :: QName -> (Set Name) -> [NamedArg (OpApp e)] -> ExprView e
+ Agda.Syntax.Concrete.Operators.Parser: OpAppV :: QName -> (Set Name) -> [NamedArg (MaybePlaceholder (OpApp e))] -> ExprView e
- Agda.Syntax.Concrete.Operators.Parser: appP :: IsExpr e => ReadP e e -> ReadP e [NamedArg e] -> ReadP e e
+ Agda.Syntax.Concrete.Operators.Parser: appP :: IsExpr e => Parser e e -> Parser e [NamedArg e] -> Parser e e
- Agda.Syntax.Concrete.Operators.Parser: argsP :: IsExpr e => ReadP e e -> ReadP e [NamedArg e]
+ Agda.Syntax.Concrete.Operators.Parser: argsP :: IsExpr e => Parser e e -> Parser e [NamedArg e]
- Agda.Syntax.Concrete.Operators.Parser: atomP :: IsExpr e => (QName -> Bool) -> ReadP e e
+ Agda.Syntax.Concrete.Operators.Parser: atomP :: IsExpr e => (QName -> Bool) -> Parser e e
- Agda.Syntax.Concrete.Operators.Parser: opP :: IsExpr e => ReadP e e -> NewNotation -> ReadP e (NewNotation, Range, [e])
+ Agda.Syntax.Concrete.Operators.Parser: opP :: IsExpr e => ParseSections -> Parser e e -> NewNotation -> NK k -> Parser e (OperatorType k e)
- Agda.Syntax.Concrete.Operators.Parser: partP :: IsExpr e => [Name] -> RawName -> ReadP e Range
+ Agda.Syntax.Concrete.Operators.Parser: partP :: IsExpr e => [Name] -> RawName -> Parser e Range
- Agda.Syntax.Concrete.Pretty: prettyOpApp :: Pretty a => QName -> [a] -> [Doc]
+ Agda.Syntax.Concrete.Pretty: prettyOpApp :: Pretty a => QName -> [NamedArg (MaybePlaceholder a)] -> [Doc]
- Agda.Syntax.Fixity: Fixity :: Range -> Integer -> Associativity -> Fixity
+ Agda.Syntax.Fixity: Fixity :: Range -> !PrecedenceLevel -> !Associativity -> Fixity
- Agda.Syntax.Fixity: Fixity' :: Fixity -> Notation -> Fixity'
+ Agda.Syntax.Fixity: Fixity' :: !Fixity -> Notation -> Fixity'
- Agda.Syntax.Fixity: NewNotation :: QName -> Set Name -> Fixity -> Notation -> NewNotation
+ Agda.Syntax.Fixity: NewNotation :: QName -> Set Name -> Fixity -> Notation -> Bool -> NewNotation
- Agda.Syntax.Fixity: [fixityAssoc] :: Fixity -> Associativity
+ Agda.Syntax.Fixity: [fixityAssoc] :: Fixity -> !Associativity
- Agda.Syntax.Fixity: [fixityLevel] :: Fixity -> Integer
+ Agda.Syntax.Fixity: [fixityLevel] :: Fixity -> !PrecedenceLevel
- Agda.Syntax.Fixity: [theFixity] :: Fixity' -> Fixity
+ Agda.Syntax.Fixity: [theFixity] :: Fixity' -> !Fixity
- Agda.Syntax.Info: DefInfo :: Fixity' -> Access -> IsAbstract -> IsInstance -> DeclInfo -> DefInfo
+ Agda.Syntax.Info: DefInfo :: Fixity' -> Access -> IsAbstract -> IsInstance -> IsMacro -> DeclInfo -> DefInfo
- Agda.Syntax.Info: MutualInfo :: TerminationCheck Name -> Range -> MutualInfo
+ Agda.Syntax.Info: MutualInfo :: TerminationCheck Name -> PositivityCheck -> Range -> MutualInfo
- Agda.Syntax.Info: mkDefInfoInstance :: Name -> Fixity' -> Access -> IsAbstract -> IsInstance -> Range -> DefInfo
+ Agda.Syntax.Info: mkDefInfoInstance :: Name -> Fixity' -> Access -> IsAbstract -> IsInstance -> IsMacro -> Range -> DefInfo
- Agda.Syntax.Internal: (:#) :: Term -> Substitution -> Substitution
+ Agda.Syntax.Internal: (:#) :: a -> Substitution' a -> Substitution' a
- Agda.Syntax.Internal: Clause :: Range -> Telescope -> Permutation -> [NamedArg Pattern] -> ClauseBody -> Maybe (Arg Type) -> Clause
+ Agda.Syntax.Internal: Clause :: Range -> Telescope -> [NamedArg DeBruijnPattern] -> ClauseBody -> Maybe (Arg Type) -> Bool -> Clause
- Agda.Syntax.Internal: EmptyS :: Substitution
+ Agda.Syntax.Internal: EmptyS :: Substitution' a
- Agda.Syntax.Internal: IdS :: Substitution
+ Agda.Syntax.Internal: IdS :: Substitution' a
- Agda.Syntax.Internal: Lift :: !Int -> Substitution -> Substitution
+ Agda.Syntax.Internal: Lift :: !Int -> (Substitution' a) -> Substitution' a
- Agda.Syntax.Internal: Strengthen :: Empty -> Substitution -> Substitution
+ Agda.Syntax.Internal: Strengthen :: Empty -> (Substitution' a) -> Substitution' a
- Agda.Syntax.Internal: Wk :: !Int -> Substitution -> Substitution
+ Agda.Syntax.Internal: Wk :: !Int -> (Substitution' a) -> Substitution' a
- Agda.Syntax.Internal: [namedClausePats] :: Clause -> [NamedArg Pattern]
+ Agda.Syntax.Internal: [namedClausePats] :: Clause -> [NamedArg DeBruijnPattern]
- Agda.Syntax.Internal: clausePats :: Clause -> [Arg Pattern]
+ Agda.Syntax.Internal: clausePats :: Clause -> [Arg DeBruijnPattern]
- Agda.Syntax.Internal: patternVars :: Arg Pattern -> [Arg (Either PatVarName Term)]
+ Agda.Syntax.Internal: patternVars :: Arg (Pattern' a) -> [Arg (Either a Term)]
- Agda.Syntax.Internal: properlyMatching :: Pattern -> Bool
+ Agda.Syntax.Internal: properlyMatching :: Pattern' a -> Bool
- Agda.Syntax.Internal: updateSharedFM :: (Monad m, Applicative m, Traversable f) => (Term -> m (f Term)) -> Term -> m (f Term)
+ Agda.Syntax.Internal: updateSharedFM :: (Monad m, Traversable f) => (Term -> m (f Term)) -> Term -> m (f Term)
- Agda.Syntax.Internal.Generic: copyTerm :: (TermLike a, Applicative m, Monad m) => a -> m a
+ Agda.Syntax.Internal.Generic: copyTerm :: (TermLike a, Monad m) => a -> m a
- Agda.Syntax.Internal.Generic: traverseTermM :: (TermLike a, Monad m, Applicative m) => (Term -> m Term) -> a -> m a
+ Agda.Syntax.Internal.Generic: traverseTermM :: (TermLike a, Monad m) => (Term -> m Term) -> a -> m a
- Agda.Syntax.Internal.Pattern: patternsToElims :: Permutation -> [NamedArg Pattern] -> [Elim]
+ Agda.Syntax.Internal.Pattern: patternsToElims :: [NamedArg DeBruijnPattern] -> [Elim]
- Agda.Syntax.Literal: LitChar :: Range -> Char -> Literal
+ Agda.Syntax.Literal: LitChar :: Range -> !Char -> Literal
- Agda.Syntax.Literal: LitFloat :: Range -> Double -> Literal
+ Agda.Syntax.Literal: LitFloat :: Range -> !Double -> Literal
- Agda.Syntax.Notation: BindHole :: Int -> GenPart
+ Agda.Syntax.Notation: BindHole :: !Int -> GenPart
- Agda.Syntax.Notation: NormalHole :: (NamedArg () Int) -> GenPart
+ Agda.Syntax.Notation: NormalHole :: (NamedArg Int) -> GenPart
- Agda.Syntax.Notation: mkNotation :: [NamedArg c HoleName] -> [RawName] -> Either String Notation
+ Agda.Syntax.Notation: mkNotation :: [NamedArg HoleName] -> [RawName] -> Either String Notation
- Agda.Syntax.Parser: ParseError :: Position -> String -> String -> String -> ParseError
+ Agda.Syntax.Parser: ParseError :: !SrcFile -> !PositionWithoutFile -> String -> String -> String -> ParseError
- Agda.Syntax.Parser: [errPos] :: ParseError -> Position
+ Agda.Syntax.Parser: [errPos] :: ParseError -> !PositionWithoutFile
- Agda.Syntax.Parser.Alex: AlexInput :: !Position -> String -> !Char -> AlexInput
+ Agda.Syntax.Parser.Alex: AlexInput :: !SrcFile -> !PositionWithoutFile -> String -> !Char -> AlexInput
- Agda.Syntax.Parser.Alex: [lexPos] :: AlexInput -> !Position
+ Agda.Syntax.Parser.Alex: [lexPos] :: AlexInput -> !PositionWithoutFile
- Agda.Syntax.Parser.Monad: PState :: !Position -> !Position -> String -> !Char -> String -> [LayoutContext] -> [LexState] -> ParseFlags -> ParseState
+ Agda.Syntax.Parser.Monad: PState :: !SrcFile -> !PositionWithoutFile -> !PositionWithoutFile -> String -> !Char -> String -> [LayoutContext] -> [LexState] -> ParseFlags -> ParseState
- Agda.Syntax.Parser.Monad: ParseError :: Position -> String -> String -> String -> ParseError
+ Agda.Syntax.Parser.Monad: ParseError :: !SrcFile -> !PositionWithoutFile -> String -> String -> String -> ParseError
- Agda.Syntax.Parser.Monad: [errPos] :: ParseError -> Position
+ Agda.Syntax.Parser.Monad: [errPos] :: ParseError -> !PositionWithoutFile
- Agda.Syntax.Parser.Monad: [parseLastPos] :: ParseState -> !Position
+ Agda.Syntax.Parser.Monad: [parseLastPos] :: ParseState -> !PositionWithoutFile
- Agda.Syntax.Parser.Monad: [parsePos] :: ParseState -> !Position
+ Agda.Syntax.Parser.Monad: [parsePos] :: ParseState -> !PositionWithoutFile
- Agda.Syntax.Parser.Monad: parseError' :: Maybe Position -> String -> Parser a
+ Agda.Syntax.Parser.Monad: parseError' :: Maybe PositionWithoutFile -> String -> Parser a
- Agda.Syntax.Parser.Monad: parseErrorAt :: Position -> String -> Parser a
+ Agda.Syntax.Parser.Monad: parseErrorAt :: PositionWithoutFile -> String -> Parser a
- Agda.Syntax.Parser.Monad: setLastPos :: Position -> Parser ()
+ Agda.Syntax.Parser.Monad: setLastPos :: PositionWithoutFile -> Parser ()
- Agda.Syntax.Parser.Monad: setParsePos :: Position -> Parser ()
+ Agda.Syntax.Parser.Monad: setParsePos :: PositionWithoutFile -> Parser ()
- Agda.Syntax.Position: Pn :: a -> !Int32 -> !Int32 -> !Int32 -> Position' a
+ Agda.Syntax.Position: Pn :: !a -> !Int32 -> !Int32 -> !Int32 -> Position' a
- Agda.Syntax.Position: [srcFile] :: Position' a -> a
+ Agda.Syntax.Position: [srcFile] :: Position' a -> !a
- Agda.Syntax.Position: posToRange :: Ord a => Position' a -> Position' a -> Range' a
+ Agda.Syntax.Position: posToRange :: Position' a -> Position' a -> Range' a
- Agda.Syntax.Position: rangeInvariant :: Range -> Bool
+ Agda.Syntax.Position: rangeInvariant :: Ord a => Range' a -> Bool
- Agda.Syntax.Position: rangeToInterval :: Range' a -> Maybe (Interval' a)
+ Agda.Syntax.Position: rangeToInterval :: Range' a -> Maybe IntervalWithoutFile
- Agda.Syntax.Scope.Base: NameSpace :: NamesInScope -> ModulesInScope -> NameSpace
+ Agda.Syntax.Scope.Base: NameSpace :: NamesInScope -> ModulesInScope -> InScopeSet -> NameSpace
- Agda.Syntax.Scope.Base: ScopeInfo :: ModuleName -> Map ModuleName Scope -> LocalVars -> Precedence -> ScopeInfo
+ Agda.Syntax.Scope.Base: ScopeInfo :: ModuleName -> Map ModuleName Scope -> LocalVars -> Precedence -> Map QName [QName] -> Map ModuleName [QName] -> InScopeSet -> ScopeInfo
- Agda.Syntax.Scope.Base: inverseScopeLookup' :: AllowAmbiguousConstructors -> Either ModuleName QName -> ScopeInfo -> [QName]
+ Agda.Syntax.Scope.Base: inverseScopeLookup' :: AllowAmbiguousNames -> Either ModuleName QName -> ScopeInfo -> [QName]
- Agda.Syntax.Scope.Base: inverseScopeLookupName' :: AllowAmbiguousConstructors -> QName -> ScopeInfo -> [QName]
+ Agda.Syntax.Scope.Base: inverseScopeLookupName' :: AllowAmbiguousNames -> QName -> ScopeInfo -> [QName]
- Agda.Syntax.Scope.Base: mapNameSpace :: (NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope) -> NameSpace -> NameSpace
+ Agda.Syntax.Scope.Base: mapNameSpace :: (NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope) -> (InScopeSet -> InScopeSet) -> NameSpace -> NameSpace
- Agda.Syntax.Scope.Base: mapNameSpaceM :: Applicative m => (NamesInScope -> m NamesInScope) -> (ModulesInScope -> m ModulesInScope) -> NameSpace -> m NameSpace
+ Agda.Syntax.Scope.Base: mapNameSpaceM :: Applicative m => (NamesInScope -> m NamesInScope) -> (ModulesInScope -> m ModulesInScope) -> (InScopeSet -> m InScopeSet) -> NameSpace -> m NameSpace
- Agda.Syntax.Scope.Base: mapScope :: (NameSpaceId -> NamesInScope -> NamesInScope) -> (NameSpaceId -> ModulesInScope -> ModulesInScope) -> Scope -> Scope
+ Agda.Syntax.Scope.Base: mapScope :: (NameSpaceId -> NamesInScope -> NamesInScope) -> (NameSpaceId -> ModulesInScope -> ModulesInScope) -> (NameSpaceId -> InScopeSet -> InScopeSet) -> Scope -> Scope
- Agda.Syntax.Scope.Base: mapScopeM :: (Functor m, Applicative m) => (NameSpaceId -> NamesInScope -> m NamesInScope) -> (NameSpaceId -> ModulesInScope -> m ModulesInScope) -> Scope -> m Scope
+ Agda.Syntax.Scope.Base: mapScopeM :: Applicative m => (NameSpaceId -> NamesInScope -> m NamesInScope) -> (NameSpaceId -> ModulesInScope -> m ModulesInScope) -> (NameSpaceId -> InScopeSet -> m InScopeSet) -> Scope -> m Scope
- Agda.Syntax.Scope.Base: mapScopeM_ :: (Functor m, Applicative m) => (NamesInScope -> m NamesInScope) -> (ModulesInScope -> m ModulesInScope) -> Scope -> m Scope
+ Agda.Syntax.Scope.Base: mapScopeM_ :: Applicative m => (NamesInScope -> m NamesInScope) -> (ModulesInScope -> m ModulesInScope) -> (InScopeSet -> m InScopeSet) -> Scope -> m Scope
- Agda.Syntax.Scope.Base: mapScope_ :: (NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope) -> Scope -> Scope
+ Agda.Syntax.Scope.Base: mapScope_ :: (NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope) -> (InScopeSet -> InScopeSet) -> Scope -> Scope
- Agda.Syntax.Scope.Base: zipNameSpace :: (NamesInScope -> NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope -> ModulesInScope) -> NameSpace -> NameSpace -> NameSpace
+ Agda.Syntax.Scope.Base: zipNameSpace :: (NamesInScope -> NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope -> ModulesInScope) -> (InScopeSet -> InScopeSet -> InScopeSet) -> NameSpace -> NameSpace -> NameSpace
- Agda.Syntax.Scope.Base: zipScope :: (NameSpaceId -> NamesInScope -> NamesInScope -> NamesInScope) -> (NameSpaceId -> ModulesInScope -> ModulesInScope -> ModulesInScope) -> Scope -> Scope -> Scope
+ Agda.Syntax.Scope.Base: zipScope :: (NameSpaceId -> NamesInScope -> NamesInScope -> NamesInScope) -> (NameSpaceId -> ModulesInScope -> ModulesInScope -> ModulesInScope) -> (NameSpaceId -> InScopeSet -> InScopeSet -> InScopeSet) -> Scope -> Scope -> Scope
- Agda.Syntax.Scope.Base: zipScope_ :: (NamesInScope -> NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope -> ModulesInScope) -> Scope -> Scope -> Scope
+ Agda.Syntax.Scope.Base: zipScope_ :: (NamesInScope -> NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope -> ModulesInScope) -> (InScopeSet -> InScopeSet -> InScopeSet) -> Scope -> Scope -> Scope
- Agda.Syntax.Scope.Monad: applyImportDirectiveM :: QName -> ImportDirective -> Scope -> ScopeM Scope
+ Agda.Syntax.Scope.Monad: applyImportDirectiveM :: QName -> ImportDirective -> Scope -> ScopeM (ImportDirective, Scope)
- Agda.Syntax.Scope.Monad: modifyCurrentScopeM :: (Scope -> ScopeM Scope) -> ScopeM ()
+ Agda.Syntax.Scope.Monad: modifyCurrentScopeM :: (Scope -> ScopeM (a, Scope)) -> ScopeM a
- Agda.Syntax.Scope.Monad: modifyNamedScopeM :: ModuleName -> (Scope -> ScopeM Scope) -> ScopeM ()
+ Agda.Syntax.Scope.Monad: modifyNamedScopeM :: ModuleName -> (Scope -> ScopeM (a, Scope)) -> ScopeM a
- Agda.Syntax.Scope.Monad: openModule_ :: QName -> ImportDirective -> ScopeM ()
+ Agda.Syntax.Scope.Monad: openModule_ :: QName -> ImportDirective -> ScopeM ImportDirective
- Agda.Syntax.Translation.ConcreteToAbstract: OldName :: Name -> OldName
+ Agda.Syntax.Translation.ConcreteToAbstract: OldName :: a -> OldName a
- Agda.Syntax.Translation.ConcreteToAbstract: TopLevelInfo :: [Declaration] -> ScopeInfo -> ScopeInfo -> TopLevelInfo
+ Agda.Syntax.Translation.ConcreteToAbstract: TopLevelInfo :: [Declaration] -> ScopeInfo -> TopLevelInfo
- Agda.Syntax.Translation.ConcreteToAbstract: newtype OldName
+ Agda.Syntax.Translation.ConcreteToAbstract: newtype OldName a
- Agda.Termination.CallGraph: fromList :: Monoid cinfo => [Call cinfo] -> CallGraph cinfo
+ Agda.Termination.CallGraph: fromList :: [Call cinfo] -> CallGraph cinfo
- Agda.Termination.CallGraph: insert :: Monoid cinfo => Node -> Node -> CallMatrix -> cinfo -> CallGraph cinfo -> CallGraph cinfo
+ Agda.Termination.CallGraph: insert :: Node -> Node -> CallMatrix -> cinfo -> CallGraph cinfo -> CallGraph cinfo
- Agda.Termination.CallGraph: union :: Monoid cinfo => CallGraph cinfo -> CallGraph cinfo -> CallGraph cinfo
+ Agda.Termination.CallGraph: union :: CallGraph cinfo -> CallGraph cinfo -> CallGraph cinfo
- Agda.Termination.Semiring: semiringInvariant :: (Arbitrary a, Eq a, Show a) => Semiring a -> a -> a -> a -> Bool
+ Agda.Termination.Semiring: semiringInvariant :: Eq a => Semiring a -> a -> a -> a -> Bool
- Agda.Termination.SparseMatrix: matrix :: (Arbitrary i, Integral i, Arbitrary b, HasZero b) => Size i -> Gen (Matrix i b)
+ Agda.Termination.SparseMatrix: matrix :: (Integral i, Arbitrary b, HasZero b) => Size i -> Gen (Matrix i b)
- Agda.Termination.SparseMatrix: matrixUsingRowGen :: (Arbitrary i, Integral i, Arbitrary b, HasZero b) => Size i -> (i -> Gen [b]) -> Gen (Matrix i b)
+ Agda.Termination.SparseMatrix: matrixUsingRowGen :: (Integral i, HasZero b) => Size i -> (i -> Gen [b]) -> Gen (Matrix i b)
- Agda.Termination.SparseMatrix: mul :: (Enum i, Num i, Ix i, Eq a) => Semiring a -> Matrix i a -> Matrix i a -> Matrix i a
+ Agda.Termination.SparseMatrix: mul :: (Ix i, Eq a) => Semiring a -> Matrix i a -> Matrix i a -> Matrix i a
- Agda.Termination.TermCheck: termDecl :: Declaration -> TCM Result
+ Agda.Termination.TermCheck: termDecl :: MutualId -> Declaration -> TCM Result
- Agda.TypeChecking.Abstract: abstractTerm :: AbstractTerm a => Term -> a -> a
+ Agda.TypeChecking.Abstract: abstractTerm :: Type -> Term -> Type -> Term -> TCM Term
- Agda.TypeChecking.Abstract: piAbstractTerm :: Term -> Type -> Type -> Type
+ Agda.TypeChecking.Abstract: piAbstractTerm :: Term -> Type -> Type -> TCM Type
- Agda.TypeChecking.CompiledClause: Case :: Int -> (Case CompiledClauses) -> CompiledClauses
+ Agda.TypeChecking.CompiledClause: Case :: (Arg Int) -> (Case CompiledClauses) -> CompiledClauses
- Agda.TypeChecking.CompiledClause.Compile: compile :: Cls -> CompiledClauses
+ Agda.TypeChecking.CompiledClause.Compile: compile :: (Term -> Term) -> Cls -> CompiledClauses
- Agda.TypeChecking.CompiledClause.Compile: compileWithSplitTree :: SplitTree -> Cls -> CompiledClauses
+ Agda.TypeChecking.CompiledClause.Compile: compileWithSplitTree :: (Term -> Term) -> SplitTree -> Cls -> CompiledClauses
- Agda.TypeChecking.CompiledClause.Compile: nextSplit :: Cls -> Maybe (Bool, Int)
+ Agda.TypeChecking.CompiledClause.Compile: nextSplit :: Cls -> Maybe (Bool, Arg Int)
- Agda.TypeChecking.Conversion: coerceSize :: Term -> Type -> Type -> TCM Term
+ Agda.TypeChecking.Conversion: coerceSize :: (Type -> Type -> TCM ()) -> Term -> Type -> Type -> TCM Term
- Agda.TypeChecking.Coverage: Covering :: Nat -> [(QName, SplitClause)] -> Covering
+ Agda.TypeChecking.Coverage: Covering :: Arg Nat -> [(QName, SplitClause)] -> Covering
- Agda.TypeChecking.Coverage: SClause :: Telescope -> Permutation -> [NamedArg Pattern] -> Substitution -> Maybe (Arg Type) -> SplitClause
+ Agda.TypeChecking.Coverage: SClause :: Telescope -> [NamedArg DeBruijnPattern] -> PatternSubstitution -> Maybe (Arg Type) -> SplitClause
- Agda.TypeChecking.Coverage: [covSplitArg] :: Covering -> Nat
+ Agda.TypeChecking.Coverage: [covSplitArg] :: Covering -> Arg Nat
- Agda.TypeChecking.Coverage: [scPats] :: SplitClause -> [NamedArg Pattern]
+ Agda.TypeChecking.Coverage: [scPats] :: SplitClause -> [NamedArg DeBruijnPattern]
- Agda.TypeChecking.Coverage: [scSubst] :: SplitClause -> Substitution
+ Agda.TypeChecking.Coverage: [scSubst] :: SplitClause -> PatternSubstitution
- Agda.TypeChecking.Coverage: splitLast :: Induction -> Telescope -> [NamedArg Pattern] -> TCM (Either SplitError Covering)
+ Agda.TypeChecking.Coverage: splitLast :: Induction -> Telescope -> [NamedArg DeBruijnPattern] -> TCM (Either SplitError Covering)
- Agda.TypeChecking.Coverage.Match: ConMP :: ConHead -> [Arg MPat] -> MPat
+ Agda.TypeChecking.Coverage.Match: ConMP :: ConHead -> (Maybe ConPOrigin) -> [Arg MPat] -> MPat
- Agda.TypeChecking.Coverage.Match: buildMPatterns :: Permutation -> [Arg Pattern] -> [Arg MPat]
+ Agda.TypeChecking.Coverage.Match: buildMPatterns :: [Arg DeBruijnPattern] -> [Arg MPat]
- Agda.TypeChecking.Coverage.Match: match :: [Clause] -> [Arg Pattern] -> Permutation -> Match Nat
+ Agda.TypeChecking.Coverage.Match: match :: [Clause] -> [Arg DeBruijnPattern] -> Match (Nat, [MPat])
- Agda.TypeChecking.Coverage.Match: matchClause :: MatchLit -> [Arg MPat] -> Nat -> Clause -> Match Nat
+ Agda.TypeChecking.Coverage.Match: matchClause :: MatchLit -> [Arg MPat] -> Nat -> Clause -> Match (Nat, [MPat])
- Agda.TypeChecking.Coverage.Match: matchLits :: Clause -> [Arg Pattern] -> Permutation -> Bool
+ Agda.TypeChecking.Coverage.Match: matchLits :: Clause -> [Arg DeBruijnPattern] -> Bool
- Agda.TypeChecking.Coverage.Match: matchPat :: MatchLit -> Pattern -> MPat -> Match ()
+ Agda.TypeChecking.Coverage.Match: matchPat :: MatchLit -> Pattern' a -> MPat -> Match [MPat]
- Agda.TypeChecking.Coverage.Match: matchPats :: MatchLit -> [Arg Pattern] -> [Arg MPat] -> Match ()
+ Agda.TypeChecking.Coverage.Match: matchPats :: MatchLit -> [Arg (Pattern' a)] -> [Arg MPat] -> Match [MPat]
- Agda.TypeChecking.Coverage.Match: type MatchLit = Literal -> MPat -> Match ()
+ Agda.TypeChecking.Coverage.Match: type MatchLit = Literal -> MPat -> Match [MPat]
- Agda.TypeChecking.Coverage.SplitTree: SplitAt :: Int -> SplitTrees' a -> SplitTree' a
+ Agda.TypeChecking.Coverage.SplitTree: SplitAt :: Arg Int -> SplitTrees' a -> SplitTree' a
- Agda.TypeChecking.Coverage.SplitTree: SplitTreeLabel :: Maybe a -> Maybe Int -> Maybe Int -> SplitTreeLabel a
+ Agda.TypeChecking.Coverage.SplitTree: SplitTreeLabel :: Maybe a -> Maybe (Arg Int) -> Maybe Int -> SplitTreeLabel a
- Agda.TypeChecking.Coverage.SplitTree: [lblSplitArg] :: SplitTreeLabel a -> Maybe Int
+ Agda.TypeChecking.Coverage.SplitTree: [lblSplitArg] :: SplitTreeLabel a -> Maybe (Arg Int)
- Agda.TypeChecking.Coverage.SplitTree: [splitArg] :: SplitTree' a -> Int
+ Agda.TypeChecking.Coverage.SplitTree: [splitArg] :: SplitTree' a -> Arg Int
- Agda.TypeChecking.Datatypes: getConstructorArity :: QName -> TCM (Either Nat [Arg QName])
+ Agda.TypeChecking.Datatypes: getConstructorArity :: QName -> TCM Nat
- Agda.TypeChecking.DisplayForm: matchDisplayForm :: DisplayForm -> Args -> MaybeT TCM DisplayTerm
+ Agda.TypeChecking.DisplayForm: matchDisplayForm :: DisplayForm -> Args -> MaybeT TCM (DisplayForm, DisplayTerm)
- Agda.TypeChecking.EtaContract: etaContract :: (MonadReader TCEnv m, HasConstInfo m, TermLike a) => a -> m a
+ Agda.TypeChecking.EtaContract: etaContract :: (MonadReader TCEnv m, HasConstInfo m, HasOptions m, TermLike a) => a -> m a
- Agda.TypeChecking.EtaContract: etaOnce :: (MonadReader TCEnv m, HasConstInfo m) => Term -> m Term
+ Agda.TypeChecking.EtaContract: etaOnce :: (MonadReader TCEnv m, HasConstInfo m, HasOptions m) => Term -> m Term
- Agda.TypeChecking.Free: FV :: VarSet -> VarSet -> VarSet -> VarSet -> VarSet -> VarSet -> FreeVars
+ Agda.TypeChecking.Free: FV :: VarSet -> VarSet -> VarSet -> IntMap [MetaId] -> VarSet -> VarSet -> FreeVars
- Agda.TypeChecking.Free: Flexible :: Occurrence
+ Agda.TypeChecking.Free: Flexible :: [MetaId] -> Occurrence
- Agda.TypeChecking.Free: [flexibleVars] :: FreeVars -> VarSet
+ Agda.TypeChecking.Free: [flexibleVars] :: FreeVars -> IntMap [MetaId]
- Agda.TypeChecking.Free.Lazy: Flexible :: FlexRig
+ Agda.TypeChecking.Free.Lazy: Flexible :: [MetaId] -> FlexRig
- Agda.TypeChecking.InstanceArguments: checkCandidates :: MetaId -> Type -> Candidates -> TCM Candidates
+ Agda.TypeChecking.InstanceArguments: checkCandidates :: MetaId -> Type -> [Candidate] -> TCM (Maybe [Candidate])
- Agda.TypeChecking.InstanceArguments: findInScope :: MetaId -> Maybe Candidates -> TCM ()
+ Agda.TypeChecking.InstanceArguments: findInScope :: MetaId -> Maybe [Candidate] -> TCM ()
- Agda.TypeChecking.InstanceArguments: findInScope' :: MetaId -> Candidates -> TCM (Maybe Candidates)
+ Agda.TypeChecking.InstanceArguments: findInScope' :: MetaId -> [Candidate] -> TCM (Maybe ([Candidate], Maybe MetaId))
- Agda.TypeChecking.InstanceArguments: initialIFSCandidates :: Type -> TCM (Maybe Candidates)
+ Agda.TypeChecking.InstanceArguments: initialIFSCandidates :: Type -> TCM (Maybe [Candidate])
- Agda.TypeChecking.MetaVars: etaExpandProjectedVar :: (PrettyTCM a, Subst a) => Int -> a -> TCM c -> (a -> TCM c) -> TCM c
+ Agda.TypeChecking.MetaVars: etaExpandProjectedVar :: (PrettyTCM a, Subst Term a) => Int -> a -> TCM c -> (a -> TCM c) -> TCM c
- Agda.TypeChecking.MetaVars: expandProjectedVars :: (Normalise a, TermLike a, Show a, PrettyTCM a, NoProjectedVar a, Subst a, PrettyTCM b, Subst b) => a -> b -> (a -> b -> TCM c) -> TCM c
+ Agda.TypeChecking.MetaVars: expandProjectedVars :: (Normalise a, TermLike a, Show a, PrettyTCM a, NoProjectedVar a, Subst Term a, PrettyTCM b, Subst Term b) => a -> b -> (a -> b -> TCM c) -> TCM c
- Agda.TypeChecking.MetaVars: isEtaExpandable :: MetaId -> TCM Bool
+ Agda.TypeChecking.MetaVars: isEtaExpandable :: [MetaKind] -> MetaId -> TCM Bool
- Agda.TypeChecking.MetaVars: newArgsMetaCtx :: Type -> Telescope -> Args -> TCM Args
+ Agda.TypeChecking.MetaVars: newArgsMetaCtx :: Type -> Telescope -> Permutation -> Args -> TCM Args
- Agda.TypeChecking.MetaVars: newArgsMetaCtx' :: Condition -> Type -> Telescope -> Args -> TCM Args
+ Agda.TypeChecking.MetaVars: newArgsMetaCtx' :: Condition -> Type -> Telescope -> Permutation -> Args -> TCM Args
- Agda.TypeChecking.MetaVars: newIFSMeta :: MetaNameSuggestion -> Type -> Maybe [(Term, Type)] -> TCM Term
+ Agda.TypeChecking.MetaVars: newIFSMeta :: MetaNameSuggestion -> Type -> Maybe [Candidate] -> TCM Term
- Agda.TypeChecking.MetaVars: newIFSMetaCtx :: MetaNameSuggestion -> Type -> Args -> Maybe [(Term, Type)] -> TCM Term
+ Agda.TypeChecking.MetaVars: newIFSMetaCtx :: MetaNameSuggestion -> Type -> Args -> Maybe [Candidate] -> TCM Term
- Agda.TypeChecking.MetaVars: newRecordMetaCtx :: QName -> Args -> Telescope -> Args -> TCM Term
+ Agda.TypeChecking.MetaVars: newRecordMetaCtx :: QName -> Args -> Telescope -> Permutation -> Args -> TCM Term
- Agda.TypeChecking.MetaVars: newValueMetaCtx :: RunMetaOccursCheck -> Type -> Args -> TCM Term
+ Agda.TypeChecking.MetaVars: newValueMetaCtx :: RunMetaOccursCheck -> Type -> Telescope -> Permutation -> Args -> TCM Term
- Agda.TypeChecking.MetaVars: newValueMetaCtx' :: RunMetaOccursCheck -> Type -> Args -> TCM Term
+ Agda.TypeChecking.MetaVars: newValueMetaCtx' :: RunMetaOccursCheck -> Type -> Telescope -> Permutation -> Args -> TCM Term
- Agda.TypeChecking.MetaVars: problemType :: TypeCheckingProblem -> Type
+ Agda.TypeChecking.MetaVars: problemType :: TypeCheckingProblem -> TCM Type
- Agda.TypeChecking.MetaVars.Occurs: foldRigid :: (FoldRigid a, Monoid (TCM m)) => (TCM m -> TCM m) -> (Nat -> TCM m) -> a -> TCM m
+ Agda.TypeChecking.MetaVars.Occurs: foldRigid :: (FoldRigid a, Monoid (TCM m)) => (Nat -> TCM m) -> a -> TCM m
- Agda.TypeChecking.Monad.Base: BlockedOnMeta :: MetaId -> UnquoteError
+ Agda.TypeChecking.Monad.Base: BlockedOnMeta :: TCState -> MetaId -> UnquoteError
- Agda.TypeChecking.Monad.Base: CheckArgs :: ExpandHidden -> ExpandInstances -> Range -> [NamedArg Expr] -> Type -> Type -> (Args -> Type -> TCM Term) -> TypeCheckingProblem
+ Agda.TypeChecking.Monad.Base: CheckArgs :: ExpandHidden -> Range -> [NamedArg Expr] -> Type -> Type -> (Args -> Type -> TCM Term) -> TypeCheckingProblem
- Agda.TypeChecking.Monad.Base: CheckSizeLtSat :: Type -> Constraint
+ Agda.TypeChecking.Monad.Base: CheckSizeLtSat :: Term -> Constraint
- Agda.TypeChecking.Monad.Base: CompiledRep :: Maybe HaskellRepresentation -> Maybe HaskellExport -> Maybe EpicCode -> Maybe JSCode -> CompiledRepresentation
+ Agda.TypeChecking.Monad.Base: CompiledRep :: Maybe HaskellRepresentation -> Maybe HaskellExport -> Maybe EpicCode -> Maybe JSCode -> Maybe CoreRepresentation -> CompiledRepresentation
- Agda.TypeChecking.Monad.Base: CoverageFailure :: QName -> [[Arg Pattern]] -> TypeError
+ Agda.TypeChecking.Monad.Base: CoverageFailure :: QName -> [[Arg DeBruijnPattern]] -> TypeError
- Agda.TypeChecking.Monad.Base: Defn :: ArgInfo -> QName -> Type -> [Polarity] -> [Occurrence] -> [Open DisplayForm] -> MutualId -> CompiledRepresentation -> Maybe QName -> Defn -> Definition
+ Agda.TypeChecking.Monad.Base: Defn :: ArgInfo -> QName -> Type -> [Polarity] -> [Occurrence] -> [Open DisplayForm] -> MutualId -> CompiledRepresentation -> Maybe QName -> Bool -> Defn -> Definition
- Agda.TypeChecking.Monad.Base: FindInScope :: MetaId -> (Maybe [(Term, Type)]) -> Constraint
+ Agda.TypeChecking.Monad.Base: FindInScope :: MetaId -> (Maybe MetaId) -> (Maybe [Candidate]) -> Constraint
- Agda.TypeChecking.Monad.Base: Function :: [Clause] -> Maybe CompiledClauses -> FunctionInverse -> [QName] -> IsAbstract -> Delayed -> Maybe Projection -> Bool -> Bool -> Maybe Bool -> Maybe ExtLamInfo -> Maybe QName -> Bool -> Defn
+ Agda.TypeChecking.Monad.Base: Function :: [Clause] -> Maybe CompiledClauses -> Maybe Compiled -> FunctionInverse -> [QName] -> IsAbstract -> Delayed -> Maybe Projection -> Bool -> Bool -> Bool -> Maybe Bool -> Maybe ExtLamInfo -> Maybe QName -> Bool -> Defn
- Agda.TypeChecking.Monad.Base: Interface :: Hash -> [(ModuleName, Hash)] -> ModuleName -> Map ModuleName Scope -> ScopeInfo -> Signature -> BuiltinThings (String, QName) -> Set String -> HighlightingInfo -> [OptionsPragma] -> PatternSynDefns -> Interface
+ Agda.TypeChecking.Monad.Base: Interface :: Hash -> [(ModuleName, Hash)] -> ModuleName -> Map ModuleName Scope -> ScopeInfo -> Signature -> DisplayForms -> BuiltinThings (String, QName) -> Set String -> Set String -> [String] -> HighlightingInfo -> [OptionsPragma] -> PatternSynDefns -> Interface
- Agda.TypeChecking.Monad.Base: PVar :: {-# UNPACK #-} !Int -> NLPat
+ Agda.TypeChecking.Monad.Base: PVar :: (Maybe CtxId) -> !Int -> NLPat
- Agda.TypeChecking.Monad.Base: PersistentTCSt :: DecodedModules -> CommandLineOptions -> InteractionOutputCallback -> !Benchmark -> !Statistics -> PersistentTCState
+ Agda.TypeChecking.Monad.Base: PersistentTCSt :: DecodedModules -> CommandLineOptions -> InteractionOutputCallback -> !Benchmark -> !Statistics -> !(Maybe LoadedFileCache) -> PersistentTCState
- Agda.TypeChecking.Monad.Base: PostScopeState :: CompressedFile -> !DisambiguatedNames -> MetaStore -> InteractionPoints -> Constraints -> Constraints -> Bool -> Set QName -> Signature -> Maybe ModuleName -> TempInstanceTable -> Statistics -> Map MutualId (Set QName) -> BuiltinThings PrimFun -> MetaId -> MutualId -> CtxId -> ProblemId -> Int -> PostScopeState
+ Agda.TypeChecking.Monad.Base: PostScopeState :: CompressedFile -> !DisambiguatedNames -> MetaStore -> InteractionPoints -> Constraints -> Constraints -> Bool -> Set QName -> Signature -> !DisplayForms -> !DisplayForms -> Maybe ModuleName -> TempInstanceTable -> Statistics -> Map MutualId (Set QName) -> BuiltinThings PrimFun -> MetaId -> MutualId -> CtxId -> ProblemId -> Int -> NameId -> PostScopeState
- Agda.TypeChecking.Monad.Base: PreScopeState :: CompressedFile -> InteractionPoints -> Signature -> Set ModuleName -> ModuleToSource -> VisitedModules -> ScopeInfo -> PatternSynDefns -> PatternSynDefns -> PragmaOptions -> BuiltinThings PrimFun -> Set String -> InteractionId -> NameId -> PreScopeState
+ Agda.TypeChecking.Monad.Base: PreScopeState :: CompressedFile -> Signature -> Set ModuleName -> ModuleToSource -> VisitedModules -> ScopeInfo -> PatternSynDefns -> PatternSynDefns -> PragmaOptions -> BuiltinThings PrimFun -> Set String -> Set String -> [String] -> !InteractionId -> PreScopeState
- Agda.TypeChecking.Monad.Base: Record :: Nat -> Maybe Clause -> ConHead -> Bool -> Type -> [Arg QName] -> Telescope -> [QName] -> Bool -> Maybe Induction -> Bool -> IsAbstract -> Defn
+ Agda.TypeChecking.Monad.Base: Record :: Nat -> Maybe Clause -> ConHead -> Bool -> Type -> [Arg QName] -> Telescope -> [QName] -> EtaEquality -> Maybe Induction -> Bool -> IsAbstract -> Defn
- Agda.TypeChecking.Monad.Base: ReduceM :: Reader ReduceEnv a -> ReduceM a
+ Agda.TypeChecking.Monad.Base: ReduceM :: (ReduceEnv -> a) -> ReduceM a
- Agda.TypeChecking.Monad.Base: ScopeCheckLHS :: Name -> Pattern -> Call
+ Agda.TypeChecking.Monad.Base: ScopeCheckLHS :: QName -> Pattern -> Call
- Agda.TypeChecking.Monad.Base: TCEnv :: Context -> LetBindings -> ModuleName -> Maybe AbsolutePath -> [(ModuleName, Nat)] -> [TopLevelModuleName] -> Maybe MutualId -> TerminationCheck () -> Bool -> Bool -> [ProblemId] -> AbstractMode -> Relevance -> [Color] -> Bool -> Bool -> Bool -> Range -> Range -> Maybe (Closure Call) -> HighlightingLevel -> HighlightingMethod -> Integer -> Bool -> ExpandHidden -> Maybe QName -> Simplification -> AllowedReductions -> Bool -> Bool -> Bool -> Bool -> TCEnv
+ Agda.TypeChecking.Monad.Base: TCEnv :: Context -> LetBindings -> ModuleName -> Maybe AbsolutePath -> [(ModuleName, Nat)] -> [TopLevelModuleName] -> Maybe MutualId -> TerminationCheck () -> Bool -> Bool -> Bool -> [ProblemId] -> AbstractMode -> Relevance -> Bool -> Bool -> Bool -> Range -> Range -> Maybe (Closure Call) -> HighlightingLevel -> HighlightingMethod -> Integer -> Bool -> ExpandHidden -> Maybe QName -> Simplification -> AllowedReductions -> Bool -> Bool -> Bool -> TCEnv
- Agda.TypeChecking.Monad.Base: UnreachableClauses :: QName -> [[Arg Pattern]] -> TypeError
+ Agda.TypeChecking.Monad.Base: UnreachableClauses :: QName -> [[Arg DeBruijnPattern]] -> TypeError
- Agda.TypeChecking.Monad.Base: [stPreFreshInteractionId] :: PreScopeState -> InteractionId
+ Agda.TypeChecking.Monad.Base: [stPreFreshInteractionId] :: PreScopeState -> !InteractionId
- Agda.TypeChecking.Monad.Base: [unReduceM] :: ReduceM a -> Reader ReduceEnv a
+ Agda.TypeChecking.Monad.Base: [unReduceM] :: ReduceM a -> ReduceEnv -> a
- Agda.TypeChecking.Monad.Base: class Enum i => HasFresh i
+ Agda.TypeChecking.Monad.Base: class Enum i => HasFresh i where nextFresh' = succ
- Agda.TypeChecking.Monad.Constraints: wakeConstraints :: (ProblemConstraint -> Bool) -> TCM ()
+ Agda.TypeChecking.Monad.Constraints: wakeConstraints :: (ProblemConstraint -> TCM Bool) -> TCM ()
- Agda.TypeChecking.Monad.Context: getContext :: MonadTCM tcm => tcm [Dom (Name, Type)]
+ Agda.TypeChecking.Monad.Context: getContext :: MonadReader TCEnv m => m [Dom (Name, Type)]
- Agda.TypeChecking.Monad.Context: getContextArgs :: MonadTCM tcm => tcm Args
+ Agda.TypeChecking.Monad.Context: getContextArgs :: (Applicative m, MonadReader TCEnv m) => m Args
- Agda.TypeChecking.Monad.Context: getContextId :: MonadTCM tcm => tcm [CtxId]
+ Agda.TypeChecking.Monad.Context: getContextId :: MonadReader TCEnv m => m [CtxId]
- Agda.TypeChecking.Monad.Context: getContextSize :: MonadTCM tcm => tcm Nat
+ Agda.TypeChecking.Monad.Context: getContextSize :: (Applicative m, MonadReader TCEnv m) => m Nat
- Agda.TypeChecking.Monad.Context: getContextTelescope :: MonadTCM tcm => tcm Telescope
+ Agda.TypeChecking.Monad.Context: getContextTelescope :: (Applicative m, MonadReader TCEnv m) => m Telescope
- Agda.TypeChecking.Monad.Context: getContextTerms :: MonadTCM tcm => tcm [Term]
+ Agda.TypeChecking.Monad.Context: getContextTerms :: (Applicative m, MonadReader TCEnv m) => m [Term]
- Agda.TypeChecking.Monad.Context: getVarInfo :: MonadTCM tcm => Name -> tcm (Term, Dom Type)
+ Agda.TypeChecking.Monad.Context: getVarInfo :: MonadReader TCEnv m => Name -> m (Term, Dom Type)
- Agda.TypeChecking.Monad.Context: lookupBV :: MonadTCM tcm => Nat -> tcm (Dom (Name, Type))
+ Agda.TypeChecking.Monad.Context: lookupBV :: MonadReader TCEnv m => Nat -> m (Dom (Name, Type))
- Agda.TypeChecking.Monad.Context: nameOfBV :: MonadTCM tcm => Nat -> tcm Name
+ Agda.TypeChecking.Monad.Context: nameOfBV :: (Applicative m, MonadReader TCEnv m) => Nat -> m Name
- Agda.TypeChecking.Monad.Context: typeOfBV :: MonadTCM tcm => Nat -> tcm Type
+ Agda.TypeChecking.Monad.Context: typeOfBV :: (Applicative m, MonadReader TCEnv m) => Nat -> m Type
- Agda.TypeChecking.Monad.Context: typeOfBV' :: MonadTCM tcm => Nat -> tcm (Dom Type)
+ Agda.TypeChecking.Monad.Context: typeOfBV' :: (Applicative m, MonadReader TCEnv m) => Nat -> m (Dom Type)
- Agda.TypeChecking.Monad.Context: underAbstraction :: (Subst a, MonadTCM tcm) => Dom Type -> Abs a -> (a -> tcm b) -> tcm b
+ Agda.TypeChecking.Monad.Context: underAbstraction :: (Subst t a, MonadTCM tcm) => Dom Type -> Abs a -> (a -> tcm b) -> tcm b
- Agda.TypeChecking.Monad.Context: underAbstraction_ :: (Subst a, MonadTCM tcm) => Abs a -> (a -> tcm b) -> tcm b
+ Agda.TypeChecking.Monad.Context: underAbstraction_ :: (Subst t a, MonadTCM tcm) => Abs a -> (a -> tcm b) -> tcm b
- Agda.TypeChecking.Monad.Env: currentModule :: TCM ModuleName
+ Agda.TypeChecking.Monad.Env: currentModule :: MonadReader TCEnv m => m ModuleName
- Agda.TypeChecking.Monad.Env: getAnonymousVariables :: ModuleName -> TCM Nat
+ Agda.TypeChecking.Monad.Env: getAnonymousVariables :: MonadReader TCEnv m => ModuleName -> m Nat
- Agda.TypeChecking.Monad.Open: getOpen :: Subst a => Open a -> TCM a
+ Agda.TypeChecking.Monad.Open: getOpen :: (Subst t a, MonadReader TCEnv m) => Open a -> m a
- Agda.TypeChecking.Monad.Open: tryOpen :: Subst a => Open a -> TCM (Maybe a)
+ Agda.TypeChecking.Monad.Open: tryOpen :: (Subst t a, MonadReader TCEnv m) => Open a -> m (Maybe a)
- Agda.TypeChecking.Monad.Options: typeInType :: TCM Bool
+ Agda.TypeChecking.Monad.Options: typeInType :: HasOptions m => m Bool
- Agda.TypeChecking.Monad.Sharing: updateSharedTerm :: MonadTCM tcm => (Term -> tcm Term) -> Term -> tcm Term
+ Agda.TypeChecking.Monad.Sharing: updateSharedTerm :: MonadReader TCEnv m => (Term -> m Term) -> Term -> m Term
- Agda.TypeChecking.Monad.Sharing: updateSharedTermF :: (MonadTCM tcm, Traversable f) => (Term -> tcm (f Term)) -> Term -> tcm (f Term)
+ Agda.TypeChecking.Monad.Sharing: updateSharedTermF :: (MonadReader TCEnv m, Traversable f) => (Term -> m (f Term)) -> Term -> m (f Term)
- Agda.TypeChecking.Monad.Signature: getDefFreeVars :: QName -> TCM Nat
+ Agda.TypeChecking.Monad.Signature: getDefFreeVars :: (Functor m, Applicative m, ReadTCState m, MonadReader TCEnv m) => QName -> m Nat
- Agda.TypeChecking.Monad.Signature: lookupSection :: ModuleName -> TCM Telescope
+ Agda.TypeChecking.Monad.Signature: lookupSection :: (Functor m, ReadTCState m) => ModuleName -> m Telescope
- Agda.TypeChecking.Monad.SizedTypes: isSizeType :: Type -> TCM (Maybe BoundedSize)
+ Agda.TypeChecking.Monad.SizedTypes: isSizeType :: IsSizeType a => a -> TCM (Maybe BoundedSize)
- Agda.TypeChecking.Monad.SizedTypes: isSizeTypeTest :: TCM (Type -> Maybe BoundedSize)
+ Agda.TypeChecking.Monad.SizedTypes: isSizeTypeTest :: TCM (Term -> Maybe BoundedSize)
- Agda.TypeChecking.Positivity: (>+<) :: Occurrences -> Occurrences -> Occurrences
+ Agda.TypeChecking.Positivity: (>+<) :: OccurrencesBuilder -> OccurrencesBuilder -> OccurrencesBuilder
- Agda.TypeChecking.Positivity: ArgNode :: QName -> Nat -> Node
+ Agda.TypeChecking.Positivity: ArgNode :: !QName -> !Nat -> Node
- Agda.TypeChecking.Positivity: ConArgType :: QName -> OccursWhere -> OccursWhere
+ Agda.TypeChecking.Positivity: ConArgType :: QName -> Where
- Agda.TypeChecking.Positivity: DefArg :: QName -> Nat -> OccursWhere -> OccursWhere
+ Agda.TypeChecking.Positivity: DefArg :: QName -> Nat -> Where
- Agda.TypeChecking.Positivity: DefNode :: QName -> Node
+ Agda.TypeChecking.Positivity: DefNode :: !QName -> Node
- Agda.TypeChecking.Positivity: Edge :: Occurrence -> OccursWhere -> Edge
+ Agda.TypeChecking.Positivity: Edge :: !Occurrence -> OccursWhere -> Edge
- Agda.TypeChecking.Positivity: InClause :: Nat -> OccursWhere -> OccursWhere
+ Agda.TypeChecking.Positivity: InClause :: Nat -> Where
- Agda.TypeChecking.Positivity: InDefOf :: QName -> OccursWhere -> OccursWhere
+ Agda.TypeChecking.Positivity: InDefOf :: QName -> Where
- Agda.TypeChecking.Positivity: IndArgType :: QName -> OccursWhere -> OccursWhere
+ Agda.TypeChecking.Positivity: IndArgType :: QName -> Where
- Agda.TypeChecking.Positivity: LeftOfArrow :: OccursWhere -> OccursWhere
+ Agda.TypeChecking.Positivity: LeftOfArrow :: Where
- Agda.TypeChecking.Positivity: Matched :: OccursWhere -> OccursWhere
+ Agda.TypeChecking.Positivity: Matched :: Where
- Agda.TypeChecking.Positivity: MetaArg :: OccursWhere -> OccursWhere
+ Agda.TypeChecking.Positivity: MetaArg :: Where
- Agda.TypeChecking.Positivity: UnderInf :: OccursWhere -> OccursWhere
+ Agda.TypeChecking.Positivity: UnderInf :: Where
- Agda.TypeChecking.Positivity: VarArg :: OccursWhere -> OccursWhere
+ Agda.TypeChecking.Positivity: VarArg :: Where
- Agda.TypeChecking.Positivity: checkStrictlyPositive :: Set QName -> TCM ()
+ Agda.TypeChecking.Positivity: checkStrictlyPositive :: MutualInfo -> Set QName -> TCM ()
- Agda.TypeChecking.Positivity: getOccurrences :: (Show a, PrettyTCM a, ComputeOccurrences a) => [Maybe Item] -> a -> TCM Occurrences
+ Agda.TypeChecking.Positivity: getOccurrences :: (Show a, PrettyTCM a, ComputeOccurrences a) => [Maybe Item] -> a -> TCM OccurrencesBuilder
- Agda.TypeChecking.Positivity: occurrences :: ComputeOccurrences a => a -> OccM Occurrences
+ Agda.TypeChecking.Positivity: occurrences :: ComputeOccurrences a => a -> OccM OccurrencesBuilder
- Agda.TypeChecking.Quote: QuotingKit :: (Term -> ReduceM Term) -> (Type -> ReduceM Term) -> (Clause -> ReduceM Term) -> (Dom Type -> ReduceM Term) -> QuotingKit
+ Agda.TypeChecking.Quote: QuotingKit :: (Term -> ReduceM Term) -> (Type -> ReduceM Term) -> (Clause -> ReduceM Term) -> (Dom Type -> ReduceM Term) -> (Definition -> ReduceM Term) -> (forall a. (a -> ReduceM Term) -> [a] -> ReduceM Term) -> QuotingKit
- Agda.TypeChecking.Reduce.Monad: underAbstraction_ :: Subst a => Abs a -> (a -> ReduceM b) -> ReduceM b
+ Agda.TypeChecking.Reduce.Monad: underAbstraction_ :: Subst t a => Abs a -> (a -> ReduceM b) -> ReduceM b
- Agda.TypeChecking.Rewriting.NonLinMatch: PostponedEquation :: Int -> Term -> Term -> PostponedEquation
+ Agda.TypeChecking.Rewriting.NonLinMatch: PostponedEquation :: Telescope -> Term -> Term -> PostponedEquation
- Agda.TypeChecking.Rewriting.NonLinMatch: [eqFreeVars] :: PostponedEquation -> Int
+ Agda.TypeChecking.Rewriting.NonLinMatch: [eqFreeVars] :: PostponedEquation -> Telescope
- Agda.TypeChecking.Rewriting.NonLinMatch: makeSubstitution :: Sub -> Substitution
+ Agda.TypeChecking.Rewriting.NonLinMatch: makeSubstitution :: Telescope -> Sub -> Substitution
- Agda.TypeChecking.Rewriting.NonLinMatch: match :: Match a b => Int -> a -> b -> NLM ()
+ Agda.TypeChecking.Rewriting.NonLinMatch: match :: Match a b => Telescope -> Telescope -> a -> b -> NLM ()
- Agda.TypeChecking.Rewriting.NonLinMatch: nonLinMatch :: (Match a b) => a -> b -> ReduceM (Either Blocked_ Substitution)
+ Agda.TypeChecking.Rewriting.NonLinMatch: nonLinMatch :: (Match a b) => Telescope -> a -> b -> ReduceM (Either Blocked_ Substitution)
- Agda.TypeChecking.Rewriting.NonLinMatch: tellEq :: Int -> Term -> Term -> NLM ()
+ Agda.TypeChecking.Rewriting.NonLinMatch: tellEq :: Telescope -> Telescope -> Term -> Term -> NLM ()
- Agda.TypeChecking.Rules.Decl: checkMutual :: MutualInfo -> [Declaration] -> TCM (Set QName)
+ Agda.TypeChecking.Rules.Decl: checkMutual :: MutualInfo -> [Declaration] -> TCM (MutualId, Set QName)
- Agda.TypeChecking.Rules.Decl: checkPositivity_ :: Set QName -> TCM ()
+ Agda.TypeChecking.Rules.Decl: checkPositivity_ :: MutualInfo -> Set QName -> TCM ()
- Agda.TypeChecking.Rules.Decl: checkTermination_ :: Declaration -> TCM ()
+ Agda.TypeChecking.Rules.Decl: checkTermination_ :: MutualId -> Declaration -> TCM ()
- Agda.TypeChecking.Rules.Decl: checkUnquoteDecl :: MutualInfo -> DefInfo -> QName -> Expr -> TCM FinalChecks
+ Agda.TypeChecking.Rules.Decl: checkUnquoteDecl :: MutualInfo -> [DefInfo] -> [QName] -> Expr -> TCM FinalChecks
- Agda.TypeChecking.Rules.Decl: mutualChecks :: MutualInfo -> Declaration -> [Declaration] -> Set QName -> TCM ()
+ Agda.TypeChecking.Rules.Decl: mutualChecks :: MutualInfo -> Declaration -> [Declaration] -> MutualId -> Set QName -> TCM ()
- Agda.TypeChecking.Rules.Def: WithFunction :: QName -> QName -> Type -> Telescope -> Telescope -> [Term] -> [Type] -> Type -> [NamedArg Pattern] -> Permutation -> Permutation -> Permutation -> [Clause] -> WithFunctionProblem
+ Agda.TypeChecking.Rules.Def: WithFunction :: QName -> QName -> Type -> Telescope -> Telescope -> [Term] -> [EqualityView] -> Type -> [NamedArg Pattern] -> Permutation -> Permutation -> Permutation -> [Clause] -> WithFunctionProblem
- Agda.TypeChecking.Rules.Def: [wfExprTypes] :: WithFunctionProblem -> [Type]
+ Agda.TypeChecking.Rules.Def: [wfExprTypes] :: WithFunctionProblem -> [EqualityView]
- Agda.TypeChecking.Rules.LHS: noPatternMatchingOnCodata :: [NamedArg Pattern] -> TCM ()
+ Agda.TypeChecking.Rules.LHS: noPatternMatchingOnCodata :: [NamedArg DeBruijnPattern] -> TCM ()
- Agda.TypeChecking.Rules.LHS.Problem: DPI :: Expr -> Term -> (Dom Type) -> DotPatternInst
+ Agda.TypeChecking.Rules.LHS.Problem: DPI :: Maybe Expr -> Term -> Dom Type -> DotPatternInst
- Agda.TypeChecking.Rules.LHS.Problem: Focus :: QName -> ConPOrigin -> [NamedArg Pattern] -> Range -> OneHolePatterns -> Int -> QName -> [Arg Term] -> [Arg Term] -> Type -> Focus
+ Agda.TypeChecking.Rules.LHS.Problem: Focus :: QName -> ConPOrigin -> [NamedArg Pattern] -> Range -> [NamedArg DeBruijnPattern] -> QName -> [Arg Term] -> [Arg Term] -> Type -> Focus
- Agda.TypeChecking.Rules.LHS.Problem: LHSState :: Problem -> Substitution -> [DotPatternInst] -> [AsBinding] -> LHSState
+ Agda.TypeChecking.Rules.LHS.Problem: LHSState :: Problem -> PatternSubstitution -> [DotPatternInst] -> [AsBinding] -> LHSState
- Agda.TypeChecking.Rules.LHS.Problem: LitFocus :: Literal -> OneHolePatterns -> Int -> Type -> Focus
+ Agda.TypeChecking.Rules.LHS.Problem: LitFocus :: Literal -> [NamedArg DeBruijnPattern] -> Type -> Focus
- Agda.TypeChecking.Rules.LHS.Problem: [focusOutPat] :: Focus -> OneHolePatterns
+ Agda.TypeChecking.Rules.LHS.Problem: [focusOutPat] :: Focus -> [NamedArg DeBruijnPattern]
- Agda.TypeChecking.Rules.LHS.Problem: [lhsSubst] :: LHSState -> Substitution
+ Agda.TypeChecking.Rules.LHS.Problem: [lhsSubst] :: LHSState -> PatternSubstitution
- Agda.TypeChecking.Rules.LHS.Problem: type Problem = Problem' (Permutation, [NamedArg Pattern])
+ Agda.TypeChecking.Rules.LHS.Problem: type Problem = Problem' [NamedArg DeBruijnPattern]
- Agda.TypeChecking.Rules.LHS.Unify: type UnificationResult = UnificationResult' Substitution
+ Agda.TypeChecking.Rules.LHS.Unify: type UnificationResult = UnificationResult' (Telescope, PatternSubstitution)
- Agda.TypeChecking.Rules.LHS.Unify: unifyIndices :: MonadTCM tcm => FlexibleVars -> Type -> Args -> Args -> tcm UnificationResult
+ Agda.TypeChecking.Rules.LHS.Unify: unifyIndices :: MonadTCM tcm => Telescope -> FlexibleVars -> Type -> Args -> Args -> tcm UnificationResult
- Agda.TypeChecking.Rules.LHS.Unify: unifyIndices_ :: MonadTCM tcm => FlexibleVars -> Type -> Args -> Args -> tcm Substitution
+ Agda.TypeChecking.Rules.LHS.Unify: unifyIndices_ :: MonadTCM tcm => Telescope -> FlexibleVars -> Type -> Args -> Args -> tcm (Telescope, PatternSubstitution)
- Agda.TypeChecking.Rules.Record: checkRecDef :: DefInfo -> QName -> Maybe (Ranged Induction) -> Maybe QName -> [LamBinding] -> Expr -> [Field] -> TCM ()
+ Agda.TypeChecking.Rules.Record: checkRecDef :: DefInfo -> QName -> Maybe (Ranged Induction) -> Maybe Bool -> Maybe QName -> [LamBinding] -> Expr -> [Field] -> TCM ()
- Agda.TypeChecking.Rules.Term: checkArguments :: ExpandHidden -> ExpandInstances -> Range -> [NamedArg Expr] -> Type -> Type -> ExceptT (Args, [NamedArg Expr], Type) TCM (Args, Type)
+ Agda.TypeChecking.Rules.Term: checkArguments :: ExpandHidden -> Range -> [NamedArg Expr] -> Type -> Type -> ExceptT (Args, [NamedArg Expr], Type) TCM (Args, Type)
- Agda.TypeChecking.Rules.Term: checkArguments' :: ExpandHidden -> ExpandInstances -> Range -> [NamedArg Expr] -> Type -> Type -> (Args -> Type -> TCM Term) -> TCM Term
+ Agda.TypeChecking.Rules.Term: checkArguments' :: ExpandHidden -> Range -> [NamedArg Expr] -> Type -> Type -> (Args -> Type -> TCM Term) -> TCM Term
- Agda.TypeChecking.Rules.Term: checkRecordExpression :: Assigns -> Expr -> Type -> TCM Term
+ Agda.TypeChecking.Rules.Term: checkRecordExpression :: RecordAssigns -> Expr -> Type -> TCM Term
- Agda.TypeChecking.Rules.Term: traceCallE :: Error e => Call -> ExceptT e TCM r -> ExceptT e TCM r
+ Agda.TypeChecking.Rules.Term: traceCallE :: Call -> ExceptT e TCM r -> ExceptT e TCM r
- Agda.TypeChecking.Serialise.Base: Dict :: !(HashTable Node Int32) -> !(HashTable String Int32) -> !(HashTable Integer Int32) -> !(HashTable Double Int32) -> !(HashTable (Ptr Term) Int32) -> !(HashTable NameId Int32) -> !(HashTable QNameId Int32) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(HashTable String Int) -> Bool -> !(HashTable AbsolutePath Int32) -> Dict
+ Agda.TypeChecking.Serialise.Base: Dict :: !(HashTable Node Int32) -> !(HashTable String Int32) -> !(HashTable ByteString Int32) -> !(HashTable Integer Int32) -> !(HashTable Double Int32) -> !(HashTable (Ptr Term) Int32) -> !(HashTable NameId Int32) -> !(HashTable QNameId Int32) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(HashTable String Int) -> Bool -> !(HashTable AbsolutePath Int32) -> Dict
- Agda.TypeChecking.Serialise.Base: St :: !(Array Int32 Node) -> !(Array Int32 String) -> !(Array Int32 Integer) -> !(Array Int32 Double) -> !Memo -> !ModuleToSource -> [AbsolutePath] -> St
+ Agda.TypeChecking.Serialise.Base: St :: !(Array Int32 Node) -> !(Array Int32 String) -> !(Array Int32 ByteString) -> !(Array Int32 Integer) -> !(Array Int32 Double) -> !Memo -> !ModuleToSource -> [AbsolutePath] -> (Term -> Term) -> St
- Agda.TypeChecking.Serialise.Base: icodeMemo :: (Eq a, Ord a, Hashable a) => (Dict -> HashTable a Int32) -> (Dict -> IORef FreshAndReuse) -> a -> S Int32 -> S Int32
+ Agda.TypeChecking.Serialise.Base: icodeMemo :: (Ord a, Hashable a) => (Dict -> HashTable a Int32) -> (Dict -> IORef FreshAndReuse) -> a -> S Int32 -> S Int32
- Agda.TypeChecking.SizedTypes: Leq :: SizeExpr -> Int -> SizeExpr -> SizeConstraint
+ Agda.TypeChecking.SizedTypes: Leq :: OldSizeExpr -> Int -> OldSizeExpr -> OldSizeConstraint
- Agda.TypeChecking.SizedTypes: Rigid :: Int -> SizeExpr
+ Agda.TypeChecking.SizedTypes: Rigid :: Int -> OldSizeExpr
- Agda.TypeChecking.SizedTypes: SizeMeta :: MetaId -> [Int] -> SizeExpr
+ Agda.TypeChecking.SizedTypes: SizeMeta :: MetaId -> [Int] -> OldSizeExpr
- Agda.TypeChecking.SizedTypes: checkSizeLtSat :: Type -> TCM ()
+ Agda.TypeChecking.SizedTypes: checkSizeLtSat :: Term -> TCM ()
- Agda.TypeChecking.SizedTypes: flexibleVariables :: SizeConstraint -> [(MetaId, [Int])]
+ Agda.TypeChecking.SizedTypes: flexibleVariables :: OldSizeConstraint -> [(MetaId, [Int])]
- Agda.TypeChecking.SizedTypes: oldSolver :: [(MetaId, Int)] -> [SizeConstraint] -> TCM Bool
+ Agda.TypeChecking.SizedTypes: oldSolver :: [(MetaId, Int)] -> [OldSizeConstraint] -> TCM Bool
- Agda.TypeChecking.SizedTypes.Solve: solveSizeConstraints :: TCM ()
+ Agda.TypeChecking.SizedTypes.Solve: solveSizeConstraints :: DefaultToInfty -> TCM ()
- Agda.TypeChecking.SizedTypes.Syntax: simplify1 :: Eq r => CTrans r f -> CTrans r f
+ Agda.TypeChecking.SizedTypes.Syntax: simplify1 :: (Show f, Show r, Eq r) => CTrans r f -> CTrans r f
- Agda.TypeChecking.SizedTypes.Syntax: type CTrans r f = Constraint' r f -> Maybe [Constraint' r f]
+ Agda.TypeChecking.SizedTypes.Syntax: type CTrans r f = Constraint' r f -> Either String [Constraint' r f]
- Agda.TypeChecking.SizedTypes.WarshallSolver: commonPreds :: (Ord r, Ord f, Dioid a) => Graph r f a -> [Node r f] -> Map (Node r f) [Edge' r f a]
+ Agda.TypeChecking.SizedTypes.WarshallSolver: commonPreds :: (Ord r, Ord f) => Graph r f a -> [Node r f] -> Map (Node r f) [Edge' r f a]
- Agda.TypeChecking.SizedTypes.WarshallSolver: commonSuccs :: (Ord r, Ord f, Dioid a) => Graph r f a -> [Node r f] -> Map (Node r f) [Edge' r f a]
+ Agda.TypeChecking.SizedTypes.WarshallSolver: commonSuccs :: (Ord r, Ord f) => Graph r f a -> [Node r f] -> Map (Node r f) [Edge' r f a]
- Agda.TypeChecking.SizedTypes.WarshallSolver: constraintGraph :: (Ord r, Ord f, Show r, Show f) => [Constraint' r f] -> HypGraph r f -> Maybe (ConGraph r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: constraintGraph :: (Ord r, Ord f, Show r, Show f) => [Constraint' r f] -> HypGraph r f -> Either String (ConGraph r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: constraintGraphs :: (Ord r, Ord f, Show r, Show f) => [Constraint' r f] -> HypGraph r f -> Maybe ([f], ConGraphs r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: constraintGraphs :: (Ord r, Ord f, Show r, Show f) => [Constraint' r f] -> HypGraph r f -> Either String ([f], ConGraphs r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: edgeToLowerBound :: (Ord r, Ord f) => LabelledEdge r f -> Maybe (f, SizeExpr' r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: edgeToLowerBound :: LabelledEdge r f -> Maybe (f, SizeExpr' r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: edgeToUpperBound :: (Ord r, Ord f) => LabelledEdge r f -> Maybe (f, Cmp, SizeExpr' r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: edgeToUpperBound :: LabelledEdge r f -> Maybe (f, Cmp, SizeExpr' r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: findRigidBelow :: (Ord r, Ord f, Show r, Show f) => HypGraph r f -> (SizeExpr' r f) -> Maybe (SizeExpr' r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: findRigidBelow :: (Ord r, Ord f) => HypGraph r f -> (SizeExpr' r f) -> Maybe (SizeExpr' r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: graphToList :: (Ord s, Ord t) => Graph s t e -> [Edge s t e]
+ Agda.TypeChecking.SizedTypes.WarshallSolver: graphToList :: Graph s t e -> [Edge s t e]
- Agda.TypeChecking.SizedTypes.WarshallSolver: hypGraph :: (Ord rigid, Ord flex) => Set rigid -> [Hyp' rigid flex] -> Maybe (HypGraph rigid flex)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: hypGraph :: (Ord rigid, Ord flex, Show rigid, Show flex) => Set rigid -> [Hyp' rigid flex] -> Either String (HypGraph rigid flex)
- Agda.TypeChecking.SizedTypes.WarshallSolver: reflClos :: (Ord r, Ord f, Show a, Dioid a) => Set (Node r f) -> Graph r f a -> Graph r f a
+ Agda.TypeChecking.SizedTypes.WarshallSolver: reflClos :: (Ord r, Ord f, Dioid a) => Set (Node r f) -> Graph r f a -> Graph r f a
- Agda.TypeChecking.SizedTypes.WarshallSolver: simplifyWithHypotheses :: (Ord rigid, Ord flex) => HypGraph rigid flex -> [Constraint' rigid flex] -> Maybe [Constraint' rigid flex]
+ Agda.TypeChecking.SizedTypes.WarshallSolver: simplifyWithHypotheses :: (Ord rigid, Ord flex, Show rigid, Show flex) => HypGraph rigid flex -> [Constraint' rigid flex] -> Either String [Constraint' rigid flex]
- Agda.TypeChecking.Substitute: (++#) :: [Term] -> Substitution -> Substitution
+ Agda.TypeChecking.Substitute: (++#) :: DeBruijn a => [a] -> Substitution' a -> Substitution' a
- Agda.TypeChecking.Substitute: (:#) :: Term -> Substitution -> Substitution
+ Agda.TypeChecking.Substitute: (:#) :: a -> Substitution' a -> Substitution' a
- Agda.TypeChecking.Substitute: EmptyS :: Substitution
+ Agda.TypeChecking.Substitute: EmptyS :: Substitution' a
- Agda.TypeChecking.Substitute: IdS :: Substitution
+ Agda.TypeChecking.Substitute: IdS :: Substitution' a
- Agda.TypeChecking.Substitute: Lift :: !Int -> Substitution -> Substitution
+ Agda.TypeChecking.Substitute: Lift :: !Int -> (Substitution' a) -> Substitution' a
- Agda.TypeChecking.Substitute: Strengthen :: Empty -> Substitution -> Substitution
+ Agda.TypeChecking.Substitute: Strengthen :: Empty -> (Substitution' a) -> Substitution' a
- Agda.TypeChecking.Substitute: Wk :: !Int -> Substitution -> Substitution
+ Agda.TypeChecking.Substitute: Wk :: !Int -> (Substitution' a) -> Substitution' a
- Agda.TypeChecking.Substitute: absApp :: Subst t => Abs t -> Term -> t
+ Agda.TypeChecking.Substitute: absApp :: Subst t a => Abs a -> t -> a
- Agda.TypeChecking.Substitute: absBody :: Subst t => Abs t -> t
+ Agda.TypeChecking.Substitute: absBody :: Subst t a => Abs a -> a
- Agda.TypeChecking.Substitute: applySubst :: Subst t => Substitution -> t -> t
+ Agda.TypeChecking.Substitute: applySubst :: Subst t a => Substitution' t -> a -> a
- Agda.TypeChecking.Substitute: argToDontCare :: Arg c Term -> Term
+ Agda.TypeChecking.Substitute: argToDontCare :: Arg Term -> Term
- Agda.TypeChecking.Substitute: class Subst t
+ Agda.TypeChecking.Substitute: class DeBruijn t => Subst t a | a -> t
- Agda.TypeChecking.Substitute: compactS :: Empty -> [Maybe Term] -> Substitution
+ Agda.TypeChecking.Substitute: compactS :: DeBruijn a => Empty -> [Maybe a] -> Substitution' a
- Agda.TypeChecking.Substitute: composeS :: Substitution -> Substitution -> Substitution
+ Agda.TypeChecking.Substitute: composeS :: Subst a a => Substitution' a -> Substitution' a -> Substitution' a
- Agda.TypeChecking.Substitute: consS :: Term -> Substitution -> Substitution
+ Agda.TypeChecking.Substitute: consS :: DeBruijn a => a -> Substitution' a -> Substitution' a
- Agda.TypeChecking.Substitute: dropS :: Int -> Substitution -> Substitution
+ Agda.TypeChecking.Substitute: dropS :: Int -> Substitution' a -> Substitution' a
- Agda.TypeChecking.Substitute: idS :: Substitution
+ Agda.TypeChecking.Substitute: idS :: Substitution' a
- Agda.TypeChecking.Substitute: lazyAbsApp :: Subst t => Abs t -> Term -> t
+ Agda.TypeChecking.Substitute: lazyAbsApp :: Subst t a => Abs a -> t -> a
- Agda.TypeChecking.Substitute: liftS :: Int -> Substitution -> Substitution
+ Agda.TypeChecking.Substitute: liftS :: Int -> Substitution' a -> Substitution' a
- Agda.TypeChecking.Substitute: lookupS :: Substitution -> Nat -> Term
+ Agda.TypeChecking.Substitute: lookupS :: Subst a a => Substitution' a -> Nat -> a
- Agda.TypeChecking.Substitute: mkAbs :: (Subst a, Free a) => ArgName -> a -> Abs a
+ Agda.TypeChecking.Substitute: mkAbs :: (Subst t a, Free a) => ArgName -> a -> Abs a
- Agda.TypeChecking.Substitute: namedTelVars :: Telescope -> [NamedArg Pattern]
+ Agda.TypeChecking.Substitute: namedTelVars :: Int -> Telescope -> [NamedArg DeBruijnPattern]
- Agda.TypeChecking.Substitute: noabsApp :: Subst t => Empty -> Abs t -> t
+ Agda.TypeChecking.Substitute: noabsApp :: Subst t a => Empty -> Abs a -> a
- Agda.TypeChecking.Substitute: parallelS :: [Term] -> Substitution
+ Agda.TypeChecking.Substitute: parallelS :: DeBruijn a => [a] -> Substitution' a
- Agda.TypeChecking.Substitute: prependS :: Empty -> [Maybe Term] -> Substitution -> Substitution
+ Agda.TypeChecking.Substitute: prependS :: DeBruijn a => Empty -> [Maybe a] -> Substitution' a -> Substitution' a
- Agda.TypeChecking.Substitute: raise :: Subst t => Nat -> t -> t
+ Agda.TypeChecking.Substitute: raise :: Subst t a => Nat -> a -> a
- Agda.TypeChecking.Substitute: raiseFrom :: Subst t => Nat -> Nat -> t -> t
+ Agda.TypeChecking.Substitute: raiseFrom :: Subst t a => Nat -> Nat -> a -> a
- Agda.TypeChecking.Substitute: raiseS :: Int -> Substitution
+ Agda.TypeChecking.Substitute: raiseS :: Int -> Substitution' a
- Agda.TypeChecking.Substitute: reAbs :: (Subst a, Free a) => Abs a -> Abs a
+ Agda.TypeChecking.Substitute: reAbs :: (Subst t a, Free a) => Abs a -> Abs a
- Agda.TypeChecking.Substitute: singletonS :: Int -> Term -> Substitution
+ Agda.TypeChecking.Substitute: singletonS :: DeBruijn a => Int -> a -> Substitution' a
- Agda.TypeChecking.Substitute: splitS :: Int -> Substitution -> (Substitution, Substitution)
+ Agda.TypeChecking.Substitute: splitS :: Int -> Substitution' a -> (Substitution' a, Substitution' a)
- Agda.TypeChecking.Substitute: strengthen :: Subst t => Empty -> t -> t
+ Agda.TypeChecking.Substitute: strengthen :: Subst t a => Empty -> a -> a
- Agda.TypeChecking.Substitute: strengthenS :: Empty -> Int -> Substitution
+ Agda.TypeChecking.Substitute: strengthenS :: Empty -> Int -> Substitution' a
- Agda.TypeChecking.Substitute: subst :: Subst t => Int -> Term -> t -> t
+ Agda.TypeChecking.Substitute: subst :: Subst t a => Int -> t -> a -> a
- Agda.TypeChecking.Substitute: substUnder :: Subst t => Nat -> Term -> t -> t
+ Agda.TypeChecking.Substitute: substUnder :: Subst t a => Nat -> t -> a -> a
- Agda.TypeChecking.Substitute: telVars :: Telescope -> [Arg Pattern]
+ Agda.TypeChecking.Substitute: telVars :: Int -> Telescope -> [Arg DeBruijnPattern]
- Agda.TypeChecking.Substitute: underAbs :: Subst a => (a -> b -> b) -> a -> Abs b -> Abs b
+ Agda.TypeChecking.Substitute: underAbs :: Subst t a => (a -> b -> b) -> a -> Abs b -> Abs b
- Agda.TypeChecking.Substitute: underLambdas :: Subst a => Int -> (a -> Term -> Term) -> a -> Term -> Term
+ Agda.TypeChecking.Substitute: underLambdas :: Subst Term a => Int -> (a -> Term -> Term) -> a -> Term -> Term
- Agda.TypeChecking.Substitute: wkS :: Int -> Substitution -> Substitution
+ Agda.TypeChecking.Substitute: wkS :: Int -> Substitution' a -> Substitution' a
- Agda.TypeChecking.SyntacticEquality: checkSyntacticEquality :: (SynEq a) => a -> a -> TCM ((a, a), Bool)
+ Agda.TypeChecking.SyntacticEquality: checkSyntacticEquality :: (SynEq a) => a -> a -> ReduceM ((a, a), Bool)
- Agda.TypeChecking.Telescope: renameP :: Subst t => Permutation -> t -> t
+ Agda.TypeChecking.Telescope: renameP :: Subst t a => Permutation -> a -> a
- Agda.TypeChecking.Telescope: renaming :: Permutation -> Substitution
+ Agda.TypeChecking.Telescope: renaming :: DeBruijn a => Permutation -> Substitution' a
- Agda.TypeChecking.Telescope: renamingR :: Permutation -> Substitution
+ Agda.TypeChecking.Telescope: renamingR :: DeBruijn a => Permutation -> Substitution' a
- Agda.TypeChecking.Telescope: teleArgs :: Telescope -> Args
+ Agda.TypeChecking.Telescope: teleArgs :: (DeBruijn a) => Telescope -> [Arg a]
- Agda.TypeChecking.Unquote: runUnquoteM :: UnquoteM a -> TCM (Either UnquoteError a)
+ Agda.TypeChecking.Unquote: runUnquoteM :: UnquoteM a -> TCM (Either UnquoteError (a, [QName]))
- Agda.TypeChecking.Unquote: type UnquoteM = ExceptionT UnquoteError TCM
+ Agda.TypeChecking.Unquote: type UnquoteM = ReaderT Context (StateT UnquoteState (WriterT [QName] (ExceptionT UnquoteError TCM)))
- Agda.TypeChecking.With: splitTelForWith :: Telescope -> Type -> [Type] -> [Term] -> (Telescope, Telescope, Permutation, Type, [Type], [Term])
+ Agda.TypeChecking.With: splitTelForWith :: Telescope -> Type -> [EqualityView] -> [Term] -> (Telescope, Telescope, Permutation, Type, [EqualityView], [Term])
- Agda.TypeChecking.With: withFunctionType :: Telescope -> [Term] -> [Type] -> Telescope -> Type -> TCM Type
+ Agda.TypeChecking.With: withFunctionType :: Telescope -> [Term] -> [EqualityView] -> Telescope -> Type -> TCM (Type, Nat)
- Agda.Utils.AssocList: mapWithKeyM :: (Functor m, Applicative m) => (k -> v -> m v) -> AssocList k v -> m (AssocList k v)
+ Agda.Utils.AssocList: mapWithKeyM :: Applicative m => (k -> v -> m v) -> AssocList k v -> m (AssocList k v)
- Agda.Utils.Bag: map :: (Ord a, Ord b) => (a -> b) -> Bag a -> Bag b
+ Agda.Utils.Bag: map :: Ord b => (a -> b) -> Bag a -> Bag b
- Agda.Utils.Bag: prop_map_compose :: (Ord a, Ord b, Ord c) => (b -> c) -> (a -> b) -> Bag a -> Bool
+ Agda.Utils.Bag: prop_map_compose :: (Ord b, Ord c) => (b -> c) -> (a -> b) -> Bag a -> Bool
- Agda.Utils.BiMap: empty :: (Ord a, Ord b) => BiMap a b
+ Agda.Utils.BiMap: empty :: BiMap a b
- Agda.Utils.BiMap: invLookup :: (Ord a, Ord b) => b -> BiMap a b -> Maybe a
+ Agda.Utils.BiMap: invLookup :: Ord b => b -> BiMap a b -> Maybe a
- Agda.Utils.BiMap: lookup :: (Ord a, Ord b) => a -> BiMap a b -> Maybe b
+ Agda.Utils.BiMap: lookup :: Ord a => a -> BiMap a b -> Maybe b
- Agda.Utils.BiMap: singleton :: (Ord a, Ord b) => a -> b -> BiMap a b
+ Agda.Utils.BiMap: singleton :: a -> b -> BiMap a b
- Agda.Utils.BiMap: toList :: (Ord a, Ord b) => BiMap a b -> [(a, b)]
+ Agda.Utils.BiMap: toList :: BiMap a b -> [(a, b)]
- Agda.Utils.Favorites: insertCompared :: PartialOrd a => a -> Favorites a -> CompareResult a -> Favorites a
+ Agda.Utils.Favorites: insertCompared :: a -> Favorites a -> CompareResult a -> Favorites a
- Agda.Utils.Favorites: unionCompared :: PartialOrd a => (Favorites a, Favorites a) -> Favorites a
+ Agda.Utils.Favorites: unionCompared :: (Favorites a, Favorites a) -> Favorites a
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: clean :: (Ord s, Ord t, Null e) => Graph s t e -> Graph s t e
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: clean :: Null e => Graph s t e -> Graph s t e
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: composeWith :: (Ord s, Ord t, Ord u) => (c -> d -> e) -> (e -> e -> e) -> Graph s t c -> Graph t u d -> Graph s u e
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: composeWith :: (Ord t, Ord u) => (c -> d -> e) -> (e -> e -> e) -> Graph s t c -> Graph t u d -> Graph s u e
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: edges :: (Ord s, Ord t) => Graph s t e -> [Edge s t e]
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: edges :: Graph s t e -> [Edge s t e]
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: edgesFrom :: (Ord s, Ord t) => Graph s t e -> [s] -> [Edge s t e]
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: edgesFrom :: Ord s => Graph s t e -> [s] -> [Edge s t e]
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: edgesTo :: (Ord s, Ord t) => Graph s t e -> [t] -> [Edge s t e]
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: edgesTo :: Ord t => Graph s t e -> [t] -> [Edge s t e]
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: filterEdges :: (Ord s, Ord t) => (e -> Bool) -> Graph s t e -> Graph s t e
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: filterEdges :: (e -> Bool) -> Graph s t e -> Graph s t e
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: gaussJordanFloydWarshallMcNaughtonYamada :: (Ord n, Eq e, StarSemiRing e) => Graph n n e -> Graph n n e
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: gaussJordanFloydWarshallMcNaughtonYamada :: (Ord n, Eq e, StarSemiRing e) => Graph n n e -> (Graph n n e, [SCC n])
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: mapWithEdge :: (Ord s, Ord t) => (Edge s t e -> e') -> Graph s t e -> Graph s t e'
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: mapWithEdge :: (Edge s t e -> e') -> Graph s t e -> Graph s t e'
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: neighbours :: (Ord s, Ord t) => s -> Graph s t e -> [(t, e)]
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: neighbours :: Ord s => s -> Graph s t e -> [(t, e)]
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: neighboursMap :: (Ord s, Ord t) => s -> Graph s t e -> Map t e
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: neighboursMap :: Ord s => s -> Graph s t e -> Map t e
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: singleton :: (Ord s, Ord t) => s -> t -> e -> Graph s t e
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: singleton :: s -> t -> e -> Graph s t e
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: sourceNodes :: (Ord s, Ord t) => Graph s t e -> Set s
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: sourceNodes :: Graph s t e -> Set s
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: targetNodes :: (Ord s, Ord t) => Graph s t e -> Set t
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: targetNodes :: Ord t => Graph s t e -> Set t
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: toList :: (Ord s, Ord t) => Graph s t e -> [Edge s t e]
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: toList :: Graph s t e -> [Edge s t e]
- Agda.Utils.Lens: (%%=) :: (MonadState o m, Functor m) => Lens' i o -> (i -> m (i, r)) -> m r
+ Agda.Utils.Lens: (%%=) :: MonadState o m => Lens' i o -> (i -> m (i, r)) -> m r
- Agda.Utils.Lens: (%==) :: (MonadState o m, Functor m) => Lens' i o -> (i -> m i) -> m ()
+ Agda.Utils.Lens: (%==) :: MonadState o m => Lens' i o -> (i -> m i) -> m ()
- Agda.Utils.Map: filterKeys :: Ord k => (k -> Bool) -> Map k a -> Map k a
+ Agda.Utils.Map: filterKeys :: (k -> Bool) -> Map k a -> Map k a
- Agda.Utils.Map: unionWithM :: (Ord k, Functor m, Monad m) => (a -> a -> m a) -> Map k a -> Map k a -> m (Map k a)
+ Agda.Utils.Map: unionWithM :: (Ord k, Monad m) => (a -> a -> m a) -> Map k a -> Map k a -> m (Map k a)
- Agda.Utils.Monad: andM :: Monad m => [m Bool] -> m Bool
+ Agda.Utils.Monad: andM :: (Foldable f, Monad m) => f (m Bool) -> m Bool
- Agda.Utils.Monad: finally :: (Error e, MonadError e m) => m a -> m b -> m a
+ Agda.Utils.Monad: finally :: MonadError e m => m a -> m b -> m a
- Agda.Utils.Monad: forMaybeM :: (Monad m, Functor m) => [a] -> (a -> m (Maybe b)) -> m [b]
+ Agda.Utils.Monad: forMaybeM :: Monad m => [a] -> (a -> m (Maybe b)) -> m [b]
- Agda.Utils.Monad: mapMaybeM :: (Monad m, Functor m) => (a -> m (Maybe b)) -> [a] -> m [b]
+ Agda.Utils.Monad: mapMaybeM :: Monad m => (a -> m (Maybe b)) -> [a] -> m [b]
- Agda.Utils.Monad: orM :: Monad m => [m Bool] -> m Bool
+ Agda.Utils.Monad: orM :: (Foldable f, Monad m) => f (m Bool) -> m Bool
- Agda.Utils.TestHelpers: associative :: (Arbitrary a, Eq a, Show a) => (a -> a -> a) -> a -> a -> a -> Bool
+ Agda.Utils.TestHelpers: associative :: Eq a => (a -> a -> a) -> a -> a -> a -> Bool
- Agda.Utils.TestHelpers: commutative :: (Arbitrary a, Eq a, Show a) => (a -> a -> a) -> a -> a -> Bool
+ Agda.Utils.TestHelpers: commutative :: Eq a => (a -> a -> a) -> a -> a -> Bool
- Agda.Utils.TestHelpers: distributive :: (Arbitrary a, Eq a, Show a) => (a -> a -> a) -> (a -> a -> a) -> a -> a -> a -> Bool
+ Agda.Utils.TestHelpers: distributive :: Eq a => (a -> a -> a) -> (a -> a -> a) -> a -> a -> a -> Bool
- Agda.Utils.TestHelpers: idempotent :: (Arbitrary a, Eq a, Show a) => (a -> a -> a) -> a -> Bool
+ Agda.Utils.TestHelpers: idempotent :: Eq a => (a -> a -> a) -> a -> Bool
- Agda.Utils.TestHelpers: identity :: (Arbitrary a, Eq a, Show a) => a -> (a -> a -> a) -> a -> Bool
+ Agda.Utils.TestHelpers: identity :: Eq a => a -> (a -> a -> a) -> a -> Bool
- Agda.Utils.TestHelpers: isZero :: (Arbitrary a, Eq a, Show a) => a -> (a -> a -> a) -> a -> Bool
+ Agda.Utils.TestHelpers: isZero :: Eq a => a -> (a -> a -> a) -> a -> Bool
- Agda.Utils.TestHelpers: leftDistributive :: (Arbitrary a, Eq a, Show a) => (a -> a -> a) -> (a -> a -> a) -> a -> a -> a -> Bool
+ Agda.Utils.TestHelpers: leftDistributive :: Eq a => (a -> a -> a) -> (a -> a -> a) -> a -> a -> a -> Bool
- Agda.Utils.TestHelpers: rightDistributive :: (Arbitrary a, Eq a, Show a) => (a -> a -> a) -> (a -> a -> a) -> a -> a -> a -> Bool
+ Agda.Utils.TestHelpers: rightDistributive :: Eq a => (a -> a -> a) -> (a -> a -> a) -> a -> a -> a -> Bool
- Agda.Utils.Warshall: edges :: Ord n => AdjList n e -> [(n, n, e)]
+ Agda.Utils.Warshall: edges :: AdjList n e -> [(n, n, e)]
- Agda.Utils.Warshall: mapNodes :: (Ord node, Ord node') => (node -> node') -> AdjList node edge -> AdjList node' edge
+ Agda.Utils.Warshall: mapNodes :: Ord node' => (node -> node') -> AdjList node edge -> AdjList node' edge
Files
- Agda.cabal +135/−34
- CHANGELOG +6324/−4930
- LICENSE +4/−3
- README.md +7/−3
- Setup.hs +27/−8
- dist/build/Agda/Syntax/Parser/Lexer.hs +109/−96
- dist/build/Agda/Syntax/Parser/Parser.hs +6308/−5616
- src/agda-ghc-names/ExtractNames.hs +152/−0
- src/agda-ghc-names/Find.hs +50/−0
- src/agda-ghc-names/FixProf.hs +118/−0
- src/agda-ghc-names/ResolveHsNames.hs +82/−0
- src/agda-ghc-names/agda-ghc-names.hs +49/−0
- src/data/MAlonzo/src/MAlonzo/RTE.hs +28/−0
- src/data/agda.sty +25/−8
- src/data/emacs-mode/agda2-highlight.el +14/−7
- src/data/emacs-mode/agda2-mode.el +211/−126
- src/data/emacs-mode/annotation.el +23/−9
- src/data/lib/prim/Agda/Builtin/Bool.agda +16/−0
- src/data/lib/prim/Agda/Builtin/Char.agda +16/−0
- src/data/lib/prim/Agda/Builtin/Coinduction.agda +13/−0
- src/data/lib/prim/Agda/Builtin/Equality.agda +9/−0
- src/data/lib/prim/Agda/Builtin/Float.agda +27/−0
- src/data/lib/prim/Agda/Builtin/FromNat.agda +15/−0
- src/data/lib/prim/Agda/Builtin/FromNeg.agda +15/−0
- src/data/lib/prim/Agda/Builtin/FromString.agda +15/−0
- src/data/lib/prim/Agda/Builtin/IO.agda +9/−0
- src/data/lib/prim/Agda/Builtin/Int.agda +17/−0
- src/data/lib/prim/Agda/Builtin/List.agda +17/−0
- src/data/lib/prim/Agda/Builtin/Nat.agda +61/−0
- src/data/lib/prim/Agda/Builtin/Reflection.agda +231/−0
- src/data/lib/prim/Agda/Builtin/Size.agda +9/−0
- src/data/lib/prim/Agda/Builtin/Strict.agda +8/−0
- src/data/lib/prim/Agda/Builtin/String.agda +17/−0
- src/data/lib/prim/Agda/Builtin/TrustMe.agda +6/−0
- src/data/lib/prim/Agda/Builtin/Unit.agda +8/−0
- src/data/lib/prim/Agda/Primitive.agda +0/−4
- src/data/uhc-agda-base/LICENSE +0/−0
- src/data/uhc-agda-base/src/UHC/Agda/Builtins.hs +423/−0
- src/data/uhc-agda-base/uhc-agda-base.cabal +25/−0
- src/full/Agda/Auto/Auto.hs +5/−3
- src/full/Agda/Auto/CaseSplit.hs +2/−2
- src/full/Agda/Auto/Convert.hs +16/−16
- src/full/Agda/Auto/NarrowingSearch.hs +7/−7
- src/full/Agda/Auto/SearchControl.hs +3/−3
- src/full/Agda/Auto/Typecheck.hs +3/−3
- src/full/Agda/Benchmarking.hs +6/−1
- src/full/Agda/Compiler/CallCompiler.hs +11/−6
- src/full/Agda/Compiler/Common.hs +177/−0
- src/full/Agda/Compiler/Epic/Compiler.hs +1/−1
- src/full/Agda/Compiler/Epic/Erasure.hs +21/−9
- src/full/Agda/Compiler/Epic/ForceConstrs.hs +4/−4
- src/full/Agda/Compiler/Epic/Forcing.hs +9/−8
- src/full/Agda/Compiler/Epic/FromAgda.hs +4/−5
- src/full/Agda/Compiler/Epic/Injection.hs +8/−12
- src/full/Agda/Compiler/Epic/NatDetection.hs +2/−2
- src/full/Agda/Compiler/Epic/Primitive.hs +4/−3
- src/full/Agda/Compiler/Epic/Smashing.hs +4/−4
- src/full/Agda/Compiler/Epic/Static.hs +3/−3
- src/full/Agda/Compiler/HaskellTypes.hs +0/−24
- src/full/Agda/Compiler/JS/Compiler.hs +14/−28
- src/full/Agda/Compiler/JS/Parser.hs +1/−1
- src/full/Agda/Compiler/MAlonzo/Compiler.hs +233/−371
- src/full/Agda/Compiler/MAlonzo/Compiler.hs-boot +2/−2
- src/full/Agda/Compiler/MAlonzo/Encode.hs +31/−14
- src/full/Agda/Compiler/MAlonzo/Misc.hs +74/−65
- src/full/Agda/Compiler/MAlonzo/Primitives.hs +64/−137
- src/full/Agda/Compiler/ToTreeless.hs +349/−0
- src/full/Agda/Compiler/Treeless/Builtin.hs +186/−0
- src/full/Agda/Compiler/Treeless/Compare.hs +52/−0
- src/full/Agda/Compiler/Treeless/Erase.hs +213/−0
- src/full/Agda/Compiler/Treeless/GuardsToPrims.hs +60/−0
- src/full/Agda/Compiler/Treeless/NormalizeNames.hs +48/−0
- src/full/Agda/Compiler/Treeless/Pretty.hs +152/−0
- src/full/Agda/Compiler/Treeless/Simplify.hs +355/−0
- src/full/Agda/Compiler/Treeless/Subst.hs +124/−0
- src/full/Agda/Compiler/Treeless/Uncase.hs +69/−0
- src/full/Agda/Compiler/Treeless/Unused.hs +78/−0
- src/full/Agda/Compiler/UHC/Bridge.hs +294/−0
- src/full/Agda/Compiler/UHC/CompileState.hs +247/−0
- src/full/Agda/Compiler/UHC/Compiler.hs +209/−0
- src/full/Agda/Compiler/UHC/FromAgda.hs +374/−0
- src/full/Agda/Compiler/UHC/MagicTypes.hs +59/−0
- src/full/Agda/Compiler/UHC/Pragmas/Base.hs +58/−0
- src/full/Agda/Compiler/UHC/Pragmas/Parse.hs +103/−0
- src/full/Agda/Compiler/UHC/Primitives.hs +108/−0
- src/full/Agda/Compiler/UHC/Smashing.hs +164/−0
- src/full/Agda/Interaction/BasicOps.hs +139/−61
- src/full/Agda/Interaction/EmacsCommand.hs +10/−2
- src/full/Agda/Interaction/EmacsTop.hs +23/−10
- src/full/Agda/Interaction/FindFile.hs +0/−2
- src/full/Agda/Interaction/Highlighting/Emacs.hs +5/−1
- src/full/Agda/Interaction/Highlighting/Generate.hs +66/−43
- src/full/Agda/Interaction/Highlighting/HTML.hs +0/−2
- src/full/Agda/Interaction/Highlighting/LaTeX.hs +27/−23
- src/full/Agda/Interaction/Highlighting/Precise.hs +19/−3
- src/full/Agda/Interaction/Highlighting/Range.hs +9/−1
- src/full/Agda/Interaction/Imports.hs +72/−24
- src/full/Agda/Interaction/InteractionTop.hs +155/−124
- src/full/Agda/Interaction/Library.hs +198/−0
- src/full/Agda/Interaction/Library/Base.hs +13/−0
- src/full/Agda/Interaction/Library/Parse.hs +131/−0
- src/full/Agda/Interaction/MakeCase.hs +22/−12
- src/full/Agda/Interaction/Options.hs +201/−84
- src/full/Agda/Interaction/Options/Lenses.hs +38/−19
- src/full/Agda/Interaction/Response.hs +2/−0
- src/full/Agda/Interaction/SearchAbout.hs +74/−0
- src/full/Agda/Main.hs +29/−26
- src/full/Agda/Syntax/Abstract.hs +213/−111
- src/full/Agda/Syntax/Abstract/Copatterns.hs +37/−23
- src/full/Agda/Syntax/Abstract/Name.hs +25/−4
- src/full/Agda/Syntax/Abstract/Views.hs +149/−64
- src/full/Agda/Syntax/Common.hs +290/−107
- src/full/Agda/Syntax/Concrete.hs +431/−225
- src/full/Agda/Syntax/Concrete/Definitions.hs +487/−279
- src/full/Agda/Syntax/Concrete/Generic.hs +48/−8
- src/full/Agda/Syntax/Concrete/Name.hs +43/−10
- src/full/Agda/Syntax/Concrete/Operators.hs +423/−116
- src/full/Agda/Syntax/Concrete/Operators/Parser.hs +223/−104
- src/full/Agda/Syntax/Concrete/Pretty.hs +112/−60
- src/full/Agda/Syntax/Fixity.hs +146/−45
- src/full/Agda/Syntax/Fixity.hs-boot +4/−1
- src/full/Agda/Syntax/Info.hs +16/−14
- src/full/Agda/Syntax/Internal.hs +110/−79
- src/full/Agda/Syntax/Internal/Defs.hs +5/−13
- src/full/Agda/Syntax/Internal/Generic.hs +41/−10
- src/full/Agda/Syntax/Internal/Names.hs +173/−0
- src/full/Agda/Syntax/Internal/Pattern.hs +49/−66
- src/full/Agda/Syntax/Literal.hs +38/−13
- src/full/Agda/Syntax/Notation.hs +58/−17
- src/full/Agda/Syntax/Parser.hs +9/−0
- src/full/Agda/Syntax/Parser/Alex.hs +14/−10
- src/full/Agda/Syntax/Parser/Comments.hs +4/−2
- src/full/Agda/Syntax/Parser/Layout.hs +9/−6
- src/full/Agda/Syntax/Parser/LexActions.hs +2/−3
- src/full/Agda/Syntax/Parser/Lexer.x +38/−25
- src/full/Agda/Syntax/Parser/LookAhead.hs +2/−2
- src/full/Agda/Syntax/Parser/Monad.hs +43/−30
- src/full/Agda/Syntax/Parser/Parser.y +309/−105
- src/full/Agda/Syntax/Parser/Tokens.hs +14/−9
- src/full/Agda/Syntax/Position.hs +375/−143
- src/full/Agda/Syntax/Reflected.hs +58/−0
- src/full/Agda/Syntax/Scope/Base.hs +234/−96
- src/full/Agda/Syntax/Scope/Monad.hs +196/−64
- src/full/Agda/Syntax/Translation/AbstractToConcrete.hs +179/−158
- src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs +577/−377
- src/full/Agda/Syntax/Translation/InternalToAbstract.hs +148/−107
- src/full/Agda/Syntax/Translation/ReflectedToAbstract.hs +163/−0
- src/full/Agda/Syntax/Treeless.hs +150/−0
- src/full/Agda/Termination/CallGraph.hs +10/−29
- src/full/Agda/Termination/CallMatrix.hs +1/−5
- src/full/Agda/Termination/Inlining.hs +4/−7
- src/full/Agda/Termination/Monad.hs +7/−9
- src/full/Agda/Termination/Order.hs +2/−4
- src/full/Agda/Termination/Semiring.hs +1/−1
- src/full/Agda/Termination/SparseMatrix.hs +19/−19
- src/full/Agda/Termination/TermCheck.hs +47/−53
- src/full/Agda/Termination/Termination.hs +2/−6
- src/full/Agda/Tests.hs +2/−4
- src/full/Agda/TheTypeChecker.hs +1/−1
- src/full/Agda/TypeChecking/Abstract.hs +140/−51
- src/full/Agda/TypeChecking/CheckInternal.hs +102/−111
- src/full/Agda/TypeChecking/CompiledClause.hs +2/−2
- src/full/Agda/TypeChecking/CompiledClause/Compile.hs +20/−18
- src/full/Agda/TypeChecking/CompiledClause/Match.hs +8/−7
- src/full/Agda/TypeChecking/CompiledClause/Match.hs-boot +0/−1
- src/full/Agda/TypeChecking/Constraints.hs +15/−8
- src/full/Agda/TypeChecking/Constraints.hs-boot +1/−0
- src/full/Agda/TypeChecking/Conversion.hs +67/−61
- src/full/Agda/TypeChecking/Coverage.hs +170/−175
- src/full/Agda/TypeChecking/Coverage/Match.hs +49/−35
- src/full/Agda/TypeChecking/Coverage/SplitTree.hs +5/−4
- src/full/Agda/TypeChecking/Datatypes.hs +25/−13
- src/full/Agda/TypeChecking/DeadCode.hs +63/−0
- src/full/Agda/TypeChecking/DisplayForm.hs +20/−20
- src/full/Agda/TypeChecking/DropArgs.hs +6/−4
- src/full/Agda/TypeChecking/Empty.hs +4/−2
- src/full/Agda/TypeChecking/Errors.hs +234/−81
- src/full/Agda/TypeChecking/EtaContract.hs +15/−15
- src/full/Agda/TypeChecking/Forcing.hs +1/−1
- src/full/Agda/TypeChecking/Free.hs +39/−36
- src/full/Agda/TypeChecking/Free/Lazy.hs +22/−21
- src/full/Agda/TypeChecking/Free/Old.hs +1/−7
- src/full/Agda/TypeChecking/Free/Tests.hs +7/−14
- src/full/Agda/TypeChecking/Implicit.hs +14/−10
- src/full/Agda/TypeChecking/Injectivity.hs +5/−5
- src/full/Agda/TypeChecking/InstanceArguments.hs +249/−145
- src/full/Agda/TypeChecking/Irrelevance.hs +3/−3
- src/full/Agda/TypeChecking/Level.hs +4/−7
- src/full/Agda/TypeChecking/LevelConstraints.hs +2/−0
- src/full/Agda/TypeChecking/MetaVars.hs +58/−62
- src/full/Agda/TypeChecking/MetaVars.hs-boot +5/−4
- src/full/Agda/TypeChecking/MetaVars/Mention.hs +3/−8
- src/full/Agda/TypeChecking/MetaVars/Occurs.hs +57/−50
- src/full/Agda/TypeChecking/Monad.hs +2/−0
- src/full/Agda/TypeChecking/Monad/Base.hs +317/−106
- src/full/Agda/TypeChecking/Monad/Benchmark.hs +5/−21
- src/full/Agda/TypeChecking/Monad/Builtin.hs +144/−42
- src/full/Agda/TypeChecking/Monad/Caching.hs +113/−0
- src/full/Agda/TypeChecking/Monad/Constraints.hs +11/−4
- src/full/Agda/TypeChecking/Monad/Context.hs +35/−23
- src/full/Agda/TypeChecking/Monad/Context.hs-boot +6/−2
- src/full/Agda/TypeChecking/Monad/Env.hs +6/−9
- src/full/Agda/TypeChecking/Monad/Exception.hs +47/−11
- src/full/Agda/TypeChecking/Monad/Imports.hs +0/−2
- src/full/Agda/TypeChecking/Monad/MetaVars.hs +4/−4
- src/full/Agda/TypeChecking/Monad/Mutual.hs +7/−2
- src/full/Agda/TypeChecking/Monad/Open.hs +15/−6
- src/full/Agda/TypeChecking/Monad/Options.hs +99/−43
- src/full/Agda/TypeChecking/Monad/Sharing.hs +13/−7
- src/full/Agda/TypeChecking/Monad/Signature.hs +238/−66
- src/full/Agda/TypeChecking/Monad/SizedTypes.hs +10/−5
- src/full/Agda/TypeChecking/Monad/State.hs +37/−8
- src/full/Agda/TypeChecking/Monad/Statistics.hs +0/−3
- src/full/Agda/TypeChecking/Monad/Trace.hs +12/−10
- src/full/Agda/TypeChecking/Patterns/Abstract.hs +14/−8
- src/full/Agda/TypeChecking/Patterns/Match.hs +5/−5
- src/full/Agda/TypeChecking/Patterns/Match.hs-boot +1/−1
- src/full/Agda/TypeChecking/Polarity.hs +8/−8
- src/full/Agda/TypeChecking/Positivity.hs +404/−293
- src/full/Agda/TypeChecking/Positivity/Occurrence.hs +134/−1
- src/full/Agda/TypeChecking/Pretty.hs +83/−39
- src/full/Agda/TypeChecking/Primitive.hs +201/−101
- src/full/Agda/TypeChecking/ProjectionLike.hs +7/−3
- src/full/Agda/TypeChecking/Quote.hs +104/−34
- src/full/Agda/TypeChecking/ReconstructParameters.hs +83/−0
- src/full/Agda/TypeChecking/RecordPatterns.hs +38/−32
- src/full/Agda/TypeChecking/Records.hs +93/−12
- src/full/Agda/TypeChecking/Records.hs-boot +2/−1
- src/full/Agda/TypeChecking/Reduce.hs +159/−70
- src/full/Agda/TypeChecking/Reduce/Monad.hs +7/−8
- src/full/Agda/TypeChecking/Rewriting.hs +75/−53
- src/full/Agda/TypeChecking/Rewriting/NonLinMatch.hs +146/−71
- src/full/Agda/TypeChecking/Rules/Builtin.hs +146/−53
- src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs +7/−5
- src/full/Agda/TypeChecking/Rules/Data.hs +23/−10
- src/full/Agda/TypeChecking/Rules/Decl.hs +233/−89
- src/full/Agda/TypeChecking/Rules/Decl.hs-boot +0/−1
- src/full/Agda/TypeChecking/Rules/Def.hs +139/−126
- src/full/Agda/TypeChecking/Rules/Def.hs-boot +1/−1
- src/full/Agda/TypeChecking/Rules/Display.hs +108/−0
- src/full/Agda/TypeChecking/Rules/LHS.hs +361/−316
- src/full/Agda/TypeChecking/Rules/LHS/Implicit.hs +16/−15
- src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs +13/−8
- src/full/Agda/TypeChecking/Rules/LHS/Problem.hs +93/−37
- src/full/Agda/TypeChecking/Rules/LHS/ProblemRest.hs +12/−12
- src/full/Agda/TypeChecking/Rules/LHS/Split.hs +58/−22
- src/full/Agda/TypeChecking/Rules/LHS/Unify.hs +990/−1087
- src/full/Agda/TypeChecking/Rules/Record.hs +50/−50
- src/full/Agda/TypeChecking/Rules/Term.hs +383/−204
- src/full/Agda/TypeChecking/Rules/Term.hs-boot +8/−5
- src/full/Agda/TypeChecking/Serialise.hs +12/−6
- src/full/Agda/TypeChecking/Serialise/Base.hs +24/−2
- src/full/Agda/TypeChecking/Serialise/Instances.hs +3/−3
- src/full/Agda/TypeChecking/Serialise/Instances/Abstract.hs +15/−115
- src/full/Agda/TypeChecking/Serialise/Instances/Common.hs +76/−44
- src/full/Agda/TypeChecking/Serialise/Instances/Compilers.hs +42/−4
- src/full/Agda/TypeChecking/Serialise/Instances/Highlighting.hs +2/−0
- src/full/Agda/TypeChecking/Serialise/Instances/Internal.hs +26/−48
- src/full/Agda/TypeChecking/SizedTypes.hs +56/−57
- src/full/Agda/TypeChecking/SizedTypes/Solve.hs +101/−36
- src/full/Agda/TypeChecking/SizedTypes/Syntax.hs +40/−36
- src/full/Agda/TypeChecking/SizedTypes/Tests.hs +0/−3
- src/full/Agda/TypeChecking/SizedTypes/Utils.hs +0/−1
- src/full/Agda/TypeChecking/SizedTypes/WarshallSolver.hs +34/−28
- src/full/Agda/TypeChecking/Substitute.hs +192/−138
- src/full/Agda/TypeChecking/Substitute/Pattern.hs +43/−0
- src/full/Agda/TypeChecking/SyntacticEquality.hs +24/−22
- src/full/Agda/TypeChecking/Telescope.hs +162/−29
- src/full/Agda/TypeChecking/Telescope.hs-boot +7/−0
- src/full/Agda/TypeChecking/Test/Generators.hs +13/−14
- src/full/Agda/TypeChecking/Unquote.hs +429/−175
- src/full/Agda/TypeChecking/With.hs +150/−149
- src/full/Agda/Utils/AssocList.hs +2/−3
- src/full/Agda/Utils/Bag.hs +4/−5
- src/full/Agda/Utils/Benchmark.hs +14/−0
- src/full/Agda/Utils/BiMap.hs +11/−13
- src/full/Agda/Utils/Cluster.hs +0/−2
- src/full/Agda/Utils/Either.hs +0/−2
- src/full/Agda/Utils/Environment.hs +38/−0
- src/full/Agda/Utils/Except.hs +4/−0
- src/full/Agda/Utils/Favorites.hs +3/−19
- src/full/Agda/Utils/FileName.hs +11/−22
- src/full/Agda/Utils/Geniplate.hs +6/−0
- src/full/Agda/Utils/Graph/AdjacencyMap/Unidirectional.hs +90/−159
- src/full/Agda/Utils/Graph/AdjacencyMap/Unidirectional/Tests.hs +78/−88
- src/full/Agda/Utils/Hash.hs +1/−0
- src/full/Agda/Utils/HashMap.hs +6/−21
- src/full/Agda/Utils/IO/Directory.hs +32/−0
- src/full/Agda/Utils/Lens.hs +24/−3
- src/full/Agda/Utils/List.hs +99/−20
- src/full/Agda/Utils/ListT.hs +13/−11
- src/full/Agda/Utils/ListT/Tests.hs +2/−3
- src/full/Agda/Utils/Map.hs +8/−2
- src/full/Agda/Utils/Maybe/Strict.hs +7/−3
- src/full/Agda/Utils/Memo.hs +44/−0
- src/full/Agda/Utils/Monad.hs +24/−6
- src/full/Agda/Utils/Null.hs +0/−2
- src/full/Agda/Utils/Parser/MemoisedCPS.hs +208/−0
- src/full/Agda/Utils/Parser/ReadP.hs +523/−0
- src/full/Agda/Utils/PartialOrd.hs +0/−1
- src/full/Agda/Utils/Permutation.hs +10/−10
- src/full/Agda/Utils/Permutation/Tests.hs +4/−6
- src/full/Agda/Utils/Pointer.hs +2/−1
- src/full/Agda/Utils/Pretty.hs +0/−4
- src/full/Agda/Utils/QuickCheck.hs +0/−1
- src/full/Agda/Utils/ReadP.hs +0/−523
- src/full/Agda/Utils/TestHelpers.hs +10/−10
- src/full/Agda/Utils/Trie.hs +66/−19
- src/full/Agda/Utils/VarSet.hs +0/−1
- src/full/Agda/Utils/Warshall.hs +2/−2
Agda.cabal view
@@ -1,5 +1,5 @@ name: Agda-version: 2.4.2.5+version: 2.5.1 cabal-version: >= 1.8 build-type: Custom license: OtherLicense@@ -7,7 +7,7 @@ author: Ulf Norell, Andreas Abel, Nils Anders Danielsson, Makoto Takeyama, Catarina Coquand, with contributions by Stevan Andjelkovic, Marcin Benke, Jean-Philippe Bernardy, James Chapman, Jesper Cockx, Dominique Devriese, Peter Divanski, Fredrik Nordvall Forsberg, Olle Fredriksson, Daniel Gustafsson, Philipp Hausmann, Patrik Jansson, Alan Jeffrey, Wolfram Kahl, Fredrik Lindblad, Francesco Mazzoli, Stefan Monnier, Darin Morrison, Guilhem Moulin, Nicolas Pouillard, Andrés Sicard-Ramírez, Andrea Vezzosi and many more. maintainer: Ulf Norell <ulfn@chalmers.se> homepage: http://wiki.portal.chalmers.se/agda/-bug-reports: http://code.google.com/p/agda/issues/list+bug-reports: https://github.com/agda/agda/issues category: Dependent types synopsis: A dependently typed functional programming language and proof assistant description:@@ -47,6 +47,28 @@ agda.sty postprocess-latex.pl lib/prim/Agda/Primitive.agda+ lib/prim/Agda/Builtin/Bool.agda+ lib/prim/Agda/Builtin/Char.agda+ lib/prim/Agda/Builtin/Coinduction.agda+ lib/prim/Agda/Builtin/Equality.agda+ lib/prim/Agda/Builtin/Float.agda+ lib/prim/Agda/Builtin/FromNat.agda+ lib/prim/Agda/Builtin/FromNeg.agda+ lib/prim/Agda/Builtin/FromString.agda+ lib/prim/Agda/Builtin/IO.agda+ lib/prim/Agda/Builtin/Int.agda+ lib/prim/Agda/Builtin/List.agda+ lib/prim/Agda/Builtin/Nat.agda+ lib/prim/Agda/Builtin/Reflection.agda+ lib/prim/Agda/Builtin/Size.agda+ lib/prim/Agda/Builtin/Strict.agda+ lib/prim/Agda/Builtin/String.agda+ lib/prim/Agda/Builtin/TrustMe.agda+ lib/prim/Agda/Builtin/Unit.agda+ uhc-agda-base/LICENSE+ uhc-agda-base/uhc-agda-base.cabal+ uhc-agda-base/src/UHC/Agda/*.hs+ MAlonzo/src/MAlonzo/*.hs source-repository head type: git@@ -54,35 +76,55 @@ source-repository this type: git- location: https://github.com/agda/agda- tag: 2.4.2.5+ location: https://github.com/agda/agda/tree/2.5.1+ tag: 2.5.1 flag cpphs default: True manual: True description: Use cpphs instead of cpp. +flag uhc+ default: False+ manual: True+ description:+ Enable the UHC backend. For details, consult the Agda User Manual.+ library hs-source-dirs: src/full include-dirs: src/full if flag(cpphs)- build-tools: cpphs >= 1.19 && < 1.20+ build-tools: cpphs >= 1.19 ghc-options: -pgmP cpphs -optP --cpp + if flag(uhc)+ build-depends: shuffle >= 0.1.3.3+ , uhc-light >= 1.1.9.2 && < 1.2+ , uhc-util >= 0.1.6.3 && < 0.1.6.6+ , uulib >= 0.9.20+ -- we use the CPP processor to conditionally import the UHC Light modules. If UHC Light is not+ -- present, we instead create dummy definitions, see module Agda.Compiler.UHC.Bridge.+ cpp-options: -DUHC_BACKEND+ if os(windows) build-depends: Win32 >= 2.2 && < 2.4 build-depends: array >= 0.4.0.1 && < 0.6- , base >= 4.6.0.1 && < 4.9- , binary >= 0.7.2.1 && < 0.8+ , base >= 4.6.0.1 && < 4.10+ , binary >= 0.7.2.1 && < 0.9 , boxes >= 0.1.3 && < 0.2 , bytestring >= 0.10.0.2 && < 0.11 , containers >= 0.5.0.0 && < 0.6 , data-hash >= 0.2.0.0 && < 0.3 , deepseq >= 1.3.0.1 && < 1.5 , directory >= 1.2.0.1 && < 1.3+ -- Edison versioning scheme: http://rwd.rdockins.name/edison/home/.+ -- EdisonAPI isn't used by Agda, but EdisonCore 1.3.1 doesn't+ -- declare what version of EdisonAPI it depends on.+ , EdisonAPI == 1.3+ , EdisonCore >= 1.3.1.1 && < 1.3.2 , edit-distance >= 0.2.1.2 && < 0.3 , equivalence >= 0.2.5 && < 0.4 , filepath >= 1.3.0.1 && < 1.5@@ -98,25 +140,24 @@ , hashtables >= 1.0.1.8 && < 1.2 || >= 1.2.0.2 && < 1.3 , haskeline >= 0.7.1.3 && < 0.8 , haskell-src-exts >= 1.16.0.1 && < 1.18+ , monadplus >= 1.4 && < 1.5 -- mtl-2.1 contains a severe bug. -- -- mtl >= 2.2 && < 2.2.1 doesn't export Control.Monad.Except. , mtl >= 2.1.1 && <= 2.1.3.1 || >= 2.2.1 && < 2.3- , QuickCheck >= 2.8 && < 2.9+ , QuickCheck >= 2.8.2 && < 2.9 , parallel >= 3.2.0.4 && < 3.3- -- , parsec >= 3.1 && < 3.2, -- only for Agda.TypeChecking.SizedTypes.Parser, which is not included- -- pretty 1.1.1.2 and 1.1.1.3 do not follow the package versioning -- policy. , pretty >= 1.1.1.0 && < 1.1.1.2 || >= 1.1.2 && < 1.2- , process >= 1.1.0.2 && < 1.3+ , process >= 1.1.0.2 && < 1.5 , strict >= 0.3.2 && < 0.4- , template-haskell >= 2.8.0.0 && < 2.11+ , template-haskell >= 2.8.0.0 && < 2.12 , text >= 0.11.3.1 && < 1.3- , time >= 1.4.0.1 && < 1.6+ , time >= 1.4.0.1 && < 1.7 -- transformers 0.4.0.0 was deprecated.- , transformers >= 0.3 && < 0.4 || >= 0.4.1.0 && < 0.5- , transformers-compat >= 0.3.3.3 && < 0.5+ , transformers >= 0.3 && < 0.4 || >= 0.4.1.0 && < 0.6+ , transformers-compat >= 0.3.3.3 && < 0.6 , unordered-containers >= 0.2.5.0 && < 0.3 , xhtml >= 3000.2.1 && < 3000.3 @@ -145,6 +186,7 @@ Agda.Auto.Typecheck Agda.Benchmarking Agda.Compiler.CallCompiler+ Agda.Compiler.Common Agda.Compiler.Epic.AuxAST Agda.Compiler.Epic.CaseOpts Agda.Compiler.Epic.Compiler@@ -172,8 +214,29 @@ Agda.Compiler.MAlonzo.Misc Agda.Compiler.MAlonzo.Pretty Agda.Compiler.MAlonzo.Primitives+ Agda.Compiler.ToTreeless+ Agda.Compiler.Treeless.Builtin+ Agda.Compiler.Treeless.Compare+ Agda.Compiler.Treeless.Erase+ Agda.Compiler.Treeless.GuardsToPrims+ Agda.Compiler.Treeless.NormalizeNames+ Agda.Compiler.Treeless.Pretty+ Agda.Compiler.Treeless.Simplify+ Agda.Compiler.Treeless.Subst+ Agda.Compiler.Treeless.Uncase+ Agda.Compiler.Treeless.Unused+ Agda.Compiler.UHC.Bridge+ Agda.Compiler.UHC.Compiler+ Agda.Compiler.UHC.CompileState+ Agda.Compiler.UHC.FromAgda+ Agda.Compiler.UHC.MagicTypes+ Agda.Compiler.UHC.Pragmas.Base+ Agda.Compiler.UHC.Pragmas.Parse+ Agda.Compiler.UHC.Primitives+ Agda.Compiler.UHC.Smashing Agda.ImpossibleTest Agda.Interaction.BasicOps+ Agda.Interaction.SearchAbout Agda.Interaction.CommandLine Agda.Interaction.EmacsCommand Agda.Interaction.EmacsTop@@ -192,6 +255,9 @@ Agda.Interaction.Response Agda.Interaction.MakeCase Agda.Interaction.Monad+ Agda.Interaction.Library+ Agda.Interaction.Library.Base+ Agda.Interaction.Library.Parse Agda.Interaction.Options Agda.Interaction.Options.Lenses Agda.Main@@ -213,6 +279,7 @@ Agda.Syntax.Internal Agda.Syntax.Internal.Defs Agda.Syntax.Internal.Generic+ Agda.Syntax.Internal.Names Agda.Syntax.Internal.Pattern Agda.Syntax.Literal Agda.Syntax.Notation@@ -228,17 +295,18 @@ Agda.Syntax.Parser.Tokens Agda.Syntax.Parser Agda.Syntax.Position+ Agda.Syntax.Reflected Agda.Syntax.Scope.Base Agda.Syntax.Scope.Monad Agda.Syntax.Translation.AbstractToConcrete Agda.Syntax.Translation.ConcreteToAbstract Agda.Syntax.Translation.InternalToAbstract+ Agda.Syntax.Translation.ReflectedToAbstract+ Agda.Syntax.Treeless Agda.Termination.CallGraph Agda.Termination.CallMatrix Agda.Termination.CutOff Agda.Termination.Inlining--- Agda.Termination.Lexicographic -- RETIRED--- Agda.Termination.Matrix -- RETIRED Agda.Termination.Monad Agda.Termination.Order Agda.Termination.RecCheck@@ -259,9 +327,9 @@ Agda.TypeChecking.Coverage.Match Agda.TypeChecking.Coverage.SplitTree Agda.TypeChecking.Datatypes+ Agda.TypeChecking.DeadCode Agda.TypeChecking.DisplayForm Agda.TypeChecking.DropArgs--- Agda.TypeChecking.Eliminators -- RETIRED Agda.TypeChecking.Empty Agda.TypeChecking.EtaContract Agda.TypeChecking.Errors@@ -282,6 +350,7 @@ Agda.TypeChecking.Monad.Base Agda.TypeChecking.Monad.Benchmark Agda.TypeChecking.Monad.Builtin+ Agda.TypeChecking.Monad.Caching Agda.TypeChecking.Monad.Closure Agda.TypeChecking.Monad.Constraints Agda.TypeChecking.Monad.Context@@ -299,7 +368,6 @@ Agda.TypeChecking.Monad.Statistics Agda.TypeChecking.Monad.Trace Agda.TypeChecking.Monad--- Agda.TypeChecking.Patterns -- RETIRED Agda.TypeChecking.Patterns.Abstract Agda.TypeChecking.Patterns.Match Agda.TypeChecking.Polarity@@ -310,7 +378,7 @@ Agda.TypeChecking.Primitive Agda.TypeChecking.ProjectionLike Agda.TypeChecking.Quote--- Agda.TypeChecking.Rebind -- DEAD+ Agda.TypeChecking.ReconstructParameters Agda.TypeChecking.RecordPatterns Agda.TypeChecking.Records Agda.TypeChecking.Reduce@@ -322,6 +390,7 @@ Agda.TypeChecking.Rules.Data Agda.TypeChecking.Rules.Decl Agda.TypeChecking.Rules.Def+ Agda.TypeChecking.Rules.Display Agda.TypeChecking.Rules.LHS Agda.TypeChecking.Rules.LHS.Implicit Agda.TypeChecking.Rules.LHS.Instantiate@@ -346,11 +415,11 @@ Agda.TypeChecking.SizedTypes.Utils Agda.TypeChecking.SizedTypes.WarshallSolver Agda.TypeChecking.Substitute+ Agda.TypeChecking.Substitute.Pattern Agda.TypeChecking.SyntacticEquality Agda.TypeChecking.Telescope Agda.TypeChecking.Test.Generators Agda.TypeChecking.Tests--- Agda.TypeChecking.UniversePolymorphism -- RETIRED Agda.TypeChecking.Unquote Agda.TypeChecking.With Agda.Utils.AssocList@@ -360,6 +429,7 @@ Agda.Utils.Char Agda.Utils.Cluster Agda.Utils.Empty+ Agda.Utils.Environment Agda.Utils.Except Agda.Utils.Either Agda.Utils.Favorites@@ -373,6 +443,7 @@ Agda.Utils.HashMap Agda.Utils.Impossible Agda.Utils.IO.Binary+ Agda.Utils.IO.Directory Agda.Utils.IO.UTF8 Agda.Utils.IORef Agda.Utils.Lens@@ -383,15 +454,17 @@ Agda.Utils.Map Agda.Utils.Maybe Agda.Utils.Maybe.Strict+ Agda.Utils.Memo Agda.Utils.Monad Agda.Utils.Null+ Agda.Utils.Parser.MemoisedCPS+ Agda.Utils.Parser.ReadP Agda.Utils.PartialOrd Agda.Utils.Permutation Agda.Utils.Permutation.Tests Agda.Utils.Pointer Agda.Utils.Pretty Agda.Utils.QuickCheck- Agda.Utils.ReadP Agda.Utils.SemiRing Agda.Utils.Singleton Agda.Utils.Size@@ -421,9 +494,7 @@ -fwarn-missing-fields -fwarn-missing-methods -fwarn-missing-signatures- -fwarn-monomorphism-restriction -fwarn-orphans- -fwarn-pointless-pragmas -fwarn-tabs -fwarn-overlapping-patterns -fwarn-unrecognised-pragmas@@ -432,25 +503,38 @@ -fwarn-wrong-do-bind if impl(ghc >= 7.8)- ghc-options: -fwarn-duplicate-constraints- -fwarn-empty-enumerations- -fwarn-overflowed-literals- -fwarn-typed-holes+ ghc-options: -fwarn-empty-enumerations -fwarn-inline-rule-shadowing+ -fwarn-typed-holes+ -fwarn-overflowed-literals if impl(ghc >= 7.10)- ghc-options: -fwarn-context-quantification- -fwarn-unticked-promoted-constructors+ ghc-options: -fwarn-unticked-promoted-constructors - -- The -fwarn-amp flag is deprected in GHC 7.10.1.+ -- This option is deprected in GHC 7.10.1. if impl(ghc >= 7.8) && impl(ghc < 7.10) ghc-options: -fwarn-amp + -- This option will be removed in GHC 8.0.1.+ if impl(ghc >= 7.6) && impl(ghc < 8.0)+ ghc-options: -fwarn-pointless-pragmas++ -- This option will be deprected in GHC 8.0.1.+ if impl(ghc >= 7.8) && impl(ghc < 8.0)+ ghc-options: -fwarn-duplicate-constraints++ -- This option will be deprected in GHC 8.0.1.+ if impl(ghc >= 7.10) && impl(ghc < 8.0)+ ghc-options: -fwarn-context-quantification++ if impl(ghc >= 8.0)+ ghc-options: -Wnoncanonical-monad-instances+ executable agda hs-source-dirs: src/main main-is: Main.hs build-depends:- Agda == 2.4.2.5+ Agda == 2.5.1 -- Nothing is used from the following package, except for the -- prelude. , base >= 4.6.0.1 && < 6@@ -467,7 +551,24 @@ main-is: Main.hs other-modules: Paths_Agda build-depends:- base >= 4.6.0.1 && < 4.9+ base >= 4.6.0.1 && < 4.10 , directory >= 1.2.0.1 && < 1.3 , filepath >= 1.3.0.1 && < 1.5- , process >= 1.1.0.2 && < 1.3+ , process >= 1.1.0.2 && < 1.5++executable agda-ghc-names+ hs-source-dirs: src/agda-ghc-names+ main-is: agda-ghc-names.hs+ other-modules: ExtractNames+ , Find+ , FixProf+ , ResolveHsNames+ build-depends:+ base >= 4.6.0.1 && < 4.10+ , binary >= 0.7.2.1 && < 0.9+ , containers >= 0.5.0.0 && < 0.6+ , filemanip >= 0.3.6.3 && < 0.4+ , haskell-src-exts >= 1.16.0.1 && < 1.18+ , mtl >= 2.1.1 && <= 2.1.3.1 || >= 2.2.1 && < 2.3+ , filepath >= 1.3.0.1 && < 1.5+ ghc-options: -rtsopts
CHANGELOG view
@@ -1,4934 +1,6328 @@ --------------------------------------------------------------------------- Release notes for Agda version 2.4.2.5---------------------------------------------------------------------------Important changes since 2.4.2.4:--Installation and infrastructure-===============================--* Added support for GHC 7.10.3.--* Added `cpphs` Cabal flag-- Turn on/off this flag to choose cpphs/cpp as the C preprocessor.-- This flag is turn on by default.-- (This flag was added in Agda 2.4.2.1 but it was not documented)--Pragmas and options-===================--* Termination pragmas are not allowed inside `where` clauses- [Issue 1137].--Type checking-=============--* `with`-abstraction is more agressive, abstracts also in types of- variables that are used in the `with`-expressions, unless they are- also used in the types of the `with`-expressions. [Issue 1692]-- Example:-- ```agda- test : (f : (x : A) → a ≡ x) (b : A) → b ≡ a- test f b with a | f b- test f b | .b | refl = f b- ```-- Previously, `with` would not abstract in types of variables that- appear in the `with`-expressions, in this case, both `f` and `b`,- leaving their types unchanged.- Now, it tries to abstract in `f`, as only `b` appears in the types of- the `with`-expressions which are `A` (of `a`) and `a ≡ b` (of `f b`).- As a result, the type of `f` changes to `(x : A) → b ≡ x` and the- type of the goal to `b ≡ b` (as previously).-- This also affects `rewrite`, which is implemented in terms of- `with`.-- ```agda- test : (f : (x : A) → a ≡ x) (b : A) → b ≡ a- test f b rewrite f b = f b- ```-- As the new `with` is not fully backwards-compatible, some parts of- your Agda developments using `with` or `rewrite` might need- maintenance.--Fixed issues-============--See https://github.com/agda/agda/issues-* 1407-* 1518-* 1670-* 1677-* 1698-* 1701-* 1710-* 1718----------------------------------------------------------------------------- Release notes for Agda version 2.4.2.4---------------------------------------------------------------------------Important changes since 2.4.2.3:--Installation and infrastructure-===============================--* Removed support for GHC 7.4.2.--Pragmas and options-===================--* Option --copatterns is now on by default. To switch off- parsing of copatterns, use:-- {-# OPTIONS --no-copatterns #-}--* Option --rewriting is now needed to use REWRITE pragmas- and rewriting during reduction. Rewriting is not --safe.-- To use rewriting, first specify a relation symbol `R` that will- later be used to add rewrite rules. A canonical candidate would be- propositional equality-- {-# BUILTIN REWRITE _≡_ #-}-- but any symbol `R` of type `Δ → A → A → Set i` for some `A` and- `i` is accepted. Then symbols `q` can be added to rewriting- provided their type is of the form `Γ → R ds l r`. This will add- a rewrite rule-- Γ ⊢ l ↦ r : A[ds/Δ]-- to the signature, which fires whenever a term is an instance of `l`.- For example, if-- plus0 : ∀ x → x + 0 ≡ x-- (ideally, there is a proof for `plus0`, but it could be a- postulate), then-- {-# REWRITE plus0 #-}-- will prompt Agda to rewrite any well-typed term of the form `t + 0`- to `t`.-- Some caveats: Agda accepts and applies rewrite rules naively, it is- very easy to break consistency and termination of type checking.- Some examples of rewrite rules that should /not/ be added:-- refl : ∀ x → x ≡ x -- Agda loops- plus-sym : ∀ x y → x + y ≡ y + x -- Agda loops- absurd : true ≡ false -- Breaks consistency-- Adding only proven equations should at least preserve consistency,- but this is only a conjecture, so know what you are doing!- Using rewriting, you are entering into the wilderness, where you are- on your own!--Language-========--* forall / ∀ now parses like λ, i.e., the following parses now [Issue 1583]:-- ⊤ × ∀ (B : Set) → B → B--* The underscore pattern _ can now also stand for an inaccessible- pattern (dot pattern). This alleviates the need for writing `._'.- [Issue 1605] Instead of-- transVOld : ∀{A : Set} (a b c : A) → a ≡ b → b ≡ c → a ≡ c- transVOld _ ._ ._ refl refl = refl-- one can now write-- transVNew : ∀{A : Set} (a b c : A) → a ≡ b → b ≡ c → a ≡ c- transVNew _ _ _ refl refl = refl-- and let Agda decide where to put the dots. This was always possible- by using hidden arguments-- transH : ∀{A : Set}{a b c : A} → a ≡ b → b ≡ c → a ≡ c- transH refl refl = refl-- which is now equivalent to-- transHNew : ∀{A : Set}{a b c : A} → a ≡ b → b ≡ c → a ≡ c- transHNew {a = _}{b = _}{c = _} refl refl = refl-- Before, underscore _ stood for an unnamed variable that could not be- instantiated by an inaccessible pattern. If one no wants to prevent- Agda from instantiating, one needs to use a variable name other than- underscore (however, in practice this situation seems unlikely).--Type checking-=============--* Polarity of phantom arguments to data and record types has changed. [Issue 1596]- Polarity of size arguments is Nonvariant (both monotone and antitone).- Polarity of other arguments is Covariant (monotone).- Both were Invariant before (neither monotone nor antitone).-- The following example type-checks now:-- open import Common.Size-- -- List should be monotone in both arguments- -- (even when `cons' is missing).-- data List (i : Size) (A : Set) : Set where- [] : List i A-- castLL : ∀{i A} → List i (List i A) → List ∞ (List ∞ A)- castLL x = x-- -- Stream should be antitone in the first and monotone in the second argument- -- (even with field `tail' missing).-- record Stream (i : Size) (A : Set) : Set where- coinductive- field- head : A-- castSS : ∀{i A} → Stream ∞ (Stream ∞ A) → Stream i (Stream i A)- castSS x = x--* SIZELT lambdas must be consistent [Issue 1523, see Abel and Pientka, ICFP 2013].- When lambda-abstracting over type (Size< size) then size must be- non-zero, for any valid instantiation of size variables.-- The good:-- data Nat (i : Size) : Set where- zero : ∀ (j : Size< i) → Nat i- suc : ∀ (j : Size< i) → Nat j → Nat i-- {-# TERMINATING #-}- -- This definition is fine, the termination checker is too strict at the moment.- fix : ∀ {C : Size → Set}- → (∀ i → (∀ (j : Size< i) → Nat j -> C j) → Nat i → C i)- → ∀ i → Nat i → C i- fix t i (zero j) = t i (λ (k : Size< i) → fix t k) (zero j)- fix t i (suc j n) = t i (λ (k : Size< i) → fix t k) (suc j n)-- The λ (k : Size< i) is fine in both cases, as context-- i : Size, j : Size< i-- guarantees that i is non-zero.-- The bad:-- record Stream {i : Size} (A : Set) : Set where- coinductive- constructor _∷ˢ_- field- head : A- tail : ∀ {j : Size< i} → Stream {j} A- open Stream public-- _++ˢ_ : ∀ {i A} → List A → Stream {i} A → Stream {i} A- [] ++ˢ s = s- (a ∷ as) ++ˢ s = a ∷ˢ (as ++ˢ s)-- This fails, maybe unjustified, at-- i : Size, s : Stream {i} A- ⊢- a ∷ˢ (λ {j : Size< i} → as ++ˢ s)-- Fixed by defining the constructor by copattern matching:-- record Stream {i : Size} (A : Set) : Set where- coinductive- field- head : A- tail : ∀ {j : Size< i} → Stream {j} A- open Stream public-- _∷ˢ_ : ∀ {i A} → A → Stream {i} A → Stream {↑ i} A- head (a ∷ˢ as) = a- tail (a ∷ˢ as) = as-- _++ˢ_ : ∀ {i A} → List A → Stream {i} A → Stream {i} A- [] ++ˢ s = s- (a ∷ as) ++ˢ s = a ∷ˢ (as ++ˢ s)-- The ugly:-- fix : ∀ {C : Size → Set}- → (∀ i → (∀ (j : Size< i) → C j) → C i)- → ∀ i → C i- fix t i = t i λ (j : Size< i) → fix t j-- For i=0, there is no such j at runtime, leading to looping- behavior.--Interaction-===========--* Issue 635 has been fixed. Case splitting does not spit out implicit- record patterns any more.-- record Cont : Set₁ where- constructor _◃_- field- Sh : Set- Pos : Sh → Set-- open Cont-- data W (C : Cont) : Set where- sup : (s : Sh C) (k : Pos C s → W C) → W C-- bogus : {C : Cont} → W C → Set- bogus w = {!w!}-- Case splitting on w yielded, since the fix of issue 473,-- bogus {Sh ◃ Pos} (sup s k) = ?-- Now it gives, as expected,-- bogus (sup s k) = ?--Performance-===========--* As one result of the 21st Agda Implementor's Meeting (AIM XXI),- serialization of the standard library is 50% faster (time reduced by- a third), without using additional disk space for the interface- files.---Bug fixes-=========--* Issues fixed ( see https://github.com/agda/agda/issues ):- 1546 (copattern matching and with-clauses)- 1560 (positivity checker inefficiency)- 1584 (let pattern with trailing implicit)----------------------------------------------------------------------------- Release notes for Agda version 2.4.2.3---------------------------------------------------------------------------Important changes since 2.4.2.2:--Installation and infrastructure-===============================--* Added support for GHC 7.10.1.--* Removed support for GHC 7.0.4.--Language-========--* _ is no longer a valid name for a definition. The following fails now:- [Issue 1465]-- postulate _ : Set--* Typed bindings can now contain hiding information [Issue 1391].- This means you can now write-- assoc : (xs {ys zs} : List A) → ((xs ++ ys) ++ zs) ≡ (xs ++ (ys ++ zs))-- instead of the longer-- assoc : (xs : List A) {ys zs : List A} → ...-- It also works with irrelevance-- .(xs {ys zs} : List A) → ...-- but of course does not make sense if there is hiding information already.- Thus, this is (still) a parse error:-- {xs {ys zs} : List A} → ...--* The builtins for sized types no longer need accompanying postulates.- The BUILTIN pragmas for size stuff now also declare the identifiers- they bind to.-- {-# BUILTIN SIZEUNIV SizeUniv #-} -- SizeUniv : SizeUniv- {-# BUILTIN SIZE Size #-} -- Size : SizeUniv- {-# BUILTIN SIZELT Size<_ #-} -- Size<_ : ..Size → SizeUniv- {-# BUILTIN SIZESUC ↑_ #-} -- ↑_ : Size → Size- {-# BUILTIN SIZEINF ∞ #-} -- ∞ : Size-- Size and Size< now live in the new universe SizeUniv.- It is forbidden to build function spaces in this universe,- in order to prevent the malicious assumption of a size predecessor-- pred : (i : Size) → Size< i-- [Issue 1428].--* Unambiguous notations (coming from syntax declarations) that resolve- to ambiguous names are now parsed unambiguously [Issue 1194].--* If only some instances of an overloaded name have a given- associated notation (coming from syntax declarations), then this- name can only be resolved to the given instances of the- name, not to other instances [Issue 1194].-- Previously, if different instances of an overloaded name had- /different/ associated notations, then none of the notations could- be used. Now all of them can be used.-- Note that notation identity does not only involve the right-hand- side of the syntax declaration. For instance, the following- notations are not seen as identical, because the implicit argument- names are different:-- module A where-- data D : Set where- c : {x y : D} → D-- syntax c {x = a} {y = b} = a ∙ b-- module B where-- data D : Set where- c : {y x : D} → D-- syntax c {y = a} {x = b} = a ∙ b--* If an overloaded operator is in scope with at least two distinct- fixities, then it gets the default fixity [Issue 1436].-- Similarly, if two or more identical notations for a given overloaded- name are in scope, and these notations do not all have the- same fixity, then they get the default fixity.--Type checking-=============--* Functions of varying arity can now have with-clauses and use rewrite.- Example:-- NPred : Nat → Set- NPred 0 = Bool- NPred (suc n) = Nat → NPred n-- const : Bool → ∀{n} → NPred n- const b {0} = b- const b {suc n} m = const b {n}-- allOdd : ∀ n → NPred n- allOdd 0 = true- allOdd (suc n) m with even m- ... | true = const false- ... | false = allOdd n--* Function defined by copattern matching can now have with-clauses- and use rewrite. Example:-- {-# OPTIONS --copatterns #-}-- record Stream (A : Set) : Set where- coinductive- constructor delay- field- force : A × Stream A- open Stream-- map : ∀{A B} → (A → B) → Stream A → Stream B- force (map f s) with force s- ... | a , as = f a , map f as-- record Bisim {A B} (R : A → B → Set) (s : Stream A) (t : Stream B) : Set where- coinductive- constructor ~delay- field- ~force : let a , as = force s- b , bs = force t- in R a b × Bisim R as bs- open Bisim-- SEq : ∀{A} (s t : Stream A) → Set- SEq = Bisim (_≡_)-- -- Slightly weird definition of symmetry to demonstrate rewrite.-- ~sym' : ∀{A} {s t : Stream A} → SEq s t → SEq t s- ~force (~sym' {s = s} {t} p) with force s | force t | ~force p- ... | a , as | b , bs | r , q rewrite r = refl , ~sym' q--* Instances can now be defined by copattern matching. [Issue 1413]- The following example extends the one in- [Abel, Pientka, Thibodeau, Setzer, POPL 2013, Section 2.2]:-- {-# OPTIONS --copatterns #-}-- -- The Monad type class-- record Monad (M : Set → Set) : Set1 where- field- return : {A : Set} → A → M A- _>>=_ : {A B : Set} → M A → (A → M B) → M B- open Monad {{...}}-- -- The State newtype-- record State (S A : Set) : Set where- field- runState : S → A × S- open State-- -- State is an instance of Monad-- instance- stateMonad : {S : Set} → Monad (State S)- runState (return {{stateMonad}} a ) s = a , s -- NEW- runState (_>>=_ {{stateMonad}} m k) s₀ = -- NEW- let a , s₁ = runState m s₀- in runState (k a) s₁-- -- stateMonad fulfills the monad laws-- leftId : {A B S : Set}(a : A)(k : A → State S B) →- (return a >>= k) ≡ k a- leftId a k = refl-- rightId : {A B S : Set}(m : State S A) →- (m >>= return) ≡ m- rightId m = refl-- assoc : {A B C S : Set}(m : State S A)(k : A → State S B)(l : B → State S C) →- ((m >>= k) >>= l) ≡ (m >>= λ a → k a >>= l)- assoc m k l = refl---Emacs mode-==========--* The new menu option "Switch to another version of Agda" tries to do- what it says.--* Changed feature: Interactively split result.-- [ This is as before: ]- Make-case (C-c C-c) with no variables given tries to split on the- result to introduce projection patterns. The hole needs to be of- record type, of course.-- test : {A B : Set} (a : A) (b : B) → A × B- test a b = ?-- Result-splitting ? will produce the new clauses:-- proj₁ (test a b) = ?- proj₂ (test a b) = ?-- [ This has changed: ]- If hole is of function type, make-case will introduce only pattern- variables (as much as it can).-- testFun : {A B : Set} (a : A) (b : B) → A × B- testFun = ?-- Result-splitting ? will produce the new clause:-- testFun a b = ?-- A second invocation of make-case will then introduce projection patterns.--Error messages-==============--* Agda now suggests corrections of misspelled options, e.g.-- {-# OPTIONS- --dont-termination-check- --without-k- --senf-gurke- #-}-- Unrecognized options:- --dont-termination-check (did you mean --no-termination-check ?)- --without-k (did you mean --without-K ?)- --senf-gurke-- Nothing close to --senf-gurke, I am afraid.--Compiler backends-=================--* The Epic backend has been removed [Issue 1481].--Bug fixes-=========--* Fixed bug with unquoteDecl not working in instance blocks [Issue 1491].--* Other issues fixed ( see https://code.google.com/p/agda/issues )- 1497- 1500----------------------------------------------------------------------------- Release notes for Agda version 2.4.2.2---------------------------------------------------------------------------Important changes since 2.4.2.1:--Bug fixes-=========--* Compilation on Windows fixed.--* Other issues fixed ( see https://code.google.com/p/agda/issues )- 1332- 1353- 1360- 1366- 1369----------------------------------------------------------------------------- Release notes for Agda version 2.4.2.1---------------------------------------------------------------------------Important changes since 2.4.2:--Pragmas and options-===================--* New pragma {-# TERMINATING #-} replacing {-# NO_TERMINATION_CHECK #-}-- Complements the existing pragma {-# NON_TERMINATING #-}.- Skips termination check for the associated definitions and marks- them as terminating. Thus, it is a replacement for- {-# NO_TERMINATION_CHECK #-} with the same semantics.-- You can no longer use pragma {-# NO_TERMINATION_CHECK #-} to skip- the termination check, but must label your definitions as either- {-# TERMINATING #-} or {-# NON_TERMINATING #-} instead.-- Note: {-# OPTION --no-termination-check #-} labels all your- definitions as {-# TERMINATING #-}, putting you in the danger zone- of a loop in the type checker.--Language-========--* Referring to a local variable shadowed by module opening is now- an error. Previous behavior was preferring the local over the- imported definitions. [Issue 1266]-- Note that module parameters are locals as well as variables bound by- λ, dependent function type, patterns, and let.-- Example:-- module M where- A = Set1-- test : (A : Set) → let open M in A-- The last A produces an error, since it could refer to the local- variable A or to the definition imported from module M.--* `with` on a variable bound by a module telescope or a pattern of a- parent function is now forbidden. [Issue 1342]-- data Unit : Set where- unit : Unit-- id : (A : Set) → A → A- id A a = a-- module M (x : Unit) where-- dx : Unit → Unit- dx unit = x-- g : ∀ u → x ≡ dx u- g with x- g | unit = id (∀ u → unit ≡ dx u) ?-- Even though this code looks right, Agda complains about the type- expression `∀ u → unit ≡ dx u`. If you ask Agda what should go- there instead, it happily tells you that it wants- `∀ u → unit ≡ dx u`. In fact what you do not see and Agda- will never show you is that the two expressions actually differ in- the invisible first argument to `dx`, which is visible only outside- module `M`. What Agda wants is an invisible `unit` after `dx`, but all- you can write is an invisible `x` (which is inserted behind the- scenes).-- To avoid those kinds of paradoxes, `with` is now outlawed on module- parameters. This should ensure that the invisible arguments are- always exactly the module parameters.-- Since a `where` block is desugared as module with pattern variables- of the parent clause as module parameters, the same strikes you for- uses of `with` on pattern variables of the parent function.-- f : Unit → Unit- f x = unit- where- dx : Unit → Unit- dx unit = x-- g : ∀ u → x ≡ dx u- g with x- g | unit = id ((u : Unit) → unit ≡ dx u) ?-- The `with` on pattern variable `x` of the parent clause `f x = unit`- is outlawed now.--Type checking-=============--* Termination check failure is now a proper error.-- We no longer continue type checking after termination check failures.- Use pragmas {-# NON_TERMINATING #-} and {-# NO_TERMINATION_CHECK #-}- near the offending definitions if you want to do so.- Or switch off the termination checker altogether with- {-# OPTIONS --no-termination-check #-} (at your own risk!).--* (Since Agda 2.4.2:) Termination checking --without-K restricts- structural descent to arguments ending in data types or `Size`.- Likewise, guardedness is only tracked when result type is data or- record type.-- mutual- data WOne : Set where wrap : FOne → WOne- FOne = ⊥ → WOne-- noo : (X : Set) → (WOne ≡ X) → X → ⊥- noo .WOne refl (wrap f) = noo FOne iso f-- `noo` is rejected since at type `X` the structural descent- `f < wrap f` is discounted --without-K.-- data Pandora : Set where- C : ∞ ⊥ → Pandora-- loop : (A : Set) → A ≡ Pandora → A- loop .Pandora refl = C (♯ (loop ⊥ foo))-- `loop` is rejected since guardedness is not tracked at type `A`- --without-K.-- See issues 1023, 1264, 1292.--Termination checking-====================--* The termination checker can now recognize simple subterms in dot- patterns.-- data Subst : (d : Nat) → Set where- c₁ : ∀ {d} → Subst d → Subst d- c₂ : ∀ {d₁ d₂} → Subst d₁ → Subst d₂ → Subst (suc d₁ + d₂)-- postulate- comp : ∀ {d₁ d₂} → Subst d₁ → Subst d₂ → Subst (d₁ + d₂)-- lookup : ∀ d → Nat → Subst d → Set₁- lookup d zero (c₁ ρ) = Set- lookup d (suc v) (c₁ ρ) = lookup d v ρ- lookup .(suc d₁ + d₂) v (c₂ {d₁} {d₂} ρ σ) = lookup (d₁ + d₂) v (comp ρ σ)-- The dot pattern here is actually normalized, so it is-- suc (d₁ + d₂)-- and the corresponding recursive call argument is (d₁ + d₂).- In such simple cases, Agda can now recognize that the pattern is- constructor applied to call argument, which is valid descent.-- Note however, that Agda only looks for syntactic equality when- identifying subterms, since it is not allowed to normalize terms on- the rhs during termination checking.-- Actually writing the dot pattern has no effect, this works as well,- and looks pretty magical... ;-)-- hidden : ∀{d} → Nat → Subst d → Set₁- hidden zero (c₁ ρ) = Set- hidden (suc v) (c₁ ρ) = hidden v ρ- hidden v (c₂ ρ σ) = hidden v (comp ρ σ)--Tools-=====--LaTeX-backend----------------* Fixed the issue of identifiers containing operators being typeset with- excessive math spacing.--Bug fixes-=========--* Issue 1194--* Issue 836: Fields and constructors can be qualified by the- record/data *type* as well as by their record/data module.- This now works also for record/data type imported from- parametrized modules:-- module M (_ : Set₁) where-- record R : Set₁ where- field- X : Set-- open M Set using (R) -- rather than using (module R)-- X : R → Set- X = R.X----------------------------------------------------------------------------- Release notes for Agda version 2.4.2---------------------------------------------------------------------------Important changes since 2.4.0.2:--Pragmas and options-===================--* New option: --with-K.-- This can be used to override a global --without-K in a file, by- adding a pragma {-# OPTIONS --with-K #-}.--* New pragma {-# NON_TERMINATING #-}-- This is a safer version of NO_TERMINATION_CHECK which doesn't treat the- affected functions as terminating. This means that NON_TERMINATING functions- do not reduce during type checking. They do reduce at run-time and when- invoking C-c C-n at top-level (but not in a hole).--Language-========--* Instance search is now more efficient and recursive (see issue 938)- (but without termination check yet).-- A new keyword `instance' has been introduced (in the style of- `abstract' and `private') which must now be used for every- definition/postulate that has to be taken into account during instance- resolution. For example:-- record RawMonoid (A : Set) : Set where- field- nil : A- _++_ : A -> A -> A-- open RawMonoid {{...}}-- instance- rawMonoidList : {A : Set} -> RawMonoid (List A)- rawMonoidList = record { nil = []; _++_ = List._++_ }-- rawMonoidMaybe : {A : Set} {{m : RawMonoid A}} -> RawMonoid (Maybe A)- rawMonoidMaybe {A} = record { nil = nothing ; _++_ = catMaybe }- where- catMaybe : Maybe A -> Maybe A -> Maybe A- catMaybe nothing mb = mb- catMaybe ma nothing = ma- catMaybe (just a) (just b) = just (a ++ b)-- Moreover, each type of an instance must end in (something that reduces- to) a named type (e.g. a record, a datatype or a postulate). This- allows us to build a simple index structure-- data/record name --> possible instances-- that speeds up instance search.-- Instance search takes into account all local bindings and all global- 'instance' bindings and the search is recursive. For instance,- searching for-- ? : RawMonoid (Maybe (List A))-- will consider the candidates {rawMonoidList, rawMonoidMaybe}, fail to- unify the first one, succeeding with the second one-- ? = rawMonoidMaybe {A = List A} {{m = ?m}} : RawMonoid (Maybe (List A))-- and continue with goal-- ?m : RawMonoid (List A)-- This will then find-- ?m = rawMonoidList {A = A}-- and putting together we have the solution.-- Be careful that there is no termination check for now, you can easily- make Agda loop by declaring the identity function as an instance. But- it shouldn’t be possible to make Agda loop by only declaring- structurally recursive instances (whatever that means).-- Additionally:-- * Uniqueness of instances is up to definitional equality (see issue 899).-- * Instances of the following form are allowed:-- EqSigma : {A : Set} {B : A → Set} {{EqA : Eq A}}- {{EqB : {a : A} → Eq (B a)}}- → Eq (Σ A B)-- When searching recursively for an instance of type- `{a : A} → Eq (B a)', a lambda will automatically be introduced and- instance search will search for something of type `Eq (B a)' in- the context extended by `a : A'. When searching for an instance, the- `a' argument does not have to be implicit, but in the definition of- EqSigma, instance search will only be able to use EqB if `a' is implicit.-- * There is no longer any attempt to solve irrelevant metas by instance- search.-- * Constructors of records and datatypes are automatically added to the- instance table.--* You can now use 'quote' in patterns.-- For instance, here is a function that unquotes a (closed) natural number- term.-- unquoteNat : Term → Maybe Nat- unquoteNat (con (quote Nat.zero) []) = just zero- unquoteNat (con (quote Nat.suc) (arg _ n ∷ [])) = fmap suc (unquoteNat n)- unquoteNat _ = nothing--* The builtin constructors AGDATERMUNSUPPORTED and AGDASORTUNSUPPORTED are now- translated to meta variables when unquoting.--* New syntactic sugar 'tactic e' and 'tactic e | e1 | .. | en'.-- It desugars as follows and makes it less unwieldy to call reflection-based- tactics.-- tactic e --> quoteGoal g in unquote (e g)- tactic e | e1 | .. | en --> quoteGoal g in unquote (e g) e1 .. en-- Note that in the second form the tactic function should generate a function- from a number of new subgoals to the original goal. The type of e should be- Term -> Term in both cases.--* New reflection builtins for literals.-- The Term data type AGDATERM now needs an additional constructor AGDATERMLIT- taking a reflected literal defined as follows (with appropriate builtin- bindings for the types Nat, Float, etc).-- data Literal : Set where- nat : Nat → Literal- float : Float → Literal- char : Char → Literal- string : String → Literal- qname : QName → Literal-- {-# BUILTIN AGDALITERAL Literal #-}- {-# BUILTIN AGDALITNAT nat #-}- {-# BUILTIN AGDALITFLOAT float #-}- {-# BUILTIN AGDALITCHAR char #-}- {-# BUILTIN AGDALITSTRING string #-}- {-# BUILTIN AGDALITQNAME qname #-}-- When quoting (quoteGoal or quoteTerm) literals will be mapped to the- AGDATERMLIT constructor. Previously natural number literals were quoted- to suc/zero application and other literals were quoted to- AGDATERMUNSUPPORTED.--* New reflection builtins for function definitions.-- AGDAFUNDEF should now map to a data type defined as follows- (with {-# BUILTIN QNAME QName #-}- {-# BUILTIN ARG Arg #-}- {-# BUILTIN AGDATERM Term #-}- {-# BUILTIN AGDATYPE Type #-}- {-# BUILTIN AGDALITERAL Literal #-}).-- data Pattern : Set where- con : QName → List (Arg Pattern) → Pattern- dot : Pattern- var : Pattern- lit : Literal → Pattern- proj : QName → Pattern- absurd : Pattern-- {-# BUILTIN AGDAPATTERN Pattern #-}- {-# BUILTIN AGDAPATCON con #-}- {-# BUILTIN AGDAPATDOT dot #-}- {-# BUILTIN AGDAPATVAR var #-}- {-# BUILTIN AGDAPATLIT lit #-}- {-# BUILTIN AGDAPATPROJ proj #-}- {-# BUILTIN AGDAPATABSURD absurd #-}-- data Clause : Set where- clause : List (Arg Pattern) → Term → Clause- absurd-clause : List (Arg Pattern) → Clause-- {-# BUILTIN AGDACLAUSE Clause #-}- {-# BUILTIN AGDACLAUSECLAUSE clause #-}- {-# BUILTIN AGDACLAUSEABSURD absurd-clause #-}-- data FunDef : Set where- fun-def : Type → List Clause → FunDef-- {-# BUILTIN AGDAFUNDEF FunDef #-}- {-# BUILTIN AGDAFUNDEFCON fun-def #-}--* New reflection builtins for extended (pattern-matching) lambda.-- The AGDATERM data type has been augmented with a constructor-- AGDATERMEXTLAM : List AGDACLAUSE → List (ARG AGDATERM) → AGDATERM-- Absurd lambdas (λ ()) are quoted to extended lambdas with an absurd clause.--* Unquoting declarations.-- You can now define (recursive) functions by reflection using the new- unquoteDecl declaration-- unquoteDecl x = e-- Here e should have type AGDAFUNDEF and evaluate to a closed value. This value- is then spliced in as the definition of x. In the body e, x has type QNAME- which lets you splice in recursive definitions.-- Standard modifiers, such as fixity declarations, can be applied to x as- expected.--* Quoted levels-- Universe levels are now quoted properly instead of being quoted to- AGDASORTUNSUPPORTED. Setω still gets an unsupported sort, however.--* Module applicants can now be operator applications. Example:-- postulate- [_] : A -> B-- module M (b : B) where-- module N (a : A) = M [ a ]-- [See Issue 1245.]--* Minor change in module application semantics. [Issue 892]-- Previously re-exported functions were not redefined when instantiating a- module. For instance-- module A where f = ...- module B (X : Set) where- open A public- module C = B Nat-- In this example C.f would be an alias for A.f, so if both A and C were opened- f would not be ambiguous. However, this behaviour is not correct when A and B- share some module parameters (issue 892). To fix this C now defines its own- copy of f (which evaluates to A.f), which means that opening A and C results- in an ambiguous f.--Type checking-=============--* Recursive records need to be declared as either inductive or coinductive.- 'inductive' is no longer default for recursive records.- Examples:-- record _×_ (A B : Set) : Set where- constructor _,_- field- fst : A- snd : B-- record Tree (A : Set) : Set where- inductive- constructor tree- field- elem : A- subtrees : List (Tree A)-- record Stream (A : Set) : Set where- coinductive- constructor _::_- field- head : A- tail : Stream A-- If you are using old-style (musical) coinduction, a record may have- to be declared as inductive, paradoxically.-- record Stream (A : Set) : Set where- inductive -- YES, THIS IS INTENDED !- constructor _∷_- field- head : A- tail : ∞ (Stream A)-- This is because the ``coinduction'' happens in the use of `∞' and not- in the use of `record'.--Tools-=====--Emacs mode-------------* A new menu option "Display" can be used to display the version of- the running Agda process.--LaTeX-backend----------------* New experimental option ``references'' has been added. When specified,- i.e.:-- \usepackage[references]{agda}-- a new command called \AgdaRef is provided, which lets you reference- previously typeset commands, e.g.:-- Let us postulate \AgdaRef{apa}.-- \begin{code}- postulate- apa : Set- \end{code}-- Above ``apa'' will be typeset (highlighted) the same in the text as in- the code, provided that the LaTeX output is post-processed using- src/data/postprocess-latex.pl, e.g.:-- cp $(dirname $(dirname $(agda-mode locate)))/postprocess-latex.pl .- agda -i. --latex Example.lagda- cd latex/- perl ../postprocess-latex.pl Example.tex > Example.processed- mv Example.processed Example.tex- xelatex Example.tex-- Mix-fix and unicode should work as expected (unicode requires- XeLaTeX/LuaLaTeX), but there are limitations:-- + Overloading identifiers should be avoided, if multiples exist- \AgdaRef will typeset according to the first it finds.-- + Only the current module is used, should you need to reference- identifiers in other modules then you need to specify which other- module manually, i.e. \AgdaRef[module]{identifier}.----------------------------------------------------------------------------- Release notes for Agda 2 version 2.4.0.2---------------------------------------------------------------------------Important changes since 2.4.0.1:--* The Agda input mode now supports alphabetical super and subscripts,- in addition to the numerical ones that were already present.- [Issue 1240]--* New feature: Interactively split result.-- Make case (C-c C-c) with no variables given tries to split on the- result to introduce projection patterns. The hole needs to be of- record type, of course.-- test : {A B : Set} (a : A) (b : B) → A × B- test a b = ?-- Result-splitting ? will produce the new clauses:-- proj₁ (test a b) = ?- proj₂ (test a b) = ?-- If hole is of function type ending in a record type, the necessary- pattern variables will be introduced before the split. Thus, the- same result can be obtained by starting from:-- test : {A B : Set} (a : A) (b : B) → A × B- test = ?--* The so far undocumented ETA pragma now throws an error if applied to- definitions that are not records.-- ETA can be used to force eta-equality at recursive record types,- for which eta is not enabled automatically by Agda.- Here is such an example:-- mutual- data Colist (A : Set) : Set where- [] : Colist A- _∷_ : A → ∞Colist A → Colist A-- record ∞Colist (A : Set) : Set where- coinductive- constructor delay- field force : Colist A-- open ∞Colist-- {-# ETA ∞Colist #-}-- test : {A : Set} (x : ∞Colist A) → x ≡ delay (force x)- test x = refl-- Note: Unsafe use of ETA can make Agda loop, e.g. by triggering- infinite eta expansion!--* Bugs fixed (see https://code.google.com/p/agda/issues):- 1203- 1205- 1209- 1213- 1214- 1216- 1225- 1226- 1231- 1233- 1239- 1241- 1243----------------------------------------------------------------------------- Release notes for Agda 2 version 2.4.0.1---------------------------------------------------------------------------Important changes since 2.4.0:--* The option --compile-no-main has been renamed to --no-main.--* COMPILED_DATA pragmas can now be given for records.--* Various bug fixes.----------------------------------------------------------------------------- Release notes for Agda 2 version 2.4.0---------------------------------------------------------------------------Important changes since 2.3.2.2:--Installation and infrastructure-===============================--* A new module called Agda.Primitive has been introduced. This module- is available to all users, even if the standard library is not used.- Currently the module contains level primitives and their- representation in Haskell when compiling with MAlonzo:-- infixl 6 _⊔_-- postulate- Level : Set- lzero : Level- lsuc : (ℓ : Level) → Level- _⊔_ : (ℓ₁ ℓ₂ : Level) → Level-- {-# COMPILED_TYPE Level () #-}- {-# COMPILED lzero () #-}- {-# COMPILED lsuc (\_ -> ()) #-}- {-# COMPILED _⊔_ (\_ _ -> ()) #-}-- {-# BUILTIN LEVEL Level #-}- {-# BUILTIN LEVELZERO lzero #-}- {-# BUILTIN LEVELSUC lsuc #-}- {-# BUILTIN LEVELMAX _⊔_ #-}-- To bring these declarations into scope you can use a declaration- like the following one:-- open import Agda.Primitive using (Level; lzero; lsuc; _⊔_)-- The standard library reexports these primitives (using the names- zero and suc instead of lzero and lsuc) from the Level module.-- Existing developments using universe polymorphism might now trigger- the following error message:-- Duplicate binding for built-in thing LEVEL, previous binding to- .Agda.Primitive.Level-- To fix this problem, please remove the duplicate bindings.-- Technical details (perhaps relevant to those who build Agda- packages):-- The include path now always contains a directory <DATADIR>/lib/prim,- and this directory is supposed to contain a subdirectory Agda- containing a file Primitive.agda.-- The standard location of <DATADIR> is system- and- installation-specific. E.g., in a cabal --user installation of- Agda-2.3.4 on a standard single-ghc Linux system it would be- $HOME/.cabal/share/Agda-2.3.4 or something similar.-- The location of the <DATADIR> directory can be configured at- compile-time using Cabal flags (--datadir and --datasubdir).- The location can also be set at run-time, using the Agda_datadir- environment variable.--Pragmas and options-===================--* Pragma NO_TERMINATION_CHECK placed within a mutual block is now- applied to the whole mutual block (rather than being discarded- silently). Adding to the uses 1.-4. outlined in the release notes- for 2.3.2 we allow:-- 3a. Skipping an old-style mutual block: Somewhere within 'mutual'- block before a type signature or first function clause.-- mutual- {-# NO_TERMINATION_CHECK #-}- c : A- c = d-- d : A- d = c--* New option --no-pattern-matching-- Disables all forms of pattern matching (for the current file).- You can still import files that use pattern matching.--* New option -v profile:7-- Prints some stats on which phases Agda spends how much time.- (Number might not be very reliable, due to garbage collection- interruptions, and maybe due to laziness of Haskell.)--* New option --no-sized-types-- Option --sized-types is now default.- --no-sized-types will turn off an extra (inexpensive) analysis on- data types used for subtyping of sized types.--Language-========--* Experimental feature: quoteContext-- There is a new keyword 'quoteContext' that gives users access to the- list of names in the current local context. For instance:-- open import Data.Nat- open import Data.List- open import Reflection-- foo : ℕ → ℕ → ℕ- foo 0 m = 0- foo (suc n) m = quoteContext xs in ?-- In the remaining goal, the list xs will consist of two names, n and- m, corresponding to the two local variables. At the moment it is not- possible to access let bound variables -- this feature may be added- in the future.--* Experimental feature: Varying arity.- Function clauses may now have different arity, e.g.,-- Sum : ℕ → Set- Sum 0 = ℕ- Sum (suc n) = ℕ → Sum n-- sum : (n : ℕ) → ℕ → Sum n- sum 0 acc = acc- sum (suc n) acc m = sum n (m + acc)-- or,-- T : Bool → Set- T true = Bool- T false = Bool → Bool-- f : (b : Bool) → T b- f false true = false- f false false = true- f true = true-- This feature is experimental. Yet unsupported:- * Varying arity and 'with'.- * Compilation of functions with varying arity to Haskell, JS, or Epic.--* Experimental feature: copatterns. (Activated with option --copatterns)-- We can now define a record by explaining what happens if you project- the record. For instance:-- {-# OPTIONS --copatterns #-}-- record _×_ (A B : Set) : Set where- constructor _,_- field- fst : A- snd : B- open _×_-- pair : {A B : Set} → A → B → A × B- fst (pair a b) = a- snd (pair a b) = b-- swap : {A B : Set} → A × B → B × A- fst (swap p) = snd p- snd (swap p) = fst p-- swap3 : {A B C : Set} → A × (B × C) → C × (B × A)- fst (swap3 t) = snd (snd t)- fst (snd (swap3 t)) = fst (snd t)- snd (snd (swap3 t)) = fst t-- Taking a projection on the left hand side (lhs) is called a- projection pattern, applying to a pattern is called an application- pattern. (Alternative terms: projection/application copattern.)-- In the first example, the symbol 'pair', if applied to variable- patterns a and b and then projected via fst, reduces to a.- 'pair' by itself does not reduce.-- A typical application are coinductive records such as streams:-- record Stream (A : Set) : Set where- coinductive- field- head : A- tail : Stream A- open Stream-- repeat : {A : Set} (a : A) -> Stream A- head (repeat a) = a- tail (repeat a) = repeat a-- Again, 'repeat a' by itself will not reduce, but you can take- a projection (head or tail) and then it will reduce to the- respective rhs. This way, we get the lazy reduction behavior- necessary to avoid looping corecursive programs.-- Application patterns do not need to be trivial (i.e., variable- patterns), if we mix with projection patterns. E.g., we can have-- nats : Nat -> Stream Nat- head (nats zero) = zero- tail (nats zero) = nats zero- head (nats (suc x)) = x- tail (nats (suc x)) = nats x-- Here is an example (not involving coinduction) which demostrates- records with fields of function type:-- -- The State monad-- record State (S A : Set) : Set where- constructor state- field- runState : S → A × S- open State-- -- The Monad type class-- record Monad (M : Set → Set) : Set1 where- constructor monad- field- return : {A : Set} → A → M A- _>>=_ : {A B : Set} → M A → (A → M B) → M B--- -- State is an instance of Monad- -- Demonstrates the interleaving of projection and application patterns-- stateMonad : {S : Set} → Monad (State S)- runState (Monad.return stateMonad a ) s = a , s- runState (Monad._>>=_ stateMonad m k) s₀ =- let a , s₁ = runState m s₀- in runState (k a) s₁-- module MonadLawsForState {S : Set} where-- open Monad (stateMonad {S})-- leftId : {A B : Set}(a : A)(k : A → State S B) →- (return a >>= k) ≡ k a- leftId a k = refl-- rightId : {A B : Set}(m : State S A) →- (m >>= return) ≡ m- rightId m = refl-- assoc : {A B C : Set}(m : State S A)(k : A → State S B)(l : B → State S C) →- ((m >>= k) >>= l) ≡ (m >>= λ a → (k a >>= l))- assoc m k l = refl-- Copatterns are yet experimental and the following does not work:-- * Copatterns and 'with' clauses.-- * Compilation of copatterns to Haskell, JS, or Epic.-- * Projections generated by- open R {{...}}- are not handled properly on lhss yet.-- * Conversion checking is slower in the presence of copatterns,- since stuck definitions of record type do no longer count- as neutral, since they can become unstuck by applying a projection.- Thus, comparing two neutrals currently requires comparing all- they projections, which repeats a lot of work.--* Top-level module no longer required.-- The top-level module can be omitted from an Agda file. The module name is- then inferred from the file name by dropping the path and the .agda- extension. So, a module defined in /A/B/C.agda would get the name C.-- You can also suppress only the module name of the top-level module by writing-- module _ where-- This works also for parameterised modules.--* Module parameters are now always hidden arguments in projections.- For instance:-- module M (A : Set) where-- record Prod (B : Set) : Set where- constructor _,_- field- fst : A- snd : B- open Prod public-- open M-- Now, the types of fst and snd are-- fst : {A : Set}{B : Set} → Prod A B → A- snd : {A : Set}{B : Set} → Prod A B → B-- Until 2.3.2, they were-- fst : (A : Set){B : Set} → Prod A B → A- snd : (A : Set){B : Set} → Prod A B → B-- This change is a step towards symmetry of constructors and projections.- (Constructors always took the module parameters as hidden arguments).--* Telescoping lets: Local bindings are now accepted in telescopes- of modules, function types, and lambda-abstractions.-- The syntax of telescopes as been extended to support 'let':-- id : (let ★ = Set) (A : ★) → A → A- id A x = x-- In particular one can now 'open' modules inside telescopes:-- module Star where- ★ : Set₁- ★ = Set-- module MEndo (let open Star) (A : ★) where- Endo : ★- Endo = A → A-- Finally a shortcut is provided for opening modules:-- module N (open Star) (A : ★) (open MEndo A) (f : Endo) where- ...-- The semantics of the latter is-- module _ where- open Star- module _ (A : ★) where- open MEndo A- module N (f : Endo) where- ...-- The semantics of telescoping lets in function types and lambda- abstractions is just expanding them into ordinary lets.--* More liberal left-hand sides in lets [Issue 1028]:-- You can now write left-hand sides with arguments also for let bindings- without a type signature. For instance,-- let f x = suc x in f zero-- Let bound functions still can't do pattern matching though.--* Ambiguous names in patterns are now optimistically resolved in favor- of constructors. [Issue 822] In particular, the following succeeds now:-- module M where-- data D : Set₁ where- [_] : Set → D-- postulate [_] : Set → Set-- open M-- Foo : _ → Set- Foo [ A ] = A--* Anonymous where-modules are opened public. [Issue 848]-- <clauses>- f args = rhs- module _ telescope where- body- <more clauses>-- means the following (not proper Agda code, since you cannot put a- module in-between clauses)-- <clauses>- module _ {arg-telescope} telescope where- body-- f args = rhs- <more clauses>-- Example:-- A : Set1- A = B module _ where- B : Set1- B = Set-- C : Set1- C = B--* Builtin ZERO and SUC have been merged with NATURAL.-- When binding the NATURAL builtin, ZERO and SUC are bound to the appropriate- constructors automatically. This means that instead of writing-- {-# BUILTIN NATURAL Nat #-}- {-# BUILTIN ZERO zero #-}- {-# BUILTIN SUC suc #-}-- you just write-- {-# BUILTIN NATURAL Nat #-}--* Pattern synonym can now have implicit arguments. [Issue 860]-- For example,-- pattern tail=_ {x} xs = x ∷ xs-- len : ∀ {A} → List A → Nat- len [] = 0- len (tail= xs) = 1 + len xs--* Syntax declarations can now have implicit arguments. [Issue 400]-- For example-- id : ∀ {a}{A : Set a} -> A -> A- id x = x-- syntax id {A} x = x ∈ A--* Minor syntax changes-- * -} is now parsed as end-comment even if no comment was begun.- As a consequence, the following definition gives a parse error-- f : {A- : Set} -> Set- f {A-} = A--- because Agda now sees ID(f) LBRACE ID(A) END-COMMENT, and no- longer ID(f) LBRACE ID(A-) RBRACE.-- The rational is that the previous lexing was to context-sensitive,- attempting to comment-out f using {- and -} lead to a parse error.-- * Fixities (binding strengths) can now be negative numbers as- well. [Issue 1109]-- infix -1 _myop_-- * Postulates are now allowed in mutual blocks. [Issue 977]-- * Empty where blocks are now allowed. [Issue 947]-- * Pattern synonyms are now allowed in parameterised modules. [Issue 941]-- * Empty hiding and renaming lists in module directives are now allowed.-- * Module directives using, hiding, renaming and public can now appear in- arbitrary order. Multiple using/hiding/renaming directives are allowed, but- you still cannot have both using and hiding (because that doesn't make- sense). [Issue 493]--Goal and error display-======================--* The error message "Refuse to construct infinite term" has been- removed, instead one gets unsolved meta variables. Reason: the- error was thrown over-eagerly. [Issue 795]--* If an interactive case split fails with message-- Since goal is solved, further case distinction is not supported;- try `Solve constraints' instead-- then the associated interaction meta is assigned to a solution.- Press C-c C-= (Show constraints) to view the solution and C-c C-s- (Solve constraints) to apply it. [Issue 289]--Type checking-=============--* [ issue 376 ] Implemented expansion of bound record variables during meta assignment.- Now Agda can solve for metas X that are applied to projected variables, e.g.:-- X (fst z) (snd z) = z-- X (fst z) = fst z-- Technically, this is realized by substituting (x , y) for z with fresh- bound variables x and y. Here the full code for the examples:-- record Sigma (A : Set)(B : A -> Set) : Set where- constructor _,_- field- fst : A- snd : B fst- open Sigma-- test : (A : Set) (B : A -> Set) ->- let X : (x : A) (y : B x) -> Sigma A B- X = _- in (z : Sigma A B) -> X (fst z) (snd z) ≡ z- test A B z = refl-- test' : (A : Set) (B : A -> Set) ->- let X : A -> A- X = _- in (z : Sigma A B) -> X (fst z) ≡ fst z- test' A B z = refl-- The fresh bound variables are named fst(z) and snd(z) and can appear- in error messages, e.g.:-- fail : (A : Set) (B : A -> Set) ->- let X : A -> Sigma A B- X = _- in (z : Sigma A B) -> X (fst z) ≡ z- fail A B z = refl-- results in error:-- Cannot instantiate the metavariable _7 to solution fst(z) , snd(z)- since it contains the variable snd(z) which is not in scope of the- metavariable or irrelevant in the metavariable but relevant in the- solution- when checking that the expression refl has type _7 A B (fst z) ≡ z--* Dependent record types and definitions by copatterns require- reduction with previous function clauses while checking the- current clause. [Issue 907]-- For a simple example, consider-- test : ∀ {A} → Σ Nat λ n → Vec A n- proj₁ test = zero- proj₂ test = []-- For the second clause, the lhs and rhs are typed as-- proj₂ test : Vec A (proj₁ test)- [] : Vec A zero-- In order for these types to match, we have to reduce the lhs type- with the first function clause.-- Note that termination checking comes after type checking, so be- careful to avoid non-termination! Otherwise, the type checker- might get into an infinite loop.--* The implementation of the primitive primTrustMe has changed.- It now only reduces to REFL if the two arguments x and y have- the same computational normal form. Before, it reduced when- x and y were definitionally equal, which included type-directed- equality laws such as eta-equality. Yet because reduction is- untyped, calling conversion from reduction lead to Agda crashes- [Issue 882].-- The amended description of primTrustMe is (cf. release notes for 2.2.6):-- primTrustMe : {A : Set} {x y : A} → x ≡ y-- Here _≡_ is the builtin equality (see BUILTIN hooks for equality,- above).-- If x and y have the same computational normal form, then- primTrustMe {x = x} {y = y} reduces to refl.-- A note on primTrustMe's runtime behavior:- The MAlonzo compiler replaces all uses of primTrustMe with the- REFL builtin, without any check for definitional equality. Incorrect- uses of primTrustMe can potentially lead to segfaults or similar- problems of the compiled code.--* Implicit patterns of record type are now only eta-expanded if there- is a record constructor. [Issues 473, 635]-- data D : Set where- d : D-- data P : D → Set where- p : P d-- record Rc : Set where- constructor c- field f : D-- works : {r : Rc} → P (Rc.f r) → Set- works p = D-- This works since the implicit pattern {r} is eta-expanded to- {c x} which allows the type of p to reduce to P x and x to be- unified with d. The corresponding explicit version is:-- works' : (r : Rc) → P (Rc.f r) → Set- works' (c .d) p = D-- However, if the record constructor is removed, the same example will- fail:-- record R : Set where- field f : D-- fails : {r : R} → P (R.f r) → Set- fails p = D-- -- d != R.f r of type D- -- when checking that the pattern p has type P (R.f r)-- The error is justified since there is no pattern we could write down- for r. It would have to look like-- record { f = .d }-- but anonymous record patterns are not part of the language.--* Absurd lambdas at different source locations are no longer- different. [Issue 857]- In particular, the following code type-checks now:-- absurd-equality : _≡_ {A = ⊥ → ⊥} (λ()) λ()- absurd-equality = refl-- Which is a good thing!--* Printing of named implicit function types.-- When printing terms in a context with bound variables Agda renames new- bindings to avoid clashes with the previously bound names. For instance, if A- is in scope, the type (A : Set) → A is printed as (A₁ : Set) → A₁. However,- for implicit function types the name of the binding matters, since it can be- used when giving implicit arguments.-- For this situation, the following new syntax has been introduced:- {x = y : A} → B is an implicit function type whose bound variable (in scope- in B) is y, but where the name of the argument is x for the purposes of- giving it explicitly. For instance, with A in scope, the type {A : Set} → A- is now printed as {A = A₁ : Set} → A₁.-- This syntax is only used when printing and is currently not being parsed.--* Changed the semantics of --without-K. [Issue 712, Issue 865, Issue 1025]-- New specification of --without-K:-- When --without-K is enabled, the unification of indices for pattern matching- is restricted in two ways:-- 1. Reflexive equations of the form x == x are no longer solved, instead Agda- gives an error when such an equation is encountered.-- 2. When unifying two same-headed constructor forms 'c us' and 'c vs' of type- 'D pars ixs', the datatype indices ixs (but not the parameters) have to- be *self-unifiable*, i.e. unification of ixs with itself should succeed- positively. This is a nontrivial requirement because of point 1.-- Examples:-- * The J rule is accepted.-- J : {A : Set} (P : {x y : A} → x ≡ y → Set) →- (∀ x → P (refl x)) →- ∀ {x y} (x≡y : x ≡ y) → P x≡y- J P p (refl x) = p x-- This definition is accepted since unification of x with y doesn't require- deletion or injectivity.-- * The K rule is rejected.-- K : {A : Set} (P : {x : A} → x ≡ x → Set) →- (∀ x → P (refl {x = x})) →- ∀ {x} (x≡x : x ≡ x) → P x≡x- K P p refl = p _-- Definition is rejected with the following error:-- Cannot eliminate reflexive equation x = x of type A because K has- been disabled.- when checking that the pattern refl has type x ≡ x-- * Symmetry of the new criterion.-- test₁ : {k l m : ℕ} → k + l ≡ m → ℕ- test₁ refl = zero-- test₂ : {k l m : ℕ} → k ≡ l + m → ℕ- test₂ refl = zero-- Both versions are now accepted (previously only the first one was).-- * Handling of parameters.-- cons-injective : {A : Set} (x y : A) → (x ∷ []) ≡ (y ∷ []) → x ≡ y- cons-injective x .x refl = refl-- Parameters are not unified, so they are ignored by the new criterion.-- * A larger example: antisymmetry of ≤.-- data _≤_ : ℕ → ℕ → Set where- lz : (n : ℕ) → zero ≤ n- ls : (m n : ℕ) → m ≤ n → suc m ≤ suc n-- ≤-antisym : (m n : ℕ) → m ≤ n → n ≤ m → m ≡ n- ≤-antisym .zero .zero (lz .zero) (lz .zero) = refl- ≤-antisym .(suc m) .(suc n) (ls m n p) (ls .n .m q) =- cong suc (≤-antisym m n p q)-- * [ Issue 1025 ]-- postulate mySpace : Set- postulate myPoint : mySpace-- data Foo : myPoint ≡ myPoint → Set where- foo : Foo refl-- test : (i : foo ≡ foo) → i ≡ refl- test refl = {!!}-- When applying injectivity to the equation "foo ≡ foo" of type "Foo refl",- it is checked that the index refl of type "myPoint ≡ myPoint" is- self-unifiable. The equation "refl ≡ refl" again requires injectivity, so- now the index myPoint is checked for self-unifiability, hence the error:-- Cannot eliminate reflexive equation myPoint = myPoint of type- mySpace because K has been disabled.- when checking that the pattern refl has type foo ≡ foo--Termination checking-====================--* A buggy facility coined "matrix-shaped orders" that supported- uncurried functions (which take tuples of arguments instead of one- argument after another) has been removed from the termination- checker. [Issue 787]--* Definitions which fail the termination checker are not unfolded any- longer to avoid loops or stack overflows in Agda. However, the- termination checker for a mutual block is only invoked after- type-checking, so there can still be loops if you define a- non-terminating function. But termination checking now happens- before the other supplementary checks: positivity, polarity,- injectivity and projection-likeness.- Note that with the pragma {-# NO_TERMINATION_CHECK #-} you can make- Agda treat any function as terminating.--* Termination checking of functions defined by 'with' has been improved.-- Cases which previously required --termination-depth- to pass the termination checker (due to use of 'with') no longer- need the flag. For example-- merge : List A → List A → List A- merge [] ys = ys- merge xs [] = xs- merge (x ∷ xs) (y ∷ ys) with x ≤ y- merge (x ∷ xs) (y ∷ ys) | false = y ∷ merge (x ∷ xs) ys- merge (x ∷ xs) (y ∷ ys) | true = x ∷ merge xs (y ∷ ys)-- This failed to termination check previously, since the 'with' expands to an- auxiliary function merge-aux:-- merge-aux x y xs ys false = y ∷ merge (x ∷ xs) ys- merge-aux x y xs ys true = x ∷ merge xs (y ∷ ys)-- This function makes a call to merge in which the size of one of the arguments- is increasing. To make this pass the termination checker now inlines the- definition of merge-aux before checking, thus effectively termination- checking the original source program.-- As a result of this transformation doing 'with' on a variable no longer- preserves termination. For instance, this does not termination check:-- bad : Nat → Nat- bad n with n- ... | zero = zero- ... | suc m = bad m--* The performance of the termination checker has been improved. For- higher --termination-depth the improvement is significant.- While the default --termination-depth is still 1, checking with- higher --termination-depth should now be feasible.--Compiler backends-=================--* The MAlonzo compiler backend now has support for compiling modules- that are not full programs (i.e. don't have a main function). The- goal is that you can write part of a program in Agda and the rest in- Haskell, and invoke the Agda functions from the Haskell code. The- following features were added for this reason:-- * A new command-line option --compile-no-main: the command-- agda --compile-no-main Test.agda-- will compile Test.agda and all its dependencies to Haskell and- compile the resulting Haskell files with --make, but (unlike- --compile) not tell GHC to treat Test.hs as the main module. This- type of compilation can be invoked from emacs by customizing the- agda2-backend variable to value MAlonzoNoMain and then calling- "C-c C-x C-c" as before.-- * A new pragma COMPILED_EXPORT was added as part of the MAlonzo FFI.- If we have an Agda file containing the following:-- module A.B where-- test : SomeType- test = someImplementation-- {-# COMPILED_EXPORT test someHaskellId #-}-- then test will be compiled to a Haskell function called- someHaskellId in module MAlonzo.Code.A.B that can be invoked from- other Haskell code. Its type will be translated according to the- normal MAlonzo rules.--Tools-=====--Emacs mode-------------* A new goal command "Helper Function Type" (C-c C-h) has been added.-- If you write an application of an undefined function in a goal, the Helper- Function Type command will print the type that the function needs to have in- order for it to fit the goal. The type is also added to the Emacs kill-ring- and can be pasted into the buffer using C-y.-- The application must be of the form "f args" where f is the name of the- helper function you want to create. The arguments can use all the normal- features like named implicits or instance arguments.-- Example:-- Here's a start on a naive reverse on vectors:-- reverse : ∀ {A n} → Vec A n → Vec A n- reverse [] = []- reverse (x ∷ xs) = {!snoc (reverse xs) x!}-- Calling C-c C-h in the goal prints-- snoc : ∀ {A} {n} → Vec A n → A → Vec A (suc n)--* A new command "Explain why a particular name is in scope" (C-c C-w) has been- added. [Issue207]-- This command can be called from a goal or from the top-level and will as the- name suggests explain why a particular name is in scope.-- For each definition or module that the given name can refer to a trace is- printed of all open statements and module applications leading back to the- original definition of the name.-- For example, given-- module A (X : Set₁) where- data Foo : Set where- mkFoo : Foo- module B (Y : Set₁) where- open A Y public- module C = B Set- open C-- Calling C-c C-w on mkFoo at the top-level prints-- mkFoo is in scope as- * a constructor Issue207.C._.Foo.mkFoo brought into scope by- - the opening of C at Issue207.agda:13,6-7- - the application of B at Issue207.agda:11,12-13- - the application of A at Issue207.agda:9,8-9- - its definition at Issue207.agda:6,5-10-- This command is useful if Agda complains about an ambiguous name and you need- to figure out how to hide the undesired interpretations.--* Improvements to the "make case" command (C-c C-c)-- - One can now also split on hidden variables, using the name- (starting with .) with which they are printed.- Use C-c C-, to see all variables in context.-- - Concerning the printing of generated clauses:-- * Uses named implicit arguments to improve readability.-- * Picks explicit occurrences over implicit ones when there is a choice of- binding site for a variable.-- * Avoids binding variables in implicit positions by replacing dot patterns- that uses them by wildcards (._).--* Key bindings for lots of "mathematical" characters (examples: 𝐴𝑨𝒜𝓐𝔄)- have been added to the Agda input method.- Example: type \MiA\MIA\McA\MCA\MfA to get 𝐴𝑨𝒜𝓐𝔄.-- Note: \McB does not exist in unicode (as well as others in that style),- but the \MC (bold) alphabet is complete.--* Key bindings for "blackboard bold" B (𝔹) and 0-9 (𝟘-𝟡) have been added- to the Agda input method (\bb and \b[0-9]).--* Key bindings for controlling simplification/normalisation:-- [TODO: Simplification should be explained somewhere.]-- Commands like "Goal type and context" (C-c C-,) could previously be- invoked in two ways. By default the output was normalised, but if a- prefix argument was used (for instance via C-u C-c C-,), then no- explicit normalisation was performed. Now there are three options:-- * By default (C-c C-,) the output is simplified.-- * If C-u is used exactly once (C-u C-c C-,), then the result is- neither (explicitly) normalised nor simplified.-- * If C-u is used twice (C-u C-u C-c C-,), then the result is- normalised.-- [TODO: As part of the release of Agda 2.3.4 the key binding page on- the wiki should be updated.]--LaTeX-backend----------------* Two new color scheme options were added to agda.sty:-- \usepackage[bw]{agda}, which highlights in black and white;- \usepackage[conor]{agda}, which highlights using Conor's colors.-- The default (no options passed) is to use the standard colors.--* If agda.sty cannot be found by the latex environment, it is now- copied into the latex output directory ('latex' by default) instead- of the working directory. This means that the commands needed to- produce a PDF now is-- agda --latex -i . <file>.lagda- cd latex- pdflatex <file>.tex--* The LaTeX-backend has been made more tool agnostic, in particular- XeLaTeX and LuaLaTeX should now work. Here is a small example- (test/latex-backend/succeed/UnicodeInput.lagda):-- \documentclass{article}- \usepackage{agda}- \begin{document}-- \begin{code}- data αβγδεζθικλμνξρστυφχψω : Set₁ where-- postulate- →⇒⇛⇉⇄↦⇨↠⇀⇁ : Set- \end{code}-- \[- ∀X [ ∅ ∉ X ⇒ ∃f:X ⟶ ⋃ X\ ∀A ∈ X (f(A) ∈ A) ]- \]- \end{document}-- Compiled as follows, it should produce a nice looking PDF (tested with- TeX Live 2012):-- agda --latex <file>.lagda- cd latex- xelatex <file>.tex (or lualatex <file>.tex)-- If symbols are missing or xelatex/lualatex complains about the font- missing, try setting a different font using:-- \setmathfont{<math-font>}-- Use the fc-list tool to list available fonts.--* Add experimental support for hyperlinks to identifiers-- If the hyperref latex package is loaded before the agda package and- the links option is passed to the agda package, then the agda package- provides a function called \AgdaTarget. Identifiers which have been- declared targets, by the user, will become clickable hyperlinks in the- rest of the document. Here is a small example- (test/latex-backend/succeed/Links.lagda):-- \documentclass{article}- \usepackage{hyperref}- \usepackage[links]{agda}- \begin{document}-- \AgdaTarget{ℕ}- \AgdaTarget{zero}- \begin{code}- data ℕ : Set where- zero : ℕ- suc : ℕ → ℕ- \end{code}-- See next page for how to define \AgdaFunction{two} (doesn't turn into a- link because the target hasn't been defined yet). We could do it- manually though; \hyperlink{two}{\AgdaDatatype{two}}.-- \newpage-- \AgdaTarget{two}- \hypertarget{two}{}- \begin{code}- two : ℕ- two = suc (suc zero)- \end{code}-- \AgdaInductiveConstructor{zero} is of type- \AgdaDatatype{ℕ}. \AgdaInductiveConstructor{suc} has not been defined to- be a target so it doesn't turn into a link.-- \newpage-- Now that the target for \AgdaFunction{two} has been defined the link- works automatically.-- \begin{code}- data Bool : Set where- true false : Bool- \end{code}-- The AgdaTarget command takes a list as input, enabling several- targets to be specified as follows:-- \AgdaTarget{if, then, else, if\_then\_else\_}- \begin{code}- if_then_else_ : {A : Set} → Bool → A → A → A- if true then t else f = t- if false then t else f = f- \end{code}-- \newpage-- Mixfix identifier need their underscores escaped:- \AgdaFunction{if\_then\_else\_}.-- \end{document}-- The boarders around the links can be suppressed using hyperref's- hidelinks option:-- \usepackage[hidelinks]{hyperref}-- Note that the current approach to links does not keep track of scoping- or types, and hence overloaded names might create links which point to- the wrong place. Therefore it is recommended to not overload names- when using the links option at the moment, this might get fixed in the- future.----------------------------------------------------------------------------- Release notes for Agda 2 version 2.3.2.2---------------------------------------------------------------------------Important changes since 2.3.2.1:--* Fixed a bug that sometimes made it tricky to use the Emacs mode on- Windows [issue 757].--* Made Agda build with newer versions of some libraries.--* Fixed a bug that caused ambiguous parse error messages [issue 147].----------------------------------------------------------------------------- Release notes for Agda 2 version 2.3.2.1---------------------------------------------------------------------------Important changes since 2.3.2:--Installation-============--* Made it possible to compile Agda with more recent versions of- hashable, QuickCheck and Win32.--* Excluded mtl-2.1.--Type checking-=============--* Fixed bug in the termination checker (issue 754).----------------------------------------------------------------------------- Release notes for Agda 2 version 2.3.2---------------------------------------------------------------------------Important changes since 2.3.0:--Installation-============--* The Agda-executable package has been removed.-- The executable is now provided as part of the Agda package.--* The Emacs mode no longer depends on haskell-mode or GHCi.--* Compilation of Emacs mode Lisp files.-- You can now compile the Emacs mode Lisp files by running "agda-mode- compile". This command is run by "make install".-- Compilation can, in some cases, give a noticeable speedup.-- WARNING: If you reinstall the Agda mode without recompiling the- Emacs Lisp files, then Emacs may continue using the old, compiled- files.--Pragmas and options-===================--* The --without-K check now reconstructs constructor parameters.-- New specification of --without-K:-- If the flag is activated, then Agda only accepts certain- case-splits. If the type of the variable to be split is D pars ixs,- where D is a data (or record) type, pars stands for the parameters,- and ixs the indices, then the following requirements must be- satisfied:-- * The indices ixs must be applications of constructors (or literals)- to distinct variables. Constructors are usually not applied to- parameters, but for the purposes of this check constructor- parameters are treated as other arguments.-- * These distinct variables must not be free in pars.--* Irrelevant arguments are printed as _ by default now. To turn on- printing of irrelevant arguments, use option-- --show-irrelevant--* New: Pragma NO_TERMINATION_CHECK to switch off termination checker- for individual function definitions and mutual blocks.-- The pragma must precede a function definition or a mutual block.- Examples (see test/succeed/NoTerminationCheck.agda):-- 1. Skipping a single definition: before type signature.-- {-# NO_TERMINATION_CHECK #-}- a : A- a = a-- 2. Skipping a single definition: before first clause.-- b : A- {-# NO_TERMINATION_CHECK #-}- b = b-- 3. Skipping an old-style mutual block: Before 'mutual' keyword.-- {-# NO_TERMINATION_CHECK #-}- mutual- c : A- c = d-- d : A- d = c-- 4. Skipping a new-style mutual block: Anywhere before a type- signature or first function clause in the block-- i : A- j : A-- i = j- {-# NO_TERMINATION_CHECK #-}- j = i-- The pragma cannot be used in --safe mode.--Language-========--* Let binding record patterns-- record _×_ (A B : Set) : Set where- constructor _,_- field- fst : A- snd : B- open _×_-- let (x , (y , z)) = t- in u-- will now be interpreted as-- let x = fst t- y = fst (snd t)- z = snd (snd t)- in u-- Note that the type of t needs to be inferable. If you need to provide- a type signature, you can write the following:-- let a : ...- a = t- (x , (y , z)) = a- in u--* Pattern synonyms-- A pattern synonym is a declaration that can be used on the left hand- side (when pattern matching) as well as the right hand side (in- expressions). For example:-- pattern z = zero- pattern ss x = suc (suc x)-- f : ℕ -> ℕ- f z = z- f (suc z) = ss z- f (ss n) = n-- Pattern synonyms are implemented by substitution on the abstract- syntax, so definitions are scope-checked but not type-checked. They- are particularly useful for universe constructions.--* Qualified mixfix operators-- It is now possible to use a qualified mixfix operator by qualifying the first- part of the name. For instance-- import Data.Nat as Nat- import Data.Bool as Bool-- two = Bool.if true then 1 Nat.+ 1 else 0--* Sections [Issue 735]. Agda now parses anonymous modules as sections:-- module _ {a} (A : Set a) where-- data List : Set a where- [] : List- _∷_ : (x : A) (xs : List) → List-- module _ {a} {A : Set a} where-- _++_ : List A → List A → List A- [] ++ ys = ys- (x ∷ xs) ++ ys = x ∷ (xs ++ ys)-- test : List Nat- test = (5 ∷ []) ++ (3 ∷ [])-- In general, now the syntax-- module _ parameters where- declarations-- is accepted and has the same effect as-- private- module M parameters where- declarations- open M public-- for a fresh name M.--* Instantiating a module in an open import statement [Issue 481]. Now accepted:-- open import Path.Module args [using/hiding/renaming (...)]-- This only brings the imported identifiers from Path.Module into scope,- not the module itself! Consequently, the following is pointless, and raises- an error:-- import Path.Module args [using/hiding/renaming (...)]-- You can give a private name M to the instantiated module via-- import Path.Module args as M [using/hiding/renaming (...)]- open import Path.Module args as M [using/hiding/renaming (...)]-- Try to avoid 'as' as part of the arguments. 'as' is not a keyword;- the following can be legal, although slightly obfuscated Agda code:-- open import as as as as as as--* Implicit module parameters can be given by name. E.g.-- open M {namedArg = bla}-- This feature has been introduced in Agda 2.3.0 already.--* Multiple type signatures sharing a same type can now be written as a single- type signature.-- one two : ℕ- one = suc zero- two = suc one--Goal and error display-======================--* Meta-variables that were introduced by hidden argument `arg' are now- printed as _arg_number instead of just _number. [Issue 526]--* Agda expands identifiers in anonymous modules when printing.- Should make some goals nicer to read. [Issue 721]--* When a module identifier is ambiguous, Agda tells you if one- of them is a data type module. [Issues 318, 705]--Type checking-=============--* Improved coverage checker. The coverage checker splits on- arguments that have constructor or literal pattern, committing- to the left-most split that makes progress.- Consider the lookup function for vectors:-- data Fin : Nat → Set where- zero : {n : Nat} → Fin (suc n)- suc : {n : Nat} → Fin n → Fin (suc n)-- data Vec (A : Set) : Nat → Set where- [] : Vec A zero- _∷_ : {n : Nat} → A → Vec A n → Vec A (suc n)-- _!!_ : {A : Set}{n : Nat} → Vec A n → Fin n → A- (x ∷ xs) !! zero = x- (x ∷ xs) !! suc i = xs !! i-- In Agda up to 2.3.0, this definition is rejected unless we add- an absurd clause-- [] !! ()-- This is because the coverage checker committed on splitting- on the vector argument, even though this inevitably lead to- failed coverage, because a case for the empty vector [] is missing.-- The improvement to the coverage checker consists on committing- only on splits that have a chance of covering, since all possible- constructor patterns are present. Thus, Agda will now split- first on the Fin argument, since cases for both zero and suc are- present. Then, it can split on the Vec argument, since the- empty vector is already ruled out by instantiating n to a suc _.--* Instance arguments resolution will now consider candidates which- still expect hidden arguments. For example:-- record Eq (A : Set) : Set where- field eq : A → A → Bool-- open Eq {{...}}-- eqFin : {n : ℕ} → Eq (Fin n)- eqFin = record { eq = primEqFin }-- testFin : Bool- testFin = eq fin1 fin2-- The type-checker will now resolve the instance argument of the eq- function to eqFin {_}. This is only done for hidden arguments, not- instance arguments, so that the instance search stays non-recursive.--* Constraint solving: Upgraded Miller patterns to record patterns. [Issue 456]-- Agda now solves meta-variables that are applied to record patterns.- A typical (but here, artificial) case is:-- record Sigma (A : Set)(B : A -> Set) : Set where- constructor _,_- field- fst : A- snd : B fst-- test : (A : Set)(B : A -> Set) ->- let X : Sigma A B -> Sigma A B- X = _- in (x : A)(y : B x) -> X (x , y) ≡ (x , y)- test A B x y = refl-- This yields a constraint of the form-- _X A B (x , y) := t[x,y]-- (with t[x,y] = (x, y)) which is not a Miller pattern.- However, Agda now solves this as-- _X A B z := t[fst z,snd z].--* Changed: solving recursive constraints. [Issue 585]-- Until 2.3.0, Agda sometimes inferred values that did not pass the- termination checker later, or would even make Agda loop. To prevent this,- the occurs check now also looks into the definitions of the current mutual- block, to avoid constructing recursive solutions. As a consequence, also- terminating recursive solutions are no longer found automatically.-- This effects a programming pattern where the recursively computed- type of a recursive function is left to Agda to solve.-- mutual-- T : D -> Set- T pattern1 = _- T pattern2 = _-- f : (d : D) -> T d- f pattern1 = rhs1- f pattern2 = rhs2-- This might no longer work from now on.- See examples test/fail/Issue585*.agda--* Less eager introduction of implicit parameters. [Issue 679]-- Until Agda 2.3.0, trailing hidden parameters were introduced eagerly- on the left hand side of a definition. For instance, one could not- write-- test : {A : Set} -> Set- test = \ {A} -> A-- because internally, the hidden argument {A : Set} was added to the- left-hand side, yielding-- test {_} = \ {A} -> A-- which raised a type error. Now, Agda only introduces the trailing- implicit parameters it has to, in order to maintain uniform function- arity. For instance, in-- test : Bool -> {A B C : Set} -> Set- test true {A} = A- test false {B = B} = B-- Agda will introduce parameters A and B in all clauses, but not C,- resulting in-- test : Bool -> {A B C : Set} -> Set- test true {A} {_} = A- test false {_} {B = B} = B-- Note that for checking where-clauses, still all hidden trailing- parameters are in scope. For instance:-- id : {i : Level}{A : Set i} -> A -> A- id = myId- where myId : forall {A} -> A -> A- myId x = x-- To be able to fill in the meta variable _1 in-- myId : {A : Set _1} -> A -> A-- the hidden parameter {i : Level} needs to be in scope.-- As a result of this more lazy introduction of implicit parameters,- the following code now passes.-- data Unit : Set where- unit : Unit-- T : Unit → Set- T unit = {u : Unit} → Unit-- test : (u : Unit) → T u- test unit with unit- ... | _ = λ {v} → v-- Before, Agda would eagerly introduce the hidden parameter {v} as- unnamed left-hand side parameter, leaving no way to refer to it.-- The related issue 655 has also been addressed. It is now possible- to make `synonym' definitions-- name = expression-- even when the type of expression begins with a hidden quantifier.- Simple example:-- id2 = id-- That resulted in unsolved metas until 2.3.0.--* Agda detects unused arguments and ignores them during equality- checking. [Issue 691, solves also issue 44.]-- Agda's polarity checker now assigns 'Nonvariant' to arguments- that are not actually used (except for absurd matches). If- f's first argument is Nonvariant, then f x is definitionally equal- to f y regardless of x and y. It is similar to irrelevance, but- does not require user annotation.-- For instance, unused module parameters do no longer get in the way:-- module M (x : Bool) where-- not : Bool → Bool- not true = false- not false = true-- open M true- open M false renaming (not to not′)-- test : (y : Bool) → not y ≡ not′ y- test y = refl-- Matching against record or absurd patterns does not count as `use',- so we get some form of proof irrelevance:-- data ⊥ : Set where- record ⊤ : Set where- constructor trivial-- data Bool : Set where- true false : Bool-- True : Bool → Set- True true = ⊤- True false = ⊥-- fun : (b : Bool) → True b → Bool- fun true trivial = true- fun false ()-- test : (b : Bool) → (x y : True b) → fun b x ≡ fun b y- test b x y = refl-- More examples in test/succeed/NonvariantPolarity.agda.-- Phantom arguments: Parameters of record and data types are considered- `used' even if they are not actually used. Consider:-- False : Nat → Set- False zero = ⊥- False (suc n) = False n-- module Invariant where- record Bla (n : Nat)(p : False n) : Set where-- module Nonvariant where- Bla : (n : Nat) → False n → Set- Bla n p = ⊤-- Even though record `Bla' does not use its parameters n and p, they- are considered as used, allowing "phantom type" techniques.-- In contrast, the arguments of function `Bla' are recognized as unused.- The following code type-checks if we open Invariant but leaves unsolved- metas if we open Nonvariant.-- drop-suc : {n : Nat}{p : False n} → Bla (suc n) p → Bla n p- drop-suc _ = _-- bla : (n : Nat) → {p : False n} → Bla n p → ⊥- bla zero {()} b- bla (suc n) b = bla n (drop-suc b)-- If `Bla' is considered invariant, the hidden argument in the recursive- call can be inferred to be `p'. If it is considered non-variant, then- `Bla n X = Bla n p' does not entail `X = p' and the hidden argument- remains unsolved. Since `bla' does not actually use its hidden argument,- its value is not important and it could be searched for.- Unfortunately, polarity analysis of `bla' happens only after type- checking, thus, the information that `bla' is non-variant in `p' is- not available yet when meta-variables are solved.- (See test/fail/BrokenInferenceDueToNonvariantPolarity.agda)--* Agda now expands simple definitions (one clause, terminating)- to check whether a function is constructor headed. [Issue 747]- For instance, the following now also works:-- MyPair : Set -> Set -> Set- MyPair A B = Pair A B-- Vec : Set -> Nat -> Set- Vec A zero = Unit- Vec A (suc n) = MyPair A (Vec A n)-- Here, Unit and Pair are data or record types.--Compiler backends-=================--* -Werror is now overridable.-- To enable compilation of Haskell modules containing warnings, the- -Werror flag for the MAlonzo backend has been made overridable. If,- for example, --ghc-flag=-Wwarn is passed when compiling, one can get- away with things like:-- data PartialBool : Set where- true : PartialBool-- {-# COMPILED_DATA PartialBool Bool True #-}-- The default behavior remains as it used to be and rejects the above- program.--Tools-=====--Emacs mode-------------* Asynchronous Emacs mode.-- One can now use Emacs while a buffer is type-checked. If the buffer- is edited while the type-checker runs, then syntax highlighting will- not be updated when type-checking is complete.--* Interactive syntax highlighting.-- The syntax highlighting is updated while a buffer is type-checked:-- • At first the buffer is highlighted in a somewhat crude way- (without go-to-definition information for overloaded- constructors).-- • If the highlighting level is "interactive", then the piece of code- that is currently being type-checked is highlighted as such. (The- default is "non-interactive".)-- • When a mutual block has been type-checked it is highlighted- properly (this highlighting includes warnings for potential- non-termination).-- The highlighting level can be controlled via the new configuration- variable agda2-highlight-level.--* Multiple case-splits can now be performed in one go.-- Consider the following example:-- _==_ : Bool → Bool → Bool- b₁ == b₂ = {!!}-- If you split on "b₁ b₂", then you get the following code:-- _==_ : Bool → Bool → Bool- true == true = {!!}- true == false = {!!}- false == true = {!!}- false == false = {!!}-- The order of the variables matters. Consider the following code:-- lookup : ∀ {a n} {A : Set a} → Vec A n → Fin n → A- lookup xs i = {!!}-- If you split on "xs i", then you get the following code:-- lookup : ∀ {a n} {A : Set a} → Vec A n → Fin n → A- lookup [] ()- lookup (x ∷ xs) zero = {!!}- lookup (x ∷ xs) (suc i) = {!!}-- However, if you split on "i xs", then you get the following code- instead:-- lookup : ∀ {a n} {A : Set a} → Vec A n → Fin n → A- lookup (x ∷ xs) zero = ?- lookup (x ∷ xs) (suc i) = ?-- This code is rejected by Agda 2.3.0, but accepted by 2.3.2 thanks- to improved coverage checking (see above).--* The Emacs mode now presents information about which module is- currently being type-checked.--* New global menu entry: Information about the character at point.-- If this entry is selected, then information about the character at- point is displayed, including (in many cases) information about how- to type the character.--* Commenting/uncommenting the rest of the buffer.-- One can now comment or uncomment the rest of the buffer by typing- C-c C-x M-; or by selecting the menu entry "Comment/uncomment the- rest of the buffer".--* The Emacs mode now uses the Agda executable instead of GHCi.-- The *ghci* buffer has been renamed to *agda2*.-- A new configuration variable has been introduced:- agda2-program-name, the name of the Agda executable (by default- agda).-- The variable agda2-ghci-options has been replaced by- agda2-program-args: extra arguments given to the Agda executable (by- default none).-- If you want to limit Agda's memory consumption you can add some- arguments to agda2-program-args, for instance +RTS -M1.5G -RTS.--* The Emacs mode no longer depends on haskell-mode.-- Users who have customised certain haskell-mode variables (such as- haskell-ghci-program-args) may want to update their configuration.--LaTeX-backend----------------An experimental LaTeX-backend which does precise highlighting a la the-HTML-backend and code alignment a la lhs2TeX has been added.--Here is a sample input literate Agda file:-- \documentclass{article}-- \usepackage{agda}-- \begin{document}-- The following module declaration will be hidden in the output.-- \AgdaHide{- \begin{code}- module M where- \end{code}- }-- Two or more spaces can be used to make the backend align stuff.-- \begin{code}- data ℕ : Set where- zero : ℕ- suc : ℕ → ℕ-- _+_ : ℕ → ℕ → ℕ- zero + n = n- suc m + n = suc (m + n)- \end{code}-- \end{document}--To produce an output PDF issue the following commands:-- agda --latex -i . <file>.lagda- pdflatex latex/<file>.tex--Only the top-most module is processed, like with lhs2tex and unlike with-the HTML-backend. If you want to process imported modules you have to-call agda --latex manually on each of those modules.--There are still issues related to formatting, see the bug tracker for-more information:-- https://code.google.com/p/agda/issues/detail?id=697--The default agda.sty might therefore change in backwards-incompatible-ways, as work proceeds in trying to resolve those problems.---Implemented features:-- * Two or more spaces can be used to force alignment of things, like- with lhs2tex. See example above.-- * The highlighting information produced by the type checker is used to- generate the output. For example, the data declaration in the example- above, produces:-- \AgdaKeyword{data} \AgdaDatatype{ℕ} \AgdaSymbol{:}- \AgdaPrimitiveType{Set} \AgdaKeyword{where}-- These latex commands are defined in agda.sty (which is imported by- \usepackage{agda}) and cause the highlighting.-- * The latex-backend checks if agda.sty is found by the latex- environment, if it isn't a default agda.sty is copied from Agda's- data-dir into the working directory (and thus made available to the- latex environment).-- If the default agda.sty isn't satisfactory (colors, fonts, spacing,- etc) then the user can modify it and make put it somewhere where the- latex environment can find it. Hopefully most aspects should be- modifiable via agda.sty rather than having to tweak the- implementation.-- * --latex-dir can be used to change the default output directory.----------------------------------------------------------------------------- Release notes for Agda 2 version 2.3.0---------------------------------------------------------------------------Important changes since 2.2.10:--Language-========--* New more liberal syntax for mutually recursive definitions.-- It is no longer necessary to use the 'mutual' keyword to define- mutually recursive functions or datatypes. Instead, it is enough to- declare things before they are used. Instead of-- mutual- f : A- f = a[f, g]-- g : B[f]- g = b[f, g]-- you can now write-- f : A- g : B[f]- f = a[f, g]- g = b[f, g].-- With the new style you have more freedom in choosing the order in- which things are type checked (previously type signatures were- always checked before definitions). Furthermore you can mix- arbitrary declarations, such as modules and postulates, with- mutually recursive definitions.-- For data types and records the following new syntax is used to- separate the declaration from the definition:-- -- Declaration.- data Vec (A : Set) : Nat → Set -- Note the absence of 'where'.-- -- Definition.- data Vec A where- [] : Vec A zero- _::_ : {n : Nat} → A → Vec A n → Vec A (suc n)-- -- Declaration.- record Sigma (A : Set) (B : A → Set) : Set-- -- Definition.- record Sigma A B where- constructor _,_- field fst : A- snd : B fst-- When making separated declarations/definitions private or abstract- you should attach the 'private' keyword to the declaration and the- 'abstract' keyword to the definition. For instance, a private,- abstract function can be defined as-- private- f : A- abstract- f = e-- Finally it may be worth noting that the old style of mutually- recursive definitions is still supported (it basically desugars into- the new style).--* Pattern matching lambdas.-- Anonymous pattern matching functions can be defined using the syntax-- \ { p11 .. p1n -> e1 ; ... ; pm1 .. pmn -> em }-- (where, as usual, \ and -> can be replaced by λ and →). Internally- this is translated into a function definition of the following form:-- .extlam p11 .. p1n = e1- ...- .extlam pm1 .. pmn = em-- This means that anonymous pattern matching functions are generative.- For instance, refl will not be accepted as an inhabitant of the type-- (λ { true → true ; false → false }) ≡- (λ { true → true ; false → false }),-- because this is equivalent to extlam1 ≡ extlam2 for some distinct- fresh names extlam1 and extlam2.-- Currently the 'where' and 'with' constructions are not allowed in- (the top-level clauses of) anonymous pattern matching functions.-- Examples:-- and : Bool → Bool → Bool- and = λ { true x → x ; false _ → false }-- xor : Bool → Bool → Bool- xor = λ { true true → false- ; false false → false- ; _ _ → true- }-- fst : {A : Set} {B : A → Set} → Σ A B → A- fst = λ { (a , b) → a }-- snd : {A : Set} {B : A → Set} (p : Σ A B) → B (fst p)- snd = λ { (a , b) → b }--* Record update syntax.-- Assume that we have a record type and a corresponding value:-- record MyRecord : Set where- field- a b c : ℕ-- old : MyRecord- old = record { a = 1; b = 2; c = 3 }-- Then we can update (some of) the record value's fields in the- following way:-- new : MyRecord- new = record old { a = 0; c = 5 }-- Here new normalises to record { a = 0; b = 2; c = 5 }. Any- expression yielding a value of type MyRecord can be used instead of- old.-- Record updating is not allowed to change types: the resulting value- must have the same type as the original one, including the record- parameters. Thus, the type of a record update can be inferred if the type- of the original record can be inferred.-- The record update syntax is expanded before type checking. When the- expression-- record old { upd-fields }-- is checked against a record type R, it is expanded to-- let r = old in record { new-fields },-- where old is required to have type R and new-fields is defined as- follows: for each field x in R,-- - if x = e is contained in upd-fields then x = e is included in- new-fields, and otherwise- - if x is an explicit field then x = R.x r is included in- new-fields, and- - if x is an implicit or instance field, then it is omitted from- new-fields.-- (Instance arguments are explained below.) The reason for treating- implicit and instance fields specially is to allow code like the- following:-- record R : Set where- field- {length} : ℕ- vec : Vec ℕ length- -- More fields…-- xs : R- xs = record { vec = 0 ∷ 1 ∷ 2 ∷ [] }-- ys = record xs { vec = 0 ∷ [] }-- Without the special treatment the last expression would need to- include a new binding for length (for instance "length = _").--* Record patterns which do not contain data type patterns, but which- do contain dot patterns, are no longer rejected.--* When the --without-K flag is used literals are now treated as- constructors.--* Under-applied functions can now reduce.-- Consider the following definition:-- id : {A : Set} → A → A- id x = x-- Previously the expression id would not reduce. This has been changed- so that it now reduces to λ x → x. Usually this makes little- difference, but it can be important in conjunction with 'with'. See- issue 365 for an example.--* Unused AgdaLight legacy syntax (x y : A; z v : B) for telescopes has- been removed.--Universe polymorphism------------------------* Universe polymorphism is now enabled by default.- Use --no-universe-polymorphism to disable it.--* Universe levels are no longer defined as a data type.-- The basic level combinators can be introduced in the following way:-- postulate- Level : Set- zero : Level- suc : Level → Level- max : Level → Level → Level-- {-# BUILTIN LEVEL Level #-}- {-# BUILTIN LEVELZERO zero #-}- {-# BUILTIN LEVELSUC suc #-}- {-# BUILTIN LEVELMAX max #-}--* The BUILTIN equality is now required to be universe-polymorphic.--* trustMe is now universe-polymorphic.--Meta-variables and unification---------------------------------* Unsolved meta-variables are now frozen after every mutual block.- This means that they cannot be instantiated by subsequent code. For- instance,-- one : Nat- one = _-- bla : one ≡ suc zero- bla = refl-- leads to an error now, whereas previously it lead to the- instantiation of _ with "suc zero". If you want to make use of the- old behaviour, put the two definitions in a mutual block.-- All meta-variables are unfrozen during interactive editing, so that- the user can fill holes interactively. Note that type-checking of- interactively given terms is not perfect: Agda sometimes refuses to- load a file, even though no complaints were raised during the- interactive construction of the file. This is because certain checks- (for instance, positivity) are only invoked when a file is loaded.--* Record types can now be inferred.-- If there is a unique known record type with fields matching the- fields in a record expression, then the type of the expression will- be inferred to be the record type applied to unknown parameters.-- If there is no known record type with the given fields the type- checker will give an error instead of producing lots of unsolved- meta-variables.-- Note that "known record type" refers to any record type in any- imported module, not just types which are in scope.--* The occurrence checker distinguishes rigid and strongly rigid- occurrences [Reed, LFMTP 2009; Abel & Pientka, TLCA 2011].-- The completeness checker now accepts the following code:-- h : (n : Nat) → n ≡ suc n → Nat- h n ()-- Internally this generates a constraint _n = suc _n where the- meta-variable _n occurs strongly rigidly, i.e. on a constructor path- from the root, in its own defining term tree. This is never- solvable.-- Weakly rigid recursive occurrences may have a solution [Jason Reed's- PhD thesis, page 106]:-- test : (k : Nat) →- let X : (Nat → Nat) → Nat- X = _- in- (f : Nat → Nat) → X f ≡ suc (f (X (λ x → k)))- test k f = refl-- The constraint _X k f = suc (f (_X k (λ x → k))) has the solution- _X k f = suc (f (suc k)), despite the recursive occurrence of _X.- Here _X is not strongly rigid, because it occurs under the bound- variable f. Previously Agda rejected this code; now it instead- complains about an unsolved meta-variable.--* Equation constraints involving the same meta-variable in the head- now trigger pruning [Pientka, PhD, Sec. 3.1.2; Abel & Pientka, TLCA- 2011]. Example:-- same : let X : A → A → A → A × A- X = _- in {x y z : A} → X x y y ≡ (x , y)- × X x x y ≡ X x y y- same = refl , refl-- The second equation implies that X cannot depend on its second- argument. After pruning the first equation is linear and can be- solved.--* Instance arguments.-- A new type of hidden function arguments has been added: instance- arguments. This new feature is based on influences from Scala's- implicits and Agda's existing implicit arguments.-- Plain implicit arguments are marked by single braces: {…}. Instance- arguments are instead marked by double braces: {{…}}. Example:-- postulate- A : Set- B : A → Set- a : A- f : {{a : A}} → B a-- Instead of the double braces you can use the symbols ⦃ and ⦄, but- these symbols must in many cases be surrounded by whitespace. (If- you are using Emacs and the Agda input method, then you can conjure- up the symbols by typing "\{{" and "\}}", respectively.)-- Instance arguments behave as ordinary implicit arguments, except for- one important aspect: resolution of arguments which are not provided- explicitly. For instance, consider the following code:-- test = f-- Here Agda will notice that f's instance argument was not provided- explicitly, and try to infer it. All definitions in scope at f's- call site, as well as all variables in the context, are considered.- If exactly one of these names has the required type (A), then the- instance argument will be instantiated to this name.-- This feature can be used as an alternative to Haskell type classes.- If we define-- record Eq (A : Set) : Set where- field equal : A → A → Bool,-- then we can define the following projection:-- equal : {A : Set} {{eq : Eq A}} → A → A → Bool- equal {{eq}} = Eq.equal eq-- Now consider the following expression:-- equal false false ∨ equal 3 4-- If the following Eq "instances" for Bool and ℕ are in scope, and no- others, then the expression is accepted:-- eq-Bool : Eq Bool- eq-Bool = record { equal = … }-- eq-ℕ : Eq ℕ- eq-ℕ = record { equal = … }-- A shorthand notation is provided to avoid the need to define- projection functions manually:-- module Eq-with-implicits = Eq {{...}}-- This notation creates a variant of Eq's record module, where the- main Eq argument is an instance argument instead of an explicit one.- It is equivalent to the following definition:-- module Eq-with-implicits {A : Set} {{eq : Eq A}} = Eq eq-- Note that the short-hand notation allows you to avoid naming the- "-with-implicits" module:-- open Eq {{...}}-- Instance argument resolution is not recursive. As an example,- consider the following "parametrised instance":-- eq-List : {A : Set} → Eq A → Eq (List A)- eq-List {A} eq = record { equal = eq-List-A }- where- eq-List-A : List A → List A → Bool- eq-List-A [] [] = true- eq-List-A (a ∷ as) (b ∷ bs) = equal a b ∧ eq-List-A as bs- eq-List-A _ _ = false-- Assume that the only Eq instances in scope are eq-List and eq-ℕ.- Then the following code does not type-check:-- test = equal (1 ∷ 2 ∷ []) (3 ∷ 4 ∷ [])-- However, we can make the code work by constructing a suitable- instance manually:-- test′ = equal (1 ∷ 2 ∷ []) (3 ∷ 4 ∷ [])- where eq-List-ℕ = eq-List eq-ℕ-- By restricting the "instance search" to be non-recursive we avoid- introducing a new, compile-time-only evaluation model to Agda.-- For more information about instance arguments, see Devriese &- Piessens [ICFP 2011]. Some examples are also available in the- examples/instance-arguments subdirectory of the Agda distribution.--Irrelevance--------------* Dependent irrelevant function types.-- Some examples illustrating the syntax of dependent irrelevant- function types:-- .(x y : A) → B .{x y z : A} → B- ∀ x .y → B ∀ x .{y} {z} .v → B-- The declaration-- f : .(x : A) → B[x]- f x = t[x]-- requires that x is irrelevant both in t[x] and in B[x]. This is- possible if, for instance, B[x] = B′ x, with B′ : .A → Set.-- Dependent irrelevance allows us to define the eliminator for the- Squash type:-- record Squash (A : Set) : Set where- constructor squash- field- .proof : A-- elim-Squash : {A : Set} (P : Squash A → Set)- (ih : .(a : A) → P (squash a)) →- (a⁻ : Squash A) → P a⁻- elim-Squash P ih (squash a) = ih a-- Note that this would not type-check with- (ih : (a : A) -> P (squash a)).--* Records with only irrelevant fields.-- The following now works:-- record IsEquivalence {A : Set} (_≈_ : A → A → Set) : Set where- field- .refl : Reflexive _≈_- .sym : Symmetric _≈_- .trans : Transitive _≈_-- record Setoid : Set₁ where- infix 4 _≈_- field- Carrier : Set- _≈_ : Carrier → Carrier → Set- .isEquivalence : IsEquivalence _≈_-- open IsEquivalence isEquivalence public-- Previously Agda complained about the application- IsEquivalence isEquivalence, because isEquivalence is irrelevant and- the IsEquivalence module expected a relevant argument. Now, when- record modules are generated for records consisting solely of- irrelevant arguments, the record parameter is made irrelevant:-- module IsEquivalence {A : Set} {_≈_ : A → A → Set}- .(r : IsEquivalence {A = A} _≈_) where- …--* Irrelevant things are no longer erased internally. This means that- they are printed as ordinary terms, not as "_" as before.--* The new flag --experimental-irrelevance enables irrelevant universe- levels and matching on irrelevant data when only one constructor is- available. These features are very experimental and likely to change- or disappear.--Reflection-------------* The reflection API has been extended to mirror features like- irrelevance, instance arguments and universe polymorphism, and to- give (limited) access to definitions. For completeness all the- builtins and primitives are listed below:-- -- Names.-- postulate Name : Set-- {-# BUILTIN QNAME Name #-}-- primitive- -- Equality of names.- primQNameEquality : Name → Name → Bool-- -- Is the argument visible (explicit), hidden (implicit), or an- -- instance argument?-- data Visibility : Set where- visible hidden instance : Visibility-- {-# BUILTIN HIDING Visibility #-}- {-# BUILTIN VISIBLE visible #-}- {-# BUILTIN HIDDEN hidden #-}- {-# BUILTIN INSTANCE instance #-}-- -- Arguments can be relevant or irrelevant.-- data Relevance : Set where- relevant irrelevant : Relevance-- {-# BUILTIN RELEVANCE Relevance #-}- {-# BUILTIN RELEVANT relevant #-}- {-# BUILTIN IRRELEVANT irrelevant #-}-- -- Arguments.-- data Arg A : Set where- arg : (v : Visibility) (r : Relevance) (x : A) → Arg A-- {-# BUILTIN ARG Arg #-}- {-# BUILTIN ARGARG arg #-}-- -- Terms.-- mutual- data Term : Set where- -- Variable applied to arguments.- var : (x : ℕ) (args : List (Arg Term)) → Term- -- Constructor applied to arguments.- con : (c : Name) (args : List (Arg Term)) → Term- -- Identifier applied to arguments.- def : (f : Name) (args : List (Arg Term)) → Term- -- Different kinds of λ-abstraction.- lam : (v : Visibility) (t : Term) → Term- -- Pi-type.- pi : (t₁ : Arg Type) (t₂ : Type) → Term- -- A sort.- sort : Sort → Term- -- Anything else.- unknown : Term-- data Type : Set where- el : (s : Sort) (t : Term) → Type-- data Sort : Set where- -- A Set of a given (possibly neutral) level.- set : (t : Term) → Sort- -- A Set of a given concrete level.- lit : (n : ℕ) → Sort- -- Anything else.- unknown : Sort-- {-# BUILTIN AGDASORT Sort #-}- {-# BUILTIN AGDATYPE Type #-}- {-# BUILTIN AGDATERM Term #-}- {-# BUILTIN AGDATERMVAR var #-}- {-# BUILTIN AGDATERMCON con #-}- {-# BUILTIN AGDATERMDEF def #-}- {-# BUILTIN AGDATERMLAM lam #-}- {-# BUILTIN AGDATERMPI pi #-}- {-# BUILTIN AGDATERMSORT sort #-}- {-# BUILTIN AGDATERMUNSUPPORTED unknown #-}- {-# BUILTIN AGDATYPEEL el #-}- {-# BUILTIN AGDASORTSET set #-}- {-# BUILTIN AGDASORTLIT lit #-}- {-# BUILTIN AGDASORTUNSUPPORTED unknown #-}-- postulate- -- Function definition.- Function : Set- -- Data type definition.- Data-type : Set- -- Record type definition.- Record : Set-- {-# BUILTIN AGDAFUNDEF Function #-}- {-# BUILTIN AGDADATADEF Data-type #-}- {-# BUILTIN AGDARECORDDEF Record #-}-- -- Definitions.-- data Definition : Set where- function : Function → Definition- data-type : Data-type → Definition- record′ : Record → Definition- constructor′ : Definition- axiom : Definition- primitive′ : Definition-- {-# BUILTIN AGDADEFINITION Definition #-}- {-# BUILTIN AGDADEFINITIONFUNDEF function #-}- {-# BUILTIN AGDADEFINITIONDATADEF data-type #-}- {-# BUILTIN AGDADEFINITIONRECORDDEF record′ #-}- {-# BUILTIN AGDADEFINITIONDATACONSTRUCTOR constructor′ #-}- {-# BUILTIN AGDADEFINITIONPOSTULATE axiom #-}- {-# BUILTIN AGDADEFINITIONPRIMITIVE primitive′ #-}-- primitive- -- The type of the thing with the given name.- primQNameType : Name → Type- -- The definition of the thing with the given name.- primQNameDefinition : Name → Definition- -- The constructors of the given data type.- primDataConstructors : Data-type → List Name-- As an example the expression-- primQNameType (quote zero)-- is definitionally equal to-- el (lit 0) (def (quote ℕ) [])-- (if zero is a constructor of the data type ℕ).--* New keyword: unquote.-- The construction "unquote t" converts a representation of an Agda term- to actual Agda code in the following way:-- 1. The argument t must have type Term (see the reflection API above).-- 2. The argument is normalised.-- 3. The entire construction is replaced by the normal form, which is- treated as syntax written by the user and type-checked in the- usual way.-- Examples:-- test : unquote (def (quote ℕ) []) ≡ ℕ- test = refl-- id : (A : Set) → A → A- id = unquote (lam visible (lam visible (var 0 [])))-- id-ok : id ≡ (λ A (x : A) → x)- id-ok = refl--* New keyword: quoteTerm.-- The construction "quoteTerm t" is similar to "quote n", but whereas- quote is restricted to names n, quoteTerm accepts terms t. The- construction is handled in the following way:-- 1. The type of t is inferred. The term t must be type-correct.-- 2. The term t is normalised.-- 3. The construction is replaced by the Term representation (see the- reflection API above) of the normal form. Any unsolved metavariables- in the term are represented by the "unknown" term constructor.-- Examples:-- test₁ : quoteTerm (λ {A : Set} (x : A) → x) ≡- lam hidden (lam visible (var 0 []))- test₁ = refl-- -- Local variables are represented as de Bruijn indices.- test₂ : (λ {A : Set} (x : A) → quoteTerm x) ≡ (λ x → var 0 [])- test₂ = refl-- -- Terms are normalised before being quoted.- test₃ : quoteTerm (0 + 0) ≡ con (quote zero) []- test₃ = refl--Compiler backends-=================--MAlonzo----------* The MAlonzo backend's FFI now handles universe polymorphism in a- better way.-- The translation of Agda types and kinds into Haskell now supports- universe-polymorphic postulates. The core changes are that the- translation of function types has been changed from-- T[[ Pi (x : A) B ]] =- if A has a Haskell kind then- forall x. () -> T[[ B ]]- else if x in fv B then- undef- else- T[[ A ]] -> T[[ B ]]-- into-- T[[ Pi (x : A) B ]] =- if x in fv B then- forall x. T[[ A ]] -> T[[ B ]] -- Note: T[[A]] not Unit.- else- T[[ A ]] -> T[[ B ]],-- and that the translation of constants (postulates, constructors and- literals) has been changed from-- T[[ k As ]] =- if COMPILED_TYPE k T then- T T[[ As ]]- else- undef-- into-- T[[ k As ]] =- if COMPILED_TYPE k T then- T T[[ As ]]- else if COMPILED k E then- ()- else- undef.-- For instance, assuming a Haskell definition-- type AgdaIO a b = IO b,-- we can set up universe-polymorphic IO in the following way:-- postulate- IO : ∀ {ℓ} → Set ℓ → Set ℓ- return : ∀ {a} {A : Set a} → A → IO A- _>>=_ : ∀ {a b} {A : Set a} {B : Set b} →- IO A → (A → IO B) → IO B-- {-# COMPILED_TYPE IO AgdaIO #-}- {-# COMPILED return (\_ _ -> return) #-}- {-# COMPILED _>>=_ (\_ _ _ _ -> (>>=)) #-}-- This is accepted because (assuming that the universe level type is- translated to the Haskell unit type "()")-- (\_ _ -> return)- : forall a. () -> forall b. () -> b -> AgdaIO a b- = T [[ ∀ {a} {A : Set a} → A → IO A ]]-- and-- (\_ _ _ _ -> (>>=))- : forall a. () -> forall b. () ->- forall c. () -> forall d. () ->- AgdaIO a c -> (c -> AgdaIO b d) -> AgdaIO b d- = T [[ ∀ {a b} {A : Set a} {B : Set b} →- IO A → (A → IO B) → IO B ]].--Epic-------* New Epic backend pragma: STATIC.-- In the Epic backend, functions marked with the STATIC pragma will be- normalised before compilation. Example usage:-- {-# STATIC power #-}-- power : ℕ → ℕ → ℕ- power 0 x = 1- power 1 x = x- power (suc n) x = power n x * x-- Occurrences of "power 4 x" will be replaced by "((x * x) * x) * x".--* Some new optimisations have been implemented in the Epic backend:-- - Removal of unused arguments.-- A worker/wrapper transformation is performed so that unused- arguments can be removed by Epic's inliner. For instance, the map- function is transformed in the following way:-- map_wrap : (A B : Set) → (A → B) → List A → List B- map_wrap A B f xs = map_work f xs-- map_work f [] = []- map_work f (x ∷ xs) = f x ∷ map_work f xs-- If map_wrap is inlined (which it will be in any saturated call),- then A and B disappear in the generated code.-- Unused arguments are found using abstract interpretation. The bodies- of all functions in a module are inspected to decide which variables- are used. The behaviour of postulates is approximated based on their- types. Consider return, for instance:-- postulate return : {A : Set} → A → IO A-- The first argument of return can be removed, because it is of type- Set and thus cannot affect the outcome of a program at runtime.-- - Injection detection.-- At runtime many functions may turn out to be inefficient variants of- the identity function. This is especially true after forcing.- Injection detection replaces some of these functions with more- efficient versions. Example:-- inject : {n : ℕ} → Fin n → Fin (1 + n)- inject {suc n} zero = zero- inject {suc n} (suc i) = suc (inject {n} i)-- Forcing removes the Fin constructors' ℕ arguments, so this function- is an inefficient identity function that can be replaced by the- following one:-- inject {_} x = x-- To actually find this function, we make the induction hypothesis- that inject is an identity function in its second argument and look- at the branches of the function to decide if this holds.-- Injection detection also works over data type barriers. Example:-- forget : {A : Set} {n : ℕ} → Vec A n → List A- forget [] = []- forget (x ∷ xs) = x ∷ forget xs-- Given that the constructor tags (in the compiled Epic code) for- Vec.[] and List.[] are the same, and that the tags for Vec._∷_ and- List._∷_ are also the same, this is also an identity function. We- can hence replace the definition with the following one:-- forget {_} xs = xs-- To get this to apply as often as possible, constructor tags are- chosen /after/ injection detection has been run, in a way to make as- many functions as possible injections.-- Constructor tags are chosen once per source file, so it may be- advantageous to define conversion functions like forget in the same- module as one of the data types. For instance, if Vec.agda imports- List.agda, then the forget function should be put in Vec.agda to- ensure that vectors and lists get the same tags (unless some other- injection function, which puts different constraints on the tags, is- prioritised).-- - Smashing.-- This optimisation finds types whose values are inferable at runtime:-- * A data type with only one constructor where all fields are- inferable is itself inferable.- * Set ℓ is inferable (as it has no runtime representation).-- A function returning an inferable data type can be smashed, which- means that it is replaced by a function which simply returns the- inferred value.-- An important example of an inferable type is the usual propositional- equality type (_≡_). Any function returning a propositional equality- can simply return the reflexivity constructor directly without- computing anything.-- This optimisation makes more arguments unused. It also makes the- Epic code size smaller, which in turn speeds up compilation.--JavaScript-------------* ECMAScript compiler backend.-- A new compiler backend is being implemented, targetting ECMAScript- (also known as JavaScript), with the goal of allowing Agda programs- to be run in browsers or other ECMAScript environments.-- The backend is still at an experimental stage: the core language is- implemented, but many features are still missing.-- The ECMAScript compiler can be invoked from the command line using- the flag --js:-- agda --js --compile-dir=<DIR> <FILE>.agda-- Each source <FILE>.agda is compiled into an ECMAScript target- <DIR>/jAgda.<TOP-LEVEL MODULE NAME>.js. The compiler can also be- invoked using the Emacs mode (the variable agda2-backend controls- which backend is used).-- Note that ECMAScript is a strict rather than lazy language. Since- Agda programs are total, this should not impact program semantics,- but it may impact their space or time usage.-- ECMAScript does not support algebraic datatypes or pattern-matching.- These features are translated to a use of the visitor pattern. For- instance, the standard library's List data type and null function- are translated into the following code:-- exports["List"] = {};- exports["List"]["[]"] = function (x0) {- return x0["[]"]();- };- exports["List"]["_∷_"] = function (x0) {- return function (x1) {- return function (x2) {- return x2["_∷_"](x0, x1);- };- };- };-- exports["null"] = function (x0) {- return function (x1) {- return function (x2) {- return x2({- "[]": function () {- return jAgda_Data_Bool["Bool"]["true"];- },- "_∷_": function (x3, x4) {- return jAgda_Data_Bool["Bool"]["false"];- }- });- };- };- };-- Agda records are translated to ECMAScript objects, preserving field- names.-- Top-level Agda modules are translated to ECMAScript modules,- following the common.js module specification. A top-level Agda- module "Foo.Bar" is translated to an ECMAScript module- "jAgda.Foo.Bar".-- The ECMAScript compiler does not compile to Haskell, so the pragmas- related to the Haskell FFI (IMPORT, COMPILED_DATA and COMPILED) are- not used by the ECMAScript backend. Instead, there is a COMPILED_JS- pragma which may be applied to any declaration. For postulates,- primitives, functions and values, it gives the ECMAScript code to be- emitted by the compiler. For data types, it gives a function which- is applied to a value of that type, and a visitor object. For- instance, a binding of natural numbers to ECMAScript integers- (ignoring overflow errors) is:-- data ℕ : Set where- zero : ℕ- suc : ℕ → ℕ-- {-# COMPILED_JS ℕ function (x,v) {- if (x < 1) { return v.zero(); } else { return v.suc(x-1); }- } #-}- {-# COMPILED_JS zero 0 #-}- {-# COMPILED_JS suc function (x) { return x+1; } #-}-- _+_ : ℕ → ℕ → ℕ- zero + n = n- suc m + n = suc (m + n)-- {-# COMPILED_JS _+_ function (x) { return function (y) {- return x+y; };- } #-}-- To allow FFI code to be optimised, the ECMAScript in a COMPILED_JS- declaration is parsed, using a simple parser that recognises a pure- functional subset of ECMAScript, consisting of functions, function- applications, return, if-statements, if-expressions,- side-effect-free binary operators (no precedence, left associative),- side-effect-free prefix operators, objects (where all member names- are quoted), field accesses, and string and integer literals.- Modules may be imported using the require("<module-id>") syntax: any- impure code, or code outside the supported fragment, can be placed- in a module and imported.--Tools-=====--* New flag --safe, which can be used to type-check untrusted code.-- This flag disables postulates, primTrustMe, and "unsafe" OPTION- pragmas, some of which are known to make Agda inconsistent.-- Rejected pragmas:-- --allow-unsolved-metas- --experimental-irrelevance- --guardedness-preserving-type-construtors- --injective-type-constructors- --no-coverage-check- --no-positivity-check- --no-termination-check- --sized-types- --type-in-type-- Note that, at the moment, it is not possible to define the universe- level or coinduction primitives when --safe is used (because they- must be introduced as postulates). This can be worked around by- type-checking trusted files in a first pass, without using --safe,- and then using --safe in a second pass. Modules which have already- been type-checked are not re-type-checked just because --safe is- used.--* Dependency graphs.-- The new flag --dependency-graph=FILE can be used to generate a DOT- file containing a module dependency graph. The generated file (FILE)- can be rendered using a tool like dot.--* The --no-unreachable-check flag has been removed.--* Projection functions are highlighted as functions instead of as- fields. Field names (in record definitions and record values) are- still highlighted as fields.--* Support for jumping to positions mentioned in the information- buffer has been added.--* The "make install" command no longer installs Agda globally (by- default).----------------------------------------------------------------------------- Release notes for Agda 2 version 2.2.10---------------------------------------------------------------------------Important changes since 2.2.8:--Language-----------* New flag: --without-K.-- This flag makes pattern matching more restricted. If the flag is- activated, then Agda only accepts certain case-splits. If the type- of the variable to be split is D pars ixs, where D is a data (or- record) type, pars stands for the parameters, and ixs the indices,- then the following requirements must be satisfied:-- * The indices ixs must be applications of constructors to distinct- variables.-- * These variables must not be free in pars.-- The intended purpose of --without-K is to enable experiments with a- propositional equality without the K rule. Let us define- propositional equality as follows:-- data _≡_ {A : Set} : A → A → Set where- refl : ∀ x → x ≡ x-- Then the obvious implementation of the J rule is accepted:-- J : {A : Set} (P : {x y : A} → x ≡ y → Set) →- (∀ x → P (refl x)) →- ∀ {x y} (x≡y : x ≡ y) → P x≡y- J P p (refl x) = p x-- The same applies to Christine Paulin-Mohring's version of the J rule:-- J′ : {A : Set} {x : A} (P : {y : A} → x ≡ y → Set) →- P (refl x) →- ∀ {y} (x≡y : x ≡ y) → P x≡y- J′ P p (refl x) = p-- On the other hand, the obvious implementation of the K rule is not- accepted:-- K : {A : Set} (P : {x : A} → x ≡ x → Set) →- (∀ x → P (refl x)) →- ∀ {x} (x≡x : x ≡ x) → P x≡x- K P p (refl x) = p x-- However, we have /not/ proved that activation of --without-K ensures- that the K rule cannot be proved in some other way.--* Irrelevant declarations.-- Postulates and functions can be marked as irrelevant by prefixing- the name with a dot when the name is declared. Example:-- postulate- .irrelevant : {A : Set} → .A → A-- Irrelevant names may only be used in irrelevant positions or in- definitions of things which have been declared irrelevant.-- The axiom irrelevant above can be used to define a projection from- an irrelevant record field:-- data Subset (A : Set) (P : A → Set) : Set where- _#_ : (a : A) → .(P a) → Subset A P-- elem : ∀ {A P} → Subset A P → A- elem (a # p) = a-- .certificate : ∀ {A P} (x : Subset A P) → P (elem x)- certificate (a # p) = irrelevant p-- The right-hand side of certificate is relevant, so we cannot define-- certificate (a # p) = p-- (because p is irrelevant). However, certificate is declared to be- irrelevant, so it can use the axiom irrelevant. Furthermore the- first argument of the axiom is irrelevant, which means that- irrelevant p is well-formed.-- As shown above the axiom irrelevant justifies irrelevant- projections. Previously no projections were generated for irrelevant- record fields, such as the field certificate in the following- record type:-- record Subset (A : Set) (P : A → Set) : Set where- constructor _#_- field- elem : A- .certificate : P elem-- Now projections are generated automatically for irrelevant fields- (unless the flag --no-irrelevant-projections is used). Note that- irrelevant projections are highly experimental.--* Termination checker recognises projections.-- Projections now preserve sizes, both in patterns and expressions.- Example:-- record Wrap (A : Set) : Set where- constructor wrap- field- unwrap : A-- open Wrap public-- data WNat : Set where- zero : WNat- suc : Wrap WNat → WNat-- id : WNat → WNat- id zero = zero- id (suc w) = suc (wrap (id (unwrap w)))-- In the structural ordering unwrap w ≤ w. This means that-- unwrap w ≤ w < suc w,-- and hence the recursive call to id is accepted.-- Projections also preserve guardedness.--Tools--------* Hyperlinks for top-level module names now point to the start of the- module rather than to the declaration of the module name. This- applies both to the Emacs mode and to the output of agda --html.--* Most occurrences of record field names are now highlighted as- "fields". Previously many occurrences were highlighted as- "functions".--* Emacs mode: It is no longer possible to change the behaviour of the- TAB key by customising agda2-indentation.--* Epic compiler backend.-- A new compiler backend is being implemented. This backend makes use- of Edwin Brady's language Epic- (http://www.cs.st-andrews.ac.uk/~eb/epic.php) and its compiler. The- backend should handle most Agda code, but is still at an- experimental stage: more testing is needed, and some things written- below may not be entirely true.-- The Epic compiler can be invoked from the command line using the- flag --epic:-- agda --epic --epic-flag=<EPIC-FLAG> --compile-dir=<DIR> <FILE>.agda-- The --epic-flag flag can be given multiple times; each flag is given- verbatim to the Epic compiler (in the given order). The resulting- executable is named after the main module and placed in the- directory specified by the --compile-dir flag (default: the project- root). Intermediate files are placed in a subdirectory called Epic.-- The backend requires that there is a definition named main. This- definition should be a value of type IO Unit, but at the moment this- is not checked (so it is easy to produce a program which segfaults).- Currently the backend represents actions of type IO A as functions- from Unit to A, and main is applied to the unit value.-- The Epic compiler compiles via C, not Haskell, so the pragmas- related to the Haskell FFI (IMPORT, COMPILED_DATA and COMPILED) are- not used by the Epic backend. Instead there is a new pragma- COMPILED_EPIC. This pragma is used to give Epic code for postulated- definitions (Epic code can in turn call C code). The form of the- pragma is {-# COMPILED_EPIC def code #-}, where def is the name of- an Agda postulate and code is some Epic code which should include- the function arguments, return type and function body. As an example- the IO monad can be defined as follows:-- postulate- IO : Set → Set- return : ∀ {A} → A → IO A- _>>=_ : ∀ {A B} → IO A → (A → IO B) → IO B-- {-# COMPILED_EPIC return (u : Unit, a : Any) -> Any =- ioreturn(a) #-}- {-# COMPILED_EPIC- _>>=_ (u1 : Unit, u2 : Unit, x : Any, f : Any) -> Any =- iobind(x,f) #-}-- Here ioreturn and iobind are Epic functions which are defined in the- file AgdaPrelude.e which is always included.-- By default the backend will remove so-called forced constructor- arguments (and case-splitting on forced variables will be- rewritten). This optimisation can be disabled by using the flag- --no-forcing.-- All data types which look like unary natural numbers after forced- constructor arguments have been removed (i.e. types with two- constructors, one nullary and one with a single recursive argument)- will be represented as "BigInts". This applies to the standard Fin- type, for instance.-- The backend supports Agda's primitive functions and the BUILTIN- pragmas. If the BUILTIN pragmas for unary natural numbers are used,- then some operations, like addition and multiplication, will use- more efficient "BigInt" operations.-- If you want to make use of the Epic backend you need to install some- dependencies, see the README.--* The Emacs mode can compile using either the MAlonzo or the Epic- backend. The variable agda2-backend controls which backend is used.----------------------------------------------------------------------------- Release notes for Agda 2 version 2.2.8---------------------------------------------------------------------------Important changes since 2.2.6:--Language-----------* Record pattern matching.-- It is now possible to pattern match on named record constructors.- Example:-- record Σ (A : Set) (B : A → Set) : Set where- constructor _,_- field- proj₁ : A- proj₂ : B proj₁-- map : {A B : Set} {P : A → Set} {Q : B → Set}- (f : A → B) → (∀ {x} → P x → Q (f x)) →- Σ A P → Σ B Q- map f g (x , y) = (f x , g y)-- The clause above is internally translated into the following one:-- map f g p = (f (Σ.proj₁ p) , g (Σ.proj₂ p))-- Record patterns containing data type patterns are not translated.- Example:-- add : ℕ × ℕ → ℕ- add (zero , n) = n- add (suc m , n) = suc (add (m , n))-- Record patterns which do not contain data type patterns, but which- do contain dot patterns, are currently rejected. Example:-- Foo : {A : Set} (p₁ p₂ : A × A) → proj₁ p₁ ≡ proj₁ p₂ → Set₁- Foo (x , y) (.x , y′) refl = Set--* Proof irrelevant function types.-- Agda now supports irrelevant non-dependent function types:-- f : .A → B-- This type implies that f does not depend computationally on its- argument. One intended use case is data structures with embedded- proofs, like sorted lists:-- postulate- _≤_ : ℕ → ℕ → Set- p₁ : 0 ≤ 1- p₂ : 0 ≤ 1-- data SList (bound : ℕ) : Set where- [] : SList bound- scons : (head : ℕ) →- .(head ≤ bound) →- (tail : SList head) →- SList bound-- The effect of the irrelevant type in the signature of scons is that- scons's second argument is never inspected after Agda has ensured- that it has the right type. It is even thrown away, leading to- smaller term sizes and hopefully some gain in efficiency. The- type-checker ignores irrelevant arguments when checking equality, so- two lists can be equal even if they contain different proofs:-- l₁ : SList 1- l₁ = scons 0 p₁ []-- l₂ : SList 1- l₂ = scons 0 p₂ []-- l₁≡l₂ : l₁ ≡ l₂- l₁≡l₂ = refl-- Irrelevant arguments can only be used in irrelevant contexts.- Consider the following subset type:-- data Subset (A : Set) (P : A → Set) : Set where- _#_ : (elem : A) → .(P elem) → Subset A P-- The following two uses are fine:-- elimSubset : ∀ {A C : Set} {P} →- Subset A P → ((a : A) → .(P a) → C) → C- elimSubset (a # p) k = k a p-- elem : {A : Set} {P : A → Set} → Subset A P → A- elem (x # p) = x-- However, if we try to project out the proof component, then Agda- complains that "variable p is declared irrelevant, so it cannot be- used here":-- prjProof : ∀ {A P} (x : Subset A P) → P (elem x)- prjProof (a # p) = p-- Matching against irrelevant arguments is also forbidden, except in- the case of irrefutable matches (record constructor patterns which- have been translated away). For instance, the match against the- pattern (p , q) here is accepted:-- elim₂ : ∀ {A C : Set} {P Q : A → Set} →- Subset A (λ x → Σ (P x) (λ _ → Q x)) →- ((a : A) → .(P a) → .(Q a) → C) → C- elim₂ (a # (p , q)) k = k a p q-- Absurd matches () are also allowed.-- Note that record fields can also be irrelevant. Example:-- record Subset (A : Set) (P : A → Set) : Set where- constructor _#_- field- elem : A- .proof : P elem-- Irrelevant fields are never in scope, neither inside nor outside the- record. This means that no record field can depend on an irrelevant- field, and furthermore projections are not defined for such fields.- Irrelevant fields can only be accessed using pattern matching, as in- elimSubset above.-- Irrelevant function types were added very recently, and have not- been subjected to much experimentation yet, so do not be surprised- if something is changed before the next release. For instance,- dependent irrelevant function spaces (.(x : A) → B) might be added- in the future.--* Mixfix binders.-- It is now possible to declare user-defined syntax that binds- identifiers. Example:-- postulate- State : Set → Set → Set- put : ∀ {S} → S → State S ⊤- get : ∀ {S} → State S S- return : ∀ {A S} → A → State S A- bind : ∀ {A B S} → State S B → (B → State S A) → State S A-- syntax bind e₁ (λ x → e₂) = x ← e₁ , e₂-- increment : State ℕ ⊤- increment = x ← get ,- put (1 + x)-- The syntax declaration for bind implies that x is in scope in e₂,- but not in e₁.-- You can give fixity declarations along with syntax declarations:-- infixr 40 bind- syntax bind e₁ (λ x → e₂) = x ← e₁ , e₂-- The fixity applies to the syntax, not the name; syntax declarations- are also restricted to ordinary, non-operator names. The following- declaration is disallowed:-- syntax _==_ x y = x === y-- Syntax declarations must also be linear; the following declaration- is disallowed:-- syntax wrong x = x + x-- Syntax declarations were added very recently, and have not been- subjected to much experimentation yet, so do not be surprised if- something is changed before the next release.--* Prop has been removed from the language.-- The experimental sort Prop has been disabled. Any program using Prop- should typecheck if Prop is replaced by Set₀. Note that Prop is still- a keyword.--* Injective type constructors off by default.-- Automatic injectivity of type constructors has been disabled (by- default). To enable it, use the flag --injective-type-constructors,- either on the command line or in an OPTIONS pragma. Note that this- flag makes Agda anti-classical and possibly inconsistent:-- Agda with excluded middle is inconsistent- http://thread.gmane.org/gmane.comp.lang.agda/1367-- See test/succeed/InjectiveTypeConstructors.agda for an example.--* Termination checker can count.-- There is a new flag --termination-depth=N accepting values N >= 1- (with N = 1 being the default) which influences the behavior of the- termination checker. So far, the termination checker has only- distinguished three cases when comparing the argument of a recursive- call with the formal parameter of the callee.-- < : the argument is structurally smaller than the parameter- = : they are equal- ? : the argument is bigger or unrelated to the parameter-- This behavior, which is still the default (N = 1), will not- recognise the following functions as terminating.-- mutual-- f : ℕ → ℕ- f zero = zero- f (suc zero) = zero- f (suc (suc n)) = aux n-- aux : ℕ → ℕ- aux m = f (suc m)-- The call graph-- f --(<)--> aux --(?)--> f-- yields a recursive call from f to f via aux where the relation of- call argument to callee parameter is computed as "unrelated"- (composition of < and ?).-- Setting N >= 2 allows a finer analysis: n has two constructors less- than suc (suc n), and suc m has one more than m, so we get the call- graph:-- f --(-2)--> aux --(+1)--> f-- The indirect call f --> f is now labeled with (-1), and the- termination checker can recognise that the call argument is- decreasing on this path.-- Setting the termination depth to N means that the termination- checker counts decrease up to N and increase up to N-1. The default,- N=1, means that no increase is counted, every increase turns to- "unrelated".-- In practice, examples like the one above sometimes arise when "with"- is used. As an example, the program-- f : ℕ → ℕ- f zero = zero- f (suc zero) = zero- f (suc (suc n)) with zero- ... | _ = f (suc n)-- is internally represented as-- mutual-- f : ℕ → ℕ- f zero = zero- f (suc zero) = zero- f (suc (suc n)) = aux n zero-- aux : ℕ → ℕ → ℕ- aux m k = f (suc m)-- Thus, by default, the definition of f using "with" is not accepted- by the termination checker, even though it looks structural (suc n- is a subterm of suc suc n). Now, the termination checker is- satisfied if the option "--termination-depth=2" is used.-- Caveats:-- - This is an experimental feature, hopefully being replaced by- something smarter in the near future.-- - Increasing the termination depth will quickly lead to very long- termination checking times. So, use with care. Setting termination- depth to 100 by habit, just to be on the safe side, is not a good- idea!-- - Increasing termination depth only makes sense for linear data- types such as ℕ and Size. For other types, increase cannot be- recognised. For instance, consider a similar example with lists.-- data List : Set where- nil : List- cons : ℕ → List → List-- mutual- f : List → List- f nil = nil- f (cons x nil) = nil- f (cons x (cons y ys)) = aux y ys-- aux : ℕ → List → List- aux z zs = f (cons z zs)-- Here the termination checker compares cons z zs to z and also to- zs. In both cases, the result will be "unrelated", no matter how- high we set the termination depth. This is because when comparing- cons z zs to zs, for instance, z is unrelated to zs, thus,- cons z zs is also unrelated to zs. We cannot say it is just "one- larger" since z could be a very large term. Note that this points- to a weakness of untyped termination checking.-- To regain the benefit of increased termination depth, we need to- index our lists by a linear type such as ℕ or Size. With- termination depth 2, the above example is accepted for vectors- instead of lists.--* The codata keyword has been removed. To use coinduction, use the- following new builtins: INFINITY, SHARP and FLAT. Example:-- {-# OPTIONS --universe-polymorphism #-}-- module Coinduction where-- open import Level-- infix 1000 ♯_-- postulate- ∞ : ∀ {a} (A : Set a) → Set a- ♯_ : ∀ {a} {A : Set a} → A → ∞ A- ♭ : ∀ {a} {A : Set a} → ∞ A → A-- {-# BUILTIN INFINITY ∞ #-}- {-# BUILTIN SHARP ♯_ #-}- {-# BUILTIN FLAT ♭ #-}-- Note that (non-dependent) pattern matching on SHARP is no longer- allowed.-- Note also that strange things might happen if you try to combine the- pragmas above with COMPILED_TYPE, COMPILED_DATA or COMPILED pragmas,- or if the pragmas do not occur right after the postulates.-- The compiler compiles the INFINITY builtin to nothing (more or- less), so that the use of coinduction does not get in the way of FFI- declarations:-- data Colist (A : Set) : Set where- [] : Colist A- _∷_ : (x : A) (xs : ∞ (Colist A)) → Colist A-- {-# COMPILED_DATA Colist [] [] (:) #-}--* Infinite types.-- If the new flag --guardedness-preserving-type-constructors is used,- then type constructors are treated as inductive constructors when we- check productivity (but only in parameters, and only if they are- used strictly positively or not at all). This makes examples such as- the following possible:-- data Rec (A : ∞ Set) : Set where- fold : ♭ A → Rec A-- -- Σ cannot be a record type below.-- data Σ (A : Set) (B : A → Set) : Set where- _,_ : (x : A) → B x → Σ A B-- syntax Σ A (λ x → B) = Σ[ x ∶ A ] B-- -- Corecursive definition of the W-type.-- W : (A : Set) → (A → Set) → Set- W A B = Rec (♯ (Σ[ x ∶ A ] (B x → W A B)))-- syntax W A (λ x → B) = W[ x ∶ A ] B-- sup : {A : Set} {B : A → Set} (x : A) (f : B x → W A B) → W A B- sup x f = fold (x , f)-- W-rec : {A : Set} {B : A → Set}- (P : W A B → Set) →- (∀ {x} {f : B x → W A B} → (∀ y → P (f y)) → P (sup x f)) →- ∀ x → P x- W-rec P h (fold (x , f)) = h (λ y → W-rec P h (f y))-- -- Induction-recursion encoded as corecursion-recursion.-- data Label : Set where- ′0 ′1 ′2 ′σ ′π ′w : Label-- mutual-- U : Set- U = Σ Label U′-- U′ : Label → Set- U′ ′0 = ⊤- U′ ′1 = ⊤- U′ ′2 = ⊤- U′ ′σ = Rec (♯ (Σ[ a ∶ U ] (El a → U)))- U′ ′π = Rec (♯ (Σ[ a ∶ U ] (El a → U)))- U′ ′w = Rec (♯ (Σ[ a ∶ U ] (El a → U)))-- El : U → Set- El (′0 , _) = ⊥- El (′1 , _) = ⊤- El (′2 , _) = Bool- El (′σ , fold (a , b)) = Σ[ x ∶ El a ] El (b x)- El (′π , fold (a , b)) = (x : El a) → El (b x)- El (′w , fold (a , b)) = W[ x ∶ El a ] El (b x)-- U-rec : (P : ∀ u → El u → Set) →- P (′1 , _) tt →- P (′2 , _) true →- P (′2 , _) false →- (∀ {a b x y} →- P a x → P (b x) y → P (′σ , fold (a , b)) (x , y)) →- (∀ {a b f} →- (∀ x → P (b x) (f x)) → P (′π , fold (a , b)) f) →- (∀ {a b x f} →- (∀ y → P (′w , fold (a , b)) (f y)) →- P (′w , fold (a , b)) (sup x f)) →- ∀ u (x : El u) → P u x- U-rec P P1 P2t P2f Pσ Pπ Pw = rec- where- rec : ∀ u (x : El u) → P u x- rec (′0 , _) ()- rec (′1 , _) _ = P1- rec (′2 , _) true = P2t- rec (′2 , _) false = P2f- rec (′σ , fold (a , b)) (x , y) = Pσ (rec _ x) (rec _ y)- rec (′π , fold (a , b)) f = Pπ (λ x → rec _ (f x))- rec (′w , fold (a , b)) (fold (x , f)) = Pw (λ y → rec _ (f y))-- The --guardedness-preserving-type-constructors extension is based on- a rather operational understanding of ∞/♯_; it's not yet clear if- this extension is consistent.--* Qualified constructors.-- Constructors can now be referred to qualified by their data type.- For instance, given-- data Nat : Set where- zero : Nat- suc : Nat → Nat-- data Fin : Nat → Set where- zero : ∀ {n} → Fin (suc n)- suc : ∀ {n} → Fin n → Fin (suc n)-- you can refer to the constructors unambiguously as Nat.zero,- Nat.suc, Fin.zero, and Fin.suc (Nat and Fin are modules containing- the respective constructors). Example:-- inj : (n m : Nat) → Nat.suc n ≡ suc m → n ≡ m- inj .m m refl = refl-- Previously you had to write something like-- inj : (n m : Nat) → _≡_ {Nat} (suc n) (suc m) → n ≡ m-- to make the type checker able to figure out that you wanted the- natural number suc in this case.--* Reflection.-- There are two new constructs for reflection:-- - quoteGoal x in e-- In e the value of x will be a representation of the goal type- (the type expected of the whole expression) as an element in a- datatype of Agda terms (see below). For instance,-- example : ℕ- example = quoteGoal x in {! at this point x = def (quote ℕ) [] !}-- - quote x : Name-- If x is the name of a definition (function, datatype, record, or- a constructor), quote x gives you the representation of x as a- value in the primitive type Name (see below).-- Quoted terms use the following BUILTINs and primitives (available- from the standard library module Reflection):-- -- The type of Agda names.-- postulate Name : Set-- {-# BUILTIN QNAME Name #-}-- primitive primQNameEquality : Name → Name → Bool-- -- Arguments.-- Explicit? = Bool-- data Arg A : Set where- arg : Explicit? → A → Arg A-- {-# BUILTIN ARG Arg #-}- {-# BUILTIN ARGARG arg #-}-- -- The type of Agda terms.-- data Term : Set where- var : ℕ → List (Arg Term) → Term- con : Name → List (Arg Term) → Term- def : Name → List (Arg Term) → Term- lam : Explicit? → Term → Term- pi : Arg Term → Term → Term- sort : Term- unknown : Term-- {-# BUILTIN AGDATERM Term #-}- {-# BUILTIN AGDATERMVAR var #-}- {-# BUILTIN AGDATERMCON con #-}- {-# BUILTIN AGDATERMDEF def #-}- {-# BUILTIN AGDATERMLAM lam #-}- {-# BUILTIN AGDATERMPI pi #-}- {-# BUILTIN AGDATERMSORT sort #-}- {-# BUILTIN AGDATERMUNSUPPORTED unknown #-}-- Reflection may be useful when working with internal decision- procedures, such as the standard library's ring solver.--* Minor record definition improvement.-- The definition of a record type is now available when type checking- record module definitions. This means that you can define things- like the following:-- record Cat : Set₁ where- field- Obj : Set- _=>_ : Obj → Obj → Set- -- ...-- -- not possible before:- op : Cat- op = record { Obj = Obj; _=>_ = λ A B → B => A }--Tools--------* The "Goal type and context" command now shows the goal type before- the context, and the context is shown in reverse order. The "Goal- type, context and inferred type" command has been modified in a- similar way.--* Show module contents command.-- Given a module name M the Emacs mode can now display all the- top-level modules and names inside M, along with types for the- names. The command is activated using C-c C-o or the menus.--* Auto command.-- A command which searches for type inhabitants has been added. The- command is invoked by pressing C-C C-a (or using the goal menu).- There are several flags and parameters, e.g. '-c' which enables- case-splitting in the search. For further information, see the Agda- wiki:-- http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.Auto--* HTML generation is now possible for a module with unsolved- meta-variables, provided that the --allow-unsolved-metas flag is- used.----------------------------------------------------------------------------- Release notes for Agda 2 version 2.2.6---------------------------------------------------------------------------Important changes since 2.2.4:--Language-----------* Universe polymorphism (experimental extension).-- To enable universe polymorphism give the flag- --universe-polymorphism on the command line or (recommended) as an- OPTIONS pragma.-- When universe polymorphism is enabled Set takes an argument which is- the universe level. For instance, the type of universe polymorphic- identity is-- id : {a : Level} {A : Set a} → A → A.-- The type Level is isomorphic to the unary natural numbers and should be- specified using the BUILTINs LEVEL, LEVELZERO, and LEVELSUC:-- data Level : Set where- zero : Level- suc : Level → Level-- {-# BUILTIN LEVEL Level #-}- {-# BUILTIN LEVELZERO zero #-}- {-# BUILTIN LEVELSUC suc #-}-- There is an additional BUILTIN LEVELMAX for taking the maximum of two- levels:-- max : Level → Level → Level- max zero m = m- max (suc n) zero = suc n- max (suc n) (suc m) = suc (max n m)-- {-# BUILTIN LEVELMAX max #-}-- The non-polymorphic universe levels Set, Set₁ and so on are sugar- for Set zero, Set (suc zero), etc.-- At present there is no automatic lifting of types from one level to- another. It can still be done (rather clumsily) by defining types- like the following one:-- data Lifted {a} (A : Set a) : Set (suc a) where- lift : A → Lifted A-- However, it is likely that automatic lifting is introduced at some- point in the future.--* Multiple constructors, record fields, postulates or primitives can- be declared using a single type signature:-- data Bool : Set where- false true : Bool-- postulate- A B : Set--* Record fields can be implicit:-- record R : Set₁ where- field- {A} : Set- f : A → A- {B C} D {E} : Set- g : B → C → E-- By default implicit fields are not printed.--* Record constructors can be defined:-- record Σ (A : Set) (B : A → Set) : Set where- constructor _,_- field- proj₁ : A- proj₂ : B proj₁-- In this example _,_ gets the type-- (proj₁ : A) → B proj₁ → Σ A B.-- For implicit fields the corresponding constructor arguments become- implicit.-- Note that the constructor is defined in the /outer/ scope, so any- fixity declaration has to be given outside the record definition.- The constructor is not in scope inside the record module.-- Note also that pattern matching for records has not been implemented- yet.--* BUILTIN hooks for equality.-- The data type-- data _≡_ {A : Set} (x : A) : A → Set where- refl : x ≡ x-- can be specified as the builtin equality type using the following- pragmas:-- {-# BUILTIN EQUALITY _≡_ #-}- {-# BUILTIN REFL refl #-}-- The builtin equality is used for the new rewrite construct and- the primTrustMe primitive described below.--* New rewrite construct.-- If eqn : a ≡ b, where _≡_ is the builtin equality (see above) you- can now write-- f ps rewrite eqn = rhs-- instead of-- f ps with a | eqn- ... | ._ | refl = rhs-- The rewrite construct has the effect of rewriting the goal and the- context by the given equation (left to right).-- You can rewrite using several equations (in sequence) by separating- them with vertical bars (|):-- f ps rewrite eqn₁ | eqn₂ | … = rhs-- It is also possible to add with clauses after rewriting:-- f ps rewrite eqns with e- ... | p = rhs-- Note that pattern matching happens before rewriting—if you want to- rewrite and then do pattern matching you can use a with after the- rewrite.-- See test/succeed/Rewrite.agda for some examples.+-- Release notes for Agda version 2.5.1+------------------------------------------------------------------------++Important changes since 2.4.2.5:++Documentation+=============++* There is now an official Agda User Manual:+ http://agda.readthedocs.org/en/stable/++Installation and infrastructure+===============================++* Builtins and primitives are now defined in a new set of modules available to+ all users, independent of any particular library. The modules are++ Agda.Builtin.Bool+ Agda.Builtin.Char+ Agda.Builtin.Coinduction+ Agda.Builtin.Equality+ Agda.Builtin.Float+ Agda.Builtin.FromNat+ Agda.Builtin.FromNeg+ Agda.Builtin.FromString+ Agda.Builtin.IO+ Agda.Builtin.Int+ Agda.Builtin.List+ Agda.Builtin.Nat+ Agda.Builtin.Reflection+ Agda.Builtin.Size+ Agda.Builtin.Strict+ Agda.Builtin.String+ Agda.Builtin.TrustMe+ Agda.Builtin.Unit++ The standard library reexports the primitives from the new modules.++ The Agda.Builtin modules are installed in the same way as Agda.Primitive,+ but unlike Agda.Primitive they are not loaded automatically.++Pragmas and options+===================++* Library management++ There is a new 'library' concept for managing include paths. A library+ consists of+ - a name,+ - a set of libraries it depends on, and+ - a set of include paths.++ A library is defined in a .agda-lib file using the following format:++ name: LIBRARY-NAME -- Comment+ depend: LIB1 LIB2+ LIB3+ LIB4+ include: PATH1+ PATH2+ PATH3++ Dependencies are library names, not paths to .agda-lib files, and+ include paths are relative to the location of the library-file.++ To be useable, a library file has to be listed (with its full path) in+ AGDA_DIR/libraries (or AGDA_DIR/libraries-VERSION, for a given Agda+ version). AGDA_DIR defaults to ~/.agda on unix-like systems+ and C:/Users/USERNAME/AppData/Roaming/agda or similar on Windows, and can be+ overridden by setting the AGDA_DIR environment variable.++ Environment variables in the paths (of the form $VAR or ${VAR}) are+ expanded. The location of the libraries file used can be overridden using the+ --library-file=FILE flag, although this is not expected to be very useful.++ You can find out the precise location of the 'libraries' file by+ calling 'agda -l fjdsk Dummy.agda' and looking at the error message (assuming+ you don't have a library called fjdsk installed).++ There are three ways a library gets used:++ - You supply the --library=LIB (or -l LIB) option to Agda. This is+ equivalent to adding a -iPATH for each of the include paths of LIB+ and its (transitive) dependencies.++ - No explicit --library flag is given, and the current project root+ (of the Agda file that is being loaded) or one of its parent directories+ contains a .agda-lib file defining a library LIB. This library is used as+ if a --librarary=LIB option had been given, except that it is not+ necessary for the library to be listed in the AGDA_DIR/libraries file.++ - No explicit --library flag, and no .agda-lib file in the project+ root. In this case the file AGDA_DIR/defaults is read and all+ libraries listed are added to the path. The defaults file should+ contain a list of library names, each on a separate line. In this+ case the current directory is also added to the path.++ To disable default libraries, you can give the flag+ --no-default-libraries.++ Library names can end with a version number (for instance,+ mylib-1.2.3). When resolving a library name (given in a --library+ flag, or listed as a default library or library dependency) the+ following rules are followed:++ - If you don't give a version number, any version will do.+ - If you give a version number an exact match is required.+ - When there are multiple matches an exact match is preferred, and+ otherwise the latest matching version is chosen.++ For example, suppose you have the following libraries installed:+ mylib, mylib-1.0, otherlib-2.1, and otherlib-2.3. In this case, aside+ from the exact matches you can also say --library=otherlib to get+ otherlib-2.3.++* New Pragma COMPILED_DECLARE_DATA for binding recursively defined+ Haskell data types to recursively defined Agda data types.++ If you have a Haskell type like++ {-# LANGUAGE GADTs #-}++ module Issue223 where++ data A where+ BA :: B -> A++ data B where+ AB :: A -> B+ BB :: B++ You can now bind it to corresponding mutual Agda inductive data+ types as follows:++ {-# IMPORT Issue223 #-}++ data A : Set+ {-# COMPILED_DECLARE_DATA A Issue223.A #-}+ data B : Set+ {-# COMPILED_DECLARE_DATA B Issue223.B #-}++ data A where+ BA : B → A++ {-# COMPILED_DATA A Issue223.A Issue223.BA #-}+ data B where+ AB : A → B+ BB : B++ {-# COMPILED_DATA B Issue223.B Issue223.AB Issue223.BB #-}++ This fixes issue 223.++* New pragma HASKELL for adding inline Haskell code (GHC backend only)++ Arbitrary Haskell code can be added to a module using the HASKELL pragma.+ For instance,++ {-# HASKELL+ echo :: IO ()+ echo = getLine >>= putStrLn+ #-}++ postulate echo : IO ⊤+ {-# COMPILED echo echo #-}++* New option --exact-split.++ The --exact-split flag causes Agda to raise an error whenever a clause in a+ definition by pattern matching cannot be made to hold definitionally (i.e. as+ a reduction rule). Specific clauses can be excluded from this check by means+ of the {-# CATCHALL #-} pragma.++ For instance, the following definition will be rejected as the second clause+ cannot be made to hold definitionally:++ min : Nat → Nat → Nat+ min zero y = zero+ min x zero = zero+ min (suc x) (suc y) = suc (min x y)++ Catchall clauses have to be marked as such, for instance:++ eq : Nat → Nat → Bool+ eq zero zero = true+ eq (suc m) (suc n) = eq m n+ {-# CATCHALL #-}+ eq _ _ = false++* New option: --no-exact-split.++ This option can be used to override a global --exact-split in a+ file, by adding a pragma {-# OPTIONS --no-exact-split #-}.++* New options: --sharing and --no-sharing.++ These options are used to enable/disable sharing and call-by-need evaluation.+ The default is --no-sharing.++ Note that they cannot appear in an OPTIONS pragma, but have to be given as+ command line arguments or added to the Agda Program Args from Emacs with M-x+ customize-group agda2.++* New pragma DISPLAY.++ {-# DISPLAY f e1 .. en = e #-}++ This causes f e1 .. en to be printed in the same way as e, where ei can bind+ variables used in e. The expressions ei and e are scope checked, but not+ type checked.++ For example this can be used to print overloaded (instance) functions with+ the overloaded name:++ instance+ NumNat : Num Nat+ NumNat = record { ..; _+_ = natPlus }++ {-# DISPLAY natPlus a b = a + b #-}++ Limitations++ Left-hand sides are restricted to variables, constructors, defined+ functions or types, and literals. In particular, lambdas are not allowed in+ left-hand sides.++ Since DISPLAY pragmas are not type checked implicit argument insertion may+ not work properly if the type of f computes to an implicit function space+ after pattern matching.++* Removed pragma {-# ETA R #-}++ The pragma {-# ETA R #-} is replaced by the eta-equality directive+ inside record declarations.++* New option --no-eta-equality.++ The --no-eta-equality flag disables eta rules for declared record types.+ It has the same effect as no-eta-equality inside each declaration of+ a record type R.++ If used with the OPTIONS pragma it will not affect records defined+ in other modules.++* The semantics of {-# REWRITE r #-} pragmas in parametrized modules has+ changed (see Issue 1652).++ Rewrite rules are no longer lifted to the top context. Instead, they now only+ apply to terms in (extensions of) the module context. If you want the old+ behaviour, you should put the {-# REWRITE r #-} pragma outside of the module+ (i.e. unindent it).++* New pragma {-# INLINE f #-} causes f to be inlined during compilation.++* The STATIC pragma is now taken into account during compilation.++ Calls to a function marked STATIC are normalised before compilation. The+ typical use case for this is to mark the interpreter of an embedded language+ as STATIC.++* Option --type-in-type no longer implies --no-universe-polymorphism,+ thus, it can be used with explicit universe levels. [Issue 1764]+ It simply turns off error reporting for any level mismatch now.+ Examples:++ {-# OPTIONS --type-in-type #-}++ Type : Set+ Type = Set++ data D {α} (A : Set α) : Set where+ d : A → D A++ data E α β : Set β where+ e : Set α → E α β++* New NO_POSITIVITY_CHECK pragma to switch off the positivity checker+ for data/record definitions and mutual blocks.++ The pragma must precede a data/record definition or a mutual block.++ The pragma cannot be used in --safe mode.++ Examples (see Issue1614*.agda and Issue1760*.agda in test/Succeed/):++ 1. Skipping a single data definition.++ {-# NO_POSITIVITY_CHECK #-}+ data D : Set where+ lam : (D → D) → D++ 2. Skipping a single record definition.++ {-# NO_POSITIVITY_CHECK #-}+ record U : Set where+ field ap : U → U++ 3. Skipping an old-style mutual block: Somewhere within a `mutual`+ block before a data/record definition.++ mutual+ data D : Set where+ lam : (D → D) → D++ {-# NO_POSITIVITY_CHECK #-}+ record U : Set where+ field ap : U → U++ 4. Skipping an old-style mutual block: Before the `mutual` keyword.++ {-# NO_POSITIVITY_CHECK #-}+ mutual+ data D : Set where+ lam : (D → D) → D++ record U : Set where+ field ap : U → U++ 5. Skipping a new-style mutual block: Anywhere before the+ declaration or the definition of data/record in the block.++ record U : Set+ data D : Set++ record U where+ field ap : U → U++ {-# NO_POSITIVITY_CHECK #-}+ data D where+ lam : (D → D) → D++* Removed --no-coverage-check option. [Issue 1918]++Language+========++Operator syntax+---------------++* The default fixity for syntax declarations has changed from -666 to 20.++* Sections.++ Operators can be sectioned by replacing arguments with underscores.+ There must not be any whitespace between these underscores and the+ adjacent nameparts. Examples:++ pred : ℕ → ℕ+ pred = _∸ 1++ T : Bool → Set+ T = if_then ⊤ else ⊥++ if : {A : Set} (b : Bool) → A → A → A+ if b = if b then_else_++ Sections are translated into lambda expressions. Examples:++ _∸ 1 ↦ λ section → section ∸ 1++ if_then ⊤ else ⊥ ↦ λ section → if section then ⊤ else ⊥++ if b then_else_ ↦ λ section section₁ →+ if b then section else section₁++ Operator sections have the same fixity as the underlying operator+ (except in cases like "if b then_else_", in which the section is+ "closed", but the operator is not).++ Operator sections are not supported in patterns (with the exception+ of dot patterns), and notations coming from syntax declarations+ cannot be sectioned.++* A long-standing operator fixity bug has been fixed. As a consequence+ some programs that used to parse no longer do.++ Previously each precedence level was (incorrectly) split up into+ five separate ones, ordered as follows, with the earlier ones+ binding less tightly than the later ones:++ - Non-associative operators.++ - Left associative operators.++ - Right associative operators.++ - Prefix operators.++ - Postfix operators.++ Now this problem has been addressed. It is no longer possible to mix+ operators of a given precedence level but different associativity.+ However, prefix and right associative operators are seen as having+ the same associativity, and similarly for postfix and left+ associative operators.++ Examples+ --------++ The following code is no longer accepted:++ infixl 6 _+_+ infix 6 _∸_++ rejected : ℕ+ rejected = 1 + 0 ∸ 1++ However, the following previously rejected code is accepted:++ infixr 4 _,_+ infix 4 ,_++ ,_ : {A : Set} {B : A → Set} {x : A} → B x → Σ A B+ , y = _ , y++ accepted : Σ ℕ λ i → Σ ℕ λ j → Σ (i ≡ j) λ _ → Σ ℕ λ k → j ≡ k+ accepted = 5 , , refl , , refl++* The classification of notations with binders into the categories+ infix, prefix, postfix or closed has changed. [Issue 1450]++ The difference is that, when classifying the notation, only+ /regular/ holes are taken into account, not /binding/ ones.++ Example: The notation++ syntax m >>= (λ x → f) = x <- m , f++ was previously treated as infix, but is now treated as prefix.++* Notation can now include wildcard binders.++ Example: syntax Σ A (λ _ → B) = A × B++* If an overloaded operator is in scope with several distinct+ precedence levels, then several instances of this operator will be+ included in the operator grammar, possibly leading to ambiguity.+ Previously the operator was given the default fixity [Issue 1436].++ There is an exception to this rule: If there are multiple precedences,+ but at most one is explicitly declared, then only one instance will be+ included in the grammar. If there are no explicitly declared+ precedences, then this instance will get the default precedence, and+ otherwise it will get the declared precedence.++ If multiple occurrences of an operator are "merged" in the grammar,+ and they have distinct associativities, then they are treated as+ being non-associative.++ The three paragraphs above also apply to identical notations (coming+ from syntax declarations) for a given overloaded name.++ Examples:++ module A where++ infixr 5 _∷_+ infixr 5 _∙_+ infixl 3 _+_+ infix 1 bind++ syntax bind c (λ x → d) = x ← c , d++ module B where++ infix 5 _∷_+ infixr 4 _∙_+ -- No fixity declaration for _+_.+ infixl 2 bind++ syntax bind c d = c ∙ d++ module C where++ infixr 2 bind++ syntax bind c d = c ∙ d++ open A+ open B+ open C++ -- _∷_ is infix 5.+ -- _∙_ has two fixities: infixr 4 and infixr 5.+ -- _+_ is infixl 3.+ -- A.bind's notation is infix 1.+ -- B.bind and C.bind's notations are infix 2.++ -- There is one instance of "_ ∷ _" in the grammar, and one+ -- instance of "_ + _".++ -- There are three instances of "_ ∙ _" in the grammar, one+ -- corresponding to A._∙_, one corresponding to B._∙_, and one+ -- corresponding to both B.bind and C.bind.++Reflection+----------++* The reflection framework has received a massive overhaul.++ A new type of reflected type checking computations supplants most of the old+ reflection primitives. The quoteGoal, quoteContext and tactic primitives are+ deprecated and will be removed in the future, and the unquoteDecl and unquote+ primitives have changed behaviour. Furthermore the following primitive+ functions have been replaced by builtin type checking computations:++ - primQNameType --> AGDATCMGETTYPE+ - primQNameDefinition --> AGDATCMGETDEFINITION+ - primDataConstructors --> subsumed by AGDATCMGETDEFINITION+ - primDataNumberOfParameters --> subsumed by AGDATCMGETDEFINITION++ See below for details.++* Types are no longer packaged with a sort.++ The AGDATYPE and AGDATYPEEL built-ins have been removed. Reflected types are+ now simply terms.++* Reflected definitions have more information.++ The type for reflected definitions has changed to++ data Definition : Set where+ fun-def : List Clause → Definition+ data-type : Nat → List Name → Definition -- parameters and constructors+ record-type : Name → Definition -- name of the data/record type+ data-con : Name → Definition -- name of the constructor+ axiom : Definition+ prim-fun : Definition++ Correspondingly the built-ins for function, data and record definitions+ (AGDAFUNDEF, AGDAFUNDEFCON, AGDADATADEF, AGDARECORDDEF) have been removed.++* Reflected type checking computations.++ There is a primitive TC monad representing type checking computations. The+ unquote, unquoteDecl, and the new unquoteDef all expect computations in this+ monad (see below). The interface to the monad is the following++ -- Error messages can contain embedded names and terms.+ data ErrorPart : Set where+ strErr : String → ErrorPart+ termErr : Term → ErrorPart+ nameErr : Name → ErrorPart++ {-# BUILTIN AGDAERRORPART ErrorPart #-}+ {-# BUILTIN AGDAERRORPARTSTRING strErr #-}+ {-# BUILTIN AGDAERRORPARTTERM termErr #-}+ {-# BUILTIN AGDAERRORPARTNAME nameErr #-}++ postulate+ TC : ∀ {a} → Set a → Set a+ returnTC : ∀ {a} {A : Set a} → A → TC A+ bindTC : ∀ {a b} {A : Set a} {B : Set b} → TC A → (A → TC B) → TC B++ -- Unify two terms, potentially solving metavariables in the process.+ unify : Term → Term → TC ⊤++ -- Throw a type error. Can be caught by catchTC.+ typeError : ∀ {a} {A : Set a} → List ErrorPart → TC A++ -- Block a type checking computation on a metavariable. This will abort+ -- the computation and restart it (from the beginning) when the+ -- metavariable is solved.+ blockOnMeta : ∀ {a} {A : Set a} → Meta → TC A++ -- Backtrack and try the second argument if the first argument throws a+ -- type error.+ catchTC : ∀ {a} {A : Set a} → TC A → TC A → TC A++ -- Infer the type of a given term+ inferType : Term → TC Type++ -- Check a term against a given type. This may resolve implicit arguments+ -- in the term, so a new refined term is returned. Can be used to create+ -- new metavariables: newMeta t = checkType unknown t+ checkType : Term → Type → TC Term++ -- Compute the normal form of a term.+ normalise : Term → TC Term++ -- Get the current context.+ getContext : TC (List (Arg Type))++ -- Extend the current context with a variable of the given type.+ extendContext : ∀ {a} {A : Set a} → Arg Type → TC A → TC A++ -- Set the current context.+ inContext : ∀ {a} {A : Set a} → List (Arg Type) → TC A → TC A++ -- Quote a value, returning the corresponding Term.+ quoteTC : ∀ {a} {A : Set a} → A → TC Term++ -- Unquote a Term, returning the corresponding value.+ unquoteTC : ∀ {a} {A : Set a} → Term → TC A++ -- Create a fresh name.+ freshName : String → TC QName++ -- Declare a new function of the given type. The function must be defined+ -- later using 'defineFun'. Takes an Arg Name to allow declaring instances+ -- and irrelevant functions. The Visibility of the Arg must not be hidden.+ declareDef : Arg QName → Type → TC ⊤++ -- Define a declared function. The function may have been declared using+ -- 'declareDef' or with an explicit type signature in the program.+ defineFun : QName → List Clause → TC ⊤++ -- Get the type of a defined name. Replaces 'primQNameType'.+ getType : QName → TC Type++ -- Get the definition of a defined name. Replaces 'primQNameDefinition'.+ getDefinition : QName → TC Definition++ {-# BUILTIN AGDATCM TC #-}+ {-# BUILTIN AGDATCMRETURN returnTC #-}+ {-# BUILTIN AGDATCMBIND bindTC #-}+ {-# BUILTIN AGDATCMUNIFY unify #-}+ {-# BUILTIN AGDATCMNEWMETA newMeta #-}+ {-# BUILTIN AGDATCMTYPEERROR typeError #-}+ {-# BUILTIN AGDATCMBLOCKONMETA blockOnMeta #-}+ {-# BUILTIN AGDATCMCATCHERROR catchTC #-}+ {-# BUILTIN AGDATCMINFERTYPE inferType #-}+ {-# BUILTIN AGDATCMCHECKTYPE checkType #-}+ {-# BUILTIN AGDATCMNORMALISE normalise #-}+ {-# BUILTIN AGDATCMGETCONTEXT getContext #-}+ {-# BUILTIN AGDATCMEXTENDCONTEXT extendContext #-}+ {-# BUILTIN AGDATCMINCONTEXT inContext #-}+ {-# BUILTIN AGDATCMQUOTETERM quoteTC #-}+ {-# BUILTIN AGDATCMUNQUOTETERM unquoteTC #-}+ {-# BUILTIN AGDATCMFRESHNAME freshName #-}+ {-# BUILTIN AGDATCMDECLAREDEF declareDef #-}+ {-# BUILTIN AGDATCMDEFINEFUN defineFun #-}+ {-# BUILTIN AGDATCMGETTYPE getType #-}+ {-# BUILTIN AGDATCMGETDEFINITION getDefinition #-}++* Builtin type for metavariables++ There is a new builtin type for metavariables used by the new reflection+ framework. It is declared as follows and comes with primitive equality,+ ordering and show.++ postulate Meta : Set+ {-# BUILTIN AGDAMETA Meta #-}+ primitive primMetaEquality : Meta → Meta → Bool+ primitive primMetaLess : Meta → Meta → Bool+ primitive primShowMeta : Meta → String++ There are corresponding new constructors in the Term and Literal data types:++ data Term : Set where+ ...+ meta : Meta → List (Arg Term) → Term++ {-# BUILTIN AGDATERMMETA meta #-}++ data Literal : Set where+ ...+ meta : Meta → Literal++ {-# BUILTIN AGDALITMETA meta #-}++* Builtin unit type++ The type checker needs to know about the unit type, which you can allow by++ record ⊤ : Set where+ {-# BUILTIN UNIT ⊤ #-}++* Changed behaviour of unquote++ The unquote primitive now expects a type checking computation instead of a+ pure term. In particular 'unquote e' requires++ e : Term → TC ⊤++ where the argument is the representation of the hole in which the result+ should go. The old unquote behaviour (where unquote expected a Term argument)+ can be recovered by++ OLD: unquote v+ NEW: unquote λ hole → unify hole v++* Changed behaviour of unquoteDecl++ The unquoteDecl primitive now expects a type checking computation instead of+ a pure function definition. It is possible to define multiple (mutually+ recursive) functions at the same time. More specifically++ unquoteDecl x₁ .. xₙ = m++ requires m : TC ⊤ and that x₁ .. xₙ are defined (using declareDef and+ defineFun) after executing m. As before x₁ .. xₙ : QName in m, but have their+ declared types outside the unquoteDecl.++* New primitive unquoteDef.++ There is a new declaration++ unquoteDef x₁ .. xₙ = m++ This works exactly as unquoteDecl (see above) with the exception that x₁ ..+ xₙ are required to already be declared.++ The main advantage of unquoteDef over unquoteDecl is that unquoteDef is+ allowed in mutual blocks, allowing mutually recursion between generated+ definitions and hand-written definitions.++* The reflection interface now exposes the name hint (as a string)+ for variables. As before, the actual binding structure is with+ de Bruijn indices. The String value is just a hint used as a prefix+ to help display the variable. The type Abs is a new bultin type used+ for the constructors `Term.lam`, `Term.pi`, `Pattern.var`+ (bultins `AGDATERMLAM`, `AGDATERMPI` and `AGDAPATVAR`).++ data Abs (A : Set) : Set where+ abs : (s : String) (x : A) → Abs A+ {-# BUILTIN ABS Abs #-}+ {-# BUILTIN ABSABS abs #-}++ Updated constructor types:++ Term.lam : Hiding → Abs Term → Term+ Term.pi : Arg Type → Abs Type → Term+ Pattern.var : String → Pattern++* Reflection-based macros++ Macros are functions of type t1 → t2 → .. → Term → TC ⊤ that are defined in a+ 'macro' block. Macro application is guided by the type of the macro, where+ Term arguments desugar into the 'quoteTerm' syntax and Name arguments into+ the 'quote' syntax. Arguments of any other type are preserved as-is. The last+ Term argument is the hole term given to 'unquote' computation (see above).++ For example, the macro application 'f u v w' where the macro+ f has the type 'Term → Name → Bool → Term → TC ⊤' desugars into+ 'unquote (f (quoteTerm u) (quote v) w)'++ Limitations:++ - Macros cannot be recursive. This can be worked around by defining the+ recursive function outside the macro block and have the macro call the+ recursive function.++ Silly example:++ macro+ plus-to-times : Term → Term → TC ⊤+ plus-to-times (def (quote _+_) (a ∷ b ∷ [])) hole = unify hole (def (quote _*_) (a ∷ b ∷ []))+ plus-to-times v hole = unify hole v++ thm : (a b : Nat) → plus-to-times (a + b) ≡ a * b+ thm a b = refl++ Macros are most useful when writing tactics, since they let you hide the+ reflection machinery. For instance, suppose you have a solver++ magic : Type → Term++ that takes a reflected goal and outputs a proof (when successful). You can+ then define the following macro++ macro+ by-magic : Term → TC ⊤+ by-magic hole =+ bindTC (inferType hole) λ goal →+ unify hole (magic goal)++ This lets you apply the magic tactic without any syntactic noise at all:++ thm : ¬ P ≡ NP+ thm = by-magic++Literals and built-ins+----------------------++* Overloaded number literals.++ You can now overload natural number literals using the new builtin FROMNAT:++ {-# BUILTIN FROMNAT fromNat #-}++ The target of the builtin should be a defined name. Typically you would do+ something like++ record Number (A : Set) : Set where+ field fromNat : Nat → A++ open Number {{...}} public++ {-# BUILTIN FROMNAT fromNat #-}++ This will cause number literals 'n' to be desugared to 'fromNat n' before+ type checking.++* Negative number literals.++ Number literals can now be negative. For floating point literals it works as+ expected. For integer literals there is a new builtin FROMNEG that enables+ negative integer literals:++ {-# BUILTIN FROMNEG fromNeg #-}++ This causes negative literals '-n' to be desugared to 'fromNeg n'.++* Overloaded string literals.++ String literals can be overladed using the FROMSTRING builtin:++ {-# BUILTIN FROMSTRING fromString #-}++ The will cause string literals 's' to be desugared to 'fromString s' before+ type checking.++* Change to builtin integers.++ The INTEGER builtin now needs to be bound to a datatype with two constructors+ that should be bound to the new builtins INTEGERPOS and INTEGERNEGSUC as follows:++ data Int : Set where+ pos : Nat -> Int+ negsuc : Nat -> Int+ {-# BUILTIN INTEGER Int #-}+ {-# BUILTIN INTEGERPOS pos #-}+ {-# BUILTIN INTEGERNEGSUC negsuc #-}++ where 'negsuc n' represents the integer '-n - 1'. For instance, '-5' is+ represented as 'negsuc 4'. All primitive functions on integers except+ primShowInteger have been removed, since these can be defined without too+ much trouble on the above representation using the corresponding functions on+ natural numbers.++ The primitives that have been removed are++ primIntegerPlus+ primIntegerMinus+ primIntegerTimes+ primIntegerDiv+ primIntegerMod+ primIntegerEquality+ primIntegerLess+ primIntegerAbs+ primNatToInteger++* New primitives for strict evaluation++ primitive+ primForce : ∀ {a b} {A : Set a} {B : A → Set b} (x : A) → (∀ x → B x) → B x+ primForceLemma : ∀ {a b} {A : Set a} {B : A → Set b} (x : A) (f : ∀ x → B x) → primForce x f ≡ f x++ 'primForce x f' evaluates to 'f x' if x is in weak head normal form, and+ 'primForceLemma x f' evaluates to 'refl' in the same situation. The following+ values are considered to be in weak head normal form:++ - constructor applications+ - literals+ - lambda abstractions+ - type constructor (data/record types) applications+ - function types+ - Set a++Modules+-------++* Modules in import directives++ When you use using/hiding/renaming on a name it now automatically applies to+ any module of the same name, unless you explicitly mention the module. For+ instance,++ open M using (D)++ is equivalent to++ open M using (D; module D)++ if M defines a module D. This is most useful for record and data types where+ you always get a module of the same name as the type.++ With this feature there is no longer useful to be able to qualify a+ constructor (or field) by the name of the data type even when it differs from+ the name of the corresponding module. The follow (weird) code used to work,+ but doesn't work anymore:++ module M where+ data D where+ c : D+ open M using (D) renaming (module D to MD)+ foo : D+ foo = D.c++ If you want to import only the type name and not the module you have to hide+ it explicitly:++ open M using (D) hiding (module D)++ See discussion on Issue 836 (https://github.com/agda/agda/issues/836).++* Private definitions of a module are no longer in scope at the Emacs+ mode top-level.++ The reason for this change is that .agdai-files are stripped of unused+ private definitions (which can yield significant performance+ improvements for module-heavy code).++ To test private definitions you can create a hole at the bottom of the+ module, in which private definitions will be visible.++Records+-------++* New record directives eta-equality/no-eta-equality++ The keywords eta-equality/no-eta-equality enable/disable eta rules+ for the (inductive) record type being declared.++ record Σ (A : Set) (B : A -> Set) : Set where+ no-eta-equality+ constructor _,_+ field+ fst : A+ snd : B fst+ open Σ++ -- fail : ∀ {A : Set}{B : A -> Set} → (x : Σ A B) → x ≡ (fst x , snd x)+ -- fail x = refl+ --+ -- x != fst x , snd x of type Σ .A .B+ -- when checking that the expression refl has type x ≡ (fst x , snd x)++* Building records from modules.++ The "record { <fields> }" syntax is now extended to accept module names as+ well. Fields are thus defined using the corresponding definitions from the+ given module.++ For instance assuming this record type R and module M:++ record R : Set where+ field+ x : X+ y : Y+ z : Z++ module M where+ x = {! ... !}+ y = {! ... !}++ r : R+ r = record { M; z = {! ... !} }++ Previously one had to write `record { x = M.x; y = M.y; z = {! ... !} }`.++ More precisely this construction now supports any combination of explicit+ field definitions and applied modules.++ If a field is both given explicitly and available in one of the modules,+ then the explicit one takes precedence.++ If a field is available in more than one module then this is ambiguous+ and therefore rejected. As a consequence the order of assignments does+ not matter.++ The modules can be both applied to arguments and have import directives+ such as `hiding`, `using`, and `renaming`. In particular this construct+ subsumes the record update construction.++ Here is an example of record update:++ -- Record update. Same as: record r { y = {! ... !} }+ r2 : R+ r2 = record { R r; y = {! ... !} }++ A contrived example showing the use of hiding/renaming:++ module M2 (a : A) where+ w = {! ... !}+ z = {! ... !}++ r3 : A → R+ r3 a = record { M hiding (y); M2 a renaming (w to y) }++* Record patterns are now accepted. Examples:++ swap : {A B : Set} (p : A × B) → B × A+ swap record{ proj₁ = a; proj₂ = b } = record{ proj₁ = b; proj₂ = a }++ thd3 : ...+ thd3 record{ proj₂ = record { proj₂ = c }} = c++* Record modules now properly hide all their parameters [Issue 1759]++ Previously parameters to parent modules were not hidden in the record+ module, resulting in different behaviour between++ module M (A : Set) where+ record R (B : Set) : Set where++ and++ module M where+ record R (A B : Set) : Set where++ where in the former case, `A` would be an explicit argument to the module+ `M.R`, but implicit in the latter case. Now `A` is implicit in both cases.++Instance search+---------------++* Performance has been improved, recursive instance search which was previously+ exponential in the depth is now only quadratic.++* Constructors of records and datatypes are not anymore automatically considered+ as instances, you have to do so explicitely, for instance:++ -- only [b] is an instance of D+ data D : Set where+ a : D+ instance+ b : D+ c : D++ -- the constructor is now an instance+ record tt : Set where+ instance constructor tt++* Lambda-bound variables are no longer automatically considered instances.++ Lambda-bound variables need to be bound as instance arguments to be+ considered for instance search. For example,++ _==_ : {A : Set} {{_ : Eq A}} → A → A → Bool++ fails : {A : Set} → Eq A → A → Bool+ fails eqA x = x == x++ works : {A : Set} {{_ : Eq A}} → A → Bool+ works x = x == x++* Let-bound variables are no longer automatically considered instances.++ To make a let-bound variable available as an instance it needs to be declared+ with the 'instance' keyword, just like top-level instances. For example,++ mkEq : {A : Set} → (A → A → Bool) → Eq A++ fails : {A : Set} → (A → A → Bool) → A → Bool+ fails eq x = let eqA = mkEq eq in x == x++ works : {A : Set} → (A → A → Bool) → A → Bool+ works eq x = let instance eqA = mkEq eq in x == x++* Record fields can be declared instances.++ For example,++ record EqSet : Set₁ where+ field+ set : Set+ instance eq : Eq set++ This causes the projection function 'eq : (E : EqSet) → Eq (set E)' to be+ considered for instance search.++* Instance search can now find arguments in variable types (but such candidates can+ only be lambda-bound variables, they can’t be declared as instances)++ module _ {A : Set} (P : A → Set) where++ postulate+ bla : {x : A} {{_ : P x}} → Set → Set++ -- Works, the instance argument is found in the context+ test : {x : A} {{_ : P x}} → Set → Set+ test B = bla B++ -- Still forbidden, because [P] could be instantiated later to anything+ instance+ postulate+ forbidden : {x : A} → P x++* Instance search now refuses to solve constraints with unconstrained+ metavariables, since this can lead to non-termination.++ See [Issue #1532] for an example.++* Top-level instances are now only considered if they are in scope. [Issue #1913]++ Note that lambda-bound instances need not be in scope.++Other changes+-------------++* Unicode ellipsis character is allowed for the ellipsis token ... in+ `with` expressions.++* Prop is no longer a reserved word.++Type checking+=============++* Large indices.++ Force constructor arguments no longer count towards the size of a datatype.+ For instance, the definition of equality below is accepted.++ data _≡_ {a} {A : Set a} : A → A → Set where+ refl : ∀ x → x ≡ x++ This gets rid of the asymmetry that the version of equality which indexes+ only on the second argument could be small, but not the version above which+ indexes on both arguments.++* Detection of datatypes that satisfy K (i.e. sets)++ Agda will now try to detect datatypes that satisfy K when --without-K is+ enabled. A datatype satisfies K when it follows these three rules:++ - The types of all non-recursive constructor arguments should satisfy K.++ - All recursive constructor arguments should be first-order.++ - The types of all indices should satisfy K.++ For example, the types [Nat], [List Nat], and [x ≡ x] (where x : Nat) are+ all recognized by Agda as satisfying K.++* New unifier for case splitting++ The unifier used by Agda for case splitting has been completely rewritten.+ The new unifier takes a much more type-directed approach in order to avoid+ the problems in issues #1406, #1408, #1427, and #1435.++ The new unifier also has eta-equality for record types built-in. This should+ avoid unnecessary case splitting on record constructors and improve the+ performance of Agda on code that contains deeply nested record patterns (see+ issues #473, #635, #1575, #1603, #1613, and #1645).++ In some cases, the locations of the dot patterns computed by the unifier did+ not correspond to the locations given by the user (see issue #1608). This has+ now been fixed by adding an extra step after case splitting that checks+ whether the user-written patterns are compatible with the computed ones.++ In some rare cases, the new unifier is still too restrictive when --without-K+ is enabled because it cannot generalize over the datatype indices (yet). For+ example, the following code is rejected:++ data Bar : Set₁ where+ bar : Bar+ baz : (A : Set) → Bar++ data Foo : Bar → Set where+ foo : Foo bar++ test : foo ≡ foo → Set₁+ test refl = Set++* The aggressive behaviour of `with` introduced in 2.4.2.5 has been+ rolled back [Issue 1692]. With no longer abstracts in the types of+ variables appearing in the with-expressions. [Issue 745]++ This means that the following example no longer works:++ ```agda+ fails : (f : (x : A) → a ≡ x) (b : A) → b ≡ a+ fails f b with a | f b+ fails f b | .b | refl = f b+ ```++ The `with` no longer abstracts the type of `f` over `a`, since `f` appears+ in the second with-expression `f b`. You can use a nested `with` to make+ this example work.++ This example does work again:++ ```agda+ test : ∀{A : Set}{a : A}{f : A → A} (p : f a ≡ a) → f (f a) ≡ a+ test p rewrite p = p+ ```++ After `rewrite p` the goal has changed to `f a ≡ a`, but the type+ of `p` has not been rewritten, thus, the final `p` solves the goal.++ The following, which worked in 2.4.2.5, no longer works:++ ```agda+ fails : (f : (x : A) → a ≡ x) (b : A) → b ≡ a+ fails f b rewrite f b = f b+ ```++ The rewrite with `f b : a ≡ b` is not applied to `f` as+ the latter is part of the rewrite expression `f b`. Thus,+ the type of `f` remains untouched, and the changed goal+ `b ≡ b` is not solved by `f b`.++* When using `rewrite` on a term `eq` of type `lhs ≡ rhs`, the `lhs`+ is no longer abstracted in `rhs` [Issue 520]. This means that++ f pats rewrite eq = body++ is more than syntactic sugar for++ f pats with lhs | eq+ f pats | _ | refl = body++ In particular, the following application of `rewrite` is now+ possible++ id : Bool → Bool+ id true = true+ id false = false++ is-id : ∀ x → x ≡ id x+ is-id true = refl+ is-id false = refl++ postulate+ P : Bool → Set+ b : Bool+ p : P (id b)++ proof : P b+ proof rewrite is-id b = p++ Previously, this was desugared to++ proof with b | is-id b+ proof | _ | refl = p++ which did not type check as `refl` does not have type `b ≡ id b`.+ Now, Agda gets the task of checking `refl : _ ≡ id b` leading to+ instantiation of `_` to `id b`.++Compiler backends+=================++* Major Bug Fixes:++ - Function clauses with different arities are now always compiled correctly+ by the GHC/UHC backends. (Issue #727)++* Co-patterns++ - The GHC/UHC backends now support co-patterns. (Issues #1567, #1632)++* Optimizations++ - Builtin naturals are now represented as arbitrary-precision+ Integers. See the user manual, section+ "Agda Compilers -> Optimizations" for details.++* GHC Haskell backend (MAlonzo)++ - Pragmas++ Since builtin naturals are compiled to Integer you can no longer+ give a {-# COMPILED_DATA #-} pragma for Nat. The same goes for+ builtin booleans, integers, floats, characters and strings which are now+ hard-wired to appropriate Haskell types.+++* UHC compiler backend++ A new backend targeting the Utrecht Haskell Compiler (UHC) is available.+ It targets the UHC Core language, and it's design is inspired by+ the Epic backend. See the user manual, section+ "Agda Compilers -> UHC Backend" for installation instructions.+++ FFI++ The UHC backend has a FFI to Haskell similar to MAlonzo's.+ The target Haskell code also needs to be compilable using UHC,+ which does not support the Haskell base library version 4.*.++ FFI pragmas for the UHC backend are not checked in any way. If the pragmas+ are wrong, bad things will happen.++ Imports+ Additional Haskell modules can be brought into scope+ with the IMPORT_UHC pragma:+ {-# IMPORT_UHC Data.Char #-}+ The Haskell modules UHC.Base and UHC.Agda.Builtins are always+ in scope and don't need to be imported explicitly.++ Datatypes+ Agda datatypes can be bound to Haskell datatypes as follows:+ Haskell:+ data HsData a = HsCon1 | HsCon2 (HsData a)+ Agda:+ data AgdaData (A : Set) : Set where+ AgdaCon1 : AgdaData A+ AgdaCon2 : AgdaData A -> AgdaData A+ {-# COMPILED_DATA_UHC AgdaData HsData HsCon1 HsCon2 #-}+ The mapping has to cover all constructors of the used Haskell datatype,+ else runtime behavior is undefined!++ There are special reserved names to bind Agda datatypes to certain Haskell+ datatypes. For example, this binds an Agda datatype+ to Haskell's list datatype:+ Agda:+ data AgdaList (A : Set) : Set where+ Nil : AgdaList A+ Cons : A -> AgdaList A -> AgdaList A+ {-# COMPILED_DATA_UHC AgdaList __LIST__ __NIL__ __CONS__ #-}++ The following "magic" datatypes are available:+ HS Datatype | Datatype Pragma | HS Constructor | Constructor Pragma+ () __UNIT__ () __UNIT__+ List __LIST__ (:) __CONS__+ [] __NIL__+ Bool __BOOL__ True __TRUE__+ False __FALSE__++ Functions+ Agda postulates can be bound to Haskell functions. Similar as in MAlonzo,+ all arguments of type Set need to be dropped before calling Haskell+ functions. An example calling the return function:+ Agda:+ postulate hs-return : {A : Set} -> A -> IO A+ {-# COMPILED_UHC hs-return (\_ -> UHC.Agda.Builtins.primReturn) #-}++Emacs mode and interaction+==========================++* Module contents (C-c C-o) now also works for records. [See issue #1926.]+ If you have an inferable expression of record type in an interaction point,+ you can invoke C-c C-o to see its fields and types. Example++ record R : Set where+ field f : A++ test : R → R+ test r = {!r!} -- C-c C-o here++* Less aggressive error notification.++ Previously Emacs could jump to the position of an error even if the+ type-checking process was not initiated in the current buffer. Now+ this no longer happens: If the type-checking process was initiated+ in another buffer, then the cursor is moved to the position of the+ error in the buffer visiting the file (if any) and in every window+ displaying the file, but focus should not change from one file to+ another.++ In the cases where focus does change from one file to another, one+ can now use the go-back functionality to return to the previous+ position.++* Removed the agda-include-dirs customization parameter.++ Use agda-program-args with -iDIR or -lLIB instead, or add libraries to+ ~/.agda/defaults (C:/Users/USERNAME/AppData/Roaming/agda/defaults or+ similar on Windows). See Library management, above, for more+ information.++Tools+=====++LaTeX-backend+-------------++* The default font has been changed to XITS (which is part of TeX Live):++ http://www.ctan.org/tex-archive/fonts/xits/++ This font is more complete with respect to Unicode.++agda-ghc-names+--------------++* New tool: The command++ agda-ghc-names fixprof <compile-dir> <ProgName>.prof++ converts *.prof files obtained from profiling runs of MAlonzo-compiled+ code to *.agdaIdents.prof, with the original Agda identifiers replacing+ the MAlonzo-generated Haskell identifiers.++ For usage and more details, see src/agda-ghc-names/README.txt.++Highlighting and textual backends+=================================++* Names in import directives are now highlighted and are clickable.+ [Issue 1714]+ This leads also to nicer printing in the LaTeX and html backends.++Fixed issues+============++See https://github.com/agda/agda/issues?q=milestone%3A2.5.1+is%3Aclosed++------------------------------------------------------------------------+-- Release notes for Agda version 2.4.2.5+------------------------------------------------------------------------++Important changes since 2.4.2.4:++Installation and infrastructure+===============================++* Added support for GHC 7.10.3.++* Added `cpphs` Cabal flag++ Turn on/off this flag to choose cpphs/cpp as the C preprocessor.++ This flag is turn on by default.++ (This flag was added in Agda 2.4.2.1 but it was not documented)++Pragmas and options+===================++* Termination pragmas are no longer allowed inside `where` clauses+ [Issue 1137].++Type checking+=============++* `with`-abstraction is more aggressive, abstracts also in types of+ variables that are used in the `with`-expressions, unless they are+ also used in the types of the `with`-expressions. [Issue 1692]++ Example:++ ```agda+ test : (f : (x : A) → a ≡ x) (b : A) → b ≡ a+ test f b with a | f b+ test f b | .b | refl = f b+ ```++ Previously, `with` would not abstract in types of variables that+ appear in the `with`-expressions, in this case, both `f` and `b`,+ leaving their types unchanged.+ Now, it tries to abstract in `f`, as only `b` appears in the types of+ the `with`-expressions which are `A` (of `a`) and `a ≡ b` (of `f b`).+ As a result, the type of `f` changes to `(x : A) → b ≡ x` and the+ type of the goal to `b ≡ b` (as previously).++ This also affects `rewrite`, which is implemented in terms of+ `with`.++ ```agda+ test : (f : (x : A) → a ≡ x) (b : A) → b ≡ a+ test f b rewrite f b = f b+ ```++ As the new `with` is not fully backwards-compatible, some parts of+ your Agda developments using `with` or `rewrite` might need+ maintenance.++Fixed issues+============++See https://github.com/agda/agda/issues+* 1407+* 1518+* 1670+* 1677+* 1698+* 1701+* 1710+* 1718++------------------------------------------------------------------------+-- Release notes for Agda version 2.4.2.4+------------------------------------------------------------------------++Important changes since 2.4.2.3:++Installation and infrastructure+===============================++* Removed support for GHC 7.4.2.++Pragmas and options+===================++* Option --copatterns is now on by default. To switch off+ parsing of copatterns, use:++ {-# OPTIONS --no-copatterns #-}++* Option --rewriting is now needed to use REWRITE pragmas+ and rewriting during reduction. Rewriting is not --safe.++ To use rewriting, first specify a relation symbol `R` that will+ later be used to add rewrite rules. A canonical candidate would be+ propositional equality++ {-# BUILTIN REWRITE _≡_ #-}++ but any symbol `R` of type `Δ → A → A → Set i` for some `A` and+ `i` is accepted. Then symbols `q` can be added to rewriting+ provided their type is of the form `Γ → R ds l r`. This will add+ a rewrite rule++ Γ ⊢ l ↦ r : A[ds/Δ]++ to the signature, which fires whenever a term is an instance of `l`.+ For example, if++ plus0 : ∀ x → x + 0 ≡ x++ (ideally, there is a proof for `plus0`, but it could be a+ postulate), then++ {-# REWRITE plus0 #-}++ will prompt Agda to rewrite any well-typed term of the form `t + 0`+ to `t`.++ Some caveats: Agda accepts and applies rewrite rules naively, it is+ very easy to break consistency and termination of type checking.+ Some examples of rewrite rules that should /not/ be added:++ refl : ∀ x → x ≡ x -- Agda loops+ plus-sym : ∀ x y → x + y ≡ y + x -- Agda loops+ absurd : true ≡ false -- Breaks consistency++ Adding only proven equations should at least preserve consistency,+ but this is only a conjecture, so know what you are doing!+ Using rewriting, you are entering into the wilderness, where you are+ on your own!++Language+========++* forall / ∀ now parses like λ, i.e., the following parses now [Issue 1583]:++ ⊤ × ∀ (B : Set) → B → B++* The underscore pattern _ can now also stand for an inaccessible+ pattern (dot pattern). This alleviates the need for writing `._'.+ [Issue 1605] Instead of++ transVOld : ∀{A : Set} (a b c : A) → a ≡ b → b ≡ c → a ≡ c+ transVOld _ ._ ._ refl refl = refl++ one can now write++ transVNew : ∀{A : Set} (a b c : A) → a ≡ b → b ≡ c → a ≡ c+ transVNew _ _ _ refl refl = refl++ and let Agda decide where to put the dots. This was always possible+ by using hidden arguments++ transH : ∀{A : Set}{a b c : A} → a ≡ b → b ≡ c → a ≡ c+ transH refl refl = refl++ which is now equivalent to++ transHNew : ∀{A : Set}{a b c : A} → a ≡ b → b ≡ c → a ≡ c+ transHNew {a = _}{b = _}{c = _} refl refl = refl++ Before, underscore _ stood for an unnamed variable that could not be+ instantiated by an inaccessible pattern. If one no wants to prevent+ Agda from instantiating, one needs to use a variable name other than+ underscore (however, in practice this situation seems unlikely).++Type checking+=============++* Polarity of phantom arguments to data and record types has changed. [Issue 1596]+ Polarity of size arguments is Nonvariant (both monotone and antitone).+ Polarity of other arguments is Covariant (monotone).+ Both were Invariant before (neither monotone nor antitone).++ The following example type-checks now:++ open import Common.Size++ -- List should be monotone in both arguments+ -- (even when `cons' is missing).++ data List (i : Size) (A : Set) : Set where+ [] : List i A++ castLL : ∀{i A} → List i (List i A) → List ∞ (List ∞ A)+ castLL x = x++ -- Stream should be antitone in the first and monotone in the second argument+ -- (even with field `tail' missing).++ record Stream (i : Size) (A : Set) : Set where+ coinductive+ field+ head : A++ castSS : ∀{i A} → Stream ∞ (Stream ∞ A) → Stream i (Stream i A)+ castSS x = x++* SIZELT lambdas must be consistent [Issue 1523, see Abel and Pientka, ICFP 2013].+ When lambda-abstracting over type (Size< size) then size must be+ non-zero, for any valid instantiation of size variables.++ The good:++ data Nat (i : Size) : Set where+ zero : ∀ (j : Size< i) → Nat i+ suc : ∀ (j : Size< i) → Nat j → Nat i++ {-# TERMINATING #-}+ -- This definition is fine, the termination checker is too strict at the moment.+ fix : ∀ {C : Size → Set}+ → (∀ i → (∀ (j : Size< i) → Nat j -> C j) → Nat i → C i)+ → ∀ i → Nat i → C i+ fix t i (zero j) = t i (λ (k : Size< i) → fix t k) (zero j)+ fix t i (suc j n) = t i (λ (k : Size< i) → fix t k) (suc j n)++ The λ (k : Size< i) is fine in both cases, as context++ i : Size, j : Size< i++ guarantees that i is non-zero.++ The bad:++ record Stream {i : Size} (A : Set) : Set where+ coinductive+ constructor _∷ˢ_+ field+ head : A+ tail : ∀ {j : Size< i} → Stream {j} A+ open Stream public++ _++ˢ_ : ∀ {i A} → List A → Stream {i} A → Stream {i} A+ [] ++ˢ s = s+ (a ∷ as) ++ˢ s = a ∷ˢ (as ++ˢ s)++ This fails, maybe unjustified, at++ i : Size, s : Stream {i} A+ ⊢+ a ∷ˢ (λ {j : Size< i} → as ++ˢ s)++ Fixed by defining the constructor by copattern matching:++ record Stream {i : Size} (A : Set) : Set where+ coinductive+ field+ head : A+ tail : ∀ {j : Size< i} → Stream {j} A+ open Stream public++ _∷ˢ_ : ∀ {i A} → A → Stream {i} A → Stream {↑ i} A+ head (a ∷ˢ as) = a+ tail (a ∷ˢ as) = as++ _++ˢ_ : ∀ {i A} → List A → Stream {i} A → Stream {i} A+ [] ++ˢ s = s+ (a ∷ as) ++ˢ s = a ∷ˢ (as ++ˢ s)++ The ugly:++ fix : ∀ {C : Size → Set}+ → (∀ i → (∀ (j : Size< i) → C j) → C i)+ → ∀ i → C i+ fix t i = t i λ (j : Size< i) → fix t j++ For i=0, there is no such j at runtime, leading to looping+ behavior.++Interaction+===========++* Issue 635 has been fixed. Case splitting does not spit out implicit+ record patterns any more.++ record Cont : Set₁ where+ constructor _◃_+ field+ Sh : Set+ Pos : Sh → Set++ open Cont++ data W (C : Cont) : Set where+ sup : (s : Sh C) (k : Pos C s → W C) → W C++ bogus : {C : Cont} → W C → Set+ bogus w = {!w!}++ Case splitting on w yielded, since the fix of issue 473,++ bogus {Sh ◃ Pos} (sup s k) = ?++ Now it gives, as expected,++ bogus (sup s k) = ?++Performance+===========++* As one result of the 21st Agda Implementor's Meeting (AIM XXI),+ serialization of the standard library is 50% faster (time reduced by+ a third), without using additional disk space for the interface+ files.+++Bug fixes+=========++* Issues fixed ( see https://github.com/agda/agda/issues ):+ 1546 (copattern matching and with-clauses)+ 1560 (positivity checker inefficiency)+ 1584 (let pattern with trailing implicit)++------------------------------------------------------------------------+-- Release notes for Agda version 2.4.2.3+------------------------------------------------------------------------++Important changes since 2.4.2.2:++Installation and infrastructure+===============================++* Added support for GHC 7.10.1.++* Removed support for GHC 7.0.4.++Language+========++* _ is no longer a valid name for a definition. The following fails now:+ [Issue 1465]++ postulate _ : Set++* Typed bindings can now contain hiding information [Issue 1391].+ This means you can now write++ assoc : (xs {ys zs} : List A) → ((xs ++ ys) ++ zs) ≡ (xs ++ (ys ++ zs))++ instead of the longer++ assoc : (xs : List A) {ys zs : List A} → ...++ It also works with irrelevance++ .(xs {ys zs} : List A) → ...++ but of course does not make sense if there is hiding information already.+ Thus, this is (still) a parse error:++ {xs {ys zs} : List A} → ...++* The builtins for sized types no longer need accompanying postulates.+ The BUILTIN pragmas for size stuff now also declare the identifiers+ they bind to.++ {-# BUILTIN SIZEUNIV SizeUniv #-} -- SizeUniv : SizeUniv+ {-# BUILTIN SIZE Size #-} -- Size : SizeUniv+ {-# BUILTIN SIZELT Size<_ #-} -- Size<_ : ..Size → SizeUniv+ {-# BUILTIN SIZESUC ↑_ #-} -- ↑_ : Size → Size+ {-# BUILTIN SIZEINF ∞ #-} -- ∞ : Size++ Size and Size< now live in the new universe SizeUniv.+ It is forbidden to build function spaces in this universe,+ in order to prevent the malicious assumption of a size predecessor++ pred : (i : Size) → Size< i++ [Issue 1428].++* Unambiguous notations (coming from syntax declarations) that resolve+ to ambiguous names are now parsed unambiguously [Issue 1194].++* If only some instances of an overloaded name have a given+ associated notation (coming from syntax declarations), then this+ name can only be resolved to the given instances of the+ name, not to other instances [Issue 1194].++ Previously, if different instances of an overloaded name had+ /different/ associated notations, then none of the notations could+ be used. Now all of them can be used.++ Note that notation identity does not only involve the right-hand+ side of the syntax declaration. For instance, the following+ notations are not seen as identical, because the implicit argument+ names are different:++ module A where++ data D : Set where+ c : {x y : D} → D++ syntax c {x = a} {y = b} = a ∙ b++ module B where++ data D : Set where+ c : {y x : D} → D++ syntax c {y = a} {x = b} = a ∙ b++* If an overloaded operator is in scope with at least two distinct+ fixities, then it gets the default fixity [Issue 1436].++ Similarly, if two or more identical notations for a given overloaded+ name are in scope, and these notations do not all have the+ same fixity, then they get the default fixity.++Type checking+=============++* Functions of varying arity can now have with-clauses and use rewrite.+ Example:++ NPred : Nat → Set+ NPred 0 = Bool+ NPred (suc n) = Nat → NPred n++ const : Bool → ∀{n} → NPred n+ const b {0} = b+ const b {suc n} m = const b {n}++ allOdd : ∀ n → NPred n+ allOdd 0 = true+ allOdd (suc n) m with even m+ ... | true = const false+ ... | false = allOdd n++* Function defined by copattern matching can now have with-clauses+ and use rewrite. Example:++ {-# OPTIONS --copatterns #-}++ record Stream (A : Set) : Set where+ coinductive+ constructor delay+ field+ force : A × Stream A+ open Stream++ map : ∀{A B} → (A → B) → Stream A → Stream B+ force (map f s) with force s+ ... | a , as = f a , map f as++ record Bisim {A B} (R : A → B → Set) (s : Stream A) (t : Stream B) : Set where+ coinductive+ constructor ~delay+ field+ ~force : let a , as = force s+ b , bs = force t+ in R a b × Bisim R as bs+ open Bisim++ SEq : ∀{A} (s t : Stream A) → Set+ SEq = Bisim (_≡_)++ -- Slightly weird definition of symmetry to demonstrate rewrite.++ ~sym' : ∀{A} {s t : Stream A} → SEq s t → SEq t s+ ~force (~sym' {s = s} {t} p) with force s | force t | ~force p+ ... | a , as | b , bs | r , q rewrite r = refl , ~sym' q++* Instances can now be defined by copattern matching. [Issue 1413]+ The following example extends the one in+ [Abel, Pientka, Thibodeau, Setzer, POPL 2013, Section 2.2]:++ {-# OPTIONS --copatterns #-}++ -- The Monad type class++ record Monad (M : Set → Set) : Set1 where+ field+ return : {A : Set} → A → M A+ _>>=_ : {A B : Set} → M A → (A → M B) → M B+ open Monad {{...}}++ -- The State newtype++ record State (S A : Set) : Set where+ field+ runState : S → A × S+ open State++ -- State is an instance of Monad++ instance+ stateMonad : {S : Set} → Monad (State S)+ runState (return {{stateMonad}} a ) s = a , s -- NEW+ runState (_>>=_ {{stateMonad}} m k) s₀ = -- NEW+ let a , s₁ = runState m s₀+ in runState (k a) s₁++ -- stateMonad fulfills the monad laws++ leftId : {A B S : Set}(a : A)(k : A → State S B) →+ (return a >>= k) ≡ k a+ leftId a k = refl++ rightId : {A B S : Set}(m : State S A) →+ (m >>= return) ≡ m+ rightId m = refl++ assoc : {A B C S : Set}(m : State S A)(k : A → State S B)(l : B → State S C) →+ ((m >>= k) >>= l) ≡ (m >>= λ a → k a >>= l)+ assoc m k l = refl+++Emacs mode+==========++* The new menu option "Switch to another version of Agda" tries to do+ what it says.++* Changed feature: Interactively split result.++ [ This is as before: ]+ Make-case (C-c C-c) with no variables given tries to split on the+ result to introduce projection patterns. The hole needs to be of+ record type, of course.++ test : {A B : Set} (a : A) (b : B) → A × B+ test a b = ?++ Result-splitting ? will produce the new clauses:++ proj₁ (test a b) = ?+ proj₂ (test a b) = ?++ [ This has changed: ]+ If hole is of function type, make-case will introduce only pattern+ variables (as much as it can).++ testFun : {A B : Set} (a : A) (b : B) → A × B+ testFun = ?++ Result-splitting ? will produce the new clause:++ testFun a b = ?++ A second invocation of make-case will then introduce projection patterns.++Error messages+==============++* Agda now suggests corrections of misspelled options, e.g.++ {-# OPTIONS+ --dont-termination-check+ --without-k+ --senf-gurke+ #-}++ Unrecognized options:+ --dont-termination-check (did you mean --no-termination-check ?)+ --without-k (did you mean --without-K ?)+ --senf-gurke++ Nothing close to --senf-gurke, I am afraid.++Compiler backends+=================++* The Epic backend has been removed [Issue 1481].++Bug fixes+=========++* Fixed bug with unquoteDecl not working in instance blocks [Issue 1491].++* Other issues fixed ( see https://code.google.com/p/agda/issues )+ 1497+ 1500++------------------------------------------------------------------------+-- Release notes for Agda version 2.4.2.2+------------------------------------------------------------------------++Important changes since 2.4.2.1:++Bug fixes+=========++* Compilation on Windows fixed.++* Other issues fixed ( see https://code.google.com/p/agda/issues )+ 1332+ 1353+ 1360+ 1366+ 1369++------------------------------------------------------------------------+-- Release notes for Agda version 2.4.2.1+------------------------------------------------------------------------++Important changes since 2.4.2:++Pragmas and options+===================++* New pragma {-# TERMINATING #-} replacing {-# NO_TERMINATION_CHECK #-}++ Complements the existing pragma {-# NON_TERMINATING #-}.+ Skips termination check for the associated definitions and marks+ them as terminating. Thus, it is a replacement for+ {-# NO_TERMINATION_CHECK #-} with the same semantics.++ You can no longer use pragma {-# NO_TERMINATION_CHECK #-} to skip+ the termination check, but must label your definitions as either+ {-# TERMINATING #-} or {-# NON_TERMINATING #-} instead.++ Note: {-# OPTION --no-termination-check #-} labels all your+ definitions as {-# TERMINATING #-}, putting you in the danger zone+ of a loop in the type checker.++Language+========++* Referring to a local variable shadowed by module opening is now+ an error. Previous behavior was preferring the local over the+ imported definitions. [Issue 1266]++ Note that module parameters are locals as well as variables bound by+ λ, dependent function type, patterns, and let.++ Example:++ module M where+ A = Set1++ test : (A : Set) → let open M in A++ The last A produces an error, since it could refer to the local+ variable A or to the definition imported from module M.++* `with` on a variable bound by a module telescope or a pattern of a+ parent function is now forbidden. [Issue 1342]++ data Unit : Set where+ unit : Unit++ id : (A : Set) → A → A+ id A a = a++ module M (x : Unit) where++ dx : Unit → Unit+ dx unit = x++ g : ∀ u → x ≡ dx u+ g with x+ g | unit = id (∀ u → unit ≡ dx u) ?++ Even though this code looks right, Agda complains about the type+ expression `∀ u → unit ≡ dx u`. If you ask Agda what should go+ there instead, it happily tells you that it wants+ `∀ u → unit ≡ dx u`. In fact what you do not see and Agda+ will never show you is that the two expressions actually differ in+ the invisible first argument to `dx`, which is visible only outside+ module `M`. What Agda wants is an invisible `unit` after `dx`, but all+ you can write is an invisible `x` (which is inserted behind the+ scenes).++ To avoid those kinds of paradoxes, `with` is now outlawed on module+ parameters. This should ensure that the invisible arguments are+ always exactly the module parameters.++ Since a `where` block is desugared as module with pattern variables+ of the parent clause as module parameters, the same strikes you for+ uses of `with` on pattern variables of the parent function.++ f : Unit → Unit+ f x = unit+ where+ dx : Unit → Unit+ dx unit = x++ g : ∀ u → x ≡ dx u+ g with x+ g | unit = id ((u : Unit) → unit ≡ dx u) ?++ The `with` on pattern variable `x` of the parent clause `f x = unit`+ is outlawed now.++Type checking+=============++* Termination check failure is now a proper error.++ We no longer continue type checking after termination check failures.+ Use pragmas {-# NON_TERMINATING #-} and {-# NO_TERMINATION_CHECK #-}+ near the offending definitions if you want to do so.+ Or switch off the termination checker altogether with+ {-# OPTIONS --no-termination-check #-} (at your own risk!).++* (Since Agda 2.4.2:) Termination checking --without-K restricts+ structural descent to arguments ending in data types or `Size`.+ Likewise, guardedness is only tracked when result type is data or+ record type.++ mutual+ data WOne : Set where wrap : FOne → WOne+ FOne = ⊥ → WOne++ noo : (X : Set) → (WOne ≡ X) → X → ⊥+ noo .WOne refl (wrap f) = noo FOne iso f++ `noo` is rejected since at type `X` the structural descent+ `f < wrap f` is discounted --without-K.++ data Pandora : Set where+ C : ∞ ⊥ → Pandora++ loop : (A : Set) → A ≡ Pandora → A+ loop .Pandora refl = C (♯ (loop ⊥ foo))++ `loop` is rejected since guardedness is not tracked at type `A`+ --without-K.++ See issues 1023, 1264, 1292.++Termination checking+====================++* The termination checker can now recognize simple subterms in dot+ patterns.++ data Subst : (d : Nat) → Set where+ c₁ : ∀ {d} → Subst d → Subst d+ c₂ : ∀ {d₁ d₂} → Subst d₁ → Subst d₂ → Subst (suc d₁ + d₂)++ postulate+ comp : ∀ {d₁ d₂} → Subst d₁ → Subst d₂ → Subst (d₁ + d₂)++ lookup : ∀ d → Nat → Subst d → Set₁+ lookup d zero (c₁ ρ) = Set+ lookup d (suc v) (c₁ ρ) = lookup d v ρ+ lookup .(suc d₁ + d₂) v (c₂ {d₁} {d₂} ρ σ) = lookup (d₁ + d₂) v (comp ρ σ)++ The dot pattern here is actually normalized, so it is++ suc (d₁ + d₂)++ and the corresponding recursive call argument is (d₁ + d₂).+ In such simple cases, Agda can now recognize that the pattern is+ constructor applied to call argument, which is valid descent.++ Note however, that Agda only looks for syntactic equality when+ identifying subterms, since it is not allowed to normalize terms on+ the rhs during termination checking.++ Actually writing the dot pattern has no effect, this works as well,+ and looks pretty magical... ;-)++ hidden : ∀{d} → Nat → Subst d → Set₁+ hidden zero (c₁ ρ) = Set+ hidden (suc v) (c₁ ρ) = hidden v ρ+ hidden v (c₂ ρ σ) = hidden v (comp ρ σ)++Tools+=====++LaTeX-backend+-------------++* Fixed the issue of identifiers containing operators being typeset with+ excessive math spacing.++Bug fixes+=========++* Issue 1194++* Issue 836: Fields and constructors can be qualified by the+ record/data *type* as well as by their record/data module.+ This now works also for record/data type imported from+ parametrized modules:++ module M (_ : Set₁) where++ record R : Set₁ where+ field+ X : Set++ open M Set using (R) -- rather than using (module R)++ X : R → Set+ X = R.X++------------------------------------------------------------------------+-- Release notes for Agda version 2.4.2+------------------------------------------------------------------------++Important changes since 2.4.0.2:++Pragmas and options+===================++* New option: --with-K.++ This can be used to override a global --without-K in a file, by+ adding a pragma {-# OPTIONS --with-K #-}.++* New pragma {-# NON_TERMINATING #-}++ This is a safer version of NO_TERMINATION_CHECK which doesn't treat the+ affected functions as terminating. This means that NON_TERMINATING functions+ do not reduce during type checking. They do reduce at run-time and when+ invoking C-c C-n at top-level (but not in a hole).++Language+========++* Instance search is now more efficient and recursive (see issue 938)+ (but without termination check yet).++ A new keyword `instance' has been introduced (in the style of+ `abstract' and `private') which must now be used for every+ definition/postulate that has to be taken into account during instance+ resolution. For example:++ record RawMonoid (A : Set) : Set where+ field+ nil : A+ _++_ : A -> A -> A++ open RawMonoid {{...}}++ instance+ rawMonoidList : {A : Set} -> RawMonoid (List A)+ rawMonoidList = record { nil = []; _++_ = List._++_ }++ rawMonoidMaybe : {A : Set} {{m : RawMonoid A}} -> RawMonoid (Maybe A)+ rawMonoidMaybe {A} = record { nil = nothing ; _++_ = catMaybe }+ where+ catMaybe : Maybe A -> Maybe A -> Maybe A+ catMaybe nothing mb = mb+ catMaybe ma nothing = ma+ catMaybe (just a) (just b) = just (a ++ b)++ Moreover, each type of an instance must end in (something that reduces+ to) a named type (e.g. a record, a datatype or a postulate). This+ allows us to build a simple index structure++ data/record name --> possible instances++ that speeds up instance search.++ Instance search takes into account all local bindings and all global+ 'instance' bindings and the search is recursive. For instance,+ searching for++ ? : RawMonoid (Maybe (List A))++ will consider the candidates {rawMonoidList, rawMonoidMaybe}, fail to+ unify the first one, succeeding with the second one++ ? = rawMonoidMaybe {A = List A} {{m = ?m}} : RawMonoid (Maybe (List A))++ and continue with goal++ ?m : RawMonoid (List A)++ This will then find++ ?m = rawMonoidList {A = A}++ and putting together we have the solution.++ Be careful that there is no termination check for now, you can easily+ make Agda loop by declaring the identity function as an instance. But+ it shouldn’t be possible to make Agda loop by only declaring+ structurally recursive instances (whatever that means).++ Additionally:++ * Uniqueness of instances is up to definitional equality (see issue 899).++ * Instances of the following form are allowed:++ EqSigma : {A : Set} {B : A → Set} {{EqA : Eq A}}+ {{EqB : {a : A} → Eq (B a)}}+ → Eq (Σ A B)++ When searching recursively for an instance of type+ `{a : A} → Eq (B a)', a lambda will automatically be introduced and+ instance search will search for something of type `Eq (B a)' in+ the context extended by `a : A'. When searching for an instance, the+ `a' argument does not have to be implicit, but in the definition of+ EqSigma, instance search will only be able to use EqB if `a' is implicit.++ * There is no longer any attempt to solve irrelevant metas by instance+ search.++ * Constructors of records and datatypes are automatically added to the+ instance table.++* You can now use 'quote' in patterns.++ For instance, here is a function that unquotes a (closed) natural number+ term.++ unquoteNat : Term → Maybe Nat+ unquoteNat (con (quote Nat.zero) []) = just zero+ unquoteNat (con (quote Nat.suc) (arg _ n ∷ [])) = fmap suc (unquoteNat n)+ unquoteNat _ = nothing++* The builtin constructors AGDATERMUNSUPPORTED and AGDASORTUNSUPPORTED are now+ translated to meta variables when unquoting.++* New syntactic sugar 'tactic e' and 'tactic e | e1 | .. | en'.++ It desugars as follows and makes it less unwieldy to call reflection-based+ tactics.++ tactic e --> quoteGoal g in unquote (e g)+ tactic e | e1 | .. | en --> quoteGoal g in unquote (e g) e1 .. en++ Note that in the second form the tactic function should generate a function+ from a number of new subgoals to the original goal. The type of e should be+ Term -> Term in both cases.++* New reflection builtins for literals.++ The Term data type AGDATERM now needs an additional constructor AGDATERMLIT+ taking a reflected literal defined as follows (with appropriate builtin+ bindings for the types Nat, Float, etc).++ data Literal : Set where+ nat : Nat → Literal+ float : Float → Literal+ char : Char → Literal+ string : String → Literal+ qname : QName → Literal++ {-# BUILTIN AGDALITERAL Literal #-}+ {-# BUILTIN AGDALITNAT nat #-}+ {-# BUILTIN AGDALITFLOAT float #-}+ {-# BUILTIN AGDALITCHAR char #-}+ {-# BUILTIN AGDALITSTRING string #-}+ {-# BUILTIN AGDALITQNAME qname #-}++ When quoting (quoteGoal or quoteTerm) literals will be mapped to the+ AGDATERMLIT constructor. Previously natural number literals were quoted+ to suc/zero application and other literals were quoted to+ AGDATERMUNSUPPORTED.++* New reflection builtins for function definitions.++ AGDAFUNDEF should now map to a data type defined as follows+ (with {-# BUILTIN QNAME QName #-}+ {-# BUILTIN ARG Arg #-}+ {-# BUILTIN AGDATERM Term #-}+ {-# BUILTIN AGDATYPE Type #-}+ {-# BUILTIN AGDALITERAL Literal #-}).++ data Pattern : Set where+ con : QName → List (Arg Pattern) → Pattern+ dot : Pattern+ var : Pattern+ lit : Literal → Pattern+ proj : QName → Pattern+ absurd : Pattern++ {-# BUILTIN AGDAPATTERN Pattern #-}+ {-# BUILTIN AGDAPATCON con #-}+ {-# BUILTIN AGDAPATDOT dot #-}+ {-# BUILTIN AGDAPATVAR var #-}+ {-# BUILTIN AGDAPATLIT lit #-}+ {-# BUILTIN AGDAPATPROJ proj #-}+ {-# BUILTIN AGDAPATABSURD absurd #-}++ data Clause : Set where+ clause : List (Arg Pattern) → Term → Clause+ absurd-clause : List (Arg Pattern) → Clause++ {-# BUILTIN AGDACLAUSE Clause #-}+ {-# BUILTIN AGDACLAUSECLAUSE clause #-}+ {-# BUILTIN AGDACLAUSEABSURD absurd-clause #-}++ data FunDef : Set where+ fun-def : Type → List Clause → FunDef++ {-# BUILTIN AGDAFUNDEF FunDef #-}+ {-# BUILTIN AGDAFUNDEFCON fun-def #-}++* New reflection builtins for extended (pattern-matching) lambda.++ The AGDATERM data type has been augmented with a constructor++ AGDATERMEXTLAM : List AGDACLAUSE → List (ARG AGDATERM) → AGDATERM++ Absurd lambdas (λ ()) are quoted to extended lambdas with an absurd clause.++* Unquoting declarations.++ You can now define (recursive) functions by reflection using the new+ unquoteDecl declaration++ unquoteDecl x = e++ Here e should have type AGDAFUNDEF and evaluate to a closed value. This value+ is then spliced in as the definition of x. In the body e, x has type QNAME+ which lets you splice in recursive definitions.++ Standard modifiers, such as fixity declarations, can be applied to x as+ expected.++* Quoted levels++ Universe levels are now quoted properly instead of being quoted to+ AGDASORTUNSUPPORTED. Setω still gets an unsupported sort, however.++* Module applicants can now be operator applications. Example:++ postulate+ [_] : A -> B++ module M (b : B) where++ module N (a : A) = M [ a ]++ [See Issue 1245.]++* Minor change in module application semantics. [Issue 892]++ Previously re-exported functions were not redefined when instantiating a+ module. For instance++ module A where f = ...+ module B (X : Set) where+ open A public+ module C = B Nat++ In this example C.f would be an alias for A.f, so if both A and C were opened+ f would not be ambiguous. However, this behaviour is not correct when A and B+ share some module parameters (issue 892). To fix this C now defines its own+ copy of f (which evaluates to A.f), which means that opening A and C results+ in an ambiguous f.++Type checking+=============++* Recursive records need to be declared as either inductive or coinductive.+ 'inductive' is no longer default for recursive records.+ Examples:++ record _×_ (A B : Set) : Set where+ constructor _,_+ field+ fst : A+ snd : B++ record Tree (A : Set) : Set where+ inductive+ constructor tree+ field+ elem : A+ subtrees : List (Tree A)++ record Stream (A : Set) : Set where+ coinductive+ constructor _::_+ field+ head : A+ tail : Stream A++ If you are using old-style (musical) coinduction, a record may have+ to be declared as inductive, paradoxically.++ record Stream (A : Set) : Set where+ inductive -- YES, THIS IS INTENDED !+ constructor _∷_+ field+ head : A+ tail : ∞ (Stream A)++ This is because the ``coinduction'' happens in the use of `∞' and not+ in the use of `record'.++Tools+=====++Emacs mode+----------++* A new menu option "Display" can be used to display the version of+ the running Agda process.++LaTeX-backend+-------------++* New experimental option ``references'' has been added. When specified,+ i.e.:++ \usepackage[references]{agda}++ a new command called \AgdaRef is provided, which lets you reference+ previously typeset commands, e.g.:++ Let us postulate \AgdaRef{apa}.++ \begin{code}+ postulate+ apa : Set+ \end{code}++ Above ``apa'' will be typeset (highlighted) the same in the text as in+ the code, provided that the LaTeX output is post-processed using+ src/data/postprocess-latex.pl, e.g.:++ cp $(dirname $(dirname $(agda-mode locate)))/postprocess-latex.pl .+ agda -i. --latex Example.lagda+ cd latex/+ perl ../postprocess-latex.pl Example.tex > Example.processed+ mv Example.processed Example.tex+ xelatex Example.tex++ Mix-fix and unicode should work as expected (unicode requires+ XeLaTeX/LuaLaTeX), but there are limitations:++ + Overloading identifiers should be avoided, if multiples exist+ \AgdaRef will typeset according to the first it finds.++ + Only the current module is used, should you need to reference+ identifiers in other modules then you need to specify which other+ module manually, i.e. \AgdaRef[module]{identifier}.++------------------------------------------------------------------------+-- Release notes for Agda 2 version 2.4.0.2+------------------------------------------------------------------------++Important changes since 2.4.0.1:++* The Agda input mode now supports alphabetical super and subscripts,+ in addition to the numerical ones that were already present.+ [Issue 1240]++* New feature: Interactively split result.++ Make case (C-c C-c) with no variables given tries to split on the+ result to introduce projection patterns. The hole needs to be of+ record type, of course.++ test : {A B : Set} (a : A) (b : B) → A × B+ test a b = ?++ Result-splitting ? will produce the new clauses:++ proj₁ (test a b) = ?+ proj₂ (test a b) = ?++ If hole is of function type ending in a record type, the necessary+ pattern variables will be introduced before the split. Thus, the+ same result can be obtained by starting from:++ test : {A B : Set} (a : A) (b : B) → A × B+ test = ?++* The so far undocumented ETA pragma now throws an error if applied to+ definitions that are not records.++ ETA can be used to force eta-equality at recursive record types,+ for which eta is not enabled automatically by Agda.+ Here is such an example:++ mutual+ data Colist (A : Set) : Set where+ [] : Colist A+ _∷_ : A → ∞Colist A → Colist A++ record ∞Colist (A : Set) : Set where+ coinductive+ constructor delay+ field force : Colist A++ open ∞Colist++ {-# ETA ∞Colist #-}++ test : {A : Set} (x : ∞Colist A) → x ≡ delay (force x)+ test x = refl++ Note: Unsafe use of ETA can make Agda loop, e.g. by triggering+ infinite eta expansion!++* Bugs fixed (see https://code.google.com/p/agda/issues):+ 1203+ 1205+ 1209+ 1213+ 1214+ 1216+ 1225+ 1226+ 1231+ 1233+ 1239+ 1241+ 1243++------------------------------------------------------------------------+-- Release notes for Agda 2 version 2.4.0.1+------------------------------------------------------------------------++Important changes since 2.4.0:++* The option --compile-no-main has been renamed to --no-main.++* COMPILED_DATA pragmas can now be given for records.++* Various bug fixes.++------------------------------------------------------------------------+-- Release notes for Agda 2 version 2.4.0+------------------------------------------------------------------------++Important changes since 2.3.2.2:++Installation and infrastructure+===============================++* A new module called Agda.Primitive has been introduced. This module+ is available to all users, even if the standard library is not used.+ Currently the module contains level primitives and their+ representation in Haskell when compiling with MAlonzo:++ infixl 6 _⊔_++ postulate+ Level : Set+ lzero : Level+ lsuc : (ℓ : Level) → Level+ _⊔_ : (ℓ₁ ℓ₂ : Level) → Level++ {-# COMPILED_TYPE Level () #-}+ {-# COMPILED lzero () #-}+ {-# COMPILED lsuc (\_ -> ()) #-}+ {-# COMPILED _⊔_ (\_ _ -> ()) #-}++ {-# BUILTIN LEVEL Level #-}+ {-# BUILTIN LEVELZERO lzero #-}+ {-# BUILTIN LEVELSUC lsuc #-}+ {-# BUILTIN LEVELMAX _⊔_ #-}++ To bring these declarations into scope you can use a declaration+ like the following one:++ open import Agda.Primitive using (Level; lzero; lsuc; _⊔_)++ The standard library reexports these primitives (using the names+ zero and suc instead of lzero and lsuc) from the Level module.++ Existing developments using universe polymorphism might now trigger+ the following error message:++ Duplicate binding for built-in thing LEVEL, previous binding to+ .Agda.Primitive.Level++ To fix this problem, please remove the duplicate bindings.++ Technical details (perhaps relevant to those who build Agda+ packages):++ The include path now always contains a directory <DATADIR>/lib/prim,+ and this directory is supposed to contain a subdirectory Agda+ containing a file Primitive.agda.++ The standard location of <DATADIR> is system- and+ installation-specific. E.g., in a cabal --user installation of+ Agda-2.3.4 on a standard single-ghc Linux system it would be+ $HOME/.cabal/share/Agda-2.3.4 or something similar.++ The location of the <DATADIR> directory can be configured at+ compile-time using Cabal flags (--datadir and --datasubdir).+ The location can also be set at run-time, using the Agda_datadir+ environment variable.++Pragmas and options+===================++* Pragma NO_TERMINATION_CHECK placed within a mutual block is now+ applied to the whole mutual block (rather than being discarded+ silently). Adding to the uses 1.-4. outlined in the release notes+ for 2.3.2 we allow:++ 3a. Skipping an old-style mutual block: Somewhere within 'mutual'+ block before a type signature or first function clause.++ mutual+ {-# NO_TERMINATION_CHECK #-}+ c : A+ c = d++ d : A+ d = c++* New option --no-pattern-matching++ Disables all forms of pattern matching (for the current file).+ You can still import files that use pattern matching.++* New option -v profile:7++ Prints some stats on which phases Agda spends how much time.+ (Number might not be very reliable, due to garbage collection+ interruptions, and maybe due to laziness of Haskell.)++* New option --no-sized-types++ Option --sized-types is now default.+ --no-sized-types will turn off an extra (inexpensive) analysis on+ data types used for subtyping of sized types.++Language+========++* Experimental feature: quoteContext++ There is a new keyword 'quoteContext' that gives users access to the+ list of names in the current local context. For instance:++ open import Data.Nat+ open import Data.List+ open import Reflection++ foo : ℕ → ℕ → ℕ+ foo 0 m = 0+ foo (suc n) m = quoteContext xs in ?++ In the remaining goal, the list xs will consist of two names, n and+ m, corresponding to the two local variables. At the moment it is not+ possible to access let bound variables -- this feature may be added+ in the future.++* Experimental feature: Varying arity.+ Function clauses may now have different arity, e.g.,++ Sum : ℕ → Set+ Sum 0 = ℕ+ Sum (suc n) = ℕ → Sum n++ sum : (n : ℕ) → ℕ → Sum n+ sum 0 acc = acc+ sum (suc n) acc m = sum n (m + acc)++ or,++ T : Bool → Set+ T true = Bool+ T false = Bool → Bool++ f : (b : Bool) → T b+ f false true = false+ f false false = true+ f true = true++ This feature is experimental. Yet unsupported:+ * Varying arity and 'with'.+ * Compilation of functions with varying arity to Haskell, JS, or Epic.++* Experimental feature: copatterns. (Activated with option --copatterns)++ We can now define a record by explaining what happens if you project+ the record. For instance:++ {-# OPTIONS --copatterns #-}++ record _×_ (A B : Set) : Set where+ constructor _,_+ field+ fst : A+ snd : B+ open _×_++ pair : {A B : Set} → A → B → A × B+ fst (pair a b) = a+ snd (pair a b) = b++ swap : {A B : Set} → A × B → B × A+ fst (swap p) = snd p+ snd (swap p) = fst p++ swap3 : {A B C : Set} → A × (B × C) → C × (B × A)+ fst (swap3 t) = snd (snd t)+ fst (snd (swap3 t)) = fst (snd t)+ snd (snd (swap3 t)) = fst t++ Taking a projection on the left hand side (lhs) is called a+ projection pattern, applying to a pattern is called an application+ pattern. (Alternative terms: projection/application copattern.)++ In the first example, the symbol 'pair', if applied to variable+ patterns a and b and then projected via fst, reduces to a.+ 'pair' by itself does not reduce.++ A typical application are coinductive records such as streams:++ record Stream (A : Set) : Set where+ coinductive+ field+ head : A+ tail : Stream A+ open Stream++ repeat : {A : Set} (a : A) -> Stream A+ head (repeat a) = a+ tail (repeat a) = repeat a++ Again, 'repeat a' by itself will not reduce, but you can take+ a projection (head or tail) and then it will reduce to the+ respective rhs. This way, we get the lazy reduction behavior+ necessary to avoid looping corecursive programs.++ Application patterns do not need to be trivial (i.e., variable+ patterns), if we mix with projection patterns. E.g., we can have++ nats : Nat -> Stream Nat+ head (nats zero) = zero+ tail (nats zero) = nats zero+ head (nats (suc x)) = x+ tail (nats (suc x)) = nats x++ Here is an example (not involving coinduction) which demostrates+ records with fields of function type:++ -- The State monad++ record State (S A : Set) : Set where+ constructor state+ field+ runState : S → A × S+ open State++ -- The Monad type class++ record Monad (M : Set → Set) : Set1 where+ constructor monad+ field+ return : {A : Set} → A → M A+ _>>=_ : {A B : Set} → M A → (A → M B) → M B+++ -- State is an instance of Monad+ -- Demonstrates the interleaving of projection and application patterns++ stateMonad : {S : Set} → Monad (State S)+ runState (Monad.return stateMonad a ) s = a , s+ runState (Monad._>>=_ stateMonad m k) s₀ =+ let a , s₁ = runState m s₀+ in runState (k a) s₁++ module MonadLawsForState {S : Set} where++ open Monad (stateMonad {S})++ leftId : {A B : Set}(a : A)(k : A → State S B) →+ (return a >>= k) ≡ k a+ leftId a k = refl++ rightId : {A B : Set}(m : State S A) →+ (m >>= return) ≡ m+ rightId m = refl++ assoc : {A B C : Set}(m : State S A)(k : A → State S B)(l : B → State S C) →+ ((m >>= k) >>= l) ≡ (m >>= λ a → (k a >>= l))+ assoc m k l = refl++ Copatterns are yet experimental and the following does not work:++ * Copatterns and 'with' clauses.++ * Compilation of copatterns to Haskell, JS, or Epic.++ * Projections generated by+ open R {{...}}+ are not handled properly on lhss yet.++ * Conversion checking is slower in the presence of copatterns,+ since stuck definitions of record type do no longer count+ as neutral, since they can become unstuck by applying a projection.+ Thus, comparing two neutrals currently requires comparing all+ they projections, which repeats a lot of work.++* Top-level module no longer required.++ The top-level module can be omitted from an Agda file. The module name is+ then inferred from the file name by dropping the path and the .agda+ extension. So, a module defined in /A/B/C.agda would get the name C.++ You can also suppress only the module name of the top-level module by writing++ module _ where++ This works also for parameterised modules.++* Module parameters are now always hidden arguments in projections.+ For instance:++ module M (A : Set) where++ record Prod (B : Set) : Set where+ constructor _,_+ field+ fst : A+ snd : B+ open Prod public++ open M++ Now, the types of fst and snd are++ fst : {A : Set}{B : Set} → Prod A B → A+ snd : {A : Set}{B : Set} → Prod A B → B++ Until 2.3.2, they were++ fst : (A : Set){B : Set} → Prod A B → A+ snd : (A : Set){B : Set} → Prod A B → B++ This change is a step towards symmetry of constructors and projections.+ (Constructors always took the module parameters as hidden arguments).++* Telescoping lets: Local bindings are now accepted in telescopes+ of modules, function types, and lambda-abstractions.++ The syntax of telescopes as been extended to support 'let':++ id : (let ★ = Set) (A : ★) → A → A+ id A x = x++ In particular one can now 'open' modules inside telescopes:++ module Star where+ ★ : Set₁+ ★ = Set++ module MEndo (let open Star) (A : ★) where+ Endo : ★+ Endo = A → A++ Finally a shortcut is provided for opening modules:++ module N (open Star) (A : ★) (open MEndo A) (f : Endo) where+ ...++ The semantics of the latter is++ module _ where+ open Star+ module _ (A : ★) where+ open MEndo A+ module N (f : Endo) where+ ...++ The semantics of telescoping lets in function types and lambda+ abstractions is just expanding them into ordinary lets.++* More liberal left-hand sides in lets [Issue 1028]:++ You can now write left-hand sides with arguments also for let bindings+ without a type signature. For instance,++ let f x = suc x in f zero++ Let bound functions still can't do pattern matching though.++* Ambiguous names in patterns are now optimistically resolved in favor+ of constructors. [Issue 822] In particular, the following succeeds now:++ module M where++ data D : Set₁ where+ [_] : Set → D++ postulate [_] : Set → Set++ open M++ Foo : _ → Set+ Foo [ A ] = A++* Anonymous where-modules are opened public. [Issue 848]++ <clauses>+ f args = rhs+ module _ telescope where+ body+ <more clauses>++ means the following (not proper Agda code, since you cannot put a+ module in-between clauses)++ <clauses>+ module _ {arg-telescope} telescope where+ body++ f args = rhs+ <more clauses>++ Example:++ A : Set1+ A = B module _ where+ B : Set1+ B = Set++ C : Set1+ C = B++* Builtin ZERO and SUC have been merged with NATURAL.++ When binding the NATURAL builtin, ZERO and SUC are bound to the appropriate+ constructors automatically. This means that instead of writing++ {-# BUILTIN NATURAL Nat #-}+ {-# BUILTIN ZERO zero #-}+ {-# BUILTIN SUC suc #-}++ you just write++ {-# BUILTIN NATURAL Nat #-}++* Pattern synonym can now have implicit arguments. [Issue 860]++ For example,++ pattern tail=_ {x} xs = x ∷ xs++ len : ∀ {A} → List A → Nat+ len [] = 0+ len (tail= xs) = 1 + len xs++* Syntax declarations can now have implicit arguments. [Issue 400]++ For example++ id : ∀ {a}{A : Set a} -> A -> A+ id x = x++ syntax id {A} x = x ∈ A++* Minor syntax changes++ * -} is now parsed as end-comment even if no comment was begun.+ As a consequence, the following definition gives a parse error++ f : {A- : Set} -> Set+ f {A-} = A-++ because Agda now sees ID(f) LBRACE ID(A) END-COMMENT, and no+ longer ID(f) LBRACE ID(A-) RBRACE.++ The rational is that the previous lexing was to context-sensitive,+ attempting to comment-out f using {- and -} lead to a parse error.++ * Fixities (binding strengths) can now be negative numbers as+ well. [Issue 1109]++ infix -1 _myop_++ * Postulates are now allowed in mutual blocks. [Issue 977]++ * Empty where blocks are now allowed. [Issue 947]++ * Pattern synonyms are now allowed in parameterised modules. [Issue 941]++ * Empty hiding and renaming lists in module directives are now allowed.++ * Module directives using, hiding, renaming and public can now appear in+ arbitrary order. Multiple using/hiding/renaming directives are allowed, but+ you still cannot have both using and hiding (because that doesn't make+ sense). [Issue 493]++Goal and error display+======================++* The error message "Refuse to construct infinite term" has been+ removed, instead one gets unsolved meta variables. Reason: the+ error was thrown over-eagerly. [Issue 795]++* If an interactive case split fails with message++ Since goal is solved, further case distinction is not supported;+ try `Solve constraints' instead++ then the associated interaction meta is assigned to a solution.+ Press C-c C-= (Show constraints) to view the solution and C-c C-s+ (Solve constraints) to apply it. [Issue 289]++Type checking+=============++* [ issue 376 ] Implemented expansion of bound record variables during meta assignment.+ Now Agda can solve for metas X that are applied to projected variables, e.g.:++ X (fst z) (snd z) = z++ X (fst z) = fst z++ Technically, this is realized by substituting (x , y) for z with fresh+ bound variables x and y. Here the full code for the examples:++ record Sigma (A : Set)(B : A -> Set) : Set where+ constructor _,_+ field+ fst : A+ snd : B fst+ open Sigma++ test : (A : Set) (B : A -> Set) ->+ let X : (x : A) (y : B x) -> Sigma A B+ X = _+ in (z : Sigma A B) -> X (fst z) (snd z) ≡ z+ test A B z = refl++ test' : (A : Set) (B : A -> Set) ->+ let X : A -> A+ X = _+ in (z : Sigma A B) -> X (fst z) ≡ fst z+ test' A B z = refl++ The fresh bound variables are named fst(z) and snd(z) and can appear+ in error messages, e.g.:++ fail : (A : Set) (B : A -> Set) ->+ let X : A -> Sigma A B+ X = _+ in (z : Sigma A B) -> X (fst z) ≡ z+ fail A B z = refl++ results in error:++ Cannot instantiate the metavariable _7 to solution fst(z) , snd(z)+ since it contains the variable snd(z) which is not in scope of the+ metavariable or irrelevant in the metavariable but relevant in the+ solution+ when checking that the expression refl has type _7 A B (fst z) ≡ z++* Dependent record types and definitions by copatterns require+ reduction with previous function clauses while checking the+ current clause. [Issue 907]++ For a simple example, consider++ test : ∀ {A} → Σ Nat λ n → Vec A n+ proj₁ test = zero+ proj₂ test = []++ For the second clause, the lhs and rhs are typed as++ proj₂ test : Vec A (proj₁ test)+ [] : Vec A zero++ In order for these types to match, we have to reduce the lhs type+ with the first function clause.++ Note that termination checking comes after type checking, so be+ careful to avoid non-termination! Otherwise, the type checker+ might get into an infinite loop.++* The implementation of the primitive primTrustMe has changed.+ It now only reduces to REFL if the two arguments x and y have+ the same computational normal form. Before, it reduced when+ x and y were definitionally equal, which included type-directed+ equality laws such as eta-equality. Yet because reduction is+ untyped, calling conversion from reduction lead to Agda crashes+ [Issue 882].++ The amended description of primTrustMe is (cf. release notes for 2.2.6):++ primTrustMe : {A : Set} {x y : A} → x ≡ y++ Here _≡_ is the builtin equality (see BUILTIN hooks for equality,+ above).++ If x and y have the same computational normal form, then+ primTrustMe {x = x} {y = y} reduces to refl.++ A note on primTrustMe's runtime behavior:+ The MAlonzo compiler replaces all uses of primTrustMe with the+ REFL builtin, without any check for definitional equality. Incorrect+ uses of primTrustMe can potentially lead to segfaults or similar+ problems of the compiled code.++* Implicit patterns of record type are now only eta-expanded if there+ is a record constructor. [Issues 473, 635]++ data D : Set where+ d : D++ data P : D → Set where+ p : P d++ record Rc : Set where+ constructor c+ field f : D++ works : {r : Rc} → P (Rc.f r) → Set+ works p = D++ This works since the implicit pattern {r} is eta-expanded to+ {c x} which allows the type of p to reduce to P x and x to be+ unified with d. The corresponding explicit version is:++ works' : (r : Rc) → P (Rc.f r) → Set+ works' (c .d) p = D++ However, if the record constructor is removed, the same example will+ fail:++ record R : Set where+ field f : D++ fails : {r : R} → P (R.f r) → Set+ fails p = D++ -- d != R.f r of type D+ -- when checking that the pattern p has type P (R.f r)++ The error is justified since there is no pattern we could write down+ for r. It would have to look like++ record { f = .d }++ but anonymous record patterns are not part of the language.++* Absurd lambdas at different source locations are no longer+ different. [Issue 857]+ In particular, the following code type-checks now:++ absurd-equality : _≡_ {A = ⊥ → ⊥} (λ()) λ()+ absurd-equality = refl++ Which is a good thing!++* Printing of named implicit function types.++ When printing terms in a context with bound variables Agda renames new+ bindings to avoid clashes with the previously bound names. For instance, if A+ is in scope, the type (A : Set) → A is printed as (A₁ : Set) → A₁. However,+ for implicit function types the name of the binding matters, since it can be+ used when giving implicit arguments.++ For this situation, the following new syntax has been introduced:+ {x = y : A} → B is an implicit function type whose bound variable (in scope+ in B) is y, but where the name of the argument is x for the purposes of+ giving it explicitly. For instance, with A in scope, the type {A : Set} → A+ is now printed as {A = A₁ : Set} → A₁.++ This syntax is only used when printing and is currently not being parsed.++* Changed the semantics of --without-K. [Issue 712, Issue 865, Issue 1025]++ New specification of --without-K:++ When --without-K is enabled, the unification of indices for pattern matching+ is restricted in two ways:++ 1. Reflexive equations of the form x == x are no longer solved, instead Agda+ gives an error when such an equation is encountered.++ 2. When unifying two same-headed constructor forms 'c us' and 'c vs' of type+ 'D pars ixs', the datatype indices ixs (but not the parameters) have to+ be *self-unifiable*, i.e. unification of ixs with itself should succeed+ positively. This is a nontrivial requirement because of point 1.++ Examples:++ * The J rule is accepted.++ J : {A : Set} (P : {x y : A} → x ≡ y → Set) →+ (∀ x → P (refl x)) →+ ∀ {x y} (x≡y : x ≡ y) → P x≡y+ J P p (refl x) = p x++ This definition is accepted since unification of x with y doesn't require+ deletion or injectivity.++ * The K rule is rejected.++ K : {A : Set} (P : {x : A} → x ≡ x → Set) →+ (∀ x → P (refl {x = x})) →+ ∀ {x} (x≡x : x ≡ x) → P x≡x+ K P p refl = p _++ Definition is rejected with the following error:++ Cannot eliminate reflexive equation x = x of type A because K has+ been disabled.+ when checking that the pattern refl has type x ≡ x++ * Symmetry of the new criterion.++ test₁ : {k l m : ℕ} → k + l ≡ m → ℕ+ test₁ refl = zero++ test₂ : {k l m : ℕ} → k ≡ l + m → ℕ+ test₂ refl = zero++ Both versions are now accepted (previously only the first one was).++ * Handling of parameters.++ cons-injective : {A : Set} (x y : A) → (x ∷ []) ≡ (y ∷ []) → x ≡ y+ cons-injective x .x refl = refl++ Parameters are not unified, so they are ignored by the new criterion.++ * A larger example: antisymmetry of ≤.++ data _≤_ : ℕ → ℕ → Set where+ lz : (n : ℕ) → zero ≤ n+ ls : (m n : ℕ) → m ≤ n → suc m ≤ suc n++ ≤-antisym : (m n : ℕ) → m ≤ n → n ≤ m → m ≡ n+ ≤-antisym .zero .zero (lz .zero) (lz .zero) = refl+ ≤-antisym .(suc m) .(suc n) (ls m n p) (ls .n .m q) =+ cong suc (≤-antisym m n p q)++ * [ Issue 1025 ]++ postulate mySpace : Set+ postulate myPoint : mySpace++ data Foo : myPoint ≡ myPoint → Set where+ foo : Foo refl++ test : (i : foo ≡ foo) → i ≡ refl+ test refl = {!!}++ When applying injectivity to the equation "foo ≡ foo" of type "Foo refl",+ it is checked that the index refl of type "myPoint ≡ myPoint" is+ self-unifiable. The equation "refl ≡ refl" again requires injectivity, so+ now the index myPoint is checked for self-unifiability, hence the error:++ Cannot eliminate reflexive equation myPoint = myPoint of type+ mySpace because K has been disabled.+ when checking that the pattern refl has type foo ≡ foo++Termination checking+====================++* A buggy facility coined "matrix-shaped orders" that supported+ uncurried functions (which take tuples of arguments instead of one+ argument after another) has been removed from the termination+ checker. [Issue 787]++* Definitions which fail the termination checker are not unfolded any+ longer to avoid loops or stack overflows in Agda. However, the+ termination checker for a mutual block is only invoked after+ type-checking, so there can still be loops if you define a+ non-terminating function. But termination checking now happens+ before the other supplementary checks: positivity, polarity,+ injectivity and projection-likeness.+ Note that with the pragma {-# NO_TERMINATION_CHECK #-} you can make+ Agda treat any function as terminating.++* Termination checking of functions defined by 'with' has been improved.++ Cases which previously required --termination-depth+ to pass the termination checker (due to use of 'with') no longer+ need the flag. For example++ merge : List A → List A → List A+ merge [] ys = ys+ merge xs [] = xs+ merge (x ∷ xs) (y ∷ ys) with x ≤ y+ merge (x ∷ xs) (y ∷ ys) | false = y ∷ merge (x ∷ xs) ys+ merge (x ∷ xs) (y ∷ ys) | true = x ∷ merge xs (y ∷ ys)++ This failed to termination check previously, since the 'with' expands to an+ auxiliary function merge-aux:++ merge-aux x y xs ys false = y ∷ merge (x ∷ xs) ys+ merge-aux x y xs ys true = x ∷ merge xs (y ∷ ys)++ This function makes a call to merge in which the size of one of the arguments+ is increasing. To make this pass the termination checker now inlines the+ definition of merge-aux before checking, thus effectively termination+ checking the original source program.++ As a result of this transformation doing 'with' on a variable no longer+ preserves termination. For instance, this does not termination check:++ bad : Nat → Nat+ bad n with n+ ... | zero = zero+ ... | suc m = bad m++* The performance of the termination checker has been improved. For+ higher --termination-depth the improvement is significant.+ While the default --termination-depth is still 1, checking with+ higher --termination-depth should now be feasible.++Compiler backends+=================++* The MAlonzo compiler backend now has support for compiling modules+ that are not full programs (i.e. don't have a main function). The+ goal is that you can write part of a program in Agda and the rest in+ Haskell, and invoke the Agda functions from the Haskell code. The+ following features were added for this reason:++ * A new command-line option --compile-no-main: the command++ agda --compile-no-main Test.agda++ will compile Test.agda and all its dependencies to Haskell and+ compile the resulting Haskell files with --make, but (unlike+ --compile) not tell GHC to treat Test.hs as the main module. This+ type of compilation can be invoked from emacs by customizing the+ agda2-backend variable to value MAlonzoNoMain and then calling+ "C-c C-x C-c" as before.++ * A new pragma COMPILED_EXPORT was added as part of the MAlonzo FFI.+ If we have an Agda file containing the following:++ module A.B where++ test : SomeType+ test = someImplementation++ {-# COMPILED_EXPORT test someHaskellId #-}++ then test will be compiled to a Haskell function called+ someHaskellId in module MAlonzo.Code.A.B that can be invoked from+ other Haskell code. Its type will be translated according to the+ normal MAlonzo rules.++Tools+=====++Emacs mode+----------++* A new goal command "Helper Function Type" (C-c C-h) has been added.++ If you write an application of an undefined function in a goal, the Helper+ Function Type command will print the type that the function needs to have in+ order for it to fit the goal. The type is also added to the Emacs kill-ring+ and can be pasted into the buffer using C-y.++ The application must be of the form "f args" where f is the name of the+ helper function you want to create. The arguments can use all the normal+ features like named implicits or instance arguments.++ Example:++ Here's a start on a naive reverse on vectors:++ reverse : ∀ {A n} → Vec A n → Vec A n+ reverse [] = []+ reverse (x ∷ xs) = {!snoc (reverse xs) x!}++ Calling C-c C-h in the goal prints++ snoc : ∀ {A} {n} → Vec A n → A → Vec A (suc n)++* A new command "Explain why a particular name is in scope" (C-c C-w) has been+ added. [Issue207]++ This command can be called from a goal or from the top-level and will as the+ name suggests explain why a particular name is in scope.++ For each definition or module that the given name can refer to a trace is+ printed of all open statements and module applications leading back to the+ original definition of the name.++ For example, given++ module A (X : Set₁) where+ data Foo : Set where+ mkFoo : Foo+ module B (Y : Set₁) where+ open A Y public+ module C = B Set+ open C++ Calling C-c C-w on mkFoo at the top-level prints++ mkFoo is in scope as+ * a constructor Issue207.C._.Foo.mkFoo brought into scope by+ - the opening of C at Issue207.agda:13,6-7+ - the application of B at Issue207.agda:11,12-13+ - the application of A at Issue207.agda:9,8-9+ - its definition at Issue207.agda:6,5-10++ This command is useful if Agda complains about an ambiguous name and you need+ to figure out how to hide the undesired interpretations.++* Improvements to the "make case" command (C-c C-c)++ - One can now also split on hidden variables, using the name+ (starting with .) with which they are printed.+ Use C-c C-, to see all variables in context.++ - Concerning the printing of generated clauses:++ * Uses named implicit arguments to improve readability.++ * Picks explicit occurrences over implicit ones when there is a choice of+ binding site for a variable.++ * Avoids binding variables in implicit positions by replacing dot patterns+ that uses them by wildcards (._).++* Key bindings for lots of "mathematical" characters (examples: 𝐴𝑨𝒜𝓐𝔄)+ have been added to the Agda input method.+ Example: type \MiA\MIA\McA\MCA\MfA to get 𝐴𝑨𝒜𝓐𝔄.++ Note: \McB does not exist in unicode (as well as others in that style),+ but the \MC (bold) alphabet is complete.++* Key bindings for "blackboard bold" B (𝔹) and 0-9 (𝟘-𝟡) have been added+ to the Agda input method (\bb and \b[0-9]).++* Key bindings for controlling simplification/normalisation:++ [TODO: Simplification should be explained somewhere.]++ Commands like "Goal type and context" (C-c C-,) could previously be+ invoked in two ways. By default the output was normalised, but if a+ prefix argument was used (for instance via C-u C-c C-,), then no+ explicit normalisation was performed. Now there are three options:++ * By default (C-c C-,) the output is simplified.++ * If C-u is used exactly once (C-u C-c C-,), then the result is+ neither (explicitly) normalised nor simplified.++ * If C-u is used twice (C-u C-u C-c C-,), then the result is+ normalised.++ [TODO: As part of the release of Agda 2.3.4 the key binding page on+ the wiki should be updated.]++LaTeX-backend+-------------++* Two new color scheme options were added to agda.sty:++ \usepackage[bw]{agda}, which highlights in black and white;+ \usepackage[conor]{agda}, which highlights using Conor's colors.++ The default (no options passed) is to use the standard colors.++* If agda.sty cannot be found by the latex environment, it is now+ copied into the latex output directory ('latex' by default) instead+ of the working directory. This means that the commands needed to+ produce a PDF now is++ agda --latex -i . <file>.lagda+ cd latex+ pdflatex <file>.tex++* The LaTeX-backend has been made more tool agnostic, in particular+ XeLaTeX and LuaLaTeX should now work. Here is a small example+ (test/LaTeXAndHTML/succeed/UnicodeInput.lagda):++ \documentclass{article}+ \usepackage{agda}+ \begin{document}++ \begin{code}+ data αβγδεζθικλμνξρστυφχψω : Set₁ where++ postulate+ →⇒⇛⇉⇄↦⇨↠⇀⇁ : Set+ \end{code}++ \[+ ∀X [ ∅ ∉ X ⇒ ∃f:X ⟶ ⋃ X\ ∀A ∈ X (f(A) ∈ A) ]+ \]+ \end{document}++ Compiled as follows, it should produce a nice looking PDF (tested with+ TeX Live 2012):++ agda --latex <file>.lagda+ cd latex+ xelatex <file>.tex (or lualatex <file>.tex)++ If symbols are missing or xelatex/lualatex complains about the font+ missing, try setting a different font using:++ \setmathfont{<math-font>}++ Use the fc-list tool to list available fonts.++* Add experimental support for hyperlinks to identifiers++ If the hyperref latex package is loaded before the agda package and+ the links option is passed to the agda package, then the agda package+ provides a function called \AgdaTarget. Identifiers which have been+ declared targets, by the user, will become clickable hyperlinks in the+ rest of the document. Here is a small example+ (test/LaTeXAndHTML/succeed/Links.lagda):++ \documentclass{article}+ \usepackage{hyperref}+ \usepackage[links]{agda}+ \begin{document}++ \AgdaTarget{ℕ}+ \AgdaTarget{zero}+ \begin{code}+ data ℕ : Set where+ zero : ℕ+ suc : ℕ → ℕ+ \end{code}++ See next page for how to define \AgdaFunction{two} (doesn't turn into a+ link because the target hasn't been defined yet). We could do it+ manually though; \hyperlink{two}{\AgdaDatatype{two}}.++ \newpage++ \AgdaTarget{two}+ \hypertarget{two}{}+ \begin{code}+ two : ℕ+ two = suc (suc zero)+ \end{code}++ \AgdaInductiveConstructor{zero} is of type+ \AgdaDatatype{ℕ}. \AgdaInductiveConstructor{suc} has not been defined to+ be a target so it doesn't turn into a link.++ \newpage++ Now that the target for \AgdaFunction{two} has been defined the link+ works automatically.++ \begin{code}+ data Bool : Set where+ true false : Bool+ \end{code}++ The AgdaTarget command takes a list as input, enabling several+ targets to be specified as follows:++ \AgdaTarget{if, then, else, if\_then\_else\_}+ \begin{code}+ if_then_else_ : {A : Set} → Bool → A → A → A+ if true then t else f = t+ if false then t else f = f+ \end{code}++ \newpage++ Mixfix identifier need their underscores escaped:+ \AgdaFunction{if\_then\_else\_}.++ \end{document}++ The boarders around the links can be suppressed using hyperref's+ hidelinks option:++ \usepackage[hidelinks]{hyperref}++ Note that the current approach to links does not keep track of scoping+ or types, and hence overloaded names might create links which point to+ the wrong place. Therefore it is recommended to not overload names+ when using the links option at the moment, this might get fixed in the+ future.++------------------------------------------------------------------------+-- Release notes for Agda 2 version 2.3.2.2+------------------------------------------------------------------------++Important changes since 2.3.2.1:++* Fixed a bug that sometimes made it tricky to use the Emacs mode on+ Windows [issue 757].++* Made Agda build with newer versions of some libraries.++* Fixed a bug that caused ambiguous parse error messages [issue 147].++------------------------------------------------------------------------+-- Release notes for Agda 2 version 2.3.2.1+------------------------------------------------------------------------++Important changes since 2.3.2:++Installation+============++* Made it possible to compile Agda with more recent versions of+ hashable, QuickCheck and Win32.++* Excluded mtl-2.1.++Type checking+=============++* Fixed bug in the termination checker (issue 754).++------------------------------------------------------------------------+-- Release notes for Agda 2 version 2.3.2+------------------------------------------------------------------------++Important changes since 2.3.0:++Installation+============++* The Agda-executable package has been removed.++ The executable is now provided as part of the Agda package.++* The Emacs mode no longer depends on haskell-mode or GHCi.++* Compilation of Emacs mode Lisp files.++ You can now compile the Emacs mode Lisp files by running "agda-mode+ compile". This command is run by "make install".++ Compilation can, in some cases, give a noticeable speedup.++ WARNING: If you reinstall the Agda mode without recompiling the+ Emacs Lisp files, then Emacs may continue using the old, compiled+ files.++Pragmas and options+===================++* The --without-K check now reconstructs constructor parameters.++ New specification of --without-K:++ If the flag is activated, then Agda only accepts certain+ case-splits. If the type of the variable to be split is D pars ixs,+ where D is a data (or record) type, pars stands for the parameters,+ and ixs the indices, then the following requirements must be+ satisfied:++ * The indices ixs must be applications of constructors (or literals)+ to distinct variables. Constructors are usually not applied to+ parameters, but for the purposes of this check constructor+ parameters are treated as other arguments.++ * These distinct variables must not be free in pars.++* Irrelevant arguments are printed as _ by default now. To turn on+ printing of irrelevant arguments, use option++ --show-irrelevant++* New: Pragma NO_TERMINATION_CHECK to switch off termination checker+ for individual function definitions and mutual blocks.++ The pragma must precede a function definition or a mutual block.+ Examples (see test/Succeed/NoTerminationCheck.agda):++ 1. Skipping a single definition: before type signature.++ {-# NO_TERMINATION_CHECK #-}+ a : A+ a = a++ 2. Skipping a single definition: before first clause.++ b : A+ {-# NO_TERMINATION_CHECK #-}+ b = b++ 3. Skipping an old-style mutual block: Before 'mutual' keyword.++ {-# NO_TERMINATION_CHECK #-}+ mutual+ c : A+ c = d++ d : A+ d = c++ 4. Skipping a new-style mutual block: Anywhere before a type+ signature or first function clause in the block++ i : A+ j : A++ i = j+ {-# NO_TERMINATION_CHECK #-}+ j = i++ The pragma cannot be used in --safe mode.++Language+========++* Let binding record patterns++ record _×_ (A B : Set) : Set where+ constructor _,_+ field+ fst : A+ snd : B+ open _×_++ let (x , (y , z)) = t+ in u++ will now be interpreted as++ let x = fst t+ y = fst (snd t)+ z = snd (snd t)+ in u++ Note that the type of t needs to be inferable. If you need to provide+ a type signature, you can write the following:++ let a : ...+ a = t+ (x , (y , z)) = a+ in u++* Pattern synonyms++ A pattern synonym is a declaration that can be used on the left hand+ side (when pattern matching) as well as the right hand side (in+ expressions). For example:++ pattern z = zero+ pattern ss x = suc (suc x)++ f : ℕ -> ℕ+ f z = z+ f (suc z) = ss z+ f (ss n) = n++ Pattern synonyms are implemented by substitution on the abstract+ syntax, so definitions are scope-checked but not type-checked. They+ are particularly useful for universe constructions.++* Qualified mixfix operators++ It is now possible to use a qualified mixfix operator by qualifying the first+ part of the name. For instance++ import Data.Nat as Nat+ import Data.Bool as Bool++ two = Bool.if true then 1 Nat.+ 1 else 0++* Sections [Issue 735]. Agda now parses anonymous modules as sections:++ module _ {a} (A : Set a) where++ data List : Set a where+ [] : List+ _∷_ : (x : A) (xs : List) → List++ module _ {a} {A : Set a} where++ _++_ : List A → List A → List A+ [] ++ ys = ys+ (x ∷ xs) ++ ys = x ∷ (xs ++ ys)++ test : List Nat+ test = (5 ∷ []) ++ (3 ∷ [])++ In general, now the syntax++ module _ parameters where+ declarations++ is accepted and has the same effect as++ private+ module M parameters where+ declarations+ open M public++ for a fresh name M.++* Instantiating a module in an open import statement [Issue 481]. Now accepted:++ open import Path.Module args [using/hiding/renaming (...)]++ This only brings the imported identifiers from Path.Module into scope,+ not the module itself! Consequently, the following is pointless, and raises+ an error:++ import Path.Module args [using/hiding/renaming (...)]++ You can give a private name M to the instantiated module via++ import Path.Module args as M [using/hiding/renaming (...)]+ open import Path.Module args as M [using/hiding/renaming (...)]++ Try to avoid 'as' as part of the arguments. 'as' is not a keyword;+ the following can be legal, although slightly obfuscated Agda code:++ open import as as as as as as++* Implicit module parameters can be given by name. E.g.++ open M {namedArg = bla}++ This feature has been introduced in Agda 2.3.0 already.++* Multiple type signatures sharing a same type can now be written as a single+ type signature.++ one two : ℕ+ one = suc zero+ two = suc one++Goal and error display+======================++* Meta-variables that were introduced by hidden argument `arg' are now+ printed as _arg_number instead of just _number. [Issue 526]++* Agda expands identifiers in anonymous modules when printing.+ Should make some goals nicer to read. [Issue 721]++* When a module identifier is ambiguous, Agda tells you if one+ of them is a data type module. [Issues 318, 705]++Type checking+=============++* Improved coverage checker. The coverage checker splits on+ arguments that have constructor or literal pattern, committing+ to the left-most split that makes progress.+ Consider the lookup function for vectors:++ data Fin : Nat → Set where+ zero : {n : Nat} → Fin (suc n)+ suc : {n : Nat} → Fin n → Fin (suc n)++ data Vec (A : Set) : Nat → Set where+ [] : Vec A zero+ _∷_ : {n : Nat} → A → Vec A n → Vec A (suc n)++ _!!_ : {A : Set}{n : Nat} → Vec A n → Fin n → A+ (x ∷ xs) !! zero = x+ (x ∷ xs) !! suc i = xs !! i++ In Agda up to 2.3.0, this definition is rejected unless we add+ an absurd clause++ [] !! ()++ This is because the coverage checker committed on splitting+ on the vector argument, even though this inevitably lead to+ failed coverage, because a case for the empty vector [] is missing.++ The improvement to the coverage checker consists on committing+ only on splits that have a chance of covering, since all possible+ constructor patterns are present. Thus, Agda will now split+ first on the Fin argument, since cases for both zero and suc are+ present. Then, it can split on the Vec argument, since the+ empty vector is already ruled out by instantiating n to a suc _.++* Instance arguments resolution will now consider candidates which+ still expect hidden arguments. For example:++ record Eq (A : Set) : Set where+ field eq : A → A → Bool++ open Eq {{...}}++ eqFin : {n : ℕ} → Eq (Fin n)+ eqFin = record { eq = primEqFin }++ testFin : Bool+ testFin = eq fin1 fin2++ The type-checker will now resolve the instance argument of the eq+ function to eqFin {_}. This is only done for hidden arguments, not+ instance arguments, so that the instance search stays non-recursive.++* Constraint solving: Upgraded Miller patterns to record patterns. [Issue 456]++ Agda now solves meta-variables that are applied to record patterns.+ A typical (but here, artificial) case is:++ record Sigma (A : Set)(B : A -> Set) : Set where+ constructor _,_+ field+ fst : A+ snd : B fst++ test : (A : Set)(B : A -> Set) ->+ let X : Sigma A B -> Sigma A B+ X = _+ in (x : A)(y : B x) -> X (x , y) ≡ (x , y)+ test A B x y = refl++ This yields a constraint of the form++ _X A B (x , y) := t[x,y]++ (with t[x,y] = (x, y)) which is not a Miller pattern.+ However, Agda now solves this as++ _X A B z := t[fst z,snd z].++* Changed: solving recursive constraints. [Issue 585]++ Until 2.3.0, Agda sometimes inferred values that did not pass the+ termination checker later, or would even make Agda loop. To prevent this,+ the occurs check now also looks into the definitions of the current mutual+ block, to avoid constructing recursive solutions. As a consequence, also+ terminating recursive solutions are no longer found automatically.++ This effects a programming pattern where the recursively computed+ type of a recursive function is left to Agda to solve.++ mutual++ T : D -> Set+ T pattern1 = _+ T pattern2 = _++ f : (d : D) -> T d+ f pattern1 = rhs1+ f pattern2 = rhs2++ This might no longer work from now on.+ See examples test/Fail/Issue585*.agda++* Less eager introduction of implicit parameters. [Issue 679]++ Until Agda 2.3.0, trailing hidden parameters were introduced eagerly+ on the left hand side of a definition. For instance, one could not+ write++ test : {A : Set} -> Set+ test = \ {A} -> A++ because internally, the hidden argument {A : Set} was added to the+ left-hand side, yielding++ test {_} = \ {A} -> A++ which raised a type error. Now, Agda only introduces the trailing+ implicit parameters it has to, in order to maintain uniform function+ arity. For instance, in++ test : Bool -> {A B C : Set} -> Set+ test true {A} = A+ test false {B = B} = B++ Agda will introduce parameters A and B in all clauses, but not C,+ resulting in++ test : Bool -> {A B C : Set} -> Set+ test true {A} {_} = A+ test false {_} {B = B} = B++ Note that for checking where-clauses, still all hidden trailing+ parameters are in scope. For instance:++ id : {i : Level}{A : Set i} -> A -> A+ id = myId+ where myId : forall {A} -> A -> A+ myId x = x++ To be able to fill in the meta variable _1 in++ myId : {A : Set _1} -> A -> A++ the hidden parameter {i : Level} needs to be in scope.++ As a result of this more lazy introduction of implicit parameters,+ the following code now passes.++ data Unit : Set where+ unit : Unit++ T : Unit → Set+ T unit = {u : Unit} → Unit++ test : (u : Unit) → T u+ test unit with unit+ ... | _ = λ {v} → v++ Before, Agda would eagerly introduce the hidden parameter {v} as+ unnamed left-hand side parameter, leaving no way to refer to it.++ The related issue 655 has also been addressed. It is now possible+ to make `synonym' definitions++ name = expression++ even when the type of expression begins with a hidden quantifier.+ Simple example:++ id2 = id++ That resulted in unsolved metas until 2.3.0.++* Agda detects unused arguments and ignores them during equality+ checking. [Issue 691, solves also issue 44.]++ Agda's polarity checker now assigns 'Nonvariant' to arguments+ that are not actually used (except for absurd matches). If+ f's first argument is Nonvariant, then f x is definitionally equal+ to f y regardless of x and y. It is similar to irrelevance, but+ does not require user annotation.++ For instance, unused module parameters do no longer get in the way:++ module M (x : Bool) where++ not : Bool → Bool+ not true = false+ not false = true++ open M true+ open M false renaming (not to not′)++ test : (y : Bool) → not y ≡ not′ y+ test y = refl++ Matching against record or absurd patterns does not count as `use',+ so we get some form of proof irrelevance:++ data ⊥ : Set where+ record ⊤ : Set where+ constructor trivial++ data Bool : Set where+ true false : Bool++ True : Bool → Set+ True true = ⊤+ True false = ⊥++ fun : (b : Bool) → True b → Bool+ fun true trivial = true+ fun false ()++ test : (b : Bool) → (x y : True b) → fun b x ≡ fun b y+ test b x y = refl++ More examples in test/Succeed/NonvariantPolarity.agda.++ Phantom arguments: Parameters of record and data types are considered+ `used' even if they are not actually used. Consider:++ False : Nat → Set+ False zero = ⊥+ False (suc n) = False n++ module Invariant where+ record Bla (n : Nat)(p : False n) : Set where++ module Nonvariant where+ Bla : (n : Nat) → False n → Set+ Bla n p = ⊤++ Even though record `Bla' does not use its parameters n and p, they+ are considered as used, allowing "phantom type" techniques.++ In contrast, the arguments of function `Bla' are recognized as unused.+ The following code type-checks if we open Invariant but leaves unsolved+ metas if we open Nonvariant.++ drop-suc : {n : Nat}{p : False n} → Bla (suc n) p → Bla n p+ drop-suc _ = _++ bla : (n : Nat) → {p : False n} → Bla n p → ⊥+ bla zero {()} b+ bla (suc n) b = bla n (drop-suc b)++ If `Bla' is considered invariant, the hidden argument in the recursive+ call can be inferred to be `p'. If it is considered non-variant, then+ `Bla n X = Bla n p' does not entail `X = p' and the hidden argument+ remains unsolved. Since `bla' does not actually use its hidden argument,+ its value is not important and it could be searched for.+ Unfortunately, polarity analysis of `bla' happens only after type+ checking, thus, the information that `bla' is non-variant in `p' is+ not available yet when meta-variables are solved.+ (See test/Fail/BrokenInferenceDueToNonvariantPolarity.agda)++* Agda now expands simple definitions (one clause, terminating)+ to check whether a function is constructor headed. [Issue 747]+ For instance, the following now also works:++ MyPair : Set -> Set -> Set+ MyPair A B = Pair A B++ Vec : Set -> Nat -> Set+ Vec A zero = Unit+ Vec A (suc n) = MyPair A (Vec A n)++ Here, Unit and Pair are data or record types.++Compiler backends+=================++* -Werror is now overridable.++ To enable compilation of Haskell modules containing warnings, the+ -Werror flag for the MAlonzo backend has been made overridable. If,+ for example, --ghc-flag=-Wwarn is passed when compiling, one can get+ away with things like:++ data PartialBool : Set where+ true : PartialBool++ {-# COMPILED_DATA PartialBool Bool True #-}++ The default behavior remains as it used to be and rejects the above+ program.++Tools+=====++Emacs mode+----------++* Asynchronous Emacs mode.++ One can now use Emacs while a buffer is type-checked. If the buffer+ is edited while the type-checker runs, then syntax highlighting will+ not be updated when type-checking is complete.++* Interactive syntax highlighting.++ The syntax highlighting is updated while a buffer is type-checked:++ • At first the buffer is highlighted in a somewhat crude way+ (without go-to-definition information for overloaded+ constructors).++ • If the highlighting level is "interactive", then the piece of code+ that is currently being type-checked is highlighted as such. (The+ default is "non-interactive".)++ • When a mutual block has been type-checked it is highlighted+ properly (this highlighting includes warnings for potential+ non-termination).++ The highlighting level can be controlled via the new configuration+ variable agda2-highlight-level.++* Multiple case-splits can now be performed in one go.++ Consider the following example:++ _==_ : Bool → Bool → Bool+ b₁ == b₂ = {!!}++ If you split on "b₁ b₂", then you get the following code:++ _==_ : Bool → Bool → Bool+ true == true = {!!}+ true == false = {!!}+ false == true = {!!}+ false == false = {!!}++ The order of the variables matters. Consider the following code:++ lookup : ∀ {a n} {A : Set a} → Vec A n → Fin n → A+ lookup xs i = {!!}++ If you split on "xs i", then you get the following code:++ lookup : ∀ {a n} {A : Set a} → Vec A n → Fin n → A+ lookup [] ()+ lookup (x ∷ xs) zero = {!!}+ lookup (x ∷ xs) (suc i) = {!!}++ However, if you split on "i xs", then you get the following code+ instead:++ lookup : ∀ {a n} {A : Set a} → Vec A n → Fin n → A+ lookup (x ∷ xs) zero = ?+ lookup (x ∷ xs) (suc i) = ?++ This code is rejected by Agda 2.3.0, but accepted by 2.3.2 thanks+ to improved coverage checking (see above).++* The Emacs mode now presents information about which module is+ currently being type-checked.++* New global menu entry: Information about the character at point.++ If this entry is selected, then information about the character at+ point is displayed, including (in many cases) information about how+ to type the character.++* Commenting/uncommenting the rest of the buffer.++ One can now comment or uncomment the rest of the buffer by typing+ C-c C-x M-; or by selecting the menu entry "Comment/uncomment the+ rest of the buffer".++* The Emacs mode now uses the Agda executable instead of GHCi.++ The *ghci* buffer has been renamed to *agda2*.++ A new configuration variable has been introduced:+ agda2-program-name, the name of the Agda executable (by default+ agda).++ The variable agda2-ghci-options has been replaced by+ agda2-program-args: extra arguments given to the Agda executable (by+ default none).++ If you want to limit Agda's memory consumption you can add some+ arguments to agda2-program-args, for instance +RTS -M1.5G -RTS.++* The Emacs mode no longer depends on haskell-mode.++ Users who have customised certain haskell-mode variables (such as+ haskell-ghci-program-args) may want to update their configuration.++LaTeX-backend+-------------++An experimental LaTeX-backend which does precise highlighting a la the+HTML-backend and code alignment a la lhs2TeX has been added.++Here is a sample input literate Agda file:++ \documentclass{article}++ \usepackage{agda}++ \begin{document}++ The following module declaration will be hidden in the output.++ \AgdaHide{+ \begin{code}+ module M where+ \end{code}+ }++ Two or more spaces can be used to make the backend align stuff.++ \begin{code}+ data ℕ : Set where+ zero : ℕ+ suc : ℕ → ℕ++ _+_ : ℕ → ℕ → ℕ+ zero + n = n+ suc m + n = suc (m + n)+ \end{code}++ \end{document}++To produce an output PDF issue the following commands:++ agda --latex -i . <file>.lagda+ pdflatex latex/<file>.tex++Only the top-most module is processed, like with lhs2tex and unlike with+the HTML-backend. If you want to process imported modules you have to+call agda --latex manually on each of those modules.++There are still issues related to formatting, see the bug tracker for+more information:++ https://code.google.com/p/agda/issues/detail?id=697++The default agda.sty might therefore change in backwards-incompatible+ways, as work proceeds in trying to resolve those problems.+++Implemented features:++ * Two or more spaces can be used to force alignment of things, like+ with lhs2tex. See example above.++ * The highlighting information produced by the type checker is used to+ generate the output. For example, the data declaration in the example+ above, produces:++ \AgdaKeyword{data} \AgdaDatatype{ℕ} \AgdaSymbol{:}+ \AgdaPrimitiveType{Set} \AgdaKeyword{where}++ These latex commands are defined in agda.sty (which is imported by+ \usepackage{agda}) and cause the highlighting.++ * The latex-backend checks if agda.sty is found by the latex+ environment, if it isn't a default agda.sty is copied from Agda's+ data-dir into the working directory (and thus made available to the+ latex environment).++ If the default agda.sty isn't satisfactory (colors, fonts, spacing,+ etc) then the user can modify it and make put it somewhere where the+ latex environment can find it. Hopefully most aspects should be+ modifiable via agda.sty rather than having to tweak the+ implementation.++ * --latex-dir can be used to change the default output directory.++------------------------------------------------------------------------+-- Release notes for Agda 2 version 2.3.0+------------------------------------------------------------------------++Important changes since 2.2.10:++Language+========++* New more liberal syntax for mutually recursive definitions.++ It is no longer necessary to use the 'mutual' keyword to define+ mutually recursive functions or datatypes. Instead, it is enough to+ declare things before they are used. Instead of++ mutual+ f : A+ f = a[f, g]++ g : B[f]+ g = b[f, g]++ you can now write++ f : A+ g : B[f]+ f = a[f, g]+ g = b[f, g].++ With the new style you have more freedom in choosing the order in+ which things are type checked (previously type signatures were+ always checked before definitions). Furthermore you can mix+ arbitrary declarations, such as modules and postulates, with+ mutually recursive definitions.++ For data types and records the following new syntax is used to+ separate the declaration from the definition:++ -- Declaration.+ data Vec (A : Set) : Nat → Set -- Note the absence of 'where'.++ -- Definition.+ data Vec A where+ [] : Vec A zero+ _::_ : {n : Nat} → A → Vec A n → Vec A (suc n)++ -- Declaration.+ record Sigma (A : Set) (B : A → Set) : Set++ -- Definition.+ record Sigma A B where+ constructor _,_+ field fst : A+ snd : B fst++ When making separated declarations/definitions private or abstract+ you should attach the 'private' keyword to the declaration and the+ 'abstract' keyword to the definition. For instance, a private,+ abstract function can be defined as++ private+ f : A+ abstract+ f = e++ Finally it may be worth noting that the old style of mutually+ recursive definitions is still supported (it basically desugars into+ the new style).++* Pattern matching lambdas.++ Anonymous pattern matching functions can be defined using the syntax++ \ { p11 .. p1n -> e1 ; ... ; pm1 .. pmn -> em }++ (where, as usual, \ and -> can be replaced by λ and →). Internally+ this is translated into a function definition of the following form:++ .extlam p11 .. p1n = e1+ ...+ .extlam pm1 .. pmn = em++ This means that anonymous pattern matching functions are generative.+ For instance, refl will not be accepted as an inhabitant of the type++ (λ { true → true ; false → false }) ≡+ (λ { true → true ; false → false }),++ because this is equivalent to extlam1 ≡ extlam2 for some distinct+ fresh names extlam1 and extlam2.++ Currently the 'where' and 'with' constructions are not allowed in+ (the top-level clauses of) anonymous pattern matching functions.++ Examples:++ and : Bool → Bool → Bool+ and = λ { true x → x ; false _ → false }++ xor : Bool → Bool → Bool+ xor = λ { true true → false+ ; false false → false+ ; _ _ → true+ }++ fst : {A : Set} {B : A → Set} → Σ A B → A+ fst = λ { (a , b) → a }++ snd : {A : Set} {B : A → Set} (p : Σ A B) → B (fst p)+ snd = λ { (a , b) → b }++* Record update syntax.++ Assume that we have a record type and a corresponding value:++ record MyRecord : Set where+ field+ a b c : ℕ++ old : MyRecord+ old = record { a = 1; b = 2; c = 3 }++ Then we can update (some of) the record value's fields in the+ following way:++ new : MyRecord+ new = record old { a = 0; c = 5 }++ Here new normalises to record { a = 0; b = 2; c = 5 }. Any+ expression yielding a value of type MyRecord can be used instead of+ old.++ Record updating is not allowed to change types: the resulting value+ must have the same type as the original one, including the record+ parameters. Thus, the type of a record update can be inferred if the type+ of the original record can be inferred.++ The record update syntax is expanded before type checking. When the+ expression++ record old { upd-fields }++ is checked against a record type R, it is expanded to++ let r = old in record { new-fields },++ where old is required to have type R and new-fields is defined as+ follows: for each field x in R,++ - if x = e is contained in upd-fields then x = e is included in+ new-fields, and otherwise+ - if x is an explicit field then x = R.x r is included in+ new-fields, and+ - if x is an implicit or instance field, then it is omitted from+ new-fields.++ (Instance arguments are explained below.) The reason for treating+ implicit and instance fields specially is to allow code like the+ following:++ record R : Set where+ field+ {length} : ℕ+ vec : Vec ℕ length+ -- More fields…++ xs : R+ xs = record { vec = 0 ∷ 1 ∷ 2 ∷ [] }++ ys = record xs { vec = 0 ∷ [] }++ Without the special treatment the last expression would need to+ include a new binding for length (for instance "length = _").++* Record patterns which do not contain data type patterns, but which+ do contain dot patterns, are no longer rejected.++* When the --without-K flag is used literals are now treated as+ constructors.++* Under-applied functions can now reduce.++ Consider the following definition:++ id : {A : Set} → A → A+ id x = x++ Previously the expression id would not reduce. This has been changed+ so that it now reduces to λ x → x. Usually this makes little+ difference, but it can be important in conjunction with 'with'. See+ issue 365 for an example.++* Unused AgdaLight legacy syntax (x y : A; z v : B) for telescopes has+ been removed.++Universe polymorphism+---------------------++* Universe polymorphism is now enabled by default.+ Use --no-universe-polymorphism to disable it.++* Universe levels are no longer defined as a data type.++ The basic level combinators can be introduced in the following way:++ postulate+ Level : Set+ zero : Level+ suc : Level → Level+ max : Level → Level → Level++ {-# BUILTIN LEVEL Level #-}+ {-# BUILTIN LEVELZERO zero #-}+ {-# BUILTIN LEVELSUC suc #-}+ {-# BUILTIN LEVELMAX max #-}++* The BUILTIN equality is now required to be universe-polymorphic.++* trustMe is now universe-polymorphic.++Meta-variables and unification+------------------------------++* Unsolved meta-variables are now frozen after every mutual block.+ This means that they cannot be instantiated by subsequent code. For+ instance,++ one : Nat+ one = _++ bla : one ≡ suc zero+ bla = refl++ leads to an error now, whereas previously it lead to the+ instantiation of _ with "suc zero". If you want to make use of the+ old behaviour, put the two definitions in a mutual block.++ All meta-variables are unfrozen during interactive editing, so that+ the user can fill holes interactively. Note that type-checking of+ interactively given terms is not perfect: Agda sometimes refuses to+ load a file, even though no complaints were raised during the+ interactive construction of the file. This is because certain checks+ (for instance, positivity) are only invoked when a file is loaded.++* Record types can now be inferred.++ If there is a unique known record type with fields matching the+ fields in a record expression, then the type of the expression will+ be inferred to be the record type applied to unknown parameters.++ If there is no known record type with the given fields the type+ checker will give an error instead of producing lots of unsolved+ meta-variables.++ Note that "known record type" refers to any record type in any+ imported module, not just types which are in scope.++* The occurrence checker distinguishes rigid and strongly rigid+ occurrences [Reed, LFMTP 2009; Abel & Pientka, TLCA 2011].++ The completeness checker now accepts the following code:++ h : (n : Nat) → n ≡ suc n → Nat+ h n ()++ Internally this generates a constraint _n = suc _n where the+ meta-variable _n occurs strongly rigidly, i.e. on a constructor path+ from the root, in its own defining term tree. This is never+ solvable.++ Weakly rigid recursive occurrences may have a solution [Jason Reed's+ PhD thesis, page 106]:++ test : (k : Nat) →+ let X : (Nat → Nat) → Nat+ X = _+ in+ (f : Nat → Nat) → X f ≡ suc (f (X (λ x → k)))+ test k f = refl++ The constraint _X k f = suc (f (_X k (λ x → k))) has the solution+ _X k f = suc (f (suc k)), despite the recursive occurrence of _X.+ Here _X is not strongly rigid, because it occurs under the bound+ variable f. Previously Agda rejected this code; now it instead+ complains about an unsolved meta-variable.++* Equation constraints involving the same meta-variable in the head+ now trigger pruning [Pientka, PhD, Sec. 3.1.2; Abel & Pientka, TLCA+ 2011]. Example:++ same : let X : A → A → A → A × A+ X = _+ in {x y z : A} → X x y y ≡ (x , y)+ × X x x y ≡ X x y y+ same = refl , refl++ The second equation implies that X cannot depend on its second+ argument. After pruning the first equation is linear and can be+ solved.++* Instance arguments.++ A new type of hidden function arguments has been added: instance+ arguments. This new feature is based on influences from Scala's+ implicits and Agda's existing implicit arguments.++ Plain implicit arguments are marked by single braces: {…}. Instance+ arguments are instead marked by double braces: {{…}}. Example:++ postulate+ A : Set+ B : A → Set+ a : A+ f : {{a : A}} → B a++ Instead of the double braces you can use the symbols ⦃ and ⦄, but+ these symbols must in many cases be surrounded by whitespace. (If+ you are using Emacs and the Agda input method, then you can conjure+ up the symbols by typing "\{{" and "\}}", respectively.)++ Instance arguments behave as ordinary implicit arguments, except for+ one important aspect: resolution of arguments which are not provided+ explicitly. For instance, consider the following code:++ test = f++ Here Agda will notice that f's instance argument was not provided+ explicitly, and try to infer it. All definitions in scope at f's+ call site, as well as all variables in the context, are considered.+ If exactly one of these names has the required type (A), then the+ instance argument will be instantiated to this name.++ This feature can be used as an alternative to Haskell type classes.+ If we define++ record Eq (A : Set) : Set where+ field equal : A → A → Bool,++ then we can define the following projection:++ equal : {A : Set} {{eq : Eq A}} → A → A → Bool+ equal {{eq}} = Eq.equal eq++ Now consider the following expression:++ equal false false ∨ equal 3 4++ If the following Eq "instances" for Bool and ℕ are in scope, and no+ others, then the expression is accepted:++ eq-Bool : Eq Bool+ eq-Bool = record { equal = … }++ eq-ℕ : Eq ℕ+ eq-ℕ = record { equal = … }++ A shorthand notation is provided to avoid the need to define+ projection functions manually:++ module Eq-with-implicits = Eq {{...}}++ This notation creates a variant of Eq's record module, where the+ main Eq argument is an instance argument instead of an explicit one.+ It is equivalent to the following definition:++ module Eq-with-implicits {A : Set} {{eq : Eq A}} = Eq eq++ Note that the short-hand notation allows you to avoid naming the+ "-with-implicits" module:++ open Eq {{...}}++ Instance argument resolution is not recursive. As an example,+ consider the following "parametrised instance":++ eq-List : {A : Set} → Eq A → Eq (List A)+ eq-List {A} eq = record { equal = eq-List-A }+ where+ eq-List-A : List A → List A → Bool+ eq-List-A [] [] = true+ eq-List-A (a ∷ as) (b ∷ bs) = equal a b ∧ eq-List-A as bs+ eq-List-A _ _ = false++ Assume that the only Eq instances in scope are eq-List and eq-ℕ.+ Then the following code does not type-check:++ test = equal (1 ∷ 2 ∷ []) (3 ∷ 4 ∷ [])++ However, we can make the code work by constructing a suitable+ instance manually:++ test′ = equal (1 ∷ 2 ∷ []) (3 ∷ 4 ∷ [])+ where eq-List-ℕ = eq-List eq-ℕ++ By restricting the "instance search" to be non-recursive we avoid+ introducing a new, compile-time-only evaluation model to Agda.++ For more information about instance arguments, see Devriese &+ Piessens [ICFP 2011]. Some examples are also available in the+ examples/instance-arguments subdirectory of the Agda distribution.++Irrelevance+-----------++* Dependent irrelevant function types.++ Some examples illustrating the syntax of dependent irrelevant+ function types:++ .(x y : A) → B .{x y z : A} → B+ ∀ x .y → B ∀ x .{y} {z} .v → B++ The declaration++ f : .(x : A) → B[x]+ f x = t[x]++ requires that x is irrelevant both in t[x] and in B[x]. This is+ possible if, for instance, B[x] = B′ x, with B′ : .A → Set.++ Dependent irrelevance allows us to define the eliminator for the+ Squash type:++ record Squash (A : Set) : Set where+ constructor squash+ field+ .proof : A++ elim-Squash : {A : Set} (P : Squash A → Set)+ (ih : .(a : A) → P (squash a)) →+ (a⁻ : Squash A) → P a⁻+ elim-Squash P ih (squash a) = ih a++ Note that this would not type-check with+ (ih : (a : A) -> P (squash a)).++* Records with only irrelevant fields.++ The following now works:++ record IsEquivalence {A : Set} (_≈_ : A → A → Set) : Set where+ field+ .refl : Reflexive _≈_+ .sym : Symmetric _≈_+ .trans : Transitive _≈_++ record Setoid : Set₁ where+ infix 4 _≈_+ field+ Carrier : Set+ _≈_ : Carrier → Carrier → Set+ .isEquivalence : IsEquivalence _≈_++ open IsEquivalence isEquivalence public++ Previously Agda complained about the application+ IsEquivalence isEquivalence, because isEquivalence is irrelevant and+ the IsEquivalence module expected a relevant argument. Now, when+ record modules are generated for records consisting solely of+ irrelevant arguments, the record parameter is made irrelevant:++ module IsEquivalence {A : Set} {_≈_ : A → A → Set}+ .(r : IsEquivalence {A = A} _≈_) where+ …++* Irrelevant things are no longer erased internally. This means that+ they are printed as ordinary terms, not as "_" as before.++* The new flag --experimental-irrelevance enables irrelevant universe+ levels and matching on irrelevant data when only one constructor is+ available. These features are very experimental and likely to change+ or disappear.++Reflection+----------++* The reflection API has been extended to mirror features like+ irrelevance, instance arguments and universe polymorphism, and to+ give (limited) access to definitions. For completeness all the+ builtins and primitives are listed below:++ -- Names.++ postulate Name : Set++ {-# BUILTIN QNAME Name #-}++ primitive+ -- Equality of names.+ primQNameEquality : Name → Name → Bool++ -- Is the argument visible (explicit), hidden (implicit), or an+ -- instance argument?++ data Visibility : Set where+ visible hidden instance : Visibility++ {-# BUILTIN HIDING Visibility #-}+ {-# BUILTIN VISIBLE visible #-}+ {-# BUILTIN HIDDEN hidden #-}+ {-# BUILTIN INSTANCE instance #-}++ -- Arguments can be relevant or irrelevant.++ data Relevance : Set where+ relevant irrelevant : Relevance++ {-# BUILTIN RELEVANCE Relevance #-}+ {-# BUILTIN RELEVANT relevant #-}+ {-# BUILTIN IRRELEVANT irrelevant #-}++ -- Arguments.++ data Arg A : Set where+ arg : (v : Visibility) (r : Relevance) (x : A) → Arg A++ {-# BUILTIN ARG Arg #-}+ {-# BUILTIN ARGARG arg #-}++ -- Terms.++ mutual+ data Term : Set where+ -- Variable applied to arguments.+ var : (x : ℕ) (args : List (Arg Term)) → Term+ -- Constructor applied to arguments.+ con : (c : Name) (args : List (Arg Term)) → Term+ -- Identifier applied to arguments.+ def : (f : Name) (args : List (Arg Term)) → Term+ -- Different kinds of λ-abstraction.+ lam : (v : Visibility) (t : Term) → Term+ -- Pi-type.+ pi : (t₁ : Arg Type) (t₂ : Type) → Term+ -- A sort.+ sort : Sort → Term+ -- Anything else.+ unknown : Term++ data Type : Set where+ el : (s : Sort) (t : Term) → Type++ data Sort : Set where+ -- A Set of a given (possibly neutral) level.+ set : (t : Term) → Sort+ -- A Set of a given concrete level.+ lit : (n : ℕ) → Sort+ -- Anything else.+ unknown : Sort++ {-# BUILTIN AGDASORT Sort #-}+ {-# BUILTIN AGDATYPE Type #-}+ {-# BUILTIN AGDATERM Term #-}+ {-# BUILTIN AGDATERMVAR var #-}+ {-# BUILTIN AGDATERMCON con #-}+ {-# BUILTIN AGDATERMDEF def #-}+ {-# BUILTIN AGDATERMLAM lam #-}+ {-# BUILTIN AGDATERMPI pi #-}+ {-# BUILTIN AGDATERMSORT sort #-}+ {-# BUILTIN AGDATERMUNSUPPORTED unknown #-}+ {-# BUILTIN AGDATYPEEL el #-}+ {-# BUILTIN AGDASORTSET set #-}+ {-# BUILTIN AGDASORTLIT lit #-}+ {-# BUILTIN AGDASORTUNSUPPORTED unknown #-}++ postulate+ -- Function definition.+ Function : Set+ -- Data type definition.+ Data-type : Set+ -- Record type definition.+ Record : Set++ {-# BUILTIN AGDAFUNDEF Function #-}+ {-# BUILTIN AGDADATADEF Data-type #-}+ {-# BUILTIN AGDARECORDDEF Record #-}++ -- Definitions.++ data Definition : Set where+ function : Function → Definition+ data-type : Data-type → Definition+ record′ : Record → Definition+ constructor′ : Definition+ axiom : Definition+ primitive′ : Definition++ {-# BUILTIN AGDADEFINITION Definition #-}+ {-# BUILTIN AGDADEFINITIONFUNDEF function #-}+ {-# BUILTIN AGDADEFINITIONDATADEF data-type #-}+ {-# BUILTIN AGDADEFINITIONRECORDDEF record′ #-}+ {-# BUILTIN AGDADEFINITIONDATACONSTRUCTOR constructor′ #-}+ {-# BUILTIN AGDADEFINITIONPOSTULATE axiom #-}+ {-# BUILTIN AGDADEFINITIONPRIMITIVE primitive′ #-}++ primitive+ -- The type of the thing with the given name.+ primQNameType : Name → Type+ -- The definition of the thing with the given name.+ primQNameDefinition : Name → Definition+ -- The constructors of the given data type.+ primDataConstructors : Data-type → List Name++ As an example the expression++ primQNameType (quote zero)++ is definitionally equal to++ el (lit 0) (def (quote ℕ) [])++ (if zero is a constructor of the data type ℕ).++* New keyword: unquote.++ The construction "unquote t" converts a representation of an Agda term+ to actual Agda code in the following way:++ 1. The argument t must have type Term (see the reflection API above).++ 2. The argument is normalised.++ 3. The entire construction is replaced by the normal form, which is+ treated as syntax written by the user and type-checked in the+ usual way.++ Examples:++ test : unquote (def (quote ℕ) []) ≡ ℕ+ test = refl++ id : (A : Set) → A → A+ id = unquote (lam visible (lam visible (var 0 [])))++ id-ok : id ≡ (λ A (x : A) → x)+ id-ok = refl++* New keyword: quoteTerm.++ The construction "quoteTerm t" is similar to "quote n", but whereas+ quote is restricted to names n, quoteTerm accepts terms t. The+ construction is handled in the following way:++ 1. The type of t is inferred. The term t must be type-correct.++ 2. The term t is normalised.++ 3. The construction is replaced by the Term representation (see the+ reflection API above) of the normal form. Any unsolved metavariables+ in the term are represented by the "unknown" term constructor.++ Examples:++ test₁ : quoteTerm (λ {A : Set} (x : A) → x) ≡+ lam hidden (lam visible (var 0 []))+ test₁ = refl++ -- Local variables are represented as de Bruijn indices.+ test₂ : (λ {A : Set} (x : A) → quoteTerm x) ≡ (λ x → var 0 [])+ test₂ = refl++ -- Terms are normalised before being quoted.+ test₃ : quoteTerm (0 + 0) ≡ con (quote zero) []+ test₃ = refl++Compiler backends+=================++MAlonzo+-------++* The MAlonzo backend's FFI now handles universe polymorphism in a+ better way.++ The translation of Agda types and kinds into Haskell now supports+ universe-polymorphic postulates. The core changes are that the+ translation of function types has been changed from++ T[[ Pi (x : A) B ]] =+ if A has a Haskell kind then+ forall x. () -> T[[ B ]]+ else if x in fv B then+ undef+ else+ T[[ A ]] -> T[[ B ]]++ into++ T[[ Pi (x : A) B ]] =+ if x in fv B then+ forall x. T[[ A ]] -> T[[ B ]] -- Note: T[[A]] not Unit.+ else+ T[[ A ]] -> T[[ B ]],++ and that the translation of constants (postulates, constructors and+ literals) has been changed from++ T[[ k As ]] =+ if COMPILED_TYPE k T then+ T T[[ As ]]+ else+ undef++ into++ T[[ k As ]] =+ if COMPILED_TYPE k T then+ T T[[ As ]]+ else if COMPILED k E then+ ()+ else+ undef.++ For instance, assuming a Haskell definition++ type AgdaIO a b = IO b,++ we can set up universe-polymorphic IO in the following way:++ postulate+ IO : ∀ {ℓ} → Set ℓ → Set ℓ+ return : ∀ {a} {A : Set a} → A → IO A+ _>>=_ : ∀ {a b} {A : Set a} {B : Set b} →+ IO A → (A → IO B) → IO B++ {-# COMPILED_TYPE IO AgdaIO #-}+ {-# COMPILED return (\_ _ -> return) #-}+ {-# COMPILED _>>=_ (\_ _ _ _ -> (>>=)) #-}++ This is accepted because (assuming that the universe level type is+ translated to the Haskell unit type "()")++ (\_ _ -> return)+ : forall a. () -> forall b. () -> b -> AgdaIO a b+ = T [[ ∀ {a} {A : Set a} → A → IO A ]]++ and++ (\_ _ _ _ -> (>>=))+ : forall a. () -> forall b. () ->+ forall c. () -> forall d. () ->+ AgdaIO a c -> (c -> AgdaIO b d) -> AgdaIO b d+ = T [[ ∀ {a b} {A : Set a} {B : Set b} →+ IO A → (A → IO B) → IO B ]].++Epic+----++* New Epic backend pragma: STATIC.++ In the Epic backend, functions marked with the STATIC pragma will be+ normalised before compilation. Example usage:++ {-# STATIC power #-}++ power : ℕ → ℕ → ℕ+ power 0 x = 1+ power 1 x = x+ power (suc n) x = power n x * x++ Occurrences of "power 4 x" will be replaced by "((x * x) * x) * x".++* Some new optimisations have been implemented in the Epic backend:++ - Removal of unused arguments.++ A worker/wrapper transformation is performed so that unused+ arguments can be removed by Epic's inliner. For instance, the map+ function is transformed in the following way:++ map_wrap : (A B : Set) → (A → B) → List A → List B+ map_wrap A B f xs = map_work f xs++ map_work f [] = []+ map_work f (x ∷ xs) = f x ∷ map_work f xs++ If map_wrap is inlined (which it will be in any saturated call),+ then A and B disappear in the generated code.++ Unused arguments are found using abstract interpretation. The bodies+ of all functions in a module are inspected to decide which variables+ are used. The behaviour of postulates is approximated based on their+ types. Consider return, for instance:++ postulate return : {A : Set} → A → IO A++ The first argument of return can be removed, because it is of type+ Set and thus cannot affect the outcome of a program at runtime.++ - Injection detection.++ At runtime many functions may turn out to be inefficient variants of+ the identity function. This is especially true after forcing.+ Injection detection replaces some of these functions with more+ efficient versions. Example:++ inject : {n : ℕ} → Fin n → Fin (1 + n)+ inject {suc n} zero = zero+ inject {suc n} (suc i) = suc (inject {n} i)++ Forcing removes the Fin constructors' ℕ arguments, so this function+ is an inefficient identity function that can be replaced by the+ following one:++ inject {_} x = x++ To actually find this function, we make the induction hypothesis+ that inject is an identity function in its second argument and look+ at the branches of the function to decide if this holds.++ Injection detection also works over data type barriers. Example:++ forget : {A : Set} {n : ℕ} → Vec A n → List A+ forget [] = []+ forget (x ∷ xs) = x ∷ forget xs++ Given that the constructor tags (in the compiled Epic code) for+ Vec.[] and List.[] are the same, and that the tags for Vec._∷_ and+ List._∷_ are also the same, this is also an identity function. We+ can hence replace the definition with the following one:++ forget {_} xs = xs++ To get this to apply as often as possible, constructor tags are+ chosen /after/ injection detection has been run, in a way to make as+ many functions as possible injections.++ Constructor tags are chosen once per source file, so it may be+ advantageous to define conversion functions like forget in the same+ module as one of the data types. For instance, if Vec.agda imports+ List.agda, then the forget function should be put in Vec.agda to+ ensure that vectors and lists get the same tags (unless some other+ injection function, which puts different constraints on the tags, is+ prioritised).++ - Smashing.++ This optimisation finds types whose values are inferable at runtime:++ * A data type with only one constructor where all fields are+ inferable is itself inferable.+ * Set ℓ is inferable (as it has no runtime representation).++ A function returning an inferable data type can be smashed, which+ means that it is replaced by a function which simply returns the+ inferred value.++ An important example of an inferable type is the usual propositional+ equality type (_≡_). Any function returning a propositional equality+ can simply return the reflexivity constructor directly without+ computing anything.++ This optimisation makes more arguments unused. It also makes the+ Epic code size smaller, which in turn speeds up compilation.++JavaScript+----------++* ECMAScript compiler backend.++ A new compiler backend is being implemented, targetting ECMAScript+ (also known as JavaScript), with the goal of allowing Agda programs+ to be run in browsers or other ECMAScript environments.++ The backend is still at an experimental stage: the core language is+ implemented, but many features are still missing.++ The ECMAScript compiler can be invoked from the command line using+ the flag --js:++ agda --js --compile-dir=<DIR> <FILE>.agda++ Each source <FILE>.agda is compiled into an ECMAScript target+ <DIR>/jAgda.<TOP-LEVEL MODULE NAME>.js. The compiler can also be+ invoked using the Emacs mode (the variable agda2-backend controls+ which backend is used).++ Note that ECMAScript is a strict rather than lazy language. Since+ Agda programs are total, this should not impact program semantics,+ but it may impact their space or time usage.++ ECMAScript does not support algebraic datatypes or pattern-matching.+ These features are translated to a use of the visitor pattern. For+ instance, the standard library's List data type and null function+ are translated into the following code:++ exports["List"] = {};+ exports["List"]["[]"] = function (x0) {+ return x0["[]"]();+ };+ exports["List"]["_∷_"] = function (x0) {+ return function (x1) {+ return function (x2) {+ return x2["_∷_"](x0, x1);+ };+ };+ };++ exports["null"] = function (x0) {+ return function (x1) {+ return function (x2) {+ return x2({+ "[]": function () {+ return jAgda_Data_Bool["Bool"]["true"];+ },+ "_∷_": function (x3, x4) {+ return jAgda_Data_Bool["Bool"]["false"];+ }+ });+ };+ };+ };++ Agda records are translated to ECMAScript objects, preserving field+ names.++ Top-level Agda modules are translated to ECMAScript modules,+ following the common.js module specification. A top-level Agda+ module "Foo.Bar" is translated to an ECMAScript module+ "jAgda.Foo.Bar".++ The ECMAScript compiler does not compile to Haskell, so the pragmas+ related to the Haskell FFI (IMPORT, COMPILED_DATA and COMPILED) are+ not used by the ECMAScript backend. Instead, there is a COMPILED_JS+ pragma which may be applied to any declaration. For postulates,+ primitives, functions and values, it gives the ECMAScript code to be+ emitted by the compiler. For data types, it gives a function which+ is applied to a value of that type, and a visitor object. For+ instance, a binding of natural numbers to ECMAScript integers+ (ignoring overflow errors) is:++ data ℕ : Set where+ zero : ℕ+ suc : ℕ → ℕ++ {-# COMPILED_JS ℕ function (x,v) {+ if (x < 1) { return v.zero(); } else { return v.suc(x-1); }+ } #-}+ {-# COMPILED_JS zero 0 #-}+ {-# COMPILED_JS suc function (x) { return x+1; } #-}++ _+_ : ℕ → ℕ → ℕ+ zero + n = n+ suc m + n = suc (m + n)++ {-# COMPILED_JS _+_ function (x) { return function (y) {+ return x+y; };+ } #-}++ To allow FFI code to be optimised, the ECMAScript in a COMPILED_JS+ declaration is parsed, using a simple parser that recognises a pure+ functional subset of ECMAScript, consisting of functions, function+ applications, return, if-statements, if-expressions,+ side-effect-free binary operators (no precedence, left associative),+ side-effect-free prefix operators, objects (where all member names+ are quoted), field accesses, and string and integer literals.+ Modules may be imported using the require("<module-id>") syntax: any+ impure code, or code outside the supported fragment, can be placed+ in a module and imported.++Tools+=====++* New flag --safe, which can be used to type-check untrusted code.++ This flag disables postulates, primTrustMe, and "unsafe" OPTION+ pragmas, some of which are known to make Agda inconsistent.++ Rejected pragmas:++ --allow-unsolved-metas+ --experimental-irrelevance+ --guardedness-preserving-type-construtors+ --injective-type-constructors+ --no-coverage-check+ --no-positivity-check+ --no-termination-check+ --sized-types+ --type-in-type++ Note that, at the moment, it is not possible to define the universe+ level or coinduction primitives when --safe is used (because they+ must be introduced as postulates). This can be worked around by+ type-checking trusted files in a first pass, without using --safe,+ and then using --safe in a second pass. Modules which have already+ been type-checked are not re-type-checked just because --safe is+ used.++* Dependency graphs.++ The new flag --dependency-graph=FILE can be used to generate a DOT+ file containing a module dependency graph. The generated file (FILE)+ can be rendered using a tool like dot.++* The --no-unreachable-check flag has been removed.++* Projection functions are highlighted as functions instead of as+ fields. Field names (in record definitions and record values) are+ still highlighted as fields.++* Support for jumping to positions mentioned in the information+ buffer has been added.++* The "make install" command no longer installs Agda globally (by+ default).++------------------------------------------------------------------------+-- Release notes for Agda 2 version 2.2.10+------------------------------------------------------------------------++Important changes since 2.2.8:++Language+--------++* New flag: --without-K.++ This flag makes pattern matching more restricted. If the flag is+ activated, then Agda only accepts certain case-splits. If the type+ of the variable to be split is D pars ixs, where D is a data (or+ record) type, pars stands for the parameters, and ixs the indices,+ then the following requirements must be satisfied:++ * The indices ixs must be applications of constructors to distinct+ variables.++ * These variables must not be free in pars.++ The intended purpose of --without-K is to enable experiments with a+ propositional equality without the K rule. Let us define+ propositional equality as follows:++ data _≡_ {A : Set} : A → A → Set where+ refl : ∀ x → x ≡ x++ Then the obvious implementation of the J rule is accepted:++ J : {A : Set} (P : {x y : A} → x ≡ y → Set) →+ (∀ x → P (refl x)) →+ ∀ {x y} (x≡y : x ≡ y) → P x≡y+ J P p (refl x) = p x++ The same applies to Christine Paulin-Mohring's version of the J rule:++ J′ : {A : Set} {x : A} (P : {y : A} → x ≡ y → Set) →+ P (refl x) →+ ∀ {y} (x≡y : x ≡ y) → P x≡y+ J′ P p (refl x) = p++ On the other hand, the obvious implementation of the K rule is not+ accepted:++ K : {A : Set} (P : {x : A} → x ≡ x → Set) →+ (∀ x → P (refl x)) →+ ∀ {x} (x≡x : x ≡ x) → P x≡x+ K P p (refl x) = p x++ However, we have /not/ proved that activation of --without-K ensures+ that the K rule cannot be proved in some other way.++* Irrelevant declarations.++ Postulates and functions can be marked as irrelevant by prefixing+ the name with a dot when the name is declared. Example:++ postulate+ .irrelevant : {A : Set} → .A → A++ Irrelevant names may only be used in irrelevant positions or in+ definitions of things which have been declared irrelevant.++ The axiom irrelevant above can be used to define a projection from+ an irrelevant record field:++ data Subset (A : Set) (P : A → Set) : Set where+ _#_ : (a : A) → .(P a) → Subset A P++ elem : ∀ {A P} → Subset A P → A+ elem (a # p) = a++ .certificate : ∀ {A P} (x : Subset A P) → P (elem x)+ certificate (a # p) = irrelevant p++ The right-hand side of certificate is relevant, so we cannot define++ certificate (a # p) = p++ (because p is irrelevant). However, certificate is declared to be+ irrelevant, so it can use the axiom irrelevant. Furthermore the+ first argument of the axiom is irrelevant, which means that+ irrelevant p is well-formed.++ As shown above the axiom irrelevant justifies irrelevant+ projections. Previously no projections were generated for irrelevant+ record fields, such as the field certificate in the following+ record type:++ record Subset (A : Set) (P : A → Set) : Set where+ constructor _#_+ field+ elem : A+ .certificate : P elem++ Now projections are generated automatically for irrelevant fields+ (unless the flag --no-irrelevant-projections is used). Note that+ irrelevant projections are highly experimental.++* Termination checker recognises projections.++ Projections now preserve sizes, both in patterns and expressions.+ Example:++ record Wrap (A : Set) : Set where+ constructor wrap+ field+ unwrap : A++ open Wrap public++ data WNat : Set where+ zero : WNat+ suc : Wrap WNat → WNat++ id : WNat → WNat+ id zero = zero+ id (suc w) = suc (wrap (id (unwrap w)))++ In the structural ordering unwrap w ≤ w. This means that++ unwrap w ≤ w < suc w,++ and hence the recursive call to id is accepted.++ Projections also preserve guardedness.++Tools+-----++* Hyperlinks for top-level module names now point to the start of the+ module rather than to the declaration of the module name. This+ applies both to the Emacs mode and to the output of agda --html.++* Most occurrences of record field names are now highlighted as+ "fields". Previously many occurrences were highlighted as+ "functions".++* Emacs mode: It is no longer possible to change the behaviour of the+ TAB key by customising agda2-indentation.++* Epic compiler backend.++ A new compiler backend is being implemented. This backend makes use+ of Edwin Brady's language Epic+ (http://www.cs.st-andrews.ac.uk/~eb/epic.php) and its compiler. The+ backend should handle most Agda code, but is still at an+ experimental stage: more testing is needed, and some things written+ below may not be entirely true.++ The Epic compiler can be invoked from the command line using the+ flag --epic:++ agda --epic --epic-flag=<EPIC-FLAG> --compile-dir=<DIR> <FILE>.agda++ The --epic-flag flag can be given multiple times; each flag is given+ verbatim to the Epic compiler (in the given order). The resulting+ executable is named after the main module and placed in the+ directory specified by the --compile-dir flag (default: the project+ root). Intermediate files are placed in a subdirectory called Epic.++ The backend requires that there is a definition named main. This+ definition should be a value of type IO Unit, but at the moment this+ is not checked (so it is easy to produce a program which segfaults).+ Currently the backend represents actions of type IO A as functions+ from Unit to A, and main is applied to the unit value.++ The Epic compiler compiles via C, not Haskell, so the pragmas+ related to the Haskell FFI (IMPORT, COMPILED_DATA and COMPILED) are+ not used by the Epic backend. Instead there is a new pragma+ COMPILED_EPIC. This pragma is used to give Epic code for postulated+ definitions (Epic code can in turn call C code). The form of the+ pragma is {-# COMPILED_EPIC def code #-}, where def is the name of+ an Agda postulate and code is some Epic code which should include+ the function arguments, return type and function body. As an example+ the IO monad can be defined as follows:++ postulate+ IO : Set → Set+ return : ∀ {A} → A → IO A+ _>>=_ : ∀ {A B} → IO A → (A → IO B) → IO B++ {-# COMPILED_EPIC return (u : Unit, a : Any) -> Any =+ ioreturn(a) #-}+ {-# COMPILED_EPIC+ _>>=_ (u1 : Unit, u2 : Unit, x : Any, f : Any) -> Any =+ iobind(x,f) #-}++ Here ioreturn and iobind are Epic functions which are defined in the+ file AgdaPrelude.e which is always included.++ By default the backend will remove so-called forced constructor+ arguments (and case-splitting on forced variables will be+ rewritten). This optimisation can be disabled by using the flag+ --no-forcing.++ All data types which look like unary natural numbers after forced+ constructor arguments have been removed (i.e. types with two+ constructors, one nullary and one with a single recursive argument)+ will be represented as "BigInts". This applies to the standard Fin+ type, for instance.++ The backend supports Agda's primitive functions and the BUILTIN+ pragmas. If the BUILTIN pragmas for unary natural numbers are used,+ then some operations, like addition and multiplication, will use+ more efficient "BigInt" operations.++ If you want to make use of the Epic backend you need to install some+ dependencies, see the README.++* The Emacs mode can compile using either the MAlonzo or the Epic+ backend. The variable agda2-backend controls which backend is used.++------------------------------------------------------------------------+-- Release notes for Agda 2 version 2.2.8+------------------------------------------------------------------------++Important changes since 2.2.6:++Language+--------++* Record pattern matching.++ It is now possible to pattern match on named record constructors.+ Example:++ record Σ (A : Set) (B : A → Set) : Set where+ constructor _,_+ field+ proj₁ : A+ proj₂ : B proj₁++ map : {A B : Set} {P : A → Set} {Q : B → Set}+ (f : A → B) → (∀ {x} → P x → Q (f x)) →+ Σ A P → Σ B Q+ map f g (x , y) = (f x , g y)++ The clause above is internally translated into the following one:++ map f g p = (f (Σ.proj₁ p) , g (Σ.proj₂ p))++ Record patterns containing data type patterns are not translated.+ Example:++ add : ℕ × ℕ → ℕ+ add (zero , n) = n+ add (suc m , n) = suc (add (m , n))++ Record patterns which do not contain data type patterns, but which+ do contain dot patterns, are currently rejected. Example:++ Foo : {A : Set} (p₁ p₂ : A × A) → proj₁ p₁ ≡ proj₁ p₂ → Set₁+ Foo (x , y) (.x , y′) refl = Set++* Proof irrelevant function types.++ Agda now supports irrelevant non-dependent function types:++ f : .A → B++ This type implies that f does not depend computationally on its+ argument. One intended use case is data structures with embedded+ proofs, like sorted lists:++ postulate+ _≤_ : ℕ → ℕ → Set+ p₁ : 0 ≤ 1+ p₂ : 0 ≤ 1++ data SList (bound : ℕ) : Set where+ [] : SList bound+ scons : (head : ℕ) →+ .(head ≤ bound) →+ (tail : SList head) →+ SList bound++ The effect of the irrelevant type in the signature of scons is that+ scons's second argument is never inspected after Agda has ensured+ that it has the right type. It is even thrown away, leading to+ smaller term sizes and hopefully some gain in efficiency. The+ type-checker ignores irrelevant arguments when checking equality, so+ two lists can be equal even if they contain different proofs:++ l₁ : SList 1+ l₁ = scons 0 p₁ []++ l₂ : SList 1+ l₂ = scons 0 p₂ []++ l₁≡l₂ : l₁ ≡ l₂+ l₁≡l₂ = refl++ Irrelevant arguments can only be used in irrelevant contexts.+ Consider the following subset type:++ data Subset (A : Set) (P : A → Set) : Set where+ _#_ : (elem : A) → .(P elem) → Subset A P++ The following two uses are fine:++ elimSubset : ∀ {A C : Set} {P} →+ Subset A P → ((a : A) → .(P a) → C) → C+ elimSubset (a # p) k = k a p++ elem : {A : Set} {P : A → Set} → Subset A P → A+ elem (x # p) = x++ However, if we try to project out the proof component, then Agda+ complains that "variable p is declared irrelevant, so it cannot be+ used here":++ prjProof : ∀ {A P} (x : Subset A P) → P (elem x)+ prjProof (a # p) = p++ Matching against irrelevant arguments is also forbidden, except in+ the case of irrefutable matches (record constructor patterns which+ have been translated away). For instance, the match against the+ pattern (p , q) here is accepted:++ elim₂ : ∀ {A C : Set} {P Q : A → Set} →+ Subset A (λ x → Σ (P x) (λ _ → Q x)) →+ ((a : A) → .(P a) → .(Q a) → C) → C+ elim₂ (a # (p , q)) k = k a p q++ Absurd matches () are also allowed.++ Note that record fields can also be irrelevant. Example:++ record Subset (A : Set) (P : A → Set) : Set where+ constructor _#_+ field+ elem : A+ .proof : P elem++ Irrelevant fields are never in scope, neither inside nor outside the+ record. This means that no record field can depend on an irrelevant+ field, and furthermore projections are not defined for such fields.+ Irrelevant fields can only be accessed using pattern matching, as in+ elimSubset above.++ Irrelevant function types were added very recently, and have not+ been subjected to much experimentation yet, so do not be surprised+ if something is changed before the next release. For instance,+ dependent irrelevant function spaces (.(x : A) → B) might be added+ in the future.++* Mixfix binders.++ It is now possible to declare user-defined syntax that binds+ identifiers. Example:++ postulate+ State : Set → Set → Set+ put : ∀ {S} → S → State S ⊤+ get : ∀ {S} → State S S+ return : ∀ {A S} → A → State S A+ bind : ∀ {A B S} → State S B → (B → State S A) → State S A++ syntax bind e₁ (λ x → e₂) = x ← e₁ , e₂++ increment : State ℕ ⊤+ increment = x ← get ,+ put (1 + x)++ The syntax declaration for bind implies that x is in scope in e₂,+ but not in e₁.++ You can give fixity declarations along with syntax declarations:++ infixr 40 bind+ syntax bind e₁ (λ x → e₂) = x ← e₁ , e₂++ The fixity applies to the syntax, not the name; syntax declarations+ are also restricted to ordinary, non-operator names. The following+ declaration is disallowed:++ syntax _==_ x y = x === y++ Syntax declarations must also be linear; the following declaration+ is disallowed:++ syntax wrong x = x + x++ Syntax declarations were added very recently, and have not been+ subjected to much experimentation yet, so do not be surprised if+ something is changed before the next release.++* Prop has been removed from the language.++ The experimental sort Prop has been disabled. Any program using Prop+ should typecheck if Prop is replaced by Set₀. Note that Prop is still+ a keyword.++* Injective type constructors off by default.++ Automatic injectivity of type constructors has been disabled (by+ default). To enable it, use the flag --injective-type-constructors,+ either on the command line or in an OPTIONS pragma. Note that this+ flag makes Agda anti-classical and possibly inconsistent:++ Agda with excluded middle is inconsistent+ http://thread.gmane.org/gmane.comp.lang.agda/1367++ See test/Succeed/InjectiveTypeConstructors.agda for an example.++* Termination checker can count.++ There is a new flag --termination-depth=N accepting values N >= 1+ (with N = 1 being the default) which influences the behavior of the+ termination checker. So far, the termination checker has only+ distinguished three cases when comparing the argument of a recursive+ call with the formal parameter of the callee.++ < : the argument is structurally smaller than the parameter+ = : they are equal+ ? : the argument is bigger or unrelated to the parameter++ This behavior, which is still the default (N = 1), will not+ recognise the following functions as terminating.++ mutual++ f : ℕ → ℕ+ f zero = zero+ f (suc zero) = zero+ f (suc (suc n)) = aux n++ aux : ℕ → ℕ+ aux m = f (suc m)++ The call graph++ f --(<)--> aux --(?)--> f++ yields a recursive call from f to f via aux where the relation of+ call argument to callee parameter is computed as "unrelated"+ (composition of < and ?).++ Setting N >= 2 allows a finer analysis: n has two constructors less+ than suc (suc n), and suc m has one more than m, so we get the call+ graph:++ f --(-2)--> aux --(+1)--> f++ The indirect call f --> f is now labeled with (-1), and the+ termination checker can recognise that the call argument is+ decreasing on this path.++ Setting the termination depth to N means that the termination+ checker counts decrease up to N and increase up to N-1. The default,+ N=1, means that no increase is counted, every increase turns to+ "unrelated".++ In practice, examples like the one above sometimes arise when "with"+ is used. As an example, the program++ f : ℕ → ℕ+ f zero = zero+ f (suc zero) = zero+ f (suc (suc n)) with zero+ ... | _ = f (suc n)++ is internally represented as++ mutual++ f : ℕ → ℕ+ f zero = zero+ f (suc zero) = zero+ f (suc (suc n)) = aux n zero++ aux : ℕ → ℕ → ℕ+ aux m k = f (suc m)++ Thus, by default, the definition of f using "with" is not accepted+ by the termination checker, even though it looks structural (suc n+ is a subterm of suc suc n). Now, the termination checker is+ satisfied if the option "--termination-depth=2" is used.++ Caveats:++ - This is an experimental feature, hopefully being replaced by+ something smarter in the near future.++ - Increasing the termination depth will quickly lead to very long+ termination checking times. So, use with care. Setting termination+ depth to 100 by habit, just to be on the safe side, is not a good+ idea!++ - Increasing termination depth only makes sense for linear data+ types such as ℕ and Size. For other types, increase cannot be+ recognised. For instance, consider a similar example with lists.++ data List : Set where+ nil : List+ cons : ℕ → List → List++ mutual+ f : List → List+ f nil = nil+ f (cons x nil) = nil+ f (cons x (cons y ys)) = aux y ys++ aux : ℕ → List → List+ aux z zs = f (cons z zs)++ Here the termination checker compares cons z zs to z and also to+ zs. In both cases, the result will be "unrelated", no matter how+ high we set the termination depth. This is because when comparing+ cons z zs to zs, for instance, z is unrelated to zs, thus,+ cons z zs is also unrelated to zs. We cannot say it is just "one+ larger" since z could be a very large term. Note that this points+ to a weakness of untyped termination checking.++ To regain the benefit of increased termination depth, we need to+ index our lists by a linear type such as ℕ or Size. With+ termination depth 2, the above example is accepted for vectors+ instead of lists.++* The codata keyword has been removed. To use coinduction, use the+ following new builtins: INFINITY, SHARP and FLAT. Example:++ {-# OPTIONS --universe-polymorphism #-}++ module Coinduction where++ open import Level++ infix 1000 ♯_++ postulate+ ∞ : ∀ {a} (A : Set a) → Set a+ ♯_ : ∀ {a} {A : Set a} → A → ∞ A+ ♭ : ∀ {a} {A : Set a} → ∞ A → A++ {-# BUILTIN INFINITY ∞ #-}+ {-# BUILTIN SHARP ♯_ #-}+ {-# BUILTIN FLAT ♭ #-}++ Note that (non-dependent) pattern matching on SHARP is no longer+ allowed.++ Note also that strange things might happen if you try to combine the+ pragmas above with COMPILED_TYPE, COMPILED_DATA or COMPILED pragmas,+ or if the pragmas do not occur right after the postulates.++ The compiler compiles the INFINITY builtin to nothing (more or+ less), so that the use of coinduction does not get in the way of FFI+ declarations:++ data Colist (A : Set) : Set where+ [] : Colist A+ _∷_ : (x : A) (xs : ∞ (Colist A)) → Colist A++ {-# COMPILED_DATA Colist [] [] (:) #-}++* Infinite types.++ If the new flag --guardedness-preserving-type-constructors is used,+ then type constructors are treated as inductive constructors when we+ check productivity (but only in parameters, and only if they are+ used strictly positively or not at all). This makes examples such as+ the following possible:++ data Rec (A : ∞ Set) : Set where+ fold : ♭ A → Rec A++ -- Σ cannot be a record type below.++ data Σ (A : Set) (B : A → Set) : Set where+ _,_ : (x : A) → B x → Σ A B++ syntax Σ A (λ x → B) = Σ[ x ∶ A ] B++ -- Corecursive definition of the W-type.++ W : (A : Set) → (A → Set) → Set+ W A B = Rec (♯ (Σ[ x ∶ A ] (B x → W A B)))++ syntax W A (λ x → B) = W[ x ∶ A ] B++ sup : {A : Set} {B : A → Set} (x : A) (f : B x → W A B) → W A B+ sup x f = fold (x , f)++ W-rec : {A : Set} {B : A → Set}+ (P : W A B → Set) →+ (∀ {x} {f : B x → W A B} → (∀ y → P (f y)) → P (sup x f)) →+ ∀ x → P x+ W-rec P h (fold (x , f)) = h (λ y → W-rec P h (f y))++ -- Induction-recursion encoded as corecursion-recursion.++ data Label : Set where+ ′0 ′1 ′2 ′σ ′π ′w : Label++ mutual++ U : Set+ U = Σ Label U′++ U′ : Label → Set+ U′ ′0 = ⊤+ U′ ′1 = ⊤+ U′ ′2 = ⊤+ U′ ′σ = Rec (♯ (Σ[ a ∶ U ] (El a → U)))+ U′ ′π = Rec (♯ (Σ[ a ∶ U ] (El a → U)))+ U′ ′w = Rec (♯ (Σ[ a ∶ U ] (El a → U)))++ El : U → Set+ El (′0 , _) = ⊥+ El (′1 , _) = ⊤+ El (′2 , _) = Bool+ El (′σ , fold (a , b)) = Σ[ x ∶ El a ] El (b x)+ El (′π , fold (a , b)) = (x : El a) → El (b x)+ El (′w , fold (a , b)) = W[ x ∶ El a ] El (b x)++ U-rec : (P : ∀ u → El u → Set) →+ P (′1 , _) tt →+ P (′2 , _) true →+ P (′2 , _) false →+ (∀ {a b x y} →+ P a x → P (b x) y → P (′σ , fold (a , b)) (x , y)) →+ (∀ {a b f} →+ (∀ x → P (b x) (f x)) → P (′π , fold (a , b)) f) →+ (∀ {a b x f} →+ (∀ y → P (′w , fold (a , b)) (f y)) →+ P (′w , fold (a , b)) (sup x f)) →+ ∀ u (x : El u) → P u x+ U-rec P P1 P2t P2f Pσ Pπ Pw = rec+ where+ rec : ∀ u (x : El u) → P u x+ rec (′0 , _) ()+ rec (′1 , _) _ = P1+ rec (′2 , _) true = P2t+ rec (′2 , _) false = P2f+ rec (′σ , fold (a , b)) (x , y) = Pσ (rec _ x) (rec _ y)+ rec (′π , fold (a , b)) f = Pπ (λ x → rec _ (f x))+ rec (′w , fold (a , b)) (fold (x , f)) = Pw (λ y → rec _ (f y))++ The --guardedness-preserving-type-constructors extension is based on+ a rather operational understanding of ∞/♯_; it's not yet clear if+ this extension is consistent.++* Qualified constructors.++ Constructors can now be referred to qualified by their data type.+ For instance, given++ data Nat : Set where+ zero : Nat+ suc : Nat → Nat++ data Fin : Nat → Set where+ zero : ∀ {n} → Fin (suc n)+ suc : ∀ {n} → Fin n → Fin (suc n)++ you can refer to the constructors unambiguously as Nat.zero,+ Nat.suc, Fin.zero, and Fin.suc (Nat and Fin are modules containing+ the respective constructors). Example:++ inj : (n m : Nat) → Nat.suc n ≡ suc m → n ≡ m+ inj .m m refl = refl++ Previously you had to write something like++ inj : (n m : Nat) → _≡_ {Nat} (suc n) (suc m) → n ≡ m++ to make the type checker able to figure out that you wanted the+ natural number suc in this case.++* Reflection.++ There are two new constructs for reflection:++ - quoteGoal x in e++ In e the value of x will be a representation of the goal type+ (the type expected of the whole expression) as an element in a+ datatype of Agda terms (see below). For instance,++ example : ℕ+ example = quoteGoal x in {! at this point x = def (quote ℕ) [] !}++ - quote x : Name++ If x is the name of a definition (function, datatype, record, or+ a constructor), quote x gives you the representation of x as a+ value in the primitive type Name (see below).++ Quoted terms use the following BUILTINs and primitives (available+ from the standard library module Reflection):++ -- The type of Agda names.++ postulate Name : Set++ {-# BUILTIN QNAME Name #-}++ primitive primQNameEquality : Name → Name → Bool++ -- Arguments.++ Explicit? = Bool++ data Arg A : Set where+ arg : Explicit? → A → Arg A++ {-# BUILTIN ARG Arg #-}+ {-# BUILTIN ARGARG arg #-}++ -- The type of Agda terms.++ data Term : Set where+ var : ℕ → List (Arg Term) → Term+ con : Name → List (Arg Term) → Term+ def : Name → List (Arg Term) → Term+ lam : Explicit? → Term → Term+ pi : Arg Term → Term → Term+ sort : Term+ unknown : Term++ {-# BUILTIN AGDATERM Term #-}+ {-# BUILTIN AGDATERMVAR var #-}+ {-# BUILTIN AGDATERMCON con #-}+ {-# BUILTIN AGDATERMDEF def #-}+ {-# BUILTIN AGDATERMLAM lam #-}+ {-# BUILTIN AGDATERMPI pi #-}+ {-# BUILTIN AGDATERMSORT sort #-}+ {-# BUILTIN AGDATERMUNSUPPORTED unknown #-}++ Reflection may be useful when working with internal decision+ procedures, such as the standard library's ring solver.++* Minor record definition improvement.++ The definition of a record type is now available when type checking+ record module definitions. This means that you can define things+ like the following:++ record Cat : Set₁ where+ field+ Obj : Set+ _=>_ : Obj → Obj → Set+ -- ...++ -- not possible before:+ op : Cat+ op = record { Obj = Obj; _=>_ = λ A B → B => A }++Tools+-----++* The "Goal type and context" command now shows the goal type before+ the context, and the context is shown in reverse order. The "Goal+ type, context and inferred type" command has been modified in a+ similar way.++* Show module contents command.++ Given a module name M the Emacs mode can now display all the+ top-level modules and names inside M, along with types for the+ names. The command is activated using C-c C-o or the menus.++* Auto command.++ A command which searches for type inhabitants has been added. The+ command is invoked by pressing C-C C-a (or using the goal menu).+ There are several flags and parameters, e.g. '-c' which enables+ case-splitting in the search. For further information, see the Agda+ wiki:++ http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.Auto++* HTML generation is now possible for a module with unsolved+ meta-variables, provided that the --allow-unsolved-metas flag is+ used.++------------------------------------------------------------------------+-- Release notes for Agda 2 version 2.2.6+------------------------------------------------------------------------++Important changes since 2.2.4:++Language+--------++* Universe polymorphism (experimental extension).++ To enable universe polymorphism give the flag+ --universe-polymorphism on the command line or (recommended) as an+ OPTIONS pragma.++ When universe polymorphism is enabled Set takes an argument which is+ the universe level. For instance, the type of universe polymorphic+ identity is++ id : {a : Level} {A : Set a} → A → A.++ The type Level is isomorphic to the unary natural numbers and should be+ specified using the BUILTINs LEVEL, LEVELZERO, and LEVELSUC:++ data Level : Set where+ zero : Level+ suc : Level → Level++ {-# BUILTIN LEVEL Level #-}+ {-# BUILTIN LEVELZERO zero #-}+ {-# BUILTIN LEVELSUC suc #-}++ There is an additional BUILTIN LEVELMAX for taking the maximum of two+ levels:++ max : Level → Level → Level+ max zero m = m+ max (suc n) zero = suc n+ max (suc n) (suc m) = suc (max n m)++ {-# BUILTIN LEVELMAX max #-}++ The non-polymorphic universe levels Set, Set₁ and so on are sugar+ for Set zero, Set (suc zero), etc.++ At present there is no automatic lifting of types from one level to+ another. It can still be done (rather clumsily) by defining types+ like the following one:++ data Lifted {a} (A : Set a) : Set (suc a) where+ lift : A → Lifted A++ However, it is likely that automatic lifting is introduced at some+ point in the future.++* Multiple constructors, record fields, postulates or primitives can+ be declared using a single type signature:++ data Bool : Set where+ false true : Bool++ postulate+ A B : Set++* Record fields can be implicit:++ record R : Set₁ where+ field+ {A} : Set+ f : A → A+ {B C} D {E} : Set+ g : B → C → E++ By default implicit fields are not printed.++* Record constructors can be defined:++ record Σ (A : Set) (B : A → Set) : Set where+ constructor _,_+ field+ proj₁ : A+ proj₂ : B proj₁++ In this example _,_ gets the type++ (proj₁ : A) → B proj₁ → Σ A B.++ For implicit fields the corresponding constructor arguments become+ implicit.++ Note that the constructor is defined in the /outer/ scope, so any+ fixity declaration has to be given outside the record definition.+ The constructor is not in scope inside the record module.++ Note also that pattern matching for records has not been implemented+ yet.++* BUILTIN hooks for equality.++ The data type++ data _≡_ {A : Set} (x : A) : A → Set where+ refl : x ≡ x++ can be specified as the builtin equality type using the following+ pragmas:++ {-# BUILTIN EQUALITY _≡_ #-}+ {-# BUILTIN REFL refl #-}++ The builtin equality is used for the new rewrite construct and+ the primTrustMe primitive described below.++* New rewrite construct.++ If eqn : a ≡ b, where _≡_ is the builtin equality (see above) you+ can now write++ f ps rewrite eqn = rhs++ instead of++ f ps with a | eqn+ ... | ._ | refl = rhs++ The rewrite construct has the effect of rewriting the goal and the+ context by the given equation (left to right).++ You can rewrite using several equations (in sequence) by separating+ them with vertical bars (|):++ f ps rewrite eqn₁ | eqn₂ | … = rhs++ It is also possible to add with clauses after rewriting:++ f ps rewrite eqns with e+ ... | p = rhs++ Note that pattern matching happens before rewriting—if you want to+ rewrite and then do pattern matching you can use a with after the+ rewrite.++ See test/Succeed/Rewrite.agda for some examples. * A new primitive, primTrustMe, has been added:
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2005-2015 Ulf Norell, Andreas Abel, Nils Anders+Copyright (c) 2005-2016 Ulf Norell, Andreas Abel, Nils Anders Danielsson, Andrés Sicard-Ramírez, Dominique Devriese, Péter Divianszki, Francesco Mazzoli, Stevan Andjelkovic, Daniel Gustafsson, Alan Jeffrey, Makoto Takeyama, Andrea Vezzosi, Nicolas Pouillard,@@ -28,8 +28,9 @@ -------------------------------------------------------------------------------- -The file src/full/Agda/Utils/ReadP.hs is Copyright (c) The University of-Glasgow 2002 and is licensed under a BSD-like license as follows:+The file src/full/Agda/Utils/Parser/ReadP.hs is Copyright (c) The+University of Glasgow 2002 and is licensed under a BSD-like license as+follows: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
README.md view
@@ -1,8 +1,8 @@-[](https://travis-ci.org/agda/agda)- Agda 2 ====== +[](http://hackage.haskell.org/package/Agda) [](https://travis-ci.org/agda/agda)+ Table of contents: * [Prerequisites](#prerequisites)@@ -23,7 +23,6 @@ * cabal-install: http://www.haskell.org/cabal/ * Alex: http://www.haskell.org/alex/ * Happy: http://www.haskell.org/happy/-* cpphs: http://projects.haskell.org/cpphs/ * GNU Emacs: http://www.gnu.org/software/emacs/ You should also make sure that programs installed by cabal-install are@@ -171,3 +170,8 @@ fonts, is available at http://homepage.cs.uiowa.edu/~astump/agda/ [agdawiki]: http://wiki.portal.chalmers.se/agda/pmwiki.php++Hacking on Agda+---------------++Head to [`HACKING`](https://github.com/agda/agda/blob/master/HACKING)
Setup.hs view
@@ -1,4 +1,5 @@ +import Data.List import Distribution.Simple import Distribution.Simple.LocalBuildInfo import Distribution.Simple.Setup@@ -10,16 +11,34 @@ main = defaultMainWithHooks hooks -hooks = simpleUserHooks { postInst = checkAgdaPrimitive }+hooks = simpleUserHooks { regHook = checkAgdaPrimitiveAndRegister } -checkAgdaPrimitive :: Args -> InstallFlags -> PackageDescription -> LocalBuildInfo -> IO ()-checkAgdaPrimitive args flags pkg info = do+builtins :: [String]+builtins =+ [ "Bool", "Char", "Coinduction", "Equality", "Float"+ , "FromNat", "FromNeg", "FromString", "IO", "Int", "List"+ , "Nat", "Reflection", "Size", "Strict", "String"+ , "TrustMe", "Unit" ]++checkAgdaPrimitive :: PackageDescription -> LocalBuildInfo -> RegisterFlags -> IO ()+checkAgdaPrimitive pkg info flags | regGenPkgConf flags /= NoFlag = return () -- Gets run twice, only do this the second time+checkAgdaPrimitive pkg info flags = do let dirs = absoluteInstallDirs pkg info NoCopyDest agda = buildDir info </> "agda" </> "agda" <.> exeExtension- prim = datadir dirs </> "lib" </> "prim" </> "Agda" </> "Primitive" <.> "agda"+ primMod ms = (ms, datadir dirs </> "lib" </> "prim" </> "Agda" </> foldr1 (</>) ms <.> "agda")+ prims = primMod ["Primitive"] : [ primMod ["Builtin", m] | m <- builtins ]++ checkPrim (ms, file) = do+ ok <- rawSystem agda [file, "-v0"]+ case ok of+ ExitSuccess -> return ()+ ExitFailure _ -> putStrLn $ "WARNING: Failed to typecheck " ++ intercalate "." ("Agda" : ms) ++ "!"+ putStrLn "Generating Agda library interface files..."- ok <- rawSystem agda [prim, "-v0"]- case ok of- ExitSuccess -> return ()- ExitFailure _ -> putStrLn "WARNING: Failed to typecheck Agda.Primitive!"+ mapM_ checkPrim prims++checkAgdaPrimitiveAndRegister :: PackageDescription -> LocalBuildInfo -> UserHooks -> RegisterFlags -> IO ()+checkAgdaPrimitiveAndRegister pkg info hooks flags = do+ checkAgdaPrimitive pkg info flags+ regHook simpleUserHooks pkg info hooks flags -- This actually does something useful
dist/build/Agda/Syntax/Parser/Lexer.hs view
@@ -56,19 +56,19 @@ alex_tab_size :: Int alex_tab_size = 8 alex_base :: AlexAddr-alex_base = AlexA# "\xf7\xff\xff\xff\x6c\x00\x00\x00\xe1\x00\x00\x00\x55\x01\x00\x00\xca\x01\x00\x00\x3f\x02\x00\x00\xb5\x02\x00\x00\xab\x03\x00\x00\x88\xff\xff\xff\xd9\xff\xff\xff\x8a\x04\x00\x00\xe8\x04\x00\x00\x46\x05\x00\x00\xb6\x02\x00\x00\xa2\x05\x00\x00\x9d\x03\x00\x00\xfe\x05\x00\x00\xfd\x05\x00\x00\x7d\x06\x00\x00\xa2\xff\xff\xff\xfd\x06\x00\x00\xdc\x07\x00\x00\xdb\x07\x00\x00\x5b\x08\x00\x00\xdb\x08\x00\x00\x5b\x09\x00\x00\x3a\x0a\x00\x00\x96\x0a\x00\x00\xf2\x0a\x00\x00\xf1\x0a\x00\x00\x99\xff\xff\xff\xa6\xff\xff\xff\x8f\xff\xff\xff\x9d\xff\xff\xff\xa8\xff\xff\xff\x00\x00\x00\x00\x62\x0b\x00\x00\x00\x00\x00\x00\xd3\x0b\x00\x00\xa9\xff\xff\xff\x00\x00\x00\x00\x44\x0c\x00\x00\x00\x00\x00\x00\xb5\x0c\x00\x00\x00\x00\x00\x00\xf6\x0c\x00\x00\x00\x00\x00\x00\x37\x0d\x00\x00\x00\x00\x00\x00\x78\x0d\x00\x00\x00\x00\x00\x00\xb9\x0d\x00\x00\x98\x0e\x00\x00\x17\x0f\x00\x00\xd7\x0e\x00\x00\x00\x00\x00\x00\xd7\x0f\x00\x00\x97\x0f\x00\x00\x00\x00\x00\x00\x97\x10\x00\x00\x57\x10\x00\x00\x00\x00\x00\x00\x57\x11\x00\x00\x04\x00\x00\x00\xcd\x11\x00\x00\x2f\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x12\x00\x00\xb9\x13\x00\x00\xaf\x14\x00\x00\xa5\x15\x00\x00\x9b\x16\x00\x00\x91\x17\x00\x00\x87\x18\x00\x00\x7d\x19\x00\x00\x73\x1a\x00\x00\x69\x1b\x00\x00\x5f\x1c\x00\x00\x55\x1d\x00\x00\x4b\x1e\x00\x00\x41\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x20\x00\x00\x2f\x21\x00\x00\x26\x22\x00\x00\x1d\x23\x00\x00\x14\x24\x00\x00\x0b\x25\x00\x00\x02\x26\x00\x00\xf9\x26\x00\x00\xf0\x27\x00\x00\xe7\x28\x00\x00\xde\x29\x00\x00\xd5\x2a\x00\x00\xcc\x2b\x00\x00\xc3\x2c\x00\x00\xba\x2d\x00\x00\xb1\x2e\x00\x00\xa8\x2f\x00\x00\x9f\x30\x00\x00\x96\x31\x00\x00\x8d\x32\x00\x00\x84\x33\x00\x00\x7b\x34\x00\x00\x72\x35\x00\x00\x69\x36\x00\x00\x60\x37\x00\x00\x57\x38\x00\x00\x4e\x39\x00\x00\x45\x3a\x00\x00\x3c\x3b\x00\x00\x33\x3c\x00\x00\x2a\x3d\x00\x00\x21\x3e\x00\x00\x18\x3f\x00\x00\x0f\x40\x00\x00\x06\x41\x00\x00\xfd\x41\x00\x00\xf4\x42\x00\x00\xeb\x43\x00\x00\xe2\x44\x00\x00\xd9\x45\x00\x00\xd0\x46\x00\x00\xc7\x47\x00\x00\xbe\x48\x00\x00\xb5\x49\x00\x00\xac\x4a\x00\x00\xa3\x4b\x00\x00\x9a\x4c\x00\x00\x91\x4d\x00\x00\x88\x4e\x00\x00\x7f\x4f\x00\x00\x76\x50\x00\x00\x6d\x51\x00\x00\x64\x52\x00\x00\x5b\x53\x00\x00\x52\x54\x00\x00\x49\x55\x00\x00\x40\x56\x00\x00\x37\x57\x00\x00\x2e\x58\x00\x00\x25\x59\x00\x00\x1c\x5a\x00\x00\x13\x5b\x00\x00\x0a\x5c\x00\x00\x01\x5d\x00\x00\xf8\x5d\x00\x00\xef\x5e\x00\x00\xe6\x5f\x00\x00\xdd\x60\x00\x00\xd4\x61\x00\x00\xcb\x62\x00\x00\xc2\x63\x00\x00\xb9\x64\x00\x00\xb0\x65\x00\x00\xa7\x66\x00\x00\x9e\x67\x00\x00\x95\x68\x00\x00\x8c\x69\x00\x00\x83\x6a\x00\x00\x7a\x6b\x00\x00\x71\x6c\x00\x00\x68\x6d\x00\x00\x5f\x6e\x00\x00\x56\x6f\x00\x00\x4d\x70\x00\x00\x44\x71\x00\x00\x3b\x72\x00\x00\x32\x73\x00\x00\x29\x74\x00\x00\x20\x75\x00\x00\x17\x76\x00\x00\x0e\x77\x00\x00\x05\x78\x00\x00\xfc\x78\x00\x00\xf3\x79\x00\x00\xea\x7a\x00\x00\xe1\x7b\x00\x00\xd8\x7c\x00\x00\xcf\x7d\x00\x00\xc6\x7e\x00\x00\xbd\x7f\x00\x00\xb4\x80\x00\x00\xab\x81\x00\x00\xa2\x82\x00\x00\x99\x83\x00\x00\x90\x84\x00\x00\x87\x85\x00\x00\x7e\x86\x00\x00\x75\x87\x00\x00\x6c\x88\x00\x00\x63\x89\x00\x00\x5a\x8a\x00\x00\x51\x8b\x00\x00\x48\x8c\x00\x00\x3f\x8d\x00\x00\x36\x8e\x00\x00\x2d\x8f\x00\x00\x24\x90\x00\x00\x1b\x91\x00\x00\x12\x92\x00\x00\x09\x93\x00\x00\x00\x94\x00\x00\xf7\x94\x00\x00\xee\x95\x00\x00\xe5\x96\x00\x00\xdc\x97\x00\x00\xd3\x98\x00\x00\xca\x99\x00\x00\xc1\x9a\x00\x00\xb8\x9b\x00\x00\xaf\x9c\x00\x00\xa6\x9d\x00\x00\x9d\x9e\x00\x00\xec\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x9f\x00\x00\x93\xa0\x00\x00\x93\xa1\x00\x00\x89\xa2\x00\x00\x89\xa3\x00\x00\x7f\xa4\x00\x00\x7f\xa5\x00\x00\x7f\xa6\x00\x00\x7f\xa7\x00\x00\x7f\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x12\x00\x00\xa3\x13\x00\x00\x99\x14\x00\x00\x8f\x15\x00\x00\x7b\x17\x00\x00\x71\x18\x00\x00\x67\x19\x00\x00\x5d\x1a\x00\x00\x53\x1b\x00\x00\x35\x1e\x00\x00\x2f\x20\x00\x00\x26\x21\x00\x00\x1d\x22\x00\x00\x14\x23\x00\x00\x0b\x24\x00\x00\x02\x25\x00\x00\xf9\x25\x00\x00\xe7\x27\x00\x00\xde\x28\x00\x00\xd5\x29\x00\x00\xcc\x2a\x00\x00\xc3\x2b\x00\x00\xba\x2c\x00\x00\xb1\x2d\x00\x00\xa8\x2e\x00\x00\x9f\x2f\x00\x00\x96\x30\x00\x00\x8d\x31\x00\x00\x84\x32\x00\x00\x85\x33\x00\x00\x72\x34\x00\x00\x61\x37\x00\x00\x2b\x3d\x00\x00\xa4\x4b\x00\x00\x41\x56\x00\x00\xf9\x5d\x00\x00\xf0\x5e\x00\x00\xe7\x5f\x00\x00\x60\x6e\x00\x00\x20\x74\x00\x00\x7d\x9f\x00\x00\x73\xa2\x00\x00\x5e\xa9\x00\x00\xba\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\xff\xff\xff\xe3\xff\xff\xff\x00\x00\x00\x00\x16\xaa\x00\x00\x72\xaa\x00\x00\xe6\x42\x00\x00\xce\xaa\x00\x00\x2a\xab\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\xab\x00\x00\x85\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\xab\x00\x00\x3e\xac\x00\x00\x9a\xac\x00\x00\xf6\xac\x00\x00\x52\xad\x00\x00\xae\xad\x00\x00\x0a\xae\x00\x00\x66\xae\x00\x00\xc2\xae\x00\x00\x1e\xaf\x00\x00\x7a\xaf\x00\x00\xd6\xaf\x00\x00\x32\xb0\x00\x00\x8e\xb0\x00\x00\xea\xb0\x00\x00\x46\xb1\x00\x00\xa2\xb1\x00\x00\x00\xb2\x00\x00\x5e\xb2\x00\x00\xbc\xb2\x00\x00\x1a\xb3\x00\x00\x76\xb3\x00\x00\xd2\xb3\x00\x00\x2e\xb4\x00\x00\x8a\xb4\x00\x00\xe6\xb4\x00\x00\x42\xb5\x00\x00\x9e\xb5\x00\x00\xfa\xb5\x00\x00\x56\xb6\x00\x00\xb2\xb6\x00\x00\x0e\xb7\x00\x00\x6a\xb7\x00\x00\xc6\xb7\x00\x00\x22\xb8\x00\x00\x7e\xb8\x00\x00\xda\xb8\x00\x00\x36\xb9\x00\x00\x92\xb9\x00\x00\xee\xb9\x00\x00\x4a\xba\x00\x00\xa6\xba\x00\x00\x02\xbb\x00\x00\x5e\xbb\x00\x00\xba\xbb\x00\x00\x16\xbc\x00\x00\x72\xbc\x00\x00\xce\xbc\x00\x00\x2a\xbd\x00\x00\x86\xbd\x00\x00\xe2\xbd\x00\x00\x3e\xbe\x00\x00\x9a\xbe\x00\x00\xf6\xbe\x00\x00\x52\xbf\x00\x00\xae\xbf\x00\x00\x0a\xc0\x00\x00\x66\xc0\x00\x00\xc2\xc0\x00\x00\x1e\xc1\x00\x00\x7a\xc1\x00\x00\xd6\xc1\x00\x00\x32\xc2\x00\x00\x8e\xc2\x00\x00\xea\xc2\x00\x00\x46\xc3\x00\x00\xa2\xc3\x00\x00\xfe\xc3\x00\x00\x5a\xc4\x00\x00\xb6\xc4\x00\x00\x12\xc5\x00\x00\x6e\xc5\x00\x00\xca\xc5\x00\x00\x26\xc6\x00\x00\x82\xc6\x00\x00\xde\xc6\x00\x00\x3a\xc7\x00\x00\x96\xc7\x00\x00\xf2\xc7\x00\x00\x4e\xc8\x00\x00\xaa\xc8\x00\x00\x06\xc9\x00\x00\x62\xc9\x00\x00\xbe\xc9\x00\x00\x1a\xca\x00\x00\x76\xca\x00\x00\xd2\xca\x00\x00\x2e\xcb\x00\x00\x8a\xcb\x00\x00\xe6\xcb\x00\x00\x42\xcc\x00\x00\x9e\xcc\x00\x00\xfa\xcc\x00\x00\x56\xcd\x00\x00\xb2\xcd\x00\x00\x0e\xce\x00\x00\x6a\xce\x00\x00\xc6\xce\x00\x00\x22\xcf\x00\x00\x7e\xcf\x00\x00\xda\xcf\x00\x00\x36\xd0\x00\x00\x92\xd0\x00\x00\xee\xd0\x00\x00\x4a\xd1\x00\x00\xa6\xd1\x00\x00\x02\xd2\x00\x00\x5e\xd2\x00\x00\xba\xd2\x00\x00\x16\xd3\x00\x00\x72\xd3\x00\x00\xce\xd3\x00\x00\x2a\xd4\x00\x00\x86\xd4\x00\x00\xe2\xd4\x00\x00\x3e\xd5\x00\x00\x9a\xd5\x00\x00\xf6\xd5\x00\x00\x52\xd6\x00\x00\xae\xd6\x00\x00\x0a\xd7\x00\x00\x66\xd7\x00\x00\xc2\xd7\x00\x00\x1e\xd8\x00\x00\x7a\xd8\x00\x00\xd6\xd8\x00\x00\x32\xd9\x00\x00\x8e\xd9\x00\x00\xea\xd9\x00\x00\x46\xda\x00\x00\xa2\xda\x00\x00\xfe\xda\x00\x00\x5a\xdb\x00\x00\xb6\xdb\x00\x00\x12\xdc\x00\x00\x6e\xdc\x00\x00\xca\xdc\x00\x00\x26\xdd\x00\x00\x82\xdd\x00\x00\xde\xdd\x00\x00\x3a\xde\x00\x00\x96\xde\x00\x00\xf2\xde\x00\x00\x4e\xdf\x00\x00\xaa\xdf\x00\x00\x06\xe0\x00\x00\x62\xe0\x00\x00\xbe\xe0\x00\x00\x1a\xe1\x00\x00\x76\xe1\x00\x00\xd2\xe1\x00\x00\x2e\xe2\x00\x00\x8a\xe2\x00\x00\xe6\xe2\x00\x00\x42\xe3\x00\x00\x9e\xe3\x00\x00\xfa\xe3\x00\x00\x56\xe4\x00\x00\xb2\xe4\x00\x00\x0e\xe5\x00\x00\x6a\xe5\x00\x00\xc6\xe5\x00\x00\x22\xe6\x00\x00\x7e\xe6\x00\x00\xda\xe6\x00\x00\x36\xe7\x00\x00\x92\xe7\x00\x00\xee\xe7\x00\x00\x4a\xe8\x00\x00\xa6\xe8\x00\x00\x02\xe9\x00\x00\x5e\xe9\x00\x00\xba\xe9\x00\x00\x16\xea\x00\x00\x72\xea\x00\x00\xce\xea\x00\x00\x2a\xeb\x00\x00\x86\xeb\x00\x00\xe2\xeb\x00\x00\x3e\xec\x00\x00\x9a\xec\x00\x00\xf6\xec\x00\x00\x52\xed\x00\x00\xae\xed\x00\x00\x0a\xee\x00\x00\x66\xee\x00\x00\xc2\xee\x00\x00\x1e\xef\x00\x00\x7a\xef\x00\x00\xd6\xef\x00\x00\x32\xf0\x00\x00\x8e\xf0\x00\x00\xea\xf0\x00\x00\x46\xf1\x00\x00\xa2\xf1\x00\x00\xfe\xf1\x00\x00\x5a\xf2\x00\x00\xb6\xf2\x00\x00"#+alex_base = AlexA# "\xf7\xff\xff\xff\x6c\x00\x00\x00\xe1\x00\x00\x00\x55\x01\x00\x00\xca\x01\x00\x00\x3f\x02\x00\x00\xb5\x02\x00\x00\xab\x03\x00\x00\x88\xff\xff\xff\xd9\xff\xff\xff\x8a\x04\x00\x00\xe8\x04\x00\x00\x46\x05\x00\x00\xb6\x02\x00\x00\xa2\x05\x00\x00\x9d\x03\x00\x00\xfe\x05\x00\x00\xfd\x05\x00\x00\x7d\x06\x00\x00\xa2\xff\xff\xff\xfd\x06\x00\x00\xdc\x07\x00\x00\xdb\x07\x00\x00\x5b\x08\x00\x00\xdb\x08\x00\x00\x5b\x09\x00\x00\x3a\x0a\x00\x00\x96\x0a\x00\x00\xf2\x0a\x00\x00\xf1\x0a\x00\x00\x99\xff\xff\xff\xa6\xff\xff\xff\x8f\xff\xff\xff\x9d\xff\xff\xff\xa8\xff\xff\xff\x00\x00\x00\x00\x62\x0b\x00\x00\x00\x00\x00\x00\xd3\x0b\x00\x00\xa9\xff\xff\xff\x00\x00\x00\x00\x44\x0c\x00\x00\x00\x00\x00\x00\xb5\x0c\x00\x00\x00\x00\x00\x00\xf6\x0c\x00\x00\x00\x00\x00\x00\x37\x0d\x00\x00\x00\x00\x00\x00\x78\x0d\x00\x00\x00\x00\x00\x00\xb9\x0d\x00\x00\x98\x0e\x00\x00\x17\x0f\x00\x00\xd7\x0e\x00\x00\x00\x00\x00\x00\xd7\x0f\x00\x00\x97\x0f\x00\x00\x00\x00\x00\x00\x97\x10\x00\x00\x57\x10\x00\x00\x00\x00\x00\x00\x57\x11\x00\x00\x04\x00\x00\x00\xcd\x11\x00\x00\x2f\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x12\x00\x00\xb9\x13\x00\x00\xaf\x14\x00\x00\xa5\x15\x00\x00\x9b\x16\x00\x00\x91\x17\x00\x00\x87\x18\x00\x00\x7d\x19\x00\x00\x73\x1a\x00\x00\x69\x1b\x00\x00\x5f\x1c\x00\x00\x55\x1d\x00\x00\x4b\x1e\x00\x00\x41\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x20\x00\x00\x2f\x21\x00\x00\x26\x22\x00\x00\x1d\x23\x00\x00\x14\x24\x00\x00\x0b\x25\x00\x00\x02\x26\x00\x00\xf9\x26\x00\x00\xf0\x27\x00\x00\xe7\x28\x00\x00\xde\x29\x00\x00\xd5\x2a\x00\x00\xcc\x2b\x00\x00\xc3\x2c\x00\x00\xba\x2d\x00\x00\xb1\x2e\x00\x00\xa8\x2f\x00\x00\x9f\x30\x00\x00\x96\x31\x00\x00\x8d\x32\x00\x00\x84\x33\x00\x00\x7b\x34\x00\x00\x72\x35\x00\x00\x69\x36\x00\x00\x60\x37\x00\x00\x57\x38\x00\x00\x4e\x39\x00\x00\x45\x3a\x00\x00\x3c\x3b\x00\x00\x33\x3c\x00\x00\x2a\x3d\x00\x00\x21\x3e\x00\x00\x18\x3f\x00\x00\x0f\x40\x00\x00\x06\x41\x00\x00\xfd\x41\x00\x00\xf4\x42\x00\x00\xeb\x43\x00\x00\xe2\x44\x00\x00\xd9\x45\x00\x00\xd0\x46\x00\x00\xc7\x47\x00\x00\xbe\x48\x00\x00\xb5\x49\x00\x00\xac\x4a\x00\x00\xa3\x4b\x00\x00\x9a\x4c\x00\x00\x91\x4d\x00\x00\x88\x4e\x00\x00\x7f\x4f\x00\x00\x76\x50\x00\x00\x6d\x51\x00\x00\x64\x52\x00\x00\x5b\x53\x00\x00\x52\x54\x00\x00\x49\x55\x00\x00\x40\x56\x00\x00\x37\x57\x00\x00\x2e\x58\x00\x00\x25\x59\x00\x00\x1c\x5a\x00\x00\x13\x5b\x00\x00\x0a\x5c\x00\x00\x01\x5d\x00\x00\xf8\x5d\x00\x00\xef\x5e\x00\x00\xe6\x5f\x00\x00\xdd\x60\x00\x00\xd4\x61\x00\x00\xcb\x62\x00\x00\xc2\x63\x00\x00\xb9\x64\x00\x00\xb0\x65\x00\x00\xa7\x66\x00\x00\x9e\x67\x00\x00\x95\x68\x00\x00\x8c\x69\x00\x00\x83\x6a\x00\x00\x7a\x6b\x00\x00\x71\x6c\x00\x00\x68\x6d\x00\x00\x5f\x6e\x00\x00\x56\x6f\x00\x00\x4d\x70\x00\x00\x44\x71\x00\x00\x3b\x72\x00\x00\x32\x73\x00\x00\x29\x74\x00\x00\x20\x75\x00\x00\x17\x76\x00\x00\x0e\x77\x00\x00\x05\x78\x00\x00\xfc\x78\x00\x00\xf3\x79\x00\x00\xea\x7a\x00\x00\xe1\x7b\x00\x00\xd8\x7c\x00\x00\xcf\x7d\x00\x00\xc6\x7e\x00\x00\xbd\x7f\x00\x00\xb4\x80\x00\x00\xab\x81\x00\x00\xa2\x82\x00\x00\x99\x83\x00\x00\x90\x84\x00\x00\x87\x85\x00\x00\x7e\x86\x00\x00\x75\x87\x00\x00\x6c\x88\x00\x00\x63\x89\x00\x00\x5a\x8a\x00\x00\x51\x8b\x00\x00\x48\x8c\x00\x00\x3f\x8d\x00\x00\x36\x8e\x00\x00\x2d\x8f\x00\x00\x24\x90\x00\x00\x1b\x91\x00\x00\x12\x92\x00\x00\x09\x93\x00\x00\x00\x94\x00\x00\xf7\x94\x00\x00\xee\x95\x00\x00\xe5\x96\x00\x00\xdc\x97\x00\x00\xd3\x98\x00\x00\xca\x99\x00\x00\xc1\x9a\x00\x00\xb8\x9b\x00\x00\xaf\x9c\x00\x00\xa6\x9d\x00\x00\x9d\x9e\x00\x00\x94\x9f\x00\x00\x8b\xa0\x00\x00\x82\xa1\x00\x00\x79\xa2\x00\x00\x70\xa3\x00\x00\x67\xa4\x00\x00\x5e\xa5\x00\x00\x55\xa6\x00\x00\x4c\xa7\x00\x00\x43\xa8\x00\x00\x3a\xa9\x00\x00\x31\xaa\x00\x00\x28\xab\x00\x00\x1f\xac\x00\x00\x16\xad\x00\x00\x0d\xae\x00\x00\x04\xaf\x00\x00\xfb\xaf\x00\x00\xf2\xb0\x00\x00\xe9\xb1\x00\x00\xe0\xb2\x00\x00\xd7\xb3\x00\x00\xce\xb4\x00\x00\xc5\xb5\x00\x00\xbc\xb6\x00\x00\xb3\xb7\x00\x00\xaa\xb8\x00\x00\xa1\xb9\x00\x00\x98\xba\x00\x00\x8f\xbb\x00\x00\x86\xbc\x00\x00\x7d\xbd\x00\x00\x74\xbe\x00\x00\x6b\xbf\x00\x00\x62\xc0\x00\x00\x59\xc1\x00\x00\x50\xc2\x00\x00\x47\xc3\x00\x00\x3e\xc4\x00\x00\x35\xc5\x00\x00\x2c\xc6\x00\x00\x23\xc7\x00\x00\x1a\xc8\x00\x00\x11\xc9\x00\x00\x08\xca\x00\x00\xff\xca\x00\x00\xf6\xcb\x00\x00\xed\xcc\x00\x00\xe4\xcd\x00\x00\xdb\xce\x00\x00\xd2\xcf\x00\x00\xc9\xd0\x00\x00\xc0\xd1\x00\x00\xb7\xd2\x00\x00\xae\xd3\x00\x00\xa5\xd4\x00\x00\x9c\xd5\x00\x00\x93\xd6\x00\x00\x8a\xd7\x00\x00\x81\xd8\x00\x00\x78\xd9\x00\x00\x6f\xda\x00\x00\x66\xdb\x00\x00\x5d\xdc\x00\x00\x54\xdd\x00\x00\x4b\xde\x00\x00\x42\xdf\x00\x00\x39\xe0\x00\x00\x30\xe1\x00\x00\xec\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\xe2\x00\x00\x26\xe3\x00\x00\x26\xe4\x00\x00\x1c\xe5\x00\x00\x1c\xe6\x00\x00\x12\xe7\x00\x00\x12\xe8\x00\x00\x12\xe9\x00\x00\x12\xea\x00\x00\x12\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x12\x00\x00\xa3\x13\x00\x00\x99\x14\x00\x00\x8f\x15\x00\x00\x7b\x17\x00\x00\x71\x18\x00\x00\x67\x19\x00\x00\x5d\x1a\x00\x00\x53\x1b\x00\x00\x35\x1e\x00\x00\x2f\x20\x00\x00\x26\x21\x00\x00\x1d\x22\x00\x00\x14\x23\x00\x00\xf9\x25\x00\x00\xf0\x26\x00\x00\xe7\x27\x00\x00\xde\x28\x00\x00\xd5\x29\x00\x00\xcc\x2a\x00\x00\xc3\x2b\x00\x00\xba\x2c\x00\x00\xb1\x2d\x00\x00\x9f\x2f\x00\x00\x96\x30\x00\x00\x8d\x31\x00\x00\x84\x32\x00\x00\x7b\x33\x00\x00\x72\x34\x00\x00\x69\x35\x00\x00\x60\x36\x00\x00\x57\x37\x00\x00\x4e\x38\x00\x00\x45\x39\x00\x00\x3c\x3a\x00\x00\x33\x3b\x00\x00\x34\x3c\x00\x00\x21\x3d\x00\x00\x22\x3e\x00\x00\x10\x40\x00\x00\x38\x57\x00\x00\x14\x5b\x00\x00\xf9\x5d\x00\x00\x3c\x72\x00\x00\xf4\x79\x00\x00\xd0\x7d\x00\x00\xbe\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\xff\xff\xff\xe3\xff\xff\xff\x00\x00\x00\x00\x9a\x83\x00\x00\x76\x87\x00\x00\x56\x52\x00\x00\x2e\x8f\x00\x00\xb9\x9b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\xa3\x00\x00\x85\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\xe2\x00\x00\x06\xe5\x00\x00\xf1\xeb\x00\x00\x4d\xec\x00\x00\xa9\xec\x00\x00\x05\xed\x00\x00\x61\xed\x00\x00\xbd\xed\x00\x00\x19\xee\x00\x00\x75\xee\x00\x00\xd1\xee\x00\x00\x2d\xef\x00\x00\x89\xef\x00\x00\xe5\xef\x00\x00\x41\xf0\x00\x00\x9d\xf0\x00\x00\xf9\xf0\x00\x00\x55\xf1\x00\x00\xb1\xf1\x00\x00\x0d\xf2\x00\x00\x6b\xf2\x00\x00\xc9\xf2\x00\x00\x27\xf3\x00\x00\x85\xf3\x00\x00\xe3\xf3\x00\x00\x41\xf4\x00\x00\x9f\xf4\x00\x00\xfb\xf4\x00\x00\x57\xf5\x00\x00\xb3\xf5\x00\x00\x0f\xf6\x00\x00\x6b\xf6\x00\x00\xc7\xf6\x00\x00\x23\xf7\x00\x00\x7f\xf7\x00\x00\xdb\xf7\x00\x00\x37\xf8\x00\x00\x93\xf8\x00\x00\xef\xf8\x00\x00\x4b\xf9\x00\x00\xa7\xf9\x00\x00\x03\xfa\x00\x00\x5f\xfa\x00\x00\xbb\xfa\x00\x00\x17\xfb\x00\x00\x73\xfb\x00\x00\xcf\xfb\x00\x00\x2b\xfc\x00\x00\x87\xfc\x00\x00\xe3\xfc\x00\x00\x3f\xfd\x00\x00\x9b\xfd\x00\x00\xf7\xfd\x00\x00\x53\xfe\x00\x00\xaf\xfe\x00\x00\x0b\xff\x00\x00\x67\xff\x00\x00\xc3\xff\x00\x00\x1f\x00\x01\x00\x7b\x00\x01\x00\xd7\x00\x01\x00\x33\x01\x01\x00\x8f\x01\x01\x00\xeb\x01\x01\x00\x47\x02\x01\x00\xa3\x02\x01\x00\xff\x02\x01\x00\x5b\x03\x01\x00\xb7\x03\x01\x00\x13\x04\x01\x00\x6f\x04\x01\x00\xcb\x04\x01\x00\x27\x05\x01\x00\x83\x05\x01\x00\xdf\x05\x01\x00\x3b\x06\x01\x00\x97\x06\x01\x00\xf3\x06\x01\x00\x4f\x07\x01\x00\xab\x07\x01\x00\x07\x08\x01\x00\x63\x08\x01\x00\xbf\x08\x01\x00\x1b\x09\x01\x00\x77\x09\x01\x00\xd3\x09\x01\x00\x2f\x0a\x01\x00\x8b\x0a\x01\x00\xe7\x0a\x01\x00\x43\x0b\x01\x00\x9f\x0b\x01\x00\xfb\x0b\x01\x00\x57\x0c\x01\x00\xb3\x0c\x01\x00\x0f\x0d\x01\x00\x6b\x0d\x01\x00\xc7\x0d\x01\x00\x23\x0e\x01\x00\x7f\x0e\x01\x00\xdb\x0e\x01\x00\x37\x0f\x01\x00\x93\x0f\x01\x00\xef\x0f\x01\x00\x4b\x10\x01\x00\xa7\x10\x01\x00\x03\x11\x01\x00\x5f\x11\x01\x00\xbb\x11\x01\x00\x17\x12\x01\x00\x73\x12\x01\x00\xcf\x12\x01\x00\x2b\x13\x01\x00\x87\x13\x01\x00\xe3\x13\x01\x00\x3f\x14\x01\x00\x9b\x14\x01\x00\xf7\x14\x01\x00\x53\x15\x01\x00\xaf\x15\x01\x00\x0b\x16\x01\x00\x67\x16\x01\x00\xc3\x16\x01\x00\x1f\x17\x01\x00\x7b\x17\x01\x00\xd7\x17\x01\x00\x33\x18\x01\x00\x8f\x18\x01\x00\xeb\x18\x01\x00\x47\x19\x01\x00\xa3\x19\x01\x00\xff\x19\x01\x00\x5b\x1a\x01\x00\xb7\x1a\x01\x00\x13\x1b\x01\x00\x6f\x1b\x01\x00\xcb\x1b\x01\x00\x27\x1c\x01\x00\x83\x1c\x01\x00\xdf\x1c\x01\x00\x3b\x1d\x01\x00\x97\x1d\x01\x00\xf3\x1d\x01\x00\x4f\x1e\x01\x00\xab\x1e\x01\x00\x07\x1f\x01\x00\x63\x1f\x01\x00\xbf\x1f\x01\x00\x1b\x20\x01\x00\x77\x20\x01\x00\xd3\x20\x01\x00\x2f\x21\x01\x00\x8b\x21\x01\x00\xe7\x21\x01\x00\x43\x22\x01\x00\x9f\x22\x01\x00\xfb\x22\x01\x00\x57\x23\x01\x00\xb3\x23\x01\x00\x0f\x24\x01\x00\x6b\x24\x01\x00\xc7\x24\x01\x00\x23\x25\x01\x00\x7f\x25\x01\x00\xdb\x25\x01\x00\x37\x26\x01\x00\x93\x26\x01\x00\xef\x26\x01\x00\x4b\x27\x01\x00\xa7\x27\x01\x00\x03\x28\x01\x00\x5f\x28\x01\x00\xbb\x28\x01\x00\x17\x29\x01\x00\x73\x29\x01\x00\xcf\x29\x01\x00\x2b\x2a\x01\x00\x87\x2a\x01\x00\xe3\x2a\x01\x00\x3f\x2b\x01\x00\x9b\x2b\x01\x00\xf7\x2b\x01\x00\x53\x2c\x01\x00\xaf\x2c\x01\x00\x0b\x2d\x01\x00\x67\x2d\x01\x00\xc3\x2d\x01\x00\x1f\x2e\x01\x00\x7b\x2e\x01\x00\xd7\x2e\x01\x00\x33\x2f\x01\x00\x8f\x2f\x01\x00\xeb\x2f\x01\x00\x47\x30\x01\x00\xa3\x30\x01\x00\xff\x30\x01\x00\x5b\x31\x01\x00\xb7\x31\x01\x00\x13\x32\x01\x00\x6f\x32\x01\x00\xcb\x32\x01\x00\x27\x33\x01\x00\x83\x33\x01\x00\xdf\x33\x01\x00\x3b\x34\x01\x00\x97\x34\x01\x00\xf3\x34\x01\x00\x4f\x35\x01\x00\xab\x35\x01\x00\x07\x36\x01\x00\x63\x36\x01\x00\xbf\x36\x01\x00\x1b\x37\x01\x00\x77\x37\x01\x00\xd3\x37\x01\x00\x2f\x38\x01\x00\x8b\x38\x01\x00\xe7\x38\x01\x00\x43\x39\x01\x00\x9f\x39\x01\x00\xfb\x39\x01\x00\x57\x3a\x01\x00\xb3\x3a\x01\x00\x0f\x3b\x01\x00\x6b\x3b\x01\x00\xc7\x3b\x01\x00\x23\x3c\x01\x00\x7f\x3c\x01\x00"# alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\xe9\x00\x54\x00\x54\x00\x54\x00\x53\x00\xdc\x00\x08\x00\x27\x00\x1e\x00\x1f\x00\x22\x00\x20\x00\x13\x00\x43\x00\x56\x00\x19\x01\x1a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x9b\x01\x2b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x2a\x01\x22\x01\x23\x01\x9b\x01\x9b\x01\x9b\x01\x3d\x01\x1b\x01\x9b\x01\x30\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x1d\x01\x1c\x01\x9b\x01\x1e\x01\x9b\x01\x20\x01\x26\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xba\x01\x9b\x01\x9b\x01\x5b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x25\x01\x9b\x01\x9b\x01\x1f\x01\x9b\x01\x9d\x01\x9b\x01\x89\x01\x6a\x01\x9b\x01\x7d\x01\x9b\x01\x92\x01\xf0\x01\x9b\x01\x9b\x01\x54\x01\x88\x01\x9b\x01\xbd\x01\x94\x01\x81\x01\x8a\x01\x91\x01\x90\x01\x84\x01\x9b\x01\x64\x01\x9b\x01\x9b\x01\x9b\x01\x28\x01\x21\x01\x29\x01\x9b\x01\xea\x00\x54\x00\x54\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x54\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x54\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x0a\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x1b\x00\x15\x00\x15\x00\x1a\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x09\x00\x15\x00\x00\x00\x15\x00\xe9\x00\x54\x00\x54\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x9b\x01\x2b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x2a\x01\x22\x01\x23\x01\x9b\x01\x9b\x01\x9b\x01\x3d\x01\x1b\x01\x9b\x01\x30\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x1d\x01\x1c\x01\x9b\x01\x1e\x01\x9b\x01\x20\x01\x26\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xba\x01\x9b\x01\x9b\x01\x5b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x25\x01\x9b\x01\x9b\x01\x1f\x01\x9b\x01\x9d\x01\x9b\x01\x89\x01\x6a\x01\x9b\x01\x7d\x01\x9b\x01\x92\x01\xf0\x01\x9b\x01\x9b\x01\x54\x01\x88\x01\x9b\x01\xbd\x01\x94\x01\x81\x01\x8a\x01\x91\x01\x90\x01\x84\x01\x9b\x01\x64\x01\x9b\x01\x9b\x01\x9b\x01\x28\x01\x21\x01\x29\x01\x9b\x01\x54\x00\x54\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x0a\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x1c\x00\x15\x00\x15\x00\x1a\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x09\x00\x15\x00\x00\x00\x15\x00\xe9\x00\x54\x00\x54\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3c\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x0d\x00\x9b\x01\x9b\x01\x0c\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x52\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x09\x00\x9b\x01\x00\x00\x9b\x01\xeb\x00\x54\x00\x54\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x0a\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x1b\x00\x15\x00\x15\x00\x1a\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x09\x00\x15\x00\x00\x00\x15\x00\xff\xff\x55\x00\x55\x00\x55\x00\x55\x00\x18\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x9b\x01\x7c\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9a\x00\x9f\x00\x00\x00\xce\x00\x00\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x8c\x00\x9e\x00\xac\x00\xba\x00\x00\x00\x00\x00\x9b\x00\xbb\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\x4e\x00\x4e\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x4e\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x01\x00\x00\xd5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\xe0\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\xdd\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x0b\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\xde\x00\x15\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\xd5\x01\x9b\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x0f\x00\xd5\x01\xd5\x01\x0e\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\x00\x00\xd5\x01\x3e\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x0b\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x00\x00\x15\x00\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x11\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x15\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\x3a\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x0f\x00\xd5\x01\xd5\x01\x0e\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\x00\x00\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x41\x00\x11\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x33\x00\x17\x00\x2a\x00\x2a\x00\x2a\x00\x2b\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\x44\x00\x44\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x44\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x95\x01\x9b\x01\x57\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xa4\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x45\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x4a\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x4b\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x4e\x00\x4e\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xfe\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xff\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x09\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x9b\x01\x57\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x08\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xe3\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x5c\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x65\x00\x9b\x01\x9b\x01\x98\x01\x9b\x01\x9b\x01\x9b\x01\x73\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x76\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xff\xff\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x6b\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xd4\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xc6\x00\x9b\x01\x9b\x01\x9b\x01\x78\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xbf\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xbe\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x91\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xb4\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\xff\xff\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x00\x95\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x00\xc7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\xe2\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\xdf\x00\x00\x00\xe2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\xe2\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\xe2\x00\x00\x00\xe2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\xe2\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x00\x00\x00\x00\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\xe2\x00\x00\x00\xe2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\x00\x00\x00\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\x00\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\x00\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x00\xe8\x00\xe8\x00\xe8\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00\xe8\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\xe2\x00\x00\x00\xe2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\xe2\x00\x00\x00\x00\x00\x00\x00\xe6\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\xdf\x00\x00\x00\xe2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\xe2\x00\x00\x00\x00\x00\x00\x00\xe6\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\xe2\x00\x00\x00\xe2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xff\xff\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\xe2\x00\x00\x00\xe2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\xda\x01\x9b\x01\x3f\x01\x34\x00\x9b\x01\x2e\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x34\x00\x9b\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x34\x00\x9b\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xd6\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x34\x00\x9b\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xd9\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xd9\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x34\x00\x9b\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x2f\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xd9\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xd9\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xdd\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\xd5\x01\x9b\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xdc\x01\xd5\x01\xdc\x01\x10\x00\xd5\x01\x35\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x33\x01\x33\x01\x33\x01\x33\x01\x32\x01\x33\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x33\x01\x33\x01\x33\x01\x33\x01\x32\x01\x33\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x10\x00\xd5\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x33\x01\x33\x01\x33\x01\x33\x01\x32\x01\x33\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x33\x01\x33\x01\x33\x01\x33\x01\x32\x01\x33\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x10\x00\xd5\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x10\x00\xd5\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x33\x01\x33\x01\x33\x01\x33\x01\x32\x01\x33\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x33\x01\x33\x01\x33\x01\x33\x01\x32\x01\x33\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd7\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\x9b\x01\xd5\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xd6\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\xd5\x01\x9b\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x10\x00\xd5\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xdb\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xdb\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x10\x00\xd5\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x10\x00\xd5\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xdb\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xdb\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd8\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x10\x00\xd5\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd7\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\x9b\x01\xd5\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\xe6\x00\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\xdd\x00\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\xe6\x00\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x24\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\xdd\x00\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\xde\x00\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x37\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\xde\x00\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xee\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xf1\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xf2\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xf3\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xf6\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xf7\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xf8\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xfb\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xfc\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x02\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x03\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x0c\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x0d\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x0e\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x10\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x13\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x14\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x15\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x16\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x17\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xf1\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xed\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xea\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xe9\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xe8\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xe7\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x4a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xe6\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xe5\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xe2\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xe0\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x4e\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xdf\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x53\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xd4\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xd3\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x62\x01\xd2\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xd1\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xd0\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xcf\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xce\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xcd\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xcc\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xcb\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xca\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xc9\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xc8\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x58\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x59\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xc7\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xc6\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x5d\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xc5\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xc4\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xc3\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xc2\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x5e\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xc1\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xc0\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xbf\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xbe\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x63\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xab\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x6c\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x93\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xb6\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xbc\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xbb\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x75\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x77\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xb9\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x8f\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x7a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x7c\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xb5\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xb4\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xb2\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xae\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xb1\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x7e\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x7f\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xb0\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xaf\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xac\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x82\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x83\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xa9\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xa7\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x85\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xa2\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x99\x01\x9b\x01\x9b\x01\x8e\x01\x9b\x01\x9b\x01\xa6\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x8c\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x8d\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xa5\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xa3\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xa1\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9f\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9e\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x97\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x96\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xa0\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x8b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x86\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xa8\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xaa\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x80\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xad\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xb7\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x7b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x79\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xb8\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x74\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x72\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x87\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x71\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x70\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x6f\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x6e\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x6d\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x6b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9c\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x69\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x68\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x67\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x66\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x65\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x61\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x60\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x5f\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x5c\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x5a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x56\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x55\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x51\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x50\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x4f\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xde\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x4d\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x4c\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x4b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xe1\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xe4\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x49\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x48\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x47\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xeb\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x46\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x45\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x44\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xec\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x43\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x42\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x41\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xee\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xef\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x40\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\xd5\x01\x9b\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x10\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\x9b\x01\xd5\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\xd5\x01\x9b\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x10\x00\xd5\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x10\x00\xd5\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\x9b\x01\xd5\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\xda\x01\x9b\x01\x3f\x01\x10\x00\x9b\x01\x37\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x37\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\xd5\x01\x9b\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xdc\x01\xd5\x01\xdc\x01\x10\x00\xd5\x01\x3b\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x10\x00\xd5\x01\x3b\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\x39\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\xd5\x01\x9b\x01\xd5\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x12\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x11\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x0f\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x0b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x0a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x07\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x06\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x05\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x04\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x01\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xfd\x00\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xfa\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xf9\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xf5\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xf4\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xf0\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xef\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xb3\x01\xed\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x9b\x01\x9b\x01\x9b\x01\x3e\x01\x10\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xec\x00\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x9b\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#+alex_table = AlexA# "\x00\x00\x2e\x01\x54\x00\x54\x00\x54\x00\x53\x00\x21\x01\x08\x00\x27\x00\x1e\x00\x1f\x00\x22\x00\x20\x00\x13\x00\x43\x00\x56\x00\x61\x01\x62\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\xf9\x01\x73\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x72\x01\x6a\x01\x6b\x01\xf9\x01\xf9\x01\xf9\x01\x88\x01\x63\x01\xf9\x01\x7a\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x65\x01\x64\x01\xf9\x01\x66\x01\xf9\x01\x68\x01\x6e\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xac\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x6d\x01\xf9\x01\xf9\x01\x67\x01\xf9\x01\xfd\x01\xf9\x01\xdb\x01\xba\x01\xfb\x01\xcf\x01\xf9\x01\xe6\x01\x55\x02\xf9\x01\xf9\x01\xa5\x01\xd3\x01\xf8\x01\x1e\x02\xe8\x01\xd4\x01\xdc\x01\xe5\x01\xe4\x01\xd7\x01\xf9\x01\xb4\x01\xf9\x01\xf9\x01\xf9\x01\x70\x01\x69\x01\x71\x01\xf9\x01\x2f\x01\x54\x00\x54\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x54\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x54\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x0a\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x1b\x00\x15\x00\x15\x00\x1a\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x09\x00\x15\x00\x00\x00\x15\x00\x2e\x01\x54\x00\x54\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\xf9\x01\x73\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x72\x01\x6a\x01\x6b\x01\xf9\x01\xf9\x01\xf9\x01\x88\x01\x63\x01\xf9\x01\x7a\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x65\x01\x64\x01\xf9\x01\x66\x01\xf9\x01\x68\x01\x6e\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xac\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x6d\x01\xf9\x01\xf9\x01\x67\x01\xf9\x01\xfd\x01\xf9\x01\xdb\x01\xba\x01\xfb\x01\xcf\x01\xf9\x01\xe6\x01\x55\x02\xf9\x01\xf9\x01\xa5\x01\xd3\x01\xf8\x01\x1e\x02\xe8\x01\xd4\x01\xdc\x01\xe5\x01\xe4\x01\xd7\x01\xf9\x01\xb4\x01\xf9\x01\xf9\x01\xf9\x01\x70\x01\x69\x01\x71\x01\xf9\x01\x54\x00\x54\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x0a\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x1c\x00\x15\x00\x15\x00\x1a\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x09\x00\x15\x00\x00\x00\x15\x00\x2e\x01\x54\x00\x54\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x87\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x0d\x00\xf9\x01\xf9\x01\x0c\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xa3\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x09\x00\xf9\x01\x00\x00\xf9\x01\x30\x01\x54\x00\x54\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x0a\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x1b\x00\x15\x00\x15\x00\x1a\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x09\x00\x15\x00\x00\x00\x15\x00\xff\xff\x55\x00\x55\x00\x55\x00\x55\x00\x60\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\xf9\x01\x8c\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xbb\x00\xc5\x00\xbf\x00\x00\x00\x00\x00\x00\x00\xbe\x00\xb2\x00\x00\x00\x00\x00\x9e\x00\xc0\x00\xd3\x00\xed\x00\x00\x00\x00\x00\xc4\x00\xf0\x00\xd5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\x4e\x00\x4e\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x4e\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x02\x00\x00\x39\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x25\x01\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x22\x01\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x0b\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x23\x01\x15\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x39\x02\xf9\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x0f\x00\x39\x02\x39\x02\x0e\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x00\x00\x39\x02\x3e\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x0b\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x00\x00\x15\x00\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x11\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x15\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x85\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x0f\x00\x39\x02\x39\x02\x0e\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x00\x00\x39\x02\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x41\x00\x11\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x33\x00\x17\x00\x2a\x00\x2a\x00\x2a\x00\x2b\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\x44\x00\x44\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x44\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xe9\x01\xf9\x01\xa8\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x04\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x45\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x4a\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x4b\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x4e\x00\x4e\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x12\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x31\x00\x18\x00\x28\x00\x28\x00\x28\x00\x29\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x45\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x46\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\x50\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x49\x02\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xee\x01\xf9\x01\xf9\x01\xf9\x01\xc6\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xc9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x57\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xae\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x5c\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x5e\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xff\xff\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x74\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x7d\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x19\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x01\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x16\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x00\xf9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xaa\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf5\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf3\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xb0\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xb6\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xeb\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x00\x00\x00\x00\xc7\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xe4\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x01\xb3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x12\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x39\x00\x14\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\x19\x00\x25\x00\x25\x00\x25\x00\x26\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\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\x3e\x02\xf9\x01\x8d\x01\x34\x00\xf9\x01\x77\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x75\x01\x75\x01\x75\x01\x75\x01\x74\x01\x75\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x75\x01\x75\x01\x75\x01\x75\x01\x74\x01\x75\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x27\x01\x00\x00\x00\x00\x00\x00\x25\x01\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x24\x01\x00\x00\x27\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x27\x01\x00\x00\x00\x00\x00\x00\x25\x01\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x27\x01\x00\x00\x27\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x34\x00\xf9\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x75\x01\x75\x01\x75\x01\x75\x01\x74\x01\x75\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x75\x01\x75\x01\x75\x01\x75\x01\x74\x01\x75\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x27\x01\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x01\x00\x00\x00\x00\x2a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x27\x01\x00\x00\x27\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x01\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x00\x00\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x00\x00\x2d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x01\x00\x00\x2d\x01\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x27\x01\x00\x00\x27\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x27\x01\x00\x00\x00\x00\x00\x00\x2b\x01\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x24\x01\x00\x00\x27\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x27\x01\x00\x00\x00\x00\x00\x00\x2b\x01\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x27\x01\x00\x00\x27\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\xff\xff\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x27\x01\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x27\x01\x00\x00\x27\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x16\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\x1d\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x34\x00\xf9\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x34\x00\xf9\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x75\x01\x75\x01\x75\x01\x75\x01\x74\x01\x75\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x75\x01\x75\x01\x75\x01\x75\x01\x74\x01\x75\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x3a\x02\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x34\x00\xf9\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x3d\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x3d\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x34\x00\xf9\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x34\x00\xf9\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x3d\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x3d\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x41\x02\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x34\x00\xf9\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x42\x02\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x39\x02\xf9\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x40\x02\x39\x02\x40\x02\x10\x00\x39\x02\x80\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7d\x01\x7e\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7d\x01\x7e\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x10\x00\x39\x02\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7d\x01\x7e\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7d\x01\x7e\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x10\x00\x39\x02\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x10\x00\x39\x02\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7d\x01\x7e\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7d\x01\x7e\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x3b\x02\x39\x02\x39\x02\x00\x00\x39\x02\xf9\x01\x39\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x3a\x02\xf9\x01\xf9\x01\x00\x00\xf9\x01\x39\x02\xf9\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x10\x00\x39\x02\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x3f\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x3f\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x10\x00\x39\x02\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x10\x00\x39\x02\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x3f\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x3f\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x3c\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x10\x00\x39\x02\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x3b\x02\x39\x02\x39\x02\x00\x00\x39\x02\xf9\x01\x39\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x2b\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x22\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x2b\x01\x10\x00\xf9\x01\x7b\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\x6c\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x22\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf0\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x23\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf1\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x23\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xfa\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x23\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x23\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\x82\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x23\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x33\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x36\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x37\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x38\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x3b\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x3c\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x3d\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x40\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x41\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x42\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x43\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x49\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x4a\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x4b\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x53\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x54\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x55\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x58\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x5b\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x5c\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x5d\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x5e\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x5f\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x56\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x52\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x4f\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x4e\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x4d\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x4c\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x9a\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x4b\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x48\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x45\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x9f\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x44\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xa4\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x38\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x37\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xb2\x01\x36\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x35\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x34\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x33\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x32\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x31\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x30\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x2f\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x2e\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x2d\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x2c\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x2b\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x2a\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xa9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xaa\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x29\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x28\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x27\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xad\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x26\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x25\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x24\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x23\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x22\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x21\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x20\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x1f\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xb3\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x0b\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xbc\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xe7\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x18\x02\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x1d\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x1c\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xc4\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x14\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x0e\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xc8\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xca\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x1b\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xe3\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xcc\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xce\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x17\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x16\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x13\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xd0\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xd1\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x12\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x11\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x10\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x0f\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x0c\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xd5\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xd6\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x09\x02\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x07\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xd8\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x02\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xef\x01\xf9\x01\xf9\x01\xe2\x01\xf9\x01\xf9\x01\x06\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xde\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xdf\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xe0\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xe1\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x05\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x03\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x01\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xeb\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xec\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xff\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x89\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8a\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf3\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf4\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8b\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf7\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf6\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf5\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xfe\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xed\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xea\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xdd\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xd9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x08\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x0a\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xd2\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x0d\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x19\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xcd\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xcb\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x1a\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xc7\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xc5\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xda\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xc3\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xc2\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xc1\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xc0\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xbf\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xbe\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xbd\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xbb\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xfc\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf2\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xb9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xb8\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xb7\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xb6\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xb5\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xb1\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xb0\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xaf\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xab\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xa7\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xa6\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xa2\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xa1\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xa0\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x43\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x9e\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x9d\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x9c\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x47\x02\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x4a\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x9b\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x99\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x98\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x97\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x96\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x95\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x50\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x94\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x93\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x92\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x51\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x91\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x90\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x8f\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x53\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x54\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x8e\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x39\x02\xf9\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x10\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\xf9\x01\x39\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x39\x02\xf9\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x10\x00\x39\x02\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x10\x00\x39\x02\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x7e\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\xf9\x01\x39\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\x3e\x02\xf9\x01\x8d\x01\x10\x00\xf9\x01\x82\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\x82\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x39\x02\xf9\x01\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x40\x02\x39\x02\x40\x02\x10\x00\x39\x02\x86\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x10\x00\x39\x02\x86\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x39\x02\x00\x00\x39\x02\xf9\x01\x39\x02\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x5a\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x59\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x46\x02\xf9\x01\xf9\x01\x57\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x56\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x52\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x51\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x4d\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x4c\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x48\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x47\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x44\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x3f\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x3e\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x3a\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x39\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x35\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x34\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x15\x02\x32\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\x00\x00\xf9\x01\xf9\x01\xf9\x01\x8c\x01\x10\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x31\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\xf9\x01\x00\x00\xf9\x01\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# alex_check :: AlexAddr-alex_check = AlexA# "\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7d\x00\x2d\x00\x65\x00\x6f\x00\x63\x00\x7b\x00\x6e\x00\x64\x00\x64\x00\x0a\x00\x23\x00\x2e\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\x26\x00\x20\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\xff\xff\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\xff\xff\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\xff\xff\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\xff\xff\x7e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x21\x00\x23\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x42\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x52\x00\x53\x00\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\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\x7b\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\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\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x0a\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\x21\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x65\x00\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x63\x00\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x69\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x67\x00\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x65\x00\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x64\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\x23\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x2d\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\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\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x42\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x5c\x00\xff\xff\xff\xff\x5f\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x7c\x00\xff\xff\x7e\x00\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#+alex_check = AlexA# "\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7d\x00\x2d\x00\x65\x00\x6f\x00\x63\x00\x7b\x00\x6e\x00\x64\x00\x64\x00\x0a\x00\x23\x00\x2e\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\x26\x00\x20\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\xff\xff\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\xff\xff\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\xff\xff\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\xff\xff\x7e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x21\x00\x23\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\xff\xff\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x52\x00\x53\x00\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\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\x7b\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\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\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x0a\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\x21\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x65\x00\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x63\x00\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x69\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x67\x00\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x65\x00\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x64\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\x23\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x2d\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\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\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\x53\x00\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\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\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x42\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x5c\x00\xff\xff\xff\xff\x5f\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x7c\x00\xff\xff\x7e\x00\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# alex_deflt :: AlexAddr-alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xae\x00\x4d\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\x2c\x00\x2c\x00\x2e\x00\x2e\x00\xff\xff\x30\x00\x30\x00\x32\x00\x32\x00\x37\x00\x37\x00\x3a\x00\x3a\x00\x3d\x00\x3d\x00\x42\x00\x42\x00\xff\xff\xe2\x00\xe2\x00\xe2\x00\xae\x00\xae\x00\xae\x00\x4d\x00\x4d\x00\x4d\x00\x43\x00\xff\xff\x43\x00\x43\x00\x43\x00\xff\xff\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xae\x00\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\xe1\x00\xe1\x00\xe2\x00\xe8\x00\xe2\x00\xe8\x00\xe7\x00\xe7\x00\xe8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#+alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xdf\x00\x4d\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\x2c\x00\x2c\x00\x2e\x00\x2e\x00\xff\xff\x30\x00\x30\x00\x32\x00\x32\x00\x37\x00\x37\x00\x3a\x00\x3a\x00\x3d\x00\x3d\x00\x42\x00\x42\x00\xff\xff\x27\x01\x27\x01\x27\x01\xdf\x00\xdf\x00\xdf\x00\x4d\x00\x4d\x00\x4d\x00\x43\x00\xff\xff\x43\x00\x43\x00\x43\x00\xff\xff\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x01\x26\x01\x26\x01\x27\x01\x2d\x01\x27\x01\x2d\x01\x2c\x01\x2c\x01\x2d\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# -alex_accept = listArray (0::Int,497) [AlexAccNone,AlexAccPred (alex_action_37) ( not' eof )(AlexAccNone),AlexAccNone,AlexAcc (alex_action_40),AlexAccNone,AlexAcc (alex_action_39),AlexAccNone,AlexAccPred (alex_action_4) ( eof )(AlexAccNone),AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccPred (alex_action_0) (alexRightContext 63)(AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip)),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccSkip,AlexAccPred (alex_action_5) ( inState code )(AlexAccNone),AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_8),AlexAcc (alex_action_9),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_12),AlexAcc (alex_action_13),AlexAcc (alex_action_14),AlexAcc (alex_action_15),AlexAcc (alex_action_16),AlexAcc (alex_action_17),AlexAcc (alex_action_18),AlexAcc (alex_action_19),AlexAcc (alex_action_20),AlexAcc (alex_action_21),AlexAcc (alex_action_22),AlexAcc (alex_action_23),AlexAcc (alex_action_24),AlexAcc (alex_action_25),AlexAcc (alex_action_26),AlexAcc (alex_action_27),AlexAcc (alex_action_28),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAccPred (alex_action_30) ( not' (followedBy '#') )(AlexAccNone),AlexAccPred (alex_action_30) ( not' (followedBy '#') )(AlexAccNone),AlexAcc (alex_action_31),AlexAcc (alex_action_32),AlexAcc (alex_action_32),AlexAccPred (alex_action_33) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred (alex_action_33) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred (alex_action_33) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred (alex_action_33) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred (alex_action_33) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred (alex_action_33) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred (alex_action_33) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAcc (alex_action_105))),AlexAccPred (alex_action_33) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAcc (alex_action_105))),AlexAccPred (alex_action_33) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAcc (alex_action_105))),AlexAcc (alex_action_35),AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_41),AlexAcc (alex_action_42),AlexAcc (alex_action_43),AlexAcc (alex_action_44),AlexAcc (alex_action_45),AlexAcc (alex_action_46),AlexAcc (alex_action_47),AlexAcc (alex_action_48),AlexAcc (alex_action_49),AlexAcc (alex_action_50),AlexAcc (alex_action_51),AlexAcc (alex_action_52),AlexAcc (alex_action_53),AlexAcc (alex_action_54),AlexAcc (alex_action_55),AlexAcc (alex_action_56),AlexAcc (alex_action_57),AlexAcc (alex_action_58),AlexAcc (alex_action_59),AlexAcc (alex_action_60),AlexAcc (alex_action_61),AlexAcc (alex_action_62),AlexAcc (alex_action_63),AlexAcc (alex_action_64),AlexAcc (alex_action_65),AlexAcc (alex_action_66),AlexAcc (alex_action_67),AlexAcc (alex_action_68),AlexAcc (alex_action_68),AlexAcc (alex_action_68),AlexAcc (alex_action_69),AlexAcc (alex_action_70),AlexAcc (alex_action_71),AlexAcc (alex_action_72),AlexAcc (alex_action_73),AlexAcc (alex_action_74),AlexAcc (alex_action_75),AlexAcc (alex_action_76),AlexAcc (alex_action_77),AlexAcc (alex_action_78),AlexAcc (alex_action_79),AlexAcc (alex_action_80),AlexAcc (alex_action_81),AlexAcc (alex_action_82),AlexAcc (alex_action_83),AlexAcc (alex_action_84),AlexAcc (alex_action_85),AlexAcc (alex_action_86),AlexAcc (alex_action_87),AlexAcc (alex_action_88),AlexAcc (alex_action_89),AlexAcc (alex_action_90),AlexAcc (alex_action_91),AlexAcc (alex_action_92),AlexAcc (alex_action_93),AlexAcc (alex_action_94),AlexAcc (alex_action_95),AlexAcc (alex_action_96),AlexAcc (alex_action_97),AlexAccPred (alex_action_98) (alexRightContext 64)(AlexAccNone),AlexAcc (alex_action_99),AlexAcc (alex_action_100),AlexAcc (alex_action_101),AlexAcc (alex_action_102),AlexAcc (alex_action_103),AlexAcc (alex_action_103),AlexAcc (alex_action_103),AlexAcc (alex_action_103),AlexAcc (alex_action_103),AlexAcc (alex_action_104),AlexAcc (alex_action_104),AlexAcc (alex_action_104),AlexAcc (alex_action_104),AlexAcc (alex_action_104),AlexAcc (alex_action_104),AlexAcc (alex_action_104),AlexAcc (alex_action_104),AlexAcc (alex_action_104),AlexAcc (alex_action_104),AlexAcc (alex_action_104),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105),AlexAcc (alex_action_105)]-{-# LINE 236 "src/full/Agda/Syntax/Parser/Lexer.x" #-}+alex_accept = listArray (0::Int,598) [AlexAccNone,AlexAccPred (alex_action_46) ( not' eof )(AlexAccNone),AlexAccNone,AlexAcc (alex_action_49),AlexAccNone,AlexAcc (alex_action_48),AlexAccNone,AlexAccPred (alex_action_4) ( eof )(AlexAccNone),AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccPred (alex_action_0) (alexRightContext 63)(AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip)),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccPred (alex_action_1) ( keepComments )(AlexAccSkip),AlexAccSkip,AlexAccPred (alex_action_5) ( inState code )(AlexAccNone),AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_8),AlexAcc (alex_action_9),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_12),AlexAcc (alex_action_13),AlexAcc (alex_action_14),AlexAcc (alex_action_15),AlexAcc (alex_action_16),AlexAcc (alex_action_17),AlexAcc (alex_action_18),AlexAcc (alex_action_19),AlexAcc (alex_action_20),AlexAcc (alex_action_21),AlexAcc (alex_action_22),AlexAcc (alex_action_23),AlexAcc (alex_action_24),AlexAcc (alex_action_25),AlexAcc (alex_action_26),AlexAcc (alex_action_27),AlexAcc (alex_action_28),AlexAcc (alex_action_29),AlexAcc (alex_action_30),AlexAcc (alex_action_31),AlexAcc (alex_action_32),AlexAcc (alex_action_33),AlexAcc (alex_action_34),AlexAcc (alex_action_35),AlexAcc (alex_action_36),AlexAcc (alex_action_37),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAcc (alex_action_38),AlexAccPred (alex_action_39) ( not' (followedBy '#') )(AlexAccNone),AlexAccPred (alex_action_39) ( not' (followedBy '#') )(AlexAccNone),AlexAcc (alex_action_40),AlexAcc (alex_action_41),AlexAcc (alex_action_41),AlexAccPred (alex_action_42) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred (alex_action_42) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred (alex_action_42) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred (alex_action_42) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred (alex_action_42) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred (alex_action_42) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone)),AlexAccPred (alex_action_42) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAcc (alex_action_117))),AlexAccPred (alex_action_42) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAcc (alex_action_117))),AlexAccPred (alex_action_42) ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAcc (alex_action_117))),AlexAcc (alex_action_44),AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_50),AlexAcc (alex_action_51),AlexAcc (alex_action_52),AlexAcc (alex_action_53),AlexAcc (alex_action_54),AlexAcc (alex_action_55),AlexAcc (alex_action_56),AlexAcc (alex_action_57),AlexAcc (alex_action_58),AlexAcc (alex_action_59),AlexAcc (alex_action_60),AlexAcc (alex_action_61),AlexAcc (alex_action_62),AlexAcc (alex_action_63),AlexAcc (alex_action_64),AlexAcc (alex_action_65),AlexAcc (alex_action_66),AlexAcc (alex_action_67),AlexAcc (alex_action_68),AlexAcc (alex_action_69),AlexAcc (alex_action_70),AlexAcc (alex_action_71),AlexAcc (alex_action_72),AlexAcc (alex_action_73),AlexAcc (alex_action_74),AlexAcc (alex_action_75),AlexAcc (alex_action_76),AlexAcc (alex_action_77),AlexAcc (alex_action_78),AlexAcc (alex_action_79),AlexAcc (alex_action_79),AlexAcc (alex_action_79),AlexAcc (alex_action_80),AlexAcc (alex_action_81),AlexAcc (alex_action_82),AlexAcc (alex_action_83),AlexAcc (alex_action_84),AlexAcc (alex_action_85),AlexAcc (alex_action_86),AlexAcc (alex_action_87),AlexAcc (alex_action_88),AlexAcc (alex_action_89),AlexAcc (alex_action_90),AlexAcc (alex_action_91),AlexAcc (alex_action_92),AlexAcc (alex_action_93),AlexAcc (alex_action_94),AlexAcc (alex_action_95),AlexAcc (alex_action_96),AlexAcc (alex_action_97),AlexAcc (alex_action_98),AlexAcc (alex_action_99),AlexAcc (alex_action_100),AlexAcc (alex_action_101),AlexAcc (alex_action_102),AlexAcc (alex_action_103),AlexAcc (alex_action_104),AlexAcc (alex_action_105),AlexAcc (alex_action_106),AlexAcc (alex_action_107),AlexAcc (alex_action_108),AlexAcc (alex_action_109),AlexAccPred (alex_action_110) (alexRightContext 64)(AlexAccNone),AlexAcc (alex_action_111),AlexAcc (alex_action_112),AlexAcc (alex_action_113),AlexAcc (alex_action_114),AlexAcc (alex_action_115),AlexAcc (alex_action_115),AlexAcc (alex_action_115),AlexAcc (alex_action_115),AlexAcc (alex_action_115),AlexAcc (alex_action_115),AlexAcc (alex_action_115),AlexAcc (alex_action_115),AlexAcc (alex_action_116),AlexAcc (alex_action_116),AlexAcc (alex_action_116),AlexAcc (alex_action_116),AlexAcc (alex_action_116),AlexAcc (alex_action_116),AlexAcc (alex_action_116),AlexAcc (alex_action_116),AlexAcc (alex_action_116),AlexAcc (alex_action_116),AlexAcc (alex_action_116),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117),AlexAcc (alex_action_117)]+{-# LINE 249 "src/full/Agda/Syntax/Parser/Lexer.x" #-} -- | This is the initial state for parsing a literate file. Code blocks@@ -159,104 +159,117 @@ alex_action_8 = begin pragma alex_action_9 = symbol SymOpenPragma alex_action_10 = endWith $ symbol SymClosePragma -alex_action_11 = keyword KwOPTIONS -alex_action_12 = keyword KwBUILTIN -alex_action_13 = keyword KwREWRITE +alex_action_11 = keyword KwBUILTIN +alex_action_12 = keyword KwCATCHALL +alex_action_13 = keyword KwCOMPILED alex_action_14 = keyword KwCOMPILED_DATA -alex_action_15 = keyword KwCOMPILED_TYPE -alex_action_16 = keyword KwCOMPILED -alex_action_17 = keyword KwCOMPILED_EXPORT -alex_action_18 = keyword KwCOMPILED_EPIC +alex_action_15 = keyword KwCOMPILED_DATA_UHC +alex_action_16 = keyword KwCOMPILED_DECLARE_DATA +alex_action_17 = keyword KwCOMPILED_EPIC +alex_action_18 = keyword KwCOMPILED_EXPORT alex_action_19 = keyword KwCOMPILED_JS -alex_action_20 = keyword KwSTATIC -alex_action_21 = keyword KwIMPORT -alex_action_22 = keyword KwIMPOSSIBLE -alex_action_23 = keyword KwETA -alex_action_24 = keyword KwNO_TERMINATION_CHECK -alex_action_25 = keyword KwNON_TERMINATING -alex_action_26 = keyword KwTERMINATING -alex_action_27 = keyword KwMEASURE +alex_action_20 = keyword KwCOMPILED_TYPE +alex_action_21 = keyword KwCOMPILED_UHC +alex_action_22 = keyword KwHASKELL +alex_action_23 = keyword KwDISPLAY +alex_action_24 = keyword KwIMPORT +alex_action_25 = keyword KwIMPORT_UHC +alex_action_26 = keyword KwIMPOSSIBLE +alex_action_27 = keyword KwINLINE alex_action_28 = keyword KwLINE -alex_action_29 = withInterval $ TokString -alex_action_30 = nestedComment -alex_action_31 = symbol SymEndComment -alex_action_32 = symbol SymEndComment -alex_action_33 = withInterval TokComment -alex_action_35 = begin bol_ -alex_action_37 = offsideRule -alex_action_39 = endWith newLayoutContext -alex_action_40 = emptyLayout -alex_action_41 = keyword KwLet -alex_action_42 = keyword KwIn -alex_action_43 = keyword KwWhere -alex_action_44 = keyword KwField -alex_action_45 = keyword KwWith -alex_action_46 = keyword KwRewrite -alex_action_47 = keyword KwPostulate -alex_action_48 = keyword KwPrimitive -alex_action_49 = keyword KwOpen -alex_action_50 = keyword KwImport -alex_action_51 = keyword KwModule -alex_action_52 = keyword KwData -alex_action_53 = keyword KwCoData -alex_action_54 = keyword KwRecord -alex_action_55 = keyword KwConstructor -alex_action_56 = keyword KwInductive -alex_action_57 = keyword KwCoInductive -alex_action_58 = keyword KwInfix -alex_action_59 = keyword KwInfixL -alex_action_60 = keyword KwInfixR -alex_action_61 = keyword KwMutual -alex_action_62 = keyword KwAbstract -alex_action_63 = keyword KwPrivate -alex_action_64 = keyword KwInstance -alex_action_65 = keyword KwSet -alex_action_66 = keyword KwProp -alex_action_67 = keyword KwForall -alex_action_68 = withInterval' (read . drop 3) TokSetN -alex_action_69 = keyword KwQuoteGoal -alex_action_70 = keyword KwQuoteContext -alex_action_71 = keyword KwQuote -alex_action_72 = keyword KwQuoteTerm -alex_action_73 = keyword KwUnquote -alex_action_74 = keyword KwUnquoteDecl -alex_action_75 = keyword KwTactic -alex_action_76 = keyword KwSyntax -alex_action_77 = keyword KwPatternSyn -alex_action_78 = keyword KwUsing -alex_action_79 = keyword KwHiding -alex_action_80 = keyword KwRenaming -alex_action_81 = endWith $ keyword KwTo -alex_action_82 = keyword KwPublic -alex_action_83 = hole -alex_action_84 = symbol SymEllipsis -alex_action_85 = symbol SymDotDot -alex_action_86 = symbol SymDot -alex_action_87 = symbol SymSemi -alex_action_88 = symbol SymColon -alex_action_89 = symbol SymEqual -alex_action_90 = symbol SymUnderscore -alex_action_91 = symbol SymQuestionMark -alex_action_92 = symbol SymBar -alex_action_93 = symbol SymOpenParen -alex_action_94 = symbol SymCloseParen -alex_action_95 = symbol SymArrow -alex_action_96 = symbol SymLambda -alex_action_97 = symbol SymAs -alex_action_98 = symbol SymDoubleOpenBrace -alex_action_99 = symbol SymOpenBrace -alex_action_100 = symbol SymCloseBrace -alex_action_101 = litChar -alex_action_102 = litString -alex_action_103 = literal LitInt -alex_action_104 = literal LitFloat -alex_action_105 = identifier +alex_action_29 = keyword KwMEASURE +alex_action_30 = keyword KwNO_POSITIVITY_CHECK +alex_action_31 = keyword KwNO_SMASHING +alex_action_32 = keyword KwNO_TERMINATION_CHECK +alex_action_33 = keyword KwNON_TERMINATING +alex_action_34 = keyword KwOPTIONS +alex_action_35 = keyword KwREWRITE +alex_action_36 = keyword KwSTATIC +alex_action_37 = keyword KwTERMINATING +alex_action_38 = withInterval $ TokString +alex_action_39 = nestedComment +alex_action_40 = symbol SymEndComment +alex_action_41 = symbol SymEndComment +alex_action_42 = withInterval TokComment +alex_action_44 = begin bol_ +alex_action_46 = offsideRule +alex_action_48 = endWith newLayoutContext +alex_action_49 = emptyLayout +alex_action_50 = keyword KwLet +alex_action_51 = keyword KwIn +alex_action_52 = keyword KwWhere +alex_action_53 = keyword KwField +alex_action_54 = keyword KwWith +alex_action_55 = keyword KwRewrite +alex_action_56 = keyword KwPostulate +alex_action_57 = keyword KwPrimitive +alex_action_58 = keyword KwOpen +alex_action_59 = keyword KwImport +alex_action_60 = keyword KwModule +alex_action_61 = keyword KwData +alex_action_62 = keyword KwCoData +alex_action_63 = keyword KwRecord +alex_action_64 = keyword KwConstructor +alex_action_65 = keyword KwInductive +alex_action_66 = keyword KwCoInductive +alex_action_67 = keyword KwEta +alex_action_68 = keyword KwNoEta +alex_action_69 = keyword KwInfix +alex_action_70 = keyword KwInfixL +alex_action_71 = keyword KwInfixR +alex_action_72 = keyword KwMutual +alex_action_73 = keyword KwAbstract +alex_action_74 = keyword KwPrivate +alex_action_75 = keyword KwInstance +alex_action_76 = keyword KwMacro +alex_action_77 = keyword KwSet +alex_action_78 = keyword KwForall +alex_action_79 = withInterval' (read . drop 3) TokSetN +alex_action_80 = keyword KwQuoteGoal +alex_action_81 = keyword KwQuoteContext +alex_action_82 = keyword KwQuote +alex_action_83 = keyword KwQuoteTerm +alex_action_84 = keyword KwUnquote +alex_action_85 = keyword KwUnquoteDecl +alex_action_86 = keyword KwUnquoteDef +alex_action_87 = keyword KwTactic +alex_action_88 = keyword KwSyntax +alex_action_89 = keyword KwPatternSyn +alex_action_90 = keyword KwUsing +alex_action_91 = keyword KwHiding +alex_action_92 = keyword KwRenaming +alex_action_93 = endWith $ keyword KwTo +alex_action_94 = keyword KwPublic +alex_action_95 = hole +alex_action_96 = symbol SymEllipsis +alex_action_97 = symbol SymDotDot +alex_action_98 = symbol SymDot +alex_action_99 = symbol SymSemi +alex_action_100 = symbol SymColon +alex_action_101 = symbol SymEqual +alex_action_102 = symbol SymUnderscore +alex_action_103 = symbol SymQuestionMark +alex_action_104 = symbol SymBar +alex_action_105 = symbol SymOpenParen +alex_action_106 = symbol SymCloseParen +alex_action_107 = symbol SymArrow +alex_action_108 = symbol SymLambda +alex_action_109 = symbol SymAs +alex_action_110 = symbol SymDoubleOpenBrace +alex_action_111 = symbol SymOpenBrace +alex_action_112 = symbol SymCloseBrace +alex_action_113 = litChar +alex_action_114 = litString +alex_action_115 = literal LitNat +alex_action_116 = literal LitFloat +alex_action_117 = identifier {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "<built-in>" #-} {-# LINE 1 "<command-line>" #-} {-# LINE 9 "<command-line>" #-}-{-# LINE 1 "/usr/local/stow/ghc-7.10.3/lib/ghc-7.10.3/include/ghcversion.h" #-}+{-# LINE 1 "/usr/local/stow/ghc-8.0-upstream/lib/ghc-8.0.0.20160316/include/ghcversion.h" #-}+
dist/build/Agda/Syntax/Parser/Parser.hs view
@@ -19,5622 +19,6314 @@ moduleParser , moduleNameParser , exprParser- , tokensParser- , tests- ) where--import Control.Monad--import Data.Char-import Data.Functor-import Data.List-import Data.Maybe-import qualified Data.Traversable as T--import Debug.Trace--import Agda.Syntax.Position hiding (tests)-import Agda.Syntax.Parser.Monad-import Agda.Syntax.Parser.Lexer-import Agda.Syntax.Parser.Tokens-import Agda.Syntax.Concrete as C-import Agda.Syntax.Concrete.Pretty ()-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg)-import qualified Agda.Syntax.Common as Common-import Agda.Syntax.Fixity-import Agda.Syntax.Notation-import Agda.Syntax.Literal--import Agda.Utils.Hash-import Agda.Utils.List (spanJust)-import Agda.Utils.Monad-import Agda.Utils.Pretty-import Agda.Utils.QuickCheck-import Agda.Utils.Singleton-import Agda.Utils.TestHelpers-import Agda.Utils.Tuple-import qualified Data.Array as Happy_Data_Array-import qualified GHC.Exts as Happy_GHC_Exts-import Control.Applicative(Applicative(..))-import Control.Monad (ap)---- parser produced by Happy Version 1.19.5--newtype HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75 = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = Happy_GHC_Exts.Any-#else-type HappyAny = forall a . a-#endif-happyIn7 :: ([Token]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn7 #-}-happyOut7 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Token])-happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut7 #-}-happyIn8 :: ([Token]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn8 #-}-happyOut8 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Token])-happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut8 #-}-happyIn9 :: (Token) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Token)-happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: (([Pragma], [Declaration])) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (([Pragma], [Declaration]))-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyIn11 :: t11 -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn11 #-}-happyOut11 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> t11-happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut11 #-}-happyIn12 :: t12 -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn12 #-}-happyOut12 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> t12-happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut12 #-}-happyIn13 :: t13 -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn13 #-}-happyOut13 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> t13-happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut13 #-}-happyIn14 :: (()) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn14 #-}-happyOut14 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (())-happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut14 #-}-happyIn15 :: (Integer) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn15 #-}-happyOut15 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Integer)-happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut15 #-}-happyIn16 :: (Name) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn16 #-}-happyOut16 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Name)-happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut16 #-}-happyIn17 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn17 #-}-happyOut17 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Name])-happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut17 #-}-happyIn18 :: (Range) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn18 #-}-happyOut18 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Range)-happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut18 #-}-happyIn19 :: (Arg Name) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn19 #-}-happyOut19 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Arg Name)-happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut19 #-}-happyIn20 :: ([Arg Name]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn20 #-}-happyOut20 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Arg Name])-happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut20 #-}-happyIn21 :: ([Arg Name]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn21 #-}-happyOut21 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Arg Name])-happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut21 #-}-happyIn22 :: (QName) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn22 #-}-happyOut22 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (QName)-happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut22 #-}-happyIn23 :: (QName) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn23 #-}-happyOut23 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (QName)-happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut23 #-}-happyIn24 :: (Name) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn24 #-}-happyOut24 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Name)-happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut24 #-}-happyIn25 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn25 #-}-happyOut25 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Name])-happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut25 #-}-happyIn26 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn26 #-}-happyOut26 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Name])-happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut26 #-}-happyIn27 :: (Either [Name] [Expr]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn27 #-}-happyOut27 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Either [Name] [Expr])-happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut27 #-}-happyIn28 :: ([WithHiding Name]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn28 #-}-happyOut28 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([WithHiding Name])-happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut28 #-}-happyIn29 :: ([String]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn29 #-}-happyOut29 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([String])-happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut29 #-}-happyIn30 :: (String) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn30 #-}-happyOut30 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (String)-happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut30 #-}-happyIn31 :: (Name) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn31 #-}-happyOut31 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Name)-happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut31 #-}-happyIn32 :: (QName) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn32 #-}-happyOut32 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (QName)-happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut32 #-}-happyIn33 :: (Expr) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn33 #-}-happyOut33 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Expr)-happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut33 #-}-happyIn34 :: t34 -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn34 #-}-happyOut34 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> t34-happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut34 #-}-happyIn35 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn35 #-}-happyOut35 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Expr])-happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut35 #-}-happyIn36 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn36 #-}-happyOut36 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Expr])-happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut36 #-}-happyIn37 :: t37 -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn37 #-}-happyOut37 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> t37-happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut37 #-}-happyIn38 :: (Expr) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn38 #-}-happyOut38 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Expr)-happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut38 #-}-happyIn39 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn39 #-}-happyOut39 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Expr])-happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut39 #-}-happyIn40 :: t40 -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn40 #-}-happyOut40 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> t40-happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut40 #-}-happyIn41 :: t41 -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn41 #-}-happyOut41 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> t41-happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut41 #-}-happyIn42 :: t42 -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn42 #-}-happyOut42 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> t42-happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut42 #-}-happyIn43 :: ([(Name, Expr)]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn43 #-}-happyOut43 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([(Name, Expr)])-happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut43 #-}-happyIn44 :: ([(Name, Expr)]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn44 #-}-happyOut44 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([(Name, Expr)])-happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut44 #-}-happyIn45 :: ((Name, Expr)) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn45 #-}-happyOut45 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ((Name, Expr))-happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut45 #-}-happyIn46 :: t46 -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn46 #-}-happyOut46 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> t46-happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut46 #-}-happyIn47 :: t47 -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn47 #-}-happyOut47 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> t47-happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut47 #-}-happyIn48 :: ([TypedBindings]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn48 #-}-happyOut48 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([TypedBindings])-happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut48 #-}-happyIn49 :: (TypedBindings) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn49 #-}-happyOut49 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (TypedBindings)-happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut49 #-}-happyIn50 :: (TypedBindings) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn50 #-}-happyOut50 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (TypedBindings)-happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut50 #-}-happyIn51 :: (TypedBindings) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn51 #-}-happyOut51 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (TypedBindings)-happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut51 #-}-happyIn52 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn52 #-}-happyOut52 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([LamBinding])-happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut52 #-}-happyIn53 :: (Either ([LamBinding], Hiding) [Expr]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn53 #-}-happyOut53 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Either ([LamBinding], Hiding) [Expr])-happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut53 #-}-happyIn54 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn54 #-}-happyOut54 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Either Hiding LamBinding])-happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut54 #-}-happyIn55 :: (Either [Either Hiding LamBinding] [Expr]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn55 #-}-happyOut55 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Either [Either Hiding LamBinding] [Expr])-happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut55 #-}-happyIn56 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn56 #-}-happyOut56 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ((LHS,RHS,WhereClause))-happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut56 #-}-happyIn57 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn57 #-}-happyOut57 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ((LHS,RHS,WhereClause))-happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut57 #-}-happyIn58 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn58 #-}-happyOut58 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ((LHS,RHS,WhereClause))-happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut58 #-}-happyIn59 :: ([(LHS,RHS,WhereClause)]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn59 #-}-happyOut59 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([(LHS,RHS,WhereClause)])-happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut59 #-}-happyIn60 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn60 #-}-happyOut60 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([LamBinding])-happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut60 #-}-happyIn61 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn61 #-}-happyOut61 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([LamBinding])-happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut61 #-}-happyIn62 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn62 #-}-happyOut62 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([LamBinding])-happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut62 #-}-happyIn63 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn63 #-}-happyOut63 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([LamBinding])-happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut63 #-}-happyIn64 :: (Either [LamBinding] [Expr]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn64 #-}-happyOut64 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Either [LamBinding] [Expr])-happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut64 #-}-happyIn65 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn65 #-}-happyOut65 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (ImportDirective)-happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut65 #-}-happyIn66 :: ([ImportDirective]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn66 #-}-happyOut66 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([ImportDirective])-happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut66 #-}-happyIn67 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn67 #-}-happyOut67 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (ImportDirective)-happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut67 #-}-happyIn68 :: ((UsingOrHiding , Range)) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn68 #-}-happyOut68 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ((UsingOrHiding , Range))-happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut68 #-}-happyIn69 :: (([Renaming] , Range)) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn69 #-}-happyOut69 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (([Renaming] , Range))-happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut69 #-}-happyIn70 :: ([Renaming]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn70 #-}-happyOut70 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Renaming])-happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut70 #-}-happyIn71 :: (Renaming) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn71 #-}-happyOut71 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Renaming)-happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut71 #-}-happyIn72 :: (ImportedName) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn72 #-}-happyOut72 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (ImportedName)-happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut72 #-}-happyIn73 :: (ImportedName) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn73 #-}-happyOut73 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (ImportedName)-happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut73 #-}-happyIn74 :: ([ImportedName]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn74 #-}-happyOut74 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([ImportedName])-happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut74 #-}-happyIn75 :: t75 -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn75 #-}-happyOut75 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> t75-happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut75 #-}-happyIn76 :: (LHS) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn76 #-}-happyOut76 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (LHS)-happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut76 #-}-happyIn77 :: ([Pattern]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn77 #-}-happyOut77 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Pattern])-happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut77 #-}-happyIn78 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn78 #-}-happyOut78 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Expr])-happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut78 #-}-happyIn79 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn79 #-}-happyOut79 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Expr])-happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut79 #-}-happyIn80 :: (WhereClause) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn80 #-}-happyOut80 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (WhereClause)-happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut80 #-}-happyIn81 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn81 #-}-happyOut81 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Declaration])-happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut81 #-}-happyIn82 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn82 #-}-happyOut82 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Declaration])-happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut82 #-}-happyIn83 :: ([Arg Declaration]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn83 #-}-happyOut83 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Arg Declaration])-happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut83 #-}-happyIn84 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn84 #-}-happyOut84 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Declaration])-happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut84 #-}-happyIn85 :: (RHSOrTypeSigs) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn85 #-}-happyOut85 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (RHSOrTypeSigs)-happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut85 #-}-happyIn86 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn86 #-}-happyOut86 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut86 #-}-happyIn87 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn87 #-}-happyOut87 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut87 #-}-happyIn88 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn88 #-}-happyOut88 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut88 #-}-happyIn89 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn89 #-}-happyOut89 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut89 #-}-happyIn90 :: (Name) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn90 #-}-happyOut90 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Name)-happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut90 #-}-happyIn91 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn91 #-}-happyOut91 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut91 #-}-happyIn92 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn92 #-}-happyOut92 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Declaration])-happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut92 #-}-happyIn93 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn93 #-}-happyOut93 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut93 #-}-happyIn94 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn94 #-}-happyOut94 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut94 #-}-happyIn95 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn95 #-}-happyOut95 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut95 #-}-happyIn96 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn96 #-}-happyOut96 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut96 #-}-happyIn97 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn97 #-}-happyOut97 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut97 #-}-happyIn98 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn98 #-}-happyOut98 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut98 #-}-happyIn99 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn99 #-}-happyOut99 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut99 #-}-happyIn100 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn100 #-}-happyOut100 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut100 #-}-happyIn101 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn101 #-}-happyOut101 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut101 #-}-happyIn102 :: ([Arg Name]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn102 #-}-happyOut102 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Arg Name])-happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut102 #-}-happyIn103 :: ([RString]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn103 #-}-happyOut103 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([RString])-happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut103 #-}-happyIn104 :: ([NamedArg HoleName]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn104 #-}-happyOut104 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([NamedArg HoleName])-happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut104 #-}-happyIn105 :: (NamedArg HoleName) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn105 #-}-happyOut105 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (NamedArg HoleName)-happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut105 #-}-happyIn106 :: (HoleName) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn106 #-}-happyOut106 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (HoleName)-happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut106 #-}-happyIn107 :: (HoleName) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn107 #-}-happyOut107 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (HoleName)-happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut107 #-}-happyIn108 :: (RString) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn108 #-}-happyOut108 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (RString)-happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut108 #-}-happyIn109 :: (Maybe Range) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn109 #-}-happyOut109 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Maybe Range)-happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut109 #-}-happyIn110 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn110 #-}-happyOut110 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Declaration])-happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut110 #-}-happyIn111 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn111 #-}-happyOut111 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Expr])-happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut111 #-}-happyIn112 :: ([TypedBindings] -> Parser ModuleApplication) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn112 #-}-happyOut112 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([TypedBindings] -> Parser ModuleApplication)-happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut112 #-}-happyIn113 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn113 #-}-happyOut113 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut113 #-}-happyIn114 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn114 #-}-happyOut114 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut114 #-}-happyIn115 :: (Name) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn115 #-}-happyOut115 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Name)-happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut115 #-}-happyIn116 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn116 #-}-happyOut116 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Declaration])-happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut116 #-}-happyIn117 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn117 #-}-happyOut117 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Declaration)-happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut117 #-}-happyIn118 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn118 #-}-happyOut118 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut118 #-}-happyIn119 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn119 #-}-happyOut119 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut119 #-}-happyIn120 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn120 #-}-happyOut120 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut120 #-}-happyIn121 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn121 #-}-happyOut121 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut121 #-}-happyIn122 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn122 #-}-happyOut122 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut122 #-}-happyIn123 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn123 #-}-happyOut123 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut123 #-}-happyIn124 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn124 #-}-happyOut124 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut124 #-}-happyIn125 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn125 #-}-happyOut125 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut125 #-}-happyIn126 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn126 #-}-happyOut126 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut126 #-}-happyIn127 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn127 #-}-happyOut127 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut127 #-}-happyIn128 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn128 #-}-happyOut128 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut128 #-}-happyIn129 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn129 #-}-happyOut129 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut129 #-}-happyIn130 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn130 #-}-happyOut130 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut130 #-}-happyIn131 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn131 #-}-happyOut131 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut131 #-}-happyIn132 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn132 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn132 #-}-happyOut132 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut132 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut132 #-}-happyIn133 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn133 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn133 #-}-happyOut133 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut133 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut133 #-}-happyIn134 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn134 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn134 #-}-happyOut134 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut134 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut134 #-}-happyIn135 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn135 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn135 #-}-happyOut135 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Pragma)-happyOut135 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut135 #-}-happyIn136 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn136 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn136 #-}-happyOut136 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([TypeSignature])-happyOut136 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut136 #-}-happyIn137 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn137 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn137 #-}-happyOut137 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([TypeSignature])-happyOut137 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut137 #-}-happyIn138 :: ([Arg TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn138 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn138 #-}-happyOut138 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Arg TypeSignature])-happyOut138 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut138 #-}-happyIn139 :: ([Arg TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn139 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn139 #-}-happyOut139 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Arg TypeSignature])-happyOut139 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut139 #-}-happyIn140 :: ([Constructor]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn140 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn140 #-}-happyOut140 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Constructor])-happyOut140 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut140 #-}-happyIn141 :: ((Maybe (Ranged Induction), Maybe Name, [Declaration])) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn141 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn141 #-}-happyOut141 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ((Maybe (Ranged Induction), Maybe Name, [Declaration]))-happyOut141 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut141 #-}-happyIn142 :: (Ranged Induction) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn142 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn142 #-}-happyOut142 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Ranged Induction)-happyOut142 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut142 #-}-happyIn143 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn143 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn143 #-}-happyOut143 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Declaration])-happyOut143 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut143 #-}-happyIn144 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn144 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn144 #-}-happyOut144 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Declaration])-happyOut144 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut144 #-}-happyIn145 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn145 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn145 #-}-happyOut145 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Declaration])-happyOut145 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut145 #-}-happyIn146 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyIn146 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn146 #-}-happyOut146 :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> ([Declaration])-happyOut146 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut146 #-}-happyInTok :: (Token) -> (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75)-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn t11 t12 t13 t34 t37 t40 t41 t42 t46 t47 t75) -> (Token)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\x00\x00\xdf\x09\xa6\x06\x0a\x04\x00\x00\xd4\x04\x00\x00\x00\x00\x98\x06\x00\x00\x00\x00\x98\x06\x7b\x04\x9d\x06\x00\x00\x96\x06\xa7\x06\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x01\x00\x00\x00\x00\x92\x08\xdf\x09\xa2\x06\x00\x00\x0f\x04\x6b\x0f\x92\x06\x00\x00\x00\x00\x8c\x06\x8c\x06\x00\x00\xfa\x0a\x00\x00\xe3\x0a\x00\x00\x00\x00\x50\x02\xa4\x0a\x00\x00\x00\x00\x68\x0f\x86\x06\x45\x06\x79\x08\x00\x00\x7e\x06\x97\x06\x00\x00\x91\x06\xc9\x01\x8e\x06\x00\x00\x00\x00\x44\x02\x44\x02\x00\x00\x89\x06\x94\x06\x8a\x06\x59\x01\x88\x06\xc5\x06\x84\x06\x7c\x06\x0a\x04\x00\x00\x00\x00\x00\x00\x16\x05\xdf\x09\x00\x00\x83\x06\x00\x00\xe2\x0a\x65\x04\x3a\x03\xc2\x02\x00\x00\x3a\x08\xf9\x07\x9e\x09\x00\x00\x8d\x0a\xe0\x07\x45\x06\x9f\x07\xf8\x09\xf8\x09\xf8\x09\x7f\x06\x8d\x0a\x60\x07\x45\x06\x1f\x07\x79\x06\x6e\x06\xb5\x06\xb4\x06\xae\x06\x84\x05\xc7\x0a\x85\x09\x70\x06\xc7\x0a\x00\x00\x46\x09\xf8\x09\xf8\x09\x00\x00\x18\x02\xf8\x09\xf8\x09\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x09\xf8\x09\x2d\x09\x8d\x0a\x95\x06\x68\x06\x64\x04\x3c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x06\x5e\x06\x5e\x06\x62\x06\x5e\x01\x5e\x01\x5e\x01\x60\x06\x5b\x00\x60\x06\xb2\x00\x59\x06\x5d\x06\x5a\x06\x58\x06\x4e\x0a\x57\x06\x57\x06\x53\x06\x97\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\xff\x48\x06\x48\x06\x48\x06\x48\x06\x48\x06\x48\x06\x48\x06\x41\x06\x43\x06\x3e\x06\x3c\x06\x3a\x06\x34\x06\x2c\x06\x2c\x06\x2e\x06\x61\x06\x37\x0a\x38\x06\x7f\x01\x8c\x0a\x00\x00\x00\x00\x25\x06\x00\x00\x71\x0a\x3b\x03\x25\x06\x00\x00\x36\x0a\x36\x0a\x00\x00\x00\x00\xff\x00\x00\x00\x00\x00\xff\x00\xff\x00\x00\x00\xc7\x03\x36\x0a\x36\x0a\x00\x00\x00\x00\x00\x00\x84\x05\x00\x00\x00\x00\x0f\x00\x2d\x09\x2d\x09\x50\x06\xf8\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x09\xf8\x09\xf8\x09\xf8\x09\x22\x06\x31\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x2d\x09\x2d\x09\x2d\x09\x2d\x06\x1a\x06\x00\x00\x26\x06\x03\x06\xf8\x09\x0c\x06\x44\x02\x0b\x06\x08\x06\x44\x02\xff\x05\x30\x01\x0e\x06\x00\x00\xe2\x00\xd3\x00\x09\x06\x07\x06\xfb\x05\x00\x00\xf8\x09\xf8\x09\x00\x00\xf8\x09\xf8\x09\x1b\x0a\xfa\x05\x1b\x0a\xe0\x06\x9f\x06\xec\x08\x00\x00\x00\x00\xf4\x05\xfa\xff\x00\x00\x02\x04\x00\x00\x00\x00\xd3\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x08\x00\x00\x00\x00\xc3\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x31\x01\x4e\x00\x31\x01\xf8\x09\x00\x00\xf8\x09\xd3\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x05\xe3\x05\x00\x00\xd3\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x08\x00\x00\x00\x00\x00\x00\xd2\x00\xe0\x05\x00\x00\x2d\x08\xb9\x00\x2d\x08\xa3\x00\x00\x00\xc7\x03\xe6\x05\x00\x00\x3d\x00\x7e\x01\x07\x01\xd5\xff\xd5\xff\xd1\x00\x00\x00\x00\x00\x00\x00\xfe\x05\xeb\xff\x2d\x08\xc3\x02\x1b\x00\x04\x06\x00\x00\xd7\x05\xc2\x05\xd4\x05\x00\x00\x3d\x00\x69\x00\xf8\x09\x4a\x02\x00\x00\x00\x00\x00\x00\xce\x05\xb5\x00\xb5\x00\x00\x00\xd3\x08\xca\x05\xaf\x05\x00\x00\xba\x05\x00\x00\xb8\x05\xb5\x05\xad\x05\x00\x00\x00\x00\xb1\x05\x00\x00\x00\x00\xac\x05\xab\x05\xa3\x05\xa3\x05\x9f\x05\x9e\x05\x90\x05\x8e\x05\x8b\x05\x8b\x05\x82\x05\x81\x05\x80\x05\x7a\x05\x7b\x05\x79\x05\x00\x00\x78\x05\x6f\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x05\x7d\x05\x69\x05\x6b\x05\x71\x05\x57\x05\x00\x00\x57\x05\x1d\x00\x5b\x05\xd3\x08\x00\x00\x4f\x05\xd3\x08\x00\x00\xd3\x08\xef\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x59\x05\x00\x00\x53\x05\x44\x05\x00\x00\x4a\x05\x3c\x05\x02\x04\x3c\x05\x00\x00\xd5\xff\x39\x05\x2e\x05\xef\x00\x00\x00\x2e\x05\x2e\x05\x2e\x05\x2e\x05\x00\x00\xc7\x03\xd3\x08\x00\x00\x30\x05\xd3\x08\x00\x00\x30\x05\xd3\x08\x00\x00\x00\x00\x00\x00\x23\x04\x56\x05\x55\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x29\x05\x29\x05\x00\x00\x4d\x05\x00\x00\x00\x00\x0a\x00\x47\x05\x00\x00\x00\x00\x00\x00\x28\x05\xef\x00\x25\x05\xef\x00\xc7\x03\xc7\x03\x00\x00\x00\x00\x4b\x02\x1b\x00\x00\x00\x02\x04\xf2\xff\xf8\xff\xf2\xff\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x41\x05\x00\x00\xca\x03\x19\x05\x00\x00\x22\x05\xb5\x00\x00\x00\x20\x05\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x05\x00\x00\x00\x00\x00\x00\x00\x00\x14\x05\x00\x00\x0c\x05\x0e\x05\x04\x05\x00\x00\x00\x00\x3d\x00\x3d\x00\x10\x00\x00\x00\x03\x05\x00\x00\x07\x05\x00\x00\x00\x00\x12\x05\x00\x05\x00\x00\xf0\x04\xf0\x04\xeb\x04\xf4\x04\x10\x05\x00\x00\x00\x00\x87\x04\x1b\x00\x00\x00\x00\x00\xc3\x05\x00\x00\x00\x00\xc7\x03\xc7\x03\xc7\x03\xc7\x03\x7d\x04\x00\x00\x7d\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x00\x00\x00\x00\x00\x7a\x04\x7a\x04\xb5\x04\x00\x00\x00\x00\x00\x00\x00\x00\xf2\xff\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x05\x00\x00\x84\x05\x78\x04\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x3d\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x05\x00\x00\x10\x00\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x52\x04\x7c\x0f\xc1\x04\x41\x04\xc0\x04\xbc\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x03\x60\x0f\x00\x00\x00\x00\xe3\x03\x03\x00\x35\x04\x00\x00\x00\x00\xaf\x04\xae\x04\x00\x00\xa5\x01\x00\x00\xf0\x06\x00\x00\x00\x00\x00\x00\xa4\x05\x00\x00\x00\x00\x70\x01\x0f\x01\x98\x0b\xd2\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x04\xa9\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x04\x39\x02\x00\x00\x00\x00\x00\x00\x43\x05\x44\x0f\x00\x00\x00\x00\x00\x00\x4b\x04\x00\x00\x17\x01\xf5\x00\x00\x00\x84\x01\x77\x07\x38\x0b\x00\x00\xa4\x05\x53\x0b\x75\x0b\xb5\x0b\xf7\x06\xc1\x0c\xa4\x0c\x00\x00\x5c\x06\x28\x0f\xdc\x0c\x0c\x0f\x00\x00\xb3\x00\x00\x00\x00\x00\x00\x00\x48\x03\x92\x04\xf0\x0e\x00\x00\x3a\x04\x00\x00\x84\x01\x9d\x0c\x80\x0c\x00\x00\x00\x00\x79\x0c\x5c\x0c\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x0e\xda\x02\xb8\x0e\x73\x01\x68\x04\x00\x00\x5c\x04\xa2\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x04\x8b\x04\x7c\x04\xfc\x03\x6f\x04\x66\x04\x5a\x04\xe4\x03\x1c\x00\xdd\x03\x39\x02\x51\x04\xc5\x03\xc1\x03\xa5\x03\xfa\x00\x22\x04\x1e\x04\xf6\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x04\x05\x04\xfe\x03\xf9\x03\xf0\x03\xe7\x03\xbb\x03\x00\x00\x00\x00\xb1\x03\x00\x00\x00\x00\x97\x03\x8e\x03\x7d\x03\x00\x00\x4c\x03\x1b\x06\x00\x00\xb1\x02\x7e\x05\x00\x00\x00\x00\x1e\x00\x00\x00\x7b\x00\x9d\x00\x81\x03\x00\x00\x26\x05\x75\x04\x00\x00\x00\x00\xe4\x01\x00\x00\x00\x00\xbf\x01\x86\x01\x00\x00\x18\x00\x71\x03\xf9\x02\x00\x00\x00\x00\x00\x00\xd0\x02\x00\x00\x00\x00\x38\x03\x9c\x0e\x80\x0e\x3c\x03\x62\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\xda\x05\x55\x0c\x38\x0c\x00\x00\x6e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x03\x64\x0e\x48\x0e\x2c\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\xe8\x01\x00\x00\x57\x03\x00\x00\x00\x00\x54\x03\x00\x00\x00\x00\x00\x00\x00\x00\x50\x03\x4e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x31\x0c\x14\x0c\x00\x00\x0d\x0c\x51\x08\x1d\x04\x00\x00\xe1\x03\x84\x01\x36\x07\xb6\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x01\x00\x00\x00\x00\x10\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x0d\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x03\x00\x00\x11\x03\x55\x06\x00\x00\x14\x06\xd8\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\xbc\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x0d\x00\x00\x00\x00\x00\x00\x19\x00\x76\x03\x00\x00\x81\x02\x00\x00\xe7\x01\x00\x00\x00\x00\x5d\x04\x00\x00\x00\x00\xaf\x03\x00\x00\x26\x03\x2c\x03\xf8\x02\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x01\x95\x00\xf1\x05\xdc\x0c\x00\x00\x00\x00\xa7\x03\x00\x00\x00\x00\xa6\x03\x00\x00\xef\x0b\x29\x03\x00\x00\x00\x00\x00\x00\x00\x00\x18\x03\x13\x03\x00\x00\x84\x0d\xc5\x02\xd7\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x02\xd1\x02\xc7\x02\xc6\x02\x00\x00\xc4\x02\x9e\x02\x8d\x02\x00\x00\x00\x00\x00\x00\x8e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x02\x00\x00\x00\x00\x08\x02\x00\x00\xb2\x01\x00\x00\xf6\x01\x68\x0d\x00\x00\x35\x00\x4c\x0d\x00\x00\x30\x0d\x64\x02\x00\x00\x00\x00\x31\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x02\x20\x00\xd5\x02\x00\x00\xb4\x02\x00\x00\x22\x02\x34\x02\x00\x00\x33\x03\x2a\x03\xf6\x02\xeb\x02\x00\x00\xb8\x00\x14\x0d\x00\x00\xed\x01\xf8\x0c\x00\x00\x98\x01\xda\x03\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x05\x00\x00\x5d\x02\x3c\x02\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x02\x00\x00\xca\x01\xe5\x03\x80\x02\x00\x00\x00\x00\x3b\x00\xb0\x05\x00\x00\xff\xff\xd7\x00\x51\x01\x99\x00\x00\x00\x7f\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xbc\x01\x00\x00\x00\x00\x57\x02\x00\x00\x00\x00\x46\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x01\x00\x00\x89\x01\x00\x00\x00\x00\x82\x02\x47\x02\x96\x01\x00\x00\x50\x01\x00\x00\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x01\x2a\x01\x00\x00\x00\x00\x00\x00\x1a\x01\x00\x00\x00\x00\x74\x05\x00\x00\x00\x00\xdc\x0c\x00\x00\x00\x00\x37\x02\x20\x02\x07\x02\xa3\x01\xf3\x00\x00\x00\x8c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x00\x00\x00\x00\x00\xf1\x00\x37\x00\x10\x01\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x01\x00\x00\x58\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x30\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x88\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\xf9\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xff\x7e\xff\x7d\xff\x00\x00\x96\xff\x7f\xff\x00\x00\xa3\xfe\x7e\xff\x58\xff\x00\x00\x6d\xff\x6c\xff\x6a\xff\x69\xff\x66\xff\x00\x00\x46\xff\x45\xff\x63\xff\x00\x00\x00\x00\x3e\xff\x3c\xff\x00\x00\x00\x00\x54\xff\x52\xff\x00\x00\x00\x00\x51\xff\x00\x00\x53\xff\x00\x00\x50\xff\x4f\xff\x00\x00\x00\x00\x55\xff\x56\xff\x00\x00\xa3\xfe\x00\x00\x00\x00\x57\xff\x00\x00\x00\x00\x78\xff\x00\x00\x77\xff\x00\x00\x59\xff\x4b\xff\x00\x00\x00\x00\x93\xff\x00\x00\x00\x00\x00\x00\x76\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa4\xfe\x4c\xff\x7c\xff\x0e\xff\x22\xff\x00\x00\x5d\xff\x00\x00\x2d\xff\x2a\xff\x23\xff\x00\x00\x00\x00\x7b\xff\xa3\xfe\x00\x00\x00\x00\x49\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\xff\x5c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x44\xff\x00\x00\x00\x00\x00\x00\xa3\xfe\x13\xff\x00\x00\x00\x00\x14\xff\x0f\xff\xa3\xfe\x00\x00\x00\x00\x3d\xff\x00\x00\x00\x00\x00\x00\x3f\xff\x70\xff\x68\xff\x5b\xff\x00\x00\x00\x00\x00\x00\x00\x00\xea\xfe\x00\x00\xcb\xfe\x5b\xfe\xe3\xfe\xe2\xfe\xe1\xfe\xe0\xfe\xdf\xfe\xde\xfe\xe4\xfe\xdd\xfe\xdc\xfe\xdb\xfe\xda\xfe\xd9\xfe\xd8\xfe\xd1\xfe\xd3\xfe\xd2\xfe\xd7\xfe\xd6\xfe\xd5\xfe\x9f\xff\xd4\xfe\x95\xfe\x84\xfe\x94\xfe\x93\xfe\x92\xfe\x91\xfe\x8f\xfe\x90\xfe\x8e\xfe\x8d\xfe\x8c\xfe\x89\xfe\x86\xfe\x87\xfe\x88\xfe\x85\xfe\x8b\xfe\x8a\xfe\x59\xfe\x96\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\xfe\x00\x00\xfa\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xf1\xff\xf0\xff\xef\xff\xee\xff\xed\xff\xec\xff\xeb\xff\xea\xff\xe9\xff\xe8\xff\xe7\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xe0\xff\xdf\xff\xde\xff\xdd\xff\xdc\xff\xdb\xff\xda\xff\xd9\xff\xd8\xff\xd7\xff\xd6\xff\xd5\xff\xd4\xff\xd3\xff\xd2\xff\xd1\xff\xd0\xff\xcf\xff\xce\xff\xcd\xff\xcc\xff\xcb\xff\xca\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xbb\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xb4\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\xae\xff\xad\xff\xac\xff\xab\xff\xaa\xff\xa9\xff\xa8\xff\xa7\xff\xa6\xff\xa5\xff\xa4\xff\xa3\xff\xa2\xff\xa1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\xff\x00\x00\x00\x00\x00\x00\xea\xfe\x00\x00\x00\x00\x00\x00\x10\xff\xbb\xfe\xb8\xfe\x00\x00\xb9\xfe\xb4\xfe\x9f\xfe\x00\x00\xbd\xfe\x10\xff\x10\xff\x97\xfe\xba\xfe\x00\x00\x97\xff\x98\xff\x00\x00\x00\x00\xbe\xfe\x00\x00\x10\xff\x10\xff\xbc\xfe\xa0\xff\x9e\xff\xa3\xfe\x9b\xff\x9a\xff\xe8\xfe\x00\x00\x00\x00\xec\xfe\x00\x00\x4a\xff\x6e\xff\x6b\xff\x6f\xff\x77\xff\x63\xff\x00\x00\x00\x00\x00\x00\x78\xff\x00\x00\x76\xff\x16\xff\x17\xff\x65\xff\x15\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\xff\x42\xff\x44\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\xff\x00\x00\x18\xff\x00\x00\x00\x00\x20\xff\x1f\xff\x21\xff\x0d\xff\x00\x00\x00\x00\x0c\xff\x00\x00\x00\x00\x29\xff\x25\xff\x2a\xff\xa3\xfe\x00\x00\x00\x00\x2e\xff\x67\xff\x24\xff\x00\x00\x32\xff\x00\x00\x35\xff\x4d\xff\x00\x00\x92\xff\x34\xff\x4e\xff\x33\xff\x5a\xff\x00\x00\x30\xff\x2f\xff\x9f\xfe\x31\xff\x27\xff\x26\xff\x28\xff\x2c\xff\x2b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\xff\x00\x00\x00\x00\x3b\xff\x39\xff\x3a\xff\x38\xff\x36\xff\x37\xff\x5f\xff\x00\x00\x00\x00\x48\xff\x00\x00\x62\xff\x61\xff\x64\xff\x5f\xfe\x9c\xff\x9d\xff\x0a\xff\x0b\xff\xe9\xfe\xf0\xfe\x00\x00\xcd\xfe\xcc\xfe\xce\xfe\x00\x00\x00\x00\x5c\xfe\x10\xff\x00\x00\x10\xff\x00\x00\x90\xff\x8c\xff\x00\x00\x6c\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\xff\xc1\xfe\xc0\xfe\xbf\xfe\x00\x00\x00\x00\x10\xff\x9f\xfe\x03\xff\x00\x00\xb3\xfe\x00\x00\x94\xff\x00\x00\x6f\xfe\x00\x00\x00\x00\x44\xff\x00\x00\xb0\xfe\xae\xfe\xa9\xfe\x00\x00\x00\x00\x00\x00\xa5\xfe\x00\x00\xee\xfe\xec\xfe\x75\xfe\x00\x00\x71\xff\x00\x00\x00\x00\x75\xff\x76\xfe\x77\xfe\x00\x00\x72\xff\x72\xfe\x00\x00\x00\x00\x75\xff\x75\xff\x00\x00\x75\xff\x00\x00\x75\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\xff\x00\x00\x00\x00\x73\xff\x00\x00\x00\x00\x78\xfe\x73\xfe\x74\xfe\x74\xff\x83\xfe\x80\xfe\x79\xfe\xef\xfe\xed\xfe\xb7\xfe\x00\x00\xa7\xfe\x00\x00\x00\x00\xa7\xfe\x00\x00\xaf\xfe\x00\x00\x7e\xff\x00\x00\x00\x00\x71\xfe\x00\x00\x00\x00\x95\xff\x00\x00\x00\x00\xa1\xfe\x05\xff\x03\xff\x01\xff\x00\xff\x00\x00\x02\xff\x00\x00\x00\x00\x9e\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x7a\xff\x8e\xff\x00\x00\x00\x00\x00\x00\x91\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6e\xfe\x00\x00\x00\x00\x8d\xff\x00\x00\x00\x00\x12\xff\x00\x00\x00\x00\x11\xff\x5d\xfe\xe7\xfe\x00\x00\x00\x00\x00\x00\xeb\xfe\x40\xff\x41\xff\x47\xff\x1e\xff\x1d\xff\x1c\xff\x1b\xff\x19\xff\x1a\xff\x08\xff\x09\xff\x06\xff\x07\xff\x03\xff\xa2\xfe\x00\x00\x00\x00\x5e\xfe\x00\x00\x6a\xfe\xc7\xfe\x00\x00\xc6\xfe\xc8\xfe\xcf\xfe\x6d\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xff\x88\xff\x8f\xff\x98\xfe\x9f\xfe\x03\xff\x99\xfe\x00\x00\xf4\xfe\x99\xff\xf4\xfe\x04\xff\x03\xff\xb5\xfe\xd0\xfe\x70\xfe\xc3\xfe\xc4\xfe\x00\x00\xb6\xfe\xb2\xfe\x00\x00\x00\x00\xac\xfe\x00\x00\x00\x00\xad\xfe\x7d\xfe\x7a\xfe\x7e\xfe\x7b\xfe\x00\x00\x7f\xfe\x81\xfe\x82\xfe\x7c\xfe\x00\x00\xa7\xfe\x00\x00\x00\x00\x00\x00\xb1\xfe\x69\xfe\x00\x00\x00\x00\x00\x00\x60\xfe\x00\x00\x61\xfe\x00\x00\xa0\xfe\xf6\xfe\xf2\xfe\x00\x00\xf3\xfe\x00\x00\x00\x00\x00\x00\xfa\xfe\x00\x00\x99\xff\xfc\xfe\x00\x00\x03\xff\x9b\xfe\x9c\xfe\x00\x00\x89\xff\x8b\xff\x84\xff\x86\xff\x80\xff\x82\xff\x00\x00\x6b\xfe\x00\x00\xe6\xfe\xe5\xfe\xc9\xfe\xca\xfe\x83\xff\x81\xff\x87\xff\x85\xff\x00\x00\x9a\xfe\xff\xfe\x00\x00\x00\x00\x99\xff\xfd\xfe\xf8\xfe\xf5\xfe\xfe\xfe\x00\x00\xc5\xfe\xc2\xfe\x66\xfe\x65\xfe\xa3\xfe\x68\xfe\xa3\xfe\x00\x00\xaa\xfe\xa6\xfe\xab\xfe\xa8\xfe\x00\x00\x00\x00\x00\x00\xf1\xfe\xfb\xfe\xf9\xfe\xf7\xfe\x9d\xfe\x62\xfe\x64\xfe\xa3\xfe\x67\xfe\x00\x00\x63\xfe"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x05\x00\x05\x00\x11\x00\x0a\x00\x09\x00\x09\x00\x0a\x00\x09\x00\x11\x00\x00\x00\x0f\x00\x09\x00\x81\x00\x0f\x00\x10\x00\x00\x00\x85\x00\x38\x00\x28\x00\x11\x00\x40\x00\x09\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x11\x00\x09\x00\x09\x00\x08\x00\x0c\x00\x09\x00\x0e\x00\x09\x00\x0a\x00\x09\x00\x55\x00\x0f\x00\x10\x00\x2a\x00\x43\x00\x0f\x00\x10\x00\x57\x00\x25\x00\x26\x00\x19\x00\x05\x00\x06\x00\x28\x00\x35\x00\x36\x00\x1f\x00\x38\x00\x39\x00\x00\x00\x09\x00\x0a\x00\x09\x00\x45\x00\x27\x00\x4b\x00\x09\x00\x4b\x00\x4a\x00\x55\x00\x4b\x00\x4d\x00\x0f\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\x51\x00\x21\x00\x22\x00\x23\x00\x55\x00\x43\x00\x51\x00\x66\x00\x67\x00\x4c\x00\x48\x00\x6a\x00\x6b\x00\x69\x00\x4b\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x05\x00\x41\x00\x82\x00\x4b\x00\x09\x00\x09\x00\x87\x00\x09\x00\x6c\x00\x8a\x00\x0f\x00\x6c\x00\x69\x00\x11\x00\x12\x00\x11\x00\x05\x00\x51\x00\x52\x00\x42\x00\x28\x00\x09\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x84\x00\x4f\x00\x09\x00\x44\x00\x82\x00\x09\x00\x09\x00\x68\x00\x0f\x00\x2a\x00\x09\x00\x0f\x00\x42\x00\x05\x00\x2f\x00\x42\x00\x0f\x00\x24\x00\x25\x00\x26\x00\x55\x00\x56\x00\x05\x00\x38\x00\x39\x00\x4f\x00\x21\x00\x22\x00\x23\x00\x21\x00\x22\x00\x23\x00\x09\x00\x45\x00\x21\x00\x22\x00\x23\x00\x09\x00\x4a\x00\x11\x00\x0c\x00\x4d\x00\x0e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x28\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x24\x00\x25\x00\x26\x00\x5f\x00\x42\x00\x43\x00\x44\x00\x66\x00\x67\x00\x09\x00\x28\x00\x6a\x00\x6b\x00\x09\x00\x42\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x09\x00\x42\x00\x47\x00\x68\x00\x09\x00\x0f\x00\x68\x00\x0b\x00\x8a\x00\x09\x00\x4c\x00\x68\x00\x11\x00\x55\x00\x56\x00\x0f\x00\x55\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x41\x00\x44\x00\x44\x00\x07\x00\x09\x00\x42\x00\x43\x00\x44\x00\x22\x00\x42\x00\x0f\x00\x44\x00\x09\x00\x07\x00\x4f\x00\x41\x00\x15\x00\x52\x00\x55\x00\x55\x00\x11\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x09\x00\x52\x00\x45\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x4a\x00\x2c\x00\x4d\x00\x4d\x00\x4f\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x44\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x3f\x00\x40\x00\x41\x00\x09\x00\x4c\x00\x55\x00\x4e\x00\x66\x00\x67\x00\x07\x00\x09\x00\x6a\x00\x6b\x00\x55\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x42\x00\x42\x00\x81\x00\x66\x00\x67\x00\x0f\x00\x85\x00\x09\x00\x8a\x00\x8b\x00\x09\x00\x41\x00\x4d\x00\x4f\x00\x4f\x00\x11\x00\x0f\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x86\x00\x09\x00\x52\x00\x09\x00\x3f\x00\x40\x00\x41\x00\x0f\x00\x21\x00\x22\x00\x23\x00\x11\x00\x12\x00\x15\x00\x2a\x00\x05\x00\x43\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x1d\x00\x1e\x00\x1f\x00\x4b\x00\x21\x00\x22\x00\x23\x00\x38\x00\x39\x00\x64\x00\x65\x00\x09\x00\x45\x00\x09\x00\x0c\x00\x2c\x00\x0e\x00\x4a\x00\x55\x00\x0f\x00\x4d\x00\x58\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\x22\x00\x09\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\x66\x00\x67\x00\x11\x00\x12\x00\x6a\x00\x6b\x00\x55\x00\x0b\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x66\x00\x67\x00\x09\x00\x09\x00\x65\x00\x0f\x00\x09\x00\x09\x00\x8a\x00\x09\x00\x11\x00\x11\x00\x12\x00\x0f\x00\x11\x00\x0f\x00\x10\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x43\x00\x2a\x00\x09\x00\x65\x00\x09\x00\x2a\x00\x60\x00\x0c\x00\x0f\x00\x0e\x00\x4d\x00\x65\x00\x4f\x00\x81\x00\x37\x00\x38\x00\x39\x00\x85\x00\x37\x00\x38\x00\x39\x00\x65\x00\x1d\x00\x1e\x00\x1f\x00\x45\x00\x21\x00\x22\x00\x23\x00\x09\x00\x4a\x00\x09\x00\x0c\x00\x4d\x00\x0e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x0b\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x0b\x00\x09\x00\x46\x00\x09\x00\x0c\x00\x49\x00\x0e\x00\x66\x00\x67\x00\x0f\x00\x10\x00\x6a\x00\x6b\x00\x05\x00\x06\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x4a\x00\x18\x00\x4c\x00\x1a\x00\x4e\x00\x0f\x00\x1d\x00\x1e\x00\x8a\x00\x09\x00\x21\x00\x65\x00\x81\x00\x0b\x00\x25\x00\x0f\x00\x85\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x86\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3b\x00\x05\x00\x06\x00\x09\x00\x09\x00\x40\x00\x0c\x00\x43\x00\x0e\x00\x44\x00\x45\x00\x4d\x00\x11\x00\x4f\x00\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\x4a\x00\x65\x00\x4c\x00\x45\x00\x4e\x00\x55\x00\x55\x00\x56\x00\x4a\x00\x58\x00\x16\x00\x4d\x00\x19\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x2a\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x19\x00\x37\x00\x38\x00\x39\x00\x64\x00\x65\x00\x09\x00\x66\x00\x67\x00\x0c\x00\x0d\x00\x6a\x00\x6b\x00\x88\x00\x89\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x16\x00\x18\x00\x16\x00\x1a\x00\x17\x00\x0f\x00\x1d\x00\x1e\x00\x8a\x00\x09\x00\x21\x00\x88\x00\x89\x00\x16\x00\x25\x00\x0f\x00\x16\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x09\x00\x0a\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3b\x00\x09\x00\x0a\x00\x09\x00\x09\x00\x40\x00\x0c\x00\x0d\x00\x44\x00\x44\x00\x45\x00\x16\x00\x11\x00\x46\x00\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\x61\x00\x62\x00\x63\x00\x45\x00\x65\x00\x55\x00\x55\x00\x56\x00\x4a\x00\x58\x00\x0b\x00\x4d\x00\x47\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x2a\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x09\x00\x37\x00\x38\x00\x39\x00\x09\x00\x0a\x00\x09\x00\x66\x00\x67\x00\x0c\x00\x0d\x00\x6a\x00\x6b\x00\x09\x00\x0a\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x0b\x00\x18\x00\x06\x00\x1a\x00\x06\x00\x0f\x00\x1d\x00\x1e\x00\x8a\x00\x09\x00\x21\x00\x88\x00\x89\x00\x0b\x00\x25\x00\x0f\x00\x0b\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x88\x00\x89\x00\x05\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3b\x00\x64\x00\x65\x00\x0b\x00\x09\x00\x40\x00\x64\x00\x65\x00\x44\x00\x44\x00\x45\x00\x49\x00\x11\x00\x47\x00\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\x09\x00\x62\x00\x63\x00\x45\x00\x65\x00\x55\x00\x55\x00\x56\x00\x4a\x00\x58\x00\x48\x00\x4d\x00\x19\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x2a\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x19\x00\x37\x00\x38\x00\x39\x00\x05\x00\x06\x00\x16\x00\x66\x00\x67\x00\x09\x00\x0a\x00\x6a\x00\x6b\x00\x05\x00\x06\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x18\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x8a\x00\x09\x00\x19\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\x09\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x09\x00\x21\x00\x22\x00\x23\x00\x09\x00\x25\x00\x26\x00\x0c\x00\x11\x00\x0e\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x88\x00\x89\x00\x19\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x3b\x00\x3f\x00\x40\x00\x3e\x00\x19\x00\x40\x00\x2a\x00\x29\x00\x2a\x00\x44\x00\x45\x00\x2f\x00\x47\x00\x19\x00\x4c\x00\x4a\x00\x4e\x00\x4c\x00\x19\x00\x4e\x00\x38\x00\x39\x00\x51\x00\x55\x00\x53\x00\x19\x00\x55\x00\x56\x00\x19\x00\x58\x00\x00\x00\x01\x00\x02\x00\x09\x00\x09\x00\x05\x00\x06\x00\x07\x00\x09\x00\x09\x00\x88\x00\x11\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\x46\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x81\x00\x09\x00\x21\x00\x22\x00\x23\x00\x2a\x00\x25\x00\x26\x00\x09\x00\x11\x00\x2f\x00\x88\x00\x3f\x00\x40\x00\x0f\x00\x10\x00\x00\x00\x01\x00\x09\x00\x38\x00\x39\x00\x55\x00\x56\x00\x4a\x00\x09\x00\x4c\x00\x11\x00\x4e\x00\x3b\x00\x55\x00\x56\x00\x3e\x00\x08\x00\x40\x00\x2a\x00\x88\x00\x09\x00\x44\x00\x45\x00\x0c\x00\x47\x00\x0e\x00\x88\x00\x4a\x00\x08\x00\x4c\x00\x36\x00\x4e\x00\x38\x00\x39\x00\x51\x00\x2a\x00\x53\x00\x08\x00\x55\x00\x56\x00\x2f\x00\x58\x00\x01\x00\x02\x00\x09\x00\x83\x00\x05\x00\x06\x00\x07\x00\x38\x00\x39\x00\x09\x00\x11\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\x09\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x88\x00\x09\x00\x21\x00\x22\x00\x23\x00\x2a\x00\x25\x00\x26\x00\x04\x00\x11\x00\x3f\x00\x40\x00\x42\x00\x43\x00\x06\x00\x44\x00\x4e\x00\x46\x00\x37\x00\x38\x00\x39\x00\x4a\x00\x48\x00\x4c\x00\x88\x00\x4e\x00\x0b\x00\x0b\x00\x3b\x00\x09\x00\x09\x00\x3e\x00\x55\x00\x40\x00\x2a\x00\x88\x00\x02\x00\x44\x00\x45\x00\x01\x00\x47\x00\x4b\x00\x03\x00\x4a\x00\x11\x00\x4c\x00\x36\x00\x4e\x00\x38\x00\x39\x00\x51\x00\x50\x00\x53\x00\x55\x00\x55\x00\x56\x00\x4b\x00\x58\x00\x59\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x01\x00\x02\x00\x09\x00\x04\x00\x05\x00\x06\x00\x07\x00\x24\x00\x41\x00\x4b\x00\x11\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\x55\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x4b\x00\x09\x00\x21\x00\x22\x00\x23\x00\x2a\x00\x25\x00\x26\x00\x41\x00\x11\x00\x3f\x00\x40\x00\x50\x00\x55\x00\x55\x00\x44\x00\x4d\x00\x46\x00\x37\x00\x38\x00\x39\x00\x4a\x00\x55\x00\x4c\x00\x4f\x00\x4e\x00\x54\x00\x46\x00\x3b\x00\x46\x00\x28\x00\x3e\x00\x55\x00\x40\x00\x2a\x00\x55\x00\x28\x00\x44\x00\x45\x00\x2f\x00\x47\x00\x4f\x00\x28\x00\x4a\x00\x4f\x00\x4c\x00\x50\x00\x4e\x00\x38\x00\x39\x00\x28\x00\x28\x00\x53\x00\x50\x00\x55\x00\x56\x00\x55\x00\x58\x00\x01\x00\x02\x00\x09\x00\x4f\x00\x05\x00\x06\x00\x07\x00\x50\x00\x43\x00\x4a\x00\x11\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\x4a\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x4a\x00\x55\x00\x21\x00\x22\x00\x23\x00\x2a\x00\x25\x00\x26\x00\x50\x00\x55\x00\x09\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x0f\x00\x43\x00\x37\x00\x38\x00\x39\x00\x4d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x55\x00\x3b\x00\x43\x00\x4f\x00\x3e\x00\x54\x00\x40\x00\x21\x00\x22\x00\x23\x00\x44\x00\x45\x00\x07\x00\x47\x00\x54\x00\x54\x00\x4a\x00\x54\x00\x4c\x00\x57\x00\x4e\x00\x10\x00\x54\x00\x54\x00\x54\x00\x53\x00\x29\x00\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x57\x00\x09\x00\x21\x00\x57\x00\x23\x00\x57\x00\x25\x00\x0f\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x15\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x57\x00\x57\x00\x1d\x00\x1e\x00\x1f\x00\x57\x00\x21\x00\x22\x00\x23\x00\x3b\x00\x54\x00\x54\x00\x3e\x00\x3f\x00\x40\x00\x57\x00\x54\x00\x2c\x00\x44\x00\x45\x00\x54\x00\x47\x00\x07\x00\x54\x00\x4a\x00\x54\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x49\x00\x10\x00\x47\x00\x42\x00\x55\x00\x55\x00\x56\x00\x43\x00\x58\x00\x18\x00\x09\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x09\x00\x21\x00\x28\x00\x23\x00\x42\x00\x25\x00\x0f\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x50\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x55\x00\x4f\x00\x46\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3b\x00\x46\x00\x46\x00\x3e\x00\x3f\x00\x40\x00\x31\x00\x32\x00\x33\x00\x44\x00\x45\x00\x4b\x00\x47\x00\x07\x00\x46\x00\x4a\x00\x46\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x46\x00\x10\x00\x4b\x00\x4f\x00\x55\x00\x55\x00\x56\x00\x4f\x00\x58\x00\x18\x00\x09\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x09\x00\x21\x00\x41\x00\x23\x00\x4f\x00\x25\x00\x0f\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x43\x00\x4f\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x29\x00\x55\x00\x43\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3b\x00\x20\x00\x54\x00\x57\x00\x3f\x00\x40\x00\x31\x00\x32\x00\x33\x00\x44\x00\x45\x00\x57\x00\x47\x00\x07\x00\x54\x00\x4a\x00\x54\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x57\x00\x10\x00\x54\x00\x57\x00\x13\x00\x55\x00\x56\x00\x49\x00\x58\x00\x18\x00\x57\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x51\x00\x07\x00\x21\x00\x50\x00\x23\x00\x50\x00\x25\x00\x55\x00\x50\x00\x55\x00\x10\x00\x50\x00\x49\x00\x50\x00\x55\x00\x50\x00\x20\x00\x46\x00\x18\x00\x0a\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0a\x00\x0a\x00\x21\x00\x3b\x00\x23\x00\x55\x00\x25\x00\x3f\x00\x40\x00\x4e\x00\x49\x00\x46\x00\x44\x00\x45\x00\x50\x00\x47\x00\x09\x00\x4b\x00\x4a\x00\x4b\x00\x4c\x00\x4b\x00\x4e\x00\x4b\x00\x42\x00\x59\x00\x4f\x00\x42\x00\x3b\x00\x55\x00\x56\x00\x4f\x00\x58\x00\x40\x00\x4f\x00\x55\x00\x50\x00\x44\x00\x45\x00\x48\x00\x47\x00\x07\x00\x46\x00\x4a\x00\x43\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x59\x00\x10\x00\x59\x00\xff\xff\x13\x00\x55\x00\x56\x00\x50\x00\x58\x00\x18\x00\x09\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x09\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\x2c\x00\x44\x00\x45\x00\x07\x00\x47\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\xff\xff\x4e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x09\x00\x21\x00\x0b\x00\x23\x00\xff\xff\x25\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x3b\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\x2b\x00\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\x07\x00\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x4f\x00\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x09\x00\x21\x00\x0b\x00\x23\x00\xff\xff\x25\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x3b\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\x2b\x00\xff\xff\x44\x00\x45\x00\x07\x00\x47\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\xff\xff\x4e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x09\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x3b\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\x2b\x00\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\x07\x00\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x4f\x00\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x07\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x3b\x00\x23\x00\xff\xff\x25\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x55\x00\x56\x00\xff\xff\x58\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\x07\x00\xff\xff\x4a\x00\xff\xff\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\x10\x00\xff\xff\xff\xff\x13\x00\x55\x00\x56\x00\xff\xff\x58\x00\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x09\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x40\x00\x1d\x00\x1e\x00\x1f\x00\x44\x00\x21\x00\x22\x00\x23\x00\x3b\x00\xff\xff\x4a\x00\xff\xff\x4c\x00\x40\x00\x4e\x00\x2b\x00\xff\xff\x44\x00\x45\x00\x07\x00\x47\x00\x55\x00\xff\xff\x4a\x00\x4b\x00\x4c\x00\xff\xff\x4e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x07\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x3b\x00\x23\x00\xff\xff\x25\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x55\x00\x56\x00\xff\xff\x58\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x07\x00\x49\x00\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x07\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x3b\x00\x23\x00\xff\xff\x25\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x55\x00\x56\x00\xff\xff\x58\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\x07\x00\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x4f\x00\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x07\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x3b\x00\x23\x00\xff\xff\x25\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x55\x00\x56\x00\xff\xff\x58\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x07\x00\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x07\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x3b\x00\x23\x00\xff\xff\x25\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x55\x00\x56\x00\xff\xff\x58\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\x07\x00\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x4f\x00\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x07\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x3b\x00\x23\x00\xff\xff\x25\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x55\x00\x56\x00\xff\xff\x58\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x3f\x00\x40\x00\x25\x00\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x18\x00\x4c\x00\x1a\x00\x4e\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x55\x00\xff\xff\x3b\x00\x25\x00\xff\xff\x3f\x00\x40\x00\x40\x00\xff\xff\xff\xff\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\x55\x00\x55\x00\x56\x00\x40\x00\x58\x00\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x3f\x00\x40\x00\x25\x00\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x18\x00\x4c\x00\x1a\x00\x4e\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x55\x00\xff\xff\x3b\x00\x25\x00\xff\xff\x3f\x00\x40\x00\x40\x00\xff\xff\xff\xff\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\x55\x00\x55\x00\x56\x00\x40\x00\x58\x00\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x3f\x00\x40\x00\x25\x00\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x18\x00\x4c\x00\x1a\x00\x4e\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x55\x00\xff\xff\x3b\x00\x25\x00\xff\xff\x3f\x00\x40\x00\x40\x00\xff\xff\xff\xff\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\x55\x00\x55\x00\x56\x00\x40\x00\x58\x00\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x09\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\x0f\x00\x4e\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\x31\x00\x32\x00\xff\xff\x34\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x09\x00\x2c\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\x09\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\x09\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\x09\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x09\x00\xff\xff\xff\xff\xff\xff\x2b\x00\xff\xff\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x3f\x00\x40\x00\xff\xff\x3f\x00\x40\x00\x44\x00\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\x4a\x00\x4e\x00\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\x55\x00\xff\xff\xff\xff\x55\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x90\x02\xb0\x02\x9e\x02\x5f\x01\x0d\x00\xd6\x01\xd7\x01\x06\x00\xa3\x02\xb1\x01\x0e\x00\x47\x00\x5b\x02\x07\x00\x6a\x02\xb1\x01\xb4\x02\xfb\x01\x2c\x02\x48\x00\x32\x02\x61\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\xbb\x01\xc1\x01\x45\x02\x26\x02\xc2\x01\x06\x00\xc3\x01\xd6\x01\xd7\x01\x06\x00\x0a\x00\x07\x00\x35\x01\x69\x00\x2d\x02\x07\x00\x6a\x02\xfc\x01\x49\x02\x64\x01\x27\x02\xda\x02\xdb\x02\xbc\x01\x6a\x00\x6b\x00\x28\x02\x6c\x00\x6d\x00\xb1\x01\xd6\x01\xd7\x01\xd6\x02\x7f\x00\x29\x02\xa4\x02\x0d\x00\x94\x01\x80\x00\x0a\x00\xd8\x01\x81\x00\x0e\x00\x82\x00\x83\x00\x84\x00\x85\x00\x91\x02\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xb2\x01\x16\x00\x17\x00\xd1\x01\x0a\x00\xac\x01\xb2\x01\x42\x00\x91\x00\xc4\x01\x7d\x00\x92\x00\x93\x00\xa5\x02\xd8\x01\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x59\x02\x47\x01\xd9\x01\x75\x02\x0d\x00\x47\x00\x92\x02\x47\x00\x46\x02\x93\x02\x0e\x00\x36\x01\x6b\x02\xca\x01\x2e\x02\x48\x00\xde\x02\xb2\x01\x48\x01\x90\x01\x19\x02\x61\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\xc5\x01\x53\x02\x0d\x00\x38\x01\xd9\x01\x0d\x00\x99\x02\xa7\x02\x0e\x00\x7b\x01\x0d\x00\x0e\x00\x90\x01\xd9\x02\xd4\x01\x1a\x02\x0e\x00\xa8\x01\x63\x01\x64\x01\x0a\x00\x0b\x00\xdc\x02\x7d\x01\x6d\x00\x55\x02\x16\x00\x17\x00\xd1\x01\x16\x00\x17\x00\xd1\x01\x61\x01\x7f\x00\x16\x00\x17\x00\xd1\x01\xc1\x01\x80\x00\x34\x01\xc2\x01\x81\x00\xc3\x01\x82\x00\x83\x00\x84\x00\x85\x00\x3d\x02\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x62\x01\x63\x01\x64\x01\xd5\x01\x9a\x02\x9b\x02\x9c\x02\x42\x00\x91\x00\x99\x02\x40\x02\x92\x00\x93\x00\x99\x02\x3e\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\xd7\x02\x41\x02\x12\x02\x29\x02\x47\x00\x0e\x00\x55\x02\xd8\x02\x5d\x01\x0d\x00\x61\x02\xd2\x01\x75\x01\x0a\x00\x0b\x00\x0e\x00\xe4\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x47\x01\x53\x00\x38\x01\x9e\x02\x0d\x00\x9a\x02\xa4\x02\x9c\x02\x2c\x01\x9a\x02\x0e\x00\xd4\x02\x47\x00\xbd\x02\x9f\x01\x47\x01\x3e\x00\x48\x01\x0a\x00\x0a\x00\x78\x01\x3f\x00\x10\x00\x11\x00\x40\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xc1\x02\x48\x01\x7f\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x80\x00\x41\x00\x3d\x00\x81\x00\x3e\x00\x82\x00\x83\x00\x84\x00\x85\x00\x53\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xd5\x02\xa0\x02\xa1\x02\xc2\x02\x35\x02\x0a\x00\x36\x02\x42\x00\x91\x00\x9e\x02\xc6\x02\x92\x00\x93\x00\x0a\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\x77\xff\x90\x01\x5b\x02\x42\x00\x43\x00\x0e\x00\xb5\x02\x47\x00\xa8\x00\xa9\x00\x0d\x00\x47\x01\x3d\x00\x77\xff\x3e\x00\x48\x00\x0e\x00\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\xc5\x02\x0d\x00\x48\x01\x47\x00\x9f\x02\xa0\x02\xa1\x02\x0e\x00\x16\x00\x17\x00\x4d\x01\xca\x01\xcb\x01\x3e\x00\x49\x00\xc7\x02\x6a\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x58\x01\x13\x00\x14\x00\x6a\xff\x16\x00\x17\x00\x52\x01\x4e\x00\x4f\x00\x8a\x02\x8b\x02\xc1\x01\x7f\x00\x0d\x00\xc2\x01\x41\x00\xb6\x02\x80\x00\x3b\x01\x0e\x00\x81\x00\x3c\x01\x82\x00\x83\x00\x84\x00\x85\x00\xd2\x02\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x63\x00\x47\x00\xe1\x01\x37\x02\xe2\x01\x38\x02\xe3\x01\x42\x00\x91\x00\xca\x01\xcc\x01\x92\x00\x93\x00\xe4\x01\xab\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\x42\x00\x43\x00\x47\x00\x47\x00\xcc\x02\x0e\x00\x47\x00\x0d\x00\xd3\x02\x06\x00\x48\x00\xca\x01\xcd\x01\x0e\x00\x48\x00\x07\x00\x92\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\xa7\x01\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x6a\xff\xbd\x01\x0d\x00\xce\x02\xc1\x01\xbd\x01\x79\x02\xc2\x01\x0e\x00\xb7\x02\x6a\xff\x7a\x02\x6a\xff\x5b\x02\x2a\x02\xbf\x01\x6d\x00\x5c\x02\x3e\x02\xbf\x01\x6d\x00\x8f\x02\x77\x00\x13\x00\x14\x00\x7f\x00\x16\x00\x17\x00\x52\x01\xc1\x01\x80\x00\x33\x02\xc2\x01\x81\x00\xb8\x02\x82\x00\x83\x00\x84\x00\x85\x00\xad\x02\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x66\x02\xc1\x01\x7a\x00\x06\x00\xc2\x01\x7b\x00\xb9\x02\x42\x00\x91\x00\x07\x00\x32\x01\x92\x00\x93\x00\xc8\x02\xc9\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\x54\x01\x20\x00\x55\x01\x21\x00\x56\x01\x0e\x00\x24\x00\x25\x00\xdd\x02\x0d\x00\x26\x00\x7b\x02\x5b\x02\x72\x02\x28\x00\x0e\x00\x5f\x02\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x77\x02\xb4\x01\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x29\x00\xca\x02\xcb\x02\xc1\x01\x47\x00\x58\x00\xc2\x01\x17\x02\xa9\x02\x2c\x00\x2d\x00\x3d\x00\x48\x00\x3e\x00\xe1\x01\x61\x00\xe2\x01\xa9\x02\xe3\x01\x63\x00\x5c\x00\x7e\x02\x5d\x00\x7f\x00\x5e\x00\xe4\x01\x0a\x00\x0b\x00\x80\x00\x32\x00\x85\x02\x81\x00\xfc\x01\x82\x00\x83\x00\x84\x00\x85\x00\xbd\x01\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xfd\x01\x41\x02\xbf\x01\x6d\x00\x8d\x02\x8b\x02\xc1\x01\x42\x00\x91\x00\x2f\x02\x68\x02\x92\x00\x93\x00\x42\x02\xb2\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\xfe\x01\x20\x00\x00\x02\x21\x00\x01\x02\x0e\x00\x24\x00\x25\x00\xd1\x02\x0d\x00\x26\x00\x42\x02\xb3\x02\x03\x02\x28\x00\x0e\x00\x04\x02\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\xd6\x01\x62\x02\x4f\x01\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x29\x00\xd6\x01\x63\x02\xc1\x01\x47\x00\x58\x00\x2f\x02\x30\x02\x53\x00\x2c\x00\x2d\x00\x08\x02\x48\x00\x0d\x02\x54\x01\x61\x00\x77\x01\x62\x00\x78\x01\x63\x00\xdc\x01\xdd\x01\xde\x01\x7f\x00\xdf\x01\x0a\x00\x0a\x00\x0b\x00\x80\x00\x32\x00\x51\x02\x81\x00\x0c\x02\x82\x00\x83\x00\x84\x00\x85\x00\xbd\x01\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x33\x02\xbe\x01\xbf\x01\x6d\x00\xd6\x01\x64\x02\xc1\x01\x42\x00\x91\x00\x2f\x02\x32\x02\x92\x00\x93\x00\xd6\x01\x65\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\x53\x02\x20\x00\x9d\x01\x21\x00\x9f\x01\x0e\x00\x24\x00\x25\x00\xbc\x01\x0d\x00\x26\x00\x42\x02\x69\x02\xa2\x01\x28\x00\x0e\x00\xa5\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x42\x02\x6c\x02\xaf\x01\x77\x00\x13\x00\x14\x00\x78\x00\x16\x00\x17\x00\x18\x00\x29\x00\x0f\x02\x10\x02\xb2\x01\x47\x00\x58\x00\x12\x02\x13\x02\x53\x00\x2c\x00\x2d\x00\xb9\x01\x48\x00\xb5\x01\x5c\x00\x61\x00\x7a\x01\xd4\x01\x7b\x01\x63\x00\xd0\x01\x15\x02\xde\x01\x7f\x00\xdf\x01\x0a\x00\x0a\x00\x0b\x00\x80\x00\x32\x00\xe6\x01\x81\x00\xe8\x01\x82\x00\x83\x00\x84\x00\x85\x00\xbd\x01\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xea\x01\xc0\x01\xbf\x01\x6d\x00\x1a\x02\x1b\x02\xeb\x01\x42\x00\x91\x00\xd6\x01\x1d\x02\x92\x00\x93\x00\x38\x02\x39\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xef\x01\xb1\x01\xab\x00\xac\x00\x95\x02\x96\x02\xad\x00\xae\x00\x1e\x00\x5d\x01\xa3\xfe\xf3\x01\x97\x02\xaf\x00\xb0\x00\xb1\x00\xb2\x00\x1f\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x0d\x00\x21\x00\x22\x00\x23\x00\x24\x00\xba\x00\x0e\x00\x47\x00\x26\x00\xbb\x00\x27\x00\xc1\x01\x28\x00\xbc\x00\xc2\x01\x48\x00\xaa\x02\x5a\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x42\x02\x43\x02\xf4\x01\x19\x00\x1a\x00\x1b\x00\x1c\x00\x29\x00\xc7\x01\xc8\x01\xbd\x00\xf5\x01\x58\x00\x7b\x01\x71\x00\x1c\x00\x2c\x00\x2d\x00\x97\x01\x2e\x00\xf6\x01\xc9\x01\x61\x00\xca\x01\x62\x00\xf7\x01\x63\x00\x7d\x01\x6d\x00\xb2\x01\x0a\x00\xbe\x00\xf8\x01\x0a\x00\x0b\x00\xf9\x01\x32\x00\xb1\x01\xab\x00\xac\x00\x47\x00\x2a\x01\xad\x00\xae\x00\x1e\x00\x2b\x01\xa3\xfe\x2d\x01\x48\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\x1f\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x28\x01\x21\x00\x22\x00\x23\x00\x24\x00\xba\x00\x2e\x01\x47\x00\x26\x00\xbb\x00\x27\x00\x7b\x01\x28\x00\xbc\x00\x06\x00\x48\x00\x98\x01\x30\x01\x2a\x00\x73\x00\x07\x00\x08\x00\x32\x00\x05\x00\x47\x00\x7d\x01\x6d\x00\x0a\x00\x0b\x00\x6f\x00\x31\x01\x74\x00\x48\x00\x75\x00\x29\x00\x0a\x00\x0b\x00\xbd\x00\x39\x01\x58\x00\x69\x00\x34\x01\xc1\x01\x2c\x00\x2d\x00\xc2\x01\x2e\x00\x3b\x02\x38\x01\x61\x00\x3c\x01\x62\x00\x59\x01\x63\x00\x6c\x00\x6d\x00\xb2\x01\x7b\x01\xbe\x00\x3d\x01\x0a\x00\x0b\x00\x7c\x01\x32\x00\xab\x00\xac\x00\x47\x00\x3e\x01\xad\x00\xae\x00\x1e\x00\x7d\x01\x6d\x00\x40\x01\x48\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\x1f\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x41\x01\x21\x00\x22\x00\x23\x00\x24\x00\xba\x00\x42\x01\x47\x00\x26\x00\xbb\x00\x27\x00\xbd\x01\x28\x00\xbc\x00\x43\x01\x48\x00\x0f\xff\x0f\xff\x4a\x01\x4b\x01\x45\x01\x0f\xff\x48\x01\x0f\xff\xce\x01\xbf\x01\x6d\x00\x0f\xff\x4b\x01\x0f\xff\x84\x01\x0f\xff\x8b\x01\x8c\x01\x29\x00\x65\x00\x66\x00\xbd\x00\x0f\xff\x58\x00\x69\x00\x67\x00\xbe\x00\x2c\x00\x2d\x00\x05\x00\x2e\x00\xd1\x02\x0b\x00\x61\x00\xa3\x02\x62\x00\x5c\x01\x63\x00\x6c\x00\x6d\x00\x5a\xfe\x5e\x02\xbe\x00\x0a\x00\x0a\x00\x0b\x00\xbd\x02\x32\x00\x5a\xfe\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\xab\x00\xac\x00\x47\x00\x96\x02\xad\x00\xae\x00\x1e\x00\xbf\x02\xc0\x02\xc1\x02\x48\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\x1f\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x0a\x00\x21\x00\x22\x00\x23\x00\x24\x00\xba\x00\xc4\x02\x47\x00\x26\x00\xbb\x00\x27\x00\xbd\x01\x28\x00\xbc\x00\xc5\x02\x48\x00\x51\x00\x52\x00\x79\x02\x0a\x00\xe4\x01\x53\x00\xce\x02\x29\xff\xcf\x01\xbf\x01\x6d\x00\x7f\x01\xe4\x01\x80\x01\xd0\x02\x81\x01\x8a\x02\x8d\x02\x29\x00\x8f\x02\x98\x02\xbd\x00\x0a\x00\x58\x00\x7b\x01\xe4\x01\xb0\x02\x2c\x00\x2d\x00\x83\x01\x2e\x00\xad\x02\xb2\x02\x61\x00\xaf\x02\x62\x00\x45\x02\x63\x00\x7d\x01\x6d\x00\x58\x02\x59\x02\xbe\x00\x5e\x02\x0a\x00\x0b\x00\x0a\x00\x32\x00\xab\x00\xac\x00\x47\x00\x68\x02\xad\x00\xae\x00\x1e\x00\x45\x02\x6e\x02\x6f\x02\x48\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\x1f\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x70\x02\x21\x00\x22\x00\x23\x00\x24\x00\xba\x00\x71\x02\x0a\x00\x26\x00\xbb\x00\x27\x00\xbd\x01\x28\x00\xbc\x00\x79\x02\xe4\x01\x0d\x00\xbb\x02\x21\x02\x22\x02\x23\x02\x24\x02\x0e\x00\x7d\x02\xda\x01\xbf\x01\x6d\x00\x7e\x02\x98\x02\x21\x02\x22\x02\x23\x02\x24\x02\xe4\x01\x29\x00\x80\x02\x81\x02\xbd\x00\x82\x02\x58\x00\x16\x00\x17\x00\x56\x00\x2c\x00\x2d\x00\x1e\x00\x2e\x00\x83\x02\x84\x02\x61\x00\x85\x02\x62\x00\xed\x01\x63\x00\x1f\x00\x87\x02\x88\x02\x89\x02\xbe\x00\xb7\x01\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\xea\x01\x0d\x00\x26\x00\xed\x01\x27\x00\x00\x02\x28\x00\x0e\x00\xa6\x02\x21\x02\x22\x02\x23\x02\x24\x02\x3e\x00\x56\x02\x21\x02\x22\x02\x23\x02\x24\x02\xed\x01\x03\x02\x58\x01\x13\x00\x14\x00\xed\x01\x16\x00\x17\x00\x52\x01\x29\x00\x06\x02\x07\x02\xbb\x02\x2a\x00\x2b\x00\xed\x01\x08\x02\x6c\x01\x2c\x00\x2d\x00\x0a\x02\x2e\x00\x1e\x00\x0b\x02\x2f\x00\x0c\x02\x30\x00\x3d\x00\x31\x00\x3e\x00\x2a\x01\x1f\x00\x15\x02\x1d\x02\x0a\x00\x0a\x00\x0b\x00\x1f\x02\x32\x00\x20\x00\x0d\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x0e\x00\x0d\x00\x26\x00\x2e\x02\x27\x00\x3b\x02\x28\x00\x0e\x00\x20\x02\x21\x02\x22\x02\x23\x02\x24\x02\x45\x02\x4c\x02\x13\x00\x14\x00\x6e\x01\x16\x00\x17\x00\x18\x00\x0a\x00\x4b\x02\x2b\xff\xe5\x01\x16\x00\x17\x00\x5f\x00\x29\x00\x2c\xff\x28\xff\x20\x02\x2a\x00\x2b\x00\x4d\x02\x4e\x02\x4f\x02\x2c\x00\x2d\x00\xa2\x01\x2e\x00\x1e\x00\x26\xff\x2f\x00\x27\xff\x30\x00\x3d\x00\x31\x00\x3e\x00\xa1\x01\x1f\x00\xa5\x01\xa4\x01\x0a\x00\x0a\x00\x0b\x00\xa7\x01\x32\x00\x20\x00\x0d\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x0e\x00\x0d\x00\x26\x00\xaa\x01\x27\x00\xab\x01\x28\x00\x0e\x00\x71\x02\x22\x02\x23\x02\x24\x02\xac\x01\xb4\x01\x4c\x02\x13\x00\x14\x00\x6e\x01\x16\x00\x17\x00\x18\x00\xb7\x01\x0a\x00\xe5\x01\x78\x00\x16\x00\x17\x00\x5f\x00\x29\x00\x4d\x01\xe8\x01\xea\x01\x2a\x00\x2b\x00\x4d\x02\x4e\x02\x50\x02\x2c\x00\x2d\x00\xed\x01\x2e\x00\x1e\x00\xee\x01\x2f\x00\xef\x01\x30\x00\x3d\x00\x31\x00\x3e\x00\xf1\x01\x45\x00\xf2\x01\xf3\x01\x46\x00\x0a\x00\x0b\x00\x2a\x01\x32\x00\x20\x00\xea\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x45\x01\x1e\x00\x26\x00\x69\x00\x27\x00\x30\x01\x28\x00\x0a\x00\x69\x00\x0a\x00\x1f\x00\x69\x00\x7b\x00\x40\x01\x0a\x00\x69\x00\x4d\x01\x5b\x01\x20\x00\x5f\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x60\x01\x61\x01\x26\x00\x29\x00\x27\x00\x0a\x00\x28\x00\x2a\x00\x2b\x00\x66\x01\x67\x01\x82\x01\x2c\x00\x2d\x00\x69\x00\x2e\x00\x87\x01\x86\x01\x2f\x00\x47\x00\x30\x00\x88\x01\x31\x00\x89\x01\x8a\x01\xff\xff\x8b\x01\x90\x01\x29\x00\x0a\x00\x0b\x00\x8e\x01\x32\x00\x58\x00\x8f\x01\x0a\x00\x69\x00\x2c\x00\x2d\x00\x7d\x00\x2e\x00\x1e\x00\x76\x00\x61\x00\x7c\x00\x62\x00\x3d\x00\x63\x00\x3e\x00\xff\xff\x45\x00\xff\xff\x00\x00\x46\x00\x0a\x00\x0b\x00\x0d\x00\x32\x00\x20\x00\x0d\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x0e\x00\x0d\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x16\x00\x17\x00\x5f\x00\x58\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x69\x01\x2c\x00\x2d\x00\x1e\x00\x2e\x00\x00\x00\x00\x00\x61\x00\x97\x01\x62\x00\x00\x00\x63\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x0d\x00\x26\x00\x95\x01\x27\x00\x00\x00\x28\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x57\x01\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x29\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x3b\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x1e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x39\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x0d\x00\x26\x00\x73\x01\x27\x00\x00\x00\x28\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x57\x01\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x29\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x3b\x00\x00\x00\x2c\x00\x2d\x00\x1e\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x47\x00\x30\x00\x00\x00\x31\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x0d\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x56\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x29\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x37\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x1e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x39\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x1e\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x29\x00\x27\x00\x00\x00\x28\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x47\x00\x30\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x1e\x00\x00\x00\x61\x00\x00\x00\x62\x00\x3d\x00\x63\x00\x3e\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x0d\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x99\x01\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x52\x00\x51\x01\x13\x00\x14\x00\x53\x00\x16\x00\x17\x00\x52\x01\x29\x00\x00\x00\x6f\x00\x00\x00\x70\x00\x58\x00\x71\x00\x67\x01\x00\x00\x2c\x00\x2d\x00\x1e\x00\x2e\x00\x0a\x00\x00\x00\x61\x00\x75\x01\x62\x00\x00\x00\x63\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x1e\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x29\x00\x27\x00\x00\x00\x28\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x5c\xff\x2e\x00\x1e\x00\x5c\xff\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x1e\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x29\x00\x27\x00\x00\x00\x28\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x1e\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x95\x01\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x1e\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x29\x00\x27\x00\x00\x00\x28\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x1e\x00\x2e\x00\x00\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x1e\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x29\x00\x27\x00\x00\x00\x28\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x1e\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x73\x01\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x1e\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x29\x00\x27\x00\x00\x00\x28\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x51\x00\x52\x00\x28\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x20\x00\x80\x01\x21\x00\x81\x01\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x0a\x00\x00\x00\x29\x00\x28\x00\x00\x00\x51\x00\x52\x00\x58\x00\x00\x00\x00\x00\x53\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x61\x00\x70\x00\x62\x00\x71\x00\x63\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x0a\x00\x0a\x00\x0b\x00\x58\x00\x32\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x51\x00\x52\x00\x28\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x20\x00\x80\x01\x21\x00\x81\x01\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x0a\x00\x00\x00\x29\x00\x28\x00\x00\x00\x51\x00\x52\x00\x58\x00\x00\x00\x00\x00\x53\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x61\x00\x70\x00\x62\x00\xdc\x01\x63\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x0a\x00\x0a\x00\x0b\x00\x58\x00\x32\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x51\x00\x52\x00\x28\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x20\x00\x70\x00\x21\x00\x71\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x0a\x00\x00\x00\x29\x00\x28\x00\x00\x00\x51\x00\x52\x00\x58\x00\x00\x00\x00\x00\x53\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x61\x00\x80\x01\x62\x00\x81\x01\x63\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x0a\x00\x0a\x00\x0b\x00\x58\x00\x32\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x61\x00\x00\x00\x62\x00\x0e\x00\x65\x00\x00\x00\x00\x00\x33\x00\x56\x01\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x6d\x01\x13\x00\x14\x00\x6e\x01\x16\x00\x17\x00\x18\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x6f\x01\x70\x01\x00\x00\x71\x01\x3f\x00\x10\x00\x11\x00\x40\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0d\x00\x6c\x01\x39\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x10\x00\x11\x00\x36\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x6b\x01\x0d\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x10\x00\x11\x00\x36\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x0d\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x3b\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x10\x00\x11\x00\x36\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x0d\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x6a\x01\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x10\x00\x11\x00\x36\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x17\x02\x19\x00\x1a\x00\x1b\x00\x1c\x00\x37\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x56\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\xa8\x01\x63\x01\x64\x01\x0d\x00\x00\x00\x00\x00\x00\x00\x37\x00\x00\x00\x0e\x00\x0d\x00\x00\x00\x00\x00\x9a\x01\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x34\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x68\x01\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x01\x0e\x00\x0d\x00\x00\x00\x00\x00\x9c\x01\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x6b\x01\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x01\x0e\x00\x0d\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x6b\x01\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x0e\x00\x0d\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x56\x01\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x3b\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x0e\x00\x0d\x00\x00\x00\x00\x00\x57\x01\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x3b\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x01\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x0d\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x68\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x51\x00\x52\x00\x00\x00\x51\x00\x52\x00\x53\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x54\x00\x00\x00\x55\x00\x6f\x00\x56\x00\x70\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x0a\x00\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x1d\x01\x1e\x01\x1f\x01\x20\x01\x21\x01\x22\x01\x23\x01\x24\x01\x25\x01\x26\x01\x27\x01\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyReduceArr = Happy_Data_Array.array (4, 422) [- (4 , happyReduce_4),- (5 , happyReduce_5),- (6 , happyReduce_6),- (7 , happyReduce_7),- (8 , happyReduce_8),- (9 , happyReduce_9),- (10 , happyReduce_10),- (11 , happyReduce_11),- (12 , happyReduce_12),- (13 , happyReduce_13),- (14 , happyReduce_14),- (15 , happyReduce_15),- (16 , happyReduce_16),- (17 , happyReduce_17),- (18 , happyReduce_18),- (19 , happyReduce_19),- (20 , happyReduce_20),- (21 , happyReduce_21),- (22 , happyReduce_22),- (23 , happyReduce_23),- (24 , happyReduce_24),- (25 , happyReduce_25),- (26 , happyReduce_26),- (27 , happyReduce_27),- (28 , happyReduce_28),- (29 , happyReduce_29),- (30 , happyReduce_30),- (31 , happyReduce_31),- (32 , happyReduce_32),- (33 , happyReduce_33),- (34 , happyReduce_34),- (35 , happyReduce_35),- (36 , happyReduce_36),- (37 , happyReduce_37),- (38 , happyReduce_38),- (39 , happyReduce_39),- (40 , happyReduce_40),- (41 , happyReduce_41),- (42 , happyReduce_42),- (43 , happyReduce_43),- (44 , happyReduce_44),- (45 , happyReduce_45),- (46 , happyReduce_46),- (47 , happyReduce_47),- (48 , happyReduce_48),- (49 , happyReduce_49),- (50 , happyReduce_50),- (51 , happyReduce_51),- (52 , happyReduce_52),- (53 , happyReduce_53),- (54 , happyReduce_54),- (55 , happyReduce_55),- (56 , happyReduce_56),- (57 , happyReduce_57),- (58 , happyReduce_58),- (59 , happyReduce_59),- (60 , happyReduce_60),- (61 , happyReduce_61),- (62 , happyReduce_62),- (63 , happyReduce_63),- (64 , happyReduce_64),- (65 , happyReduce_65),- (66 , happyReduce_66),- (67 , happyReduce_67),- (68 , happyReduce_68),- (69 , happyReduce_69),- (70 , happyReduce_70),- (71 , happyReduce_71),- (72 , happyReduce_72),- (73 , happyReduce_73),- (74 , happyReduce_74),- (75 , happyReduce_75),- (76 , happyReduce_76),- (77 , happyReduce_77),- (78 , happyReduce_78),- (79 , happyReduce_79),- (80 , happyReduce_80),- (81 , happyReduce_81),- (82 , happyReduce_82),- (83 , happyReduce_83),- (84 , happyReduce_84),- (85 , happyReduce_85),- (86 , happyReduce_86),- (87 , happyReduce_87),- (88 , happyReduce_88),- (89 , happyReduce_89),- (90 , happyReduce_90),- (91 , happyReduce_91),- (92 , happyReduce_92),- (93 , happyReduce_93),- (94 , happyReduce_94),- (95 , happyReduce_95),- (96 , happyReduce_96),- (97 , happyReduce_97),- (98 , happyReduce_98),- (99 , happyReduce_99),- (100 , happyReduce_100),- (101 , happyReduce_101),- (102 , happyReduce_102),- (103 , happyReduce_103),- (104 , happyReduce_104),- (105 , happyReduce_105),- (106 , happyReduce_106),- (107 , happyReduce_107),- (108 , happyReduce_108),- (109 , happyReduce_109),- (110 , happyReduce_110),- (111 , happyReduce_111),- (112 , happyReduce_112),- (113 , happyReduce_113),- (114 , happyReduce_114),- (115 , happyReduce_115),- (116 , happyReduce_116),- (117 , happyReduce_117),- (118 , happyReduce_118),- (119 , happyReduce_119),- (120 , happyReduce_120),- (121 , happyReduce_121),- (122 , happyReduce_122),- (123 , happyReduce_123),- (124 , happyReduce_124),- (125 , happyReduce_125),- (126 , happyReduce_126),- (127 , happyReduce_127),- (128 , happyReduce_128),- (129 , happyReduce_129),- (130 , happyReduce_130),- (131 , happyReduce_131),- (132 , happyReduce_132),- (133 , happyReduce_133),- (134 , happyReduce_134),- (135 , happyReduce_135),- (136 , happyReduce_136),- (137 , happyReduce_137),- (138 , happyReduce_138),- (139 , happyReduce_139),- (140 , happyReduce_140),- (141 , happyReduce_141),- (142 , happyReduce_142),- (143 , happyReduce_143),- (144 , happyReduce_144),- (145 , happyReduce_145),- (146 , happyReduce_146),- (147 , happyReduce_147),- (148 , happyReduce_148),- (149 , happyReduce_149),- (150 , happyReduce_150),- (151 , happyReduce_151),- (152 , happyReduce_152),- (153 , happyReduce_153),- (154 , happyReduce_154),- (155 , happyReduce_155),- (156 , happyReduce_156),- (157 , happyReduce_157),- (158 , happyReduce_158),- (159 , happyReduce_159),- (160 , happyReduce_160),- (161 , happyReduce_161),- (162 , happyReduce_162),- (163 , happyReduce_163),- (164 , happyReduce_164),- (165 , happyReduce_165),- (166 , happyReduce_166),- (167 , happyReduce_167),- (168 , happyReduce_168),- (169 , happyReduce_169),- (170 , happyReduce_170),- (171 , happyReduce_171),- (172 , happyReduce_172),- (173 , happyReduce_173),- (174 , happyReduce_174),- (175 , happyReduce_175),- (176 , happyReduce_176),- (177 , happyReduce_177),- (178 , happyReduce_178),- (179 , happyReduce_179),- (180 , happyReduce_180),- (181 , happyReduce_181),- (182 , happyReduce_182),- (183 , happyReduce_183),- (184 , happyReduce_184),- (185 , happyReduce_185),- (186 , happyReduce_186),- (187 , happyReduce_187),- (188 , happyReduce_188),- (189 , happyReduce_189),- (190 , happyReduce_190),- (191 , happyReduce_191),- (192 , happyReduce_192),- (193 , happyReduce_193),- (194 , happyReduce_194),- (195 , happyReduce_195),- (196 , happyReduce_196),- (197 , happyReduce_197),- (198 , happyReduce_198),- (199 , happyReduce_199),- (200 , happyReduce_200),- (201 , happyReduce_201),- (202 , happyReduce_202),- (203 , happyReduce_203),- (204 , happyReduce_204),- (205 , happyReduce_205),- (206 , happyReduce_206),- (207 , happyReduce_207),- (208 , happyReduce_208),- (209 , happyReduce_209),- (210 , happyReduce_210),- (211 , happyReduce_211),- (212 , happyReduce_212),- (213 , happyReduce_213),- (214 , happyReduce_214),- (215 , happyReduce_215),- (216 , happyReduce_216),- (217 , happyReduce_217),- (218 , happyReduce_218),- (219 , happyReduce_219),- (220 , happyReduce_220),- (221 , happyReduce_221),- (222 , happyReduce_222),- (223 , happyReduce_223),- (224 , happyReduce_224),- (225 , happyReduce_225),- (226 , happyReduce_226),- (227 , happyReduce_227),- (228 , happyReduce_228),- (229 , happyReduce_229),- (230 , happyReduce_230),- (231 , happyReduce_231),- (232 , happyReduce_232),- (233 , happyReduce_233),- (234 , happyReduce_234),- (235 , happyReduce_235),- (236 , happyReduce_236),- (237 , happyReduce_237),- (238 , happyReduce_238),- (239 , happyReduce_239),- (240 , happyReduce_240),- (241 , happyReduce_241),- (242 , happyReduce_242),- (243 , happyReduce_243),- (244 , happyReduce_244),- (245 , happyReduce_245),- (246 , happyReduce_246),- (247 , happyReduce_247),- (248 , happyReduce_248),- (249 , happyReduce_249),- (250 , happyReduce_250),- (251 , happyReduce_251),- (252 , happyReduce_252),- (253 , happyReduce_253),- (254 , happyReduce_254),- (255 , happyReduce_255),- (256 , happyReduce_256),- (257 , happyReduce_257),- (258 , happyReduce_258),- (259 , happyReduce_259),- (260 , happyReduce_260),- (261 , happyReduce_261),- (262 , happyReduce_262),- (263 , happyReduce_263),- (264 , happyReduce_264),- (265 , happyReduce_265),- (266 , happyReduce_266),- (267 , happyReduce_267),- (268 , happyReduce_268),- (269 , happyReduce_269),- (270 , happyReduce_270),- (271 , happyReduce_271),- (272 , happyReduce_272),- (273 , happyReduce_273),- (274 , happyReduce_274),- (275 , happyReduce_275),- (276 , happyReduce_276),- (277 , happyReduce_277),- (278 , happyReduce_278),- (279 , happyReduce_279),- (280 , happyReduce_280),- (281 , happyReduce_281),- (282 , happyReduce_282),- (283 , happyReduce_283),- (284 , happyReduce_284),- (285 , happyReduce_285),- (286 , happyReduce_286),- (287 , happyReduce_287),- (288 , happyReduce_288),- (289 , happyReduce_289),- (290 , happyReduce_290),- (291 , happyReduce_291),- (292 , happyReduce_292),- (293 , happyReduce_293),- (294 , happyReduce_294),- (295 , happyReduce_295),- (296 , happyReduce_296),- (297 , happyReduce_297),- (298 , happyReduce_298),- (299 , happyReduce_299),- (300 , happyReduce_300),- (301 , happyReduce_301),- (302 , happyReduce_302),- (303 , happyReduce_303),- (304 , happyReduce_304),- (305 , happyReduce_305),- (306 , happyReduce_306),- (307 , happyReduce_307),- (308 , happyReduce_308),- (309 , happyReduce_309),- (310 , happyReduce_310),- (311 , happyReduce_311),- (312 , happyReduce_312),- (313 , happyReduce_313),- (314 , happyReduce_314),- (315 , happyReduce_315),- (316 , happyReduce_316),- (317 , happyReduce_317),- (318 , happyReduce_318),- (319 , happyReduce_319),- (320 , happyReduce_320),- (321 , happyReduce_321),- (322 , happyReduce_322),- (323 , happyReduce_323),- (324 , happyReduce_324),- (325 , happyReduce_325),- (326 , happyReduce_326),- (327 , happyReduce_327),- (328 , happyReduce_328),- (329 , happyReduce_329),- (330 , happyReduce_330),- (331 , happyReduce_331),- (332 , happyReduce_332),- (333 , happyReduce_333),- (334 , happyReduce_334),- (335 , happyReduce_335),- (336 , happyReduce_336),- (337 , happyReduce_337),- (338 , happyReduce_338),- (339 , happyReduce_339),- (340 , happyReduce_340),- (341 , happyReduce_341),- (342 , happyReduce_342),- (343 , happyReduce_343),- (344 , happyReduce_344),- (345 , happyReduce_345),- (346 , happyReduce_346),- (347 , happyReduce_347),- (348 , happyReduce_348),- (349 , happyReduce_349),- (350 , happyReduce_350),- (351 , happyReduce_351),- (352 , happyReduce_352),- (353 , happyReduce_353),- (354 , happyReduce_354),- (355 , happyReduce_355),- (356 , happyReduce_356),- (357 , happyReduce_357),- (358 , happyReduce_358),- (359 , happyReduce_359),- (360 , happyReduce_360),- (361 , happyReduce_361),- (362 , happyReduce_362),- (363 , happyReduce_363),- (364 , happyReduce_364),- (365 , happyReduce_365),- (366 , happyReduce_366),- (367 , happyReduce_367),- (368 , happyReduce_368),- (369 , happyReduce_369),- (370 , happyReduce_370),- (371 , happyReduce_371),- (372 , happyReduce_372),- (373 , happyReduce_373),- (374 , happyReduce_374),- (375 , happyReduce_375),- (376 , happyReduce_376),- (377 , happyReduce_377),- (378 , happyReduce_378),- (379 , happyReduce_379),- (380 , happyReduce_380),- (381 , happyReduce_381),- (382 , happyReduce_382),- (383 , happyReduce_383),- (384 , happyReduce_384),- (385 , happyReduce_385),- (386 , happyReduce_386),- (387 , happyReduce_387),- (388 , happyReduce_388),- (389 , happyReduce_389),- (390 , happyReduce_390),- (391 , happyReduce_391),- (392 , happyReduce_392),- (393 , happyReduce_393),- (394 , happyReduce_394),- (395 , happyReduce_395),- (396 , happyReduce_396),- (397 , happyReduce_397),- (398 , happyReduce_398),- (399 , happyReduce_399),- (400 , happyReduce_400),- (401 , happyReduce_401),- (402 , happyReduce_402),- (403 , happyReduce_403),- (404 , happyReduce_404),- (405 , happyReduce_405),- (406 , happyReduce_406),- (407 , happyReduce_407),- (408 , happyReduce_408),- (409 , happyReduce_409),- (410 , happyReduce_410),- (411 , happyReduce_411),- (412 , happyReduce_412),- (413 , happyReduce_413),- (414 , happyReduce_414),- (415 , happyReduce_415),- (416 , happyReduce_416),- (417 , happyReduce_417),- (418 , happyReduce_418),- (419 , happyReduce_419),- (420 , happyReduce_420),- (421 , happyReduce_421),- (422 , happyReduce_422)- ]--happy_n_terms = 90 :: Int-happy_n_nonterms = 140 :: Int--happyReduce_4 = happySpecReduce_1 0# happyReduction_4-happyReduction_4 happy_x_1- = case happyOut8 happy_x_1 of { happy_var_1 -> - happyIn7- (reverse happy_var_1- )}--happyReduce_5 = happySpecReduce_2 1# happyReduction_5-happyReduction_5 happy_x_2- happy_x_1- = case happyOut8 happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_2 of { happy_var_2 -> - happyIn8- (happy_var_2 : happy_var_1- )}}--happyReduce_6 = happySpecReduce_0 1# happyReduction_6-happyReduction_6 = happyIn8- ([]- )--happyReduce_7 = happySpecReduce_1 2# happyReduction_7-happyReduction_7 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> - happyIn9- (TokKeyword KwAbstract happy_var_1- )}--happyReduce_8 = happySpecReduce_1 2# happyReduction_8-happyReduction_8 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> - happyIn9- (TokKeyword KwCoData happy_var_1- )}--happyReduce_9 = happySpecReduce_1 2# happyReduction_9-happyReduction_9 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCoInductive happy_var_1) -> - happyIn9- (TokKeyword KwCoInductive happy_var_1- )}--happyReduce_10 = happySpecReduce_1 2# happyReduction_10-happyReduction_10 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> - happyIn9- (TokKeyword KwConstructor happy_var_1- )}--happyReduce_11 = happySpecReduce_1 2# happyReduction_11-happyReduction_11 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> - happyIn9- (TokKeyword KwData happy_var_1- )}--happyReduce_12 = happySpecReduce_1 2# happyReduction_12-happyReduction_12 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> - happyIn9- (TokKeyword KwField happy_var_1- )}--happyReduce_13 = happySpecReduce_1 2# happyReduction_13-happyReduction_13 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> - happyIn9- (TokKeyword KwForall happy_var_1- )}--happyReduce_14 = happySpecReduce_1 2# happyReduction_14-happyReduction_14 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> - happyIn9- (TokKeyword KwHiding happy_var_1- )}--happyReduce_15 = happySpecReduce_1 2# happyReduction_15-happyReduction_15 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> - happyIn9- (TokKeyword KwImport happy_var_1- )}--happyReduce_16 = happySpecReduce_1 2# happyReduction_16-happyReduction_16 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> - happyIn9- (TokKeyword KwIn happy_var_1- )}--happyReduce_17 = happySpecReduce_1 2# happyReduction_17-happyReduction_17 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInductive happy_var_1) -> - happyIn9- (TokKeyword KwInductive happy_var_1- )}--happyReduce_18 = happySpecReduce_1 2# happyReduction_18-happyReduction_18 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> - happyIn9- (TokKeyword KwInfix happy_var_1- )}--happyReduce_19 = happySpecReduce_1 2# happyReduction_19-happyReduction_19 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> - happyIn9- (TokKeyword KwInfixL happy_var_1- )}--happyReduce_20 = happySpecReduce_1 2# happyReduction_20-happyReduction_20 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> - happyIn9- (TokKeyword KwInfixR happy_var_1- )}--happyReduce_21 = happySpecReduce_1 2# happyReduction_21-happyReduction_21 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInstance happy_var_1) -> - happyIn9- (TokKeyword KwInstance happy_var_1- )}--happyReduce_22 = happySpecReduce_1 2# happyReduction_22-happyReduction_22 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> - happyIn9- (TokKeyword KwLet happy_var_1- )}--happyReduce_23 = happySpecReduce_1 2# happyReduction_23-happyReduction_23 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> - happyIn9- (TokKeyword KwModule happy_var_1- )}--happyReduce_24 = happySpecReduce_1 2# happyReduction_24-happyReduction_24 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> - happyIn9- (TokKeyword KwMutual happy_var_1- )}--happyReduce_25 = happySpecReduce_1 2# happyReduction_25-happyReduction_25 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> - happyIn9- (TokKeyword KwOpen happy_var_1- )}--happyReduce_26 = happySpecReduce_1 2# happyReduction_26-happyReduction_26 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPatternSyn happy_var_1) -> - happyIn9- (TokKeyword KwPatternSyn happy_var_1- )}--happyReduce_27 = happySpecReduce_1 2# happyReduction_27-happyReduction_27 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> - happyIn9- (TokKeyword KwPostulate happy_var_1- )}--happyReduce_28 = happySpecReduce_1 2# happyReduction_28-happyReduction_28 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> - happyIn9- (TokKeyword KwPrimitive happy_var_1- )}--happyReduce_29 = happySpecReduce_1 2# happyReduction_29-happyReduction_29 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> - happyIn9- (TokKeyword KwPrivate happy_var_1- )}--happyReduce_30 = happySpecReduce_1 2# happyReduction_30-happyReduction_30 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> - happyIn9- (TokKeyword KwProp happy_var_1- )}--happyReduce_31 = happySpecReduce_1 2# happyReduction_31-happyReduction_31 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> - happyIn9- (TokKeyword KwPublic happy_var_1- )}--happyReduce_32 = happySpecReduce_1 2# happyReduction_32-happyReduction_32 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> - happyIn9- (TokKeyword KwQuote happy_var_1- )}--happyReduce_33 = happySpecReduce_1 2# happyReduction_33-happyReduction_33 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteContext happy_var_1) -> - happyIn9- (TokKeyword KwQuoteContext happy_var_1- )}--happyReduce_34 = happySpecReduce_1 2# happyReduction_34-happyReduction_34 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> - happyIn9- (TokKeyword KwQuoteGoal happy_var_1- )}--happyReduce_35 = happySpecReduce_1 2# happyReduction_35-happyReduction_35 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> - happyIn9- (TokKeyword KwQuoteTerm happy_var_1- )}--happyReduce_36 = happySpecReduce_1 2# happyReduction_36-happyReduction_36 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> - happyIn9- (TokKeyword KwRecord happy_var_1- )}--happyReduce_37 = happySpecReduce_1 2# happyReduction_37-happyReduction_37 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> - happyIn9- (TokKeyword KwRenaming happy_var_1- )}--happyReduce_38 = happySpecReduce_1 2# happyReduction_38-happyReduction_38 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> - happyIn9- (TokKeyword KwRewrite happy_var_1- )}--happyReduce_39 = happySpecReduce_1 2# happyReduction_39-happyReduction_39 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> - happyIn9- (TokKeyword KwSet happy_var_1- )}--happyReduce_40 = happySpecReduce_1 2# happyReduction_40-happyReduction_40 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwSyntax happy_var_1) -> - happyIn9- (TokKeyword KwSyntax happy_var_1- )}--happyReduce_41 = happySpecReduce_1 2# happyReduction_41-happyReduction_41 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> - happyIn9- (TokKeyword KwTactic happy_var_1- )}--happyReduce_42 = happySpecReduce_1 2# happyReduction_42-happyReduction_42 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> - happyIn9- (TokKeyword KwTo happy_var_1- )}--happyReduce_43 = happySpecReduce_1 2# happyReduction_43-happyReduction_43 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> - happyIn9- (TokKeyword KwUnquote happy_var_1- )}--happyReduce_44 = happySpecReduce_1 2# happyReduction_44-happyReduction_44 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDecl happy_var_1) -> - happyIn9- (TokKeyword KwUnquoteDecl happy_var_1- )}--happyReduce_45 = happySpecReduce_1 2# happyReduction_45-happyReduction_45 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> - happyIn9- (TokKeyword KwUsing happy_var_1- )}--happyReduce_46 = happySpecReduce_1 2# happyReduction_46-happyReduction_46 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> - happyIn9- (TokKeyword KwWhere happy_var_1- )}--happyReduce_47 = happySpecReduce_1 2# happyReduction_47-happyReduction_47 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> - happyIn9- (TokKeyword KwWith happy_var_1- )}--happyReduce_48 = happySpecReduce_1 2# happyReduction_48-happyReduction_48 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> - happyIn9- (TokKeyword KwBUILTIN happy_var_1- )}--happyReduce_49 = happySpecReduce_1 2# happyReduction_49-happyReduction_49 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> - happyIn9- (TokKeyword KwCOMPILED happy_var_1- )}--happyReduce_50 = happySpecReduce_1 2# happyReduction_50-happyReduction_50 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> - happyIn9- (TokKeyword KwCOMPILED_DATA happy_var_1- )}--happyReduce_51 = happySpecReduce_1 2# happyReduction_51-happyReduction_51 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EPIC happy_var_1) -> - happyIn9- (TokKeyword KwCOMPILED_EPIC happy_var_1- )}--happyReduce_52 = happySpecReduce_1 2# happyReduction_52-happyReduction_52 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EXPORT happy_var_1) -> - happyIn9- (TokKeyword KwCOMPILED_EXPORT happy_var_1- )}--happyReduce_53 = happySpecReduce_1 2# happyReduction_53-happyReduction_53 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_JS happy_var_1) -> - happyIn9- (TokKeyword KwCOMPILED_JS happy_var_1- )}--happyReduce_54 = happySpecReduce_1 2# happyReduction_54-happyReduction_54 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> - happyIn9- (TokKeyword KwCOMPILED_TYPE happy_var_1- )}--happyReduce_55 = happySpecReduce_1 2# happyReduction_55-happyReduction_55 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwETA happy_var_1) -> - happyIn9- (TokKeyword KwETA happy_var_1- )}--happyReduce_56 = happySpecReduce_1 2# happyReduction_56-happyReduction_56 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> - happyIn9- (TokKeyword KwIMPORT happy_var_1- )}--happyReduce_57 = happySpecReduce_1 2# happyReduction_57-happyReduction_57 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwIMPOSSIBLE happy_var_1) -> - happyIn9- (TokKeyword KwIMPOSSIBLE happy_var_1- )}--happyReduce_58 = happySpecReduce_1 2# happyReduction_58-happyReduction_58 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwMEASURE happy_var_1) -> - happyIn9- (TokKeyword KwMEASURE happy_var_1- )}--happyReduce_59 = happySpecReduce_1 2# happyReduction_59-happyReduction_59 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwNO_TERMINATION_CHECK happy_var_1) -> - happyIn9- (TokKeyword KwNO_TERMINATION_CHECK happy_var_1- )}--happyReduce_60 = happySpecReduce_1 2# happyReduction_60-happyReduction_60 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwNON_TERMINATING happy_var_1) -> - happyIn9- (TokKeyword KwNON_TERMINATING happy_var_1- )}--happyReduce_61 = happySpecReduce_1 2# happyReduction_61-happyReduction_61 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> - happyIn9- (TokKeyword KwOPTIONS happy_var_1- )}--happyReduce_62 = happySpecReduce_1 2# happyReduction_62-happyReduction_62 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwREWRITE happy_var_1) -> - happyIn9- (TokKeyword KwREWRITE happy_var_1- )}--happyReduce_63 = happySpecReduce_1 2# happyReduction_63-happyReduction_63 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwSTATIC happy_var_1) -> - happyIn9- (TokKeyword KwSTATIC happy_var_1- )}--happyReduce_64 = happySpecReduce_1 2# happyReduction_64-happyReduction_64 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwTERMINATING happy_var_1) -> - happyIn9- (TokKeyword KwTERMINATING happy_var_1- )}--happyReduce_65 = happySpecReduce_1 2# happyReduction_65-happyReduction_65 happy_x_1- = case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> - happyIn9- (TokSetN happy_var_1- )}--happyReduce_66 = happySpecReduce_1 2# happyReduction_66-happyReduction_66 happy_x_1- = case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> - happyIn9- (TokTeX happy_var_1- )}--happyReduce_67 = happySpecReduce_1 2# happyReduction_67-happyReduction_67 happy_x_1- = case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> - happyIn9- (TokComment happy_var_1- )}--happyReduce_68 = happySpecReduce_1 2# happyReduction_68-happyReduction_68 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> - happyIn9- (TokSymbol SymEllipsis happy_var_1- )}--happyReduce_69 = happySpecReduce_1 2# happyReduction_69-happyReduction_69 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymDotDot happy_var_1) -> - happyIn9- (TokSymbol SymDotDot happy_var_1- )}--happyReduce_70 = happySpecReduce_1 2# happyReduction_70-happyReduction_70 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> - happyIn9- (TokSymbol SymDot happy_var_1- )}--happyReduce_71 = happySpecReduce_1 2# happyReduction_71-happyReduction_71 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> - happyIn9- (TokSymbol SymSemi happy_var_1- )}--happyReduce_72 = happySpecReduce_1 2# happyReduction_72-happyReduction_72 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> - happyIn9- (TokSymbol SymColon happy_var_1- )}--happyReduce_73 = happySpecReduce_1 2# happyReduction_73-happyReduction_73 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> - happyIn9- (TokSymbol SymEqual happy_var_1- )}--happyReduce_74 = happySpecReduce_1 2# happyReduction_74-happyReduction_74 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> - happyIn9- (TokSymbol SymUnderscore happy_var_1- )}--happyReduce_75 = happySpecReduce_1 2# happyReduction_75-happyReduction_75 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> - happyIn9- (TokSymbol SymQuestionMark happy_var_1- )}--happyReduce_76 = happySpecReduce_1 2# happyReduction_76-happyReduction_76 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> - happyIn9- (TokSymbol SymArrow happy_var_1- )}--happyReduce_77 = happySpecReduce_1 2# happyReduction_77-happyReduction_77 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> - happyIn9- (TokSymbol SymLambda happy_var_1- )}--happyReduce_78 = happySpecReduce_1 2# happyReduction_78-happyReduction_78 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> - happyIn9- (TokSymbol SymAs happy_var_1- )}--happyReduce_79 = happySpecReduce_1 2# happyReduction_79-happyReduction_79 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> - happyIn9- (TokSymbol SymBar happy_var_1- )}--happyReduce_80 = happySpecReduce_1 2# happyReduction_80-happyReduction_80 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> - happyIn9- (TokSymbol SymOpenParen happy_var_1- )}--happyReduce_81 = happySpecReduce_1 2# happyReduction_81-happyReduction_81 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> - happyIn9- (TokSymbol SymCloseParen happy_var_1- )}--happyReduce_82 = happySpecReduce_1 2# happyReduction_82-happyReduction_82 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> - happyIn9- (TokSymbol SymDoubleOpenBrace happy_var_1- )}--happyReduce_83 = happySpecReduce_1 2# happyReduction_83-happyReduction_83 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> - happyIn9- (TokSymbol SymDoubleCloseBrace happy_var_1- )}--happyReduce_84 = happySpecReduce_1 2# happyReduction_84-happyReduction_84 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> - happyIn9- (TokSymbol SymOpenBrace happy_var_1- )}--happyReduce_85 = happySpecReduce_1 2# happyReduction_85-happyReduction_85 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> - happyIn9- (TokSymbol SymCloseBrace happy_var_1- )}--happyReduce_86 = happySpecReduce_1 2# happyReduction_86-happyReduction_86 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> - happyIn9- (TokSymbol SymOpenVirtualBrace happy_var_1- )}--happyReduce_87 = happySpecReduce_1 2# happyReduction_87-happyReduction_87 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> - happyIn9- (TokSymbol SymCloseVirtualBrace happy_var_1- )}--happyReduce_88 = happySpecReduce_1 2# happyReduction_88-happyReduction_88 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> - happyIn9- (TokSymbol SymVirtualSemi happy_var_1- )}--happyReduce_89 = happySpecReduce_1 2# happyReduction_89-happyReduction_89 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> - happyIn9- (TokSymbol SymOpenPragma happy_var_1- )}--happyReduce_90 = happySpecReduce_1 2# happyReduction_90-happyReduction_90 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> - happyIn9- (TokSymbol SymClosePragma happy_var_1- )}--happyReduce_91 = happySpecReduce_1 2# happyReduction_91-happyReduction_91 happy_x_1- = case happyOutTok happy_x_1 of { (TokId happy_var_1) -> - happyIn9- (TokId happy_var_1- )}--happyReduce_92 = happySpecReduce_1 2# happyReduction_92-happyReduction_92 happy_x_1- = case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> - happyIn9- (TokQId happy_var_1- )}--happyReduce_93 = happySpecReduce_1 2# happyReduction_93-happyReduction_93 happy_x_1- = case happyOutTok happy_x_1 of { (TokString happy_var_1) -> - happyIn9- (TokString happy_var_1- )}--happyReduce_94 = happySpecReduce_1 2# happyReduction_94-happyReduction_94 happy_x_1- = case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> - happyIn9- (TokLiteral happy_var_1- )}--happyReduce_95 = happySpecReduce_3 3# happyReduction_95-happyReduction_95 happy_x_3- happy_x_2- happy_x_1- = case happyOut116 happy_x_2 of { happy_var_2 -> - happyIn10- (takeOptionsPragmas happy_var_2- )}--happyReduce_96 = happySpecReduce_0 4# happyReduction_96-happyReduction_96 = happyIn11- (()- )--happyReduce_97 = happySpecReduce_1 4# happyReduction_97-happyReduction_97 happy_x_1- = happyIn11- (()- )--happyReduce_98 = happySpecReduce_1 5# happyReduction_98-happyReduction_98 happy_x_1- = happyIn12- (()- )--happyReduce_99 = happyMonadReduce 1# 5# happyReduction_99-happyReduction_99 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (( popContext)- ) (\r -> happyReturn (happyIn12 r))--happyReduce_100 = happySpecReduce_1 6# happyReduction_100-happyReduction_100 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> - happyIn13- (happy_var_1- )}--happyReduce_101 = happySpecReduce_1 6# happyReduction_101-happyReduction_101 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> - happyIn13- (happy_var_1- )}--happyReduce_102 = happyMonadReduce 0# 7# happyReduction_102-happyReduction_102 (happyRest) tk- = happyThen (( pushLexState imp_dir)- ) (\r -> happyReturn (happyIn14 r))--happyReduce_103 = happyMonadReduce 1# 8# happyReduction_103-happyReduction_103 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> - ( case happy_var_1 of {- LitInt _ i -> return i;- _ -> fail $ "Expected integer"- })}- ) (\r -> happyReturn (happyIn15 r))--happyReduce_104 = happyMonadReduce 1# 8# happyReduction_104-happyReduction_104 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> - ( case happy_var_1 of {- (_, s) -> case readM s of {- Right i -> return i;- Left (err :: String) -> fail $ "Expected integer"- }- })}- ) (\r -> happyReturn (happyIn15 r))--happyReduce_105 = happyMonadReduce 1# 9# happyReduction_105-happyReduction_105 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> - ( mkName happy_var_1)}- ) (\r -> happyReturn (happyIn16 r))--happyReduce_106 = happySpecReduce_2 10# happyReduction_106-happyReduction_106 happy_x_2- happy_x_1- = case happyOut16 happy_x_1 of { happy_var_1 -> - case happyOut17 happy_x_2 of { happy_var_2 -> - happyIn17- (happy_var_1 : happy_var_2- )}}--happyReduce_107 = happySpecReduce_1 10# happyReduction_107-happyReduction_107 happy_x_1- = case happyOut16 happy_x_1 of { happy_var_1 -> - happyIn17- ([happy_var_1]- )}--happyReduce_108 = happySpecReduce_1 11# happyReduction_108-happyReduction_108 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> - happyIn18- (getRange happy_var_1- )}--happyReduce_109 = happyMonadReduce 2# 11# happyReduction_109-happyReduction_109 (happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> - case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> - (- if posPos (fromJust (rEnd (getRange happy_var_2))) -- posPos (fromJust (rStart (getRange happy_var_1))) > 2- then parseErrorAt (fromJust (rStart (getRange happy_var_2)))- "Expecting '}}', found separated '}'s."- else return $ getRange (happy_var_1, happy_var_2))}}- ) (\r -> happyReturn (happyIn18 r))--happyReduce_110 = happySpecReduce_2 12# happyReduction_110-happyReduction_110 happy_x_2- happy_x_1- = case happyOut16 happy_x_2 of { happy_var_2 -> - happyIn19- (setRelevance Irrelevant $ defaultArg happy_var_2- )}--happyReduce_111 = happySpecReduce_1 12# happyReduction_111-happyReduction_111 happy_x_1- = case happyOut16 happy_x_1 of { happy_var_1 -> - happyIn19- (defaultArg happy_var_1- )}--happyReduce_112 = happySpecReduce_2 13# happyReduction_112-happyReduction_112 happy_x_2- happy_x_1- = case happyOut19 happy_x_1 of { happy_var_1 -> - case happyOut20 happy_x_2 of { happy_var_2 -> - happyIn20- (happy_var_1 : happy_var_2- )}}--happyReduce_113 = happySpecReduce_1 13# happyReduction_113-happyReduction_113 happy_x_1- = case happyOut19 happy_x_1 of { happy_var_1 -> - happyIn20- ([happy_var_1]- )}--happyReduce_114 = happySpecReduce_2 14# happyReduction_114-happyReduction_114 happy_x_2- happy_x_1- = case happyOut19 happy_x_1 of { happy_var_1 -> - case happyOut21 happy_x_2 of { happy_var_2 -> - happyIn21- (happy_var_1 : happy_var_2- )}}--happyReduce_115 = happySpecReduce_1 14# happyReduction_115-happyReduction_115 happy_x_1- = case happyOut19 happy_x_1 of { happy_var_1 -> - happyIn21- ([happy_var_1]- )}--happyReduce_116 = happyReduce 4# 14# happyReduction_116-happyReduction_116 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut20 happy_x_2 of { happy_var_2 -> - case happyOut21 happy_x_4 of { happy_var_4 -> - happyIn21- (map makeInstance happy_var_2 ++ happy_var_4- ) `HappyStk` happyRest}}--happyReduce_117 = happySpecReduce_3 14# happyReduction_117-happyReduction_117 happy_x_3- happy_x_2- happy_x_1- = case happyOut20 happy_x_2 of { happy_var_2 -> - happyIn21- (map makeInstance happy_var_2- )}--happyReduce_118 = happyReduce 4# 14# happyReduction_118-happyReduction_118 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut20 happy_x_2 of { happy_var_2 -> - case happyOut21 happy_x_4 of { happy_var_4 -> - happyIn21- (map hide happy_var_2 ++ happy_var_4- ) `HappyStk` happyRest}}--happyReduce_119 = happySpecReduce_3 14# happyReduction_119-happyReduction_119 happy_x_3- happy_x_2- happy_x_1- = case happyOut20 happy_x_2 of { happy_var_2 -> - happyIn21- (map hide happy_var_2- )}--happyReduce_120 = happyReduce 5# 14# happyReduction_120-happyReduction_120 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut17 happy_x_3 of { happy_var_3 -> - case happyOut21 happy_x_5 of { happy_var_5 -> - happyIn21- (map (hide . setRelevance Irrelevant . defaultArg) happy_var_3 ++ happy_var_5- ) `HappyStk` happyRest}}--happyReduce_121 = happyReduce 4# 14# happyReduction_121-happyReduction_121 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut17 happy_x_3 of { happy_var_3 -> - happyIn21- (map (hide . setRelevance Irrelevant . defaultArg) happy_var_3- ) `HappyStk` happyRest}--happyReduce_122 = happyReduce 5# 14# 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)- = case happyOut17 happy_x_3 of { happy_var_3 -> - case happyOut21 happy_x_5 of { happy_var_5 -> - happyIn21- (map (makeInstance . setRelevance Irrelevant . defaultArg) happy_var_3 ++ happy_var_5- ) `HappyStk` happyRest}}--happyReduce_123 = happyReduce 4# 14# happyReduction_123-happyReduction_123 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut17 happy_x_3 of { happy_var_3 -> - happyIn21- (map (makeInstance . setRelevance Irrelevant . defaultArg) happy_var_3- ) `HappyStk` happyRest}--happyReduce_124 = happyReduce 5# 14# 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 happyOut17 happy_x_3 of { happy_var_3 -> - case happyOut21 happy_x_5 of { happy_var_5 -> - happyIn21- (map (hide . setRelevance NonStrict . defaultArg) happy_var_3 ++ happy_var_5- ) `HappyStk` happyRest}}--happyReduce_125 = happyReduce 4# 14# happyReduction_125-happyReduction_125 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut17 happy_x_3 of { happy_var_3 -> - happyIn21- (map (hide . setRelevance NonStrict . defaultArg) happy_var_3- ) `HappyStk` happyRest}--happyReduce_126 = happyReduce 5# 14# happyReduction_126-happyReduction_126 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut17 happy_x_3 of { happy_var_3 -> - case happyOut21 happy_x_5 of { happy_var_5 -> - happyIn21- (map (makeInstance . setRelevance NonStrict . defaultArg) happy_var_3 ++ happy_var_5- ) `HappyStk` happyRest}}--happyReduce_127 = happyReduce 4# 14# happyReduction_127-happyReduction_127 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut17 happy_x_3 of { happy_var_3 -> - happyIn21- (map (makeInstance . setRelevance NonStrict . defaultArg) happy_var_3- ) `HappyStk` happyRest}--happyReduce_128 = happyMonadReduce 1# 15# happyReduction_128-happyReduction_128 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> - ( mkQName happy_var_1)}- ) (\r -> happyReturn (happyIn22 r))--happyReduce_129 = happySpecReduce_1 15# happyReduction_129-happyReduction_129 happy_x_1- = case happyOut16 happy_x_1 of { happy_var_1 -> - happyIn22- (QName happy_var_1- )}--happyReduce_130 = happySpecReduce_1 16# happyReduction_130-happyReduction_130 happy_x_1- = case happyOut22 happy_x_1 of { happy_var_1 -> - happyIn23- (happy_var_1- )}--happyReduce_131 = happySpecReduce_1 17# happyReduction_131-happyReduction_131 happy_x_1- = case happyOut16 happy_x_1 of { happy_var_1 -> - happyIn24- (happy_var_1- )}--happyReduce_132 = happySpecReduce_1 17# happyReduction_132-happyReduction_132 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> - happyIn24- (Name (getRange happy_var_1) [Hole]- )}--happyReduce_133 = happySpecReduce_2 18# happyReduction_133-happyReduction_133 happy_x_2- happy_x_1- = case happyOut24 happy_x_1 of { happy_var_1 -> - case happyOut25 happy_x_2 of { happy_var_2 -> - happyIn25- (happy_var_1 : happy_var_2- )}}--happyReduce_134 = happySpecReduce_1 18# happyReduction_134-happyReduction_134 happy_x_1- = case happyOut24 happy_x_1 of { happy_var_1 -> - happyIn25- ([happy_var_1]- )}--happyReduce_135 = happySpecReduce_1 19# happyReduction_135-happyReduction_135 happy_x_1- = case happyOut27 happy_x_1 of { happy_var_1 -> - happyIn26- (case happy_var_1 of- Left ns -> ns- Right _ -> fail $ "expected sequence of bound identifiers, not absurd pattern"- )}--happyReduce_136 = happyMonadReduce 1# 20# happyReduction_136-happyReduction_136 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut36 happy_x_1 of { happy_var_1 -> - (- let getName :: Expr -> Maybe Name- getName (Ident (QName x)) = Just x- getName (Underscore r _) = Just (Name r [Hole])- getName _ = Nothing-- isAbsurd :: Expr -> Bool- isAbsurd (Absurd _) = True- isAbsurd (HiddenArg _ (Named _ e)) = isAbsurd e- isAbsurd (InstanceArg _ (Named _ e)) = isAbsurd e- isAbsurd (Paren _ expr) = isAbsurd expr- isAbsurd (RawApp _ exprs) = any isAbsurd exprs- isAbsurd _ = False- in- if any isAbsurd happy_var_1 then return $ Right happy_var_1 else- case mapM getName happy_var_1 of- Just good -> return $ Left good- Nothing -> fail $ "expected sequence of bound identifiers")}- ) (\r -> happyReturn (happyIn27 r))--happyReduce_137 = happyMonadReduce 1# 21# happyReduction_137-happyReduction_137 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut36 happy_x_1 of { happy_var_1 -> - (- let -- interpret an expression as name- getName :: Expr -> Maybe Name- getName (Ident (QName x)) = Just x- getName (Underscore r _) = Just (Name r [Hole])- getName _ = Nothing-- getNames :: Expr -> Maybe [Name]- getNames (RawApp _ es) = mapM getName es- getNames e = singleton `fmap` getName e-- -- interpret an expression as name or list of hidden names- getName1 :: Expr -> Maybe [WithHiding Name]- getName1 (Ident (QName x)) = Just [WithHiding NotHidden x]- getName1 (Underscore r _) = Just [WithHiding NotHidden $ Name r [Hole]]- getName1 (HiddenArg _ (Named Nothing e))- = map (WithHiding Hidden) `fmap` getNames e- getName1 _ = Nothing-- in- case mapM getName1 happy_var_1 of- Just good -> return $ concat good- Nothing -> fail $ "expected sequence of possibly hidden bound identifiers")}- ) (\r -> happyReturn (happyIn28 r))--happyReduce_138 = happySpecReduce_0 22# happyReduction_138-happyReduction_138 = happyIn29- ([]- )--happyReduce_139 = happySpecReduce_2 22# happyReduction_139-happyReduction_139 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokString happy_var_1) -> - case happyOut29 happy_x_2 of { happy_var_2 -> - happyIn29- (snd happy_var_1 : happy_var_2- )}}--happyReduce_140 = happySpecReduce_1 23# happyReduction_140-happyReduction_140 happy_x_1- = case happyOutTok happy_x_1 of { (TokString happy_var_1) -> - happyIn30- (snd happy_var_1- )}--happyReduce_141 = happyMonadReduce 1# 24# happyReduction_141-happyReduction_141 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> - ( mkName happy_var_1)}- ) (\r -> happyReturn (happyIn31 r))--happyReduce_142 = happyMonadReduce 1# 25# happyReduction_142-happyReduction_142 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> - ( fmap QName (mkName happy_var_1))}- ) (\r -> happyReturn (happyIn32 r))--happyReduce_143 = happySpecReduce_2 26# happyReduction_143-happyReduction_143 happy_x_2- happy_x_1- = case happyOut46 happy_x_1 of { happy_var_1 -> - case happyOut33 happy_x_2 of { happy_var_2 -> - happyIn33- (Pi happy_var_1 happy_var_2- )}}--happyReduce_144 = happySpecReduce_3 26# happyReduction_144-happyReduction_144 happy_x_3- happy_x_2- happy_x_1- = case happyOut39 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (TokSymbol SymArrow happy_var_2) -> - case happyOut33 happy_x_3 of { happy_var_3 -> - happyIn33- (Fun (getRange (happy_var_1,happy_var_2,happy_var_3))- (RawApp (getRange happy_var_1) happy_var_1)- happy_var_3- )}}}--happyReduce_145 = happySpecReduce_3 26# happyReduction_145-happyReduction_145 happy_x_3- happy_x_2- happy_x_1- = case happyOut34 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (TokSymbol SymEqual happy_var_2) -> - case happyOut33 happy_x_3 of { happy_var_3 -> - happyIn33- (Equal (getRange (happy_var_1, happy_var_2, happy_var_3)) happy_var_1 happy_var_3- )}}}--happyReduce_146 = happySpecReduce_1 26# happyReduction_146-happyReduction_146 happy_x_1- = case happyOut34 happy_x_1 of { happy_var_1 -> - happyIn33- (happy_var_1- )}--happyReduce_147 = happyMonadReduce 1# 27# happyReduction_147-happyReduction_147 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut35 happy_x_1 of { happy_var_1 -> - ( case happy_var_1 of- { [e] -> return e- ; e : es -> return $ WithApp (fuseRange e es) e es- ; [] -> fail "impossible: empty with expressions"- })}- ) (\r -> happyReturn (happyIn34 r))--happyReduce_148 = happySpecReduce_3 28# happyReduction_148-happyReduction_148 happy_x_3- happy_x_2- happy_x_1- = case happyOut39 happy_x_1 of { happy_var_1 -> - case happyOut35 happy_x_3 of { happy_var_3 -> - happyIn35- (RawApp (getRange happy_var_1) happy_var_1 : happy_var_3- )}}--happyReduce_149 = happySpecReduce_1 28# happyReduction_149-happyReduction_149 happy_x_1- = case happyOut36 happy_x_1 of { happy_var_1 -> - happyIn35- ([RawApp (getRange happy_var_1) happy_var_1]- )}--happyReduce_150 = happySpecReduce_1 29# happyReduction_150-happyReduction_150 happy_x_1- = case happyOut37 happy_x_1 of { happy_var_1 -> - happyIn36- ([happy_var_1]- )}--happyReduce_151 = happySpecReduce_2 29# happyReduction_151-happyReduction_151 happy_x_2- happy_x_1- = case happyOut42 happy_x_1 of { happy_var_1 -> - case happyOut36 happy_x_2 of { happy_var_2 -> - happyIn36- (happy_var_1 : happy_var_2- )}}--happyReduce_152 = happySpecReduce_3 30# happyReduction_152-happyReduction_152 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> - case happyOut52 happy_x_2 of { happy_var_2 -> - case happyOut33 happy_x_3 of { happy_var_3 -> - happyIn37- (Lam (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2 happy_var_3- )}}}--happyReduce_153 = happySpecReduce_1 30# happyReduction_153-happyReduction_153 happy_x_1- = case happyOut38 happy_x_1 of { happy_var_1 -> - happyIn37- (happy_var_1- )}--happyReduce_154 = happySpecReduce_3 30# happyReduction_154-happyReduction_154 happy_x_3- happy_x_2- happy_x_1- = case happyOut60 happy_x_2 of { happy_var_2 -> - case happyOut33 happy_x_3 of { happy_var_3 -> - happyIn37- (forallPi happy_var_2 happy_var_3- )}}--happyReduce_155 = happyReduce 4# 30# happyReduction_155-happyReduction_155 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> - case happyOut143 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokKeyword KwIn happy_var_3) -> - case happyOut33 happy_x_4 of { happy_var_4 -> - happyIn37- (Let (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_4- ) `HappyStk` happyRest}}}}--happyReduce_156 = happySpecReduce_1 30# happyReduction_156-happyReduction_156 happy_x_1- = case happyOut42 happy_x_1 of { happy_var_1 -> - happyIn37- (happy_var_1- )}--happyReduce_157 = happyReduce 4# 30# happyReduction_157-happyReduction_157 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> - case happyOut16 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokKeyword KwIn happy_var_3) -> - case happyOut33 happy_x_4 of { happy_var_4 -> - happyIn37- (QuoteGoal (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_4- ) `HappyStk` happyRest}}}}--happyReduce_158 = happyReduce 4# 30# happyReduction_158-happyReduction_158 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteContext happy_var_1) -> - case happyOut16 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokKeyword KwIn happy_var_3) -> - case happyOut33 happy_x_4 of { happy_var_4 -> - happyIn37- (QuoteContext (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_4- ) `HappyStk` happyRest}}}}--happyReduce_159 = happySpecReduce_2 30# happyReduction_159-happyReduction_159 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> - case happyOut39 happy_x_2 of { happy_var_2 -> - happyIn37- (Tactic (getRange (happy_var_1, happy_var_2)) (RawApp (getRange happy_var_2) happy_var_2) []- )}}--happyReduce_160 = happyReduce 4# 30# happyReduction_160-happyReduction_160 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> - case happyOut39 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokSymbol SymBar happy_var_3) -> - case happyOut35 happy_x_4 of { happy_var_4 -> - happyIn37- (Tactic (getRange (happy_var_1, happy_var_2, happy_var_3, happy_var_4)) (RawApp (getRange happy_var_2) happy_var_2) happy_var_4- ) `HappyStk` happyRest}}}}--happyReduce_161 = happyReduce 4# 31# happyReduction_161-happyReduction_161 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> - case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> - case happyOut59 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> - happyIn38- (ExtendedLam (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) (reverse happy_var_3)- ) `HappyStk` happyRest}}}}--happyReduce_162 = happyMonadReduce 2# 31# happyReduction_162-happyReduction_162 (happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> - case happyOut53 happy_x_2 of { happy_var_2 -> - ( case happy_var_2 of- Left (bs, h) -> if null bs then return $ AbsurdLam r h else- return $ Lam r bs (AbsurdLam r h)- where r = fuseRange happy_var_1 bs- Right es -> do -- it is of the form @\ { p1 ... () }@- p <- exprToLHS (RawApp (getRange es) es);- return $ ExtendedLam (fuseRange happy_var_1 es)- [(p [] [], AbsurdRHS, NoWhere)])}}- ) (\r -> happyReturn (happyIn38 r))--happyReduce_163 = happySpecReduce_1 32# happyReduction_163-happyReduction_163 happy_x_1- = case happyOut42 happy_x_1 of { happy_var_1 -> - happyIn39- ([happy_var_1]- )}--happyReduce_164 = happySpecReduce_2 32# happyReduction_164-happyReduction_164 happy_x_2- happy_x_1- = case happyOut42 happy_x_1 of { happy_var_1 -> - case happyOut39 happy_x_2 of { happy_var_2 -> - happyIn39- (happy_var_1 : happy_var_2- )}}--happyReduce_165 = happySpecReduce_3 33# happyReduction_165-happyReduction_165 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> - case happyOut33 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> - happyIn40- (HiddenArg (getRange (happy_var_1,happy_var_2,happy_var_3)) (maybeNamed happy_var_2)- )}}}--happyReduce_166 = happySpecReduce_2 33# happyReduction_166-happyReduction_166 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> - case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> - happyIn40- (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r- )}}--happyReduce_167 = happySpecReduce_1 34# happyReduction_167-happyReduction_167 happy_x_1- = case happyOut22 happy_x_1 of { happy_var_1 -> - happyIn41- (Ident happy_var_1- )}--happyReduce_168 = happySpecReduce_1 34# happyReduction_168-happyReduction_168 happy_x_1- = case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> - happyIn41- (Lit happy_var_1- )}--happyReduce_169 = happySpecReduce_1 34# happyReduction_169-happyReduction_169 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> - happyIn41- (QuestionMark (getRange happy_var_1) Nothing- )}--happyReduce_170 = happySpecReduce_1 34# happyReduction_170-happyReduction_170 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> - happyIn41- (Underscore (getRange happy_var_1) Nothing- )}--happyReduce_171 = happySpecReduce_1 34# happyReduction_171-happyReduction_171 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> - happyIn41- (Prop (getRange happy_var_1)- )}--happyReduce_172 = happySpecReduce_1 34# happyReduction_172-happyReduction_172 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> - happyIn41- (Set (getRange happy_var_1)- )}--happyReduce_173 = happySpecReduce_1 34# happyReduction_173-happyReduction_173 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> - happyIn41- (Quote (getRange happy_var_1)- )}--happyReduce_174 = happySpecReduce_1 34# happyReduction_174-happyReduction_174 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> - happyIn41- (QuoteTerm (getRange happy_var_1)- )}--happyReduce_175 = happySpecReduce_1 34# happyReduction_175-happyReduction_175 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> - happyIn41- (Unquote (getRange happy_var_1)- )}--happyReduce_176 = happySpecReduce_1 34# happyReduction_176-happyReduction_176 happy_x_1- = case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> - happyIn41- (SetN (getRange (fst happy_var_1)) (snd happy_var_1)- )}--happyReduce_177 = happySpecReduce_3 34# happyReduction_177-happyReduction_177 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> - case happyOut33 happy_x_2 of { happy_var_2 -> - case happyOut18 happy_x_3 of { happy_var_3 -> - happyIn41- (InstanceArg (getRange (happy_var_1,happy_var_2,happy_var_3))- (maybeNamed happy_var_2)- )}}}--happyReduce_178 = happySpecReduce_3 34# happyReduction_178-happyReduction_178 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> - case happyOut33 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> - happyIn41- (Paren (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2- )}}}--happyReduce_179 = happySpecReduce_2 34# happyReduction_179-happyReduction_179 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> - case happyOutTok happy_x_2 of { (TokSymbol SymCloseParen happy_var_2) -> - happyIn41- (Absurd (fuseRange happy_var_1 happy_var_2)- )}}--happyReduce_180 = happySpecReduce_2 34# happyReduction_180-happyReduction_180 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> - case happyOut18 happy_x_2 of { happy_var_2 -> - happyIn41- (let r = fuseRange happy_var_1 happy_var_2 in InstanceArg r $ unnamed $ Absurd r- )}}--happyReduce_181 = happySpecReduce_3 34# happyReduction_181-happyReduction_181 happy_x_3- happy_x_2- happy_x_1- = case happyOut16 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (TokSymbol SymAs happy_var_2) -> - case happyOut42 happy_x_3 of { happy_var_3 -> - happyIn41- (As (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_1 happy_var_3- )}}}--happyReduce_182 = happySpecReduce_2 34# happyReduction_182-happyReduction_182 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> - case happyOut42 happy_x_2 of { happy_var_2 -> - happyIn41- (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2- )}}--happyReduce_183 = happyReduce 4# 34# happyReduction_183-happyReduction_183 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> - case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> - case happyOut43 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> - happyIn41- (Rec (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3- ) `HappyStk` happyRest}}}}--happyReduce_184 = happyReduce 5# 34# happyReduction_184-happyReduction_184 (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 { (TokKeyword KwRecord happy_var_1) -> - case happyOut41 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokSymbol SymOpenBrace happy_var_3) -> - case happyOut43 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> - happyIn41- (RecUpdate (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 happy_var_4- ) `HappyStk` happyRest}}}}}--happyReduce_185 = happySpecReduce_1 35# happyReduction_185-happyReduction_185 happy_x_1- = case happyOut40 happy_x_1 of { happy_var_1 -> - happyIn42- (happy_var_1- )}--happyReduce_186 = happySpecReduce_1 35# happyReduction_186-happyReduction_186 happy_x_1- = case happyOut41 happy_x_1 of { happy_var_1 -> - happyIn42- (happy_var_1- )}--happyReduce_187 = happySpecReduce_0 36# happyReduction_187-happyReduction_187 = happyIn43- ([]- )--happyReduce_188 = happySpecReduce_1 36# happyReduction_188-happyReduction_188 happy_x_1- = case happyOut44 happy_x_1 of { happy_var_1 -> - happyIn43- (happy_var_1- )}--happyReduce_189 = happySpecReduce_1 37# happyReduction_189-happyReduction_189 happy_x_1- = case happyOut45 happy_x_1 of { happy_var_1 -> - happyIn44- ([happy_var_1]- )}--happyReduce_190 = happySpecReduce_3 37# happyReduction_190-happyReduction_190 happy_x_3- happy_x_2- happy_x_1- = case happyOut45 happy_x_1 of { happy_var_1 -> - case happyOut44 happy_x_3 of { happy_var_3 -> - happyIn44- (happy_var_1 : happy_var_3- )}}--happyReduce_191 = happySpecReduce_3 38# happyReduction_191-happyReduction_191 happy_x_3- happy_x_2- happy_x_1- = case happyOut16 happy_x_1 of { happy_var_1 -> - case happyOut33 happy_x_3 of { happy_var_3 -> - happyIn45- ((happy_var_1, happy_var_3)- )}}--happyReduce_192 = happySpecReduce_2 39# happyReduction_192-happyReduction_192 happy_x_2- happy_x_1- = case happyOut47 happy_x_1 of { happy_var_1 -> - happyIn46- (happy_var_1- )}--happyReduce_193 = happySpecReduce_1 40# happyReduction_193-happyReduction_193 happy_x_1- = case happyOut48 happy_x_1 of { happy_var_1 -> - happyIn47- ({-TeleBind-} happy_var_1- )}--happyReduce_194 = happySpecReduce_2 41# happyReduction_194-happyReduction_194 happy_x_2- happy_x_1- = case happyOut49 happy_x_1 of { happy_var_1 -> - case happyOut48 happy_x_2 of { happy_var_2 -> - happyIn48- (happy_var_1 : happy_var_2- )}}--happyReduce_195 = happySpecReduce_1 41# happyReduction_195-happyReduction_195 happy_x_1- = case happyOut49 happy_x_1 of { happy_var_1 -> - happyIn48- ([happy_var_1]- )}--happyReduce_196 = happyReduce 4# 42# happyReduction_196-happyReduction_196 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> - case happyOut51 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> - happyIn49- (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $- setRelevance Irrelevant happy_var_3- ) `HappyStk` happyRest}}}--happyReduce_197 = happyReduce 4# 42# 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_2 of { (TokSymbol SymOpenBrace happy_var_2) -> - case happyOut50 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> - happyIn49- (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $- setHiding Hidden $- setRelevance Irrelevant happy_var_3- ) `HappyStk` happyRest}}}--happyReduce_198 = happyReduce 4# 42# happyReduction_198-happyReduction_198 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> - case happyOut50 happy_x_3 of { happy_var_3 -> - case happyOut18 happy_x_4 of { happy_var_4 -> - happyIn49- (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $- setHiding Instance $- setRelevance Irrelevant happy_var_3- ) `HappyStk` happyRest}}}--happyReduce_199 = happyReduce 4# 42# happyReduction_199-happyReduction_199 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> - case happyOut51 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> - happyIn49- (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $- setRelevance NonStrict happy_var_3- ) `HappyStk` happyRest}}}--happyReduce_200 = happyReduce 4# 42# happyReduction_200-happyReduction_200 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> - case happyOut50 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> - happyIn49- (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $- setHiding Hidden $- setRelevance NonStrict happy_var_3- ) `HappyStk` happyRest}}}--happyReduce_201 = happyReduce 4# 42# happyReduction_201-happyReduction_201 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> - case happyOut50 happy_x_3 of { happy_var_3 -> - case happyOut18 happy_x_4 of { happy_var_4 -> - happyIn49- (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $- setHiding Instance $- setRelevance NonStrict happy_var_3- ) `HappyStk` happyRest}}}--happyReduce_202 = happySpecReduce_3 42# happyReduction_202-happyReduction_202 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> - case happyOut51 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> - happyIn49- (setRange (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2- )}}}--happyReduce_203 = happySpecReduce_3 42# happyReduction_203-happyReduction_203 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> - case happyOut50 happy_x_2 of { happy_var_2 -> - case happyOut18 happy_x_3 of { happy_var_3 -> - happyIn49- (setRange (getRange (happy_var_1,happy_var_2,happy_var_3)) $- setHiding Instance happy_var_2- )}}}--happyReduce_204 = happySpecReduce_3 42# happyReduction_204-happyReduction_204 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> - case happyOut50 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> - happyIn49- (setRange (getRange (happy_var_1,happy_var_2,happy_var_3)) $- setHiding Hidden happy_var_2- )}}}--happyReduce_205 = happySpecReduce_3 42# happyReduction_205-happyReduction_205 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> - case happyOut110 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> - happyIn49- (tLet (getRange (happy_var_1,happy_var_3)) happy_var_2- )}}}--happyReduce_206 = happyReduce 4# 42# happyReduction_206-happyReduction_206 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> - case happyOut143 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> - happyIn49- (tLet (getRange (happy_var_1,happy_var_4)) happy_var_3- ) `HappyStk` happyRest}}}--happyReduce_207 = happySpecReduce_3 43# happyReduction_207-happyReduction_207 happy_x_3- happy_x_2- happy_x_1- = case happyOut26 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (TokSymbol SymColon happy_var_2) -> - case happyOut33 happy_x_3 of { happy_var_3 -> - happyIn50- (let r = getRange (happy_var_1,happy_var_2,happy_var_3) -- the range is approximate only for TypedBindings- in TypedBindings r $ defaultArg $ TBind r (map (pure . mkBoundName_) happy_var_1) happy_var_3- )}}}--happyReduce_208 = happySpecReduce_3 44# happyReduction_208-happyReduction_208 happy_x_3- happy_x_2- happy_x_1- = case happyOut28 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (TokSymbol SymColon happy_var_2) -> - case happyOut33 happy_x_3 of { happy_var_3 -> - happyIn51- (let r = getRange (happy_var_1,happy_var_2,happy_var_3) -- the range is approximate only for TypedBindings- in TypedBindings r $ defaultArg $ TBind r (map (fmap mkBoundName_) happy_var_1) happy_var_3- )}}}--happyReduce_209 = happyMonadReduce 2# 45# happyReduction_209-happyReduction_209 (happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut54 happy_x_1 of { happy_var_1 -> - (- case reverse happy_var_1 of- Left _ : _ -> parseError "Absurd lambda cannot have a body."- _ : _ -> return [ b | Right b <- happy_var_1 ]- [] -> parsePanic "Empty LamBinds")}- ) (\r -> happyReturn (happyIn52 r))--happyReduce_210 = happyMonadReduce 1# 46# happyReduction_210-happyReduction_210 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut55 happy_x_1 of { happy_var_1 -> - (- case happy_var_1 of- Left lb -> case reverse lb of- Right _ : _ -> parseError "Missing body for lambda"- Left h : _ -> return $ Left ([ b | Right b <- init lb], h)- _ -> parseError "Unsupported variant of lambda"- Right es -> return $ Right es)}- ) (\r -> happyReturn (happyIn53 r))--happyReduce_211 = happySpecReduce_2 47# happyReduction_211-happyReduction_211 happy_x_2- happy_x_1- = case happyOut63 happy_x_1 of { happy_var_1 -> - case happyOut54 happy_x_2 of { happy_var_2 -> - happyIn54- (map Right happy_var_1 ++ happy_var_2- )}}--happyReduce_212 = happySpecReduce_2 47# happyReduction_212-happyReduction_212 happy_x_2- happy_x_1- = case happyOut49 happy_x_1 of { happy_var_1 -> - case happyOut54 happy_x_2 of { happy_var_2 -> - happyIn54- (Right (DomainFull happy_var_1) : happy_var_2- )}}--happyReduce_213 = happySpecReduce_1 47# happyReduction_213-happyReduction_213 happy_x_1- = case happyOut63 happy_x_1 of { happy_var_1 -> - happyIn54- (map Right happy_var_1- )}--happyReduce_214 = happySpecReduce_1 47# happyReduction_214-happyReduction_214 happy_x_1- = case happyOut49 happy_x_1 of { happy_var_1 -> - happyIn54- ([Right $ DomainFull happy_var_1]- )}--happyReduce_215 = happySpecReduce_2 47# happyReduction_215-happyReduction_215 happy_x_2- happy_x_1- = happyIn54- ([Left NotHidden]- )--happyReduce_216 = happySpecReduce_2 47# happyReduction_216-happyReduction_216 happy_x_2- happy_x_1- = happyIn54- ([Left Hidden]- )--happyReduce_217 = happySpecReduce_2 47# happyReduction_217-happyReduction_217 happy_x_2- happy_x_1- = happyIn54- ([Left Instance]- )--happyReduce_218 = happySpecReduce_2 48# happyReduction_218-happyReduction_218 happy_x_2- happy_x_1- = case happyOut63 happy_x_1 of { happy_var_1 -> - case happyOut54 happy_x_2 of { happy_var_2 -> - happyIn55- (Left $ map Right happy_var_1 ++ happy_var_2- )}}--happyReduce_219 = happySpecReduce_2 48# happyReduction_219-happyReduction_219 happy_x_2- happy_x_1- = case happyOut49 happy_x_1 of { happy_var_1 -> - case happyOut54 happy_x_2 of { happy_var_2 -> - happyIn55- (Left $ Right (DomainFull happy_var_1) : happy_var_2- )}}--happyReduce_220 = happySpecReduce_1 48# happyReduction_220-happyReduction_220 happy_x_1- = case happyOut64 happy_x_1 of { happy_var_1 -> - happyIn55- (case happy_var_1 of- Left lb -> Left $ map Right lb- Right es -> Right es- )}--happyReduce_221 = happySpecReduce_1 48# happyReduction_221-happyReduction_221 happy_x_1- = case happyOut49 happy_x_1 of { happy_var_1 -> - happyIn55- (Left [Right $ DomainFull happy_var_1]- )}--happyReduce_222 = happySpecReduce_2 48# happyReduction_222-happyReduction_222 happy_x_2- happy_x_1- = happyIn55- (Left [Left NotHidden]- )--happyReduce_223 = happySpecReduce_2 48# happyReduction_223-happyReduction_223 happy_x_2- happy_x_1- = happyIn55- (Left [Left Hidden]- )--happyReduce_224 = happySpecReduce_2 48# happyReduction_224-happyReduction_224 happy_x_2- happy_x_1- = happyIn55- (Left [Left Instance]- )--happyReduce_225 = happyMonadReduce 3# 49# happyReduction_225-happyReduction_225 (happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut39 happy_x_1 of { happy_var_1 -> - case happyOut33 happy_x_3 of { happy_var_3 -> - ( do- p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1) ;- return (p [] [], RHS happy_var_3, NoWhere))}}- ) (\r -> happyReturn (happyIn56 r))--happyReduce_226 = happyMonadReduce 1# 50# happyReduction_226-happyReduction_226 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut36 happy_x_1 of { happy_var_1 -> - ( do- p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1);- return (p [] [], AbsurdRHS, NoWhere))}- ) (\r -> happyReturn (happyIn57 r))--happyReduce_227 = happySpecReduce_1 51# happyReduction_227-happyReduction_227 happy_x_1- = case happyOut56 happy_x_1 of { happy_var_1 -> - happyIn58- (happy_var_1- )}--happyReduce_228 = happySpecReduce_1 51# happyReduction_228-happyReduction_228 happy_x_1- = case happyOut57 happy_x_1 of { happy_var_1 -> - happyIn58- (happy_var_1- )}--happyReduce_229 = happySpecReduce_3 52# happyReduction_229-happyReduction_229 happy_x_3- happy_x_2- happy_x_1- = case happyOut59 happy_x_1 of { happy_var_1 -> - case happyOut58 happy_x_3 of { happy_var_3 -> - happyIn59- (happy_var_3 : happy_var_1- )}}--happyReduce_230 = happySpecReduce_3 52# happyReduction_230-happyReduction_230 happy_x_3- happy_x_2- happy_x_1- = case happyOut57 happy_x_1 of { happy_var_1 -> - case happyOut58 happy_x_3 of { happy_var_3 -> - happyIn59- ([happy_var_3, happy_var_1]- )}}--happyReduce_231 = happySpecReduce_1 52# happyReduction_231-happyReduction_231 happy_x_1- = case happyOut56 happy_x_1 of { happy_var_1 -> - happyIn59- ([happy_var_1]- )}--happyReduce_232 = happySpecReduce_2 53# happyReduction_232-happyReduction_232 happy_x_2- happy_x_1- = case happyOut61 happy_x_1 of { happy_var_1 -> - happyIn60- (happy_var_1- )}--happyReduce_233 = happySpecReduce_2 54# happyReduction_233-happyReduction_233 happy_x_2- happy_x_1- = case happyOut63 happy_x_1 of { happy_var_1 -> - case happyOut61 happy_x_2 of { happy_var_2 -> - happyIn61- (happy_var_1 ++ happy_var_2- )}}--happyReduce_234 = happySpecReduce_2 54# happyReduction_234-happyReduction_234 happy_x_2- happy_x_1- = case happyOut49 happy_x_1 of { happy_var_1 -> - case happyOut61 happy_x_2 of { happy_var_2 -> - happyIn61- (DomainFull happy_var_1 : happy_var_2- )}}--happyReduce_235 = happySpecReduce_1 54# happyReduction_235-happyReduction_235 happy_x_1- = case happyOut63 happy_x_1 of { happy_var_1 -> - happyIn61- (happy_var_1- )}--happyReduce_236 = happySpecReduce_1 54# happyReduction_236-happyReduction_236 happy_x_1- = case happyOut49 happy_x_1 of { happy_var_1 -> - happyIn61- ([DomainFull happy_var_1]- )}--happyReduce_237 = happySpecReduce_2 55# happyReduction_237-happyReduction_237 happy_x_2- happy_x_1- = case happyOut63 happy_x_1 of { happy_var_1 -> - case happyOut62 happy_x_2 of { happy_var_2 -> - happyIn62- (happy_var_1 ++ happy_var_2- )}}--happyReduce_238 = happySpecReduce_2 55# happyReduction_238-happyReduction_238 happy_x_2- happy_x_1- = case happyOut49 happy_x_1 of { happy_var_1 -> - case happyOut62 happy_x_2 of { happy_var_2 -> - happyIn62- (DomainFull happy_var_1 : happy_var_2- )}}--happyReduce_239 = happySpecReduce_0 55# happyReduction_239-happyReduction_239 = happyIn62- ([]- )--happyReduce_240 = happySpecReduce_1 56# happyReduction_240-happyReduction_240 happy_x_1- = case happyOut64 happy_x_1 of { happy_var_1 -> - happyIn63- (case happy_var_1 of- Left lbs -> lbs- Right _ -> fail "expected sequence of bound identifiers, not absurd pattern"- )}--happyReduce_241 = happySpecReduce_1 57# happyReduction_241-happyReduction_241 happy_x_1- = case happyOut24 happy_x_1 of { happy_var_1 -> - happyIn64- (Left [DomainFree defaultArgInfo $ mkBoundName_ happy_var_1]- )}--happyReduce_242 = happySpecReduce_2 57# happyReduction_242-happyReduction_242 happy_x_2- happy_x_1- = case happyOut24 happy_x_2 of { happy_var_2 -> - happyIn64- (Left [DomainFree (setRelevance Irrelevant $ defaultArgInfo) $ mkBoundName_ happy_var_2]- )}--happyReduce_243 = happySpecReduce_2 57# happyReduction_243-happyReduction_243 happy_x_2- happy_x_1- = case happyOut24 happy_x_2 of { happy_var_2 -> - happyIn64- (Left [DomainFree (setRelevance NonStrict $ defaultArgInfo) $ mkBoundName_ happy_var_2]- )}--happyReduce_244 = happySpecReduce_3 57# happyReduction_244-happyReduction_244 happy_x_3- happy_x_2- happy_x_1- = case happyOut27 happy_x_2 of { happy_var_2 -> - happyIn64- (either (Left . map (DomainFree (setHiding Hidden $ defaultArgInfo) . mkBoundName_)) Right happy_var_2- )}--happyReduce_245 = happySpecReduce_3 57# happyReduction_245-happyReduction_245 happy_x_3- happy_x_2- happy_x_1- = case happyOut26 happy_x_2 of { happy_var_2 -> - happyIn64- (Left $ map (DomainFree (setHiding Instance $ defaultArgInfo) . mkBoundName_) happy_var_2- )}--happyReduce_246 = happyReduce 4# 57# happyReduction_246-happyReduction_246 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut26 happy_x_3 of { happy_var_3 -> - happyIn64- (Left $ map (DomainFree (setHiding Hidden $ setRelevance Irrelevant $ defaultArgInfo) . mkBoundName_) happy_var_3- ) `HappyStk` happyRest}--happyReduce_247 = happyReduce 4# 57# happyReduction_247-happyReduction_247 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut26 happy_x_3 of { happy_var_3 -> - happyIn64- (Left $ map (DomainFree (setHiding Instance $ setRelevance Irrelevant $ defaultArgInfo) . mkBoundName_) happy_var_3- ) `HappyStk` happyRest}--happyReduce_248 = happyReduce 4# 57# happyReduction_248-happyReduction_248 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut26 happy_x_3 of { happy_var_3 -> - happyIn64- (Left $ map (DomainFree (setHiding Hidden $ setRelevance NonStrict $ defaultArgInfo) . mkBoundName_) happy_var_3- ) `HappyStk` happyRest}--happyReduce_249 = happyReduce 4# 57# happyReduction_249-happyReduction_249 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut26 happy_x_3 of { happy_var_3 -> - happyIn64- (Left $ map (DomainFree (setHiding Instance $ setRelevance NonStrict $ defaultArgInfo) . mkBoundName_) happy_var_3- ) `HappyStk` happyRest}--happyReduce_250 = happyMonadReduce 1# 58# happyReduction_250-happyReduction_250 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut66 happy_x_1 of { happy_var_1 -> - ( mergeImportDirectives happy_var_1)}- ) (\r -> happyReturn (happyIn65 r))--happyReduce_251 = happySpecReduce_2 59# happyReduction_251-happyReduction_251 happy_x_2- happy_x_1- = case happyOut67 happy_x_1 of { happy_var_1 -> - case happyOut66 happy_x_2 of { happy_var_2 -> - happyIn66- (happy_var_1 : happy_var_2- )}}--happyReduce_252 = happySpecReduce_0 59# happyReduction_252-happyReduction_252 = happyIn66- ([]- )--happyReduce_253 = happySpecReduce_1 60# happyReduction_253-happyReduction_253 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> - happyIn67- (defaultImportDir { importDirRange = getRange happy_var_1, publicOpen = True }- )}--happyReduce_254 = happySpecReduce_1 60# happyReduction_254-happyReduction_254 happy_x_1- = case happyOut68 happy_x_1 of { happy_var_1 -> - happyIn67- (defaultImportDir { importDirRange = snd happy_var_1, usingOrHiding = fst happy_var_1 }- )}--happyReduce_255 = happySpecReduce_1 60# happyReduction_255-happyReduction_255 happy_x_1- = case happyOut69 happy_x_1 of { happy_var_1 -> - happyIn67- (defaultImportDir { importDirRange = snd happy_var_1, renaming = fst happy_var_1 }- )}--happyReduce_256 = happyReduce 4# 61# 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 { (TokKeyword KwUsing happy_var_1) -> - case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> - case happyOut74 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> - happyIn68- ((Using happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))- ) `HappyStk` happyRest}}}}--happyReduce_257 = happyReduce 4# 61# happyReduction_257-happyReduction_257 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> - case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> - case happyOut74 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> - happyIn68- ((Hiding happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))- ) `HappyStk` happyRest}}}}--happyReduce_258 = happyReduce 4# 62# happyReduction_258-happyReduction_258 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> - case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> - case happyOut70 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> - happyIn69- ((happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))- ) `HappyStk` happyRest}}}}--happyReduce_259 = happySpecReduce_3 62# happyReduction_259-happyReduction_259 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> - case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> - case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> - happyIn69- (([] , getRange (happy_var_1,happy_var_2,happy_var_3))- )}}}--happyReduce_260 = happySpecReduce_3 63# happyReduction_260-happyReduction_260 happy_x_3- happy_x_2- happy_x_1- = case happyOut71 happy_x_1 of { happy_var_1 -> - case happyOut70 happy_x_3 of { happy_var_3 -> - happyIn70- (happy_var_1 : happy_var_3- )}}--happyReduce_261 = happySpecReduce_1 63# happyReduction_261-happyReduction_261 happy_x_1- = case happyOut71 happy_x_1 of { happy_var_1 -> - happyIn70- ([happy_var_1]- )}--happyReduce_262 = happySpecReduce_3 64# happyReduction_262-happyReduction_262 happy_x_3- happy_x_2- happy_x_1- = case happyOut72 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (TokKeyword KwTo happy_var_2) -> - case happyOut16 happy_x_3 of { happy_var_3 -> - happyIn71- (Renaming happy_var_1 happy_var_3 (getRange happy_var_2)- )}}}--happyReduce_263 = happySpecReduce_2 65# happyReduction_263-happyReduction_263 happy_x_2- happy_x_1- = case happyOut16 happy_x_2 of { happy_var_2 -> - happyIn72- (ImportedName happy_var_2- )}--happyReduce_264 = happySpecReduce_3 65# happyReduction_264-happyReduction_264 happy_x_3- happy_x_2- happy_x_1- = case happyOut16 happy_x_3 of { happy_var_3 -> - happyIn72- (ImportedModule happy_var_3- )}--happyReduce_265 = happySpecReduce_1 66# happyReduction_265-happyReduction_265 happy_x_1- = case happyOut16 happy_x_1 of { happy_var_1 -> - happyIn73- (ImportedName happy_var_1- )}--happyReduce_266 = happySpecReduce_2 66# happyReduction_266-happyReduction_266 happy_x_2- happy_x_1- = case happyOut16 happy_x_2 of { happy_var_2 -> - happyIn73- (ImportedModule happy_var_2- )}--happyReduce_267 = happySpecReduce_0 67# happyReduction_267-happyReduction_267 = happyIn74- ([]- )--happyReduce_268 = happySpecReduce_1 67# happyReduction_268-happyReduction_268 happy_x_1- = case happyOut75 happy_x_1 of { happy_var_1 -> - happyIn74- (happy_var_1- )}--happyReduce_269 = happySpecReduce_1 68# happyReduction_269-happyReduction_269 happy_x_1- = case happyOut73 happy_x_1 of { happy_var_1 -> - happyIn75- ([happy_var_1]- )}--happyReduce_270 = happySpecReduce_3 68# happyReduction_270-happyReduction_270 happy_x_3- happy_x_2- happy_x_1- = case happyOut73 happy_x_1 of { happy_var_1 -> - case happyOut75 happy_x_3 of { happy_var_3 -> - happyIn75- (happy_var_1 : happy_var_3- )}}--happyReduce_271 = happyMonadReduce 3# 69# happyReduction_271-happyReduction_271 (happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut34 happy_x_1 of { happy_var_1 -> - case happyOut79 happy_x_2 of { happy_var_2 -> - case happyOut78 happy_x_3 of { happy_var_3 -> - ( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2 happy_var_3))}}}- ) (\r -> happyReturn (happyIn76 r))--happyReduce_272 = happyReduce 4# 69# happyReduction_272-happyReduction_272 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> - case happyOut77 happy_x_2 of { happy_var_2 -> - case happyOut79 happy_x_3 of { happy_var_3 -> - case happyOut78 happy_x_4 of { happy_var_4 -> - happyIn76- (Ellipsis (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_3 happy_var_4- ) `HappyStk` happyRest}}}}--happyReduce_273 = happySpecReduce_0 70# happyReduction_273-happyReduction_273 = happyIn77- ([]- )--happyReduce_274 = happyMonadReduce 3# 70# happyReduction_274-happyReduction_274 (happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut39 happy_x_2 of { happy_var_2 -> - case happyOut77 happy_x_3 of { happy_var_3 -> - ( exprToPattern (RawApp (getRange happy_var_2) happy_var_2) >>= \p ->- return (p : happy_var_3))}}- ) (\r -> happyReturn (happyIn77 r))--happyReduce_275 = happySpecReduce_0 71# happyReduction_275-happyReduction_275 = happyIn78- ([]- )--happyReduce_276 = happySpecReduce_2 71# happyReduction_276-happyReduction_276 happy_x_2- happy_x_1- = case happyOut33 happy_x_2 of { happy_var_2 -> - happyIn78- (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }- )}--happyReduce_277 = happySpecReduce_0 72# happyReduction_277-happyReduction_277 = happyIn79- ([]- )--happyReduce_278 = happySpecReduce_2 72# happyReduction_278-happyReduction_278 happy_x_2- happy_x_1- = case happyOut34 happy_x_2 of { happy_var_2 -> - happyIn79- (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }- )}--happyReduce_279 = happySpecReduce_0 73# happyReduction_279-happyReduction_279 = happyIn80- (NoWhere- )--happyReduce_280 = happySpecReduce_2 73# happyReduction_280-happyReduction_280 happy_x_2- happy_x_1- = case happyOut144 happy_x_2 of { happy_var_2 -> - happyIn80- (AnyWhere happy_var_2- )}--happyReduce_281 = happyReduce 4# 73# happyReduction_281-happyReduction_281 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut16 happy_x_2 of { happy_var_2 -> - case happyOut144 happy_x_4 of { happy_var_4 -> - happyIn80- (SomeWhere happy_var_2 happy_var_4- ) `HappyStk` happyRest}}--happyReduce_282 = happyReduce 4# 73# happyReduction_282-happyReduction_282 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut115 happy_x_2 of { happy_var_2 -> - case happyOut144 happy_x_4 of { happy_var_4 -> - happyIn80- (SomeWhere happy_var_2 happy_var_4- ) `HappyStk` happyRest}}--happyReduce_283 = happySpecReduce_1 74# happyReduction_283-happyReduction_283 happy_x_1- = case happyOut92 happy_x_1 of { happy_var_1 -> - happyIn81- (happy_var_1- )}--happyReduce_284 = happySpecReduce_1 74# happyReduction_284-happyReduction_284 happy_x_1- = case happyOut84 happy_x_1 of { happy_var_1 -> - happyIn81- (happy_var_1- )}--happyReduce_285 = happySpecReduce_1 74# happyReduction_285-happyReduction_285 happy_x_1- = case happyOut86 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_286 = happySpecReduce_1 74# happyReduction_286-happyReduction_286 happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_287 = happySpecReduce_1 74# happyReduction_287-happyReduction_287 happy_x_1- = case happyOut88 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_288 = happySpecReduce_1 74# happyReduction_288-happyReduction_288 happy_x_1- = case happyOut89 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_289 = happySpecReduce_1 74# happyReduction_289-happyReduction_289 happy_x_1- = case happyOut91 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_290 = happySpecReduce_1 74# happyReduction_290-happyReduction_290 happy_x_1- = case happyOut93 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_291 = happySpecReduce_1 74# happyReduction_291-happyReduction_291 happy_x_1- = case happyOut94 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_292 = happySpecReduce_1 74# happyReduction_292-happyReduction_292 happy_x_1- = case happyOut95 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_293 = happySpecReduce_1 74# happyReduction_293-happyReduction_293 happy_x_1- = case happyOut96 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_294 = happySpecReduce_1 74# happyReduction_294-happyReduction_294 happy_x_1- = case happyOut97 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_295 = happySpecReduce_1 74# happyReduction_295-happyReduction_295 happy_x_1- = case happyOut98 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_296 = happySpecReduce_1 74# happyReduction_296-happyReduction_296 happy_x_1- = case happyOut110 happy_x_1 of { happy_var_1 -> - happyIn81- (happy_var_1- )}--happyReduce_297 = happySpecReduce_1 74# happyReduction_297-happyReduction_297 happy_x_1- = case happyOut113 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_298 = happySpecReduce_1 74# happyReduction_298-happyReduction_298 happy_x_1- = case happyOut114 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_299 = happySpecReduce_1 74# happyReduction_299-happyReduction_299 happy_x_1- = case happyOut117 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_300 = happySpecReduce_1 74# happyReduction_300-happyReduction_300 happy_x_1- = case happyOut100 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_301 = happySpecReduce_1 74# happyReduction_301-happyReduction_301 happy_x_1- = case happyOut101 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_302 = happySpecReduce_1 74# happyReduction_302-happyReduction_302 happy_x_1- = case happyOut99 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_303 = happySpecReduce_3 75# happyReduction_303-happyReduction_303 happy_x_3- happy_x_2- happy_x_1- = case happyOut17 happy_x_1 of { happy_var_1 -> - case happyOut33 happy_x_3 of { happy_var_3 -> - happyIn82- (map (\ x -> TypeSig defaultArgInfo x happy_var_3) happy_var_1- )}}--happyReduce_304 = happySpecReduce_3 76# happyReduction_304-happyReduction_304 happy_x_3- happy_x_2- happy_x_1- = case happyOut21 happy_x_1 of { happy_var_1 -> - case happyOut33 happy_x_3 of { happy_var_3 -> - happyIn83- (map (fmap (\ x -> TypeSig defaultArgInfo x happy_var_3)) happy_var_1- )}}--happyReduce_305 = happyMonadReduce 3# 77# happyReduction_305-happyReduction_305 (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 happyOut85 happy_x_2 of { happy_var_2 -> - case happyOut80 happy_x_3 of { happy_var_3 -> - ( funClauseOrTypeSigs happy_var_1 happy_var_2 happy_var_3)}}}- ) (\r -> happyReturn (happyIn84 r))--happyReduce_306 = happySpecReduce_2 78# happyReduction_306-happyReduction_306 happy_x_2- happy_x_1- = case happyOut33 happy_x_2 of { happy_var_2 -> - happyIn85- (JustRHS (RHS happy_var_2)- )}--happyReduce_307 = happySpecReduce_2 78# happyReduction_307-happyReduction_307 happy_x_2- happy_x_1- = case happyOut33 happy_x_2 of { happy_var_2 -> - happyIn85- (TypeSigsRHS happy_var_2- )}--happyReduce_308 = happySpecReduce_0 78# happyReduction_308-happyReduction_308 = happyIn85- (JustRHS AbsurdRHS- )--happyReduce_309 = happyReduce 7# 79# happyReduction_309-happyReduction_309 (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 { (TokKeyword KwData happy_var_1) -> - case happyOut16 happy_x_2 of { happy_var_2 -> - case happyOut62 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> - case happyOut33 happy_x_5 of { happy_var_5 -> - case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> - case happyOut140 happy_x_7 of { happy_var_7 -> - happyIn86- (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) Inductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7- ) `HappyStk` happyRest}}}}}}}--happyReduce_310 = happyReduce 7# 79# happyReduction_310-happyReduction_310 (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 { (TokKeyword KwCoData happy_var_1) -> - case happyOut16 happy_x_2 of { happy_var_2 -> - case happyOut62 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> - case happyOut33 happy_x_5 of { happy_var_5 -> - case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> - case happyOut140 happy_x_7 of { happy_var_7 -> - happyIn86- (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) CoInductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7- ) `HappyStk` happyRest}}}}}}}--happyReduce_311 = happyReduce 5# 79# happyReduction_311-happyReduction_311 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> - case happyOut16 happy_x_2 of { happy_var_2 -> - case happyOut62 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> - case happyOut140 happy_x_5 of { happy_var_5 -> - happyIn86- (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) Inductive happy_var_2 happy_var_3 Nothing happy_var_5- ) `HappyStk` happyRest}}}}}--happyReduce_312 = happyReduce 5# 79# happyReduction_312-happyReduction_312 (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 { (TokKeyword KwCoData happy_var_1) -> - case happyOut16 happy_x_2 of { happy_var_2 -> - case happyOut62 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> - case happyOut140 happy_x_5 of { happy_var_5 -> - happyIn86- (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) CoInductive happy_var_2 happy_var_3 Nothing happy_var_5- ) `HappyStk` happyRest}}}}}--happyReduce_313 = happyReduce 5# 80# happyReduction_313-happyReduction_313 (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 { (TokKeyword KwData happy_var_1) -> - case happyOut16 happy_x_2 of { happy_var_2 -> - case happyOut62 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> - case happyOut33 happy_x_5 of { happy_var_5 -> - happyIn87- (DataSig (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) Inductive happy_var_2 happy_var_3 happy_var_5- ) `HappyStk` happyRest}}}}}--happyReduce_314 = happyMonadReduce 7# 81# happyReduction_314-happyReduction_314 (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 { (TokKeyword KwRecord happy_var_1) -> - case happyOut41 happy_x_2 of { happy_var_2 -> - case happyOut62 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> - case happyOut33 happy_x_5 of { happy_var_5 -> - case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> - case happyOut141 happy_x_7 of { happy_var_7 -> - ( exprToName happy_var_2 >>= \ n -> return $ Record (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) n (fst3 happy_var_7) (snd3 happy_var_7) happy_var_3 (Just happy_var_5) (thd3 happy_var_7))}}}}}}}- ) (\r -> happyReturn (happyIn88 r))--happyReduce_315 = happyMonadReduce 5# 81# happyReduction_315-happyReduction_315 (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 { (TokKeyword KwRecord happy_var_1) -> - case happyOut41 happy_x_2 of { happy_var_2 -> - case happyOut62 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> - case happyOut141 happy_x_5 of { happy_var_5 -> - ( exprToName happy_var_2 >>= \ n -> return $ Record (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) n (fst3 happy_var_5) (snd3 happy_var_5) happy_var_3 Nothing (thd3 happy_var_5))}}}}}- ) (\r -> happyReturn (happyIn88 r))--happyReduce_316 = happyMonadReduce 5# 82# happyReduction_316-happyReduction_316 (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 { (TokKeyword KwRecord happy_var_1) -> - case happyOut41 happy_x_2 of { happy_var_2 -> - case happyOut62 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> - case happyOut33 happy_x_5 of { happy_var_5 -> - ( exprToName happy_var_2 >>= \ n -> return $ RecordSig (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) n happy_var_3 happy_var_5)}}}}}- ) (\r -> happyReturn (happyIn89 r))--happyReduce_317 = happySpecReduce_2 83# happyReduction_317-happyReduction_317 happy_x_2- happy_x_1- = case happyOut16 happy_x_2 of { happy_var_2 -> - happyIn90- (happy_var_2- )}--happyReduce_318 = happySpecReduce_3 84# happyReduction_318-happyReduction_318 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> - case happyOut15 happy_x_2 of { happy_var_2 -> - case happyOut25 happy_x_3 of { happy_var_3 -> - happyIn91- (Infix (Fixity (getRange (happy_var_1,happy_var_3)) happy_var_2 NonAssoc) happy_var_3- )}}}--happyReduce_319 = happySpecReduce_3 84# happyReduction_319-happyReduction_319 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> - case happyOut15 happy_x_2 of { happy_var_2 -> - case happyOut25 happy_x_3 of { happy_var_3 -> - happyIn91- (Infix (Fixity (getRange (happy_var_1,happy_var_3)) happy_var_2 LeftAssoc) happy_var_3- )}}}--happyReduce_320 = happySpecReduce_3 84# happyReduction_320-happyReduction_320 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> - case happyOut15 happy_x_2 of { happy_var_2 -> - case happyOut25 happy_x_3 of { happy_var_3 -> - happyIn91- (Infix (Fixity (getRange (happy_var_1,happy_var_3)) happy_var_2 RightAssoc) happy_var_3- )}}}--happyReduce_321 = happySpecReduce_2 85# happyReduction_321-happyReduction_321 happy_x_2- happy_x_1- = case happyOut138 happy_x_2 of { happy_var_2 -> - happyIn92- (let toField (Common.Arg info (TypeSig _ x t)) = Field x (Common.Arg info t) in map toField happy_var_2- )}--happyReduce_322 = happySpecReduce_2 86# happyReduction_322-happyReduction_322 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> - case happyOut143 happy_x_2 of { happy_var_2 -> - happyIn93- (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2- )}}--happyReduce_323 = happySpecReduce_2 87# happyReduction_323-happyReduction_323 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> - case happyOut143 happy_x_2 of { happy_var_2 -> - happyIn94- (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2- )}}--happyReduce_324 = happySpecReduce_2 88# happyReduction_324-happyReduction_324 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> - case happyOut143 happy_x_2 of { happy_var_2 -> - happyIn95- (Private (fuseRange happy_var_1 happy_var_2) happy_var_2- )}}--happyReduce_325 = happySpecReduce_2 89# happyReduction_325-happyReduction_325 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInstance happy_var_1) -> - case happyOut143 happy_x_2 of { happy_var_2 -> - happyIn96- (InstanceB (fuseRange happy_var_1 happy_var_2) happy_var_2- )}}--happyReduce_326 = happySpecReduce_2 90# happyReduction_326-happyReduction_326 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> - case happyOut143 happy_x_2 of { happy_var_2 -> - happyIn97- (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2- )}}--happyReduce_327 = happySpecReduce_2 91# happyReduction_327-happyReduction_327 happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> - case happyOut136 happy_x_2 of { happy_var_2 -> - happyIn98- (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2- )}}--happyReduce_328 = happyReduce 4# 92# 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 { (TokKeyword KwUnquoteDecl happy_var_1) -> - case happyOut16 happy_x_2 of { happy_var_2 -> - case happyOut33 happy_x_4 of { happy_var_4 -> - happyIn99- (UnquoteDecl (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4- ) `HappyStk` happyRest}}}--happyReduce_329 = happyMonadReduce 5# 93# happyReduction_329-happyReduction_329 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut16 happy_x_2 of { happy_var_2 -> - case happyOut104 happy_x_3 of { happy_var_3 -> - case happyOut103 happy_x_5 of { happy_var_5 -> - (- case happy_var_2 of- Name _ [_] -> case mkNotation happy_var_3 (map rangedThing happy_var_5) of- Left err -> parseError $ "Malformed syntax declaration: " ++ err- Right n -> return $ Syntax happy_var_2 n- _ -> parseError "Syntax declarations are allowed only for simple names (without holes)")}}}- ) (\r -> happyReturn (happyIn100 r))--happyReduce_330 = happyMonadReduce 5# 94# happyReduction_330-happyReduction_330 (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 { (TokKeyword KwPatternSyn happy_var_1) -> - case happyOut16 happy_x_2 of { happy_var_2 -> - case happyOut102 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymEqual happy_var_4) -> - case happyOut33 happy_x_5 of { happy_var_5 -> - ( do- p <- exprToPattern happy_var_5- return (PatternSyn (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 happy_var_3 p))}}}}}- ) (\r -> happyReturn (happyIn101 r))--happyReduce_331 = happySpecReduce_0 95# happyReduction_331-happyReduction_331 = happyIn102- ([]- )--happyReduce_332 = happyMonadReduce 1# 95# happyReduction_332-happyReduction_332 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut54 happy_x_1 of { happy_var_1 -> - ( patternSynArgs happy_var_1)}- ) (\r -> happyReturn (happyIn102 r))--happyReduce_333 = happySpecReduce_1 96# happyReduction_333-happyReduction_333 happy_x_1- = case happyOut108 happy_x_1 of { happy_var_1 -> - happyIn103- ([happy_var_1]- )}--happyReduce_334 = happySpecReduce_2 96# happyReduction_334-happyReduction_334 happy_x_2- happy_x_1- = case happyOut103 happy_x_1 of { happy_var_1 -> - case happyOut108 happy_x_2 of { happy_var_2 -> - happyIn103- (happy_var_1 ++ [happy_var_2]- )}}--happyReduce_335 = happySpecReduce_1 97# happyReduction_335-happyReduction_335 happy_x_1- = case happyOut105 happy_x_1 of { happy_var_1 -> - happyIn104- ([happy_var_1]- )}--happyReduce_336 = happySpecReduce_2 97# happyReduction_336-happyReduction_336 happy_x_2- happy_x_1- = case happyOut104 happy_x_1 of { happy_var_1 -> - case happyOut105 happy_x_2 of { happy_var_2 -> - happyIn104- (happy_var_1 ++ [happy_var_2]- )}}--happyReduce_337 = happySpecReduce_1 98# happyReduction_337-happyReduction_337 happy_x_1- = case happyOut106 happy_x_1 of { happy_var_1 -> - happyIn105- (defaultNamedArg happy_var_1- )}--happyReduce_338 = happySpecReduce_3 98# happyReduction_338-happyReduction_338 happy_x_3- happy_x_2- happy_x_1- = case happyOut107 happy_x_2 of { happy_var_2 -> - happyIn105- (setHiding Hidden $ defaultNamedArg happy_var_2- )}--happyReduce_339 = happySpecReduce_3 98# happyReduction_339-happyReduction_339 happy_x_3- happy_x_2- happy_x_1- = case happyOut107 happy_x_2 of { happy_var_2 -> - happyIn105- (setHiding Instance $ defaultNamedArg happy_var_2- )}--happyReduce_340 = happyReduce 5# 98# happyReduction_340-happyReduction_340 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut108 happy_x_2 of { happy_var_2 -> - case happyOut107 happy_x_4 of { happy_var_4 -> - happyIn105- (setHiding Hidden $ defaultArg $ named happy_var_2 happy_var_4- ) `HappyStk` happyRest}}--happyReduce_341 = happyReduce 5# 98# happyReduction_341-happyReduction_341 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut108 happy_x_2 of { happy_var_2 -> - case happyOut107 happy_x_4 of { happy_var_4 -> - happyIn105- (setHiding Instance $ defaultArg $ named happy_var_2 happy_var_4- ) `HappyStk` happyRest}}--happyReduce_342 = happySpecReduce_1 99# happyReduction_342-happyReduction_342 happy_x_1- = case happyOut108 happy_x_1 of { happy_var_1 -> - happyIn106- (ExprHole (rangedThing happy_var_1)- )}--happyReduce_343 = happyReduce 6# 99# happyReduction_343-happyReduction_343 (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 happyOut108 happy_x_3 of { happy_var_3 -> - case happyOut108 happy_x_5 of { happy_var_5 -> - happyIn106- (LambdaHole (rangedThing happy_var_3) (rangedThing happy_var_5)- ) `HappyStk` happyRest}}--happyReduce_344 = happySpecReduce_1 100# happyReduction_344-happyReduction_344 happy_x_1- = case happyOut108 happy_x_1 of { happy_var_1 -> - happyIn107- (ExprHole (rangedThing happy_var_1)- )}--happyReduce_345 = happyReduce 4# 100# happyReduction_345-happyReduction_345 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut108 happy_x_2 of { happy_var_2 -> - case happyOut108 happy_x_4 of { happy_var_4 -> - happyIn107- (LambdaHole (rangedThing happy_var_2) (rangedThing happy_var_4)- ) `HappyStk` happyRest}}--happyReduce_346 = happySpecReduce_1 101# happyReduction_346-happyReduction_346 happy_x_1- = case happyOutTok happy_x_1 of { (TokId happy_var_1) -> - happyIn108- (Ranged (getRange $ fst happy_var_1) (stringToRawName $ snd happy_var_1)- )}--happyReduce_347 = happySpecReduce_1 102# happyReduction_347-happyReduction_347 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> - happyIn109- (Just (getRange happy_var_1)- )}--happyReduce_348 = happySpecReduce_0 102# happyReduction_348-happyReduction_348 = happyIn109- (Nothing- )--happyReduce_349 = happyMonadReduce 5# 103# happyReduction_349-happyReduction_349 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut109 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (TokKeyword KwImport happy_var_2) -> - case happyOut23 happy_x_3 of { happy_var_3 -> - case happyOut111 happy_x_4 of { happy_var_4 -> - case happyOut65 happy_x_5 of { happy_var_5 -> - (- let- { doOpen = maybe DontOpen (const DoOpen) happy_var_1- ; m = happy_var_3- ; es = happy_var_4- ; dir = happy_var_5- ; r = getRange (m, es, dir)- ; mr = getRange m- ; unique = hashString $ show $ (Nothing :: Maybe ()) <$ r- -- turn range into unique id, but delete file path- -- which is absolute and messes up suite of failing tests- -- (different hashs on different installations)- -- TODO: Don't use (insecure) hashes in this way.- ; fresh = Name mr [ Id $ stringToRawName $ ".#" ++ show m ++ "-" ++ show unique ]- ; impStm asR = Import mr m (Just (AsName fresh asR)) DontOpen defaultImportDir- ; appStm m' es =- let r = getRange (m, es) in- Private r- [ ModuleMacro r m'- (SectionApp (getRange es) []- (RawApp (getRange es) (Ident (QName fresh) : es)))- doOpen dir- ]- ; (initArgs, last2Args) = splitAt (length es - 2) es- ; parseAsClause = case last2Args of- { [ Ident (QName (Name asR [Id x]))- , Ident (QName m')- ] | rawNameToString x == "as" -> Just (asR, m')- ; _ -> Nothing- }- } in- case es of- { [] -> return [Import mr m Nothing doOpen dir]- ; _ | Just (asR, m') <- parseAsClause ->- if null initArgs then return- [ Import (getRange (m, asR, m', dir)) m- (Just (AsName m' asR)) doOpen dir- ]- else return [ impStm asR, appStm m' initArgs ]- | DontOpen <- doOpen -> parseErrorAt (fromJust $ rStart $ getRange happy_var_2) "An import statement with module instantiation does not actually import the module. This statement achieves nothing. Either add the `open' keyword or bind the instantiated module with an `as' clause."- | otherwise -> return- [ impStm noRange- , appStm (noName $ beginningOf $ getRange m) es- ]- })}}}}}- ) (\r -> happyReturn (happyIn110 r))--happyReduce_350 = happyReduce 4# 103# happyReduction_350-happyReduction_350 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut23 happy_x_2 of { happy_var_2 -> - case happyOut111 happy_x_3 of { happy_var_3 -> - case happyOut65 happy_x_4 of { happy_var_4 -> - happyIn110- (let- { m = happy_var_2- ; es = happy_var_3- ; dir = happy_var_4- ; r = getRange (m, es, dir)- } in- [ case es of- { [] -> Open r m dir- ; _ -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange m)- (SectionApp (getRange (m , es)) [] (RawApp (fuseRange m es) (Ident m : es)))- DoOpen dir- ]- }- ]- ) `HappyStk` happyRest}}}--happyReduce_351 = happyReduce 6# 103# happyReduction_351-happyReduction_351 (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 happyOut23 happy_x_2 of { happy_var_2 -> - case happyOut65 happy_x_6 of { happy_var_6 -> - happyIn110- (let r = getRange happy_var_2 in- [ Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2)- (RecordModuleIFS r happy_var_2) DoOpen happy_var_6- ]- ]- ) `HappyStk` happyRest}}--happyReduce_352 = happySpecReduce_0 104# happyReduction_352-happyReduction_352 = happyIn111- ([]- )--happyReduce_353 = happySpecReduce_2 104# happyReduction_353-happyReduction_353 happy_x_2- happy_x_1- = case happyOut42 happy_x_1 of { happy_var_1 -> - case happyOut111 happy_x_2 of { happy_var_2 -> - happyIn111- (happy_var_1 : happy_var_2- )}}--happyReduce_354 = happyReduce 4# 105# happyReduction_354-happyReduction_354 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut23 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> - case happyOutTok happy_x_3 of { (TokSymbol SymEllipsis happy_var_3) -> - case happyOut18 happy_x_4 of { happy_var_4 -> - happyIn112- ((\ts ->- if null ts then return $ RecordModuleIFS (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_1- else parseError "No bindings allowed for record module with non-canonical implicits" )- ) `HappyStk` happyRest}}}}--happyReduce_355 = happySpecReduce_2 105# happyReduction_355-happyReduction_355 happy_x_2- happy_x_1- = case happyOut23 happy_x_1 of { happy_var_1 -> - case happyOut111 happy_x_2 of { happy_var_2 -> - happyIn112- ((\ts -> return $ SectionApp (getRange (happy_var_1, happy_var_2)) ts (RawApp (fuseRange happy_var_1 happy_var_2) (Ident happy_var_1 : happy_var_2)) )- )}}--happyReduce_356 = happyMonadReduce 6# 106# happyReduction_356-happyReduction_356 (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 { (TokKeyword KwModule happy_var_1) -> - case happyOut23 happy_x_2 of { happy_var_2 -> - case happyOut62 happy_x_3 of { happy_var_3 -> - case happyOut112 happy_x_5 of { happy_var_5 -> - case happyOut65 happy_x_6 of { happy_var_6 -> - ( do { ma <- happy_var_5 (map addType happy_var_3)- ; name <- ensureUnqual happy_var_2- ; return $ ModuleMacro (getRange (happy_var_1, happy_var_2, ma, happy_var_6)) name ma DontOpen happy_var_6 })}}}}}- ) (\r -> happyReturn (happyIn113 r))--happyReduce_357 = happyMonadReduce 7# 106# happyReduction_357-happyReduction_357 (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 { (TokKeyword KwOpen happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwModule happy_var_2) -> - case happyOut16 happy_x_3 of { happy_var_3 -> - case happyOut62 happy_x_4 of { happy_var_4 -> - case happyOut112 happy_x_6 of { happy_var_6 -> - case happyOut65 happy_x_7 of { happy_var_7 -> - ( do {ma <- happy_var_6 (map addType happy_var_4); return $ ModuleMacro (getRange (happy_var_1, happy_var_2, happy_var_3, ma, happy_var_7)) happy_var_3 ma DoOpen happy_var_7 })}}}}}}- ) (\r -> happyReturn (happyIn113 r))--happyReduce_358 = happyReduce 5# 107# happyReduction_358-happyReduction_358 (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 { (TokKeyword KwModule happy_var_1) -> - case happyOut23 happy_x_2 of { happy_var_2 -> - case happyOut62 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> - case happyOut144 happy_x_5 of { happy_var_5 -> - happyIn114- (Module (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 (map addType happy_var_3) happy_var_5- ) `HappyStk` happyRest}}}}}--happyReduce_359 = happyReduce 5# 107# happyReduction_359-happyReduction_359 (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 { (TokKeyword KwModule happy_var_1) -> - case happyOut115 happy_x_2 of { happy_var_2 -> - case happyOut62 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> - case happyOut144 happy_x_5 of { happy_var_5 -> - happyIn114- (Module (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5- ) `HappyStk` happyRest}}}}}--happyReduce_360 = happySpecReduce_1 108# happyReduction_360-happyReduction_360 happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> - happyIn115- (noName (getRange happy_var_1)- )}--happyReduce_361 = happySpecReduce_1 109# happyReduction_361-happyReduction_361 happy_x_1- = case happyOut146 happy_x_1 of { happy_var_1 -> - happyIn116- (figureOutTopLevelModule happy_var_1- )}--happyReduce_362 = happySpecReduce_1 110# happyReduction_362-happyReduction_362 happy_x_1- = case happyOut118 happy_x_1 of { happy_var_1 -> - happyIn117- (Pragma happy_var_1- )}--happyReduce_363 = happySpecReduce_1 111# happyReduction_363-happyReduction_363 happy_x_1- = case happyOut120 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_364 = happySpecReduce_1 111# happyReduction_364-happyReduction_364 happy_x_1- = case happyOut121 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_365 = happySpecReduce_1 111# happyReduction_365-happyReduction_365 happy_x_1- = case happyOut122 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_366 = happySpecReduce_1 111# happyReduction_366-happyReduction_366 happy_x_1- = case happyOut123 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_367 = happySpecReduce_1 111# happyReduction_367-happyReduction_367 happy_x_1- = case happyOut125 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_368 = happySpecReduce_1 111# happyReduction_368-happyReduction_368 happy_x_1- = case happyOut124 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_369 = happySpecReduce_1 111# happyReduction_369-happyReduction_369 happy_x_1- = case happyOut126 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_370 = happySpecReduce_1 111# happyReduction_370-happyReduction_370 happy_x_1- = case happyOut127 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_371 = happySpecReduce_1 111# happyReduction_371-happyReduction_371 happy_x_1- = case happyOut128 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_372 = happySpecReduce_1 111# happyReduction_372-happyReduction_372 happy_x_1- = case happyOut134 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_373 = happySpecReduce_1 111# happyReduction_373-happyReduction_373 happy_x_1- = case happyOut135 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_374 = happySpecReduce_1 111# happyReduction_374-happyReduction_374 happy_x_1- = case happyOut129 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_375 = happySpecReduce_1 111# happyReduction_375-happyReduction_375 happy_x_1- = case happyOut132 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_376 = happySpecReduce_1 111# happyReduction_376-happyReduction_376 happy_x_1- = case happyOut131 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_377 = happySpecReduce_1 111# happyReduction_377-happyReduction_377 happy_x_1- = case happyOut130 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_378 = happySpecReduce_1 111# happyReduction_378-happyReduction_378 happy_x_1- = case happyOut133 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_379 = happySpecReduce_1 111# happyReduction_379-happyReduction_379 happy_x_1- = case happyOut119 happy_x_1 of { happy_var_1 -> - happyIn118- (happy_var_1- )}--happyReduce_380 = happyReduce 4# 112# happyReduction_380-happyReduction_380 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwOPTIONS happy_var_2) -> - case happyOut29 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> - happyIn119- (OptionsPragma (getRange (happy_var_1,happy_var_2,happy_var_4)) happy_var_3- ) `HappyStk` happyRest}}}}--happyReduce_381 = happyReduce 5# 113# happyReduction_381-happyReduction_381 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwBUILTIN happy_var_2) -> - case happyOutTok happy_x_3 of { (TokString happy_var_3) -> - case happyOut32 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> - happyIn120- (BuiltinPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4,happy_var_5)) (snd happy_var_3) (Ident happy_var_4)- ) `HappyStk` happyRest}}}}}--happyReduce_382 = happyReduce 5# 113# happyReduction_382-happyReduction_382 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwBUILTIN happy_var_2) -> - case happyOutTok happy_x_3 of { (TokKeyword KwREWRITE happy_var_3) -> - case happyOut32 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> - happyIn120- (BuiltinPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) "REWRITE" (Ident happy_var_4)- ) `HappyStk` happyRest}}}}}--happyReduce_383 = happyReduce 4# 114# happyReduction_383-happyReduction_383 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwREWRITE happy_var_2) -> - case happyOut32 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> - happyIn121- (RewritePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3- ) `HappyStk` happyRest}}}}--happyReduce_384 = happyReduce 5# 115# happyReduction_384-happyReduction_384 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED happy_var_2) -> - case happyOut32 happy_x_3 of { happy_var_3 -> - case happyOut29 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> - happyIn122- (CompiledPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)- ) `HappyStk` happyRest}}}}}--happyReduce_385 = happyReduce 5# 116# happyReduction_385-happyReduction_385 (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 { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_EXPORT happy_var_2) -> - case happyOut32 happy_x_3 of { happy_var_3 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> - happyIn123- (CompiledExportPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 happy_var_4- ) `HappyStk` happyRest}}}}}--happyReduce_386 = happyReduce 5# 117# happyReduction_386-happyReduction_386 (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 { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_TYPE happy_var_2) -> - case happyOut32 happy_x_3 of { happy_var_3 -> - case happyOut29 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> - happyIn124- (CompiledTypePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)- ) `HappyStk` happyRest}}}}}--happyReduce_387 = happyReduce 6# 118# happyReduction_387-happyReduction_387 (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 { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_DATA happy_var_2) -> - case happyOut32 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokString happy_var_4) -> - case happyOut29 happy_x_5 of { happy_var_5 -> - case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> - happyIn125- (CompiledDataPragma (getRange (happy_var_1,happy_var_2,happy_var_3,fst happy_var_4,happy_var_6)) happy_var_3 (snd happy_var_4) happy_var_5- ) `HappyStk` happyRest}}}}}}--happyReduce_388 = happyReduce 5# 119# happyReduction_388-happyReduction_388 (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 { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_EPIC happy_var_2) -> - case happyOut32 happy_x_3 of { happy_var_3 -> - case happyOut29 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> - happyIn126- (CompiledEpicPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)- ) `HappyStk` happyRest}}}}}--happyReduce_389 = happyReduce 5# 120# happyReduction_389-happyReduction_389 (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 { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_JS happy_var_2) -> - case happyOut32 happy_x_3 of { happy_var_3 -> - case happyOut29 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> - happyIn127- (CompiledJSPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)- ) `HappyStk` happyRest}}}}}--happyReduce_390 = happyReduce 4# 121# happyReduction_390-happyReduction_390 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwSTATIC happy_var_2) -> - case happyOut32 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> - happyIn128- (StaticPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3- ) `HappyStk` happyRest}}}}--happyReduce_391 = happyReduce 4# 122# happyReduction_391-happyReduction_391 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwETA happy_var_2) -> - case happyOut32 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> - happyIn129- (EtaPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3- ) `HappyStk` happyRest}}}}--happyReduce_392 = happySpecReduce_3 123# happyReduction_392-happyReduction_392 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwNO_TERMINATION_CHECK happy_var_2) -> - case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> - happyIn130- (TerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3)) NoTerminationCheck- )}}}--happyReduce_393 = happySpecReduce_3 124# happyReduction_393-happyReduction_393 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwNON_TERMINATING happy_var_2) -> - case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> - happyIn131- (TerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3)) NonTerminating- )}}}--happyReduce_394 = happySpecReduce_3 125# happyReduction_394-happyReduction_394 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwTERMINATING happy_var_2) -> - case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> - happyIn132- (TerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3)) Terminating- )}}}--happyReduce_395 = happyReduce 4# 126# happyReduction_395-happyReduction_395 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwMEASURE happy_var_2) -> - case happyOut31 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> - happyIn133- (let r = getRange (happy_var_1, happy_var_2, happy_var_3, happy_var_4) in- TerminationCheckPragma r (TerminationMeasure r happy_var_3)- ) `HappyStk` happyRest}}}}--happyReduce_396 = happyMonadReduce 4# 127# happyReduction_396-happyReduction_396 (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 { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwIMPORT happy_var_2) -> - case happyOutTok happy_x_3 of { (TokString happy_var_3) -> - case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> - ( let s = snd happy_var_3 in- if validHaskellModuleName s- then return $ ImportPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4)) s- else parseError $ "Malformed module name: " ++ s ++ ".")}}}}- ) (\r -> happyReturn (happyIn134 r))--happyReduce_397 = happySpecReduce_3 128# happyReduction_397-happyReduction_397 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> - case happyOutTok happy_x_2 of { (TokKeyword KwIMPOSSIBLE happy_var_2) -> - case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> - happyIn135- (ImpossiblePragma (getRange (happy_var_1,happy_var_2,happy_var_3))- )}}}--happyReduce_398 = happySpecReduce_3 129# happyReduction_398-happyReduction_398 happy_x_3- happy_x_2- happy_x_1- = case happyOut137 happy_x_2 of { happy_var_2 -> - happyIn136- (reverse happy_var_2- )}--happyReduce_399 = happySpecReduce_3 130# happyReduction_399-happyReduction_399 happy_x_3- happy_x_2- happy_x_1- = case happyOut137 happy_x_1 of { happy_var_1 -> - case happyOut82 happy_x_3 of { happy_var_3 -> - happyIn137- (reverse happy_var_3 ++ happy_var_1- )}}--happyReduce_400 = happySpecReduce_1 130# happyReduction_400-happyReduction_400 happy_x_1- = case happyOut82 happy_x_1 of { happy_var_1 -> - happyIn137- (reverse happy_var_1- )}--happyReduce_401 = happySpecReduce_3 131# happyReduction_401-happyReduction_401 happy_x_3- happy_x_2- happy_x_1- = case happyOut139 happy_x_2 of { happy_var_2 -> - happyIn138- (reverse happy_var_2- )}--happyReduce_402 = happySpecReduce_3 132# happyReduction_402-happyReduction_402 happy_x_3- happy_x_2- happy_x_1- = case happyOut139 happy_x_1 of { happy_var_1 -> - case happyOut83 happy_x_3 of { happy_var_3 -> - happyIn139- (reverse happy_var_3 ++ happy_var_1- )}}--happyReduce_403 = happySpecReduce_1 132# happyReduction_403-happyReduction_403 happy_x_1- = case happyOut83 happy_x_1 of { happy_var_1 -> - happyIn139- (reverse happy_var_1- )}--happyReduce_404 = happySpecReduce_2 133# happyReduction_404-happyReduction_404 happy_x_2- happy_x_1- = happyIn140- ([]- )--happyReduce_405 = happySpecReduce_1 133# happyReduction_405-happyReduction_405 happy_x_1- = case happyOut136 happy_x_1 of { happy_var_1 -> - happyIn140- (happy_var_1- )}--happyReduce_406 = happySpecReduce_2 134# happyReduction_406-happyReduction_406 happy_x_2- happy_x_1- = happyIn141- ((Nothing, Nothing, [])- )--happyReduce_407 = happySpecReduce_3 134# happyReduction_407-happyReduction_407 happy_x_3- happy_x_2- happy_x_1- = case happyOut90 happy_x_2 of { happy_var_2 -> - happyIn141- ((Nothing, Just happy_var_2, [])- )}--happyReduce_408 = happyReduce 5# 134# happyReduction_408-happyReduction_408 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut90 happy_x_2 of { happy_var_2 -> - case happyOut145 happy_x_4 of { happy_var_4 -> - happyIn141- ((Nothing, Just happy_var_2, happy_var_4)- ) `HappyStk` happyRest}}--happyReduce_409 = happySpecReduce_3 134# happyReduction_409-happyReduction_409 happy_x_3- happy_x_2- happy_x_1- = case happyOut145 happy_x_2 of { happy_var_2 -> - happyIn141- ((Nothing, Nothing, happy_var_2)- )}--happyReduce_410 = happySpecReduce_3 134# happyReduction_410-happyReduction_410 happy_x_3- happy_x_2- happy_x_1- = case happyOut142 happy_x_2 of { happy_var_2 -> - happyIn141- ((Just happy_var_2, Nothing, [])- )}--happyReduce_411 = happyReduce 5# 134# happyReduction_411-happyReduction_411 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut142 happy_x_2 of { happy_var_2 -> - case happyOut90 happy_x_4 of { happy_var_4 -> - happyIn141- ((Just happy_var_2, Just happy_var_4, [])- ) `HappyStk` happyRest}}--happyReduce_412 = happyReduce 7# 134# happyReduction_412-happyReduction_412 (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 happyOut142 happy_x_2 of { happy_var_2 -> - case happyOut90 happy_x_4 of { happy_var_4 -> - case happyOut145 happy_x_6 of { happy_var_6 -> - happyIn141- ((Just happy_var_2, Just happy_var_4, happy_var_6)- ) `HappyStk` happyRest}}}--happyReduce_413 = happyReduce 5# 134# happyReduction_413-happyReduction_413 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut142 happy_x_2 of { happy_var_2 -> - case happyOut145 happy_x_4 of { happy_var_4 -> - happyIn141- ((Just happy_var_2, Nothing, happy_var_4)- ) `HappyStk` happyRest}}--happyReduce_414 = happySpecReduce_1 135# happyReduction_414-happyReduction_414 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInductive happy_var_1) -> - happyIn142- (Ranged (getRange happy_var_1) Inductive- )}--happyReduce_415 = happySpecReduce_1 135# happyReduction_415-happyReduction_415 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCoInductive happy_var_1) -> - happyIn142- (Ranged (getRange happy_var_1) CoInductive- )}--happyReduce_416 = happySpecReduce_3 136# happyReduction_416-happyReduction_416 happy_x_3- happy_x_2- happy_x_1- = case happyOut145 happy_x_2 of { happy_var_2 -> - happyIn143- (happy_var_2- )}--happyReduce_417 = happySpecReduce_2 137# happyReduction_417-happyReduction_417 happy_x_2- happy_x_1- = happyIn144- ([]- )--happyReduce_418 = happySpecReduce_1 137# happyReduction_418-happyReduction_418 happy_x_1- = case happyOut143 happy_x_1 of { happy_var_1 -> - happyIn144- (happy_var_1- )}--happyReduce_419 = happySpecReduce_3 138# happyReduction_419-happyReduction_419 happy_x_3- happy_x_2- happy_x_1- = case happyOut81 happy_x_1 of { happy_var_1 -> - case happyOut145 happy_x_3 of { happy_var_3 -> - happyIn145- (happy_var_1 ++ happy_var_3- )}}--happyReduce_420 = happySpecReduce_1 138# happyReduction_420-happyReduction_420 happy_x_1- = case happyOut81 happy_x_1 of { happy_var_1 -> - happyIn145- (happy_var_1- )}--happyReduce_421 = happySpecReduce_0 139# happyReduction_421-happyReduction_421 = happyIn146- ([]- )--happyReduce_422 = happySpecReduce_1 139# happyReduction_422-happyReduction_422 happy_x_1- = case happyOut145 happy_x_1 of { happy_var_1 -> - happyIn146- (happy_var_1- )}--happyNewToken action sts stk- = lexer(\tk -> - let cont i = happyDoAction i tk action sts stk in- case tk of {- TokEOF -> happyDoAction 89# tk action sts stk;- TokKeyword KwAbstract happy_dollar_dollar -> cont 1#;- TokKeyword KwCoData happy_dollar_dollar -> cont 2#;- TokKeyword KwCoInductive happy_dollar_dollar -> cont 3#;- TokKeyword KwConstructor happy_dollar_dollar -> cont 4#;- TokKeyword KwData happy_dollar_dollar -> cont 5#;- TokKeyword KwField happy_dollar_dollar -> cont 6#;- TokKeyword KwForall happy_dollar_dollar -> cont 7#;- TokKeyword KwHiding happy_dollar_dollar -> cont 8#;- TokKeyword KwImport happy_dollar_dollar -> cont 9#;- TokKeyword KwIn happy_dollar_dollar -> cont 10#;- TokKeyword KwInductive happy_dollar_dollar -> cont 11#;- TokKeyword KwInfix happy_dollar_dollar -> cont 12#;- TokKeyword KwInfixL happy_dollar_dollar -> cont 13#;- TokKeyword KwInfixR happy_dollar_dollar -> cont 14#;- TokKeyword KwInstance happy_dollar_dollar -> cont 15#;- TokKeyword KwLet happy_dollar_dollar -> cont 16#;- TokKeyword KwModule happy_dollar_dollar -> cont 17#;- TokKeyword KwMutual happy_dollar_dollar -> cont 18#;- TokKeyword KwOpen happy_dollar_dollar -> cont 19#;- TokKeyword KwPatternSyn happy_dollar_dollar -> cont 20#;- TokKeyword KwPostulate happy_dollar_dollar -> cont 21#;- TokKeyword KwPrimitive happy_dollar_dollar -> cont 22#;- TokKeyword KwPrivate happy_dollar_dollar -> cont 23#;- TokKeyword KwProp happy_dollar_dollar -> cont 24#;- TokKeyword KwPublic happy_dollar_dollar -> cont 25#;- TokKeyword KwQuote happy_dollar_dollar -> cont 26#;- TokKeyword KwQuoteContext happy_dollar_dollar -> cont 27#;- TokKeyword KwQuoteGoal happy_dollar_dollar -> cont 28#;- TokKeyword KwQuoteTerm happy_dollar_dollar -> cont 29#;- TokKeyword KwRecord happy_dollar_dollar -> cont 30#;- TokKeyword KwRenaming happy_dollar_dollar -> cont 31#;- TokKeyword KwRewrite happy_dollar_dollar -> cont 32#;- TokKeyword KwSet happy_dollar_dollar -> cont 33#;- TokKeyword KwSyntax happy_dollar_dollar -> cont 34#;- TokKeyword KwTactic happy_dollar_dollar -> cont 35#;- TokKeyword KwTo happy_dollar_dollar -> cont 36#;- TokKeyword KwUnquote happy_dollar_dollar -> cont 37#;- TokKeyword KwUnquoteDecl happy_dollar_dollar -> cont 38#;- TokKeyword KwUsing happy_dollar_dollar -> cont 39#;- TokKeyword KwWhere happy_dollar_dollar -> cont 40#;- TokKeyword KwWith happy_dollar_dollar -> cont 41#;- TokKeyword KwBUILTIN happy_dollar_dollar -> cont 42#;- TokKeyword KwCOMPILED happy_dollar_dollar -> cont 43#;- TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 44#;- TokKeyword KwCOMPILED_EPIC happy_dollar_dollar -> cont 45#;- TokKeyword KwCOMPILED_EXPORT happy_dollar_dollar -> cont 46#;- TokKeyword KwCOMPILED_JS happy_dollar_dollar -> cont 47#;- TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 48#;- TokKeyword KwETA happy_dollar_dollar -> cont 49#;- TokKeyword KwIMPORT happy_dollar_dollar -> cont 50#;- TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 51#;- TokKeyword KwMEASURE happy_dollar_dollar -> cont 52#;- TokKeyword KwNO_TERMINATION_CHECK happy_dollar_dollar -> cont 53#;- TokKeyword KwNON_TERMINATING happy_dollar_dollar -> cont 54#;- TokKeyword KwOPTIONS happy_dollar_dollar -> cont 55#;- TokKeyword KwREWRITE happy_dollar_dollar -> cont 56#;- TokKeyword KwSTATIC happy_dollar_dollar -> cont 57#;- TokKeyword KwTERMINATING happy_dollar_dollar -> cont 58#;- TokSetN happy_dollar_dollar -> cont 59#;- TokTeX happy_dollar_dollar -> cont 60#;- TokComment happy_dollar_dollar -> cont 61#;- TokSymbol SymEllipsis happy_dollar_dollar -> cont 62#;- TokSymbol SymDotDot happy_dollar_dollar -> cont 63#;- TokSymbol SymDot happy_dollar_dollar -> cont 64#;- TokSymbol SymSemi happy_dollar_dollar -> cont 65#;- TokSymbol SymColon happy_dollar_dollar -> cont 66#;- TokSymbol SymEqual happy_dollar_dollar -> cont 67#;- TokSymbol SymUnderscore happy_dollar_dollar -> cont 68#;- TokSymbol SymQuestionMark happy_dollar_dollar -> cont 69#;- TokSymbol SymArrow happy_dollar_dollar -> cont 70#;- TokSymbol SymLambda happy_dollar_dollar -> cont 71#;- TokSymbol SymAs happy_dollar_dollar -> cont 72#;- TokSymbol SymBar happy_dollar_dollar -> cont 73#;- TokSymbol SymOpenParen happy_dollar_dollar -> cont 74#;- TokSymbol SymCloseParen happy_dollar_dollar -> cont 75#;- TokSymbol SymDoubleOpenBrace happy_dollar_dollar -> cont 76#;- TokSymbol SymDoubleCloseBrace happy_dollar_dollar -> cont 77#;- TokSymbol SymOpenBrace happy_dollar_dollar -> cont 78#;- TokSymbol SymCloseBrace happy_dollar_dollar -> cont 79#;- TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 80#;- TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 81#;- TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 82#;- TokSymbol SymOpenPragma happy_dollar_dollar -> cont 83#;- TokSymbol SymClosePragma happy_dollar_dollar -> cont 84#;- TokId happy_dollar_dollar -> cont 85#;- TokQId happy_dollar_dollar -> cont 86#;- TokString happy_dollar_dollar -> cont 87#;- TokLiteral happy_dollar_dollar -> cont 88#;- _ -> happyError' tk- })--happyError_ 89# tk = happyError' tk-happyError_ _ tk = happyError' tk--happyThen :: () => Parser a -> (a -> Parser b) -> Parser b-happyThen = (>>=)-happyReturn :: () => a -> Parser a-happyReturn = (return)-happyThen1 = happyThen-happyReturn1 :: () => a -> Parser a-happyReturn1 = happyReturn-happyError' :: () => (Token) -> Parser a-happyError' tk = (\token -> happyError) tk--tokensParser = happySomeParser where- happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut7 x))--exprParser = happySomeParser where- happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut33 x))--moduleParser = happySomeParser where- happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut10 x))--moduleNameParser = happySomeParser where- happySomeParser = happyThen (happyParse 3#) (\x -> happyReturn (happyOut23 x))--happySeq = happyDontSeq---{--------------------------------------------------------------------------- Parsers- --------------------------------------------------------------------------}---- | Parse the token stream. Used by the TeX compiler.-tokensParser :: Parser [Token]---- | Parse an expression. Could be used in interactions.-exprParser :: Parser Expr---- | Parse a module.-moduleParser :: Parser Module---{--------------------------------------------------------------------------- Happy stuff- --------------------------------------------------------------------------}---- | Required by Happy.-happyError :: Parser a-happyError = parseError "Parse error"---{--------------------------------------------------------------------------- Utility functions- --------------------------------------------------------------------------}---- | Grab leading OPTIONS pragmas.-takeOptionsPragmas :: [Declaration] -> ([Pragma], [Declaration])-takeOptionsPragmas = spanJust $ \ d -> case d of- Pragma p@OptionsPragma{} -> Just p- _ -> Nothing---- | Insert a top-level module if there is none.-figureOutTopLevelModule :: [Declaration] -> [Declaration]-figureOutTopLevelModule ds =- case span isAllowedBeforeModule ds of- (ds0, Module r m tel ds1 : ds2) -> ds0 ++ [Module r m tel $ ds1 ++ ds2]- (ds0, ds1) -> ds0 ++ [Module (getRange ds1) (QName noName_) [] ds1]- where- isAllowedBeforeModule (Pragma OptionsPragma{}) = True- isAllowedBeforeModule (Private _ ds) = all isAllowedBeforeModule ds- isAllowedBeforeModule Import{} = True- isAllowedBeforeModule ModuleMacro{} = True- isAllowedBeforeModule Open{} = True- isAllowedBeforeModule _ = False---- | Create a name from a string.--mkName :: (Interval, String) -> Parser Name-mkName (i, s) = do- let xs = C.stringNameParts s- mapM_ isValidId xs- unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"- return $ Name (getRange i) xs- where- isValidId Hole = return ()- isValidId (Id y) = do- let x = rawNameToString y- case parse defaultParseFlags [0] (lexer return) x of- ParseOk _ (TokId _) -> return ()- _ -> fail $ "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"-- -- we know that there are no two Ids in a row- alternating (Hole : Hole : _) = False- alternating (_ : xs) = alternating xs- alternating [] = True---- | Create a qualified name from a list of strings-mkQName :: [(Interval, String)] -> Parser QName-mkQName ss = do- xs <- mapM mkName ss- return $ foldr Qual (QName $ last xs) (init xs)--ensureUnqual :: QName -> Parser Name-ensureUnqual (QName x) = return x-ensureUnqual q@Qual{} = parseError' (rStart $ getRange q) "Qualified name not allowed here"---- | Match a particular name.-isName :: String -> (Interval, String) -> Parser ()-isName s (_,s')- | s == s' = return ()- | otherwise = fail $ "expected " ++ s ++ ", found " ++ s'---- | Build a forall pi (forall x y z -> ...)-forallPi :: [LamBinding] -> Expr -> Expr-forallPi bs e = Pi (map addType bs) e---- | Build a telescoping let (let Ds)-tLet :: Range -> [Declaration] -> TypedBindings-tLet r = TypedBindings r . Common.Arg defaultArgInfo . TLet r---- | Converts lambda bindings to typed bindings.-addType :: LamBinding -> TypedBindings-addType (DomainFull b) = b-addType (DomainFree info x) = TypedBindings r $ Common.Arg info $ TBind r [pure x] $ Underscore r Nothing- where r = getRange x--mergeImportDirectives :: [ImportDirective] -> Parser ImportDirective-mergeImportDirectives is = do- i <- foldl merge (return defaultImportDir) is- verifyImportDirective i- where- merge mi i2 = do- i1 <- mi- let err = parseError' (rStart $ getRange i2) "Cannot mix using and hiding module directives"- uh <- case (usingOrHiding i1, usingOrHiding i2) of- (Hiding [], u) -> return u- (u, Hiding []) -> return u- (Using{}, Hiding{}) -> err- (Hiding{}, Using{}) -> err- (Using xs, Using ys) -> return $ Using (xs ++ ys)- (Hiding xs, Hiding ys) -> return $ Hiding (xs ++ ys)- return $ ImportDirective- { importDirRange = fuseRange i1 i2- , usingOrHiding = uh- , renaming = renaming i1 ++ renaming i2- , publicOpen = publicOpen i1 || publicOpen i2 }---- | Check that an import directive doesn't contain repeated names-verifyImportDirective :: ImportDirective -> Parser ImportDirective-verifyImportDirective i =- case filter ((>1) . length)- $ group- $ sort xs- of- [] -> return i- yss -> let Just pos = rStart $ getRange $ head $ concat yss in- parseErrorAt pos $- "Repeated name" ++ s ++ " in import directive: " ++- concat (intersperse ", " $ map (show . head) yss)- where- s = case yss of- [_] -> ""- _ -> "s"- where- xs = names (usingOrHiding i) ++ map renFrom (renaming i)- names (Using xs) = xs- names (Hiding xs) = xs---- | Breaks up a string into substrings. Returns every maximal--- subsequence of zero or more characters distinct from @'.'@.------ > splitOnDots "" == [""]--- > splitOnDots "foo.bar" == ["foo", "bar"]--- > splitOnDots ".foo.bar" == ["", "foo", "bar"]--- > splitOnDots "foo.bar." == ["foo", "bar", ""]--- > splitOnDots "foo..bar" == ["foo", "", "bar"]-splitOnDots :: String -> [String]-splitOnDots "" = [""]-splitOnDots ('.' : s) = [] : splitOnDots s-splitOnDots (c : s) = case splitOnDots s of- p : ps -> (c : p) : ps--prop_splitOnDots = and- [ splitOnDots "" == [""]- , splitOnDots "foo.bar" == ["foo", "bar"]- , splitOnDots ".foo.bar" == ["", "foo", "bar"]- , splitOnDots "foo.bar." == ["foo", "bar", ""]- , splitOnDots "foo..bar" == ["foo", "", "bar"]- ]---- | Returns 'True' iff the name is a valid Haskell (hierarchical)--- module name.-validHaskellModuleName :: String -> Bool-validHaskellModuleName = all ok . splitOnDots- where- -- Checks if a dot-less module name is well-formed.- ok :: String -> Bool- ok [] = False- ok (c : s) =- isUpper c &&- all (\c -> isLower c || c == '_' ||- isUpper c ||- generalCategory c == DecimalNumber ||- c == '\'')- s--{--------------------------------------------------------------------------- Patterns- --------------------------------------------------------------------------}---- | Turn an expression into a left hand side.-exprToLHS :: Expr -> Parser ([Expr] -> [Expr] -> LHS)-exprToLHS e = case e of- WithApp r e es -> LHS <$> exprToPattern e <*> mapM exprToPattern es- _ -> LHS <$> exprToPattern e <*> return []---- | Turn an expression into a pattern. Fails if the expression is not a--- valid pattern.-exprToPattern :: Expr -> Parser Pattern-exprToPattern e =- case e of- Ident x -> return $ IdentP x- App _ e1 e2 -> AppP <$> exprToPattern e1- <*> T.mapM (T.mapM exprToPattern) e2- Paren r e -> ParenP r- <$> exprToPattern e- Underscore r _ -> return $ WildP r- Absurd r -> return $ AbsurdP r- As r x e -> AsP r x <$> exprToPattern e- Dot r (HiddenArg _ e) -> return $ HiddenP r $ fmap (DotP r) e- Dot r e -> return $ DotP r e- Lit l -> return $ LitP l- HiddenArg r e -> HiddenP r <$> T.mapM exprToPattern e- InstanceArg r e -> InstanceP r <$> T.mapM exprToPattern e- RawApp r es -> RawAppP r <$> mapM exprToPattern es- Quote r -> return $ QuoteP r- _ ->- let Just pos = rStart $ getRange e in- parseErrorAt pos $ "Not a valid pattern: " ++ show e--opAppExprToPattern :: OpApp Expr -> Parser Pattern-opAppExprToPattern (SyntaxBindingLambda _ _ _) = parseError "Syntax binding lambda cannot appear in a pattern"-opAppExprToPattern (Ordinary e) = exprToPattern e---- | Turn an expression into a name. Fails if the expression is not a--- valid identifier.-exprToName :: Expr -> Parser Name-exprToName (Ident (QName x)) = return x-exprToName e =- let Just pos = rStart $ getRange e in- parseErrorAt pos $ "Not a valid identifier: " ++ show e--stripSingletonRawApp :: Expr -> Expr-stripSingletonRawApp (RawApp _ [e]) = stripSingletonRawApp e-stripSingletonRawApp e = e--isEqual :: Expr -> Maybe (Expr, Expr)-isEqual e =- case stripSingletonRawApp e of- Equal _ a b -> Just (stripSingletonRawApp a, stripSingletonRawApp b)- _ -> Nothing--maybeNamed :: Expr -> Named_ Expr-maybeNamed e =- case isEqual e of- Just (Ident (QName x), b) -> named (Ranged (getRange x) (nameToRawName x)) b- _ -> unnamed e--patternSynArgs :: [Either Hiding LamBinding] -> Parser [Arg Name]-patternSynArgs = mapM pSynArg- where- pSynArg Left{} = parseError "Absurd patterns are not allowed in pattern synonyms"- pSynArg (Right DomainFull{}) = parseError "Unexpected type signature in pattern synonym argument"- pSynArg (Right (DomainFree a x))- | getHiding a `notElem` [Hidden, NotHidden] = parseError $ show (getHiding a) ++ " arguments not allowed to pattern synonyms"- | getRelevance a /= Relevant = parseError "Arguments to pattern synonyms must be relevant"- | otherwise = return $ Common.Arg a (boundName x)--parsePanic s = parseError $ "Internal parser error: " ++ s ++ ". Please report this as a bug."--{- RHS or type signature -}--data RHSOrTypeSigs- = JustRHS RHS- | TypeSigsRHS Expr- deriving Show--patternToNames :: Pattern -> Parser [(C.ArgInfo, Name)]-patternToNames p =- case p of- IdentP (QName i) -> return [(defaultArgInfo, i)]- WildP r -> return [(defaultArgInfo, C.noName r)]- DotP _ (Ident (QName i)) -> return [(setRelevance Irrelevant defaultArgInfo, i)]- RawAppP _ ps -> concat <$> mapM patternToNames ps- _ -> parseError $- "Illegal name in type signature: " ++ prettyShow p--funClauseOrTypeSigs :: LHS -> RHSOrTypeSigs -> WhereClause -> Parser [Declaration]-funClauseOrTypeSigs lhs mrhs wh = do- -- traceShowM lhs- case mrhs of- JustRHS rhs -> return [FunClause lhs rhs wh]- TypeSigsRHS e -> case wh of- NoWhere -> case lhs of- Ellipsis{} -> parseError "The ellipsis ... cannot have a type signature"- LHS _ _ _ (_:_) -> parseError "Illegal: with in type signature"- LHS _ _ (_:_) _ -> parseError "Illegal: rewrite in type signature"- LHS _ (_:_) _ _ -> parseError "Illegal: with patterns in type signature"- LHS p [] [] [] -> map (\ (x, y) -> TypeSig x y e) <$> patternToNames p- _ -> parseError "A type signature cannot have a where clause"--{--------------------------------------------------------------------------- Tests- --------------------------------------------------------------------------}---- | Test suite.-tests :: IO Bool-tests = runTests "Agda.Syntax.Parser.Parser"- [ quickCheck' prop_splitOnDots- ]-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 11 "<command-line>" #-}-{-# LINE 1 "/usr/local/stow/ghc-7.10.3/lib/ghc-7.10.3/include/ghcversion.h" #-}+ , exprWhereParser+ , tokensParser+ , tests+ ) where++import Control.Monad++import Data.Char+import Data.Functor+import Data.List+import Data.Maybe+import Data.Monoid+import qualified Data.Traversable as T++import Debug.Trace++import Agda.Syntax.Position hiding (tests)+import Agda.Syntax.Parser.Monad+import Agda.Syntax.Parser.Lexer+import Agda.Syntax.Parser.Tokens+import Agda.Syntax.Concrete as C+import Agda.Syntax.Concrete.Pretty ()+import Agda.Syntax.Common+import Agda.Syntax.Fixity+import Agda.Syntax.Notation+import Agda.Syntax.Literal++import Agda.Utils.Either hiding (tests)+import Agda.Utils.Hash+import Agda.Utils.List (spanJust)+import Agda.Utils.Monad+import Agda.Utils.Pretty+import Agda.Utils.QuickCheck+import Agda.Utils.Singleton+import Agda.Utils.TestHelpers+import Agda.Utils.Tuple++import Agda.Utils.Impossible+#include "undefined.h"+import qualified Data.Array as Happy_Data_Array+import qualified GHC.Exts as Happy_GHC_Exts+import Control.Applicative(Applicative(..))+import Control.Monad (ap)++-- parser produced by Happy Version 1.19.5++newtype HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83 = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn9 :: ([Token]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Token])+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: ([Token]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Token])+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: (Token) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Token)+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: (([Pragma], [Declaration])) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (([Pragma], [Declaration]))+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: t13 -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> t13+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: t14 -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> t14+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: t15 -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> t15+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: (()) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (())+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: (Integer) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Integer)+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: (Name) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Name)+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: ([Name]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Name])+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: (Range) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Range)+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: (Arg Name) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Arg Name)+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: ([Arg Name]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Arg Name])+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyIn23 :: ([Arg Name]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn23 #-}+happyOut23 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Arg Name])+happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut23 #-}+happyIn24 :: (QName) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn24 #-}+happyOut24 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (QName)+happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut24 #-}+happyIn25 :: (QName) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn25 #-}+happyOut25 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (QName)+happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut25 #-}+happyIn26 :: (Name) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn26 #-}+happyOut26 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Name)+happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut26 #-}+happyIn27 :: ([Name]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn27 #-}+happyOut27 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Name])+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut27 #-}+happyIn28 :: ([Name]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn28 #-}+happyOut28 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Name])+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut28 #-}+happyIn29 :: (Either [Name] [Expr]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn29 #-}+happyOut29 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Either [Name] [Expr])+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut29 #-}+happyIn30 :: ([WithHiding Name]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn30 #-}+happyOut30 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([WithHiding Name])+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut30 #-}+happyIn31 :: ([String]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn31 #-}+happyOut31 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([String])+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut31 #-}+happyIn32 :: (String) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn32 #-}+happyOut32 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (String)+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut32 #-}+happyIn33 :: ([(Interval, String)]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn33 #-}+happyOut33 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([(Interval, String)])+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut33 #-}+happyIn34 :: (Name) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn34 #-}+happyOut34 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Name)+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut34 #-}+happyIn35 :: (QName) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn35 #-}+happyOut35 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (QName)+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut35 #-}+happyIn36 :: (Expr) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Expr)+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut36 #-}+happyIn37 :: t37 -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> t37+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut37 #-}+happyIn38 :: ([Expr]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Expr])+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut38 #-}+happyIn39 :: ([Expr]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Expr])+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut39 #-}+happyIn40 :: t40 -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> t40+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut40 #-}+happyIn41 :: (Expr) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Expr)+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut41 #-}+happyIn42 :: ([Expr]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Expr])+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut42 #-}+happyIn43 :: t43 -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> t43+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut43 #-}+happyIn44 :: t44 -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> t44+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut44 #-}+happyIn45 :: t45 -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> t45+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut45 #-}+happyIn46 :: (RecordAssignments) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (RecordAssignments)+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut46 #-}+happyIn47 :: (RecordAssignments) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (RecordAssignments)+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut47 #-}+happyIn48 :: (RecordAssignment) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (RecordAssignment)+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut48 #-}+happyIn49 :: (ModuleAssignment) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (ModuleAssignment)+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut49 #-}+happyIn50 :: ([FieldAssignment]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([FieldAssignment])+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut50 #-}+happyIn51 :: ([FieldAssignment]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([FieldAssignment])+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut51 #-}+happyIn52 :: (FieldAssignment) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (FieldAssignment)+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut52 #-}+happyIn53 :: t53 -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> t53+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut53 #-}+happyIn54 :: t54 -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> t54+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut54 #-}+happyIn55 :: ([TypedBindings]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([TypedBindings])+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyIn56 :: (TypedBindings) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (TypedBindings)+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut56 #-}+happyIn57 :: (TypedBindings) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (TypedBindings)+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut57 #-}+happyIn58 :: (TypedBindings) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (TypedBindings)+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut58 #-}+happyIn59 :: ([LamBinding]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([LamBinding])+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut59 #-}+happyIn60 :: (Either ([LamBinding], Hiding) [Expr]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Either ([LamBinding], Hiding) [Expr])+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut60 #-}+happyIn61 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Either Hiding LamBinding])+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut61 #-}+happyIn62 :: (Either [Either Hiding LamBinding] [Expr]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Either [Either Hiding LamBinding] [Expr])+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut62 #-}+happyIn63 :: ((LHS,RHS,WhereClause,Bool)) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ((LHS,RHS,WhereClause,Bool))+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut63 #-}+happyIn64 :: ((LHS,RHS,WhereClause,Bool)) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ((LHS,RHS,WhereClause,Bool))+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut64 #-}+happyIn65 :: ((LHS,RHS,WhereClause,Bool)) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ((LHS,RHS,WhereClause,Bool))+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut65 #-}+happyIn66 :: ([(LHS,RHS,WhereClause,Bool)]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([(LHS,RHS,WhereClause,Bool)])+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut66 #-}+happyIn67 :: ([LamBinding]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn67 #-}+happyOut67 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([LamBinding])+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut67 #-}+happyIn68 :: ([LamBinding]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn68 #-}+happyOut68 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([LamBinding])+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut68 #-}+happyIn69 :: ([LamBinding]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn69 #-}+happyOut69 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([LamBinding])+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut69 #-}+happyIn70 :: ([LamBinding]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn70 #-}+happyOut70 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([LamBinding])+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut70 #-}+happyIn71 :: (Either [LamBinding] [Expr]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn71 #-}+happyOut71 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Either [LamBinding] [Expr])+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut71 #-}+happyIn72 :: (ImportDirective) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn72 #-}+happyOut72 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (ImportDirective)+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut72 #-}+happyIn73 :: ([ImportDirective]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn73 #-}+happyOut73 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([ImportDirective])+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut73 #-}+happyIn74 :: (ImportDirective) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn74 #-}+happyOut74 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (ImportDirective)+happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut74 #-}+happyIn75 :: ((Using, Range)) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn75 #-}+happyOut75 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ((Using, Range))+happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut75 #-}+happyIn76 :: (([ImportedName], Range)) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn76 #-}+happyOut76 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (([ImportedName], Range))+happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut76 #-}+happyIn77 :: (([Renaming] , Range)) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn77 #-}+happyOut77 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (([Renaming] , Range))+happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut77 #-}+happyIn78 :: ([Renaming]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn78 #-}+happyOut78 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Renaming])+happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut78 #-}+happyIn79 :: (Renaming) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn79 #-}+happyOut79 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Renaming)+happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut79 #-}+happyIn80 :: (ImportedName) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn80 #-}+happyOut80 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (ImportedName)+happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut80 #-}+happyIn81 :: (ImportedName) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn81 #-}+happyOut81 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (ImportedName)+happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut81 #-}+happyIn82 :: ([ImportedName]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn82 #-}+happyOut82 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([ImportedName])+happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut82 #-}+happyIn83 :: t83 -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn83 #-}+happyOut83 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> t83+happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut83 #-}+happyIn84 :: (LHS) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn84 #-}+happyOut84 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (LHS)+happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut84 #-}+happyIn85 :: ([Pattern]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn85 #-}+happyOut85 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Pattern])+happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut85 #-}+happyIn86 :: ([Expr]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn86 #-}+happyOut86 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Expr])+happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut86 #-}+happyIn87 :: ([Expr]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn87 #-}+happyOut87 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Expr])+happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut87 #-}+happyIn88 :: (WhereClause) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn88 #-}+happyOut88 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (WhereClause)+happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut88 #-}+happyIn89 :: (ExprWhere) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn89 #-}+happyOut89 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (ExprWhere)+happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut89 #-}+happyIn90 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn90 #-}+happyOut90 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Declaration])+happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut90 #-}+happyIn91 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn91 #-}+happyOut91 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Declaration])+happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut91 #-}+happyIn92 :: ([Arg Declaration]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn92 #-}+happyOut92 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Arg Declaration])+happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut92 #-}+happyIn93 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn93 #-}+happyOut93 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Declaration])+happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut93 #-}+happyIn94 :: (RHSOrTypeSigs) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn94 #-}+happyOut94 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (RHSOrTypeSigs)+happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut94 #-}+happyIn95 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn95 #-}+happyOut95 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut95 #-}+happyIn96 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn96 #-}+happyOut96 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut96 #-}+happyIn97 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn97 #-}+happyOut97 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut97 #-}+happyIn98 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn98 #-}+happyOut98 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut98 #-}+happyIn99 :: ((Name, IsInstance)) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn99 #-}+happyOut99 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ((Name, IsInstance))+happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut99 #-}+happyIn100 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn100 #-}+happyOut100 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut100 #-}+happyIn101 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn101 #-}+happyOut101 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Declaration])+happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut101 #-}+happyIn102 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn102 #-}+happyOut102 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut102 #-}+happyIn103 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn103 #-}+happyOut103 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut103 #-}+happyIn104 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn104 #-}+happyOut104 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut104 #-}+happyIn105 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn105 #-}+happyOut105 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut105 #-}+happyIn106 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn106 #-}+happyOut106 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut106 #-}+happyIn107 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn107 #-}+happyOut107 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut107 #-}+happyIn108 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn108 #-}+happyOut108 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut108 #-}+happyIn109 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn109 #-}+happyOut109 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut109 #-}+happyIn110 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn110 #-}+happyOut110 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut110 #-}+happyIn111 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn111 #-}+happyOut111 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut111 #-}+happyIn112 :: ([Arg Name]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn112 #-}+happyOut112 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Arg Name])+happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut112 #-}+happyIn113 :: ([RString]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn113 #-}+happyOut113 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([RString])+happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut113 #-}+happyIn114 :: ([NamedArg HoleName]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn114 #-}+happyOut114 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([NamedArg HoleName])+happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut114 #-}+happyIn115 :: (NamedArg HoleName) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn115 #-}+happyOut115 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (NamedArg HoleName)+happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut115 #-}+happyIn116 :: (HoleName) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn116 #-}+happyOut116 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (HoleName)+happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut116 #-}+happyIn117 :: (HoleName) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn117 #-}+happyOut117 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (HoleName)+happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut117 #-}+happyIn118 :: (RString) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn118 #-}+happyOut118 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (RString)+happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut118 #-}+happyIn119 :: (Maybe Range) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn119 #-}+happyOut119 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Maybe Range)+happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut119 #-}+happyIn120 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn120 #-}+happyOut120 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Declaration])+happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut120 #-}+happyIn121 :: ([Expr]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn121 #-}+happyOut121 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Expr])+happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut121 #-}+happyIn122 :: ([TypedBindings] -> Parser ModuleApplication) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn122 #-}+happyOut122 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([TypedBindings] -> Parser ModuleApplication)+happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut122 #-}+happyIn123 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn123 #-}+happyOut123 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut123 #-}+happyIn124 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn124 #-}+happyOut124 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut124 #-}+happyIn125 :: (Name) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn125 #-}+happyOut125 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Name)+happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut125 #-}+happyIn126 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn126 #-}+happyOut126 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Declaration])+happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut126 #-}+happyIn127 :: (Declaration) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn127 #-}+happyOut127 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Declaration)+happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut127 #-}+happyIn128 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn128 #-}+happyOut128 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut128 #-}+happyIn129 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn129 #-}+happyOut129 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut129 #-}+happyIn130 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn130 #-}+happyOut130 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut130 #-}+happyIn131 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn131 #-}+happyOut131 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut131 #-}+happyIn132 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn132 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn132 #-}+happyOut132 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut132 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut132 #-}+happyIn133 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn133 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn133 #-}+happyOut133 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut133 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut133 #-}+happyIn134 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn134 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn134 #-}+happyOut134 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut134 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut134 #-}+happyIn135 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn135 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn135 #-}+happyOut135 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut135 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut135 #-}+happyIn136 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn136 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn136 #-}+happyOut136 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut136 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut136 #-}+happyIn137 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn137 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn137 #-}+happyOut137 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut137 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut137 #-}+happyIn138 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn138 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn138 #-}+happyOut138 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut138 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut138 #-}+happyIn139 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn139 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn139 #-}+happyOut139 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut139 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut139 #-}+happyIn140 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn140 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn140 #-}+happyOut140 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut140 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut140 #-}+happyIn141 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn141 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn141 #-}+happyOut141 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut141 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut141 #-}+happyIn142 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn142 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn142 #-}+happyOut142 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut142 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut142 #-}+happyIn143 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn143 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn143 #-}+happyOut143 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut143 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut143 #-}+happyIn144 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn144 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn144 #-}+happyOut144 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut144 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut144 #-}+happyIn145 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn145 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn145 #-}+happyOut145 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut145 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut145 #-}+happyIn146 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn146 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn146 #-}+happyOut146 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut146 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut146 #-}+happyIn147 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn147 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn147 #-}+happyOut147 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut147 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut147 #-}+happyIn148 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn148 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn148 #-}+happyOut148 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut148 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut148 #-}+happyIn149 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn149 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn149 #-}+happyOut149 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut149 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut149 #-}+happyIn150 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn150 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn150 #-}+happyOut150 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut150 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut150 #-}+happyIn151 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn151 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn151 #-}+happyOut151 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut151 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut151 #-}+happyIn152 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn152 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn152 #-}+happyOut152 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut152 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut152 #-}+happyIn153 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn153 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn153 #-}+happyOut153 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut153 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut153 #-}+happyIn154 :: (Pragma) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn154 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn154 #-}+happyOut154 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Pragma)+happyOut154 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut154 #-}+happyIn155 :: ([TypeSignature]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn155 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn155 #-}+happyOut155 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([TypeSignature])+happyOut155 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut155 #-}+happyIn156 :: ([TypeSignature]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn156 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn156 #-}+happyOut156 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([TypeSignature])+happyOut156 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut156 #-}+happyIn157 :: ([Arg TypeSignature]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn157 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn157 #-}+happyOut157 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Arg TypeSignature])+happyOut157 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut157 #-}+happyIn158 :: ([Arg TypeSignature]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn158 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn158 #-}+happyOut158 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Arg TypeSignature])+happyOut158 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut158 #-}+happyIn159 :: (((Maybe (Ranged Induction), Maybe Bool, Maybe (Name, IsInstance)), [Declaration])) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn159 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn159 #-}+happyOut159 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (((Maybe (Ranged Induction), Maybe Bool, Maybe (Name, IsInstance)), [Declaration]))+happyOut159 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut159 #-}+happyIn160 :: ([RecordDirective]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn160 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn160 #-}+happyOut160 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([RecordDirective])+happyOut160 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut160 #-}+happyIn161 :: (RecordDirective) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn161 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn161 #-}+happyOut161 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (RecordDirective)+happyOut161 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut161 #-}+happyIn162 :: (Ranged Bool) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn162 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn162 #-}+happyOut162 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Ranged Bool)+happyOut162 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut162 #-}+happyIn163 :: (Ranged Induction) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn163 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn163 #-}+happyOut163 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Ranged Induction)+happyOut163 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut163 #-}+happyIn164 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn164 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn164 #-}+happyOut164 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Declaration])+happyOut164 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut164 #-}+happyIn165 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn165 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn165 #-}+happyOut165 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Declaration])+happyOut165 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut165 #-}+happyIn166 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn166 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn166 #-}+happyOut166 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Declaration])+happyOut166 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut166 #-}+happyIn167 :: ([Declaration]) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyIn167 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn167 #-}+happyOut167 :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> ([Declaration])+happyOut167 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut167 #-}+happyInTok :: (Token) -> (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83)+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn t13 t14 t15 t37 t40 t43 t44 t45 t53 t54 t83) -> (Token)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x00\x00\x5c\x0b\x5c\x0b\x34\x07\xef\x04\x11\x0b\x00\x00\xbe\x04\x37\x07\x00\x00\x65\x07\x00\x00\x00\x00\x00\x00\x00\x00\x31\x07\x00\x00\x00\x00\x65\x09\xff\x04\x25\x07\xd0\x09\x2c\x07\x00\x00\x00\x00\x00\x00\x23\x07\x00\x00\xfb\x0c\x00\x00\xe4\x0c\x00\x00\x00\x00\x2a\x07\xe4\x0c\x00\x00\x00\x00\x92\x09\x46\x09\x4a\x07\xf9\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x07\x1b\x07\x58\x04\x87\x00\x2e\x07\x5a\x01\xf2\x0a\x28\x07\x00\x00\x1b\x02\x14\x07\xf2\x03\x9b\x0c\x2b\x07\xdd\x06\xf9\x08\x14\x07\x14\x07\x26\x07\x00\x00\x1d\x07\x8a\x01\x1a\x07\x00\x00\x00\x00\xde\x01\xde\x01\x00\x00\x18\x07\x1e\x07\x19\x07\x65\x00\x17\x07\x5c\x07\x08\x07\x06\x07\xe3\x04\x00\x00\x00\x00\xda\x08\xdd\x06\x8d\x08\x7b\x0b\x7b\x0b\x7b\x0b\x00\x00\x1a\x03\xa7\x0a\x7b\x0b\x7b\x0b\x00\x00\x00\x00\x88\x0a\x7b\x0b\x88\x0a\x00\x00\x4f\x01\x05\x07\xe7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\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\x02\x07\xfc\x06\xfc\x06\xf0\x06\xeb\x06\xeb\x06\xeb\x06\xea\x06\xea\x06\xdd\xff\xea\x06\x2f\x00\xe2\x06\xe8\x06\xe6\x06\xe1\x06\x84\x0c\xdb\x06\x8f\x00\xdb\x06\xee\x11\x00\x00\x00\x00\x4e\x08\x88\x0a\x00\x00\xe7\x06\x00\x00\x26\x09\xe1\x07\xd0\x03\x29\x03\x00\x00\x6e\x08\x20\x08\x01\x08\x12\x07\x3b\x0c\xe5\x06\x3b\x0c\xd7\x06\xe3\x04\x22\x07\x21\x07\x52\x06\xba\x08\x88\x0a\xd8\x06\xba\x08\x00\x00\x7b\x0b\x7b\x0b\x87\x00\x88\x0a\x88\x0a\x00\x00\x00\x00\xfa\x06\x7b\x0b\x3b\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x0a\x00\x00\x00\x00\x00\x00\xca\x06\x00\x00\x7b\x0b\xe1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x88\x0a\x88\x0a\xd4\x06\x3b\x0c\xc6\x06\x00\x00\xd1\x06\x00\x00\x00\x00\xbc\x06\x7b\x0b\xc5\x06\xe4\x06\x26\x01\xc3\x06\x00\x00\xe7\xff\x02\x01\x7b\x0b\xc1\x06\xde\x06\xb9\x06\x00\x00\xb4\x06\x00\x00\x7b\x0b\x7b\x0b\x7b\x0b\x00\x00\x7b\x0b\x7b\x0b\x00\x08\x9a\x06\x00\x08\xb6\x07\x97\x07\x3b\x0a\x00\x00\x00\x00\x98\x06\xe8\xff\xa7\x06\xa0\x06\xa0\x06\xa0\x06\xa0\x06\xa0\x06\xa0\x06\xa0\x06\xa0\x06\xa0\x06\x9e\x06\x9c\x06\x9b\x06\x95\x06\x91\x06\x93\x06\x90\x06\x8d\x06\x8e\x06\x8b\x06\x89\x06\x85\x06\x7f\x06\x7f\x06\x80\x06\x7e\x06\x8a\x06\x87\x06\x1c\x0a\xf7\x01\xe0\x05\x00\x00\x00\x00\x76\x06\x00\x00\xc3\x05\x24\x0c\x76\x06\x00\x00\x46\x04\x46\x04\x00\x00\x00\x00\x00\x00\xf2\x00\x00\x00\xf2\x00\xf2\x00\x00\x00\x66\x01\x46\x04\x46\x04\x00\x00\x00\x00\x00\x00\x52\x06\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x03\xa9\x06\xa6\x06\x00\x00\x00\x00\x00\x00\x7b\x0b\x7b\x0b\x75\x06\xde\x01\x78\x06\x72\x06\xde\x01\x6f\x06\x61\x00\x00\x00\xe3\x04\x00\x00\x00\x00\x1c\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x0a\x00\x00\x00\x00\xdb\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x06\x67\x06\x00\x00\x00\x00\x00\x00\x00\x00\x46\x04\xea\xff\x46\x04\xe4\xff\x00\x00\x17\x03\x6c\x06\x00\x00\x68\x00\x5d\x06\xcc\x00\xa8\x01\xd6\xff\xd6\xff\xf2\x00\x00\x00\x00\x00\x00\x00\x8c\x06\xdc\xff\x46\x04\xdb\x0b\x35\x01\xbe\x06\x00\x00\x63\x06\x61\x06\x00\x00\x68\x00\xe0\xff\x7b\x0b\x75\x01\x00\x00\x00\x00\x00\x00\x5b\x06\xaf\xff\xaf\xff\x00\x00\x00\x00\x1c\x0a\x1c\x0a\x00\x00\x00\x00\x4d\x06\x00\x00\x49\x06\x47\x06\x48\x06\x00\x00\x00\x00\x00\x00\x46\x06\x44\x06\x00\x00\x41\x06\x00\x00\x40\x06\x3f\x06\x3a\x06\x3b\x06\x37\x06\x34\x06\x34\x06\x34\x06\x32\x06\x30\x06\x30\x06\x29\x06\x26\x06\x11\x06\x00\x00\x03\x06\x03\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x00\xe1\x01\x9d\x00\xe1\x01\x00\x00\x0a\x06\xd1\x09\x00\x00\xd1\x09\xb2\x09\x00\x00\x00\x00\x00\x00\x0e\x06\x00\x06\x00\x00\x0d\x06\xe3\x04\x00\x00\x35\x01\xb2\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x00\x00\x00\x00\x00\x00\x01\x06\x00\x00\xfa\x05\xf4\x05\x00\x00\xec\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x09\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x05\xe8\x05\xe4\x05\xdf\x05\xdf\x05\xdc\x05\xdb\x05\xd5\x05\x00\x00\xca\x05\xc9\x05\xc7\x05\x00\x00\x00\x00\x86\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x05\xd6\x05\xec\x00\x8c\x05\xd2\x05\xb5\xff\x00\x00\xbe\x05\xa0\x00\xc0\x05\xb2\x09\x00\x00\xb6\x05\xb2\x09\xb2\x09\xe5\x00\x00\x00\x00\x00\xb2\x05\x96\x05\xe3\x04\x96\x05\x00\x00\xd6\xff\xad\x05\x97\x05\xe5\x00\x00\x00\x97\x05\x97\x05\x97\x05\x97\x05\x00\x00\x00\x00\x66\x01\xb2\x09\x00\x00\x93\x05\xb2\x09\x00\x00\x93\x05\xb2\x09\x00\x00\x00\x00\x00\x00\x35\x01\x00\x00\xb8\x05\x00\x00\xb4\x05\x00\x00\x00\x00\x00\x00\x90\x05\xe5\x00\x89\x05\xe5\x00\x17\x03\x17\x03\x00\x00\x00\x00\xc4\x0b\x35\x01\x00\x00\xe3\x04\x35\x01\x00\x00\x00\x00\x00\x00\xaf\x05\x00\x00\x23\x05\x80\x05\x00\x00\x8b\x05\x8a\x05\xaf\xff\x00\x00\x85\x05\x84\x05\xaf\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x05\x71\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xf7\xff\x01\x00\x00\x00\x00\x00\x81\x05\x79\x05\x00\x00\x6c\x05\x6c\x05\x75\x05\x7e\x05\x91\x05\x00\x00\x00\x00\x69\x05\x00\x00\x00\x00\x5b\x05\x00\x00\x65\x05\x65\x05\x5c\x05\x60\x05\x60\x05\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x52\x05\x00\x00\x00\x00\x56\x05\x00\x00\x4e\x05\x00\x00\x35\x01\x00\x00\x00\x00\x71\x06\x00\x00\x00\x00\x17\x03\x17\x03\x17\x03\x17\x03\x4d\x05\x4d\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\x00\x00\x00\x00\xed\x05\x00\x00\x00\x00\x00\x00\x88\x05\x4c\x05\x2f\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x05\x20\x05\x6e\x05\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x1d\x05\x00\x00\x1f\x05\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\xb4\x04\xd0\x11\xb9\x02\x7d\x05\xb6\x02\x42\x02\x7a\x05\x77\x05\x00\x00\x00\x00\x2a\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x06\x21\x05\x00\x00\x18\x01\xd7\x04\x00\x00\x00\x00\x00\x00\x66\x05\x00\x00\x37\x01\x00\x00\x3c\x03\x00\x00\x00\x00\x27\x05\x7e\x03\x00\x00\x00\x00\x39\x03\xb4\x11\xdc\x0e\x98\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x00\x1e\x05\x00\x00\x00\x00\x7c\x11\x00\x00\x00\x00\x7f\x04\x00\x00\x00\x00\x7e\x03\xc1\x03\x95\x0d\xd9\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x05\x5f\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x04\xa5\x01\x00\x00\x00\x00\x46\x0d\x6d\x0d\xb7\x0d\x76\x04\xc0\x0e\xb9\x0e\x00\x00\x00\x00\xbe\x01\xa1\x0e\x9a\x0e\x00\x00\x00\x00\x60\x11\xf7\x11\x44\x11\x00\x00\xf9\xff\x00\x04\x62\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x04\x54\x05\x53\x05\xbf\x04\x37\x05\x26\x05\xaa\x04\x91\x04\x21\x04\x22\x00\x1e\x04\xa5\x01\xa7\x04\x1c\x04\x19\x04\x0b\x04\xb2\x00\x9b\x04\x7a\x04\x71\x04\x00\x00\x00\x00\x00\x00\x5b\x07\x28\x11\x00\x00\x00\x00\x00\x00\xdf\x06\x00\x00\x60\x00\x38\x00\x00\x00\xbe\x01\x1e\x0e\x8c\x00\x54\x04\xda\x02\x00\x00\x4b\x02\x00\x00\x30\x02\x00\x00\x00\x00\x38\x03\x1f\x07\x0c\x11\x00\x00\xb8\x06\x00\x00\x82\x0e\x7b\x0e\x4f\x04\xf0\x10\xd4\x10\x00\x00\x00\x00\x3c\x04\xec\x11\x6c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x07\x69\x04\x00\x00\x00\x00\x00\x00\x00\x00\x68\x04\x9c\x10\x80\x10\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x01\xd5\x02\x18\x04\x11\x04\x00\x00\x00\x00\x00\x00\x2b\x04\x14\x04\xc8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x04\x63\x0e\x5c\x0e\x00\x00\x44\x0e\x3d\x0e\x82\x06\x00\x00\x18\x06\xbe\x01\x10\x06\x25\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x04\x38\x04\x2e\x04\x29\x04\x22\x04\x0e\x04\x0c\x04\x08\x04\x05\x04\xf7\x03\x00\x00\x00\x00\x00\x00\x00\x00\xee\x03\xc2\x03\xe5\x03\x00\x00\x00\x00\x00\x00\xb8\x03\xd7\x03\xb9\x03\x00\x00\x52\x04\x00\x00\x00\x00\x64\x10\x1d\x04\xba\x05\x00\x00\x00\x00\x04\x00\x00\x00\x9b\x01\xaf\x00\xa3\x03\x00\x00\x55\x05\x25\x04\x00\x00\x00\x00\x00\x00\x67\x02\x00\x00\xc0\x01\x33\x01\x00\x00\xfb\xff\x9c\x03\x40\x03\x00\x00\x00\x00\x00\x00\xaf\x02\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x05\x41\x05\x00\x00\x94\x03\x00\x00\x00\x00\x87\x03\x00\x00\x00\x00\x00\x00\x6f\x01\x00\x00\x00\x00\x48\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x10\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x03\xa6\x03\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x02\x00\x00\xb0\x02\x00\x00\x00\x00\x31\x04\x00\x00\x00\x00\x27\x04\xf2\x02\x00\x00\x78\x03\x13\x03\x8e\x02\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x02\xa8\x00\x8b\x08\xdc\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x10\x04\x00\x00\xfb\x0d\xe2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x03\x60\x03\x00\x00\x00\x00\x10\x10\xf4\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x03\x00\x00\x63\x03\x5e\x03\x53\x03\x3d\x03\x2f\x03\xeb\x02\xb1\x02\x00\x00\x00\x00\xaa\x02\x00\x00\xa3\x02\x79\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x02\x00\x00\x68\x02\x00\x00\x00\x00\x15\x01\x00\x00\x06\x00\xd8\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x03\x00\x00\x15\x07\xbc\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x02\x3d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x01\x00\x00\x00\x00\xc4\x01\x00\x00\x57\x00\x00\x00\xa6\x01\x84\x0f\x00\x00\xce\x00\x68\x0f\x4c\x0f\x23\x02\x00\x00\x00\x00\x00\x00\x0d\x03\x2b\x00\x88\x02\x00\x00\x02\x02\x00\x00\xfe\x01\xdc\x01\x00\x00\x9a\x03\x58\x03\x3a\x03\xe1\x02\x00\x00\x00\x00\x3c\x00\x30\x0f\x00\x00\x45\x02\x14\x0f\x00\x00\x2e\x02\xf8\x0e\x00\x00\x00\x00\x00\x00\x7c\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x01\x00\x00\xd0\x01\x17\x04\xf0\x03\x00\x00\x00\x00\x42\x00\x17\x05\x00\x00\x27\x00\x4d\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x01\x72\x01\x00\x00\x00\x00\x00\x00\x4e\x02\x00\x00\x00\x00\x00\x00\x25\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x01\xbf\x01\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x01\xc2\x01\x00\x00\x00\x00\x00\x00\xb9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x01\x42\x01\x00\x00\x34\x01\xf6\x00\x00\x00\x00\x00\xe7\x01\x00\x00\x00\x00\x00\x00\x53\x01\x00\x00\x6e\x01\x00\x00\x00\x00\x8b\x00\x00\x00\x84\x00\x00\x00\xd7\x02\x00\x00\x00\x00\xdc\x0e\x00\x00\x00\x00\xc6\x03\x7c\x03\x44\x03\xf6\x02\x39\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\x00\x00\x00\x00\x00\x26\x02\x00\x00\x00\x00\x00\x00\x9a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x5e\x00\xa3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xf7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\xff\x70\xff\x49\xff\xd0\xfe\x5c\xff\x5a\xff\x59\xff\x56\xff\x00\x00\x36\xff\x35\xff\x53\xff\xae\xfe\x00\x00\x00\x00\x00\x00\x45\xff\x43\xff\x41\xff\x00\x00\x42\xff\x00\x00\x44\xff\x00\x00\x40\xff\x3f\xff\xd4\xfe\x00\x00\x46\xff\x47\xff\x00\x00\x00\x00\x00\x00\x00\x00\x88\xff\x71\xff\x48\xff\x70\xff\x6f\xff\x00\x00\x00\x00\x80\xfe\xce\xfe\x5d\xff\x00\x00\x00\x00\x00\x00\x27\xff\x25\xff\x00\x00\x00\x00\x00\x00\x80\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\xff\x00\x00\x69\xff\x00\x00\x4a\xff\x3b\xff\x00\x00\x00\x00\x85\xff\x00\x00\x00\x00\x00\x00\x68\xff\x00\x00\x00\x00\x00\x00\x00\x00\x81\xfe\x3c\xff\x39\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\xff\x00\x00\x80\xfe\x00\x00\x00\x00\x28\xff\x60\xff\x00\x00\x00\x00\x00\x00\xca\xfe\x00\x00\x00\x00\x25\xfe\xc8\xfe\xc7\xfe\xc6\xfe\xc5\xfe\xc4\xfe\xc3\xfe\xc9\xfe\xc2\xfe\xc1\xfe\xc0\xfe\xbf\xfe\xbe\xfe\xbd\xfe\xbc\xfe\xb5\xfe\xb7\xfe\xb6\xfe\xbb\xfe\xba\xfe\xb9\xfe\x90\xff\xb8\xfe\x72\xfe\x58\xfe\x71\xfe\x70\xfe\x6f\xfe\x6e\xfe\x6c\xfe\x6b\xfe\x6d\xfe\x6a\xfe\x69\xfe\x68\xfe\x67\xfe\x66\xfe\x65\xfe\x64\xfe\x63\xfe\x5a\xfe\x5d\xfe\x5e\xfe\x5f\xfe\x5c\xfe\x5b\xfe\x62\xfe\x61\xfe\x60\xfe\x59\xfe\x23\xfe\x73\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\xff\xf5\xfe\x0b\xff\x00\x00\x4e\xff\x00\x00\x16\xff\x13\xff\x0c\xff\x00\x00\x00\x00\x6d\xff\x80\xfe\x00\x00\x00\x00\xd0\xfe\x00\x00\x51\xff\x4d\xff\x00\x00\x34\xff\x00\x00\x00\x00\x80\xfe\xfa\xfe\x00\x00\x00\x00\xfb\xfe\xf6\xfe\x00\x00\x00\x00\xce\xfe\x00\x00\x00\x00\x58\xff\x4c\xff\xd2\xfe\x00\x00\x00\x00\xf8\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xf1\xff\xf0\xff\xef\xff\xee\xff\xed\xff\xec\xff\xeb\xff\xea\xff\xe9\xff\xe8\xff\xe7\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xe0\xff\xdf\xff\xde\xff\xdd\xff\xdc\xff\xdb\xff\xda\xff\xd9\xff\xd8\xff\xd7\xff\xd6\xff\xd5\xff\xd4\xff\xd3\xff\xd2\xff\xd1\xff\xd0\xff\xcf\xff\xce\xff\xcd\xff\xcc\xff\xcb\xff\xca\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xbb\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xb4\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\xae\xff\xad\xff\xac\xff\xab\xff\xaa\xff\xa9\xff\xa8\xff\xa7\xff\xa6\xff\xa5\xff\xa4\xff\xa3\xff\xa2\xff\xa1\xff\xa0\xff\x9f\xff\x9e\xff\x9d\xff\x9c\xff\x9b\xff\x9a\xff\x99\xff\x98\xff\x97\xff\x96\xff\x95\xff\x94\xff\x93\xff\x92\xff\x3a\xff\xcf\xfe\xd6\xfe\x00\x00\xb0\xfe\xaf\xfe\xb1\xfe\x6a\xff\x69\xff\x53\xff\x00\x00\xfd\xfe\xfe\xfe\x55\xff\xfc\xfe\x00\x00\x00\x00\x00\x00\x70\xff\x7c\xfe\x00\x00\x33\xff\x32\xff\x2f\xff\x30\xff\x2d\xff\x00\x00\xd4\xfe\xd2\xfe\x05\xff\x00\x00\xff\xfe\x00\x00\x00\x00\x00\x00\x09\xff\x00\x00\x08\xff\x68\xff\x0a\xff\xf4\xfe\x00\x00\x00\x00\x00\x00\xf3\xfe\x00\x00\x00\x00\x12\xff\x0e\xff\x13\xff\x80\xfe\x00\x00\x00\x00\x17\xff\x57\xff\x0d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\xff\x00\x00\x00\x00\x00\x00\x86\xff\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xfe\x9d\xfe\x99\xfe\x00\x00\x9a\xfe\x93\xfe\x7c\xfe\x00\x00\x9f\xfe\xf7\xfe\xf7\xfe\x74\xfe\x9b\xfe\x9c\xfe\x00\x00\x89\xff\x00\x00\x00\x00\xa0\xfe\x00\x00\xf7\xfe\xf7\xfe\x9e\xfe\x91\xff\x8f\xff\x80\xfe\x8c\xff\x8b\xff\x27\xfe\xcd\xfe\x00\x00\x00\x00\x00\x00\x5e\xff\x5b\xff\x5f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\xff\x00\x00\x1e\xff\x3d\xff\x00\x00\x84\xff\x1d\xff\x3e\xff\x1c\xff\x4b\xff\x00\x00\x19\xff\x18\xff\x7c\xfe\x1a\xff\x24\xff\x22\xff\x23\xff\x21\xff\x1f\xff\x20\xff\x00\x00\x00\x00\x28\xfe\x8d\xff\x8e\xff\x26\xfe\xf7\xfe\x00\x00\xf7\xfe\x00\x00\x82\xff\x7e\xff\x00\x00\x37\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\xff\xa3\xfe\xa2\xfe\xa1\xfe\x00\x00\x00\x00\xf7\xfe\x7c\xfe\xea\xfe\x00\x00\x92\xfe\x00\x00\x00\x00\x3a\xfe\x00\x00\x00\x00\x2d\xff\x00\x00\x8f\xfe\x8d\xfe\x88\xfe\x00\x00\x00\x00\x00\x00\x82\xfe\x98\xfe\x00\x00\x00\x00\x87\xff\x43\xfe\x00\x00\x61\xff\x00\x00\x00\x00\x67\xff\x44\xfe\x3d\xfe\x45\xfe\x00\x00\x00\x00\x62\xff\x00\x00\x3e\xfe\x00\x00\x00\x00\x67\xff\x00\x00\x64\xff\x67\xff\x67\xff\x67\xff\x00\x00\x67\xff\x67\xff\x00\x00\x00\x00\x67\xff\x41\xfe\x00\x00\x00\x00\x10\xff\x0f\xff\x11\xff\x15\xff\x14\xff\x00\x00\x00\x00\x00\x00\x00\x00\x04\xff\x00\x00\x00\x00\x4f\xff\x00\x00\x00\x00\xd5\xfe\xd3\xfe\x50\xff\x00\x00\x00\x00\x2c\xff\x2b\xff\x00\x00\x38\xff\xea\xfe\x00\x00\x52\xff\x54\xff\x29\xfe\xf1\xfe\xf2\xfe\xd1\xfe\x29\xff\x2e\xff\xec\xfe\xea\xfe\xe8\xfe\xe7\xfe\xe6\xfe\x00\x00\xe9\xfe\x00\x00\x00\x00\x31\xff\x00\x00\x37\xff\x07\xff\x05\xff\x03\xff\x02\xff\x00\xff\x01\xff\x00\x00\xef\xfe\xf0\xfe\xed\xfe\xee\xfe\x00\x00\x00\x00\x00\x00\x67\xff\x67\xff\x00\x00\x00\x00\x00\x00\x65\xff\x00\x00\x00\x00\x00\x00\x63\xff\x4a\xfe\x00\x00\x40\xfe\x3f\xfe\x47\xfe\x42\xfe\x49\xfe\x66\xff\x57\xfe\x54\xfe\x48\xfe\x96\xfe\x97\xfe\x00\x00\x85\xfe\x00\x00\x00\x00\x85\xfe\x00\x00\x8e\xfe\x00\x00\x70\xff\x00\x00\x00\x00\x3c\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x7e\xfe\x7b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x6c\xff\x80\xff\x00\x00\x00\x00\x00\x00\x83\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xfe\x39\xfe\x00\x00\x00\x00\x7f\xff\x00\x00\x00\x00\xf9\xfe\x00\x00\x00\x00\xf8\xfe\xcc\xfe\xcb\xfe\xea\xfe\x7f\xfe\x00\x00\xaa\xfe\xa9\xfe\xab\xfe\xb3\xfe\x38\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x7c\xff\x7a\xff\x81\xff\x75\xfe\x7c\xfe\xea\xfe\x76\xfe\x00\x00\xea\xfe\x94\xfe\xb4\xfe\x3b\xfe\xa6\xfe\xa7\xfe\x33\xfe\x95\xfe\x91\xfe\x00\x00\x00\x00\x00\x00\x8b\xfe\x00\x00\x00\x00\x00\x00\x8c\xfe\x46\xfe\x4c\xfe\x50\xfe\x4d\xfe\x52\xfe\x4e\xfe\x51\xfe\x00\x00\x00\x00\x53\xfe\x55\xfe\x56\xfe\x06\xff\x2a\xff\xda\xfe\x8a\xff\xda\xfe\xeb\xfe\xdc\xfe\xd8\xfe\x00\x00\xd9\xfe\x00\x00\x00\x00\x00\x00\xe0\xfe\x00\x00\x8a\xff\xe2\xfe\x00\x00\x4f\xfe\x4b\xfe\x00\x00\x85\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xfe\x30\xfe\x00\x00\x31\xfe\x2e\xfe\x2f\xfe\x00\x00\x2a\xfe\x00\x00\x2d\xfe\x2b\xfe\x00\x00\x2c\xfe\x00\x00\x7d\xfe\xea\xfe\x78\xfe\x79\xfe\x00\x00\x7b\xff\x7d\xff\x76\xff\x78\xff\x72\xff\x74\xff\x00\x00\x00\x00\xac\xfe\xad\xfe\x75\xff\x73\xff\x79\xff\x77\xff\x00\x00\x77\xfe\xa8\xfe\x80\xfe\xa5\xfe\x34\xfe\x36\xfe\x80\xfe\x00\x00\x00\x00\x89\xfe\x84\xfe\x83\xfe\x8a\xfe\xe5\xfe\x00\x00\x00\x00\x8a\xff\xe3\xfe\xde\xfe\xdb\xfe\xe4\xfe\x00\x00\xd7\xfe\xe1\xfe\xdf\xfe\xdd\xfe\x86\xfe\x87\xfe\x32\xfe\x00\x00\x00\x00\x7a\xfe\x00\x00\x35\xfe\xa4\xfe"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x05\x00\x09\x00\x54\x00\x09\x00\x09\x00\x51\x00\x0c\x00\x2c\x00\x0e\x00\x13\x00\x0f\x00\x2c\x00\x09\x00\x0a\x00\x09\x00\x2c\x00\x62\x00\x00\x00\x09\x00\x13\x00\x0f\x00\x2c\x00\x62\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x05\x00\x09\x00\x4d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\x50\x00\x45\x00\x51\x00\x4f\x00\x09\x00\x0f\x00\x10\x00\x4f\x00\x09\x00\x4e\x00\x0f\x00\x10\x00\x62\x00\x4f\x00\x0f\x00\x10\x00\x36\x00\x37\x00\x38\x00\x62\x00\x63\x00\x09\x00\x13\x00\x2a\x00\x2b\x00\x09\x00\x5f\x00\x4b\x00\x0c\x00\x11\x00\x0e\x00\x09\x00\x64\x00\x51\x00\x53\x00\x58\x00\x54\x00\x0f\x00\x56\x00\x57\x00\x58\x00\x59\x00\x52\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\x62\x00\x22\x00\x23\x00\x24\x00\x09\x00\x00\x00\x09\x00\x6e\x00\x6f\x00\x0b\x00\x74\x00\x72\x00\x73\x00\x5e\x00\x11\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x09\x00\x53\x00\x95\x00\x62\x00\x63\x00\x8d\x00\x0f\x00\x09\x00\x74\x00\x93\x00\x71\x00\x9d\x00\x13\x00\x0f\x00\x71\x00\x9b\x00\x9c\x00\x13\x00\x14\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\x70\x00\x2c\x00\x09\x00\x50\x00\x4e\x00\x0f\x00\x09\x00\x58\x00\x0f\x00\x09\x00\x30\x00\x58\x00\x0f\x00\x68\x00\x09\x00\x0f\x00\x36\x00\x37\x00\x6d\x00\x39\x00\x5e\x00\x5f\x00\x11\x00\x12\x00\x22\x00\x23\x00\x24\x00\x22\x00\x23\x00\x24\x00\x4b\x00\x22\x00\x23\x00\x24\x00\x09\x00\x23\x00\x51\x00\x09\x00\x0a\x00\x54\x00\x0f\x00\x56\x00\x57\x00\x58\x00\x59\x00\x50\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\x4f\x00\x22\x00\x23\x00\x24\x00\x50\x00\x62\x00\x09\x00\x6e\x00\x6f\x00\x55\x00\x0b\x00\x72\x00\x73\x00\x5c\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x09\x00\x70\x00\x8d\x00\x96\x00\x70\x00\x09\x00\x0f\x00\x09\x00\x70\x00\x52\x00\x09\x00\x9d\x00\x9e\x00\x0f\x00\x59\x00\x9b\x00\x5b\x00\x09\x00\x11\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\x70\x00\x09\x00\x51\x00\x09\x00\x5a\x00\x09\x00\x5c\x00\x4f\x00\x51\x00\x11\x00\x12\x00\x0f\x00\x2f\x00\x29\x00\x2a\x00\x2b\x00\x36\x00\x37\x00\x38\x00\x62\x00\x5c\x00\x4e\x00\x1c\x00\x3a\x00\x3b\x00\x62\x00\x3d\x00\x3e\x00\x22\x00\x05\x00\x4b\x00\x23\x00\x48\x00\x49\x00\x4a\x00\x5c\x00\x51\x00\x2b\x00\x5f\x00\x54\x00\x6d\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\x4f\x00\x10\x00\x09\x00\x09\x00\x48\x00\x49\x00\x4a\x00\x6e\x00\x6f\x00\x0f\x00\x10\x00\x72\x00\x73\x00\x5c\x00\x09\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x51\x00\x6d\x00\x8d\x00\x09\x00\x09\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x0f\x00\x07\x00\x9d\x00\x11\x00\x53\x00\x09\x00\x6d\x00\x56\x00\x62\x00\x4c\x00\x4d\x00\x0f\x00\x10\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x59\x00\x07\x00\x5b\x00\x48\x00\x6d\x00\x4a\x00\x50\x00\x07\x00\x09\x00\x62\x00\x09\x00\x2f\x00\x09\x00\x57\x00\x0f\x00\x59\x00\x34\x00\x5b\x00\x11\x00\x12\x00\x15\x00\x9b\x00\x9c\x00\x09\x00\x62\x00\x3d\x00\x3e\x00\x50\x00\x0b\x00\x1e\x00\x1f\x00\x20\x00\x6d\x00\x22\x00\x23\x00\x24\x00\x0b\x00\x5a\x00\x4b\x00\x5c\x00\x0b\x00\x45\x00\x46\x00\x47\x00\x51\x00\x05\x00\x06\x00\x54\x00\x31\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\x59\x00\x67\x00\x5b\x00\x45\x00\x46\x00\x47\x00\x09\x00\x6e\x00\x6f\x00\x62\x00\x09\x00\x72\x00\x73\x00\x0c\x00\x0d\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x6e\x00\x6f\x00\x0b\x00\x09\x00\x4f\x00\x6d\x00\x98\x00\x99\x00\x9a\x00\x0f\x00\x09\x00\x9d\x00\x5a\x00\x09\x00\x5c\x00\x5a\x00\x96\x00\x5c\x00\x11\x00\x0f\x00\x10\x00\x6d\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\x6a\x00\x6b\x00\x57\x00\x6d\x00\x59\x00\x0f\x00\x5b\x00\x16\x00\x09\x00\x25\x00\x26\x00\x27\x00\x28\x00\x62\x00\x0f\x00\x2b\x00\x2f\x00\x16\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x4c\x00\x4d\x00\x3c\x00\x3d\x00\x3e\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\x4b\x00\x57\x00\x0b\x00\x59\x00\x09\x00\x5b\x00\x51\x00\x11\x00\x12\x00\x54\x00\x0f\x00\x56\x00\x57\x00\x58\x00\x59\x00\x0b\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\x4b\x00\x22\x00\x23\x00\x24\x00\x6c\x00\x6d\x00\x1a\x00\x6e\x00\x6f\x00\x54\x00\x09\x00\x72\x00\x73\x00\x0c\x00\x0d\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x09\x00\x09\x00\x6c\x00\x6d\x00\x09\x00\x1a\x00\x0f\x00\x09\x00\x16\x00\x11\x00\x09\x00\x9d\x00\x11\x00\x0f\x00\x10\x00\x16\x00\x0f\x00\x9b\x00\x9c\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\x2f\x00\x9b\x00\x9c\x00\x2f\x00\x09\x00\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x0f\x00\x09\x00\x0a\x00\x3c\x00\x3d\x00\x3e\x00\x3c\x00\x3d\x00\x3e\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x4b\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\x51\x00\x16\x00\x0c\x00\x54\x00\x0e\x00\x56\x00\x57\x00\x58\x00\x59\x00\x50\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\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x09\x00\x6e\x00\x6f\x00\x0c\x00\x0d\x00\x72\x00\x73\x00\x9b\x00\x9c\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x09\x00\x09\x00\x09\x00\x0a\x00\x09\x00\x17\x00\x0f\x00\x09\x00\x09\x00\x11\x00\x0f\x00\x9d\x00\x09\x00\x0f\x00\x10\x00\x0c\x00\x11\x00\x0e\x00\x16\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\x0a\x00\x4c\x00\x4d\x00\x26\x00\x27\x00\x28\x00\x2f\x00\x16\x00\x2b\x00\x32\x00\x33\x00\x34\x00\x35\x00\x2f\x00\x59\x00\x57\x00\x5b\x00\x59\x00\x16\x00\x5b\x00\x3d\x00\x3e\x00\x16\x00\x62\x00\x51\x00\x18\x00\x3c\x00\x3d\x00\x3e\x00\x16\x00\x57\x00\x09\x00\x59\x00\x4b\x00\x5b\x00\x09\x00\x94\x00\x09\x00\x0c\x00\x51\x00\x0e\x00\x62\x00\x54\x00\x0f\x00\x56\x00\x57\x00\x58\x00\x59\x00\x0b\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\x0b\x00\x22\x00\x23\x00\x24\x00\x09\x00\x0a\x00\x09\x00\x6e\x00\x6f\x00\x9b\x00\x9c\x00\x72\x00\x73\x00\x09\x00\x11\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x09\x00\x2f\x00\x6c\x00\x6d\x00\x16\x00\x09\x00\x0f\x00\x09\x00\x0c\x00\x1a\x00\x0e\x00\x9d\x00\x15\x00\x0f\x00\x3c\x00\x3d\x00\x3e\x00\x19\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x1a\x00\x31\x00\x00\x00\x01\x00\x02\x00\x6c\x00\x6d\x00\x05\x00\x09\x00\x07\x00\x08\x00\x0c\x00\x0a\x00\x0e\x00\x1a\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x1a\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x18\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x05\x00\x06\x00\x24\x00\x25\x00\x26\x00\x06\x00\x28\x00\x29\x00\x2a\x00\x09\x00\x1a\x00\x09\x00\x51\x00\x1a\x00\x0c\x00\x0f\x00\x0e\x00\x1a\x00\x57\x00\x1a\x00\x59\x00\x15\x00\x5b\x00\x05\x00\x06\x00\x09\x00\x6e\x00\x6f\x00\x06\x00\x62\x00\x1e\x00\x1f\x00\x20\x00\x11\x00\x22\x00\x23\x00\x24\x00\x09\x00\x48\x00\x1a\x00\x0c\x00\x4b\x00\x0e\x00\x4d\x00\x9b\x00\x9c\x00\x1a\x00\x51\x00\x52\x00\x31\x00\x54\x00\x1a\x00\x57\x00\x57\x00\x59\x00\x59\x00\x5b\x00\x5b\x00\x9b\x00\x9c\x00\x5e\x00\x1a\x00\x60\x00\x2f\x00\x62\x00\x63\x00\x1a\x00\x65\x00\x01\x00\x02\x00\x09\x00\x0a\x00\x05\x00\x4d\x00\x07\x00\x08\x00\x3c\x00\x3d\x00\x3e\x00\x4c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x05\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x0b\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x09\x00\x0a\x00\x24\x00\x25\x00\x26\x00\x09\x00\x28\x00\x29\x00\x2a\x00\x09\x00\x0a\x00\x0f\x00\x69\x00\x6a\x00\x6b\x00\x4d\x00\x6d\x00\x15\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x4c\x00\x4d\x00\x1e\x00\x1f\x00\x20\x00\x51\x00\x22\x00\x23\x00\x24\x00\x9b\x00\x9c\x00\x57\x00\x4f\x00\x59\x00\x48\x00\x5b\x00\x4e\x00\x4b\x00\x09\x00\x4d\x00\x9b\x00\x31\x00\x62\x00\x51\x00\x52\x00\x92\x00\x54\x00\x2e\x00\x2f\x00\x57\x00\x09\x00\x59\x00\x08\x00\x5b\x00\x00\x00\x01\x00\x5e\x00\x9b\x00\x60\x00\x9b\x00\x62\x00\x63\x00\x9b\x00\x65\x00\x66\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x9b\x00\x0a\x00\x08\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x08\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x62\x00\x63\x00\x24\x00\x25\x00\x26\x00\x09\x00\x28\x00\x29\x00\x2a\x00\x4f\x00\x50\x00\x0f\x00\x62\x00\x63\x00\x94\x00\x13\x00\x14\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x09\x00\x09\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x9b\x00\x22\x00\x23\x00\x24\x00\x11\x00\x04\x00\x06\x00\x9b\x00\x0b\x00\x48\x00\x0b\x00\x4f\x00\x4b\x00\x09\x00\x4d\x00\x30\x00\x9b\x00\x4c\x00\x51\x00\x52\x00\x55\x00\x54\x00\x4e\x00\x02\x00\x57\x00\x01\x00\x59\x00\x5e\x00\x5b\x00\x62\x00\x03\x00\x13\x00\x62\x00\x60\x00\x2f\x00\x62\x00\x63\x00\x58\x00\x65\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x3c\x00\x3d\x00\x3e\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x58\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x5d\x00\x5d\x00\x24\x00\x25\x00\x26\x00\x09\x00\x28\x00\x29\x00\x2a\x00\x5d\x00\x62\x00\x0f\x00\x5a\x00\x5c\x00\x27\x00\x13\x00\x14\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x58\x00\x62\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x62\x00\x22\x00\x23\x00\x24\x00\x11\x00\x4e\x00\x58\x00\x62\x00\x4e\x00\x48\x00\x58\x00\x61\x00\x4b\x00\x61\x00\x4d\x00\x30\x00\x53\x00\x53\x00\x51\x00\x52\x00\x2c\x00\x54\x00\x53\x00\x53\x00\x57\x00\x2c\x00\x59\x00\x62\x00\x5b\x00\x2c\x00\x5c\x00\x5a\x00\x61\x00\x60\x00\x2f\x00\x62\x00\x63\x00\x5c\x00\x65\x00\x01\x00\x02\x00\x5d\x00\x04\x00\x05\x00\x5d\x00\x07\x00\x08\x00\x3c\x00\x3d\x00\x3e\x00\x62\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x50\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x5c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x4c\x00\x4d\x00\x24\x00\x25\x00\x26\x00\x51\x00\x28\x00\x29\x00\x2a\x00\x62\x00\x09\x00\x57\x00\x0b\x00\x59\x00\x5d\x00\x5b\x00\x0f\x00\x62\x00\x09\x00\x50\x00\x13\x00\x14\x00\x62\x00\x50\x00\x5c\x00\x61\x00\x11\x00\x61\x00\x61\x00\x4c\x00\x4d\x00\x1e\x00\x1f\x00\x20\x00\x51\x00\x22\x00\x23\x00\x24\x00\x48\x00\x61\x00\x57\x00\x4b\x00\x59\x00\x4d\x00\x5b\x00\x61\x00\x61\x00\x51\x00\x52\x00\x30\x00\x54\x00\x62\x00\x64\x00\x57\x00\x61\x00\x59\x00\x2f\x00\x5b\x00\x61\x00\x61\x00\x57\x00\x34\x00\x60\x00\x62\x00\x62\x00\x63\x00\x57\x00\x65\x00\x01\x00\x02\x00\x3d\x00\x3e\x00\x05\x00\x57\x00\x07\x00\x08\x00\x4e\x00\x5c\x00\x53\x00\x50\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x64\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x09\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x64\x00\x24\x00\x25\x00\x26\x00\x08\x00\x28\x00\x29\x00\x2a\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x11\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x64\x00\x09\x00\x1b\x00\x64\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x11\x00\x64\x00\x24\x00\x64\x00\x26\x00\x64\x00\x28\x00\x48\x00\x64\x00\x61\x00\x4b\x00\x64\x00\x4d\x00\x61\x00\x61\x00\x61\x00\x51\x00\x52\x00\x61\x00\x54\x00\x61\x00\x61\x00\x57\x00\x61\x00\x59\x00\x64\x00\x5b\x00\x61\x00\x54\x00\x4f\x00\x2f\x00\x60\x00\x50\x00\x62\x00\x63\x00\x34\x00\x65\x00\x2c\x00\x48\x00\x5d\x00\x4f\x00\x4b\x00\x4c\x00\x4d\x00\x3d\x00\x3e\x00\x09\x00\x51\x00\x52\x00\x5d\x00\x54\x00\x08\x00\x58\x00\x57\x00\x11\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5c\x00\x11\x00\x58\x00\x5c\x00\x2c\x00\x62\x00\x63\x00\x2c\x00\x65\x00\x50\x00\x62\x00\x1b\x00\x50\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x62\x00\x61\x00\x24\x00\x64\x00\x26\x00\x08\x00\x28\x00\x2f\x00\x09\x00\x64\x00\x61\x00\x53\x00\x61\x00\x53\x00\x11\x00\x61\x00\x11\x00\x64\x00\x61\x00\x3b\x00\x64\x00\x3d\x00\x3e\x00\x64\x00\x1b\x00\x64\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x64\x00\x64\x00\x24\x00\x64\x00\x26\x00\x64\x00\x28\x00\x48\x00\x53\x00\x61\x00\x4b\x00\x4c\x00\x4d\x00\x53\x00\x2f\x00\x2f\x00\x51\x00\x52\x00\x2d\x00\x54\x00\x34\x00\x53\x00\x57\x00\x53\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x56\x00\x3d\x00\x3e\x00\x62\x00\x4e\x00\x62\x00\x63\x00\x5c\x00\x65\x00\x50\x00\x48\x00\x5c\x00\x2d\x00\x09\x00\x4c\x00\x4d\x00\x53\x00\x0b\x00\x0b\x00\x51\x00\x52\x00\x11\x00\x54\x00\x5b\x00\x08\x00\x57\x00\x23\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x53\x00\x56\x00\x11\x00\x62\x00\x5d\x00\x62\x00\x63\x00\x16\x00\x65\x00\x5d\x00\x62\x00\x5d\x00\x1b\x00\x5d\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x5d\x00\x2f\x00\x24\x00\x65\x00\x26\x00\x08\x00\x28\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x3b\x00\x11\x00\x3d\x00\x3e\x00\x62\x00\x5d\x00\x58\x00\x5e\x00\x5d\x00\x5d\x00\x09\x00\x1b\x00\x0a\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x11\x00\x4f\x00\x24\x00\x58\x00\x26\x00\x58\x00\x28\x00\x48\x00\x5c\x00\x4f\x00\x5c\x00\x4c\x00\x4d\x00\x5c\x00\x66\x00\x53\x00\x51\x00\x52\x00\x50\x00\x54\x00\x56\x00\x66\x00\x57\x00\x58\x00\x59\x00\x62\x00\x5b\x00\x56\x00\x23\x00\x5d\x00\x2f\x00\x66\x00\x55\x00\x62\x00\x63\x00\x34\x00\x65\x00\x5d\x00\x48\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\x3d\x00\x3e\x00\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\x08\x00\xff\xff\x57\x00\xff\xff\x59\x00\x5a\x00\x5b\x00\x5c\x00\xff\xff\x11\x00\xff\xff\xff\xff\x09\x00\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\x0f\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\x08\x00\x28\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\xff\xff\x28\x00\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\x5a\x00\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\x08\x00\x54\x00\xff\xff\xff\xff\x57\x00\x58\x00\x59\x00\xff\xff\x5b\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\x08\x00\x28\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\x11\x00\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\x1b\x00\x5b\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x62\x00\x24\x00\xff\xff\x26\x00\xff\xff\x28\x00\x48\x00\xff\xff\xff\xff\x4c\x00\x4d\x00\x4d\x00\xff\xff\xff\xff\x51\x00\x51\x00\x52\x00\xff\xff\x54\x00\xff\xff\x57\x00\x57\x00\x59\x00\x59\x00\x5b\x00\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\x60\x00\x62\x00\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\xff\xff\x08\x00\x57\x00\xff\xff\x59\x00\x5a\x00\x5b\x00\x5c\x00\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x62\x00\x63\x00\x16\x00\x65\x00\xff\xff\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\x08\x00\x28\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\x11\x00\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\x1b\x00\x5b\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x62\x00\x24\x00\xff\xff\x26\x00\xff\xff\x28\x00\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\xff\xff\xff\xff\x57\x00\x58\x00\x59\x00\xff\xff\x5b\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\x08\x00\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\x5c\x00\xff\xff\x11\x00\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\x08\x00\x28\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\x11\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\x1b\x00\x5b\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x62\x00\x24\x00\xff\xff\x26\x00\xff\xff\x28\x00\x48\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\xff\xff\xff\xff\x57\x00\x58\x00\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\x08\x00\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\x5c\x00\xff\xff\x11\x00\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\x08\x00\x28\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\x11\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\x1b\x00\x5b\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x62\x00\x24\x00\xff\xff\x26\x00\xff\xff\x28\x00\x48\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\xff\xff\xff\xff\x57\x00\x58\x00\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\x53\x00\x54\x00\x08\x00\x56\x00\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\x08\x00\x28\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\x11\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\x1b\x00\x5b\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x62\x00\x24\x00\xff\xff\x26\x00\xff\xff\x28\x00\x48\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\x48\x00\xff\xff\xff\xff\x4c\x00\x4d\x00\x4d\x00\xff\xff\xff\xff\x51\x00\x51\x00\x52\x00\x08\x00\x54\x00\xff\xff\x57\x00\x57\x00\x59\x00\x59\x00\x5b\x00\x5b\x00\x11\x00\xff\xff\xff\xff\xff\xff\x60\x00\x62\x00\x62\x00\x63\x00\xff\xff\x65\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\x08\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\xff\xff\x28\x00\x48\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\x08\x00\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\x5c\x00\xff\xff\x11\x00\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\x08\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\xff\xff\x28\x00\x48\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\x08\x00\x54\x00\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\x08\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\xff\xff\x28\x00\x48\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\x48\x00\xff\xff\xff\xff\x4b\x00\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\x08\x00\x54\x00\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\x08\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\xff\xff\x28\x00\x48\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x54\x00\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x1b\x00\x65\x00\x1d\x00\x1e\x00\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\x62\x00\x63\x00\x4d\x00\x65\x00\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x1b\x00\x65\x00\x1d\x00\x1e\x00\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\x62\x00\x63\x00\x4d\x00\x65\x00\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x1b\x00\x65\x00\x1d\x00\x1e\x00\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\x62\x00\x63\x00\x4d\x00\x65\x00\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x1b\x00\x65\x00\x1d\x00\x1e\x00\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\x62\x00\x63\x00\x4d\x00\x65\x00\xff\xff\xff\xff\x51\x00\x52\x00\xff\xff\x09\x00\xff\xff\xff\xff\x57\x00\xff\xff\x59\x00\x0f\x00\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\xff\xff\x62\x00\x63\x00\xff\xff\x65\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x09\x00\x31\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\x2b\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x30\x00\xff\xff\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\x0f\x00\x09\x00\x30\x00\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\x30\x00\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\x0f\x00\x09\x00\x30\x00\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\x30\x00\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\x0f\x00\x09\x00\x30\x00\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\x30\x00\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\x0f\x00\x09\x00\x30\x00\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\x30\x00\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\x0f\x00\x09\x00\x30\x00\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\x30\x00\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x30\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xd9\x01\xb4\x01\x7d\x02\xe1\x01\x08\x00\xc6\x02\xe2\x01\x8e\x02\xe3\x01\xe8\x02\x09\x00\x84\x02\x90\x01\xf7\x01\x08\x00\xa0\x02\x04\x02\xdb\x01\x35\x03\xe3\x02\x09\x00\xa3\x02\x04\x02\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x36\x03\x39\x02\x94\x02\x56\x02\x0d\x00\x0e\x00\x5c\x01\x10\x00\x11\x00\x12\x00\x2c\x00\x8f\x02\x26\x02\xa1\x01\x85\x02\x2c\x00\x2d\x00\x9e\x01\xa1\x02\x2c\x00\xb0\x01\x2d\x00\xb7\x02\x2a\x00\xa4\x02\x2d\x00\xb7\x02\x57\x02\x58\x02\x59\x02\x2a\x00\x2b\x00\xb1\x00\x9d\x01\xd9\x02\x3c\x02\xe1\x01\xb1\x01\x13\x00\xe2\x01\x66\x01\xe3\x01\x08\x00\x27\x02\x68\x00\xe4\x01\xe9\x02\x69\x00\x09\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\xf8\x01\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x2a\x00\x10\x00\x11\x00\xf2\x01\x2d\x03\xdb\x01\xb1\x00\x4f\x00\x7a\x00\x4f\x01\xb5\x01\x7b\x00\x7c\x00\xdc\x01\x6a\x01\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x08\x00\xae\x02\xe5\x01\x2a\x00\x2b\x00\x60\x01\x09\x00\x08\x00\x9f\x01\xf9\x01\x02\x03\x4d\x01\x67\x00\x09\x00\xb8\x02\xb1\x01\x0e\x03\x40\x00\x45\x01\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x5b\x01\x0d\x00\x0e\x00\x5c\x01\x10\x00\x11\x00\x12\x00\x08\x00\x04\x03\x68\x00\x08\x00\x5a\xff\xb0\x01\x09\x00\x08\x00\xd1\x01\x09\x00\x08\x00\x44\x00\x5a\xff\x09\x00\xc2\x02\xb1\x00\x09\x00\x5d\x01\x5e\x01\xc3\x02\x5f\x01\xdc\x01\xb1\x01\xeb\x01\x90\x02\x10\x00\x11\x00\xf2\x01\x10\x00\x11\x00\xf2\x01\x13\x00\x10\x00\x11\x00\xf2\x01\x08\x00\x95\x01\x68\x00\x90\x01\xf7\x01\x69\x00\x09\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x94\x01\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\xcd\x01\x10\x00\x11\x00\xf2\x01\x41\x02\x2a\x00\x2e\x03\x4f\x00\x7a\x00\xd8\x00\x34\x03\x7b\x00\x7c\x00\x5e\x02\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x08\x00\x8b\x02\x60\x01\x16\x03\xa7\x02\xde\x02\x09\x00\x08\x00\xf3\x01\xbe\x02\xb1\x00\x9a\x00\x9b\x00\x09\x00\x99\x02\xa2\x01\x9a\x02\x39\x02\xb2\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x56\x02\x0d\x00\x0e\x00\x5c\x01\x10\x00\x11\x00\x12\x00\xde\x02\x3f\x02\xb1\x00\xca\x02\x4f\x02\x4a\x00\x08\x00\x4b\x00\xcd\x01\xbd\x00\xeb\x01\xec\x01\x09\x00\xc9\x00\x3a\x02\x3b\x02\x3c\x02\x57\x02\x58\x02\x5a\x02\x04\x02\x60\x02\xb0\x01\x50\x02\xca\x00\xcb\x00\x2a\x00\xcc\x00\xcd\x00\x51\x02\x19\x03\x13\x00\xc4\x00\xdf\x02\xe0\x02\xe1\x02\x34\x02\x68\x00\x52\x02\xb1\x01\x69\x00\x1c\x03\x6a\x00\x6b\x00\x6c\x00\x6d\x00\xf4\x02\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x69\xff\xe7\x01\x18\x03\x2c\x00\xdf\x02\xe9\x02\xe1\x02\x4f\x00\x7a\x00\x2d\x00\xcf\x01\x7b\x00\x7c\x00\x69\xff\xde\x02\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\xa1\x01\x1d\x03\x60\x01\x08\x00\xb1\x00\xf5\x02\xf6\x02\xf7\x02\xf8\x02\x09\x00\xe3\x02\xf9\x02\xb2\x00\x63\x00\x2c\x00\x1f\x03\x64\x00\x2a\x00\xe8\x01\xe9\x01\x2d\x00\x9b\x01\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\xea\x01\x23\x03\xeb\x01\xdf\x02\x20\x03\x2b\x03\x82\x02\xe3\x02\x08\x00\x2a\x00\xb1\x00\x6d\x01\x27\x03\x01\x02\x09\x00\x02\x02\xf5\x01\x03\x02\xeb\x01\xed\x01\x4b\x00\xb1\x01\x0f\x03\x28\x03\x04\x02\x6f\x01\xcd\x00\x5a\xff\x08\x03\x64\x01\x0d\x00\x0e\x00\xf3\x02\x10\x00\x11\x00\x47\x01\x0a\x03\x5a\xff\x13\x00\x5a\xff\xb3\x02\x2c\x03\xe5\x02\xe6\x02\x68\x00\x1a\x03\x1b\x03\x69\x00\x4e\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\xf4\x02\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x97\x02\xf6\x01\x98\x02\xe4\x02\xe5\x02\xe6\x02\x95\x02\x4f\x00\x7a\x00\x2a\x00\xe1\x01\x7b\x00\x7c\x00\x91\x02\xb5\x02\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x4f\x00\x50\x00\xbb\x02\x08\x00\xcd\x01\xc4\x02\x31\x03\xf7\x02\xf8\x02\x09\x00\xb1\x00\x32\x03\x4a\x00\x50\x01\x4b\x00\x4a\x00\xc0\x02\x4b\x00\xb2\x00\x2d\x00\x51\x01\xc8\x02\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x08\x00\x80\x02\xfe\x01\x01\x02\xff\x01\x02\x02\x09\x00\x03\x02\xd3\x02\x08\x00\x52\x01\x53\x01\x54\x01\x55\x01\x04\x02\x09\x00\x56\x01\xdd\x01\xd4\x02\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x3a\x00\x5d\x00\x8c\x02\xdf\x01\xcd\x00\xd4\x00\x10\x00\x11\x00\xc3\x00\xb1\x00\x13\x00\x5e\x00\x5c\x02\x5f\x00\x08\x00\x60\x00\x68\x00\xeb\x01\xee\x01\x69\x00\x09\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x5e\x02\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x13\x00\x10\x00\x11\x00\x3e\x01\xec\x02\xed\x02\x60\x02\x4f\x00\x7a\x00\x14\x00\xe1\x01\x7b\x00\x7c\x00\x91\x02\x92\x02\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x08\x00\xb1\x00\xf0\x02\xed\x02\xb1\x00\x61\x02\x09\x00\x2c\x00\x62\x02\xb2\x00\x08\x00\x4d\x01\xb2\x00\x2d\x00\x2e\x00\x65\x02\x09\x00\xb1\x01\xaa\x02\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x31\x00\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\xdd\x01\xb1\x01\xac\x02\xdd\x01\x08\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x09\x00\x90\x01\xaf\x02\xa1\x02\xdf\x01\xcd\x00\xa4\x02\xdf\x01\xcd\x00\x38\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x59\x01\x10\x00\x11\x00\xc3\x00\xe1\x01\x68\x00\x66\x02\xe2\x01\x69\x00\x10\x03\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x38\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x15\x03\x49\x02\x4a\x02\x4b\x02\x4c\x02\x4d\x02\xe1\x01\x4f\x00\x7a\x00\x91\x02\x94\x02\x7b\x00\x7c\x00\xb1\x01\xb6\x02\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x08\x00\xb1\x00\x90\x01\xb0\x02\x08\x00\x67\x02\x09\x00\x50\x01\xb1\x00\xb2\x00\x09\x00\xdc\x01\xe1\x01\x2d\x00\x51\x01\xe2\x01\xb2\x00\x11\x03\x69\x02\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\xc2\x00\x10\x00\x11\x00\xc3\x00\x90\x01\xb1\x02\xe8\x01\xe9\x01\x52\x02\x54\x01\x55\x01\xb3\x00\x6a\x02\x56\x01\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xdd\x01\xea\x01\x68\x01\xeb\x01\xba\x01\x6b\x02\xbb\x01\xb8\x00\xb9\x00\x6e\x02\x2a\x00\xbd\x00\x6c\x02\xde\x01\xdf\x01\xcd\x00\x74\x02\x68\x01\x95\x02\x69\x01\x13\x00\x6a\x01\xe1\x01\x9a\x02\x08\x00\xe2\x01\x68\x00\x12\x03\x2a\x00\x69\x00\x09\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\xd2\x01\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\xd5\x01\x10\x00\x11\x00\x54\x00\x90\x01\xb2\x02\xb1\x00\x4f\x00\x7a\x00\xb1\x01\xb9\x02\x7b\x00\x7c\x00\xf1\x01\xb2\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x08\x00\xdd\x01\x7a\x02\x7b\x02\x0c\x02\xe1\x01\x09\x00\x08\x00\xe2\x01\x09\x02\x13\x03\x4d\x01\x4b\x00\x09\x00\xe0\x01\xdf\x01\xcd\x00\x12\x02\x4c\x00\x32\x00\x0b\x00\x4d\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x30\x02\x0d\x00\x0e\x00\x31\x02\x10\x00\x11\x00\x12\x00\x34\x00\x35\x00\x36\x00\x37\x00\x0b\x02\x4e\x00\xdb\x01\x9d\x00\x9e\x00\x7d\x02\x7e\x02\x9f\x00\xe1\x01\xa0\x00\x16\x00\xe2\x01\x80\xfe\x06\x03\x11\x02\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x17\x00\xa5\x00\xa6\x00\xa7\x00\x14\x02\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\x18\x00\x19\x02\x19\x00\x1a\x00\x1b\x00\x1c\x00\xad\x00\x85\x02\x86\x02\x1e\x00\xae\x00\x1f\x00\x32\x02\x20\x00\xaf\x00\xb0\x00\x08\x00\x1b\x02\xe1\x01\xbd\x00\x1c\x02\xe2\x01\x09\x00\x07\x03\x1d\x02\x59\x00\x1e\x02\x6c\x01\x4b\x00\x6d\x01\x9b\x02\x9c\x02\xb1\x00\x4f\x00\x50\x00\x34\x02\x2a\x00\x64\x01\x0d\x00\x0e\x00\xb2\x00\x10\x00\x11\x00\x47\x01\xe1\x01\x21\x00\x1f\x02\xe2\x01\x22\x00\x9e\x02\x23\x00\xb1\x01\xa5\x02\x20\x02\x24\x00\x25\x00\xc0\x01\x26\x00\x21\x02\x59\x00\x27\x00\x5a\x00\x28\x00\x5b\x00\x29\x00\xb1\x01\xa6\x02\xdc\x01\x22\x02\xb1\x00\xdd\x01\x2a\x00\x2b\x00\x23\x02\x2c\x00\x9d\x00\x9e\x00\x90\x01\x07\x02\x9f\x00\x36\x02\xa0\x00\x16\x00\xef\x01\xdf\x01\xcd\x00\x37\x02\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x17\x00\xa5\x00\xa6\x00\xa7\x00\x43\x02\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\x18\x00\x44\x02\x19\x00\x1a\x00\x1b\x00\x1c\x00\xad\x00\x90\x01\x91\x01\x1e\x00\xae\x00\x1f\x00\x08\x00\x20\x00\xaf\x00\xb0\x00\x90\x01\x92\x01\x09\x00\xfc\x01\xfd\x01\xfe\x01\x40\x01\xff\x01\x4b\x00\x01\x03\x49\x02\x4a\x02\x4b\x02\x4c\x02\x4d\x02\xbb\x00\xbc\x00\x64\x01\x0d\x00\x0e\x00\xbd\x00\x10\x00\x11\x00\x47\x01\xb1\x01\xb2\x01\x5e\x00\x44\x01\xcf\x00\x21\x00\xd0\x00\x5a\x01\x22\x00\x94\x01\x23\x00\x96\x01\xbd\x01\x2a\x00\x24\x00\x25\x00\x97\x01\x26\x00\x5b\x00\x37\x00\x27\x00\x9a\x01\x28\x00\xa3\x01\x29\x00\x3f\x00\x07\x00\x24\xfe\x99\x01\xb1\x00\x9d\x01\x2a\x00\x2b\x00\xa1\x01\x2c\x00\x24\xfe\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x1d\x01\x1e\x01\x1f\x01\x20\x01\x21\x01\x22\x01\x23\x01\x24\x01\x25\x01\x26\x01\x27\x01\x28\x01\x29\x01\x2a\x01\x2b\x01\x2c\x01\x2d\x01\x2e\x01\x2f\x01\x30\x01\x31\x01\x32\x01\x33\x01\x34\x01\x35\x01\x36\x01\x37\x01\x38\x01\x39\x01\x3a\x01\x3b\x01\x3c\x01\x3d\x01\x3e\x01\x9d\x00\x9e\x00\xfb\x02\xfc\x02\x9f\x00\xfd\x02\xa0\x00\x16\x00\xa2\x01\x80\xfe\xa5\x01\xfe\x02\xa1\x00\xa2\x00\xa3\x00\xff\x02\x17\x00\xa5\x00\xa6\x00\xa7\x00\x00\x03\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\x18\x00\xa6\x01\x19\x00\x1a\x00\x1b\x00\x1c\x00\xad\x00\x2a\x00\x2b\x00\x1e\x00\xae\x00\x1f\x00\x08\x00\x20\x00\xaf\x00\xb0\x00\xd2\x00\xd3\x00\x09\x00\x2a\x00\x2b\x00\xa7\x01\x40\x00\x41\x00\x03\x03\x49\x02\x4a\x02\x4b\x02\x4c\x02\x4d\x02\xa9\x01\xaa\x01\xb1\x00\x46\x01\x0d\x00\x0e\x00\xab\x01\x10\x00\x11\x00\x47\x01\xb2\x00\xac\x01\xae\x01\xc1\x01\xc8\x01\x21\x00\xc9\x01\x65\x00\x22\x00\xc6\x00\x23\x00\xbe\x01\xc7\x00\xc0\x00\x24\x00\x25\x00\xd0\x00\x26\x00\xd5\x00\xd8\x00\x27\x00\x07\x00\x28\x00\x38\x03\x29\x00\x2a\x00\x2f\x00\xe8\x02\x2a\x00\xb1\x00\xdd\x01\x2a\x00\x2b\x00\x30\x03\x2c\x00\x9d\x00\x9e\x00\xfb\x02\xfc\x02\x9f\x00\xfd\x02\xa0\x00\x16\x00\xf0\x01\xdf\x01\xcd\x00\xfe\x02\xa1\x00\xa2\x00\xa3\x00\xff\x02\x17\x00\xa5\x00\xa6\x00\xa7\x00\x00\x03\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\x18\x00\x31\x03\x19\x00\x1a\x00\x1b\x00\x1c\x00\xad\x00\xb4\x01\xc2\x02\x1e\x00\xae\x00\x1f\x00\x08\x00\x20\x00\xaf\x00\xb0\x00\x18\x03\x2a\x00\x09\x00\x1f\x03\x22\x03\x25\x03\x40\x00\x41\x00\xa8\x02\x49\x02\x4a\x02\x4b\x02\x4c\x02\x4d\x02\x23\x03\x04\x02\xb1\x00\x46\x01\x0d\x00\x0e\x00\x04\x02\x10\x00\x11\x00\x47\x01\xb2\x00\x26\x03\x27\x03\x2a\x00\x2b\x03\x21\x00\x2a\x03\xeb\x02\x22\x00\xec\x02\x23\x00\xbf\x01\xef\x02\xf0\x02\x24\x00\x25\x00\x01\x03\x26\x00\xf2\x02\xf3\x02\x27\x00\x0d\x03\x28\x00\x04\x02\x29\x00\x0e\x03\x0a\x03\xc8\x02\xcd\x02\xb1\x00\xdd\x01\x2a\x00\x2b\x00\x0c\x03\x2c\x00\x9d\x00\x9e\x00\xb4\x01\x34\x03\x9f\x00\xb4\x01\xa0\x00\x16\x00\xfa\x01\xdf\x01\xcd\x00\x2a\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x17\x00\xa5\x00\xa6\x00\xa7\x00\xbb\x02\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\x18\x00\xb5\x02\x19\x00\x1a\x00\x1b\x00\x1c\x00\xad\x00\xbb\x00\xbc\x00\x1e\x00\xae\x00\x1f\x00\xbd\x00\x20\x00\xaf\x00\xb0\x00\x2a\x00\x08\x00\x71\x01\x28\x02\x72\x01\xc2\x02\x73\x01\x09\x00\x04\x02\xb1\x00\xc7\x02\x48\x01\x41\x00\x2a\x00\xcb\x02\xcc\x02\xce\x02\xb2\x00\xcf\x02\xd0\x02\xbb\x00\xbc\x00\x46\x01\x0d\x00\x0e\x00\xbd\x00\x10\x00\x11\x00\x47\x01\x21\x00\xd1\x02\x5e\x00\x22\x00\xcf\x00\x23\x00\xfc\x01\xd2\x02\xd3\x02\x24\x00\x25\x00\x48\x00\x26\x00\x2a\x00\x0e\x02\x27\x00\xd6\x02\x28\x00\x6d\x01\x29\x00\xd7\x02\xd8\x02\xdb\x02\x2a\x02\xb1\x00\x2a\x00\x2a\x00\x2b\x00\xdc\x02\x2c\x00\x9d\x00\x9e\x00\x6f\x01\xcd\x00\x9f\x00\xdd\x02\xa0\x00\x16\x00\x54\x02\x55\x02\x5c\x02\x41\x02\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x17\x00\xa5\x00\xa6\x00\xa7\x00\x0b\x02\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\x18\x00\x08\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xad\x00\x09\x00\x0e\x02\x1e\x00\xae\x00\x1f\x00\x16\x00\x20\x00\xaf\x00\xb0\x00\xdd\x02\x4a\x02\x4b\x02\x4c\x02\x4d\x02\x17\x00\xd3\x00\x0d\x00\x0e\x00\xd4\x00\x10\x00\x11\x00\x12\x00\x64\x02\xb1\x00\x18\x00\x65\x02\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xb2\x00\x0e\x02\x1e\x00\x69\x02\x1f\x00\x0e\x02\x20\x00\x21\x00\x1b\x02\x6e\x02\x22\x00\x0e\x02\x23\x00\x70\x02\x71\x02\x72\x02\x24\x00\x25\x00\x73\x02\x26\x00\x74\x02\x76\x02\x27\x00\x77\x02\x28\x00\x0e\x02\x29\x00\x78\x02\x80\x02\x88\x02\x6d\x01\xb1\x00\x89\x02\x2a\x00\x2b\x00\x2b\x02\x2c\x00\x90\x02\x21\x00\xa9\x01\x9e\x02\x15\x03\x3a\x00\x3b\x00\x6f\x01\xcd\x00\xb1\x00\x24\x00\x25\x00\xb4\x01\x26\x00\x16\x00\xd2\x01\x3c\x00\xb2\x00\x3d\x00\x4a\x00\x3e\x00\x4b\x00\xd4\x01\x17\x00\xd5\x01\xd7\x01\xd8\x01\x2a\x00\x2b\x00\xd9\x01\x2c\x00\x06\x02\x2a\x00\x18\x00\x07\x02\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x2a\x00\x09\x02\x1e\x00\x0b\x02\x1f\x00\x16\x00\x20\x00\xc9\x00\xb1\x00\x0e\x02\x0f\x02\x14\xff\x10\x02\x15\xff\x17\x00\x11\x02\xb2\x00\x0b\x02\x16\x02\x49\x01\x14\x02\xcc\x00\xcd\x00\x0b\x02\x18\x00\x17\x02\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x18\x02\x19\x02\x1e\x00\x1b\x02\x1f\x00\x0b\x02\x20\x00\x21\x00\x11\xff\x25\x02\x8a\x02\x3a\x00\x3b\x00\x0f\xff\x78\x01\x6d\x01\x24\x00\x25\x00\x42\x01\x26\x00\x6e\x01\x10\xff\x3c\x00\x36\x02\x3d\x00\x4a\x00\x3e\x00\x4b\x00\xc2\x00\x6f\x01\xcd\x00\x2a\x00\x3e\x02\x2a\x00\x2b\x00\x3f\x02\x2c\x00\x41\x02\x21\x00\x46\x02\x42\x01\xb1\x00\x3a\x00\x3b\x00\x4b\x01\x4f\x01\x50\x01\x24\x00\x25\x00\xb2\x00\x26\x00\x58\x01\x16\x00\x3c\x00\xd7\x00\x3d\x00\x4a\x00\x3e\x00\x4b\x00\x74\x01\x59\x01\x52\x00\x2a\x00\xc9\x00\x2a\x00\x2b\x00\x53\x00\x2c\x00\x99\x01\x2a\x00\xc9\x00\x18\x00\xc9\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xa9\x01\xc9\x00\x1e\x00\xa5\x01\x1f\x00\x16\x00\x20\x00\x48\x02\x49\x02\x4a\x02\x4b\x02\x4c\x02\x4d\x02\x4c\x01\x17\x00\xcc\x00\xcd\x00\x2a\x00\xc9\x00\xc3\x01\xae\x01\xb4\x01\xc9\x00\xb1\x00\x18\x00\xc4\x01\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xb2\x00\xc7\x01\x1e\x00\xc5\x01\x1f\x00\xc6\x01\x20\x00\x21\x00\xc8\x01\xcd\x01\xcb\x01\x3a\x00\x3b\x00\xcc\x01\xff\xff\x61\x00\x24\x00\x25\x00\x65\x00\x26\x00\xc2\x00\xff\xff\x3c\x00\x54\x00\x3d\x00\x2a\x00\x3e\x00\x64\x00\xd7\x00\xc9\x00\x6d\x01\xff\xff\xd8\x00\x2a\x00\x2b\x00\x75\x01\x2c\x00\x31\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x6f\x01\xcd\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x16\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x4a\x00\x3e\x00\x4b\x00\x00\x00\x17\x00\x00\x00\x00\x00\x08\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x09\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x16\x00\x20\x00\xd3\x00\x0d\x00\x0e\x00\x00\x00\x10\x00\x11\x00\x47\x01\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x4a\x00\x29\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x16\x00\x26\x00\x00\x00\x00\x00\x27\x00\x2a\x02\x28\x00\x00\x00\x29\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x16\x00\x20\x00\x00\x00\x00\x00\x00\x00\xf6\xfe\xf6\xfe\x00\x00\x00\x00\x17\x00\xf6\xfe\x00\x00\xf6\xfe\x00\x00\x00\x00\x00\x00\xf6\xfe\x00\x00\xf6\xfe\x18\x00\xf6\xfe\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\xf6\xfe\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x21\x00\x00\x00\x00\x00\xbb\x00\xbc\x00\x23\x00\x00\x00\x00\x00\xbd\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x71\x01\x27\x00\x72\x01\x28\x00\x73\x01\x29\x00\x62\x01\x00\x00\x00\x00\x00\x00\x63\x01\x2a\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x16\x00\x27\x00\x00\x00\x28\x00\x4a\x00\x29\x00\x4b\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x53\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x16\x00\x20\x00\x00\x00\x00\x00\x00\x00\xbb\x00\xbc\x00\x00\x00\x00\x00\x17\x00\xbd\x00\x00\x00\x12\xff\x00\x00\x00\x00\x00\x00\x71\x01\x00\x00\x72\x01\x18\x00\x73\x01\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x2a\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x27\x00\x66\x01\x28\x00\x00\x00\x29\x00\x8a\x02\x49\x02\x4a\x02\x4b\x02\x4c\x02\x4d\x02\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x16\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x46\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x16\x00\x20\x00\x00\x00\x00\x00\x00\x00\xbb\x00\xbc\x00\x00\x00\x00\x00\x17\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x00\x00\xcf\x00\x18\x00\xd0\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x2a\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x3c\x00\x54\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x16\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x46\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x16\x00\x20\x00\x00\x00\x00\x00\x00\x00\xbb\x00\xbc\x00\x00\x00\x00\x00\x17\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x01\x00\x00\x72\x01\x18\x00\x73\x01\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x2a\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x3c\x00\x54\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x4d\xff\x26\x00\x16\x00\x4d\xff\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x16\x00\x20\x00\x00\x00\x00\x00\x00\x00\xbb\x00\xbc\x00\x00\x00\x00\x00\x17\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x00\x00\xbf\x00\x18\x00\xc0\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x2a\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x21\x00\x00\x00\x00\x00\xbb\x00\xbc\x00\x23\x00\x00\x00\x00\x00\xbd\x00\x24\x00\x25\x00\x16\x00\x26\x00\x00\x00\x5e\x00\x27\x00\xcf\x00\x28\x00\xd0\x00\x29\x00\x17\x00\x00\x00\x00\x00\x00\x00\x63\x01\x2a\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x16\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x16\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x28\x02\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x16\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x16\x00\x26\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x16\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x21\x00\x00\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x16\x00\x26\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x16\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x18\x00\x2c\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x06\x03\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x23\x00\x2c\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x18\x00\x2c\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\xf5\x01\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x23\x00\x2c\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x18\x00\x2c\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x23\x00\x2c\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x18\x00\x2c\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x19\x00\x1a\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x23\x00\x2c\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x08\x00\x00\x00\x00\x00\x27\x00\x00\x00\x28\x00\x09\x00\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x2c\x00\x4c\x00\x32\x00\x0b\x00\x4d\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x08\x00\xc0\x01\x46\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x32\x00\x0b\x00\x43\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\xbf\x01\x08\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x32\x00\x0b\x00\x43\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x34\x00\x35\x00\x36\x00\x37\x00\x48\x00\x09\x00\x00\x00\x00\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x32\x00\x0b\x00\x43\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x34\x00\x35\x00\x36\x00\x37\x00\xbe\x01\x09\x00\x00\x00\x00\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x32\x00\x0b\x00\x43\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x02\x34\x00\x35\x00\x36\x00\x37\x00\x44\x00\x09\x00\x00\x00\x00\x00\x00\x00\x40\x00\x45\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x01\x0d\x00\x0e\x00\x00\x00\x10\x00\x11\x00\x47\x01\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x02\x3b\x02\x3c\x02\x08\x00\x00\x00\x63\x01\x00\x00\x44\x00\x00\x00\x09\x00\x08\x00\x00\x00\x00\x00\x48\x01\x41\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x40\x00\x45\x01\x00\x00\x00\x00\x46\x01\x0d\x00\x0e\x00\x00\x00\x10\x00\x11\x00\x47\x01\x46\x01\x0d\x00\x0e\x00\x08\x00\x10\x00\x11\x00\x47\x01\x00\x00\x00\x00\x09\x00\x08\x00\x48\x00\x00\x00\x2c\x02\x41\x00\x00\x00\x09\x00\x00\x00\x44\x00\x00\x00\x2d\x02\x41\x00\x00\x00\x00\x00\x46\x01\x0d\x00\x0e\x00\x00\x00\x10\x00\x11\x00\x47\x01\x46\x01\x0d\x00\x0e\x00\x08\x00\x10\x00\x11\x00\x47\x01\x00\x00\x00\x00\x09\x00\x08\x00\xbb\x01\x00\x00\x2e\x02\x41\x00\x00\x00\x09\x00\x00\x00\xbc\x01\x00\x00\x2f\x02\x41\x00\x00\x00\x00\x00\x46\x01\x0d\x00\x0e\x00\x00\x00\x10\x00\x11\x00\x47\x01\x46\x01\x0d\x00\x0e\x00\x08\x00\x10\x00\x11\x00\x47\x01\x00\x00\x00\x00\x09\x00\x08\x00\xbe\x01\x00\x00\x40\x00\x45\x01\x00\x00\x09\x00\x00\x00\xbf\x01\x00\x00\x48\x01\x41\x00\x00\x00\x00\x00\x46\x01\x0d\x00\x0e\x00\x00\x00\x10\x00\x11\x00\x47\x01\x46\x01\x0d\x00\x0e\x00\x08\x00\x10\x00\x11\x00\x47\x01\x00\x00\x00\x00\x09\x00\x08\x00\x44\x00\x00\x00\x40\x00\x41\x00\x00\x00\x09\x00\x00\x00\x48\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x46\x01\x0d\x00\x0e\x00\x00\x00\x10\x00\x11\x00\x47\x01\x46\x01\x0d\x00\x0e\x00\x08\x00\x10\x00\x11\x00\x47\x01\x00\x00\x00\x00\x09\x00\x08\x00\x44\x00\x00\x00\x40\x00\x41\x00\x00\x00\x09\x00\x00\x00\x48\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x46\x01\x0d\x00\x0e\x00\x00\x00\x10\x00\x11\x00\x47\x01\x46\x01\x0d\x00\x0e\x00\x00\x00\x10\x00\x11\x00\x47\x01\x08\x00\x00\x00\x46\x00\x00\x00\xbb\x01\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x01\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x01\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x02\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x01\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x01\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x01\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x01\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x01\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x32\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x33\x00\x10\x00\x11\x00\x12\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x3f\x01\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\xb7\x01\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x77\x01\x78\x01\x79\x01\x7a\x01\x7b\x01\x7c\x01\x7d\x01\x7e\x01\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x86\x01\x87\x01\x88\x01\x89\x01\x8a\x01\x8b\x01\x8c\x01\x8d\x01\x8e\x01\x8f\x01\x90\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = Happy_Data_Array.array (6, 476) [+ (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)+ ]++happy_n_terms = 103 :: Int+happy_n_nonterms = 159 :: Int++happyReduce_6 = happySpecReduce_1 0# happyReduction_6+happyReduction_6 happy_x_1+ = case happyOut10 happy_x_1 of { happy_var_1 -> + happyIn9+ (reverse happy_var_1+ )}++happyReduce_7 = happySpecReduce_2 1# happyReduction_7+happyReduction_7 happy_x_2+ happy_x_1+ = case happyOut10 happy_x_1 of { happy_var_1 -> + case happyOut11 happy_x_2 of { happy_var_2 -> + happyIn10+ (happy_var_2 : happy_var_1+ )}}++happyReduce_8 = happySpecReduce_0 1# happyReduction_8+happyReduction_8 = happyIn10+ ([]+ )++happyReduce_9 = happySpecReduce_1 2# happyReduction_9+happyReduction_9 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> + happyIn11+ (TokKeyword KwAbstract happy_var_1+ )}++happyReduce_10 = happySpecReduce_1 2# happyReduction_10+happyReduction_10 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> + happyIn11+ (TokKeyword KwCoData happy_var_1+ )}++happyReduce_11 = happySpecReduce_1 2# happyReduction_11+happyReduction_11 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwCoInductive happy_var_1) -> + happyIn11+ (TokKeyword KwCoInductive happy_var_1+ )}++happyReduce_12 = happySpecReduce_1 2# happyReduction_12+happyReduction_12 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> + happyIn11+ (TokKeyword KwConstructor happy_var_1+ )}++happyReduce_13 = happySpecReduce_1 2# happyReduction_13+happyReduction_13 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> + happyIn11+ (TokKeyword KwData happy_var_1+ )}++happyReduce_14 = happySpecReduce_1 2# happyReduction_14+happyReduction_14 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwEta happy_var_1) -> + happyIn11+ (TokKeyword KwEta happy_var_1+ )}++happyReduce_15 = happySpecReduce_1 2# happyReduction_15+happyReduction_15 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> + happyIn11+ (TokKeyword KwField happy_var_1+ )}++happyReduce_16 = happySpecReduce_1 2# happyReduction_16+happyReduction_16 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> + happyIn11+ (TokKeyword KwForall happy_var_1+ )}++happyReduce_17 = happySpecReduce_1 2# happyReduction_17+happyReduction_17 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> + happyIn11+ (TokKeyword KwHiding happy_var_1+ )}++happyReduce_18 = happySpecReduce_1 2# happyReduction_18+happyReduction_18 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> + happyIn11+ (TokKeyword KwImport happy_var_1+ )}++happyReduce_19 = happySpecReduce_1 2# happyReduction_19+happyReduction_19 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> + happyIn11+ (TokKeyword KwIn happy_var_1+ )}++happyReduce_20 = happySpecReduce_1 2# happyReduction_20+happyReduction_20 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwInductive happy_var_1) -> + happyIn11+ (TokKeyword KwInductive happy_var_1+ )}++happyReduce_21 = happySpecReduce_1 2# happyReduction_21+happyReduction_21 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> + happyIn11+ (TokKeyword KwInfix happy_var_1+ )}++happyReduce_22 = happySpecReduce_1 2# happyReduction_22+happyReduction_22 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> + happyIn11+ (TokKeyword KwInfixL happy_var_1+ )}++happyReduce_23 = happySpecReduce_1 2# happyReduction_23+happyReduction_23 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> + happyIn11+ (TokKeyword KwInfixR happy_var_1+ )}++happyReduce_24 = happySpecReduce_1 2# happyReduction_24+happyReduction_24 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwInstance happy_var_1) -> + happyIn11+ (TokKeyword KwInstance happy_var_1+ )}++happyReduce_25 = happySpecReduce_1 2# happyReduction_25+happyReduction_25 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> + happyIn11+ (TokKeyword KwLet happy_var_1+ )}++happyReduce_26 = happySpecReduce_1 2# happyReduction_26+happyReduction_26 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwMacro happy_var_1) -> + happyIn11+ (TokKeyword KwMacro happy_var_1+ )}++happyReduce_27 = happySpecReduce_1 2# happyReduction_27+happyReduction_27 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> + happyIn11+ (TokKeyword KwModule happy_var_1+ )}++happyReduce_28 = happySpecReduce_1 2# happyReduction_28+happyReduction_28 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> + happyIn11+ (TokKeyword KwMutual happy_var_1+ )}++happyReduce_29 = happySpecReduce_1 2# happyReduction_29+happyReduction_29 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwNoEta happy_var_1) -> + happyIn11+ (TokKeyword KwNoEta happy_var_1+ )}++happyReduce_30 = happySpecReduce_1 2# happyReduction_30+happyReduction_30 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> + happyIn11+ (TokKeyword KwOpen happy_var_1+ )}++happyReduce_31 = happySpecReduce_1 2# happyReduction_31+happyReduction_31 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwPatternSyn happy_var_1) -> + happyIn11+ (TokKeyword KwPatternSyn happy_var_1+ )}++happyReduce_32 = happySpecReduce_1 2# happyReduction_32+happyReduction_32 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> + happyIn11+ (TokKeyword KwPostulate happy_var_1+ )}++happyReduce_33 = happySpecReduce_1 2# happyReduction_33+happyReduction_33 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> + happyIn11+ (TokKeyword KwPrimitive happy_var_1+ )}++happyReduce_34 = happySpecReduce_1 2# happyReduction_34+happyReduction_34 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> + happyIn11+ (TokKeyword KwPrivate happy_var_1+ )}++happyReduce_35 = happySpecReduce_1 2# happyReduction_35+happyReduction_35 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> + happyIn11+ (TokKeyword KwProp happy_var_1+ )}++happyReduce_36 = happySpecReduce_1 2# happyReduction_36+happyReduction_36 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> + happyIn11+ (TokKeyword KwPublic happy_var_1+ )}++happyReduce_37 = happySpecReduce_1 2# happyReduction_37+happyReduction_37 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> + happyIn11+ (TokKeyword KwQuote happy_var_1+ )}++happyReduce_38 = happySpecReduce_1 2# happyReduction_38+happyReduction_38 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteContext happy_var_1) -> + happyIn11+ (TokKeyword KwQuoteContext happy_var_1+ )}++happyReduce_39 = happySpecReduce_1 2# happyReduction_39+happyReduction_39 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> + happyIn11+ (TokKeyword KwQuoteGoal happy_var_1+ )}++happyReduce_40 = happySpecReduce_1 2# happyReduction_40+happyReduction_40 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> + happyIn11+ (TokKeyword KwQuoteTerm happy_var_1+ )}++happyReduce_41 = happySpecReduce_1 2# happyReduction_41+happyReduction_41 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> + happyIn11+ (TokKeyword KwRecord happy_var_1+ )}++happyReduce_42 = happySpecReduce_1 2# happyReduction_42+happyReduction_42 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> + happyIn11+ (TokKeyword KwRenaming happy_var_1+ )}++happyReduce_43 = happySpecReduce_1 2# happyReduction_43+happyReduction_43 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> + happyIn11+ (TokKeyword KwRewrite happy_var_1+ )}++happyReduce_44 = happySpecReduce_1 2# happyReduction_44+happyReduction_44 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> + happyIn11+ (TokKeyword KwSet happy_var_1+ )}++happyReduce_45 = happySpecReduce_1 2# happyReduction_45+happyReduction_45 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwSyntax happy_var_1) -> + happyIn11+ (TokKeyword KwSyntax happy_var_1+ )}++happyReduce_46 = happySpecReduce_1 2# happyReduction_46+happyReduction_46 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> + happyIn11+ (TokKeyword KwTactic happy_var_1+ )}++happyReduce_47 = happySpecReduce_1 2# happyReduction_47+happyReduction_47 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> + happyIn11+ (TokKeyword KwTo happy_var_1+ )}++happyReduce_48 = happySpecReduce_1 2# happyReduction_48+happyReduction_48 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> + happyIn11+ (TokKeyword KwUnquote happy_var_1+ )}++happyReduce_49 = happySpecReduce_1 2# happyReduction_49+happyReduction_49 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDecl happy_var_1) -> + happyIn11+ (TokKeyword KwUnquoteDecl happy_var_1+ )}++happyReduce_50 = happySpecReduce_1 2# happyReduction_50+happyReduction_50 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDef happy_var_1) -> + happyIn11+ (TokKeyword KwUnquoteDef happy_var_1+ )}++happyReduce_51 = happySpecReduce_1 2# happyReduction_51+happyReduction_51 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> + happyIn11+ (TokKeyword KwUsing happy_var_1+ )}++happyReduce_52 = happySpecReduce_1 2# happyReduction_52+happyReduction_52 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> + happyIn11+ (TokKeyword KwWhere happy_var_1+ )}++happyReduce_53 = happySpecReduce_1 2# happyReduction_53+happyReduction_53 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> + happyIn11+ (TokKeyword KwWith happy_var_1+ )}++happyReduce_54 = happySpecReduce_1 2# happyReduction_54+happyReduction_54 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> + happyIn11+ (TokKeyword KwBUILTIN happy_var_1+ )}++happyReduce_55 = happySpecReduce_1 2# happyReduction_55+happyReduction_55 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwCATCHALL happy_var_1) -> + happyIn11+ (TokKeyword KwCATCHALL happy_var_1+ )}++happyReduce_56 = happySpecReduce_1 2# happyReduction_56+happyReduction_56 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> + happyIn11+ (TokKeyword KwCOMPILED happy_var_1+ )}++happyReduce_57 = happySpecReduce_1 2# happyReduction_57+happyReduction_57 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> + happyIn11+ (TokKeyword KwCOMPILED_DATA happy_var_1+ )}++happyReduce_58 = happySpecReduce_1 2# happyReduction_58+happyReduction_58 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA_UHC happy_var_1) -> + happyIn11+ (TokKeyword KwCOMPILED_DATA_UHC happy_var_1+ )}++happyReduce_59 = happySpecReduce_1 2# happyReduction_59+happyReduction_59 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DECLARE_DATA happy_var_1) -> + happyIn11+ (TokKeyword KwCOMPILED_DECLARE_DATA happy_var_1+ )}++happyReduce_60 = happySpecReduce_1 2# happyReduction_60+happyReduction_60 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EPIC happy_var_1) -> + happyIn11+ (TokKeyword KwCOMPILED_EPIC happy_var_1+ )}++happyReduce_61 = happySpecReduce_1 2# happyReduction_61+happyReduction_61 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EXPORT happy_var_1) -> + happyIn11+ (TokKeyword KwCOMPILED_EXPORT happy_var_1+ )}++happyReduce_62 = happySpecReduce_1 2# happyReduction_62+happyReduction_62 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_JS happy_var_1) -> + happyIn11+ (TokKeyword KwCOMPILED_JS happy_var_1+ )}++happyReduce_63 = happySpecReduce_1 2# happyReduction_63+happyReduction_63 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> + happyIn11+ (TokKeyword KwCOMPILED_TYPE happy_var_1+ )}++happyReduce_64 = happySpecReduce_1 2# happyReduction_64+happyReduction_64 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_UHC happy_var_1) -> + happyIn11+ (TokKeyword KwCOMPILED_UHC happy_var_1+ )}++happyReduce_65 = happySpecReduce_1 2# happyReduction_65+happyReduction_65 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwHASKELL happy_var_1) -> + happyIn11+ (TokKeyword KwHASKELL happy_var_1+ )}++happyReduce_66 = happySpecReduce_1 2# happyReduction_66+happyReduction_66 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwDISPLAY happy_var_1) -> + happyIn11+ (TokKeyword KwDISPLAY happy_var_1+ )}++happyReduce_67 = happySpecReduce_1 2# happyReduction_67+happyReduction_67 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> + happyIn11+ (TokKeyword KwIMPORT happy_var_1+ )}++happyReduce_68 = happySpecReduce_1 2# happyReduction_68+happyReduction_68 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT_UHC happy_var_1) -> + happyIn11+ (TokKeyword KwIMPORT_UHC happy_var_1+ )}++happyReduce_69 = happySpecReduce_1 2# happyReduction_69+happyReduction_69 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwIMPOSSIBLE happy_var_1) -> + happyIn11+ (TokKeyword KwIMPOSSIBLE happy_var_1+ )}++happyReduce_70 = happySpecReduce_1 2# happyReduction_70+happyReduction_70 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwINLINE happy_var_1) -> + happyIn11+ (TokKeyword KwINLINE happy_var_1+ )}++happyReduce_71 = happySpecReduce_1 2# happyReduction_71+happyReduction_71 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwMEASURE happy_var_1) -> + happyIn11+ (TokKeyword KwMEASURE happy_var_1+ )}++happyReduce_72 = happySpecReduce_1 2# happyReduction_72+happyReduction_72 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwNO_SMASHING happy_var_1) -> + happyIn11+ (TokKeyword KwNO_SMASHING happy_var_1+ )}++happyReduce_73 = happySpecReduce_1 2# happyReduction_73+happyReduction_73 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwNO_TERMINATION_CHECK happy_var_1) -> + happyIn11+ (TokKeyword KwNO_TERMINATION_CHECK happy_var_1+ )}++happyReduce_74 = happySpecReduce_1 2# happyReduction_74+happyReduction_74 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwNO_POSITIVITY_CHECK happy_var_1) -> + happyIn11+ (TokKeyword KwNO_POSITIVITY_CHECK happy_var_1+ )}++happyReduce_75 = happySpecReduce_1 2# happyReduction_75+happyReduction_75 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwNON_TERMINATING happy_var_1) -> + happyIn11+ (TokKeyword KwNON_TERMINATING happy_var_1+ )}++happyReduce_76 = happySpecReduce_1 2# happyReduction_76+happyReduction_76 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> + happyIn11+ (TokKeyword KwOPTIONS happy_var_1+ )}++happyReduce_77 = happySpecReduce_1 2# happyReduction_77+happyReduction_77 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwREWRITE happy_var_1) -> + happyIn11+ (TokKeyword KwREWRITE happy_var_1+ )}++happyReduce_78 = happySpecReduce_1 2# happyReduction_78+happyReduction_78 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwSTATIC happy_var_1) -> + happyIn11+ (TokKeyword KwSTATIC happy_var_1+ )}++happyReduce_79 = happySpecReduce_1 2# happyReduction_79+happyReduction_79 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwTERMINATING happy_var_1) -> + happyIn11+ (TokKeyword KwTERMINATING happy_var_1+ )}++happyReduce_80 = happySpecReduce_1 2# happyReduction_80+happyReduction_80 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> + happyIn11+ (TokSetN happy_var_1+ )}++happyReduce_81 = happySpecReduce_1 2# happyReduction_81+happyReduction_81 happy_x_1+ = case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> + happyIn11+ (TokTeX happy_var_1+ )}++happyReduce_82 = happySpecReduce_1 2# happyReduction_82+happyReduction_82 happy_x_1+ = case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> + happyIn11+ (TokComment happy_var_1+ )}++happyReduce_83 = happySpecReduce_1 2# happyReduction_83+happyReduction_83 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> + happyIn11+ (TokSymbol SymEllipsis happy_var_1+ )}++happyReduce_84 = happySpecReduce_1 2# happyReduction_84+happyReduction_84 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymDotDot happy_var_1) -> + happyIn11+ (TokSymbol SymDotDot happy_var_1+ )}++happyReduce_85 = happySpecReduce_1 2# happyReduction_85+happyReduction_85 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> + happyIn11+ (TokSymbol SymDot happy_var_1+ )}++happyReduce_86 = happySpecReduce_1 2# happyReduction_86+happyReduction_86 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> + happyIn11+ (TokSymbol SymSemi happy_var_1+ )}++happyReduce_87 = happySpecReduce_1 2# happyReduction_87+happyReduction_87 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> + happyIn11+ (TokSymbol SymColon happy_var_1+ )}++happyReduce_88 = happySpecReduce_1 2# happyReduction_88+happyReduction_88 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> + happyIn11+ (TokSymbol SymEqual happy_var_1+ )}++happyReduce_89 = happySpecReduce_1 2# happyReduction_89+happyReduction_89 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> + happyIn11+ (TokSymbol SymUnderscore happy_var_1+ )}++happyReduce_90 = happySpecReduce_1 2# happyReduction_90+happyReduction_90 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> + happyIn11+ (TokSymbol SymQuestionMark happy_var_1+ )}++happyReduce_91 = happySpecReduce_1 2# happyReduction_91+happyReduction_91 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> + happyIn11+ (TokSymbol SymArrow happy_var_1+ )}++happyReduce_92 = happySpecReduce_1 2# happyReduction_92+happyReduction_92 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> + happyIn11+ (TokSymbol SymLambda happy_var_1+ )}++happyReduce_93 = happySpecReduce_1 2# happyReduction_93+happyReduction_93 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> + happyIn11+ (TokSymbol SymAs happy_var_1+ )}++happyReduce_94 = happySpecReduce_1 2# happyReduction_94+happyReduction_94 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> + happyIn11+ (TokSymbol SymBar happy_var_1+ )}++happyReduce_95 = happySpecReduce_1 2# happyReduction_95+happyReduction_95 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> + happyIn11+ (TokSymbol SymOpenParen happy_var_1+ )}++happyReduce_96 = happySpecReduce_1 2# happyReduction_96+happyReduction_96 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> + happyIn11+ (TokSymbol SymCloseParen happy_var_1+ )}++happyReduce_97 = happySpecReduce_1 2# happyReduction_97+happyReduction_97 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> + happyIn11+ (TokSymbol SymDoubleOpenBrace happy_var_1+ )}++happyReduce_98 = happySpecReduce_1 2# happyReduction_98+happyReduction_98 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> + happyIn11+ (TokSymbol SymDoubleCloseBrace happy_var_1+ )}++happyReduce_99 = happySpecReduce_1 2# happyReduction_99+happyReduction_99 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> + happyIn11+ (TokSymbol SymOpenBrace happy_var_1+ )}++happyReduce_100 = happySpecReduce_1 2# happyReduction_100+happyReduction_100 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> + happyIn11+ (TokSymbol SymCloseBrace happy_var_1+ )}++happyReduce_101 = happySpecReduce_1 2# happyReduction_101+happyReduction_101 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> + happyIn11+ (TokSymbol SymOpenVirtualBrace happy_var_1+ )}++happyReduce_102 = happySpecReduce_1 2# happyReduction_102+happyReduction_102 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> + happyIn11+ (TokSymbol SymCloseVirtualBrace happy_var_1+ )}++happyReduce_103 = happySpecReduce_1 2# happyReduction_103+happyReduction_103 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> + happyIn11+ (TokSymbol SymVirtualSemi happy_var_1+ )}++happyReduce_104 = happySpecReduce_1 2# happyReduction_104+happyReduction_104 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + happyIn11+ (TokSymbol SymOpenPragma happy_var_1+ )}++happyReduce_105 = happySpecReduce_1 2# happyReduction_105+happyReduction_105 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> + happyIn11+ (TokSymbol SymClosePragma happy_var_1+ )}++happyReduce_106 = happySpecReduce_1 2# happyReduction_106+happyReduction_106 happy_x_1+ = case happyOutTok happy_x_1 of { (TokId happy_var_1) -> + happyIn11+ (TokId happy_var_1+ )}++happyReduce_107 = happySpecReduce_1 2# happyReduction_107+happyReduction_107 happy_x_1+ = case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> + happyIn11+ (TokQId happy_var_1+ )}++happyReduce_108 = happySpecReduce_1 2# happyReduction_108+happyReduction_108 happy_x_1+ = case happyOutTok happy_x_1 of { (TokString happy_var_1) -> + happyIn11+ (TokString happy_var_1+ )}++happyReduce_109 = happySpecReduce_1 2# happyReduction_109+happyReduction_109 happy_x_1+ = case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> + happyIn11+ (TokLiteral happy_var_1+ )}++happyReduce_110 = happySpecReduce_3 3# happyReduction_110+happyReduction_110 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut126 happy_x_2 of { happy_var_2 -> + happyIn12+ (takeOptionsPragmas happy_var_2+ )}++happyReduce_111 = happySpecReduce_0 4# happyReduction_111+happyReduction_111 = happyIn13+ (()+ )++happyReduce_112 = happySpecReduce_1 4# happyReduction_112+happyReduction_112 happy_x_1+ = happyIn13+ (()+ )++happyReduce_113 = happySpecReduce_1 5# happyReduction_113+happyReduction_113 happy_x_1+ = happyIn14+ (()+ )++happyReduce_114 = happyMonadReduce 1# 5# happyReduction_114+happyReduction_114 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (( popContext)+ ) (\r -> happyReturn (happyIn14 r))++happyReduce_115 = happySpecReduce_1 6# happyReduction_115+happyReduction_115 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> + happyIn15+ (happy_var_1+ )}++happyReduce_116 = happySpecReduce_1 6# happyReduction_116+happyReduction_116 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> + happyIn15+ (happy_var_1+ )}++happyReduce_117 = happyMonadReduce 0# 7# happyReduction_117+happyReduction_117 (happyRest) tk+ = happyThen (( pushLexState imp_dir)+ ) (\r -> happyReturn (happyIn16 r))++happyReduce_118 = happyMonadReduce 1# 8# happyReduction_118+happyReduction_118 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> + ( case happy_var_1 of {+ LitNat _ i -> return i;+ _ -> fail $ "Expected integer"+ })}+ ) (\r -> happyReturn (happyIn17 r))++happyReduce_119 = happyMonadReduce 1# 9# happyReduction_119+happyReduction_119 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> + ( mkName happy_var_1)}+ ) (\r -> happyReturn (happyIn18 r))++happyReduce_120 = happySpecReduce_2 10# happyReduction_120+happyReduction_120 happy_x_2+ happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + case happyOut19 happy_x_2 of { happy_var_2 -> + happyIn19+ (happy_var_1 : happy_var_2+ )}}++happyReduce_121 = happySpecReduce_1 10# happyReduction_121+happyReduction_121 happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn19+ ([happy_var_1]+ )}++happyReduce_122 = happySpecReduce_1 11# happyReduction_122+happyReduction_122 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> + happyIn20+ (getRange happy_var_1+ )}++happyReduce_123 = happyMonadReduce 2# 11# happyReduction_123+happyReduction_123 (happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> + case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> + (+ if posPos (fromJust (rEnd' (getRange happy_var_2))) -+ posPos (fromJust (rStart' (getRange happy_var_1))) > 2+ then parseErrorAt (fromJust (rStart' (getRange happy_var_2)))+ "Expecting '}}', found separated '}'s."+ else return $ getRange (happy_var_1, happy_var_2))}}+ ) (\r -> happyReturn (happyIn20 r))++happyReduce_124 = happySpecReduce_2 12# happyReduction_124+happyReduction_124 happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + happyIn21+ (setRelevance Irrelevant $ defaultArg happy_var_2+ )}++happyReduce_125 = happySpecReduce_1 12# happyReduction_125+happyReduction_125 happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn21+ (defaultArg happy_var_1+ )}++happyReduce_126 = happySpecReduce_2 13# happyReduction_126+happyReduction_126 happy_x_2+ happy_x_1+ = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut22 happy_x_2 of { happy_var_2 -> + happyIn22+ (happy_var_1 : happy_var_2+ )}}++happyReduce_127 = happySpecReduce_1 13# happyReduction_127+happyReduction_127 happy_x_1+ = case happyOut21 happy_x_1 of { happy_var_1 -> + happyIn22+ ([happy_var_1]+ )}++happyReduce_128 = happySpecReduce_2 14# happyReduction_128+happyReduction_128 happy_x_2+ happy_x_1+ = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut23 happy_x_2 of { happy_var_2 -> + happyIn23+ (happy_var_1 : happy_var_2+ )}}++happyReduce_129 = happySpecReduce_1 14# happyReduction_129+happyReduction_129 happy_x_1+ = case happyOut21 happy_x_1 of { happy_var_1 -> + happyIn23+ ([happy_var_1]+ )}++happyReduce_130 = happyReduce 4# 14# happyReduction_130+happyReduction_130 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut22 happy_x_2 of { happy_var_2 -> + case happyOut23 happy_x_4 of { happy_var_4 -> + happyIn23+ (map makeInstance happy_var_2 ++ happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_131 = happySpecReduce_3 14# happyReduction_131+happyReduction_131 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut22 happy_x_2 of { happy_var_2 -> + happyIn23+ (map makeInstance happy_var_2+ )}++happyReduce_132 = happyReduce 4# 14# happyReduction_132+happyReduction_132 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut22 happy_x_2 of { happy_var_2 -> + case happyOut23 happy_x_4 of { happy_var_4 -> + happyIn23+ (map hide happy_var_2 ++ happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_133 = happySpecReduce_3 14# happyReduction_133+happyReduction_133 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut22 happy_x_2 of { happy_var_2 -> + happyIn23+ (map hide happy_var_2+ )}++happyReduce_134 = happyReduce 5# 14# happyReduction_134+happyReduction_134 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut19 happy_x_3 of { happy_var_3 -> + case happyOut23 happy_x_5 of { happy_var_5 -> + happyIn23+ (map (hide . setRelevance Irrelevant . defaultArg) happy_var_3 ++ happy_var_5+ ) `HappyStk` happyRest}}++happyReduce_135 = happyReduce 4# 14# happyReduction_135+happyReduction_135 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut19 happy_x_3 of { happy_var_3 -> + happyIn23+ (map (hide . setRelevance Irrelevant . defaultArg) happy_var_3+ ) `HappyStk` happyRest}++happyReduce_136 = happyReduce 5# 14# happyReduction_136+happyReduction_136 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut19 happy_x_3 of { happy_var_3 -> + case happyOut23 happy_x_5 of { happy_var_5 -> + happyIn23+ (map (makeInstance . setRelevance Irrelevant . defaultArg) happy_var_3 ++ happy_var_5+ ) `HappyStk` happyRest}}++happyReduce_137 = happyReduce 4# 14# happyReduction_137+happyReduction_137 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut19 happy_x_3 of { happy_var_3 -> + happyIn23+ (map (makeInstance . setRelevance Irrelevant . defaultArg) happy_var_3+ ) `HappyStk` happyRest}++happyReduce_138 = happyReduce 5# 14# happyReduction_138+happyReduction_138 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut19 happy_x_3 of { happy_var_3 -> + case happyOut23 happy_x_5 of { happy_var_5 -> + happyIn23+ (map (hide . setRelevance NonStrict . defaultArg) happy_var_3 ++ happy_var_5+ ) `HappyStk` happyRest}}++happyReduce_139 = happyReduce 4# 14# happyReduction_139+happyReduction_139 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut19 happy_x_3 of { happy_var_3 -> + happyIn23+ (map (hide . setRelevance NonStrict . defaultArg) happy_var_3+ ) `HappyStk` happyRest}++happyReduce_140 = happyReduce 5# 14# happyReduction_140+happyReduction_140 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut19 happy_x_3 of { happy_var_3 -> + case happyOut23 happy_x_5 of { happy_var_5 -> + happyIn23+ (map (makeInstance . setRelevance NonStrict . defaultArg) happy_var_3 ++ happy_var_5+ ) `HappyStk` happyRest}}++happyReduce_141 = happyReduce 4# 14# happyReduction_141+happyReduction_141 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut19 happy_x_3 of { happy_var_3 -> + happyIn23+ (map (makeInstance . setRelevance NonStrict . defaultArg) happy_var_3+ ) `HappyStk` happyRest}++happyReduce_142 = happyMonadReduce 1# 15# happyReduction_142+happyReduction_142 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> + ( mkQName happy_var_1)}+ ) (\r -> happyReturn (happyIn24 r))++happyReduce_143 = happySpecReduce_1 15# happyReduction_143+happyReduction_143 happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn24+ (QName happy_var_1+ )}++happyReduce_144 = happySpecReduce_1 16# happyReduction_144+happyReduction_144 happy_x_1+ = case happyOut24 happy_x_1 of { happy_var_1 -> + happyIn25+ (happy_var_1+ )}++happyReduce_145 = happySpecReduce_1 17# happyReduction_145+happyReduction_145 happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn26+ (happy_var_1+ )}++happyReduce_146 = happySpecReduce_1 17# happyReduction_146+happyReduction_146 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> + happyIn26+ (Name (getRange happy_var_1) [Hole]+ )}++happyReduce_147 = happySpecReduce_2 18# happyReduction_147+happyReduction_147 happy_x_2+ happy_x_1+ = case happyOut26 happy_x_1 of { happy_var_1 -> + case happyOut27 happy_x_2 of { happy_var_2 -> + happyIn27+ (happy_var_1 : happy_var_2+ )}}++happyReduce_148 = happySpecReduce_1 18# happyReduction_148+happyReduction_148 happy_x_1+ = case happyOut26 happy_x_1 of { happy_var_1 -> + happyIn27+ ([happy_var_1]+ )}++happyReduce_149 = happySpecReduce_1 19# happyReduction_149+happyReduction_149 happy_x_1+ = case happyOut29 happy_x_1 of { happy_var_1 -> + happyIn28+ (case happy_var_1 of+ Left ns -> ns+ Right _ -> fail $ "expected sequence of bound identifiers, not absurd pattern"+ )}++happyReduce_150 = happyMonadReduce 1# 20# happyReduction_150+happyReduction_150 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut39 happy_x_1 of { happy_var_1 -> + (+ let getName :: Expr -> Maybe Name+ getName (Ident (QName x)) = Just x+ getName (Underscore r _) = Just (Name r [Hole])+ getName _ = Nothing++ isAbsurd :: Expr -> Bool+ isAbsurd (Absurd _) = True+ isAbsurd (HiddenArg _ (Named _ e)) = isAbsurd e+ isAbsurd (InstanceArg _ (Named _ e)) = isAbsurd e+ isAbsurd (Paren _ expr) = isAbsurd expr+ isAbsurd (RawApp _ exprs) = any isAbsurd exprs+ isAbsurd _ = False+ in+ if any isAbsurd happy_var_1 then return $ Right happy_var_1 else+ case mapM getName happy_var_1 of+ Just good -> return $ Left good+ Nothing -> fail $ "expected sequence of bound identifiers")}+ ) (\r -> happyReturn (happyIn29 r))++happyReduce_151 = happyMonadReduce 1# 21# happyReduction_151+happyReduction_151 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut39 happy_x_1 of { happy_var_1 -> + (+ let -- interpret an expression as name+ getName :: Expr -> Maybe Name+ getName (Ident (QName x)) = Just x+ getName (Underscore r _) = Just (Name r [Hole])+ getName _ = Nothing++ getNames :: Expr -> Maybe [Name]+ getNames (RawApp _ es) = mapM getName es+ getNames e = singleton `fmap` getName e++ -- interpret an expression as name or list of hidden names+ getName1 :: Expr -> Maybe [WithHiding Name]+ getName1 (Ident (QName x)) = Just [WithHiding NotHidden x]+ getName1 (Underscore r _) = Just [WithHiding NotHidden $ Name r [Hole]]+ getName1 (HiddenArg _ (Named Nothing e))+ = map (WithHiding Hidden) `fmap` getNames e+ getName1 _ = Nothing++ in+ case mapM getName1 happy_var_1 of+ Just good -> return $ concat good+ Nothing -> fail $ "expected sequence of possibly hidden bound identifiers")}+ ) (\r -> happyReturn (happyIn30 r))++happyReduce_152 = happySpecReduce_0 22# happyReduction_152+happyReduction_152 = happyIn31+ ([]+ )++happyReduce_153 = happySpecReduce_2 22# happyReduction_153+happyReduction_153 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokString happy_var_1) -> + case happyOut31 happy_x_2 of { happy_var_2 -> + happyIn31+ (snd happy_var_1 : happy_var_2+ )}}++happyReduce_154 = happySpecReduce_1 23# happyReduction_154+happyReduction_154 happy_x_1+ = case happyOutTok happy_x_1 of { (TokString happy_var_1) -> + happyIn32+ (snd happy_var_1+ )}++happyReduce_155 = happySpecReduce_0 24# happyReduction_155+happyReduction_155 = happyIn33+ ([]+ )++happyReduce_156 = happySpecReduce_2 24# happyReduction_156+happyReduction_156 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokString happy_var_1) -> + case happyOut33 happy_x_2 of { happy_var_2 -> + happyIn33+ (happy_var_1 : happy_var_2+ )}}++happyReduce_157 = happyMonadReduce 1# 25# happyReduction_157+happyReduction_157 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> + ( mkName happy_var_1)}+ ) (\r -> happyReturn (happyIn34 r))++happyReduce_158 = happyMonadReduce 1# 26# happyReduction_158+happyReduction_158 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> + ( fmap QName (mkName happy_var_1))}+ ) (\r -> happyReturn (happyIn35 r))++happyReduce_159 = happySpecReduce_2 27# happyReduction_159+happyReduction_159 happy_x_2+ happy_x_1+ = case happyOut53 happy_x_1 of { happy_var_1 -> + case happyOut36 happy_x_2 of { happy_var_2 -> + happyIn36+ (Pi happy_var_1 happy_var_2+ )}}++happyReduce_160 = happySpecReduce_3 27# happyReduction_160+happyReduction_160 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (TokSymbol SymArrow happy_var_2) -> + case happyOut36 happy_x_3 of { happy_var_3 -> + happyIn36+ (Fun (getRange (happy_var_1,happy_var_2,happy_var_3))+ (RawApp (getRange happy_var_1) happy_var_1)+ happy_var_3+ )}}}++happyReduce_161 = happySpecReduce_3 27# happyReduction_161+happyReduction_161 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut37 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (TokSymbol SymEqual happy_var_2) -> + case happyOut36 happy_x_3 of { happy_var_3 -> + happyIn36+ (Equal (getRange (happy_var_1, happy_var_2, happy_var_3)) happy_var_1 happy_var_3+ )}}}++happyReduce_162 = happySpecReduce_1 27# happyReduction_162+happyReduction_162 happy_x_1+ = case happyOut37 happy_x_1 of { happy_var_1 -> + happyIn36+ (happy_var_1+ )}++happyReduce_163 = happyMonadReduce 1# 28# happyReduction_163+happyReduction_163 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut38 happy_x_1 of { happy_var_1 -> + ( case happy_var_1 of+ { [e] -> return e+ ; e : es -> return $ WithApp (fuseRange e es) e es+ ; [] -> fail "impossible: empty with expressions"+ })}+ ) (\r -> happyReturn (happyIn37 r))++happyReduce_164 = happySpecReduce_3 29# happyReduction_164+happyReduction_164 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOut38 happy_x_3 of { happy_var_3 -> + happyIn38+ (RawApp (getRange happy_var_1) happy_var_1 : happy_var_3+ )}}++happyReduce_165 = happySpecReduce_1 29# happyReduction_165+happyReduction_165 happy_x_1+ = case happyOut39 happy_x_1 of { happy_var_1 -> + happyIn38+ ([RawApp (getRange happy_var_1) happy_var_1]+ )}++happyReduce_166 = happySpecReduce_1 30# happyReduction_166+happyReduction_166 happy_x_1+ = case happyOut40 happy_x_1 of { happy_var_1 -> + happyIn39+ ([happy_var_1]+ )}++happyReduce_167 = happySpecReduce_2 30# happyReduction_167+happyReduction_167 happy_x_2+ happy_x_1+ = case happyOut45 happy_x_1 of { happy_var_1 -> + case happyOut39 happy_x_2 of { happy_var_2 -> + happyIn39+ (happy_var_1 : happy_var_2+ )}}++happyReduce_168 = happySpecReduce_3 31# happyReduction_168+happyReduction_168 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> + case happyOut59 happy_x_2 of { happy_var_2 -> + case happyOut36 happy_x_3 of { happy_var_3 -> + happyIn40+ (Lam (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2 happy_var_3+ )}}}++happyReduce_169 = happySpecReduce_1 31# happyReduction_169+happyReduction_169 happy_x_1+ = case happyOut41 happy_x_1 of { happy_var_1 -> + happyIn40+ (happy_var_1+ )}++happyReduce_170 = happySpecReduce_3 31# happyReduction_170+happyReduction_170 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut67 happy_x_2 of { happy_var_2 -> + case happyOut36 happy_x_3 of { happy_var_3 -> + happyIn40+ (forallPi happy_var_2 happy_var_3+ )}}++happyReduce_171 = happyReduce 4# 31# happyReduction_171+happyReduction_171 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> + case happyOut164 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokKeyword KwIn happy_var_3) -> + case happyOut36 happy_x_4 of { happy_var_4 -> + happyIn40+ (Let (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}}}++happyReduce_172 = happySpecReduce_1 31# happyReduction_172+happyReduction_172 happy_x_1+ = case happyOut45 happy_x_1 of { happy_var_1 -> + happyIn40+ (happy_var_1+ )}++happyReduce_173 = happyReduce 4# 31# happyReduction_173+happyReduction_173 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> + case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokKeyword KwIn happy_var_3) -> + case happyOut36 happy_x_4 of { happy_var_4 -> + happyIn40+ (QuoteGoal (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}}}++happyReduce_174 = happySpecReduce_2 31# happyReduction_174+happyReduction_174 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> + case happyOut42 happy_x_2 of { happy_var_2 -> + happyIn40+ (Tactic (getRange (happy_var_1, happy_var_2)) (RawApp (getRange happy_var_2) happy_var_2) []+ )}}++happyReduce_175 = happyReduce 4# 31# happyReduction_175+happyReduction_175 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> + case happyOut42 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokSymbol SymBar happy_var_3) -> + case happyOut38 happy_x_4 of { happy_var_4 -> + happyIn40+ (Tactic (getRange (happy_var_1, happy_var_2, happy_var_3, happy_var_4)) (RawApp (getRange happy_var_2) happy_var_2) happy_var_4+ ) `HappyStk` happyRest}}}}++happyReduce_176 = happyReduce 4# 32# happyReduction_176+happyReduction_176 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> + case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> + case happyOut66 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> + happyIn41+ (ExtendedLam (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) (reverse happy_var_3)+ ) `HappyStk` happyRest}}}}++happyReduce_177 = happyMonadReduce 2# 32# happyReduction_177+happyReduction_177 (happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> + case happyOut60 happy_x_2 of { happy_var_2 -> + ( case happy_var_2 of+ Left (bs, h) -> if null bs then return $ AbsurdLam r h else+ return $ Lam r bs (AbsurdLam r h)+ where r = fuseRange happy_var_1 bs+ Right es -> do -- it is of the form @\ { p1 ... () }@+ p <- exprToLHS (RawApp (getRange es) es);+ return $ ExtendedLam (fuseRange happy_var_1 es)+ [(p [] [], AbsurdRHS, NoWhere, False)])}}+ ) (\r -> happyReturn (happyIn41 r))++happyReduce_178 = happySpecReduce_1 33# happyReduction_178+happyReduction_178 happy_x_1+ = case happyOut45 happy_x_1 of { happy_var_1 -> + happyIn42+ ([happy_var_1]+ )}++happyReduce_179 = happySpecReduce_2 33# happyReduction_179+happyReduction_179 happy_x_2+ happy_x_1+ = case happyOut45 happy_x_1 of { happy_var_1 -> + case happyOut42 happy_x_2 of { happy_var_2 -> + happyIn42+ (happy_var_1 : happy_var_2+ )}}++happyReduce_180 = happySpecReduce_3 34# happyReduction_180+happyReduction_180 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> + case happyOut36 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> + happyIn43+ (HiddenArg (getRange (happy_var_1,happy_var_2,happy_var_3)) (maybeNamed happy_var_2)+ )}}}++happyReduce_181 = happySpecReduce_2 34# happyReduction_181+happyReduction_181 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> + case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> + happyIn43+ (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r+ )}}++happyReduce_182 = happySpecReduce_1 35# happyReduction_182+happyReduction_182 happy_x_1+ = case happyOut24 happy_x_1 of { happy_var_1 -> + happyIn44+ (Ident happy_var_1+ )}++happyReduce_183 = happySpecReduce_1 35# happyReduction_183+happyReduction_183 happy_x_1+ = case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> + happyIn44+ (Lit happy_var_1+ )}++happyReduce_184 = happySpecReduce_1 35# happyReduction_184+happyReduction_184 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> + happyIn44+ (QuestionMark (getRange happy_var_1) Nothing+ )}++happyReduce_185 = happySpecReduce_1 35# happyReduction_185+happyReduction_185 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> + happyIn44+ (Underscore (getRange happy_var_1) Nothing+ )}++happyReduce_186 = happySpecReduce_1 35# happyReduction_186+happyReduction_186 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> + happyIn44+ (Prop (getRange happy_var_1)+ )}++happyReduce_187 = happySpecReduce_1 35# happyReduction_187+happyReduction_187 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> + happyIn44+ (Set (getRange happy_var_1)+ )}++happyReduce_188 = happySpecReduce_1 35# happyReduction_188+happyReduction_188 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> + happyIn44+ (Quote (getRange happy_var_1)+ )}++happyReduce_189 = happySpecReduce_1 35# happyReduction_189+happyReduction_189 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> + happyIn44+ (QuoteTerm (getRange happy_var_1)+ )}++happyReduce_190 = happySpecReduce_1 35# happyReduction_190+happyReduction_190 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteContext happy_var_1) -> + happyIn44+ (QuoteContext (getRange happy_var_1)+ )}++happyReduce_191 = happySpecReduce_1 35# happyReduction_191+happyReduction_191 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> + happyIn44+ (Unquote (getRange happy_var_1)+ )}++happyReduce_192 = happySpecReduce_1 35# happyReduction_192+happyReduction_192 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> + happyIn44+ (SetN (getRange (fst happy_var_1)) (snd happy_var_1)+ )}++happyReduce_193 = happySpecReduce_3 35# happyReduction_193+happyReduction_193 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> + case happyOut36 happy_x_2 of { happy_var_2 -> + case happyOut20 happy_x_3 of { happy_var_3 -> + happyIn44+ (InstanceArg (getRange (happy_var_1,happy_var_2,happy_var_3))+ (maybeNamed happy_var_2)+ )}}}++happyReduce_194 = happySpecReduce_3 35# happyReduction_194+happyReduction_194 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> + case happyOut36 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> + happyIn44+ (Paren (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2+ )}}}++happyReduce_195 = happySpecReduce_2 35# happyReduction_195+happyReduction_195 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> + case happyOutTok happy_x_2 of { (TokSymbol SymCloseParen happy_var_2) -> + happyIn44+ (Absurd (fuseRange happy_var_1 happy_var_2)+ )}}++happyReduce_196 = happySpecReduce_2 35# happyReduction_196+happyReduction_196 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> + case happyOut20 happy_x_2 of { happy_var_2 -> + happyIn44+ (let r = fuseRange happy_var_1 happy_var_2 in InstanceArg r $ unnamed $ Absurd r+ )}}++happyReduce_197 = happySpecReduce_3 35# happyReduction_197+happyReduction_197 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (TokSymbol SymAs happy_var_2) -> + case happyOut45 happy_x_3 of { happy_var_3 -> + happyIn44+ (As (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_1 happy_var_3+ )}}}++happyReduce_198 = happySpecReduce_2 35# happyReduction_198+happyReduction_198 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> + case happyOut45 happy_x_2 of { happy_var_2 -> + happyIn44+ (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2+ )}}++happyReduce_199 = happyReduce 4# 35# happyReduction_199+happyReduction_199 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> + case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> + case happyOut46 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> + happyIn44+ (Rec (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3+ ) `HappyStk` happyRest}}}}++happyReduce_200 = happyReduce 5# 35# happyReduction_200+happyReduction_200 (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 { (TokKeyword KwRecord happy_var_1) -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokSymbol SymOpenBrace happy_var_3) -> + case happyOut50 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> + happyIn44+ (RecUpdate (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}}}}++happyReduce_201 = happySpecReduce_1 36# happyReduction_201+happyReduction_201 happy_x_1+ = case happyOut43 happy_x_1 of { happy_var_1 -> + happyIn45+ (happy_var_1+ )}++happyReduce_202 = happySpecReduce_1 36# happyReduction_202+happyReduction_202 happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + happyIn45+ (happy_var_1+ )}++happyReduce_203 = happySpecReduce_0 37# happyReduction_203+happyReduction_203 = happyIn46+ ([]+ )++happyReduce_204 = happySpecReduce_1 37# happyReduction_204+happyReduction_204 happy_x_1+ = case happyOut47 happy_x_1 of { happy_var_1 -> + happyIn46+ (happy_var_1+ )}++happyReduce_205 = happySpecReduce_1 38# happyReduction_205+happyReduction_205 happy_x_1+ = case happyOut48 happy_x_1 of { happy_var_1 -> + happyIn47+ ([happy_var_1]+ )}++happyReduce_206 = happySpecReduce_3 38# happyReduction_206+happyReduction_206 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut48 happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_3 of { happy_var_3 -> + happyIn47+ (happy_var_1 : happy_var_3+ )}}++happyReduce_207 = happySpecReduce_1 39# happyReduction_207+happyReduction_207 happy_x_1+ = case happyOut52 happy_x_1 of { happy_var_1 -> + happyIn48+ (Left happy_var_1+ )}++happyReduce_208 = happySpecReduce_1 39# happyReduction_208+happyReduction_208 happy_x_1+ = case happyOut49 happy_x_1 of { happy_var_1 -> + happyIn48+ (Right happy_var_1+ )}++happyReduce_209 = happySpecReduce_3 40# happyReduction_209+happyReduction_209 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut25 happy_x_1 of { happy_var_1 -> + case happyOut121 happy_x_2 of { happy_var_2 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn49+ (ModuleAssignment happy_var_1 happy_var_2 happy_var_3+ )}}}++happyReduce_210 = happySpecReduce_0 41# happyReduction_210+happyReduction_210 = happyIn50+ ([]+ )++happyReduce_211 = happySpecReduce_1 41# happyReduction_211+happyReduction_211 happy_x_1+ = case happyOut51 happy_x_1 of { happy_var_1 -> + happyIn50+ (happy_var_1+ )}++happyReduce_212 = happySpecReduce_1 42# happyReduction_212+happyReduction_212 happy_x_1+ = case happyOut52 happy_x_1 of { happy_var_1 -> + happyIn51+ ([happy_var_1]+ )}++happyReduce_213 = happySpecReduce_3 42# happyReduction_213+happyReduction_213 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut52 happy_x_1 of { happy_var_1 -> + case happyOut51 happy_x_3 of { happy_var_3 -> + happyIn51+ (happy_var_1 : happy_var_3+ )}}++happyReduce_214 = happySpecReduce_3 43# happyReduction_214+happyReduction_214 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + case happyOut36 happy_x_3 of { happy_var_3 -> + happyIn52+ (FieldAssignment happy_var_1 happy_var_3+ )}}++happyReduce_215 = happySpecReduce_2 44# happyReduction_215+happyReduction_215 happy_x_2+ happy_x_1+ = case happyOut54 happy_x_1 of { happy_var_1 -> + happyIn53+ (happy_var_1+ )}++happyReduce_216 = happySpecReduce_1 45# happyReduction_216+happyReduction_216 happy_x_1+ = case happyOut55 happy_x_1 of { happy_var_1 -> + happyIn54+ ({-TeleBind-} happy_var_1+ )}++happyReduce_217 = happySpecReduce_2 46# happyReduction_217+happyReduction_217 happy_x_2+ happy_x_1+ = case happyOut56 happy_x_1 of { happy_var_1 -> + case happyOut55 happy_x_2 of { happy_var_2 -> + happyIn55+ (happy_var_1 : happy_var_2+ )}}++happyReduce_218 = happySpecReduce_1 46# happyReduction_218+happyReduction_218 happy_x_1+ = case happyOut56 happy_x_1 of { happy_var_1 -> + happyIn55+ ([happy_var_1]+ )}++happyReduce_219 = happyReduce 4# 47# happyReduction_219+happyReduction_219 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> + case happyOut58 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> + happyIn56+ (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $+ setRelevance Irrelevant happy_var_3+ ) `HappyStk` happyRest}}}++happyReduce_220 = happyReduce 4# 47# happyReduction_220+happyReduction_220 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> + case happyOut57 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> + happyIn56+ (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $+ setHiding Hidden $+ setRelevance Irrelevant happy_var_3+ ) `HappyStk` happyRest}}}++happyReduce_221 = happyReduce 4# 47# happyReduction_221+happyReduction_221 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> + case happyOut57 happy_x_3 of { happy_var_3 -> + case happyOut20 happy_x_4 of { happy_var_4 -> + happyIn56+ (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $+ setHiding Instance $+ setRelevance Irrelevant happy_var_3+ ) `HappyStk` happyRest}}}++happyReduce_222 = happyReduce 4# 47# happyReduction_222+happyReduction_222 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> + case happyOut58 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> + happyIn56+ (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $+ setRelevance NonStrict happy_var_3+ ) `HappyStk` happyRest}}}++happyReduce_223 = happyReduce 4# 47# happyReduction_223+happyReduction_223 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> + case happyOut57 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> + happyIn56+ (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $+ setHiding Hidden $+ setRelevance NonStrict happy_var_3+ ) `HappyStk` happyRest}}}++happyReduce_224 = happyReduce 4# 47# happyReduction_224+happyReduction_224 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> + case happyOut57 happy_x_3 of { happy_var_3 -> + case happyOut20 happy_x_4 of { happy_var_4 -> + happyIn56+ (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $+ setHiding Instance $+ setRelevance NonStrict happy_var_3+ ) `HappyStk` happyRest}}}++happyReduce_225 = happySpecReduce_3 47# happyReduction_225+happyReduction_225 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> + case happyOut58 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> + happyIn56+ (setRange (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2+ )}}}++happyReduce_226 = happySpecReduce_3 47# happyReduction_226+happyReduction_226 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> + case happyOut57 happy_x_2 of { happy_var_2 -> + case happyOut20 happy_x_3 of { happy_var_3 -> + happyIn56+ (setRange (getRange (happy_var_1,happy_var_2,happy_var_3)) $+ setHiding Instance happy_var_2+ )}}}++happyReduce_227 = happySpecReduce_3 47# happyReduction_227+happyReduction_227 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> + case happyOut57 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> + happyIn56+ (setRange (getRange (happy_var_1,happy_var_2,happy_var_3)) $+ setHiding Hidden happy_var_2+ )}}}++happyReduce_228 = happySpecReduce_3 47# happyReduction_228+happyReduction_228 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> + case happyOut120 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> + happyIn56+ (tLet (getRange (happy_var_1,happy_var_3)) happy_var_2+ )}}}++happyReduce_229 = happyReduce 4# 47# happyReduction_229+happyReduction_229 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> + case happyOut164 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> + happyIn56+ (tLet (getRange (happy_var_1,happy_var_4)) happy_var_3+ ) `HappyStk` happyRest}}}++happyReduce_230 = happySpecReduce_3 48# happyReduction_230+happyReduction_230 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut28 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (TokSymbol SymColon happy_var_2) -> + case happyOut36 happy_x_3 of { happy_var_3 -> + happyIn57+ (let r = getRange (happy_var_1,happy_var_2,happy_var_3) -- the range is approximate only for TypedBindings+ in TypedBindings r $ defaultArg $ TBind r (map (pure . mkBoundName_) happy_var_1) happy_var_3+ )}}}++happyReduce_231 = happySpecReduce_3 49# happyReduction_231+happyReduction_231 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut30 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (TokSymbol SymColon happy_var_2) -> + case happyOut36 happy_x_3 of { happy_var_3 -> + happyIn58+ (let r = getRange (happy_var_1,happy_var_2,happy_var_3) -- the range is approximate only for TypedBindings+ in TypedBindings r $ defaultArg $ TBind r (map (fmap mkBoundName_) happy_var_1) happy_var_3+ )}}}++happyReduce_232 = happyMonadReduce 2# 50# happyReduction_232+happyReduction_232 (happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut61 happy_x_1 of { happy_var_1 -> + (+ case reverse happy_var_1 of+ Left _ : _ -> parseError "Absurd lambda cannot have a body."+ _ : _ -> return [ b | Right b <- happy_var_1 ]+ [] -> parsePanic "Empty LamBinds")}+ ) (\r -> happyReturn (happyIn59 r))++happyReduce_233 = happyMonadReduce 1# 51# happyReduction_233+happyReduction_233 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut62 happy_x_1 of { happy_var_1 -> + (+ case happy_var_1 of+ Left lb -> case reverse lb of+ Right _ : _ -> parseError "Missing body for lambda"+ Left h : _ -> return $ Left ([ b | Right b <- init lb], h)+ _ -> parseError "Unsupported variant of lambda"+ Right es -> return $ Right es)}+ ) (\r -> happyReturn (happyIn60 r))++happyReduce_234 = happySpecReduce_2 52# happyReduction_234+happyReduction_234 happy_x_2+ happy_x_1+ = case happyOut70 happy_x_1 of { happy_var_1 -> + case happyOut61 happy_x_2 of { happy_var_2 -> + happyIn61+ (map Right happy_var_1 ++ happy_var_2+ )}}++happyReduce_235 = happySpecReduce_2 52# happyReduction_235+happyReduction_235 happy_x_2+ happy_x_1+ = case happyOut56 happy_x_1 of { happy_var_1 -> + case happyOut61 happy_x_2 of { happy_var_2 -> + happyIn61+ (Right (DomainFull happy_var_1) : happy_var_2+ )}}++happyReduce_236 = happySpecReduce_1 52# happyReduction_236+happyReduction_236 happy_x_1+ = case happyOut70 happy_x_1 of { happy_var_1 -> + happyIn61+ (map Right happy_var_1+ )}++happyReduce_237 = happySpecReduce_1 52# happyReduction_237+happyReduction_237 happy_x_1+ = case happyOut56 happy_x_1 of { happy_var_1 -> + happyIn61+ ([Right $ DomainFull happy_var_1]+ )}++happyReduce_238 = happySpecReduce_2 52# happyReduction_238+happyReduction_238 happy_x_2+ happy_x_1+ = happyIn61+ ([Left NotHidden]+ )++happyReduce_239 = happySpecReduce_2 52# happyReduction_239+happyReduction_239 happy_x_2+ happy_x_1+ = happyIn61+ ([Left Hidden]+ )++happyReduce_240 = happySpecReduce_2 52# happyReduction_240+happyReduction_240 happy_x_2+ happy_x_1+ = happyIn61+ ([Left Instance]+ )++happyReduce_241 = happySpecReduce_2 53# happyReduction_241+happyReduction_241 happy_x_2+ happy_x_1+ = case happyOut70 happy_x_1 of { happy_var_1 -> + case happyOut61 happy_x_2 of { happy_var_2 -> + happyIn62+ (Left $ map Right happy_var_1 ++ happy_var_2+ )}}++happyReduce_242 = happySpecReduce_2 53# happyReduction_242+happyReduction_242 happy_x_2+ happy_x_1+ = case happyOut56 happy_x_1 of { happy_var_1 -> + case happyOut61 happy_x_2 of { happy_var_2 -> + happyIn62+ (Left $ Right (DomainFull happy_var_1) : happy_var_2+ )}}++happyReduce_243 = happySpecReduce_1 53# happyReduction_243+happyReduction_243 happy_x_1+ = case happyOut71 happy_x_1 of { happy_var_1 -> + happyIn62+ (case happy_var_1 of+ Left lb -> Left $ map Right lb+ Right es -> Right es+ )}++happyReduce_244 = happySpecReduce_1 53# happyReduction_244+happyReduction_244 happy_x_1+ = case happyOut56 happy_x_1 of { happy_var_1 -> + happyIn62+ (Left [Right $ DomainFull happy_var_1]+ )}++happyReduce_245 = happySpecReduce_2 53# happyReduction_245+happyReduction_245 happy_x_2+ happy_x_1+ = happyIn62+ (Left [Left NotHidden]+ )++happyReduce_246 = happySpecReduce_2 53# happyReduction_246+happyReduction_246 happy_x_2+ happy_x_1+ = happyIn62+ (Left [Left Hidden]+ )++happyReduce_247 = happySpecReduce_2 53# happyReduction_247+happyReduction_247 happy_x_2+ happy_x_1+ = happyIn62+ (Left [Left Instance]+ )++happyReduce_248 = happyMonadReduce 3# 54# happyReduction_248+happyReduction_248 (happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOut36 happy_x_3 of { happy_var_3 -> + ( do+ p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1) ;+ return (p [] [], RHS happy_var_3, NoWhere, False))}}+ ) (\r -> happyReturn (happyIn63 r))++happyReduce_249 = happyMonadReduce 4# 54# happyReduction_249+happyReduction_249 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut42 happy_x_2 of { happy_var_2 -> + case happyOut36 happy_x_4 of { happy_var_4 -> + ( do+ p <- exprToLHS (RawApp (getRange happy_var_2) happy_var_2) ;+ return (p [] [], RHS happy_var_4, NoWhere, True))}}+ ) (\r -> happyReturn (happyIn63 r))++happyReduce_250 = happyMonadReduce 1# 55# happyReduction_250+happyReduction_250 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut39 happy_x_1 of { happy_var_1 -> + ( do+ p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1);+ return (p [] [], AbsurdRHS, NoWhere, False))}+ ) (\r -> happyReturn (happyIn64 r))++happyReduce_251 = happyMonadReduce 2# 55# happyReduction_251+happyReduction_251 (happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut39 happy_x_2 of { happy_var_2 -> + ( do+ p <- exprToLHS (RawApp (getRange happy_var_2) happy_var_2);+ return (p [] [], AbsurdRHS, NoWhere, True))}+ ) (\r -> happyReturn (happyIn64 r))++happyReduce_252 = happySpecReduce_1 56# happyReduction_252+happyReduction_252 happy_x_1+ = case happyOut63 happy_x_1 of { happy_var_1 -> + happyIn65+ (happy_var_1+ )}++happyReduce_253 = happySpecReduce_1 56# happyReduction_253+happyReduction_253 happy_x_1+ = case happyOut64 happy_x_1 of { happy_var_1 -> + happyIn65+ (happy_var_1+ )}++happyReduce_254 = happySpecReduce_3 57# happyReduction_254+happyReduction_254 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut66 happy_x_1 of { happy_var_1 -> + case happyOut65 happy_x_3 of { happy_var_3 -> + happyIn66+ (happy_var_3 : happy_var_1+ )}}++happyReduce_255 = happySpecReduce_3 57# happyReduction_255+happyReduction_255 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut64 happy_x_1 of { happy_var_1 -> + case happyOut65 happy_x_3 of { happy_var_3 -> + happyIn66+ ([happy_var_3, happy_var_1]+ )}}++happyReduce_256 = happySpecReduce_1 57# happyReduction_256+happyReduction_256 happy_x_1+ = case happyOut63 happy_x_1 of { happy_var_1 -> + happyIn66+ ([happy_var_1]+ )}++happyReduce_257 = happySpecReduce_2 58# happyReduction_257+happyReduction_257 happy_x_2+ happy_x_1+ = case happyOut68 happy_x_1 of { happy_var_1 -> + happyIn67+ (happy_var_1+ )}++happyReduce_258 = happySpecReduce_2 59# happyReduction_258+happyReduction_258 happy_x_2+ happy_x_1+ = case happyOut70 happy_x_1 of { happy_var_1 -> + case happyOut68 happy_x_2 of { happy_var_2 -> + happyIn68+ (happy_var_1 ++ happy_var_2+ )}}++happyReduce_259 = happySpecReduce_2 59# happyReduction_259+happyReduction_259 happy_x_2+ happy_x_1+ = case happyOut56 happy_x_1 of { happy_var_1 -> + case happyOut68 happy_x_2 of { happy_var_2 -> + happyIn68+ (DomainFull happy_var_1 : happy_var_2+ )}}++happyReduce_260 = happySpecReduce_1 59# happyReduction_260+happyReduction_260 happy_x_1+ = case happyOut70 happy_x_1 of { happy_var_1 -> + happyIn68+ (happy_var_1+ )}++happyReduce_261 = happySpecReduce_1 59# happyReduction_261+happyReduction_261 happy_x_1+ = case happyOut56 happy_x_1 of { happy_var_1 -> + happyIn68+ ([DomainFull happy_var_1]+ )}++happyReduce_262 = happySpecReduce_2 60# happyReduction_262+happyReduction_262 happy_x_2+ happy_x_1+ = case happyOut70 happy_x_1 of { happy_var_1 -> + case happyOut69 happy_x_2 of { happy_var_2 -> + happyIn69+ (happy_var_1 ++ happy_var_2+ )}}++happyReduce_263 = happySpecReduce_2 60# happyReduction_263+happyReduction_263 happy_x_2+ happy_x_1+ = case happyOut56 happy_x_1 of { happy_var_1 -> + case happyOut69 happy_x_2 of { happy_var_2 -> + happyIn69+ (DomainFull happy_var_1 : happy_var_2+ )}}++happyReduce_264 = happySpecReduce_0 60# happyReduction_264+happyReduction_264 = happyIn69+ ([]+ )++happyReduce_265 = happySpecReduce_1 61# happyReduction_265+happyReduction_265 happy_x_1+ = case happyOut71 happy_x_1 of { happy_var_1 -> + happyIn70+ (case happy_var_1 of+ Left lbs -> lbs+ Right _ -> fail "expected sequence of bound identifiers, not absurd pattern"+ )}++happyReduce_266 = happySpecReduce_1 62# happyReduction_266+happyReduction_266 happy_x_1+ = case happyOut26 happy_x_1 of { happy_var_1 -> + happyIn71+ (Left [DomainFree defaultArgInfo $ mkBoundName_ happy_var_1]+ )}++happyReduce_267 = happySpecReduce_2 62# happyReduction_267+happyReduction_267 happy_x_2+ happy_x_1+ = case happyOut26 happy_x_2 of { happy_var_2 -> + happyIn71+ (Left [DomainFree (setRelevance Irrelevant $ defaultArgInfo) $ mkBoundName_ happy_var_2]+ )}++happyReduce_268 = happySpecReduce_2 62# happyReduction_268+happyReduction_268 happy_x_2+ happy_x_1+ = case happyOut26 happy_x_2 of { happy_var_2 -> + happyIn71+ (Left [DomainFree (setRelevance NonStrict $ defaultArgInfo) $ mkBoundName_ happy_var_2]+ )}++happyReduce_269 = happySpecReduce_3 62# happyReduction_269+happyReduction_269 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut29 happy_x_2 of { happy_var_2 -> + happyIn71+ (mapLeft (map (DomainFree (setHiding Hidden $ defaultArgInfo) . mkBoundName_)) happy_var_2+ )}++happyReduce_270 = happySpecReduce_3 62# happyReduction_270+happyReduction_270 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut28 happy_x_2 of { happy_var_2 -> + happyIn71+ (Left $ map (DomainFree (setHiding Instance $ defaultArgInfo) . mkBoundName_) happy_var_2+ )}++happyReduce_271 = happyReduce 4# 62# happyReduction_271+happyReduction_271 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut28 happy_x_3 of { happy_var_3 -> + happyIn71+ (Left $ map (DomainFree (setHiding Hidden $ setRelevance Irrelevant $ defaultArgInfo) . mkBoundName_) happy_var_3+ ) `HappyStk` happyRest}++happyReduce_272 = happyReduce 4# 62# happyReduction_272+happyReduction_272 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut28 happy_x_3 of { happy_var_3 -> + happyIn71+ (Left $ map (DomainFree (setHiding Instance $ setRelevance Irrelevant $ defaultArgInfo) . mkBoundName_) happy_var_3+ ) `HappyStk` happyRest}++happyReduce_273 = happyReduce 4# 62# happyReduction_273+happyReduction_273 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut28 happy_x_3 of { happy_var_3 -> + happyIn71+ (Left $ map (DomainFree (setHiding Hidden $ setRelevance NonStrict $ defaultArgInfo) . mkBoundName_) happy_var_3+ ) `HappyStk` happyRest}++happyReduce_274 = happyReduce 4# 62# happyReduction_274+happyReduction_274 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut28 happy_x_3 of { happy_var_3 -> + happyIn71+ (Left $ map (DomainFree (setHiding Instance $ setRelevance NonStrict $ defaultArgInfo) . mkBoundName_) happy_var_3+ ) `HappyStk` happyRest}++happyReduce_275 = happyMonadReduce 1# 63# happyReduction_275+happyReduction_275 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut73 happy_x_1 of { happy_var_1 -> + ( mergeImportDirectives happy_var_1)}+ ) (\r -> happyReturn (happyIn72 r))++happyReduce_276 = happySpecReduce_2 64# happyReduction_276+happyReduction_276 happy_x_2+ happy_x_1+ = case happyOut74 happy_x_1 of { happy_var_1 -> + case happyOut73 happy_x_2 of { happy_var_2 -> + happyIn73+ (happy_var_1 : happy_var_2+ )}}++happyReduce_277 = happySpecReduce_0 64# happyReduction_277+happyReduction_277 = happyIn73+ ([]+ )++happyReduce_278 = happySpecReduce_1 65# happyReduction_278+happyReduction_278 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> + happyIn74+ (defaultImportDir { importDirRange = getRange happy_var_1, publicOpen = True }+ )}++happyReduce_279 = happySpecReduce_1 65# happyReduction_279+happyReduction_279 happy_x_1+ = case happyOut75 happy_x_1 of { happy_var_1 -> + happyIn74+ (defaultImportDir { importDirRange = snd happy_var_1, using = fst happy_var_1 }+ )}++happyReduce_280 = happySpecReduce_1 65# happyReduction_280+happyReduction_280 happy_x_1+ = case happyOut76 happy_x_1 of { happy_var_1 -> + happyIn74+ (defaultImportDir { importDirRange = snd happy_var_1, hiding = fst happy_var_1 }+ )}++happyReduce_281 = happySpecReduce_1 65# happyReduction_281+happyReduction_281 happy_x_1+ = case happyOut77 happy_x_1 of { happy_var_1 -> + happyIn74+ (defaultImportDir { importDirRange = snd happy_var_1, impRenaming = fst happy_var_1 }+ )}++happyReduce_282 = happyReduce 4# 66# happyReduction_282+happyReduction_282 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> + case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> + case happyOut82 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> + happyIn75+ ((Using happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))+ ) `HappyStk` happyRest}}}}++happyReduce_283 = happyReduce 4# 67# happyReduction_283+happyReduction_283 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> + case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> + case happyOut82 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> + happyIn76+ ((happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))+ ) `HappyStk` happyRest}}}}++happyReduce_284 = happyReduce 4# 68# happyReduction_284+happyReduction_284 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> + case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> + case happyOut78 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> + happyIn77+ ((happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))+ ) `HappyStk` happyRest}}}}++happyReduce_285 = happySpecReduce_3 68# happyReduction_285+happyReduction_285 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> + case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> + case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> + happyIn77+ (([] , getRange (happy_var_1,happy_var_2,happy_var_3))+ )}}}++happyReduce_286 = happySpecReduce_3 69# happyReduction_286+happyReduction_286 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut79 happy_x_1 of { happy_var_1 -> + case happyOut78 happy_x_3 of { happy_var_3 -> + happyIn78+ (happy_var_1 : happy_var_3+ )}}++happyReduce_287 = happySpecReduce_1 69# happyReduction_287+happyReduction_287 happy_x_1+ = case happyOut79 happy_x_1 of { happy_var_1 -> + happyIn78+ ([happy_var_1]+ )}++happyReduce_288 = happySpecReduce_3 70# happyReduction_288+happyReduction_288 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut80 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (TokKeyword KwTo happy_var_2) -> + case happyOut18 happy_x_3 of { happy_var_3 -> + happyIn79+ (Renaming happy_var_1 (setImportedName happy_var_1 happy_var_3) (getRange happy_var_2)+ )}}}++happyReduce_289 = happySpecReduce_2 71# happyReduction_289+happyReduction_289 happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + happyIn80+ (ImportedName happy_var_2+ )}++happyReduce_290 = happySpecReduce_3 71# happyReduction_290+happyReduction_290 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_3 of { happy_var_3 -> + happyIn80+ (ImportedModule happy_var_3+ )}++happyReduce_291 = happySpecReduce_1 72# happyReduction_291+happyReduction_291 happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn81+ (ImportedName happy_var_1+ )}++happyReduce_292 = happySpecReduce_2 72# happyReduction_292+happyReduction_292 happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + happyIn81+ (ImportedModule happy_var_2+ )}++happyReduce_293 = happySpecReduce_0 73# happyReduction_293+happyReduction_293 = happyIn82+ ([]+ )++happyReduce_294 = happySpecReduce_1 73# happyReduction_294+happyReduction_294 happy_x_1+ = case happyOut83 happy_x_1 of { happy_var_1 -> + happyIn82+ (happy_var_1+ )}++happyReduce_295 = happySpecReduce_1 74# happyReduction_295+happyReduction_295 happy_x_1+ = case happyOut81 happy_x_1 of { happy_var_1 -> + happyIn83+ ([happy_var_1]+ )}++happyReduce_296 = happySpecReduce_3 74# happyReduction_296+happyReduction_296 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut81 happy_x_1 of { happy_var_1 -> + case happyOut83 happy_x_3 of { happy_var_3 -> + happyIn83+ (happy_var_1 : happy_var_3+ )}}++happyReduce_297 = happyMonadReduce 3# 75# happyReduction_297+happyReduction_297 (happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut37 happy_x_1 of { happy_var_1 -> + case happyOut87 happy_x_2 of { happy_var_2 -> + case happyOut86 happy_x_3 of { happy_var_3 -> + ( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2 happy_var_3))}}}+ ) (\r -> happyReturn (happyIn84 r))++happyReduce_298 = happyReduce 4# 75# happyReduction_298+happyReduction_298 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> + case happyOut85 happy_x_2 of { happy_var_2 -> + case happyOut87 happy_x_3 of { happy_var_3 -> + case happyOut86 happy_x_4 of { happy_var_4 -> + happyIn84+ (Ellipsis (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_3 happy_var_4+ ) `HappyStk` happyRest}}}}++happyReduce_299 = happySpecReduce_0 76# happyReduction_299+happyReduction_299 = happyIn85+ ([]+ )++happyReduce_300 = happyMonadReduce 3# 76# happyReduction_300+happyReduction_300 (happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut42 happy_x_2 of { happy_var_2 -> + case happyOut85 happy_x_3 of { happy_var_3 -> + ( exprToPattern (RawApp (getRange happy_var_2) happy_var_2) >>= \p ->+ return (p : happy_var_3))}}+ ) (\r -> happyReturn (happyIn85 r))++happyReduce_301 = happySpecReduce_0 77# happyReduction_301+happyReduction_301 = happyIn86+ ([]+ )++happyReduce_302 = happySpecReduce_2 77# happyReduction_302+happyReduction_302 happy_x_2+ happy_x_1+ = case happyOut36 happy_x_2 of { happy_var_2 -> + happyIn86+ (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }+ )}++happyReduce_303 = happySpecReduce_0 78# happyReduction_303+happyReduction_303 = happyIn87+ ([]+ )++happyReduce_304 = happySpecReduce_2 78# happyReduction_304+happyReduction_304 happy_x_2+ happy_x_1+ = case happyOut37 happy_x_2 of { happy_var_2 -> + happyIn87+ (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }+ )}++happyReduce_305 = happySpecReduce_0 79# happyReduction_305+happyReduction_305 = happyIn88+ (NoWhere+ )++happyReduce_306 = happySpecReduce_2 79# happyReduction_306+happyReduction_306 happy_x_2+ happy_x_1+ = case happyOut165 happy_x_2 of { happy_var_2 -> + happyIn88+ (AnyWhere happy_var_2+ )}++happyReduce_307 = happyReduce 4# 79# happyReduction_307+happyReduction_307 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut165 happy_x_4 of { happy_var_4 -> + happyIn88+ (SomeWhere happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_308 = happyReduce 4# 79# happyReduction_308+happyReduction_308 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut125 happy_x_2 of { happy_var_2 -> + case happyOut165 happy_x_4 of { happy_var_4 -> + happyIn88+ (SomeWhere happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_309 = happySpecReduce_2 80# happyReduction_309+happyReduction_309 happy_x_2+ happy_x_1+ = case happyOut36 happy_x_1 of { happy_var_1 -> + case happyOut88 happy_x_2 of { happy_var_2 -> + happyIn89+ (ExprWhere happy_var_1 happy_var_2+ )}}++happyReduce_310 = happySpecReduce_1 81# happyReduction_310+happyReduction_310 happy_x_1+ = case happyOut101 happy_x_1 of { happy_var_1 -> + happyIn90+ (happy_var_1+ )}++happyReduce_311 = happySpecReduce_1 81# happyReduction_311+happyReduction_311 happy_x_1+ = case happyOut93 happy_x_1 of { happy_var_1 -> + happyIn90+ (happy_var_1+ )}++happyReduce_312 = happySpecReduce_1 81# happyReduction_312+happyReduction_312 happy_x_1+ = case happyOut95 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_313 = happySpecReduce_1 81# happyReduction_313+happyReduction_313 happy_x_1+ = case happyOut96 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_314 = happySpecReduce_1 81# happyReduction_314+happyReduction_314 happy_x_1+ = case happyOut97 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_315 = happySpecReduce_1 81# happyReduction_315+happyReduction_315 happy_x_1+ = case happyOut98 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_316 = happySpecReduce_1 81# happyReduction_316+happyReduction_316 happy_x_1+ = case happyOut100 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_317 = happySpecReduce_1 81# happyReduction_317+happyReduction_317 happy_x_1+ = case happyOut102 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_318 = happySpecReduce_1 81# happyReduction_318+happyReduction_318 happy_x_1+ = case happyOut103 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_319 = happySpecReduce_1 81# happyReduction_319+happyReduction_319 happy_x_1+ = case happyOut104 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_320 = happySpecReduce_1 81# happyReduction_320+happyReduction_320 happy_x_1+ = case happyOut105 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_321 = happySpecReduce_1 81# happyReduction_321+happyReduction_321 happy_x_1+ = case happyOut106 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_322 = happySpecReduce_1 81# happyReduction_322+happyReduction_322 happy_x_1+ = case happyOut107 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_323 = happySpecReduce_1 81# happyReduction_323+happyReduction_323 happy_x_1+ = case happyOut108 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_324 = happySpecReduce_1 81# happyReduction_324+happyReduction_324 happy_x_1+ = case happyOut120 happy_x_1 of { happy_var_1 -> + happyIn90+ (happy_var_1+ )}++happyReduce_325 = happySpecReduce_1 81# happyReduction_325+happyReduction_325 happy_x_1+ = case happyOut123 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_326 = happySpecReduce_1 81# happyReduction_326+happyReduction_326 happy_x_1+ = case happyOut124 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_327 = happySpecReduce_1 81# happyReduction_327+happyReduction_327 happy_x_1+ = case happyOut127 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_328 = happySpecReduce_1 81# happyReduction_328+happyReduction_328 happy_x_1+ = case happyOut110 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_329 = happySpecReduce_1 81# happyReduction_329+happyReduction_329 happy_x_1+ = case happyOut111 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_330 = happySpecReduce_1 81# happyReduction_330+happyReduction_330 happy_x_1+ = case happyOut109 happy_x_1 of { happy_var_1 -> + happyIn90+ ([happy_var_1]+ )}++happyReduce_331 = happySpecReduce_3 82# happyReduction_331+happyReduction_331 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut19 happy_x_1 of { happy_var_1 -> + case happyOut36 happy_x_3 of { happy_var_3 -> + happyIn91+ (map (\ x -> TypeSig defaultArgInfo x happy_var_3) happy_var_1+ )}}++happyReduce_332 = happySpecReduce_3 83# happyReduction_332+happyReduction_332 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut23 happy_x_1 of { happy_var_1 -> + case happyOut36 happy_x_3 of { happy_var_3 -> + happyIn92+ (map (fmap (\ x -> TypeSig defaultArgInfo x happy_var_3)) happy_var_1+ )}}++happyReduce_333 = happySpecReduce_2 83# happyReduction_333+happyReduction_333 happy_x_2+ happy_x_1+ = case happyOut157 happy_x_2 of { happy_var_2 -> + happyIn92+ (let+ setInstance (TypeSig info x t) = TypeSig (setHiding Instance info) x t+ setInstance _ = __IMPOSSIBLE__ in+ map (fmap setInstance) happy_var_2+ )}++happyReduce_334 = happyMonadReduce 3# 84# happyReduction_334+happyReduction_334 (happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut84 happy_x_1 of { happy_var_1 -> + case happyOut94 happy_x_2 of { happy_var_2 -> + case happyOut88 happy_x_3 of { happy_var_3 -> + ( funClauseOrTypeSigs happy_var_1 happy_var_2 happy_var_3)}}}+ ) (\r -> happyReturn (happyIn93 r))++happyReduce_335 = happySpecReduce_2 85# happyReduction_335+happyReduction_335 happy_x_2+ happy_x_1+ = case happyOut36 happy_x_2 of { happy_var_2 -> + happyIn94+ (JustRHS (RHS happy_var_2)+ )}++happyReduce_336 = happySpecReduce_2 85# happyReduction_336+happyReduction_336 happy_x_2+ happy_x_1+ = case happyOut36 happy_x_2 of { happy_var_2 -> + happyIn94+ (TypeSigsRHS happy_var_2+ )}++happyReduce_337 = happySpecReduce_0 85# happyReduction_337+happyReduction_337 = happyIn94+ (JustRHS AbsurdRHS+ )++happyReduce_338 = happyReduce 7# 86# happyReduction_338+happyReduction_338 (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 { (TokKeyword KwData happy_var_1) -> + case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut69 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> + case happyOut36 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> + case happyOut165 happy_x_7 of { happy_var_7 -> + happyIn95+ (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) Inductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7+ ) `HappyStk` happyRest}}}}}}}++happyReduce_339 = happyReduce 7# 86# happyReduction_339+happyReduction_339 (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 { (TokKeyword KwCoData happy_var_1) -> + case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut69 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> + case happyOut36 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> + case happyOut165 happy_x_7 of { happy_var_7 -> + happyIn95+ (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) CoInductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7+ ) `HappyStk` happyRest}}}}}}}++happyReduce_340 = happyReduce 5# 86# happyReduction_340+happyReduction_340 (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 { (TokKeyword KwData happy_var_1) -> + case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut69 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> + case happyOut165 happy_x_5 of { happy_var_5 -> + happyIn95+ (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) Inductive happy_var_2 happy_var_3 Nothing happy_var_5+ ) `HappyStk` happyRest}}}}}++happyReduce_341 = happyReduce 5# 86# happyReduction_341+happyReduction_341 (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 { (TokKeyword KwCoData happy_var_1) -> + case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut69 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> + case happyOut165 happy_x_5 of { happy_var_5 -> + happyIn95+ (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) CoInductive happy_var_2 happy_var_3 Nothing happy_var_5+ ) `HappyStk` happyRest}}}}}++happyReduce_342 = happyReduce 5# 87# happyReduction_342+happyReduction_342 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> + case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut69 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> + case happyOut36 happy_x_5 of { happy_var_5 -> + happyIn96+ (DataSig (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) Inductive happy_var_2 happy_var_3 happy_var_5+ ) `HappyStk` happyRest}}}}}++happyReduce_343 = happyMonadReduce 7# 88# happyReduction_343+happyReduction_343 (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 { (TokKeyword KwRecord happy_var_1) -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut69 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> + case happyOut36 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> + case happyOut159 happy_x_7 of { happy_var_7 -> + ( exprToName happy_var_2 >>= \ n -> let ((x,y,z),ds) = happy_var_7 in return $ Record (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) n x y z happy_var_3 (Just happy_var_5) ds)}}}}}}}+ ) (\r -> happyReturn (happyIn97 r))++happyReduce_344 = happyMonadReduce 5# 88# happyReduction_344+happyReduction_344 (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 { (TokKeyword KwRecord happy_var_1) -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut69 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> + case happyOut159 happy_x_5 of { happy_var_5 -> + ( exprToName happy_var_2 >>= \ n -> let ((x,y,z),ds) = happy_var_5 in return $ Record (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) n x y z happy_var_3 Nothing ds)}}}}}+ ) (\r -> happyReturn (happyIn97 r))++happyReduce_345 = happyMonadReduce 5# 89# happyReduction_345+happyReduction_345 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> + case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut69 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> + case happyOut36 happy_x_5 of { happy_var_5 -> + ( exprToName happy_var_2 >>= \ n -> return $ RecordSig (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) n happy_var_3 happy_var_5)}}}}}+ ) (\r -> happyReturn (happyIn98 r))++happyReduce_346 = happySpecReduce_2 90# happyReduction_346+happyReduction_346 happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + happyIn99+ ((happy_var_2, NotInstanceDef)+ )}++happyReduce_347 = happyReduce 5# 90# happyReduction_347+happyReduction_347 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut18 happy_x_4 of { happy_var_4 -> + happyIn99+ ((happy_var_4, InstanceDef)+ ) `HappyStk` happyRest}++happyReduce_348 = happySpecReduce_3 91# happyReduction_348+happyReduction_348 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> + case happyOut17 happy_x_2 of { happy_var_2 -> + case happyOut27 happy_x_3 of { happy_var_3 -> + happyIn100+ (Infix (Fixity (getRange (happy_var_1,happy_var_3)) (Related happy_var_2) NonAssoc) happy_var_3+ )}}}++happyReduce_349 = happySpecReduce_3 91# happyReduction_349+happyReduction_349 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> + case happyOut17 happy_x_2 of { happy_var_2 -> + case happyOut27 happy_x_3 of { happy_var_3 -> + happyIn100+ (Infix (Fixity (getRange (happy_var_1,happy_var_3)) (Related happy_var_2) LeftAssoc) happy_var_3+ )}}}++happyReduce_350 = happySpecReduce_3 91# happyReduction_350+happyReduction_350 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> + case happyOut17 happy_x_2 of { happy_var_2 -> + case happyOut27 happy_x_3 of { happy_var_3 -> + happyIn100+ (Infix (Fixity (getRange (happy_var_1,happy_var_3)) (Related happy_var_2) RightAssoc) happy_var_3+ )}}}++happyReduce_351 = happySpecReduce_2 92# happyReduction_351+happyReduction_351 happy_x_2+ happy_x_1+ = case happyOut157 happy_x_2 of { happy_var_2 -> + happyIn101+ (let+ inst i | getHiding i == Instance = InstanceDef+ | otherwise = NotInstanceDef+ toField (Arg info (TypeSig info' x t)) = Field (inst info') x (Arg info t)+ in map toField happy_var_2+ )}++happyReduce_352 = happySpecReduce_2 93# happyReduction_352+happyReduction_352 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> + case happyOut164 happy_x_2 of { happy_var_2 -> + happyIn102+ (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2+ )}}++happyReduce_353 = happySpecReduce_2 94# happyReduction_353+happyReduction_353 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> + case happyOut164 happy_x_2 of { happy_var_2 -> + happyIn103+ (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2+ )}}++happyReduce_354 = happySpecReduce_2 95# happyReduction_354+happyReduction_354 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> + case happyOut164 happy_x_2 of { happy_var_2 -> + happyIn104+ (Private (fuseRange happy_var_1 happy_var_2) happy_var_2+ )}}++happyReduce_355 = happySpecReduce_2 96# happyReduction_355+happyReduction_355 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwInstance happy_var_1) -> + case happyOut164 happy_x_2 of { happy_var_2 -> + happyIn105+ (InstanceB (fuseRange happy_var_1 happy_var_2) happy_var_2+ )}}++happyReduce_356 = happySpecReduce_2 97# happyReduction_356+happyReduction_356 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwMacro happy_var_1) -> + case happyOut164 happy_x_2 of { happy_var_2 -> + happyIn106+ (Macro (fuseRange happy_var_1 happy_var_2) happy_var_2+ )}}++happyReduce_357 = happySpecReduce_2 98# happyReduction_357+happyReduction_357 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> + case happyOut164 happy_x_2 of { happy_var_2 -> + happyIn107+ (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2+ )}}++happyReduce_358 = happySpecReduce_2 99# happyReduction_358+happyReduction_358 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> + case happyOut155 happy_x_2 of { happy_var_2 -> + happyIn108+ (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2+ )}}++happyReduce_359 = happySpecReduce_3 100# happyReduction_359+happyReduction_359 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDecl happy_var_1) -> + case happyOut36 happy_x_3 of { happy_var_3 -> + happyIn109+ (UnquoteDecl (fuseRange happy_var_1 happy_var_3) [] happy_var_3+ )}}++happyReduce_360 = happyReduce 4# 100# happyReduction_360+happyReduction_360 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDecl happy_var_1) -> + case happyOut19 happy_x_2 of { happy_var_2 -> + case happyOut36 happy_x_4 of { happy_var_4 -> + happyIn109+ (UnquoteDecl (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}}++happyReduce_361 = happyReduce 4# 100# happyReduction_361+happyReduction_361 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDef happy_var_1) -> + case happyOut19 happy_x_2 of { happy_var_2 -> + case happyOut36 happy_x_4 of { happy_var_4 -> + happyIn109+ (UnquoteDef (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}}++happyReduce_362 = happyMonadReduce 5# 101# happyReduction_362+happyReduction_362 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut114 happy_x_3 of { happy_var_3 -> + case happyOut113 happy_x_5 of { happy_var_5 -> + (+ case happy_var_2 of+ Name _ [_] -> case mkNotation happy_var_3 (map rangedThing happy_var_5) of+ Left err -> parseError $ "Malformed syntax declaration: " ++ err+ Right n -> return $ Syntax happy_var_2 n+ _ -> parseError "Syntax declarations are allowed only for simple names (without holes)")}}}+ ) (\r -> happyReturn (happyIn110 r))++happyReduce_363 = happyMonadReduce 5# 102# happyReduction_363+happyReduction_363 (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 { (TokKeyword KwPatternSyn happy_var_1) -> + case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut112 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymEqual happy_var_4) -> + case happyOut36 happy_x_5 of { happy_var_5 -> + ( do+ p <- exprToPattern happy_var_5+ return (PatternSyn (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 happy_var_3 p))}}}}}+ ) (\r -> happyReturn (happyIn111 r))++happyReduce_364 = happySpecReduce_0 103# happyReduction_364+happyReduction_364 = happyIn112+ ([]+ )++happyReduce_365 = happyMonadReduce 1# 103# happyReduction_365+happyReduction_365 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut61 happy_x_1 of { happy_var_1 -> + ( patternSynArgs happy_var_1)}+ ) (\r -> happyReturn (happyIn112 r))++happyReduce_366 = happySpecReduce_1 104# happyReduction_366+happyReduction_366 happy_x_1+ = case happyOut118 happy_x_1 of { happy_var_1 -> + happyIn113+ ([happy_var_1]+ )}++happyReduce_367 = happySpecReduce_2 104# happyReduction_367+happyReduction_367 happy_x_2+ happy_x_1+ = case happyOut113 happy_x_1 of { happy_var_1 -> + case happyOut118 happy_x_2 of { happy_var_2 -> + happyIn113+ (happy_var_1 ++ [happy_var_2]+ )}}++happyReduce_368 = happySpecReduce_1 105# happyReduction_368+happyReduction_368 happy_x_1+ = case happyOut115 happy_x_1 of { happy_var_1 -> + happyIn114+ ([happy_var_1]+ )}++happyReduce_369 = happySpecReduce_2 105# happyReduction_369+happyReduction_369 happy_x_2+ happy_x_1+ = case happyOut114 happy_x_1 of { happy_var_1 -> + case happyOut115 happy_x_2 of { happy_var_2 -> + happyIn114+ (happy_var_1 ++ [happy_var_2]+ )}}++happyReduce_370 = happySpecReduce_1 106# happyReduction_370+happyReduction_370 happy_x_1+ = case happyOut116 happy_x_1 of { happy_var_1 -> + happyIn115+ (defaultNamedArg happy_var_1+ )}++happyReduce_371 = happySpecReduce_3 106# happyReduction_371+happyReduction_371 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut117 happy_x_2 of { happy_var_2 -> + happyIn115+ (setHiding Hidden $ defaultNamedArg happy_var_2+ )}++happyReduce_372 = happySpecReduce_3 106# happyReduction_372+happyReduction_372 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut117 happy_x_2 of { happy_var_2 -> + happyIn115+ (setHiding Instance $ defaultNamedArg happy_var_2+ )}++happyReduce_373 = happyReduce 5# 106# happyReduction_373+happyReduction_373 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut118 happy_x_2 of { happy_var_2 -> + case happyOut117 happy_x_4 of { happy_var_4 -> + happyIn115+ (setHiding Hidden $ defaultArg $ named happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_374 = happyReduce 5# 106# happyReduction_374+happyReduction_374 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut118 happy_x_2 of { happy_var_2 -> + case happyOut117 happy_x_4 of { happy_var_4 -> + happyIn115+ (setHiding Instance $ defaultArg $ named happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_375 = happySpecReduce_1 107# happyReduction_375+happyReduction_375 happy_x_1+ = case happyOut118 happy_x_1 of { happy_var_1 -> + happyIn116+ (ExprHole (rangedThing happy_var_1)+ )}++happyReduce_376 = happyReduce 6# 107# happyReduction_376+happyReduction_376 (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 happyOut118 happy_x_3 of { happy_var_3 -> + case happyOut118 happy_x_5 of { happy_var_5 -> + happyIn116+ (LambdaHole (rangedThing happy_var_3) (rangedThing happy_var_5)+ ) `HappyStk` happyRest}}++happyReduce_377 = happyReduce 6# 107# happyReduction_377+happyReduction_377 (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 happyOut118 happy_x_5 of { happy_var_5 -> + happyIn116+ (LambdaHole "_" (rangedThing happy_var_5)+ ) `HappyStk` happyRest}++happyReduce_378 = happySpecReduce_1 108# happyReduction_378+happyReduction_378 happy_x_1+ = case happyOut118 happy_x_1 of { happy_var_1 -> + happyIn117+ (ExprHole (rangedThing happy_var_1)+ )}++happyReduce_379 = happyReduce 4# 108# happyReduction_379+happyReduction_379 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut118 happy_x_2 of { happy_var_2 -> + case happyOut118 happy_x_4 of { happy_var_4 -> + happyIn117+ (LambdaHole (rangedThing happy_var_2) (rangedThing happy_var_4)+ ) `HappyStk` happyRest}}++happyReduce_380 = happyReduce 4# 108# happyReduction_380+happyReduction_380 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut118 happy_x_4 of { happy_var_4 -> + happyIn117+ (LambdaHole "_" (rangedThing happy_var_4)+ ) `HappyStk` happyRest}++happyReduce_381 = happySpecReduce_1 109# happyReduction_381+happyReduction_381 happy_x_1+ = case happyOutTok happy_x_1 of { (TokId happy_var_1) -> + happyIn118+ (Ranged (getRange $ fst happy_var_1) (stringToRawName $ snd happy_var_1)+ )}++happyReduce_382 = happySpecReduce_1 110# happyReduction_382+happyReduction_382 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> + happyIn119+ (Just (getRange happy_var_1)+ )}++happyReduce_383 = happySpecReduce_0 110# happyReduction_383+happyReduction_383 = happyIn119+ (Nothing+ )++happyReduce_384 = happyMonadReduce 5# 111# happyReduction_384+happyReduction_384 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut119 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (TokKeyword KwImport happy_var_2) -> + case happyOut25 happy_x_3 of { happy_var_3 -> + case happyOut121 happy_x_4 of { happy_var_4 -> + case happyOut72 happy_x_5 of { happy_var_5 -> + (+ let+ { doOpen = maybe DontOpen (const DoOpen) happy_var_1+ ; m = happy_var_3+ ; es = happy_var_4+ ; dir = happy_var_5+ ; r = getRange (m, es, dir)+ ; mr = getRange m+ ; unique = hashString $ show $ (Nothing :: Maybe ()) <$ r+ -- turn range into unique id, but delete file path+ -- which is absolute and messes up suite of failing tests+ -- (different hashs on different installations)+ -- TODO: Don't use (insecure) hashes in this way.+ ; fresh = Name mr [ Id $ stringToRawName $ ".#" ++ show m ++ "-" ++ show unique ]+ ; impStm asR = Import mr m (Just (AsName fresh asR)) DontOpen defaultImportDir+ ; appStm m' es =+ let r = getRange (m, es) in+ Private r+ [ ModuleMacro r m'+ (SectionApp (getRange es) []+ (RawApp (getRange es) (Ident (QName fresh) : es)))+ doOpen dir+ ]+ ; (initArgs, last2Args) = splitAt (length es - 2) es+ ; parseAsClause = case last2Args of+ { [ Ident (QName (Name asR [Id x]))+ , Ident (QName m')+ ] | rawNameToString x == "as" -> Just (asR, m')+ ; _ -> Nothing+ }+ } in+ case es of+ { [] -> return [Import mr m Nothing doOpen dir]+ ; _ | Just (asR, m') <- parseAsClause ->+ if null initArgs then return+ [ Import (getRange (m, asR, m', dir)) m+ (Just (AsName m' asR)) doOpen dir+ ]+ else return [ impStm asR, appStm m' initArgs ]+ | DontOpen <- doOpen -> parseErrorAt (fromJust $ rStart' $ getRange happy_var_2) "An import statement with module instantiation does not actually import the module. This statement achieves nothing. Either add the `open' keyword or bind the instantiated module with an `as' clause."+ | otherwise -> return+ [ impStm noRange+ , appStm (noName $ beginningOf $ getRange m) es+ ]+ })}}}}}+ ) (\r -> happyReturn (happyIn120 r))++happyReduce_385 = happyReduce 4# 111# happyReduction_385+happyReduction_385 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut25 happy_x_2 of { happy_var_2 -> + case happyOut121 happy_x_3 of { happy_var_3 -> + case happyOut72 happy_x_4 of { happy_var_4 -> + happyIn120+ (let+ { m = happy_var_2+ ; es = happy_var_3+ ; dir = happy_var_4+ ; r = getRange (m, es, dir)+ } in+ [ case es of+ { [] -> Open r m dir+ ; _ -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange m)+ (SectionApp (getRange (m , es)) [] (RawApp (fuseRange m es) (Ident m : es)))+ DoOpen dir+ ]+ }+ ]+ ) `HappyStk` happyRest}}}++happyReduce_386 = happyReduce 6# 111# happyReduction_386+happyReduction_386 (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 happyOut25 happy_x_2 of { happy_var_2 -> + case happyOut72 happy_x_6 of { happy_var_6 -> + happyIn120+ (let r = getRange happy_var_2 in+ [ Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2)+ (RecordModuleIFS r happy_var_2) DoOpen happy_var_6+ ]+ ]+ ) `HappyStk` happyRest}}++happyReduce_387 = happySpecReduce_0 112# happyReduction_387+happyReduction_387 = happyIn121+ ([]+ )++happyReduce_388 = happySpecReduce_2 112# happyReduction_388+happyReduction_388 happy_x_2+ happy_x_1+ = case happyOut45 happy_x_1 of { happy_var_1 -> + case happyOut121 happy_x_2 of { happy_var_2 -> + happyIn121+ (happy_var_1 : happy_var_2+ )}}++happyReduce_389 = happyReduce 4# 113# happyReduction_389+happyReduction_389 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut25 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> + case happyOutTok happy_x_3 of { (TokSymbol SymEllipsis happy_var_3) -> + case happyOut20 happy_x_4 of { happy_var_4 -> + happyIn122+ ((\ts ->+ if null ts then return $ RecordModuleIFS (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_1+ else parseError "No bindings allowed for record module with non-canonical implicits" )+ ) `HappyStk` happyRest}}}}++happyReduce_390 = happySpecReduce_2 113# happyReduction_390+happyReduction_390 happy_x_2+ happy_x_1+ = case happyOut25 happy_x_1 of { happy_var_1 -> + case happyOut121 happy_x_2 of { happy_var_2 -> + happyIn122+ ((\ts -> return $ SectionApp (getRange (happy_var_1, happy_var_2)) ts (RawApp (fuseRange happy_var_1 happy_var_2) (Ident happy_var_1 : happy_var_2)) )+ )}}++happyReduce_391 = happyMonadReduce 6# 114# happyReduction_391+happyReduction_391 (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 { (TokKeyword KwModule happy_var_1) -> + case happyOut25 happy_x_2 of { happy_var_2 -> + case happyOut69 happy_x_3 of { happy_var_3 -> + case happyOut122 happy_x_5 of { happy_var_5 -> + case happyOut72 happy_x_6 of { happy_var_6 -> + ( do { ma <- happy_var_5 (map addType happy_var_3)+ ; name <- ensureUnqual happy_var_2+ ; return $ ModuleMacro (getRange (happy_var_1, happy_var_2, ma, happy_var_6)) name ma DontOpen happy_var_6 })}}}}}+ ) (\r -> happyReturn (happyIn123 r))++happyReduce_392 = happyMonadReduce 7# 114# happyReduction_392+happyReduction_392 (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 { (TokKeyword KwOpen happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwModule happy_var_2) -> + case happyOut18 happy_x_3 of { happy_var_3 -> + case happyOut69 happy_x_4 of { happy_var_4 -> + case happyOut122 happy_x_6 of { happy_var_6 -> + case happyOut72 happy_x_7 of { happy_var_7 -> + ( do {ma <- happy_var_6 (map addType happy_var_4); return $ ModuleMacro (getRange (happy_var_1, happy_var_2, happy_var_3, ma, happy_var_7)) happy_var_3 ma DoOpen happy_var_7 })}}}}}}+ ) (\r -> happyReturn (happyIn123 r))++happyReduce_393 = happyReduce 5# 115# happyReduction_393+happyReduction_393 (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 { (TokKeyword KwModule happy_var_1) -> + case happyOut25 happy_x_2 of { happy_var_2 -> + case happyOut69 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> + case happyOut165 happy_x_5 of { happy_var_5 -> + happyIn124+ (Module (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 (map addType happy_var_3) happy_var_5+ ) `HappyStk` happyRest}}}}}++happyReduce_394 = happyReduce 5# 115# happyReduction_394+happyReduction_394 (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 { (TokKeyword KwModule happy_var_1) -> + case happyOut125 happy_x_2 of { happy_var_2 -> + case happyOut69 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> + case happyOut165 happy_x_5 of { happy_var_5 -> + happyIn124+ (Module (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5+ ) `HappyStk` happyRest}}}}}++happyReduce_395 = happySpecReduce_1 116# happyReduction_395+happyReduction_395 happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> + happyIn125+ (noName (getRange happy_var_1)+ )}++happyReduce_396 = happySpecReduce_1 117# happyReduction_396+happyReduction_396 happy_x_1+ = case happyOut167 happy_x_1 of { happy_var_1 -> + happyIn126+ (figureOutTopLevelModule happy_var_1+ )}++happyReduce_397 = happySpecReduce_1 118# happyReduction_397+happyReduction_397 happy_x_1+ = case happyOut128 happy_x_1 of { happy_var_1 -> + happyIn127+ (Pragma happy_var_1+ )}++happyReduce_398 = happySpecReduce_1 119# happyReduction_398+happyReduction_398 happy_x_1+ = case happyOut130 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_399 = happySpecReduce_1 119# happyReduction_399+happyReduction_399 happy_x_1+ = case happyOut131 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_400 = happySpecReduce_1 119# happyReduction_400+happyReduction_400 happy_x_1+ = case happyOut132 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_401 = happySpecReduce_1 119# happyReduction_401+happyReduction_401 happy_x_1+ = case happyOut133 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_402 = happySpecReduce_1 119# happyReduction_402+happyReduction_402 happy_x_1+ = case happyOut136 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_403 = happySpecReduce_1 119# happyReduction_403+happyReduction_403 happy_x_1+ = case happyOut134 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_404 = happySpecReduce_1 119# happyReduction_404+happyReduction_404 happy_x_1+ = case happyOut135 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_405 = happySpecReduce_1 119# happyReduction_405+happyReduction_405 happy_x_1+ = case happyOut137 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_406 = happySpecReduce_1 119# happyReduction_406+happyReduction_406 happy_x_1+ = case happyOut138 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_407 = happySpecReduce_1 119# happyReduction_407+happyReduction_407 happy_x_1+ = case happyOut139 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_408 = happySpecReduce_1 119# happyReduction_408+happyReduction_408 happy_x_1+ = case happyOut140 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_409 = happySpecReduce_1 119# happyReduction_409+happyReduction_409 happy_x_1+ = case happyOut141 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_410 = happySpecReduce_1 119# happyReduction_410+happyReduction_410 happy_x_1+ = case happyOut142 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_411 = happySpecReduce_1 119# happyReduction_411+happyReduction_411 happy_x_1+ = case happyOut143 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_412 = happySpecReduce_1 119# happyReduction_412+happyReduction_412 happy_x_1+ = case happyOut144 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_413 = happySpecReduce_1 119# happyReduction_413+happyReduction_413 happy_x_1+ = case happyOut151 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_414 = happySpecReduce_1 119# happyReduction_414+happyReduction_414 happy_x_1+ = case happyOut152 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_415 = happySpecReduce_1 119# happyReduction_415+happyReduction_415 happy_x_1+ = case happyOut153 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_416 = happySpecReduce_1 119# happyReduction_416+happyReduction_416 happy_x_1+ = case happyOut148 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_417 = happySpecReduce_1 119# happyReduction_417+happyReduction_417 happy_x_1+ = case happyOut147 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_418 = happySpecReduce_1 119# happyReduction_418+happyReduction_418 happy_x_1+ = case happyOut146 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_419 = happySpecReduce_1 119# happyReduction_419+happyReduction_419 happy_x_1+ = case happyOut149 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_420 = happySpecReduce_1 119# happyReduction_420+happyReduction_420 happy_x_1+ = case happyOut150 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_421 = happySpecReduce_1 119# happyReduction_421+happyReduction_421 happy_x_1+ = case happyOut145 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_422 = happySpecReduce_1 119# happyReduction_422+happyReduction_422 happy_x_1+ = case happyOut154 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_423 = happySpecReduce_1 119# happyReduction_423+happyReduction_423 happy_x_1+ = case happyOut129 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_424 = happyReduce 4# 120# happyReduction_424+happyReduction_424 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwOPTIONS happy_var_2) -> + case happyOut31 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> + happyIn129+ (OptionsPragma (getRange (happy_var_1,happy_var_2,happy_var_4)) happy_var_3+ ) `HappyStk` happyRest}}}}++happyReduce_425 = happyReduce 5# 121# happyReduction_425+happyReduction_425 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwBUILTIN happy_var_2) -> + case happyOutTok happy_x_3 of { (TokString happy_var_3) -> + case happyOut35 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> + happyIn130+ (BuiltinPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4,happy_var_5)) (snd happy_var_3) (Ident happy_var_4)+ ) `HappyStk` happyRest}}}}}++happyReduce_426 = happyReduce 5# 121# happyReduction_426+happyReduction_426 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwBUILTIN happy_var_2) -> + case happyOutTok happy_x_3 of { (TokKeyword KwREWRITE happy_var_3) -> + case happyOut35 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> + happyIn130+ (BuiltinPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) "REWRITE" (Ident happy_var_4)+ ) `HappyStk` happyRest}}}}}++happyReduce_427 = happyReduce 4# 122# happyReduction_427+happyReduction_427 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwREWRITE happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> + happyIn131+ (RewritePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3+ ) `HappyStk` happyRest}}}}++happyReduce_428 = happyReduce 5# 123# happyReduction_428+happyReduction_428 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + case happyOut31 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> + happyIn132+ (CompiledPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)+ ) `HappyStk` happyRest}}}}}++happyReduce_429 = happyReduce 5# 124# happyReduction_429+happyReduction_429 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_EXPORT happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + case happyOut32 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> + happyIn133+ (CompiledExportPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 happy_var_4+ ) `HappyStk` happyRest}}}}}++happyReduce_430 = happyReduce 5# 125# happyReduction_430+happyReduction_430 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_DECLARE_DATA happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + case happyOut31 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> + happyIn134+ (CompiledDeclareDataPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)+ ) `HappyStk` happyRest}}}}}++happyReduce_431 = happyReduce 5# 126# happyReduction_431+happyReduction_431 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_TYPE happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + case happyOut31 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> + happyIn135+ (CompiledTypePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)+ ) `HappyStk` happyRest}}}}}++happyReduce_432 = happyReduce 6# 127# happyReduction_432+happyReduction_432 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_DATA happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokString happy_var_4) -> + case happyOut31 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> + happyIn136+ (CompiledDataPragma (getRange (happy_var_1,happy_var_2,happy_var_3,fst happy_var_4,happy_var_6)) happy_var_3 (snd happy_var_4) happy_var_5+ ) `HappyStk` happyRest}}}}}}++happyReduce_433 = happyReduce 5# 128# happyReduction_433+happyReduction_433 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_EPIC happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + case happyOut31 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> + happyIn137+ (CompiledEpicPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)+ ) `HappyStk` happyRest}}}}}++happyReduce_434 = happyReduce 5# 129# happyReduction_434+happyReduction_434 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_JS happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + case happyOut31 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> + happyIn138+ (CompiledJSPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)+ ) `HappyStk` happyRest}}}}}++happyReduce_435 = happyReduce 5# 130# happyReduction_435+happyReduction_435 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_UHC happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + case happyOut31 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> + happyIn139+ (CompiledUHCPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)+ ) `HappyStk` happyRest}}}}}++happyReduce_436 = happyReduce 6# 131# happyReduction_436+happyReduction_436 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_DATA_UHC happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokString happy_var_4) -> + case happyOut31 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> + happyIn140+ (CompiledDataUHCPragma (getRange (happy_var_1,happy_var_2,happy_var_3,fst happy_var_4,happy_var_6)) happy_var_3 (snd happy_var_4) happy_var_5+ ) `HappyStk` happyRest}}}}}}++happyReduce_437 = happyReduce 4# 132# happyReduction_437+happyReduction_437 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwHASKELL happy_var_2) -> + case happyOut33 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> + happyIn141+ (HaskellCodePragma (getRange (happy_var_1, happy_var_2, happy_var_4)) (recoverLayout happy_var_3)+ ) `HappyStk` happyRest}}}}++happyReduce_438 = happyReduce 4# 133# happyReduction_438+happyReduction_438 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwNO_SMASHING happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> + happyIn142+ (NoSmashingPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3+ ) `HappyStk` happyRest}}}}++happyReduce_439 = happyReduce 4# 134# happyReduction_439+happyReduction_439 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwSTATIC happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> + happyIn143+ (StaticPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3+ ) `HappyStk` happyRest}}}}++happyReduce_440 = happyReduce 4# 135# happyReduction_440+happyReduction_440 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwINLINE happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> + happyIn144+ (InlinePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3+ ) `HappyStk` happyRest}}}}++happyReduce_441 = happyMonadReduce 5# 136# happyReduction_441+happyReduction_441 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_3 of { (TokString happy_var_3) -> + case happyOut31 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> + (+ let (r, s) = happy_var_3 in+ parseDisplayPragma (fuseRange happy_var_1 happy_var_5) (iStart r) (unwords (s : happy_var_4)))}}}}+ ) (\r -> happyReturn (happyIn145 r))++happyReduce_442 = happySpecReduce_3 137# happyReduction_442+happyReduction_442 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwNO_TERMINATION_CHECK happy_var_2) -> + case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> + happyIn146+ (TerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3)) NoTerminationCheck+ )}}}++happyReduce_443 = happySpecReduce_3 138# happyReduction_443+happyReduction_443 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwNON_TERMINATING happy_var_2) -> + case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> + happyIn147+ (TerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3)) NonTerminating+ )}}}++happyReduce_444 = happySpecReduce_3 139# happyReduction_444+happyReduction_444 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwTERMINATING happy_var_2) -> + case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> + happyIn148+ (TerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3)) Terminating+ )}}}++happyReduce_445 = happyReduce 4# 140# happyReduction_445+happyReduction_445 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwMEASURE happy_var_2) -> + case happyOut34 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> + happyIn149+ (let r = getRange (happy_var_1, happy_var_2, happy_var_3, happy_var_4) in+ TerminationCheckPragma r (TerminationMeasure r happy_var_3)+ ) `HappyStk` happyRest}}}}++happyReduce_446 = happySpecReduce_3 141# happyReduction_446+happyReduction_446 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwCATCHALL happy_var_2) -> + case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> + happyIn150+ (CatchallPragma (getRange (happy_var_1,happy_var_2,happy_var_3))+ )}}}++happyReduce_447 = happyMonadReduce 4# 142# happyReduction_447+happyReduction_447 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwIMPORT happy_var_2) -> + case happyOutTok happy_x_3 of { (TokString happy_var_3) -> + case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> + ( let s = snd happy_var_3 in+ if validHaskellModuleName s+ then return $ ImportPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4)) s+ else parseError $ "Malformed module name: " ++ s ++ ".")}}}}+ ) (\r -> happyReturn (happyIn151 r))++happyReduce_448 = happyMonadReduce 4# 143# happyReduction_448+happyReduction_448 (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 { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwIMPORT_UHC happy_var_2) -> + case happyOutTok happy_x_3 of { (TokString happy_var_3) -> + case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> + ( let s = snd happy_var_3 in+ if validHaskellModuleName s+ then return $ ImportUHCPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4)) s+ else parseError $ "Malformed module name: " ++ s ++ ".")}}}}+ ) (\r -> happyReturn (happyIn152 r))++happyReduce_449 = happySpecReduce_3 144# happyReduction_449+happyReduction_449 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwIMPOSSIBLE happy_var_2) -> + case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> + happyIn153+ (ImpossiblePragma (getRange (happy_var_1,happy_var_2,happy_var_3))+ )}}}++happyReduce_450 = happySpecReduce_3 145# happyReduction_450+happyReduction_450 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> + case happyOutTok happy_x_2 of { (TokKeyword KwNO_POSITIVITY_CHECK happy_var_2) -> + case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> + happyIn154+ (NoPositivityCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3))+ )}}}++happyReduce_451 = happySpecReduce_3 146# happyReduction_451+happyReduction_451 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut156 happy_x_2 of { happy_var_2 -> + happyIn155+ (reverse happy_var_2+ )}++happyReduce_452 = happySpecReduce_3 147# happyReduction_452+happyReduction_452 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut156 happy_x_1 of { happy_var_1 -> + case happyOut91 happy_x_3 of { happy_var_3 -> + happyIn156+ (reverse happy_var_3 ++ happy_var_1+ )}}++happyReduce_453 = happySpecReduce_1 147# happyReduction_453+happyReduction_453 happy_x_1+ = case happyOut91 happy_x_1 of { happy_var_1 -> + happyIn156+ (reverse happy_var_1+ )}++happyReduce_454 = happySpecReduce_3 148# happyReduction_454+happyReduction_454 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut158 happy_x_2 of { happy_var_2 -> + happyIn157+ (reverse happy_var_2+ )}++happyReduce_455 = happySpecReduce_3 149# happyReduction_455+happyReduction_455 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut158 happy_x_1 of { happy_var_1 -> + case happyOut92 happy_x_3 of { happy_var_3 -> + happyIn158+ (reverse happy_var_3 ++ happy_var_1+ )}}++happyReduce_456 = happySpecReduce_1 149# happyReduction_456+happyReduction_456 happy_x_1+ = case happyOut92 happy_x_1 of { happy_var_1 -> + happyIn158+ (reverse happy_var_1+ )}++happyReduce_457 = happyMonadReduce 3# 150# happyReduction_457+happyReduction_457 (happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut160 happy_x_2 of { happy_var_2 -> + ( ((,) `fmap` verifyRecordDirectives happy_var_2 <*> pure []))}+ ) (\r -> happyReturn (happyIn159 r))++happyReduce_458 = happyMonadReduce 5# 150# happyReduction_458+happyReduction_458 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut160 happy_x_2 of { happy_var_2 -> + case happyOut166 happy_x_4 of { happy_var_4 -> + ( ((,) `fmap` verifyRecordDirectives happy_var_2 <*> pure happy_var_4))}}+ ) (\r -> happyReturn (happyIn159 r))++happyReduce_459 = happyMonadReduce 3# 150# happyReduction_459+happyReduction_459 (happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut166 happy_x_2 of { happy_var_2 -> + ( ((,) `fmap` verifyRecordDirectives [] <*> pure happy_var_2))}+ ) (\r -> happyReturn (happyIn159 r))++happyReduce_460 = happySpecReduce_0 151# happyReduction_460+happyReduction_460 = happyIn160+ ([]+ )++happyReduce_461 = happySpecReduce_3 151# happyReduction_461+happyReduction_461 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut160 happy_x_1 of { happy_var_1 -> + case happyOut161 happy_x_3 of { happy_var_3 -> + happyIn160+ (happy_var_3 : happy_var_1+ )}}++happyReduce_462 = happySpecReduce_1 151# happyReduction_462+happyReduction_462 happy_x_1+ = case happyOut161 happy_x_1 of { happy_var_1 -> + happyIn160+ ([happy_var_1]+ )}++happyReduce_463 = happySpecReduce_1 152# happyReduction_463+happyReduction_463 happy_x_1+ = case happyOut99 happy_x_1 of { happy_var_1 -> + happyIn161+ (Constructor happy_var_1+ )}++happyReduce_464 = happySpecReduce_1 152# happyReduction_464+happyReduction_464 happy_x_1+ = case happyOut163 happy_x_1 of { happy_var_1 -> + happyIn161+ (Induction happy_var_1+ )}++happyReduce_465 = happySpecReduce_1 152# happyReduction_465+happyReduction_465 happy_x_1+ = case happyOut162 happy_x_1 of { happy_var_1 -> + happyIn161+ (Eta happy_var_1+ )}++happyReduce_466 = happySpecReduce_1 153# happyReduction_466+happyReduction_466 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwEta happy_var_1) -> + happyIn162+ (Ranged (getRange happy_var_1) True+ )}++happyReduce_467 = happySpecReduce_1 153# happyReduction_467+happyReduction_467 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwNoEta happy_var_1) -> + happyIn162+ (Ranged (getRange happy_var_1) False+ )}++happyReduce_468 = happySpecReduce_1 154# happyReduction_468+happyReduction_468 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwInductive happy_var_1) -> + happyIn163+ (Ranged (getRange happy_var_1) Inductive+ )}++happyReduce_469 = happySpecReduce_1 154# happyReduction_469+happyReduction_469 happy_x_1+ = case happyOutTok happy_x_1 of { (TokKeyword KwCoInductive happy_var_1) -> + happyIn163+ (Ranged (getRange happy_var_1) CoInductive+ )}++happyReduce_470 = happySpecReduce_3 155# happyReduction_470+happyReduction_470 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut166 happy_x_2 of { happy_var_2 -> + happyIn164+ (happy_var_2+ )}++happyReduce_471 = happySpecReduce_2 156# happyReduction_471+happyReduction_471 happy_x_2+ happy_x_1+ = happyIn165+ ([]+ )++happyReduce_472 = happySpecReduce_1 156# happyReduction_472+happyReduction_472 happy_x_1+ = case happyOut164 happy_x_1 of { happy_var_1 -> + happyIn165+ (happy_var_1+ )}++happyReduce_473 = happySpecReduce_3 157# happyReduction_473+happyReduction_473 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut90 happy_x_1 of { happy_var_1 -> + case happyOut166 happy_x_3 of { happy_var_3 -> + happyIn166+ (happy_var_1 ++ happy_var_3+ )}}++happyReduce_474 = happySpecReduce_1 157# happyReduction_474+happyReduction_474 happy_x_1+ = case happyOut90 happy_x_1 of { happy_var_1 -> + happyIn166+ (happy_var_1+ )}++happyReduce_475 = happySpecReduce_0 158# happyReduction_475+happyReduction_475 = happyIn167+ ([]+ )++happyReduce_476 = happySpecReduce_1 158# happyReduction_476+happyReduction_476 happy_x_1+ = case happyOut166 happy_x_1 of { happy_var_1 -> + happyIn167+ (happy_var_1+ )}++happyNewToken action sts stk+ = lexer(\tk -> + let cont i = happyDoAction i tk action sts stk in+ case tk of {+ TokEOF -> happyDoAction 102# tk action sts stk;+ TokKeyword KwAbstract happy_dollar_dollar -> cont 1#;+ TokKeyword KwCoData happy_dollar_dollar -> cont 2#;+ TokKeyword KwCoInductive happy_dollar_dollar -> cont 3#;+ TokKeyword KwConstructor happy_dollar_dollar -> cont 4#;+ TokKeyword KwData happy_dollar_dollar -> cont 5#;+ TokKeyword KwEta happy_dollar_dollar -> cont 6#;+ TokKeyword KwField happy_dollar_dollar -> cont 7#;+ TokKeyword KwForall happy_dollar_dollar -> cont 8#;+ TokKeyword KwHiding happy_dollar_dollar -> cont 9#;+ TokKeyword KwImport happy_dollar_dollar -> cont 10#;+ TokKeyword KwIn happy_dollar_dollar -> cont 11#;+ TokKeyword KwInductive happy_dollar_dollar -> cont 12#;+ TokKeyword KwInfix happy_dollar_dollar -> cont 13#;+ TokKeyword KwInfixL happy_dollar_dollar -> cont 14#;+ TokKeyword KwInfixR happy_dollar_dollar -> cont 15#;+ TokKeyword KwInstance happy_dollar_dollar -> cont 16#;+ TokKeyword KwLet happy_dollar_dollar -> cont 17#;+ TokKeyword KwMacro happy_dollar_dollar -> cont 18#;+ TokKeyword KwModule happy_dollar_dollar -> cont 19#;+ TokKeyword KwMutual happy_dollar_dollar -> cont 20#;+ TokKeyword KwNoEta happy_dollar_dollar -> cont 21#;+ TokKeyword KwOpen happy_dollar_dollar -> cont 22#;+ TokKeyword KwPatternSyn happy_dollar_dollar -> cont 23#;+ TokKeyword KwPostulate happy_dollar_dollar -> cont 24#;+ TokKeyword KwPrimitive happy_dollar_dollar -> cont 25#;+ TokKeyword KwPrivate happy_dollar_dollar -> cont 26#;+ TokKeyword KwProp happy_dollar_dollar -> cont 27#;+ TokKeyword KwPublic happy_dollar_dollar -> cont 28#;+ TokKeyword KwQuote happy_dollar_dollar -> cont 29#;+ TokKeyword KwQuoteContext happy_dollar_dollar -> cont 30#;+ TokKeyword KwQuoteGoal happy_dollar_dollar -> cont 31#;+ TokKeyword KwQuoteTerm happy_dollar_dollar -> cont 32#;+ TokKeyword KwRecord happy_dollar_dollar -> cont 33#;+ TokKeyword KwRenaming happy_dollar_dollar -> cont 34#;+ TokKeyword KwRewrite happy_dollar_dollar -> cont 35#;+ TokKeyword KwSet happy_dollar_dollar -> cont 36#;+ TokKeyword KwSyntax happy_dollar_dollar -> cont 37#;+ TokKeyword KwTactic happy_dollar_dollar -> cont 38#;+ TokKeyword KwTo happy_dollar_dollar -> cont 39#;+ TokKeyword KwUnquote happy_dollar_dollar -> cont 40#;+ TokKeyword KwUnquoteDecl happy_dollar_dollar -> cont 41#;+ TokKeyword KwUnquoteDef happy_dollar_dollar -> cont 42#;+ TokKeyword KwUsing happy_dollar_dollar -> cont 43#;+ TokKeyword KwWhere happy_dollar_dollar -> cont 44#;+ TokKeyword KwWith happy_dollar_dollar -> cont 45#;+ TokKeyword KwBUILTIN happy_dollar_dollar -> cont 46#;+ TokKeyword KwCATCHALL happy_dollar_dollar -> cont 47#;+ TokKeyword KwCOMPILED happy_dollar_dollar -> cont 48#;+ TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 49#;+ TokKeyword KwCOMPILED_DATA_UHC happy_dollar_dollar -> cont 50#;+ TokKeyword KwCOMPILED_DECLARE_DATA happy_dollar_dollar -> cont 51#;+ TokKeyword KwCOMPILED_EPIC happy_dollar_dollar -> cont 52#;+ TokKeyword KwCOMPILED_EXPORT happy_dollar_dollar -> cont 53#;+ TokKeyword KwCOMPILED_JS happy_dollar_dollar -> cont 54#;+ TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 55#;+ TokKeyword KwCOMPILED_UHC happy_dollar_dollar -> cont 56#;+ TokKeyword KwHASKELL happy_dollar_dollar -> cont 57#;+ TokKeyword KwDISPLAY happy_dollar_dollar -> cont 58#;+ TokKeyword KwIMPORT happy_dollar_dollar -> cont 59#;+ TokKeyword KwIMPORT_UHC happy_dollar_dollar -> cont 60#;+ TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 61#;+ TokKeyword KwINLINE happy_dollar_dollar -> cont 62#;+ TokKeyword KwMEASURE happy_dollar_dollar -> cont 63#;+ TokKeyword KwNO_SMASHING happy_dollar_dollar -> cont 64#;+ TokKeyword KwNO_TERMINATION_CHECK happy_dollar_dollar -> cont 65#;+ TokKeyword KwNO_POSITIVITY_CHECK happy_dollar_dollar -> cont 66#;+ TokKeyword KwNON_TERMINATING happy_dollar_dollar -> cont 67#;+ TokKeyword KwOPTIONS happy_dollar_dollar -> cont 68#;+ TokKeyword KwREWRITE happy_dollar_dollar -> cont 69#;+ TokKeyword KwSTATIC happy_dollar_dollar -> cont 70#;+ TokKeyword KwTERMINATING happy_dollar_dollar -> cont 71#;+ TokSetN happy_dollar_dollar -> cont 72#;+ TokTeX happy_dollar_dollar -> cont 73#;+ TokComment happy_dollar_dollar -> cont 74#;+ TokSymbol SymEllipsis happy_dollar_dollar -> cont 75#;+ TokSymbol SymDotDot happy_dollar_dollar -> cont 76#;+ TokSymbol SymDot happy_dollar_dollar -> cont 77#;+ TokSymbol SymSemi happy_dollar_dollar -> cont 78#;+ TokSymbol SymColon happy_dollar_dollar -> cont 79#;+ TokSymbol SymEqual happy_dollar_dollar -> cont 80#;+ TokSymbol SymUnderscore happy_dollar_dollar -> cont 81#;+ TokSymbol SymQuestionMark happy_dollar_dollar -> cont 82#;+ TokSymbol SymArrow happy_dollar_dollar -> cont 83#;+ TokSymbol SymLambda happy_dollar_dollar -> cont 84#;+ TokSymbol SymAs happy_dollar_dollar -> cont 85#;+ TokSymbol SymBar happy_dollar_dollar -> cont 86#;+ TokSymbol SymOpenParen happy_dollar_dollar -> cont 87#;+ TokSymbol SymCloseParen happy_dollar_dollar -> cont 88#;+ TokSymbol SymDoubleOpenBrace happy_dollar_dollar -> cont 89#;+ TokSymbol SymDoubleCloseBrace happy_dollar_dollar -> cont 90#;+ TokSymbol SymOpenBrace happy_dollar_dollar -> cont 91#;+ TokSymbol SymCloseBrace happy_dollar_dollar -> cont 92#;+ TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 93#;+ TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 94#;+ TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 95#;+ TokSymbol SymOpenPragma happy_dollar_dollar -> cont 96#;+ TokSymbol SymClosePragma happy_dollar_dollar -> cont 97#;+ TokId happy_dollar_dollar -> cont 98#;+ TokQId happy_dollar_dollar -> cont 99#;+ TokString happy_dollar_dollar -> cont 100#;+ TokLiteral happy_dollar_dollar -> cont 101#;+ _ -> happyError' tk+ })++happyError_ 102# tk = happyError' tk+happyError_ _ tk = happyError' tk++happyThen :: () => Parser a -> (a -> Parser b) -> Parser b+happyThen = (>>=)+happyReturn :: () => a -> Parser a+happyReturn = (return)+happyThen1 = happyThen+happyReturn1 :: () => a -> Parser a+happyReturn1 = happyReturn+happyError' :: () => (Token) -> Parser a+happyError' tk = (\token -> happyError) tk++tokensParser = happySomeParser where+ happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut9 x))++exprParser = happySomeParser where+ happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut36 x))++exprWhereParser = happySomeParser where+ happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut89 x))++moduleParser = happySomeParser where+ happySomeParser = happyThen (happyParse 3#) (\x -> happyReturn (happyOut12 x))++moduleNameParser = happySomeParser where+ happySomeParser = happyThen (happyParse 4#) (\x -> happyReturn (happyOut25 x))++funclauseParser = happySomeParser where+ happySomeParser = happyThen (happyParse 5#) (\x -> happyReturn (happyOut93 x))++happySeq = happyDontSeq+++{--------------------------------------------------------------------------+ Parsers+ --------------------------------------------------------------------------}++-- | Parse the token stream. Used by the TeX compiler.+tokensParser :: Parser [Token]++-- | Parse an expression. Could be used in interactions.+exprParser :: Parser Expr++-- | Parse an expression followed by a where clause. Could be used in interactions.+exprWhereParser :: Parser ExprWhere++-- | Parse a module.+moduleParser :: Parser Module+++{--------------------------------------------------------------------------+ Happy stuff+ --------------------------------------------------------------------------}++-- | Required by Happy.+happyError :: Parser a+happyError = parseError "Parse error"+++{--------------------------------------------------------------------------+ Utility functions+ --------------------------------------------------------------------------}++-- | Grab leading OPTIONS pragmas.+takeOptionsPragmas :: [Declaration] -> ([Pragma], [Declaration])+takeOptionsPragmas = spanJust $ \ d -> case d of+ Pragma p@OptionsPragma{} -> Just p+ _ -> Nothing++-- | Insert a top-level module if there is none.+-- Also fix-up for the case the declarations in the top-level module+-- are not indented (this is allowed as a special case).+figureOutTopLevelModule :: [Declaration] -> [Declaration]+figureOutTopLevelModule ds =+ case spanAllowedBeforeModule ds of+ -- Andreas 2016-02-01, issue #1388.+ -- We need to distinguish two additional cases.+ -- Case 1: Regular file layout: imports followed by one module. Nothing to do.+ (ds0, [ Module{} ]) -> ds+ -- Case 2: The declarations in the module are not indented.+ -- This is allowed for the top level module, and thus rectified here.+ (ds0, Module r m tel [] : ds2) -> ds0 ++ [Module r m tel ds2]+ -- Case 3: There is a module with indented declarations,+ -- followed by non-indented declarations. This should be a+ -- parse error and be reported later (see @toAbstract TopLevel{}@),+ -- thus, we do not do anything here.+ (ds0, Module r m tel ds1 : ds2) -> ds -- Gives parse error in scope checker.+ -- OLD code causing issue 1388:+ -- (ds0, Module r m tel ds1 : ds2) -> ds0 ++ [Module r m tel $ ds1 ++ ds2]+ -- Case 4: a top-level module declaration is missing.+ (ds0, ds1) -> ds0 ++ [Module (getRange ds1) (QName noName_) [] ds1]++-- | Create a name from a string.++mkName :: (Interval, String) -> Parser Name+mkName (i, s) = do+ let xs = C.stringNameParts s+ mapM_ isValidId xs+ unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"+ return $ Name (getRange i) xs+ where+ isValidId Hole = return ()+ isValidId (Id y) = do+ let x = rawNameToString y+ case parse defaultParseFlags [0] (lexer return) x of+ ParseOk _ (TokId _) -> return ()+ _ -> fail $ "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"++ -- we know that there are no two Ids in a row+ alternating (Hole : Hole : _) = False+ alternating (_ : xs) = alternating xs+ alternating [] = True++-- | Create a qualified name from a list of strings+mkQName :: [(Interval, String)] -> Parser QName+mkQName ss = do+ xs <- mapM mkName ss+ return $ foldr Qual (QName $ last xs) (init xs)++recoverLayout :: [(Interval, String)] -> String+recoverLayout [] = ""+recoverLayout xs@((i, _) : _) = go (iStart i) xs+ where+ c0 = posCol (iStart i)++ go cur [] = ""+ go cur ((i, s) : xs) = padding cur (iStart i) ++ s ++ go (iEnd i) xs++ padding Pn{ posLine = l1, posCol = c1 } Pn{ posLine = l2, posCol = c2 }+ | l1 < l2 = genericReplicate (l2 - l1) '\n' ++ genericReplicate (max 0 (c2 - c0)) ' '+ | l1 == l2 = genericReplicate (c2 - c1) ' '++ensureUnqual :: QName -> Parser Name+ensureUnqual (QName x) = return x+ensureUnqual q@Qual{} = parseError' (rStart' $ getRange q) "Qualified name not allowed here"++-- | Match a particular name.+isName :: String -> (Interval, String) -> Parser ()+isName s (_,s')+ | s == s' = return ()+ | otherwise = fail $ "expected " ++ s ++ ", found " ++ s'++-- | Build a forall pi (forall x y z -> ...)+forallPi :: [LamBinding] -> Expr -> Expr+forallPi bs e = Pi (map addType bs) e++-- | Build a telescoping let (let Ds)+tLet :: Range -> [Declaration] -> TypedBindings+tLet r = TypedBindings r . Arg defaultArgInfo . TLet r++-- | Converts lambda bindings to typed bindings.+addType :: LamBinding -> TypedBindings+addType (DomainFull b) = b+addType (DomainFree info x) = TypedBindings r $ Arg info $ TBind r [pure x] $ Underscore r Nothing+ where r = getRange x++mergeImportDirectives :: [ImportDirective] -> Parser ImportDirective+mergeImportDirectives is = do+ i <- foldl merge (return defaultImportDir) is+ verifyImportDirective i+ where+ merge mi i2 = do+ i1 <- mi+ let err = parseError' (rStart' $ getRange i2) "Cannot mix using and hiding module directives"+ return $ ImportDirective+ { importDirRange = fuseRange i1 i2+ , using = mappend (using i1) (using i2)+ , hiding = hiding i1 ++ hiding i2+ , impRenaming = impRenaming i1 ++ impRenaming i2+ , publicOpen = publicOpen i1 || publicOpen i2 }++-- | Check that an import directive doesn't contain repeated names+verifyImportDirective :: ImportDirective -> Parser ImportDirective+verifyImportDirective i =+ case filter ((>1) . length)+ $ group+ $ sort xs+ of+ [] -> return i+ yss -> let Just pos = rStart' $ getRange $ head $ concat yss in+ parseErrorAt pos $+ "Repeated name" ++ s ++ " in import directive: " +++ concat (intersperse ", " $ map (show . head) yss)+ where+ s = case yss of+ [_] -> ""+ _ -> "s"+ where+ xs = names (using i) ++ hiding i ++ map renFrom (impRenaming i)+ names (Using xs) = xs+ names UseEverything = []++data RecordDirective+ = Induction (Ranged Induction)+ | Constructor (Name, IsInstance)+ | Eta (Ranged Bool)+ deriving (Eq,Show)++verifyRecordDirectives :: [RecordDirective] -> Parser (Maybe (Ranged Induction), Maybe Bool, Maybe (Name, IsInstance))+verifyRecordDirectives xs | null rs = return (ltm is, ltm es, ltm cs)+ | otherwise = let Just pos = rStart' $ (head rs) in+ parseErrorAt pos $ "Repeated record directives at: \n" ++ intercalate "\n" (map show rs)++ where+ ltm :: [a] -> Maybe a+ ltm [] = Nothing+ ltm (x:xs) = Just x+ errorFromList [] = []+ errorFromList [x] = []+ errorFromList xs = map getRange xs+ rs = sort (concat ([errorFromList is, errorFromList es', errorFromList cs]))+ is = [ i | Induction i <- xs ]+ es' = [ i | Eta i <- xs ]+ es = map rangedThing es'+ cs = [ i | Constructor i <- xs ]+++-- | Breaks up a string into substrings. Returns every maximal+-- subsequence of zero or more characters distinct from @'.'@.+--+-- > splitOnDots "" == [""]+-- > splitOnDots "foo.bar" == ["foo", "bar"]+-- > splitOnDots ".foo.bar" == ["", "foo", "bar"]+-- > splitOnDots "foo.bar." == ["foo", "bar", ""]+-- > splitOnDots "foo..bar" == ["foo", "", "bar"]+splitOnDots :: String -> [String]+splitOnDots "" = [""]+splitOnDots ('.' : s) = [] : splitOnDots s+splitOnDots (c : s) = case splitOnDots s of+ p : ps -> (c : p) : ps++prop_splitOnDots = and+ [ splitOnDots "" == [""]+ , splitOnDots "foo.bar" == ["foo", "bar"]+ , splitOnDots ".foo.bar" == ["", "foo", "bar"]+ , splitOnDots "foo.bar." == ["foo", "bar", ""]+ , splitOnDots "foo..bar" == ["foo", "", "bar"]+ ]++-- | Returns 'True' iff the name is a valid Haskell (hierarchical)+-- module name.+validHaskellModuleName :: String -> Bool+validHaskellModuleName = all ok . splitOnDots+ where+ -- Checks if a dot-less module name is well-formed.+ ok :: String -> Bool+ ok [] = False+ ok (c : s) =+ isUpper c &&+ all (\c -> isLower c || c == '_' ||+ isUpper c ||+ generalCategory c == DecimalNumber ||+ c == '\'')+ s++{--------------------------------------------------------------------------+ Patterns+ --------------------------------------------------------------------------}++-- | Turn an expression into a left hand side.+exprToLHS :: Expr -> Parser ([Expr] -> [Expr] -> LHS)+exprToLHS e = case e of+ WithApp r e es -> LHS <$> exprToPattern e <*> mapM exprToPattern es+ _ -> LHS <$> exprToPattern e <*> return []++-- | Turn an expression into a pattern. Fails if the expression is not a+-- valid pattern.+exprToPattern :: Expr -> Parser Pattern+exprToPattern e = do+ let Just pos = rStart' $ getRange e+ failure = parseErrorAt pos $ "Not a valid pattern: " ++ show e+ case e of+ Ident x -> return $ IdentP x+ App _ e1 e2 -> AppP <$> exprToPattern e1+ <*> T.mapM (T.mapM exprToPattern) e2+ Paren r e -> ParenP r+ <$> exprToPattern e+ Underscore r _ -> return $ WildP r+ Absurd r -> return $ AbsurdP r+ As r x e -> AsP r x <$> exprToPattern e+ Dot r (HiddenArg _ e) -> return $ HiddenP r $ fmap (DotP r) e+ Dot r e -> return $ DotP r e+ Lit l -> return $ LitP l+ HiddenArg r e -> HiddenP r <$> T.mapM exprToPattern e+ InstanceArg r e -> InstanceP r <$> T.mapM exprToPattern e+ RawApp r es -> RawAppP r <$> mapM exprToPattern es+ Quote r -> return $ QuoteP r+ Rec r es | Just fs <- mapM maybeLeft es -> do+ RecP r <$> T.mapM (T.mapM exprToPattern) fs+ _ -> failure++opAppExprToPattern :: OpApp Expr -> Parser Pattern+opAppExprToPattern (SyntaxBindingLambda _ _ _) = parseError "Syntax binding lambda cannot appear in a pattern"+opAppExprToPattern (Ordinary e) = exprToPattern e++-- | Turn an expression into a name. Fails if the expression is not a+-- valid identifier.+exprToName :: Expr -> Parser Name+exprToName (Ident (QName x)) = return x+exprToName e =+ let Just pos = rStart' $ getRange e in+ parseErrorAt pos $ "Not a valid identifier: " ++ show e++stripSingletonRawApp :: Expr -> Expr+stripSingletonRawApp (RawApp _ [e]) = stripSingletonRawApp e+stripSingletonRawApp e = e++isEqual :: Expr -> Maybe (Expr, Expr)+isEqual e =+ case stripSingletonRawApp e of+ Equal _ a b -> Just (stripSingletonRawApp a, stripSingletonRawApp b)+ _ -> Nothing++maybeNamed :: Expr -> Named_ Expr+maybeNamed e =+ case isEqual e of+ Just (Ident (QName x), b) -> named (Ranged (getRange x) (nameToRawName x)) b+ _ -> unnamed e++patternSynArgs :: [Either Hiding LamBinding] -> Parser [Arg Name]+patternSynArgs = mapM pSynArg+ where+ pSynArg Left{} = parseError "Absurd patterns are not allowed in pattern synonyms"+ pSynArg (Right DomainFull{}) = parseError "Unexpected type signature in pattern synonym argument"+ pSynArg (Right (DomainFree a x))+ | getHiding a `notElem` [Hidden, NotHidden] = parseError $ show (getHiding a) ++ " arguments not allowed to pattern synonyms"+ | getRelevance a /= Relevant = parseError "Arguments to pattern synonyms must be relevant"+ | otherwise = return $ Arg a (boundName x)++parsePanic s = parseError $ "Internal parser error: " ++ s ++ ". Please report this as a bug."++{- RHS or type signature -}++data RHSOrTypeSigs+ = JustRHS RHS+ | TypeSigsRHS Expr+ deriving Show++patternToNames :: Pattern -> Parser [(ArgInfo, Name)]+patternToNames p =+ case p of+ IdentP (QName i) -> return [(defaultArgInfo, i)]+ WildP r -> return [(defaultArgInfo, C.noName r)]+ DotP _ (Ident (QName i)) -> return [(setRelevance Irrelevant defaultArgInfo, i)]+ RawAppP _ ps -> concat <$> mapM patternToNames ps+ _ -> parseError $+ "Illegal name in type signature: " ++ prettyShow p++funClauseOrTypeSigs :: LHS -> RHSOrTypeSigs -> WhereClause -> Parser [Declaration]+funClauseOrTypeSigs lhs mrhs wh = do+ -- traceShowM lhs+ case mrhs of+ JustRHS rhs -> return [FunClause lhs rhs wh False]+ TypeSigsRHS e -> case wh of+ NoWhere -> case lhs of+ Ellipsis{} -> parseError "The ellipsis ... cannot have a type signature"+ LHS _ _ _ (_:_) -> parseError "Illegal: with in type signature"+ LHS _ _ (_:_) _ -> parseError "Illegal: rewrite in type signature"+ LHS _ (_:_) _ _ -> parseError "Illegal: with patterns in type signature"+ LHS p [] [] [] -> map (\ (x, y) -> TypeSig x y e) <$> patternToNames p+ _ -> parseError "A type signature cannot have a where clause"++parseDisplayPragma :: Range -> Position -> String -> Parser Pragma+parseDisplayPragma r pos s =+ case parsePosString pos defaultParseFlags [normal] funclauseParser s of+ ParseOk s [FunClause (LHS lhs [] [] []) (RHS rhs) NoWhere ca] | null (parseInp s) ->+ return $ DisplayPragma r lhs rhs+ _ -> parseError "Invalid DISPLAY pragma. Should have form {-# DISPLAY LHS = RHS #-}."++{--------------------------------------------------------------------------+ Tests+ --------------------------------------------------------------------------}++-- | Test suite.+tests :: IO Bool+tests = runTests "Agda.Syntax.Parser.Parser"+ [ quickCheck' prop_splitOnDots+ ]+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command-line>" #-}+{-# LINE 11 "<command-line>" #-}+{-# LINE 1 "/usr/local/stow/ghc-8.0-upstream/lib/ghc-8.0.0.20160316/include/ghcversion.h" #-}+
+ src/agda-ghc-names/ExtractNames.hs view
@@ -0,0 +1,152 @@+-- ExtractNames.hs+-- Copyright 2015 by Wolfram Kahl+-- Licensed under the same terms as Agda++{-# LANGUAGE ScopedTypeVariables, FlexibleContexts #-}++module ExtractNames where++import Control.Monad (liftM)+import Control.Monad.State (evalStateT, MonadState(..))++import Data.List (stripPrefix)+import Data.Char (isSpace)++import qualified Language.Haskell.Exts as Hs++import System.FilePath.Find (find, always, fileType, (==?), (&&?), FileType(RegularFile), extension)++import Debug.Trace+++getModule :: MonadState [String] m => m String+getModule = get >>= h+ where+ h [] = fail "No module declarations found."+ h (s : ss) = case stripPrefix "module " s of+ Just s' -> case words s' of+ modname : "where" : _ -> do+ put ss+ return modname+ _ -> h ss+ Nothing -> h ss++-- The following assumes that+-- Agda.Compiler.MAlonzo.Compiler.infodecl+-- generates definitions of shape+-- nameXYZ = "AgdaName"+-- immediately preceeding definitions of shape+-- dXYZ = ...++infoDeclNamePrefix, hsIdentPrefix :: String+infoDeclNamePrefix = "name"+hsIdentPrefix = "d"+hsSubIdentPrefix = "du"++getNames0 :: forall m . MonadState [String] m => String -> m [(String, String)]+getNames0 modname = get >>= h+ where+ h :: [String] -> m [(String, String)]+ h [] = return []+ h (d : ss) = case stripPrefix infoDeclNamePrefix d of+ Nothing -> h ss+ Just d' -> case words d' of+ unique : "=" : agdaName : [] -> k ss+ where+ hsName = hsIdentPrefix ++ unique+ -- Some names have no definitions, so we need to check+ -- whether there is a definition on the next line,+ -- and only on the next line.+ -- Names without definition still can be referenced in .prof files;+ -- we flag these with a preceding ``!'':+ hsUndefName = '!' : hsName+ k :: [String] -> m [(String, String)]+ k [] = return [(hsUndefName, agdaName)]+ k (s : ss') = case stripPrefix hsIdentPrefix s of+ Nothing -> liftM ((hsUndefName, agdaName) :) $ h ss+ Just s' -> if unique == takeWhile (not . isSpace) s' -- sanity check+ then liftM ((hsName, agdaName) :) $ h ss'+ else fail $ "infodecl\n " ++ d ++ "\nsucceeded by definition\n " ++ s+ _ -> fail $ "Unexpected trailing material in infodecl:\n " ++ modname ++ '.' : d++-- getNames0 assumes that |infoDecl|s are layout on single lines,+-- which is not true due to the pretty-printing employed.++-- So we need to either join lines,+-- or actually parse Haskell.+-- I try the latter for now, hoping that this is not too brittle.++moduleName :: Hs.Module -> String+moduleName (Hs.Module _ (Hs.ModuleName modname) _ _ _ _ _) = modname++moduleDecls :: Hs.Module -> [Hs.Decl]+moduleDecls (Hs.Module _ _ _ _ _ _ decls) = decls++-- We assume that all ``nameXYZ'' definitions are pattern bindings.+-- Only for these we really need the RHS.+-- Not all ``dXYZ'' definitions are pattern bindings ---+-- for those that are not, we currently just return the first RHS,+-- and will not look at it.+filterDecls :: [Hs.Decl] -> [(String, Hs.Rhs)]+filterDecls = foldr f []+ where+ f (Hs.PatBind _loc (Hs.PVar (Hs.Ident varname)) rhs _binds) r = (varname, rhs) : r+ f (Hs.FunBind ((Hs.Match _loc (Hs.Ident fName) _pats _mtype rhs _binds) : _)) r = (fName, rhs) : r+ f _ r = r++getNames :: String -> [(String, Hs.Rhs)] -> [(String, String)]+getNames modul = h+ where+ h :: [(String, Hs.Rhs)] -> [(String, String)]+ h [] = []+ h ((name1, Hs.UnGuardedRhs rhs) : ds) = case stripPrefix infoDeclNamePrefix name1 of+ Nothing -> h ds+ Just unique -> case rhs of+ Hs.Lit (Hs.String agdaName) -> expectDef hsIdentPrefix (expectDef hsSubIdentPrefix h) ds+ where+ hsName = hsIdentPrefix ++ unique+ hsName2 = hsSubIdentPrefix ++ unique+ -- Some names have no definitions, so we need to check+ -- whether there is a definition on the next line,+ -- and only on the next line.+ -- Names without definition still can be referenced in .prof files.+ -- TODO: Should we flag these in some way?+ expectDef :: String -> ([(String, Hs.Rhs)] -> [(String, String)]) -> [(String, Hs.Rhs)] -> [(String, String)]+ expectDef _ _ [] = [(hsName, agdaName)]+ expectDef prefix cont ((name2, _) : ds') = case stripPrefix prefix name2 of+ Nothing -> (hsName, agdaName) : h ds+ Just unique' -> if unique == unique' -- sanity check+ then (name2, agdaName) : cont ds'+ else error $ "infodecl\n " ++ name1 ++ " = " ++ show rhs ++ "\nsucceeded by definition\n " ++ name2 ++ " = ..."+ _ -> error $ "Unexpected RHS in infodecl:\n " ++ modul ++ '.' : name1+ h ((_name, _rhs) : ds) = h ds+++namesFromFile0 :: FilePath -> IO (String, [(String, String)])+namesFromFile0 file = do+ ss <- liftM lines $ readFile file+ evalStateT `flip` ss $ do+ hmod <- getModule+ pairs <- getNames0 hmod+ return (hmod, pairs)++namesFromFile :: FilePath -> IO ((String, [(String, String)]), Int)+namesFromFile file = do+ parseResult <- trace (file ++ ": starting") $ Hs.parseFile file+ case parseResult of+ Hs.ParseFailed sloc msg -> fail $ file ++ ": " ++ show sloc ++ ": " ++ msg+ Hs.ParseOk modul -> let+ hmod = moduleName modul+ declPairs = filterDecls $ moduleDecls modul+ pairs = getNames hmod declPairs+ pairLen (x, y) = length x + length y+ forceLen = length hmod + sum (map pairLen pairs)+ in -- thetrace serves not only for information,+ -- but also to force evaluation.+ trace (file ++ ": \t" ++ show (length pairs) ++ " names; " ++ shows forceLen " characters")+ $ return ((hmod, pairs), forceLen)++namesFromDir :: FilePath -> IO [((String, [(String, String)]), Int)]+namesFromDir dir = do+ files <- find always (fileType ==? RegularFile &&? extension ==? ".hs") dir+ mapM namesFromFile files
+ src/agda-ghc-names/Find.hs view
@@ -0,0 +1,50 @@+-- agda-ghc-names/Find.hs+-- Copyright 2015 by Wolfram Kahl+-- Licensed under the same terms as Agda++module Find where++import ResolveHsNames (getResolveHsNamesMap, splitLastDotM, splitMapApply)+import qualified Data.Map as Map+import Control.Monad (liftM)+import System.Environment (getArgs)+import System.IO (stderr, hPutStrLn)+import System.Exit (exitFailure)++find :: (String -> IO ()) -> [String] -> IO ()+find printUsage args0 = let+ usage = printUsage "find {-m} <directory> {names}"+ in do+ (args, moduleOnly, singleArg) <- case args0 of+ [] -> usage >> exitFailure+ "-m" : ss -> return (ss, True, False)+ [_,_] -> return (args0, False, True)+ _ -> return (args0, False, False)+ case args of+ [] -> usage+ dir : hsIdents -> do+ namesMap <- getResolveHsNamesMap dir+ let mapsTo k v = k ++ "\t |-> " ++ v+ resolveMod m = unlines $ (m ++ ":")+ : map ('\t' :) (case Map.lookup m namesMap of+ Nothing -> ["=== Not found! ==="]+ Just m' -> (show (Map.size m') ++ " keys; size: " +++ show (length m + sum (map length (Map.elems m'))))+ : map (uncurry mapsTo) (Map.toList m')+ )+ resolveUnqual hsId = let+ f modName modMap r = case Map.lookup hsId modMap of+ Nothing -> r+ Just agdaId -> ((modName ++ '.' : hsId) `mapsTo` agdaId) : r+ in unlines $ Map.foldrWithKey f [] namesMap+ resolveQual hsId = let agdaId = splitMapApply namesMap hsId+ in if singleArg then agdaId else (hsId `mapsTo` agdaId)+ resolve = if moduleOnly+ then resolveMod+ else \ hsId -> case splitLastDotM hsId of+ Nothing -> resolveUnqual hsId+ Just _ -> resolveQual hsId+ case hsIdents of+ [] -> interact resolve+ _ -> mapM_ (putStrLn . resolve) hsIdents+
+ src/agda-ghc-names/FixProf.hs view
@@ -0,0 +1,118 @@+-- agda-ghc-names/FixProf.hs+-- Copyright 2015 by Wolfram Kahl+-- Licensed under the same terms as Agda++-- Given a mapping |HsModname -> HsIdent -> Maybe AgdaIdent|,+-- transform a *.prof file into *.agdaIdents.prof+++module FixProf where++-- import ResolveHsNames (apply2M, getResolveHsNamesMap)+import Data.Char (isSpace)+import Data.List (stripPrefix)+-- import Control.Monad (liftM)+-- import System.Environment (getArgs)+import System.IO (stderr, hPutStrLn)++splitFirstDot :: String -> (String, Maybe String)+splitFirstDot s = case span ('.' /=) s of+ (hd, []) -> (hd, Nothing)+ (hd, _ : tl) -> (hd, Just tl)++resolveCC0 :: (String -> String -> Maybe String) -> String -> String -> (String, Maybe String)+resolveCC0 resolve cc hmod = case splitFirstDot cc of+ (hsIdent, mlocalCC) -> case resolve hmod hsIdent of+ Nothing -> (hsIdent, mlocalCC)+ Just agdaIdent -> (agdaIdent, mlocalCC)++resolveRawCC :: (String -> String -> Maybe String) -> String -> String -> String+resolveRawCC resolve cc hmod = case resolveCC0 resolve cc hmod of+ (agdaIdent, m) -> case m of+ Nothing -> agdaIdent+ Just localCC -> agdaIdent ++ '.' : localCC++resolveCC :: (String -> String -> Maybe String) -> String -> String -> String+resolveCC resolve cc hmod = case stripPrefix "CAF:" cc of+ Nothing -> resolveRawCC resolve cc hmod+ Just cc' -> "CAF:" ++ resolveRawCC resolve cc' hmod++-- If |checkPrefix pre s == Just (k, s')|,+-- then |k| is the width of the ``|pre|'' column,+-- and |s'| contains the remaining columns.+checkPrefix :: String -> String -> Maybe (Int, String)+checkPrefix pre s = case stripPrefix pre s of+ Just s' -> case span (' ' ==) s' of+ (spaces, s'') -> Just (length pre + length spaces, s'')+ _ -> Nothing++-- If |checkSepLine s == Just (ccWidth, modWidth)|,+-- then these are the widths of the first two columns+-- (assuming that the "no." is always indented three positions).+checkSepLine :: String -> Maybe (Int, Int)+checkSepLine s = case checkPrefix "COST CENTRE" s of+ Just (ccWidth, s') -> case checkPrefix "MODULE" s' of+ Just (modWidth0, s'') -> let+ modWidth = case stripPrefix "no." s'' of+ Just _ -> modWidth0 - 3+ Nothing -> modWidth0+ in Just (ccWidth, modWidth)+ Nothing -> error $ "checkSepLine: unexpected line: " ++ show s+ _ -> Nothing++-- In the body of *.prof files,+-- the COST CENTRE column is indented by call depth,+-- which we need to preserve.+-- |firstWord s| returns the pair consisting of the+-- initial spaces and the first word in |s|:+firstWord :: String -> (String, String)+firstWord s = case span isSpace s of+ (spaces, s') -> (spaces, takeWhile (not . isSpace) s')++-- |splitLine ccWidth modWidth s = ((indent, ccName), modName, rest)|+splitLine :: Int -> Int -> String -> ((String, String), String, String)+splitLine ccWidth modWidth s = case splitAt ccWidth s of+ (cc0, s') -> case splitAt modWidth s' of+ (mod0, s'') -> (firstWord cc0, head (words mod0), s'')++updateLine :: (String -> String -> Maybe String) -> Int -> Int -> Bool -> String -> (String, String)+updateLine resolve ccWidth modWidth keepMod s = case splitLine ccWidth modWidth s of+ ((indent, cc), hmod, s') -> (,) (indent ++ resolveCC resolve cc hmod)+ (if keepMod then spaceOut modWidth hmod s' else s')++spaceOut :: Int -> String -> String -> String+spaceOut w s1 s2 = take w (s1 ++ repeat ' ') ++ ' ' : ' ' : s2++updateLines :: (String -> String -> Maybe String) -> Int -> Int -> Bool -> [String] -> ((Int, [String]), [String])+updateLines resolve ccWidth modWidth keepMod ls = case h id ls of+ (ps, ls') -> let+ w = maximum (map (length . fst) ps)+ render (cc, rest) = spaceOut w cc rest+ in ((w, map render ps), ls')+ where+ h acc [] = (acc [],[])+ h acc ([] : ss) = (acc [], ss)+ h acc (s : ss) = h (acc . (updateLine resolve ccWidth modWidth keepMod s :)) ss++updateProf :: (String -> String -> Maybe String) -> Bool -> [String] -> [String]+updateProf resolve keepMod [] = []+updateProf resolve keepMod (s : ss) = case checkSepLine s of+ Nothing -> s : updateProf resolve keepMod ss+ Just (ccWidth, modWidth) -> let+ ((w, new), rest) = updateLines resolve ccWidth modWidth keepMod (drop 1 ss)+ s' = drop ccWidth s+ s'' = if keepMod then s' else drop modWidth s'+ in spaceOut w "COST CENTRE" s''+ : []+ : new+ ++ []+ : updateProf resolve keepMod rest++updateProfFile :: IO () -> (String -> String -> Maybe String) -> Bool -> FilePath -> IO ()+updateProfFile usage resolve keepMod path = case stripPrefix (reverse ".prof") (reverse path) of+ Nothing -> usage+ Just revBasename -> let path' = reverse revBasename ++ ".agdaIdents.prof" in do+ s <- readFile path+ hPutStrLn stderr $ "read " ++ path+ writeFile path' . unlines . updateProf resolve keepMod $ lines s+ hPutStrLn stderr $ "wrote " ++ path'
+ src/agda-ghc-names/ResolveHsNames.hs view
@@ -0,0 +1,82 @@+-- ResolveHsNames.hs+-- Copyright 2015 by Wolfram Kahl+-- Licensed under the same terms as Agda++module ResolveHsNames where++import ExtractNames (namesFromDir)++import Data.Map (Map)+import qualified Data.Map as Map++import Control.Arrow (second)+import Control.Monad (liftM)++import System.IO (stderr, hPutStrLn)+import Data.Binary (encodeFile, decodeFileOrFail)+import System.FilePath ((</>))++mkResolveMap :: [(String, [(String, String)])] -> ([Int], Map String (Map String String))+mkResolveMap = second Map.fromList . unzip . map f+ where+ f (k,ps) = let+ m = Map.fromList ps+ c = Map.size m+ in c `seq` (c, (k,m))++splitLastDotM :: String -> Maybe (String, String)+splitLastDotM s = case span ('.' /=) $ reverse s of+ (rev, []) -> Nothing+ (revLast, '.' : revInit) -> Just (reverse revInit, reverse revLast)+ _ -> error "splitLastDot: IMPOSSIBLE"++splitLastDot :: String -> (String, String)+splitLastDot s = maybe ([], s) id $ splitLastDotM s++apply2M :: Map String (Map String String) -> String -> String -> Maybe String+apply2M m modul hsIdent = do+ m' <- Map.lookup modul m+ agdaIdent <- Map.lookup hsIdent m'+ return agdaIdent+apply2 :: Map String (Map String String) -> String -> String -> String+apply2 m modul hsIdent = maybe hsIdent id $ apply2M m modul hsIdent++splitMapApplyM :: Map String (Map String String) -> String -> Maybe String+splitMapApplyM m s = uncurry (apply2M m) $ splitLastDot s++splitMapApply :: Map String (Map String String) -> String -> String+splitMapApply m s = maybe s id $ splitMapApplyM m s++extractResolveHsNamesMap :: FilePath -> IO (Map String (Map String String))+extractResolveHsNamesMap dir = do+ (ps, sizes) <- liftM unzip $ namesFromDir dir+ let (cs, m) = mkResolveMap ps+ hPutStrLn stderr $ show (Map.size m) ++ " modules read; " ++ show (sum cs) ++ " identifiers; " ++ shows (sum sizes) " characters."+ return m++extractResolveHsNamesFctM :: FilePath -> IO (String -> Maybe String)+extractResolveHsNamesFctM = liftM splitMapApplyM . extractResolveHsNamesMap++-- unresolved names are preserved:+extractResolveHsNamesFct :: FilePath -> IO (String -> String)+extractResolveHsNamesFct = liftM (\ f s -> maybe s id $ f s) . extractResolveHsNamesFctM++hsIdentMapFilename :: FilePath+hsIdentMapFilename = "agda-ghc-name-cache.dat"++writeResolveHsNamesMap :: FilePath -> IO (FilePath, Map String (Map String String))+writeResolveHsNamesMap dir = let outFile = dir </> hsIdentMapFilename in do+ resolveMap <- extractResolveHsNamesMap dir+ encodeFile outFile resolveMap+ return (outFile, resolveMap)++getResolveHsNamesMap :: FilePath -> IO (Map String (Map String String))+getResolveHsNamesMap dir = let mapFile = dir </> hsIdentMapFilename in do+ e <- decodeFileOrFail mapFile+ case e of+ Left (_offset, _msg) -> do+ (_ , r) <- writeResolveHsNamesMap dir+ return r+ Right r -> do+ hPutStrLn stderr $ "read " ++ mapFile+ return r
+ src/agda-ghc-names/agda-ghc-names.hs view
@@ -0,0 +1,49 @@+-- agda-ghc-names.hs+-- Copyright 2015 by Wolfram Kahl+-- Licensed under the same terms as Agda++module Main (main) where++import ResolveHsNames (getResolveHsNamesMap, writeResolveHsNamesMap, apply2M, splitMapApply)+import FixProf (updateProfFile)+import Find (find)++import Data.Char (isSpace)+import Data.List (stripPrefix)+import Control.Monad (liftM)+import System.Environment (getArgs)+import System.IO (stderr, hPutStrLn)++import Debug.Trace++printUsage :: String -> IO ()+printUsage cmd = hPutStrLn stderr $ "Usage: agda-ghc-names " ++ cmd++main :: IO ()+main = do+ args0 <- getArgs+ case args0 of+ "extract" : args -> extract args+ "fixprof" : args -> fixprof args+ "find" : args -> find printUsage args+ _ -> printUsage "(fixprof|extract|find) {command args.}"++extract :: [String] -> IO ()+extract args = case args of+ [dir] -> do+ (outFile, _) <- writeResolveHsNamesMap dir+ hPutStrLn stderr $ "wrote " ++ outFile+ _ -> printUsage "extract <directory>"++fixprof :: [String] -> IO ()+fixprof args = case args of+ "+m" : args' -> fixProf' True args'+ _ -> fixProf' False args++fixProf' keepMod args = case args of+ [] -> usage+ [_] -> usage+ dir : profs -> do+ resolve <- liftM apply2M $ getResolveHsNamesMap dir+ mapM_ (updateProfFile usage resolve keepMod) profs+ where usage = printUsage "fixprof {+m} <dir> <File>.prof"
+ src/data/MAlonzo/src/MAlonzo/RTE.hs view
@@ -0,0 +1,28 @@+module MAlonzo.RTE where++import Unsafe.Coerce+import GHC.Prim++-- Special version of coerce that plays well with rules.+{-# INLINE [1] coe #-}+coe = unsafeCoerce+{-# RULES "coerce-id" forall (x :: a) . coe x = x #-}++-- Builtin QNames.+data QName = QName { nameId, moduleId :: Integer, qnameString :: String}++instance Eq QName where+ QName a b _ == QName c d _ = (a, b) == (c, d)++instance Ord QName where+ compare (QName a b _) (QName c d _) = compare (a, b) (c, d)++erased :: a+erased = coe (\ _ -> erased)++mazIncompleteMatch :: String -> a+mazIncompleteMatch s = error ("Agda: incomplete pattern matching: " ++ s)++mazUnreachableError :: a+mazUnreachableError = error ("Agda: unreachable code reached.")+
src/data/agda.sty view
@@ -6,7 +6,7 @@ \RequirePackage{ifxetex, ifluatex, xifthen, xcolor, polytable, etoolbox} -% http://tex.stackexchange.com/questions/47576/combining-ifxetex-and-ifluatex-with-the-logical-or-operation+% https://tex.stackexchange.com/questions/47576/combining-ifxetex-and-ifluatex-with-the-logical-or-operation \newif\ifxetexorluatex \ifxetex \xetexorluatextrue@@ -22,7 +22,7 @@ \ifxetexorluatex % Hack to get the amsthm package working.- % http://tex.stackexchange.com/questions/130491/xelatex-error-paragraph-ended-before-tempa-was-complete+ % https://tex.stackexchange.com/questions/130491/xelatex-error-paragraph-ended-before-tempa-was-complete \let\AgdaOpenBracket\[\let\AgdaCloseBracket\] \RequirePackage{fontspec} \let\[\AgdaOpenBracket\let\]\AgdaCloseBracket@@ -30,9 +30,22 @@ \tracinglostchars=2 % If the font is missing some symbol, then say % so in the compilation output.- \setmainfont[Ligatures=TeX]{texgyrepagella-regular.otf}- \setmathfont{Asana-Math.otf}+ \setmainfont+ [ Ligatures = TeX+ , BoldItalicFont = xits-bolditalic.otf+ , BoldFont = xits-bold.otf+ , ItalicFont = xits-italic.otf+ ]+ {xits-regular.otf} + \setmathfont{xits-math.otf}+ \setmonofont[Mapping=tex-text]{FreeMono.otf}++ % Make mathcal and mathscr appear as different.+ % https://tex.stackexchange.com/questions/120065/xetex-what-happened-to-mathcal-and-mathscr+ \setmathfont[range={\mathcal,\mathbfcal},StylisticSet=1]{xits-math.otf}+ \setmathfont[range=\mathscr]{xits-math.otf}+ \providecommand{\DeclareUnicodeCharacter}[2]{\relax} % pdfLaTeX@@ -41,7 +54,7 @@ \RequirePackage[safe]{tipa} % See page 12 of the tipa manual for what % safe does. - % http://tex.stackexchange.com/questions/1774/how-to-insert-pipe-symbol-in-latex+ % https://tex.stackexchange.com/questions/1774/how-to-insert-pipe-symbol-in-latex \RequirePackage[T1]{fontenc} \RequirePackage[utf8x]{inputenc} \fi@@ -143,8 +156,8 @@ }{ \newcommand{\AgdaKeywordFontStyle}[1]{\ensuremath{\mathsf{#1}}} }- \newcommand{\AgdaStringFontStyle}[1]{\ensuremath{\mathtt{#1}}}- \newcommand{\AgdaCommentFontStyle}[1]{\ensuremath{\mathtt{#1}}}+ \newcommand{\AgdaStringFontStyle}[1]{\ensuremath{\texttt{#1}}}+ \newcommand{\AgdaCommentFontStyle}[1]{\ensuremath{\texttt{#1}}} \newcommand{\AgdaBoundFontStyle}[1]{\ensuremath{\mathit{#1}}} \else@@ -218,6 +231,7 @@ \definecolor{AgdaDatatype} {HTML}{0000CD} \definecolor{AgdaField} {HTML}{8B0000} \definecolor{AgdaFunction} {HTML}{006400}+ \definecolor{AgdaMacro} {HTML}{006400} \definecolor{AgdaModule} {HTML}{006400} \definecolor{AgdaPostulate} {HTML}{006400} \definecolor{AgdaPrimitive} {HTML}{006400}@@ -253,6 +267,7 @@ \definecolor{AgdaDatatype} {HTML}{0000CD} \definecolor{AgdaField} {HTML}{EE1289} \definecolor{AgdaFunction} {HTML}{0000CD}+ \definecolor{AgdaMacro} {HTML}{458B74} \definecolor{AgdaModule} {HTML}{A020F0} \definecolor{AgdaPostulate} {HTML}{0000CD} \definecolor{AgdaPrimitive} {HTML}{0000CD}@@ -301,6 +316,8 @@ {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaField}{\AgdaLink{#1}}}}} \newcommand{\AgdaFunction}[1] {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaFunction}{\AgdaLink{#1}}}}}+\newcommand{\AgdaMacro}[1]+ {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaMacro}{\AgdaLink{#1}}}}} \newcommand{\AgdaModule}[1] {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaModule}{\AgdaLink{#1}}}}} \newcommand{\AgdaPostulate}[1]@@ -310,7 +327,7 @@ \newcommand{\AgdaRecord}[1] {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaRecord}{\AgdaLink{#1}}}}} \newcommand{\AgdaArgument}[1]- {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaArgument}{\AgdaLink{#1}}}}}+ {\AgdaNoSpaceMath{\AgdaBoundFontStyle{\textcolor{AgdaArgument}{#1}}}} % Other aspect commands. \newcommand{\AgdaFixityOp} [1]{\AgdaNoSpaceMath{$#1$}}
src/data/emacs-mode/agda2-highlight.el view
@@ -112,6 +112,8 @@ :foreground "darkgreen") (agda2-highlight-primitive-face :foreground "darkgreen")+ (agda2-highlight-macro-face+ :foreground "aquamarine4") (agda2-highlight-record-face :foreground "medium blue") (agda2-highlight-dotted-face)@@ -176,6 +178,9 @@ (cons 'agda2-highlight-primitive-face (agda2-highlight-face-attributes font-lock-constant-face))+ (cons 'agda2-highlight-macro-face+ (agda2-highlight-face-attributes+ font-lock-function-name-face)) (cons 'agda2-highlight-record-face (agda2-highlight-face-attributes font-lock-variable-name-face))@@ -292,6 +297,11 @@ "The face used for primitive functions." :group 'agda2-highlight-faces) +(defface agda2-highlight-macro-face+ '((t (:foreground "aquamarine4")))+ "The face used for macros."+ :group 'agda2-highlight-faces)+ (defface agda2-highlight-record-face '((t (:foreground "medium blue"))) "The face used for record types."@@ -344,6 +354,7 @@ (defvar agda2-highlight-faces '((keyword . agda2-highlight-keyword-face)+ (comment . font-lock-comment-face) (string . agda2-highlight-string-face) (number . agda2-highlight-number-face) (symbol . agda2-highlight-symbol-face)@@ -357,6 +368,7 @@ (module . agda2-highlight-module-face) (postulate . agda2-highlight-postulate-face) (primitive . agda2-highlight-primitive-face)+ (macro . agda2-highlight-macro-face) (record . agda2-highlight-record-face) (dotted . agda2-highlight-dotted-face) (operator . agda2-highlight-operator-face)@@ -386,6 +398,7 @@ `postulate' Postulates. `primitive' Primitive functions. `primitivetype' Primitive types (like Set and Prop).+`macro' Macros. `record' Record types. `string' Strings. `symbol' Symbols like forall, =, ->, etc.@@ -394,13 +407,7 @@ `unsolvedconstraint' Unsolved constraints, not connected to meta variables. `unsolvedmeta' Unsolved meta variables.--The following aspect is ignored:--`comment' Comments.--Comments are handled by Font Lock mode (which uses the syntax-table). The face `font-lock-comment-face' is used for comments.")+`comment' Comments.") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Variables
src/data/emacs-mode/agda2-mode.el view
@@ -10,7 +10,7 @@ ;;; Code: -(defvar agda2-version "2.4.2.5"+(defvar agda2-version "2.5.1" "The version of the Agda mode. Note that the same version of the Agda executable must be used.") @@ -78,14 +78,6 @@ "Major mode for interactively developing Agda programs." :group 'languages) -(defcustom agda2-include-dirs- '(".")- "The directories Agda uses to search for files.-The directory names should either be absolute or be relative to-the root of the current project."- :type '(repeat directory)- :group 'agda2)- (defcustom agda2-program-name "agda" "The name of the Agda executable." :type 'string@@ -205,7 +197,7 @@ (modify-syntax-entry keys "w" tbl))) (standard-syntax-table)) ;; Then override the remaining special cases.- (dolist (cs '((?{ . "(}1n") (?} . "){4n") (?- . "w 123b") (?\n . "> b")+ (dolist (cs '((?- . "w 12b") (?\n . "> b") (?. . ".") (?\; . ".") (?_ . ".") (?! . "."))) (modify-syntax-entry (car cs) (cdr cs) tbl)) tbl)@@ -246,6 +238,7 @@ (agda2-why-in-scope-maybe-toplevel "\C-c\C-w" (local global) "Explain why a particular name is in scope") (agda2-goal-and-context ,(kbd "C-c C-,") (local) "Goal type and context") (agda2-goal-and-context-and-inferred ,(kbd "C-c C-.") (local) "Goal type, context and inferred type")+ (agda2-search-about-toplevel ,(kbd "C-c C-z") (local global) "Search About") (agda2-module-contents-maybe-toplevel ,(kbd "C-c C-o") (local global) "Module contents") (agda2-compute-normalised-maybe-toplevel "\C-c\C-n" (local global) "Evaluate term to normal form") (describe-char nil (global) "Information about the character at point")@@ -373,6 +366,10 @@ "The Agda buffer. Note that this variable is not buffer-local.") +(defvar agda2-in-agda2-file-buffer nil+ "Was `agda2-file-buffer' active when `agda2-output-filter' started?+Note that this variable is not buffer-local.")+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; agda2-mode @@ -397,18 +394,16 @@ Special commands: \\{agda2-mode-map}" - ;; Check that the right version of Agda is used.- (let* ((coding-system-for-read 'utf-8)- (output (with-output-to-string- (call-process agda2-program-name- nil standard-output nil "--version")))- (version (and (string-match "^Agda version \\([0-9.]+\\)$" output)- (match-string 1 output))))- (unless (equal version agda2-version)- (error "The Agda mode's version (%s) does not match that of %s (%s)."- agda2-version- agda2-program-name (or version "unknown"))))+ (if (boundp 'agda2-include-dirs)+ (display-warning 'agda2 "Note that the variable agda2-include-dirs is+no longer used. You may want to update your configuration. You+have at least two choices:+* Use the library management system.+* Set the include path using agda2-program-args. +One way to avoid seeing this warning is to make sure that+agda2-include-dirs is not bound." :warning))+ (setq local-abbrev-table agda2-mode-abbrev-table indent-tabs-mode nil mode-line-process@@ -445,39 +440,61 @@ (add-hook 'change-major-mode-hook 'agda2-quit nil 'local)) (defun agda2-restart ()- "Kill and restart the *agda2* buffer and load `agda2-toplevel-module'."+ "Tries to start or restart the Agda process." (interactive)- (save-excursion (let ((agda2-bufname "*agda2*"))- (condition-case nil- (agda2-term)- (error nil)) - ;; Start the Agda2 process in a new buffer.- (message "Starting agda process `%s'." agda2-program-name)- (let ((process-connection-type nil)) ; pipes are faster than PTYs- (apply 'start-process "Agda2" agda2-bufname- agda2-program-name- (cons "--interaction" agda2-program-args)))+ ;; Kill any running instance of the Agda process.+ (condition-case nil+ (agda2-term)+ (error nil)) - ;; Select agda buffer temporarily.- (with-current-buffer agda2-bufname- (setq process-adaptive-read-buffering t)+ ;; Check that the right version of Agda is used.+ (let* ((coding-system-for-read 'utf-8)+ (output (with-output-to-string+ (call-process agda2-program-name+ nil standard-output nil "--version")))+ (version (and (string-match "^Agda version \\([0-9.]+\\)$" output)+ (match-string 1 output))))+ (unless (equal version agda2-version)+ (error "The Agda mode's version (%s) does not match that of %s (%s)."+ agda2-version+ agda2-program-name (or version "unknown")))) - ;; Clear message area.- (message "")+ (let ((all-program-args (cons "--interaction" agda2-program-args))) - (setq agda2-process (get-buffer-process agda2-bufname)- agda2-process-buffer (process-buffer agda2-process)- agda2-in-progress nil- mode-name "Agda executable"- agda2-last-responses nil)- (set-buffer-file-coding-system 'utf-8)- (set-buffer-process-coding-system 'utf-8 'utf-8)- (set-process-query-on-exit-flag agda2-process nil))))- (setq agda2-file-buffer (current-buffer))- (set-process-filter agda2-process 'agda2-output-filter)- (agda2-remove-annotations))+ ;; Check that the arguments are not malformed.+ (let* ((coding-system-for-read 'utf-8)+ (status)+ (output+ (with-output-to-string+ (setq status+ (apply 'call-process agda2-program-name+ nil standard-output nil all-program-args)))))+ (unless (equal status 0)+ (error "Failed to start the Agda process:\n%s" output))) + ;; Start the Agda process.+ (let ((agda2-bufname "*agda2*"))++ (let ((process-connection-type nil)) ; Pipes are faster than PTYs.+ (setq agda2-process+ (apply 'start-process "Agda2" agda2-bufname+ agda2-program-name all-program-args)))++ (set-process-coding-system agda2-process 'utf-8 'utf-8)+ (set-process-query-on-exit-flag agda2-process nil)+ (set-process-filter agda2-process 'agda2-output-filter)+ (setq agda2-in-progress nil+ agda2-file-buffer (current-buffer))++ (with-current-buffer agda2-bufname+ (setq agda2-process-buffer (current-buffer)+ mode-name "Agda executable"+ agda2-last-responses nil)+ (set-buffer-file-coding-system 'utf-8))++ (agda2-remove-annotations))))+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; Communicating with Agda @@ -578,6 +595,9 @@ ;; extract the fontified text and kill the temp buffer; so when Agda ;; finally answers, the temp buffer is long gone. (when (buffer-live-p agda2-file-buffer)+ (setq agda2-in-agda2-file-buffer+ (and agda2-file-buffer+ (equal (current-buffer) agda2-file-buffer))) (let (;; The input lines in the current chunk. (lines (split-string chunk "\n")) @@ -609,19 +629,23 @@ (if (and (listp (car result)) (= (cdr result) (length line))) (car result)))- (error nil))))+ (error nil)))+ (is-highlighting-command+ (and cmd+ (symbolp (car cmd))+ (let ((case-fold-search nil))+ (string-match "^agda2-highlight-"+ (symbol-name (car cmd))))))) + ;; Do not echo highlighting commands.+ (unless is-highlighting-command+ (with-current-buffer agda2-process-buffer+ (save-excursion+ (goto-char (point-max))+ (insert line)+ (insert "\n")))) (when cmd- (unless (and (symbolp (car cmd))- (let ((case-fold-search nil))- (string-match "^agda2-highlight-"- (symbol-name (car cmd)))))- ;; Do not echo highlighting commands.- (with-current-buffer agda2-process-buffer- (save-excursion- (goto-char (point-max))- (insert line)- (insert "\n")))+ (unless is-highlighting-command (incf agda2-responses)) (if (equal 'last (car-safe (car cmd))) (push (cons (cdr (car cmd)) (cdr cmd))@@ -724,7 +748,7 @@ (t (setq input-from-goal t))) (apply 'agda2-go t t t cmd (format "%d" g)- (if input-from-goal (agda2-goal-Range o) "noRange")+ (if input-from-goal (agda2-goal-Range o) (agda2-mkRange nil)) (agda2-string-quote txt) args)))) ;; Note that the following function is a security risk, since it@@ -746,7 +770,7 @@ (interactive) (agda2-go t t t "Cmd_load" (agda2-string-quote (buffer-file-name))- (agda2-list-quote agda2-include-dirs)+ (agda2-list-quote agda2-program-args) )) (defun agda2-measure-load-time@@ -779,7 +803,7 @@ (agda2-go t t t "Cmd_compile" agda2-backend (agda2-string-quote (buffer-file-name))- (agda2-list-quote agda2-include-dirs)+ (agda2-list-quote agda2-program-args) )) (defun agda2-give()@@ -904,49 +928,73 @@ If APPEND is nil, then any previous text is removed before TEXT is inserted, and point is placed before this text." (interactive)- (with-current-buffer (agda2-info-buffer)- ;; In some cases the jump-to-position-mentioned-in-text- ;; functionality (see compilation-error-regexp-alist above) didn't- ;; work: Emacs jumped to the wrong position. However, it seems to- ;; work if compilation-forget-errors is used. This problem may be- ;; related to Emacs bug #9679- ;; (http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9679). The idea- ;; to use compilation-forget-errors comes from a comment due to- ;; Oleksandr Manzyuk- ;; (https://github.com/haskell/haskell-mode/issues/67).- (compilation-forget-errors)- (unless append (erase-buffer))- (save-excursion- (goto-char (point-max))- (insert text))- (put-text-property 0 (length name) 'face '(:weight bold) name)- (setq mode-line-buffer-identification name)- (save-selected-window- (let (;; If there is only one window, then the info window- ;; should be created above or below the code window, not- ;; to the left or right.- (split-width-threshold nil)- (buf (current-buffer))- )- ;; Andreas, 2014-02-23, issue 1061- ;; If the buffer is already displayed in some window,- ;; do not display it again. Also, do not raise its frame.- ;; This allows undisturbed working on something else while- ;; Agda is type-checking.- ;; The solution is to query for the window displaying the buffer- ;; via get-buffer-window. Only if it return nil, we pop-to-buffer.- ;; Credits go to Iqbal Ansari who anwered my question on- ;; http://stackoverflow.com/questions/21955162/emacs-how-to-display-a-buffer-without-switching-window-and-without-raising-fram- ;; 2014-03-01 DISABLED FIX- ;; (unless (get-buffer-window buf t)- (pop-to-buffer buf nil 'norecord)- (fit-window-to-buffer nil- (truncate- (* (frame-height) agda2-information-window-max-height)))- ;; )- (if append- (goto-char (point-max))- (goto-char (point-min)))))))+ (let ((buf (agda2-info-buffer)))+ (with-current-buffer buf+ ;; In some cases the jump-to-position-mentioned-in-text+ ;; functionality (see compilation-error-regexp-alist above)+ ;; didn't work: Emacs jumped to the wrong position. However, it+ ;; seems to work if compilation-forget-errors is used. This+ ;; problem may be related to Emacs bug #9679+ ;; (http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9679). The idea+ ;; to use compilation-forget-errors comes from a comment due to+ ;; Oleksandr Manzyuk+ ;; (https://github.com/haskell/haskell-mode/issues/67).+ (compilation-forget-errors)+ (unless append (erase-buffer))+ (save-excursion+ (goto-char (point-max))+ (insert text))+ (put-text-property 0 (length name) 'face '(:weight bold) name)+ (setq mode-line-buffer-identification name)+ (force-mode-line-update))+ ;; If the current window displays the information buffer, then the+ ;; window configuration is left untouched.+ (unless (equal (window-buffer) buf)+ (let ((agda-window+ (and agda2-file-buffer+ (car-safe+ ;; All windows, including minibuffers, on any+ ;; frame on the current terminal, displaying the+ ;; present Agda file buffer.+ (get-buffer-window-list agda2-file-buffer t 0)))))+ (save-selected-window+ ;; Select a window displaying the Agda file buffer (if such+ ;; a window exists). With certain configurations of+ ;; display-buffer this should increase the likelihood that+ ;; the info buffer will be displayed on the same frame.+ (when agda-window+ (select-window agda-window 'no-record))+ (let* (;; If there is only one window, then the info window+ ;; should be created above or below the code window,+ ;; not to the left or right.+ (split-width-threshold nil)+ (window+ (display-buffer+ buf+ ;; Under Emacs 23 the effect of the following+ ;; argument is only that the current window+ ;; should not be used.+ '(nil+ .+ (;; Do not use the same window.+ (inhibit-same-window . t)+ ;; Do not raise or select another frame.+ (inhibit-switch-frame . t))))))+ (if window+ (fit-window-to-buffer window+ (truncate+ (* (frame-height)+ agda2-information-window-max-height))))))))+ ;; Move point in every window displaying the information buffer.+ ;; Exception: If we are appending, don't move point in selected+ ;; windows.+ (dolist (window (get-buffer-window-list buf 'no-minibuffer t))+ (unless (and append+ (equal window (selected-window)))+ (with-selected-window window+ (if append+ (goto-char (point-max))+ (goto-char (point-min)))))))) (defun agda2-info-action-and-copy (name text &optional append) "Same as agda2-info-action but also puts TEXT in the kill ring."@@ -1147,6 +1195,13 @@ "Module name" ) +(agda2-maybe-normalised-toplevel+ agda2-search-about-toplevel+ "Search About an identifier"+ "Cmd_search_about_toplevel"+ "Name"+)+ (defun agda2-module-contents-maybe-toplevel () "Shows all the top-level names in the given module. Along with their types.@@ -1249,7 +1304,7 @@ ;; Don't run modification hooks: we don't want this function to ;; trigger agda2-abort-highlighting. (inhibit-modification-hooks t))- ((delims() (re-search-forward "[?]\\|[{][-!]\\|[-!][}]\\|--\\|\\\\begin{code}\\|\\\\end{code}" nil t))+ ((delims() (re-search-forward "[?]\\|[{][-!]\\|[-!][}]\\|--\\|^%.*\\\\begin{code}\\|\\\\begin{code}\\|\\\\end{code}" nil t)) ;; is-proper checks whether string s (e.g. "?" or "--") is proper ;; i.e., is not part of an identifier. ;; comment-starter is true if s starts a comment (e.g. "--")@@ -1359,7 +1414,7 @@ (if (and (not (equal new-txt 'paren)) (not (equal new-txt 'no-paren))) (apply 'agda2-go t t nil "Cmd_highlight" (format "%d" old-g)- (agda2-mkRange p (- q 2))+ (agda2-mkRange `(,p ,(- q 2))) (agda2-string-quote new-txt) nil)) ))) @@ -1377,24 +1432,30 @@ (defun agda2-goal-Range (o) "The Haskell Range of goal overlay O."- (agda2-mkRange (+ (overlay-start o) 2)- (- (overlay-end o) 2)))+ (agda2-mkRange `(,(+ (overlay-start o) 2)+ ,(- (overlay-end o) 2)))) -(defun agda2-mkRange (p q)- "The Haskell Range corresponding to two points."- (format "(Range [Interval %s %s])"- (agda2-mkPos p)- (agda2-mkPos q)))+(defun agda2-mkRange (points)+ "A string representing a range corresponding to POINTS.+POINTS must be a list of integers, and its length must be 0 or 2."+ (if points+ (format "(intervalsToRange (Just (mkAbsolute %s)) %s)"+ (agda2-string-quote (file-truename (buffer-file-name)))+ (format "[Interval %s %s]"+ (agda2-mkPos (car points))+ (agda2-mkPos (cadr points))))+ "noRange")) (defun agda2-mkPos (&optional p)- "The Haskell Position corresponding to P or `point'."+ "The Haskell PositionWithoutFile corresponding to P or `point'." (save-excursion- (if p (goto-char p))- (format "(Pn (Just (mkAbsolute %s)) %d %d %d)"- (agda2-string-quote (file-truename (buffer-file-name)))- (point)- (count-lines (point-min) (point))- (1+ (current-column)))))+ (save-restriction+ (widen)+ (if p (goto-char p))+ (format "(Pn () %d %d %d)"+ (point)+ (count-lines (point-min) (point))+ (1+ (current-column)))))) (defun agda2-char-quote (c) "Convert character C to the notation used in Haskell strings.@@ -1558,11 +1619,6 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Go to definition site -(defun agda2-goto (filepos &optional other-window)- "Like `annotation-goto', unless `agda2-highlight-in-progress' is nil."- (if agda2-highlight-in-progress- (annotation-goto filepos other-window)))- (defun agda2-goto-definition-keyboard (&optional other-window) "Go to the definition site of the name under point (if any). If this function is invoked with a prefix argument then another window is used@@ -1585,6 +1641,35 @@ invoked." (interactive) (annotation-go-back))++(defun agda2-maybe-goto (filepos)+ "Might move point to the given error.+FILEPOS should have the form (FILE . POSITION).++If `agda2-highlight-in-progress' is nil, then nothing happens.+Otherwise, if the current buffer is the one that is connected to+the Agda process, then point is moved to POSITION in+FILE (assuming that the FILE is readable). Otherwise point is+moved to the given position in the buffer visiting the file, if+any, and in every window displaying the buffer, but the window+configuration and the selected window are not changed."+ (when (and agda2-highlight-in-progress+ (consp filepos)+ (stringp (car filepos))+ (integerp (cdr filepos)))+ (if agda2-in-agda2-file-buffer+ (annotation-goto-and-push (current-buffer) (point) filepos)+ (save-excursion+ (let ((buffer (find-buffer-visiting (car filepos))))+ (when buffer+ (let ((windows (get-buffer-window-list buffer+ 'no-minibuffer t)))+ (if windows+ (dolist (window windows)+ (with-selected-window window+ (annotation-goto-position (cdr filepos))))+ (with-current-buffer buffer+ (annotation-goto-position (cdr filepos))))))))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Implicit arguments
src/data/emacs-mode/annotation.el view
@@ -48,25 +48,35 @@ (t (error "Not an integer or event object: %S" link))) (when (and source-pos source-buffer) (with-current-buffer source-buffer- (setq source-file-name buffer-file-name) (setq target (get-text-property source-pos 'annotation-goto))) (when target (unless (equal source-window (selected-window)) (select-window source-window))- (when (annotation-goto target other-window)- (unless (and (equal source-buffer (current-buffer))- (eq source-pos (point)))- (push `(,source-file-name . ,source-pos)- annotation-goto-stack))- t)))))+ (annotation-goto-and-push source-buffer source-pos target+ other-window))))) (defun annotation-go-back nil- "Go back to the previous position in which `annotation-goto' was+ "Go back to the previous position.+The previous position in which `annotation-goto-and-push' was successfully invoked." (when annotation-goto-stack (let ((pos (pop annotation-goto-stack))) (annotation-goto pos)))) +(defun annotation-goto-and-push (source-buffer source-pos filepos &optional other-window)+ "Like `annotation-goto', but pushes a position when successful.+The position consists of the file visited by SOURCE-BUFFER, and+the position given by SOURCE-POS."+ (let (source-file-name)+ (with-current-buffer source-buffer+ (setq source-file-name buffer-file-name))+ (when (annotation-goto filepos other-window)+ (unless (and (equal source-buffer (current-buffer))+ (eq source-pos (point)))+ (push `(,source-file-name . ,source-pos)+ annotation-goto-stack))+ t)))+ (defun annotation-goto (filepos &optional other-window) "Go to file position FILEPOS if the file is readable. FILEPOS should have the form (FILE . POS). Return t if successful.@@ -80,9 +90,13 @@ (if other-window (find-file-other-window file) (find-file file))- (goto-char (+ (cdr filepos) annotations-offset))+ (annotation-goto-position (cdr filepos)) t) (error "File does not exist or is unreadable: %s." file)))))++(defun annotation-goto-position (position)+ "Move point to POSITION."+ (goto-char (+ position annotations-offset))) (defun annotation-annotate (start end anns &optional info goto) "Annotate text between START and END in the current buffer.
+ src/data/lib/prim/Agda/Builtin/Bool.agda view
@@ -0,0 +1,16 @@++module Agda.Builtin.Bool where++data Bool : Set where+ false true : Bool++{-# BUILTIN BOOL Bool #-}+{-# BUILTIN FALSE false #-}+{-# BUILTIN TRUE true #-}++{-# COMPILED_DATA_UHC Bool __BOOL__ __FALSE__ __TRUE__ #-}++{-# COMPILED_JS Bool function (x,v) { return ((x)? v["true"]() : v["false"]()); } #-}+{-# COMPILED_JS false false #-}+{-# COMPILED_JS true true #-}+
+ src/data/lib/prim/Agda/Builtin/Char.agda view
@@ -0,0 +1,16 @@++module Agda.Builtin.Char where++open import Agda.Builtin.Nat+open import Agda.Builtin.Bool++postulate Char : Set+{-# BUILTIN CHAR Char #-}++primitive+ primIsLower primIsDigit primIsAlpha primIsSpace primIsAscii+ primIsLatin1 primIsPrint primIsHexDigit : Char → Bool+ primToUpper primToLower : Char → Char+ primCharToNat : Char → Nat+ primNatToChar : Nat → Char+ primCharEquality : Char → Char → Bool
+ src/data/lib/prim/Agda/Builtin/Coinduction.agda view
@@ -0,0 +1,13 @@++module Agda.Builtin.Coinduction where++infix 1000 ♯_++postulate+ ∞ : ∀ {a} (A : Set a) → Set a+ ♯_ : ∀ {a} {A : Set a} → A → ∞ A+ ♭ : ∀ {a} {A : Set a} → ∞ A → A++{-# BUILTIN INFINITY ∞ #-}+{-# BUILTIN SHARP ♯_ #-}+{-# BUILTIN FLAT ♭ #-}
+ src/data/lib/prim/Agda/Builtin/Equality.agda view
@@ -0,0 +1,9 @@++module Agda.Builtin.Equality where++infix 4 _≡_+data _≡_ {a} {A : Set a} (x : A) : A → Set a where+ instance refl : x ≡ x++{-# BUILTIN EQUALITY _≡_ #-}+{-# BUILTIN REFL refl #-}
+ src/data/lib/prim/Agda/Builtin/Float.agda view
@@ -0,0 +1,27 @@++module Agda.Builtin.Float where++open import Agda.Builtin.Bool+open import Agda.Builtin.Nat+open import Agda.Builtin.Int+open import Agda.Builtin.String++postulate Float : Set+{-# BUILTIN FLOAT Float #-}++primitive+ primFloatEquality : Float → Float → Bool+ primFloatLess : Float → Float → Bool+ primNatToFloat : Nat → Float+ primFloatPlus : Float → Float → Float+ primFloatMinus : Float → Float → Float+ primFloatTimes : Float → Float → Float+ primFloatDiv : Float → Float → Float+ primFloatSqrt : Float → Float+ primRound : Float → Int+ primFloor : Float → Int+ primCeiling : Float → Int+ primExp : Float → Float+ primLog : Float → Float+ primSin : Float → Float+ primShowFloat : Float → String
+ src/data/lib/prim/Agda/Builtin/FromNat.agda view
@@ -0,0 +1,15 @@++module Agda.Builtin.FromNat where++open import Agda.Primitive+open import Agda.Builtin.Nat++record Number {a} (A : Set a) : Set (lsuc a) where+ field+ Constraint : Nat → Set a+ fromNat : ∀ n → {{_ : Constraint n}} → A++open Number {{...}} public using (fromNat)++{-# BUILTIN FROMNAT fromNat #-}+{-# DISPLAY Number.fromNat _ n = fromNat n #-}
+ src/data/lib/prim/Agda/Builtin/FromNeg.agda view
@@ -0,0 +1,15 @@++module Agda.Builtin.FromNeg where++open import Agda.Primitive+open import Agda.Builtin.Nat++record Negative {a} (A : Set a) : Set (lsuc a) where+ field+ Constraint : Nat → Set a+ fromNeg : ∀ n → {{_ : Constraint n}} → A++open Negative {{...}} public using (fromNeg)++{-# BUILTIN FROMNEG fromNeg #-}+{-# DISPLAY Negative.fromNeg _ n = fromNeg n #-}
+ src/data/lib/prim/Agda/Builtin/FromString.agda view
@@ -0,0 +1,15 @@++module Agda.Builtin.FromString where++open import Agda.Primitive+open import Agda.Builtin.String++record IsString {a} (A : Set a) : Set (lsuc a) where+ field+ Constraint : String → Set a+ fromString : (s : String) {{_ : Constraint s}} → A++open IsString {{...}} public using (fromString)++{-# BUILTIN FROMSTRING fromString #-}+{-# DISPLAY IsString.fromString _ s = fromString s #-}
+ src/data/lib/prim/Agda/Builtin/IO.agda view
@@ -0,0 +1,9 @@++module Agda.Builtin.IO where++postulate IO : ∀ {a} → Set a → Set a+{-# BUILTIN IO IO #-}++{-# HASKELL type AgdaIO a b = IO b #-}+{-# COMPILED_TYPE IO MAlonzo.Code.Agda.Builtin.IO.AgdaIO #-}+
+ src/data/lib/prim/Agda/Builtin/Int.agda view
@@ -0,0 +1,17 @@++module Agda.Builtin.Int where++open import Agda.Builtin.Nat+open import Agda.Builtin.String++infix 8 pos -- Standard library uses this as +_++data Int : Set where+ pos : (n : Nat) → Int+ negsuc : (n : Nat) → Int++{-# BUILTIN INTEGER Int #-}+{-# BUILTIN INTEGERPOS pos #-}+{-# BUILTIN INTEGERNEGSUC negsuc #-}++primitive primShowInteger : Int → String
+ src/data/lib/prim/Agda/Builtin/List.agda view
@@ -0,0 +1,17 @@++module Agda.Builtin.List where++infixr 5 _∷_+data List {a} (A : Set a) : Set a where+ [] : List A+ _∷_ : (x : A) (xs : List A) → List A++{-# BUILTIN LIST List #-}+{-# BUILTIN NIL [] #-}+{-# BUILTIN CONS _∷_ #-}++{-# HASKELL type AgdaList a b = [b] #-}++{-# COMPILED_DATA List MAlonzo.Code.Agda.Builtin.List.AgdaList [] (:) #-}+{-# COMPILED_DATA_UHC List __LIST__ __NIL__ __CONS__ #-}+
+ src/data/lib/prim/Agda/Builtin/Nat.agda view
@@ -0,0 +1,61 @@++module Agda.Builtin.Nat where++open import Agda.Builtin.Bool++data Nat : Set where+ zero : Nat+ suc : (n : Nat) → Nat++{-# BUILTIN NATURAL Nat #-}++infix 4 _==_ _<_+infixl 6 _+_ _-_+infixl 7 _*_++_+_ : Nat → Nat → Nat+zero + m = m+suc n + m = suc (n + m)++{-# BUILTIN NATPLUS _+_ #-}++_-_ : Nat → Nat → Nat+n - zero = n+zero - suc m = zero+suc n - suc m = n - m++{-# BUILTIN NATMINUS _-_ #-}++_*_ : Nat → Nat → Nat+zero * m = zero+suc n * m = m + n * m++{-# BUILTIN NATTIMES _*_ #-}++_==_ : Nat → Nat → Bool+zero == zero = true+suc n == suc m = n == m+_ == _ = false++{-# BUILTIN NATEQUALS _==_ #-}++_<_ : Nat → Nat → Bool+_ < zero = false+zero < suc _ = true+suc n < suc m = n < m++{-# BUILTIN NATLESS _<_ #-}++div-helper : Nat → Nat → Nat → Nat → Nat+div-helper k m zero j = k+div-helper k m (suc n) zero = div-helper (suc k) m n m+div-helper k m (suc n) (suc j) = div-helper k m n j++{-# BUILTIN NATDIVSUCAUX div-helper #-}++mod-helper : Nat → Nat → Nat → Nat → Nat+mod-helper k m zero j = k+mod-helper k m (suc n) zero = mod-helper 0 m n m+mod-helper k m (suc n) (suc j) = mod-helper (suc k) m n j++{-# BUILTIN NATMODSUCAUX mod-helper #-}
+ src/data/lib/prim/Agda/Builtin/Reflection.agda view
@@ -0,0 +1,231 @@++module Agda.Builtin.Reflection where++open import Agda.Builtin.Unit+open import Agda.Builtin.Bool+open import Agda.Builtin.Nat+open import Agda.Builtin.List+open import Agda.Builtin.String+open import Agda.Builtin.Char+open import Agda.Builtin.Float++-- Names --++postulate Name : Set+{-# BUILTIN QNAME Name #-}++primitive+ primQNameEquality : Name → Name → Bool+ primQNameLess : Name → Name → Bool+ primShowQName : Name → String++-- Metavariables --++postulate Meta : Set+{-# BUILTIN AGDAMETA Meta #-}++primitive+ primMetaEquality : Meta → Meta → Bool+ primMetaLess : Meta → Meta → Bool+ primShowMeta : Meta → String++-- Arguments --++-- Arguments can be (visible), {hidden}, or {{instance}}.+data Visibility : Set where+ visible hidden instance′ : Visibility++{-# BUILTIN HIDING Visibility #-}+{-# BUILTIN VISIBLE visible #-}+{-# BUILTIN HIDDEN hidden #-}+{-# BUILTIN INSTANCE instance′ #-}++-- Arguments can be relevant or irrelevant.+data Relevance : Set where+ relevant irrelevant : Relevance++{-# BUILTIN RELEVANCE Relevance #-}+{-# BUILTIN RELEVANT relevant #-}+{-# BUILTIN IRRELEVANT irrelevant #-}++data ArgInfo : Set where+ arg-info : (v : Visibility) (r : Relevance) → ArgInfo++data Arg (A : Set) : Set where+ arg : (i : ArgInfo) (x : A) → Arg A++{-# BUILTIN ARGINFO ArgInfo #-}+{-# BUILTIN ARGARGINFO arg-info #-}+{-# BUILTIN ARG Arg #-}+{-# BUILTIN ARGARG arg #-}++-- Name abstraction --++data Abs (A : Set) : Set where+ abs : (s : String) (x : A) → Abs A++{-# BUILTIN ABS Abs #-}+{-# BUILTIN ABSABS abs #-}++-- Literals --++data Literal : Set where+ nat : (n : Nat) → Literal+ float : (x : Float) → Literal+ char : (c : Char) → Literal+ string : (s : String) → Literal+ name : (x : Name) → Literal+ meta : (x : Meta) → Literal++{-# BUILTIN AGDALITERAL Literal #-}+{-# BUILTIN AGDALITNAT nat #-}+{-# BUILTIN AGDALITFLOAT float #-}+{-# BUILTIN AGDALITCHAR char #-}+{-# BUILTIN AGDALITSTRING string #-}+{-# BUILTIN AGDALITQNAME name #-}+{-# BUILTIN AGDALITMETA meta #-}++-- Patterns --++data Pattern : Set where+ con : (c : Name) (ps : List (Arg Pattern)) → Pattern+ dot : Pattern+ var : (s : String) → Pattern+ lit : (l : Literal) → Pattern+ proj : (f : Name) → Pattern+ absurd : Pattern++{-# BUILTIN AGDAPATTERN Pattern #-}+{-# BUILTIN AGDAPATCON con #-}+{-# BUILTIN AGDAPATDOT dot #-}+{-# BUILTIN AGDAPATVAR var #-}+{-# BUILTIN AGDAPATLIT lit #-}+{-# BUILTIN AGDAPATPROJ proj #-}+{-# BUILTIN AGDAPATABSURD absurd #-}++-- Terms --++data Sort : Set+data Clause : Set+data Term : Set+Type = Term++data Term where+ var : (x : Nat) (args : List (Arg Term)) → Term+ con : (c : Name) (args : List (Arg Term)) → Term+ def : (f : Name) (args : List (Arg Term)) → Term+ lam : (v : Visibility) (t : Abs Term) → Term+ pat-lam : (cs : List Clause) (args : List (Arg Term)) → Term+ pi : (a : Arg Type) (b : Abs Type) → Term+ agda-sort : (s : Sort) → Term+ lit : (l : Literal) → Term+ meta : (x : Meta) → List (Arg Term) → Term+ unknown : Term++data Sort where+ set : (t : Term) → Sort+ lit : (n : Nat) → Sort+ unknown : Sort++data Clause where+ clause : (ps : List (Arg Pattern)) (t : Term) → Clause+ absurd-clause : (ps : List (Arg Pattern)) → Clause++{-# BUILTIN AGDASORT Sort #-}+{-# BUILTIN AGDATERM Term #-}+{-# BUILTIN AGDACLAUSE Clause #-}++{-# BUILTIN AGDATERMVAR var #-}+{-# BUILTIN AGDATERMCON con #-}+{-# BUILTIN AGDATERMDEF def #-}+{-# BUILTIN AGDATERMMETA meta #-}+{-# BUILTIN AGDATERMLAM lam #-}+{-# BUILTIN AGDATERMEXTLAM pat-lam #-}+{-# BUILTIN AGDATERMPI pi #-}+{-# BUILTIN AGDATERMSORT agda-sort #-}+{-# BUILTIN AGDATERMLIT lit #-}+{-# BUILTIN AGDATERMUNSUPPORTED unknown #-}++{-# BUILTIN AGDASORTSET set #-}+{-# BUILTIN AGDASORTLIT lit #-}+{-# BUILTIN AGDASORTUNSUPPORTED unknown #-}++{-# BUILTIN AGDACLAUSECLAUSE clause #-}+{-# BUILTIN AGDACLAUSEABSURD absurd-clause #-}++-- Definitions --++data Definition : Set where+ function : (cs : List Clause) → Definition+ data-type : (pars : Nat) (cs : List Name) → Definition+ record-type : (c : Name) → Definition+ data-cons : (d : Name) → Definition+ axiom : Definition+ prim-fun : Definition++{-# BUILTIN AGDADEFINITION Definition #-}+{-# BUILTIN AGDADEFINITIONFUNDEF function #-}+{-# BUILTIN AGDADEFINITIONDATADEF data-type #-}+{-# BUILTIN AGDADEFINITIONRECORDDEF record-type #-}+{-# BUILTIN AGDADEFINITIONDATACONSTRUCTOR data-cons #-}+{-# BUILTIN AGDADEFINITIONPOSTULATE axiom #-}+{-# BUILTIN AGDADEFINITIONPRIMITIVE prim-fun #-}++-- Errors --++data ErrorPart : Set where+ strErr : String → ErrorPart+ termErr : Term → ErrorPart+ nameErr : Name → ErrorPart++{-# BUILTIN AGDAERRORPART ErrorPart #-}+{-# BUILTIN AGDAERRORPARTSTRING strErr #-}+{-# BUILTIN AGDAERRORPARTTERM termErr #-}+{-# BUILTIN AGDAERRORPARTNAME nameErr #-}++-- TC monad --++postulate+ TC : ∀ {a} → Set a → Set a+ returnTC : ∀ {a} {A : Set a} → A → TC A+ bindTC : ∀ {a b} {A : Set a} {B : Set b} → TC A → (A → TC B) → TC B+ unify : Term → Term → TC ⊤+ typeError : ∀ {a} {A : Set a} → List ErrorPart → TC A+ inferType : Term → TC Type+ checkType : Term → Type → TC Term+ normalise : Term → TC Term+ catchTC : ∀ {a} {A : Set a} → TC A → TC A → TC A+ quoteTC : ∀ {a} {A : Set a} → A → TC Term+ unquoteTC : ∀ {a} {A : Set a} → Term → TC A+ getContext : TC (List (Arg Type))+ extendContext : ∀ {a} {A : Set a} → Arg Type → TC A → TC A+ inContext : ∀ {a} {A : Set a} → List (Arg Type) → TC A → TC A+ freshName : String → TC Name+ declareDef : Arg Name → Type → TC ⊤+ defineFun : Name → List Clause → TC ⊤+ getType : Name → TC Type+ getDefinition : Name → TC Definition+ blockOnMeta : ∀ {a} {A : Set a} → Meta → TC A+ commitTC : TC ⊤++{-# BUILTIN AGDATCM TC #-}+{-# BUILTIN AGDATCMRETURN returnTC #-}+{-# BUILTIN AGDATCMBIND bindTC #-}+{-# BUILTIN AGDATCMUNIFY unify #-}+{-# BUILTIN AGDATCMTYPEERROR typeError #-}+{-# BUILTIN AGDATCMINFERTYPE inferType #-}+{-# BUILTIN AGDATCMCHECKTYPE checkType #-}+{-# BUILTIN AGDATCMNORMALISE normalise #-}+{-# BUILTIN AGDATCMCATCHERROR catchTC #-}+{-# BUILTIN AGDATCMQUOTETERM quoteTC #-}+{-# BUILTIN AGDATCMUNQUOTETERM unquoteTC #-}+{-# BUILTIN AGDATCMGETCONTEXT getContext #-}+{-# BUILTIN AGDATCMEXTENDCONTEXT extendContext #-}+{-# BUILTIN AGDATCMINCONTEXT inContext #-}+{-# BUILTIN AGDATCMFRESHNAME freshName #-}+{-# BUILTIN AGDATCMDECLAREDEF declareDef #-}+{-# BUILTIN AGDATCMDEFINEFUN defineFun #-}+{-# BUILTIN AGDATCMGETTYPE getType #-}+{-# BUILTIN AGDATCMGETDEFINITION getDefinition #-}+{-# BUILTIN AGDATCMBLOCKONMETA blockOnMeta #-}+{-# BUILTIN AGDATCMCOMMIT commitTC #-}
+ src/data/lib/prim/Agda/Builtin/Size.agda view
@@ -0,0 +1,9 @@++module Agda.Builtin.Size where++{-# BUILTIN SIZEUNIV SizeU #-}+{-# BUILTIN SIZE Size #-}+{-# BUILTIN SIZELT Size<_ #-}+{-# BUILTIN SIZESUC ↑_ #-}+{-# BUILTIN SIZEINF ω #-}+{-# BUILTIN SIZEMAX _⊔ˢ_ #-}
+ src/data/lib/prim/Agda/Builtin/Strict.agda view
@@ -0,0 +1,8 @@++module Agda.Builtin.Strict where++open import Agda.Builtin.Equality++primitive+ primForce : ∀ {a b} {A : Set a} {B : A → Set b} (x : A) → (∀ x → B x) → B x+ primForceLemma : ∀ {a b} {A : Set a} {B : A → Set b} (x : A) (f : ∀ x → B x) → primForce x f ≡ f x
+ src/data/lib/prim/Agda/Builtin/String.agda view
@@ -0,0 +1,17 @@++module Agda.Builtin.String where++open import Agda.Builtin.Bool+open import Agda.Builtin.List+open import Agda.Builtin.Char++postulate String : Set+{-# BUILTIN STRING String #-}++primitive+ primStringToList : String → List Char+ primStringFromList : List Char → String+ primStringAppend : String → String → String+ primStringEquality : String → String → Bool+ primShowChar : Char → String+ primShowString : String → String
+ src/data/lib/prim/Agda/Builtin/TrustMe.agda view
@@ -0,0 +1,6 @@++module Agda.Builtin.TrustMe where++open import Agda.Builtin.Equality++primitive primTrustMe : ∀ {a} {A : Set a} {x y : A} → x ≡ y
+ src/data/lib/prim/Agda/Builtin/Unit.agda view
@@ -0,0 +1,8 @@++module Agda.Builtin.Unit where++record ⊤ : Set where+ instance constructor tt++{-# BUILTIN UNIT ⊤ #-}+{-# COMPILED_DATA ⊤ () () #-}
src/data/lib/prim/Agda/Primitive.agda view
@@ -25,10 +25,6 @@ lsuc : (ℓ : Level) → Level _⊔_ : (ℓ₁ ℓ₂ : Level) → Level -{-# COMPILED lzero () #-}-{-# COMPILED lsuc (\_ -> ()) #-}-{-# COMPILED _⊔_ (\_ _ -> ()) #-}- {-# BUILTIN LEVELZERO lzero #-} {-# BUILTIN LEVELSUC lsuc #-} {-# BUILTIN LEVELMAX _⊔_ #-}
+ src/data/uhc-agda-base/LICENSE view
+ src/data/uhc-agda-base/src/UHC/Agda/Builtins.hs view
@@ -0,0 +1,423 @@+module UHC.Agda.Builtins+ ( -- Integer+ primShowInteger+ , primIntegerQuot+ , primIntegerRem+ , primIntegerMinus+ , primIntegerPlus+ , primIntegerTimes+ , primIntegerGreaterOrEqual+ , primIntegerEquality+ , primIntegerLess+ -- Levels+ , primLevelZero+ , primLevelSuc+ , primLevelMax+ -- Nat+ , Nat (..)+ , primIntegerToNat+ , primNatToInteger+ , primNatMinus+ , primNatPlus+ , primNatTimes+ , primNatDivSuc+ , primNatDivSucAux+ , primNatModSuc+ , primNatModSucAux+ , primNatEquality+ , primNatLess+ -- IO+ , primReturn+ , primBind+ , primGetContents+ , primReadFile+ , primWriteFile+ , primAppendFile+ , primPutStr+ , primPutStrLn+ , primReadFiniteFile+ -- String+ , primStringAppend+ , primStringEquality+ , primStringFromList+ , primStringToList+ , primShowString+ -- Char+ , primCharToNat+ , primCharEquality+ , primShowChar+ , primIsLower+ , primIsDigit+ , primIsAlpha+ , primIsSpace+ , primIsAscii+ , primIsLatin1+ , primIsPrint+ , primIsHexDigit+ , primToUpper+ , primToLower+ , primNatToChar+ -- Float+ , primShowFloat+ , primMkFloat+ , primFloatEquality+ , primFloatLess+ , primNatToFloat+ , primFloatPlus+ , primFloatMinus+ , primFloatTimes+ , primFloatDiv+ , primFloatSqrt+ , primRound+ , primFloor+ , primCeiling+ , primExp+ , primLog+ , primSin+ -- Reflection+ , QName (..)+ , primMkQName+ , primQNameEquality+ , primQNameLess+ , primShowQName+ , primMetaEquality+ , primMetaLess+ , primShowMeta++ -- Debugging+ , primTrace++ -- Misc+ , primIfThenElse+ , primSeq+ , unit+ )+where++import Prelude+import qualified Data.Char as C+import Debug.Trace+import UHC.OldException (onException)+import System.IO (openFile, IOMode (ReadMode), hClose, hFileSize, hGetContents)+++-- internal helper for this file+notImplError :: String -> a+notImplError f = error $ "Feature " ++ f ++ " is not implemented in the UHC backend!"+++-- ====================+-- Integer+-- ====================++primShowInteger :: Integer -> String+primShowInteger = show++primIntegerQuot :: Integer -> Integer -> Integer+primIntegerQuot = quot++primIntegerRem :: Integer -> Integer -> Integer+primIntegerRem = rem++primIntegerMinus :: Integer -> Integer -> Integer+primIntegerMinus = (-)++primIntegerPlus :: Integer -> Integer -> Integer+primIntegerPlus = (+)++primIntegerTimes :: Integer -> Integer -> Integer+primIntegerTimes = (*)++primIntegerGreaterOrEqual :: Integer -> Integer -> Bool+primIntegerGreaterOrEqual = (>=)++primIntegerLess :: Integer -> Integer -> Bool+primIntegerLess = (<)++primIntegerEquality :: Integer -> Integer -> Bool+primIntegerEquality = (==)++-- ====================+-- Levels+-- ====================++primLevelZero :: ()+primLevelZero = ()++primLevelSuc :: () -> ()+primLevelSuc _ = ()++primLevelMax :: () -> () -> ()+primLevelMax _ _ = ()++-- ====================+-- Nat+-- ====================++newtype Nat = Nat Integer++liftN2 :: (Integer -> Integer -> Integer) -> Nat -> Nat -> Nat+liftN2 f x y = Nat (f (unNat x) (unNat y))++unNat :: Nat -> Integer+unNat (Nat i) = i++primNatToInteger :: Nat -> Integer+primNatToInteger = unNat++-- unsafe!+primIntegerToNat :: Integer -> Nat+primIntegerToNat = Nat++primNatPlus :: Nat -> Nat -> Nat+primNatPlus = liftN2 (+)++primNatTimes :: Nat -> Nat -> Nat+primNatTimes = liftN2 (*)++primNatMinus :: Nat -> Nat -> Nat+primNatMinus x y = Nat $ max 0 (unNat x - unNat y)++primNatDivSuc :: Nat -> Nat -> Nat+primNatDivSuc x y = Nat $ div (unNat x) (unNat y + 1)++primNatDivSucAux :: Nat -> Nat -> Nat -> Nat -> Nat+primNatDivSucAux (Nat k) (Nat m) (Nat n) (Nat j) =+ Nat $ k + div (max 0 $ n + m - j) (m + 1)++primNatModSuc :: Nat -> Nat -> Nat+primNatModSuc x y = Nat $ mod (unNat x) (unNat y + 1)++primNatModSucAux :: Nat -> Nat -> Nat -> Nat -> Nat+primNatModSucAux (Nat k) (Nat m) (Nat n) (Nat j) =+ Nat $ if n > j then mod (n - j - 1) (m + 1) else k + n++primNatEquality :: Nat -> Nat -> Bool+primNatEquality x y = unNat x == unNat y++primNatLess :: Nat -> Nat -> Bool+primNatLess x y = unNat x < unNat y++-- ====================+-- IO+-- ====================++-- Calling haskell functions with class constraints from Agda+-- isn't supported yet, so just remove the class constraints on return/bind++primReturn :: a -> IO a+primReturn = return++primBind :: IO a -> (a -> IO b) -> IO b+primBind = (>>=)++primGetContents :: IO String+primGetContents = getContents++primReadFile :: FilePath -> IO String+primReadFile = readFile++primWriteFile :: FilePath -> String -> IO ()+primWriteFile = writeFile++primAppendFile :: FilePath -> String -> IO ()+primAppendFile = appendFile++primPutStr :: String -> IO ()+primPutStr = putStr++primPutStrLn :: String -> IO ()+primPutStrLn = putStrLn++primReadFiniteFile :: FilePath -> IO String+primReadFiniteFile f = do+ h <- openFile f ReadMode+ hFileSize h `onException` hClose h+ hGetContents h++-- ====================+-- String+-- ====================++primStringFromList :: [Char] -> String+primStringFromList = id++primStringToList :: String -> [Char]+primStringToList = id++primStringAppend :: String -> String -> String+primStringAppend = (++)++primStringEquality :: String -> String -> Bool+primStringEquality = (==)++primShowString :: String -> String+primShowString = id++-- ====================+-- Char+-- ====================++primCharToNat :: Char -> Nat+primCharToNat c = primIntegerToNat (fromIntegral (fromEnum c))++primNatToChar :: Nat -> Char+primNatToChar i = toEnum (fromInteger (primNatToInteger i))++primCharEquality :: Char -> Char -> Bool+primCharEquality = (==)++primShowChar :: Char -> String+primShowChar c = show c++primIsLower :: Char -> Bool+primIsLower = C.isLower++primIsDigit :: Char -> Bool+primIsDigit = C.isDigit++primIsAlpha :: Char -> Bool+primIsAlpha = C.isAlpha++primIsSpace :: Char -> Bool+primIsSpace = C.isSpace++primIsAscii :: Char -> Bool+primIsAscii = C.isAscii++primIsLatin1 :: Char -> Bool+primIsLatin1 = C.isLatin1++primIsPrint :: Char -> Bool+primIsPrint = C.isPrint++primIsHexDigit :: Char -> Bool+primIsHexDigit = C.isHexDigit++primToUpper :: Char -> Char+primToUpper = C.toUpper++primToLower :: Char -> Char+primToLower = C.toLower++-- ====================+-- Float+-- ====================++primShowFloat :: Double -> String+primShowFloat x+ | isNegativeZero x = "0.0"+ | isNaN x = "NaN"+ | isInfinite x = if x < 0 then "-Infinity" else "Infinity"+ | otherwise = reverse . dropZeroes . reverse $ show x+ where+ -- GHC drops trailing zeroes, UHC doesn't seem to do so. Quick fix for now...+ dropZeroes s@(_ : '.' : _) = s -- don't drop the last one though+ dropZeroes ('0' : s) = dropZeroes s+ dropZeroes s = s++primMkFloat :: String -> Double+primMkFloat = read++primFloatEquality :: Double -> Double -> Bool+primFloatEquality x y+ | isNaN x && isNaN y = True+ | otherwise = x == y++primFloatLess :: Double -> Double -> Bool+primFloatLess x y+ | isNegInf y = False+ | isNegInf x = True+ | isNaN x = True+ | otherwise = x < y+ where+ isNegInf z = z < 0 && isInfinite z++primNatToFloat :: Nat -> Double+primNatToFloat n = fromIntegral (unNat n)++primFloatPlus :: Double -> Double -> Double+primFloatPlus = (+)++primFloatMinus :: Double -> Double -> Double+primFloatMinus = (-)++primFloatTimes :: Double -> Double -> Double+primFloatTimes = (*)++primFloatDiv :: Double -> Double -> Double+primFloatDiv = (/)++primFloatSqrt :: Double -> Double+primFloatSqrt = sqrt++primRound :: Double -> Integer+primRound = round++primFloor :: Double -> Integer+primFloor = floor++primCeiling :: Double -> Integer+primCeiling = ceiling++primExp :: Double -> Double+primExp = exp++primLog :: Double -> Double+primLog = log++primSin :: Double -> Double+primSin = sin++-- ====================+-- Reflection+-- ====================+data QName = QName { nameId, moduleId ::Integer, qnameString :: String }++primMkQName :: Integer -> Integer -> String -> QName+primMkQName = QName++instance Eq QName where+ (QName a b _) == (QName c d _) = (a, b) == (c, d)+instance Ord QName where+ compare (QName a b _) (QName c d _) = compare (a, b) (c, d)++primQNameEquality :: QName -> QName -> Bool+primQNameEquality = (==)++primQNameLess :: QName -> QName -> Bool+primQNameLess = (<)++primShowQName :: QName -> String+primShowQName = qnameString++type Meta = Integer++primMetaEquality :: Meta -> Meta -> Bool+primMetaEquality = (==)++primMetaLess :: Meta -> Meta -> Bool+primMetaLess = (<)++primShowMeta :: Meta -> String+primShowMeta x = "_" ++ show x++-- ====================+-- Debugging+-- ====================+primTrace :: String -> b -> b+primTrace = trace++-- ====================+-- Misc+-- ====================++primIfThenElse :: Bool -> a -> a -> a+primIfThenElse c t e = if c then t else e++primSeq :: a -> b -> b+primSeq = seq++-- | Unit wrapper function (instead of dropping a dummy function inside each module).+unit :: ()+unit = ()
+ src/data/uhc-agda-base/uhc-agda-base.cabal view
@@ -0,0 +1,25 @@+-- Initial uhc-agda-base.cabal generated by cabal init. For further+-- documentation, see http://haskell.org/cabal/users-guide/++-- ATTENTION: normally this package gets built using UHC directly without cabal!+-- The version of this package, when built directly using UHC, is the version of Agda.+-- In the long term, it would be nice if we could use "cabal install --uhc" to install this package.++name: uhc-agda-base+version: 0.1.0.0+synopsis: Builtins implementation for Agda UHC Backend+-- description:+license: AllRightsReserved+license-file: LICENSE+author: Philipp Hausmann+maintainer: ph_git@314.ch+-- copyright:+category: Development+build-type: Simple+cabal-version: >=1.8++library+ exposed-modules: UHC.Agda.Builtins+ -- other-modules:+ build-depends: base ==4.6.*+ hs-source-dirs: src
src/full/Agda/Auto/Auto.hs view
@@ -25,6 +25,8 @@ -- import Agda.TypeChecking.Monad.Context -- import Agda.TypeChecking.Monad.Signature import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope+ import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Abstract.Pretty (prettyA) import qualified Text.PrettyPrint as PP@@ -370,12 +372,12 @@ case cls' of Left{} -> dispmsg "No solution found" Right cls' -> do- cls'' <- forM cls' $ \ (I.Clause _ tel perm ps body t) -> do+ cls'' <- forM cls' $ \ (I.Clause _ tel ps body t catchall) -> do withCurrentModule (AN.qnameModule def) $ do -- Normalise the dot patterns ps <- addCtxTel tel $ normalise ps body <- etaContractBody body- liftM modifyAbstractClause $ inContext [] $ reify $ AN.QNamed def $ I.Clause noRange tel perm ps body t+ liftM modifyAbstractClause $ inContext [] $ reify $ AN.QNamed def $ I.Clause noRange tel ps body t catchall pcs <- withInteractionId ii $ mapM prettyA cls'' ticks <- liftIO $ readIORef ticks @@ -393,7 +395,7 @@ minfo = getMetaInfo mv targettyp <- withMetaInfo minfo $ do vs <- getContextArgs- let targettype = tt `piApply` permute (takeP (length vs) $ mvPermutation mv) vs+ targettype <- tt `piApplyM` permute (takeP (length vs) $ mvPermutation mv) vs normalise targettype let tctx = length $ envContext $ clEnv minfo
src/full/Agda/Auto/CaseSplit.hs view
@@ -1,5 +1,5 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE Rank2Types #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE Rank2Types #-} {-# LANGUAGE ScopedTypeVariables #-} module Agda.Auto.CaseSplit where
src/full/Agda/Auto/Convert.hs view
@@ -12,7 +12,9 @@ import qualified Data.Map as Map import Control.Monad.State +import Agda.Syntax.Concrete (exprFieldA) import qualified Agda.Syntax.Internal as I+import qualified Agda.Syntax.Internal.Pattern as IP import qualified Agda.Syntax.Common as Common import qualified Agda.Syntax.Abstract.Name as AN import qualified Agda.Syntax.Abstract as A@@ -27,7 +29,7 @@ import Agda.TypeChecking.Monad.Context (getContextArgs) import Agda.TypeChecking.Monad.Constraints (getAllConstraints) import Agda.TypeChecking.Substitute (piApply, applySubst)-import Agda.TypeChecking.Telescope (renamingR)+import Agda.TypeChecking.Telescope (piApplyM, renamingR) import qualified Agda.TypeChecking.Substitute as I (absBody) import Agda.TypeChecking.Reduce (Normalise, normalise, instantiate) import Agda.TypeChecking.EtaContract (etaContract)@@ -40,10 +42,11 @@ import Agda.Auto.CaseSplit hiding (lift) +import Agda.Utils.Either import Agda.Utils.Except ( Error(strMsg) , ExceptT- , MonadError(catchError, throwError)+ , MonadError(throwError) ) import Agda.Utils.Lens @@ -166,7 +169,7 @@ localVars = map (snd . Common.unDom . ctxEntry) . envContext . clEnv $ minfo (targettype, localVars) <- lift $ withMetaInfo minfo $ do vs <- getContextArgs- let targettype = tt `piApply` permute (takeP (length vs) $ mvPermutation mv) vs+ targettype <- tt `piApplyM` permute (takeP (length vs) $ mvPermutation mv) vs targettype <- norm targettype localVars <- mapM norm localVars return (targettype, localVars)@@ -295,16 +298,16 @@ Nothing -> cls' tomyClause :: I.Clause -> TOM (Maybe ([Pat O], MExp O))-tomyClause cl@(I.Clause {I.clausePerm = Perm n ps, I.clauseBody = body}) = do+tomyClause cl@(I.Clause {I.clauseBody = body}) = do let pats = I.clausePats cl- pats' <- mapM tomyPat pats+ pats' <- mapM tomyPat $ IP.unnumberPatVars pats body' <- tomyBody body return $ case body' of Just (body', _) -> Just (pats', body') Nothing -> Nothing -tomyPat :: I.Arg I.Pattern -> TOM (Pat O)+tomyPat :: Common.Arg I.Pattern -> TOM (Pat O) tomyPat p = case Common.unArg p of I.ProjP _ -> lift $ copatternsNotImplemented I.VarP n -> return $ PatVar (show n)@@ -427,7 +430,6 @@ _ -> tomyExp t I.DontCare _ -> return $ NotM $ dontCare I.Shared p -> tomyExp $ I.derefPtr p- I.ExtLam{} -> __IMPOSSIBLE__ tomyExps :: I.Args -> TOM (MM (ArgList O) (RefInfo O)) tomyExps [] = return $ NotM ALNil@@ -457,7 +459,6 @@ fmExp m (I.MetaV mid _) = mid == m fmExp m (I.DontCare _) = False fmExp m (I.Shared p) = fmExp m $ I.derefPtr p-fmExp m I.ExtLam{} = __IMPOSSIBLE__ fmExps :: I.MetaId -> I.Args -> Bool fmExps m [] = False@@ -479,7 +480,7 @@ Common.Instance -> Instance Common.Hidden -> Hidden -icnvh :: FMode -> I.ArgInfo+icnvh :: FMode -> Common.ArgInfo icnvh h = (Common.setHiding h' Common.defaultArgInfo) where h' = case h of@@ -584,13 +585,13 @@ f (A.Lam i (A.DomainFree info n) _) | show (A.nameConcrete n) == abslamvarname = A.AbsurdLam i $ Common.argInfoHiding info f (A.Lam i b e) = A.Lam i b (f e)- f (A.Rec i xs) = A.Rec i (map (\(n, e) -> (n, f e)) xs)- f (A.RecUpdate i e xs) = A.RecUpdate i (f e) (map (\(n, e) -> (n, f e)) xs)+ f (A.Rec i xs) = A.Rec i (map (mapLeft (over exprFieldA f)) xs)+ f (A.RecUpdate i e xs) = A.RecUpdate i (f e) (map (over exprFieldA f) xs) f (A.ScopedExpr i e) = A.ScopedExpr i (f e) f e = e modifyAbstractClause :: A.Clause -> A.Clause-modifyAbstractClause (A.Clause lhs (A.RHS e) decls) = A.Clause lhs (A.RHS (modifyAbstractExpr e)) decls+modifyAbstractClause (A.Clause lhs (A.RHS e) decls catchall) = A.Clause lhs (A.RHS (modifyAbstractExpr e)) decls catchall modifyAbstractClause cl = cl -- ---------------------------------@@ -619,7 +620,7 @@ return (ns, HI hid (CSPatExp t2)) I.ProjP{} -> copatternsNotImplemented _ -> __IMPOSSIBLE__- (names, pats) <- cnvps [] (I.namedClausePats clause)+ (names, pats) <- cnvps [] (IP.unnumberPatVars $ I.namedClausePats clause) return (reverse names, pats) @@ -692,10 +693,10 @@ return $ I.Clause { I.clauseRange = SP.noRange , I.clauseTel = tel- , I.clausePerm = cperm- , I.namedClausePats = applySubst (renamingR $ compactP cperm) ps+ , I.namedClausePats = IP.numberPatVars cperm $ applySubst (renamingR $ compactP cperm) ps , I.clauseBody = applySubst (renamingR cperm) <$> body , I.clauseType = Nothing -- TODO: compute clause type+ , I.clauseCatchall = False } contains_constructor :: [CSPat O] -> Bool@@ -781,7 +782,6 @@ I.MetaV m' _ -> m == m' I.DontCare _ -> False I.Shared{} -> __IMPOSSIBLE__- I.ExtLam{} -> __IMPOSSIBLE__ findMetas = any (findMeta . Common.unArg) findMetat (I.El _ e) = findMeta e toplevel e =
src/full/Agda/Auto/NarrowingSearch.hs view
@@ -1,10 +1,10 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE ExistentialQuantification #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE Rank2Types #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE Rank2Types #-}+{-# LANGUAGE ScopedTypeVariables #-} module Agda.Auto.NarrowingSearch where @@ -218,7 +218,7 @@ Just x -> f x Nothing -> return $ Blocked m (mmcase x f) -mmmcase :: Refinable a blk => MM a blk -> MetaEnv (MB b blk) -> (a -> MetaEnv (MB b blk)) -> MetaEnv (MB b blk)+mmmcase :: MM a blk -> MetaEnv (MB b blk) -> (a -> MetaEnv (MB b blk)) -> MetaEnv (MB b blk) mmmcase x fm f = case x of NotM x -> f x Meta m -> do
src/full/Agda/Auto/SearchControl.hs view
@@ -1,7 +1,7 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -fno-warn-orphans #-}
src/full/Agda/Auto/Typecheck.hs view
@@ -1,7 +1,7 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE ExistentialQuantification #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE ScopedTypeVariables #-} module Agda.Auto.Typecheck where
src/full/Agda/Benchmarking.hs view
@@ -14,7 +14,6 @@ module Agda.Benchmarking where -import Control.Monad.IO.Class import qualified Control.Exception as E import Data.IORef@@ -52,6 +51,8 @@ -- ^ Generating highlighting info. | Serialization -- ^ Writing interface files.+ | DeadCode+ -- ^ Deac code elimination. | Graph -- ^ Subphase for 'Termination'. | RecCheck@@ -78,6 +79,10 @@ -- ^ Subphase for 'Typing': free variable computation. | OccursCheck -- ^ Subphase for 'Typing': occurs check for solving metas.+ | CheckLHS+ -- ^ Subphase for 'Typing': checking the LHS+ | UnifyIndices+ -- ^ Subphase for 'CheckLHS': unification of the indices | InverseScopeLookup -- ^ Pretty printing names. deriving (Eq, Ord, Show, Enum, Bounded)
src/full/Agda/Compiler/CallCompiler.hs view
@@ -28,16 +28,21 @@ -- information the compiler prints to stdout. callCompiler- :: FilePath+ :: Bool+ -- ^ Should we actually call the compiler+ -> FilePath -- ^ The path to the compiler -> [String] -- ^ Command-line arguments. -> TCM ()-callCompiler cmd args = do- merrors <- callCompiler' cmd args- case merrors of- Nothing -> return ()- Just errors -> typeError (CompilationError errors)+callCompiler doCall cmd args =+ if doCall then do+ merrors <- callCompiler' cmd args+ case merrors of+ Nothing -> return ()+ Just errors -> typeError (CompilationError errors)+ else+ reportSLn "" 1 $ "NOT calling: " ++ intercalate " " (cmd : args) -- | Generalisation of @callCompiler@ where the raised exception is -- returned.
+ src/full/Agda/Compiler/Common.hs view
@@ -0,0 +1,177 @@+{-# LANGUAGE CPP #-}++module Agda.Compiler.Common where+++#if __GLASGOW_HASKELL__ <= 708+import Prelude hiding (foldl, mapM_, mapM, sequence, concat)+#endif++import Data.List as List+import Data.Map (Map)+import qualified Data.Map as Map+import Data.Set (Set)+import qualified Data.Set as Set+import Data.Char+import Data.Function++import Control.Monad+import Control.Monad.State hiding (mapM_, forM_, mapM, forM, sequence)++import Agda.Syntax.Common+import qualified Agda.Syntax.Abstract.Name as A+import qualified Agda.Syntax.Concrete.Name as C+import Agda.Syntax.Internal as I++import Agda.Interaction.FindFile+import Agda.Interaction.Imports+import Agda.Interaction.Options++import Agda.TypeChecking.Monad+import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope++import Agda.Utils.FileName+import qualified Agda.Utils.HashMap as HMap+import Agda.Utils.Lens+import Agda.Utils.Maybe+import Agda.Utils.Monad+import Agda.Utils.Pretty++#include "undefined.h"+import Agda.Utils.Impossible++data IsMain = IsMain | NotMain+ deriving (Eq)++doCompile :: IsMain -> Interface -> (IsMain -> Interface -> TCM ()) -> TCM ()+doCompile isMain i f = do+ -- The Agda.Primitive module is implicitly assumed to be always imported,+ -- even though it not necesseraly occurs in iImportedModules.+ -- TODO: there should be a better way to get hold of Agda.Primitive?+ [agdaPrimInter] <- filter (("Agda.Primitive"==) . prettyShow . iModuleName)+ . map miInterface . Map.elems+ <$> getVisitedModules+ flip evalStateT Set.empty $ comp NotMain agdaPrimInter >> comp isMain i+ where+ comp :: IsMain -> Interface -> StateT (Set ModuleName) TCM ()+ comp isMain i = do+ alreadyDone <- Set.member (iModuleName i) <$> get+ when (not alreadyDone) $ do+ imps <- lift $+ map miInterface . catMaybes <$>+ mapM (getVisitedModule . toTopLevelModuleName . fst) (iImportedModules i)+ mapM_ (comp NotMain) imps+ lift $ setInterface i+ lift $ f NotMain i+ modify (Set.insert $ iModuleName i)++setInterface :: Interface -> TCM ()+setInterface i = do+ opts <- gets (stPersistentOptions . stPersistentState)+ setCommandLineOptions opts+ mapM_ setOptionsFromPragma (iPragmaOptions i)+ stImportedModules .= Set.empty+ stCurrentModule .= Just (iModuleName i)++curIF :: TCM Interface+curIF = do+ mName <- use stCurrentModule+ case mName of+ Nothing -> __IMPOSSIBLE__+ Just name -> do+ mm <- getVisitedModule (toTopLevelModuleName name)+ case mm of+ Nothing -> __IMPOSSIBLE__+ Just mi -> return $ miInterface mi+++curSig :: TCM Signature+curSig = iSignature <$> curIF++curMName :: TCM ModuleName+curMName = sigMName <$> curSig++curDefs :: TCM Definitions+curDefs = (^. sigDefinitions) <$> curSig++sortDefs :: Definitions -> [(QName, Definition)]+sortDefs defs =+ -- The list is sorted to ensure that the order of the generated+ -- definitions does not depend on things like the number of bits+ -- in an Int (see Issue 1900).+ List.sortBy (compare `on` fst) $+ HMap.toList defs++sigMName :: Signature -> ModuleName+sigMName sig = case Map.keys (sig ^. sigSections) of+ [] -> __IMPOSSIBLE__+ m : _ -> m+++compileDir :: TCM FilePath+compileDir = do+ mdir <- optCompileDir <$> commandLineOptions+ case mdir of+ Just dir -> return dir+ Nothing -> __IMPOSSIBLE__+++repl :: [String] -> String -> String+repl subs = go where+ go ('<':'<':c:'>':'>':s) | 0 <= i && i < length subs = subs !! i ++ go s+ where i = ord c - ord '0'+ go (c:s) = c : go s+ go [] = []+++-- | Copy pasted from MAlonzo....+-- Move somewhere else!+conArityAndPars :: QName -> TCM (Nat, Nat)+conArityAndPars q = do+ def <- getConstInfo q+ TelV tel _ <- telView $ defType def+ let Constructor{ conPars = np } = theDef def+ n = length (telToList tel)+ return (n - np, np)++-- | Sets up the compilation environment.+inCompilerEnv :: Interface -> TCM a -> TCM a+inCompilerEnv mainI cont =+ -- Preserve the state (the compiler modifies the state).+ -- Andreas, 2014-03-23 But we might want to collect Benchmark info,+ -- so use localTCState.+ localTCState $ do++ -- Compute the output directory. Note: using commandLineOptions would make+ -- the current pragma options persistent when we setCommandLineOptions+ -- below.+ opts <- gets $ stPersistentOptions . stPersistentState+ compileDir <- case optCompileDir opts of+ Just dir -> return dir+ Nothing -> do+ -- The default output directory is the project root.+ let tm = toTopLevelModuleName $ iModuleName mainI+ f <- findFile tm+ return $ filePath $ C.projectRoot f tm+ setCommandLineOptions $+ opts { optCompileDir = Just compileDir }++ ignoreAbstractMode $ do+ cont++topLevelModuleName :: ModuleName -> TCM ModuleName+topLevelModuleName m = do+ -- get the names of the visited modules+ visited <- List.map (iModuleName . miInterface) . Map.elems <$>+ getVisitedModules+ -- find the module with the longest matching prefix to m+ let ms = sortBy (compare `on` (length . mnameToList)) $+ List.filter (\ m' -> mnameToList m' `isPrefixOf` mnameToList m) visited+ case ms of+ (m' : _) -> return m'+ -- if we did not get anything, it may be because m is a section+ -- (a module _ ), see e.g. #1866+ [] -> curMName
src/full/Agda/Compiler/Epic/Compiler.hs view
@@ -274,4 +274,4 @@ , "-i", dataDir </> "stdagda" <.> "c" ] ++ flags epicFlags - lift $ callCompiler epic epicCommand+ lift $ callCompiler True epic epicCommand
src/full/Agda/Compiler/Epic/Erasure.hs view
@@ -133,22 +133,28 @@ Nothing -> return () initialRels :: SI.Type -> Relevance -> [Relevance]-initialRels ty rel = case SI.unEl ty of+initialRels ty rel = case SI.ignoreSharing $ SI.unEl ty of SI.Pi a b -> mkRel a : initialRels (SI.unAbs b) rel _ -> [] where- mkRel :: SI.Dom SI.Type -> Relevance+ mkRel :: Common.Dom SI.Type -> Relevance mkRel a | ignoreForced (Common.getRelevance a) = Irr- mkRel a = case SI.unEl (Common.unDom a) of- SI.Sort _ -> Irr- _ -> rel+ mkRel a = case SI.ignoreSharing $ SI.unEl (Common.unDom a) of+ SI.Sort _ -> Irr+ _ -> rel ignoreForced :: Common.Relevance -> Bool ignoreForced Common.Relevant = False-ignoreForced _ = True+ignoreForced _ = True -- | Calculate if a variable is relevant in an expression-relevant :: (Functor m, Monad m) => Var -> Expr -> Erasure m Relevance+relevant+#if __GLASGOW_HASKELL__ <= 708+ :: (Functor m, Monad m)+#else+ :: Monad m+#endif+ => Var -> Expr -> Erasure m Relevance relevant var expr = case expr of Var v | v == var -> return Rel | otherwise -> return Irr@@ -181,7 +187,13 @@ UNIT -> return Irr IMPOSSIBLE -> return Irr where- relevants :: (Functor m, Monad m) => Var -> [Expr] -> Erasure m Relevance+ relevants+#if __GLASGOW_HASKELL__ <= 708+ :: (Functor m, Monad m)+#else+ :: Monad m+#endif+ => Var -> [Expr] -> Erasure m Relevance relevants v [] = return Irr relevants v (e : es) = do r <- relevant v e@@ -211,5 +223,5 @@ put s {relevancies = relsm} step (nrOfLoops + 1) -diff :: (Ord k, Eq a) => Map k a -> Map k a -> [(k,(a,a))]+diff :: Eq a => Map k a -> Map k a -> [(k,(a,a))] diff m1 m2 = catMaybes $ zipWith (\(k, x) (_, y) -> if x == y then Nothing else Just (k, (x, y))) (Map.toList m1) (Map.toList m2)
src/full/Agda/Compiler/Epic/ForceConstrs.hs view
@@ -18,11 +18,11 @@ -- | Check which arguments are forced makeForcedArgs :: T.Type -> ForcedArgs-makeForcedArgs (T.El _ term) = case term of- T.Pi arg ab -> isRel arg : makeForcedArgs (T.unAbs ab)- _ -> []+makeForcedArgs (T.El _ term) = case T.ignoreSharing term of+ T.Pi arg ab -> isRel arg : makeForcedArgs (T.unAbs ab)+ _ -> [] where- isRel :: T.Dom T.Type -> Forced+ isRel :: Common.Dom T.Type -> Forced isRel arg = case Common.getRelevance arg of Common.Relevant -> NotForced Common.Irrelevant -> Forced
src/full/Agda/Compiler/Epic/Forcing.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE FlexibleContexts #-} module Agda.Compiler.Epic.Forcing where @@ -20,7 +21,7 @@ import Agda.TypeChecking.Rules.LHS.Problem (FlexibleVars, defaultFlexibleVar) import Agda.TypeChecking.Rules.LHS.Unify import Agda.TypeChecking.Substitute- (applySubst, apply, wkS, raiseS, dropS, (++#), TelV(..))+ (applySubst, apply, piApply, wkS, raiseS, dropS, (++#), TelV(..)) import qualified Agda.TypeChecking.Substitute as S import Agda.TypeChecking.Pretty as P import Agda.TypeChecking.Reduce@@ -100,7 +101,7 @@ , text "term:" <+> prettyTCM term , text "to:" <+> prettyTCM (unAbs to) ]- (st, arg) <- case I.unEl . unDom $ t' of+ (st, arg) <- case I.ignoreSharing . I.unEl . unDom $ t' of I.Def st es -> return (st, fromMaybe __IMPOSSIBLE__ $ I.allApplyElims es) s -> do report 10 $ vcat@@ -140,11 +141,10 @@ -- TODO: restore fields in ConHead mkCon :: QName -> Int -> Term-mkCon c n = I.Con (I.ConHead c Inductive [])- [ defaultArg $ I.Var i [] | i <- [n - 1, n - 2 .. 0] ]+mkCon c n = I.Con (I.ConHead c Inductive []) $ map (defaultArg . I.var) $ downFrom n unifyI :: Telescope -> FlexibleVars -> Type -> Args -> Args -> Compile TCM [Maybe Term]-unifyI tele flex typ a1 a2 = lift $ addCtxTel tele $ unifyIndices_ flex typ a1 a2+unifyI tele flex typ a1 a2 = lift $ typeError $ NotImplemented "using the new unification algorithm for forcing" takeTele :: Int -> Telescope -> Telescope takeTele 0 _ = EmptyTel@@ -206,7 +206,7 @@ then Branch t constr as <$> forcedExpr (replaceAt n vars as) tele'' e else do -- unify the telescope type with the return type of the constructor- unif <- case (unEl ntyp, unEl ctyp) of+ unif <- case (I.ignoreSharing $ unEl ntyp, I.ignoreSharing $ unEl ctyp) of (I.Def st es1, I.Def st' es2) | st == st' -> do let a1 = fromMaybe __IMPOSSIBLE__ $ I.allApplyElims es1 let a2 = fromMaybe __IMPOSSIBLE__ $ I.allApplyElims es2@@ -218,7 +218,7 @@ ] unifyI (takeTele (n + length as) tele'') (map defaultFlexibleVar [0 .. n + length as])- (setType `apply` take typPars a1)+ (setType `piApply` take typPars a1) (drop typPars a1) (drop typPars a2) _ -> __IMPOSSIBLE__@@ -283,6 +283,7 @@ -- | Given a term containg the forced var, dig out the variable by inserting -- the proper case-expressions. buildTerm :: Var -> Nat -> Term -> Compile TCM (Expr -> Expr, Var)+buildTerm var idx (I.Shared p) = buildTerm var idx $ I.derefPtr p buildTerm var idx (I.Var i _) | idx == i = return (id, var) buildTerm var idx (I.Con con args) = do let c = I.conName con@@ -305,7 +306,7 @@ (return Nothing) where pred :: Term -> Compile TCM Bool- pred t = case t of+ pred t = case I.ignoreSharing t of I.Var i _ | var == i -> return True I.Con c args -> do forc <- getForcedArgs $ I.conName c
src/full/Agda/Compiler/Epic/FromAgda.hs view
@@ -128,7 +128,7 @@ reverseCCBody :: Int -> CC.CompiledClauses -> CC.CompiledClauses reverseCCBody c cc = case cc of- CC.Case n (CC.Branches cop cbr lbr cabr) -> CC.Case (c+n)+ CC.Case n (CC.Branches cop cbr lbr cabr) -> CC.Case (fmap (c+) n) $ CC.Branches cop (Map.map (fmap $ reverseCCBody c) cbr) (Map.map (reverseCCBody c) lbr) (fmap (reverseCCBody c) cabr)@@ -179,7 +179,7 @@ where compileClauses' :: [Var] -> Maybe Var -> CC.CompiledClauses -> Compile TCM Expr compileClauses' env omniDefault cc = case cc of- CC.Case n nc -> case length env <= n of+ CC.Case (Arg _ n) nc -> case length env <= n of True -> __IMPOSSIBLE__ False -> case CC.catchAllBranch nc of Nothing -> Case (Var (fromMaybe __IMPOSSIBLE__ $ env !!! n)) <$>@@ -220,7 +220,7 @@ -- from patternmatching. Agda terms are in de Bruijn so we just check the new -- names in the position. substTerm :: [Var] -> T.Term -> Compile TCM Expr-substTerm env term = case T.unSpine term of+substTerm env term = case T.ignoreSharing $ T.unSpine term of T.Var ind es -> do let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es case length env <= ind of@@ -253,12 +253,11 @@ T.Sort _ -> return UNIT T.MetaV _ _ -> return UNIT T.DontCare _ -> return UNIT- T.ExtLam{} -> __IMPOSSIBLE__ -- | Translate Agda literals to our AUX definition substLit :: TL.Literal -> Compile TCM Lit substLit lit = case lit of- TL.LitInt _ i -> return $ LInt i+ TL.LitNat _ i -> return $ LInt i TL.LitString _ s -> return $ LString s TL.LitChar _ c -> return $ LChar c TL.LitFloat _ f -> return $ LFloat f
src/full/Agda/Compiler/Epic/Injection.hs view
@@ -18,7 +18,7 @@ import Agda.Syntax.Common import Agda.Syntax.Internal as I-import Agda.Syntax.Internal.Pattern (FunArity(..))+import Agda.Syntax.Internal.Pattern (FunArity(..), unnumberPatVars) import Agda.Syntax.Literal import Agda.TypeChecking.CompiledClause import Agda.TypeChecking.Monad@@ -29,7 +29,6 @@ import Agda.Utils.List import Agda.Utils.Monad import Agda.Utils.Null-import qualified Agda.Utils.HashMap as HM import Agda.Compiler.Epic.CompileState import Agda.Compiler.Epic.Interface as Interface@@ -115,7 +114,7 @@ LitP l -> 0 ProjP{} -> 0 -substForDot :: [I.NamedArg Pattern] -> Substitution+substForDot :: [NamedArg (Pattern' a)] -> Substitution substForDot = makeSubst 0 0 . reverse . calcDots where makeSubst i accum [] = raiseS (i + accum)@@ -145,9 +144,9 @@ Nothing -> return emptyC Just body -> do let t = patternToTerm idxR $ unArg $ fromMaybe __IMPOSSIBLE__ $- clausePats clause !!! idx+ unnumberPatVars (clausePats clause) !!! idx t' = applySubst (substForDot $ namedClausePats clause) t- idxR = sum . map (nrBinds . unArg) . genericDrop (idx + 1) $ clausePats clause+ idxR = sum . map (nrBinds . unArg) . genericDrop (idx + 1) $ unnumberPatVars $ clausePats clause body' <- lift $ reduce body lift $ reportSLn "epic.injection" 40 "reduced body" injFs <- gets (injectiveFuns . importedModules)@@ -170,16 +169,13 @@ -- | Turn NATURAL literal n into suc^n zero. litToCon :: Literal -> TCM Term litToCon l = case l of- LitInt r n | n > 0 -> do- inner <- litToCon (LitInt r (n - 1))- suc <- primSuc- return $ suc `apply` [defaultArg inner]+ LitNat r n | n > 0 -> apply1 <$> primSuc <*> litToCon (LitNat r (n - 1)) | otherwise -> primZero -- LitLevel _ n -> -- Does not really matter lit -> return $ Lit lit litInt :: Literal -> Bool-litInt LitInt{} = True+litInt LitNat{} = True litInt _ = False insertAt :: (Nat,Term) -> Term -> Term@@ -251,7 +247,7 @@ class Injectible a where (<:) :: a -> a -> ReaderT (Map QName InjectiveFun) (Compile TCM) InjConstraints -instance Injectible a => Injectible (I.Arg a) where+instance Injectible a => Injectible (Arg a) where a1 <: a2 = unArg a1 <: unArg a2 instance Injectible a => Injectible [a] where@@ -276,7 +272,7 @@ -- It could be restored by only reducing the right argument in the Arg-instance. -- (t1, t2) <- lift . lift . reduce $ (t1, t2) -- NOTE: reduce *introduces* Lit! Loops!- case (t1, t2) of+ case (ignoreSharing t1, ignoreSharing t2) of (Lit l, Lit l') | l == l' -> return $ Just [] (Lit l, _) | litInt l -> do l' <- lift . lift $ litToCon l
src/full/Agda/Compiler/Epic/NatDetection.hs view
@@ -67,7 +67,7 @@ -- | Check if argument n is recursive isRec :: Int -> Type -> QName -> Bool-isRec 0 (El _ t) dat = case t of+isRec 0 (El _ t) dat = case ignoreSharing t of Pi arg _ -> argIsDef (unDom arg) dat _ -> False isRec n (El _ t) dat = case t of@@ -75,6 +75,6 @@ _ -> False argIsDef :: Type -> QName -> Bool-argIsDef (El _ t) dat = case t of+argIsDef (El _ t) dat = case ignoreSharing t of Def q _ -> q == dat _ -> False
src/full/Agda/Compiler/Epic/Primitive.hs view
@@ -100,9 +100,10 @@ else return Nothing defName :: T.Term -> QName-defName (T.Def q []) = q-defName (T.Con q []) = T.conName q-defName _ = __IMPOSSIBLE__+defName v = case T.ignoreSharing v of+ T.Def q [] -> q+ T.Con q [] -> T.conName q+ _ -> __IMPOSSIBLE__ -- | Translation to primitive integer functions natPrimTF :: ForcedArgs -> [QName] -> PrimTransform
src/full/Agda/Compiler/Epic/Smashing.hs view
@@ -15,7 +15,7 @@ import Agda.Syntax.Common import Agda.Syntax.Internal as SI-import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad hiding (funInline) import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope import Agda.TypeChecking.Pretty@@ -71,7 +71,7 @@ where names = teleNames xs ++ teleNames ys -- | Can a datatype be inferred? If so, return the only possible value.-inferable :: Set QName -> QName -> [SI.Arg Term] -> Compile TCM (Maybe Expr)+inferable :: Set QName -> QName -> [Arg Term] -> Compile TCM (Maybe Expr) inferable visited dat args | dat `Set.member` visited = return Nothing inferable visited dat args = do lift $ reportSLn "epic.smashing" 10 $ " inferring:" ++ (show dat)@@ -94,7 +94,7 @@ defs <- lift $ use $ stImports . sigDefinitions let def = fromMaybe __IMPOSSIBLE__ $ HM.lookup c defs forc <- getForcedArgs c- TelV tel _ <- lift $ telView (defType def `apply` genericTake pars args)+ TelV tel _ <- lift $ telView (defType def `piApply` genericTake pars args) tag <- getConstrTag c lift $ reportSDoc "epic.smashing" 10 $ nest 2 $ vcat [ text "inferableArgs!"@@ -106,7 +106,7 @@ inferableTerm :: Set QName -> Term -> Compile TCM (Maybe Expr) inferableTerm visited t = do- case t of+ case ignoreSharing t of Def q es -> case allApplyElims es of Just vs -> inferable visited q vs
src/full/Agda/Compiler/Epic/Static.hs view
@@ -23,6 +23,7 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Pretty +import Agda.Utils.List (downFrom) import Agda.Utils.Monad import qualified Agda.Utils.HashMap as HM @@ -59,7 +60,7 @@ len = length . clausePats . head . funClauses $ f toEta :: Num a => a toEta = fromIntegral $ len - length ts- term = raise toEta def `apply` [ defaultArg $ Var i [] | i <- [toEta - 1, toEta - 2 .. 0]]+ term = raise toEta def `applys` map var (downFrom toEta) return $ foldr (\ v t -> Lam defaultArgInfo (Abs v t)) term $ replicate toEta "staticVar" etaExpand x = return x @@ -69,7 +70,7 @@ instance Evaluate a => Evaluate [a] where evaluate = traverse evaluate -instance Evaluate a => Evaluate (I.Arg a) where+instance Evaluate a => Evaluate (Arg a) where evaluate = traverse evaluate instance Evaluate a => Evaluate (Abs a) where@@ -105,7 +106,6 @@ Level l -> return term DontCare i -> return term Shared{} -> updateSharedTermT evaluate term- ExtLam{} -> __IMPOSSIBLE__ where {- evaluateTerms :: Args -> Compile TCM Args
src/full/Agda/Compiler/HaskellTypes.hs view
@@ -53,12 +53,6 @@ hsForall :: String -> HaskellType -> HaskellType hsForall x a = "(forall " ++ x ++ ". " ++ a ++ ")" -notAHaskellKind :: Type -> TCM a-notAHaskellKind a = do- err <- fsep $ pwords "The type" ++ [prettyTCM a] ++- pwords "cannot be translated to a Haskell kind."- typeError $ GenericError $ show err- notAHaskellType :: Type -> TCM a notAHaskellType a = do err <- fsep $ pwords "The type" ++ [prettyTCM a] ++@@ -76,23 +70,6 @@ getHsVar :: Nat -> TCM HaskellCode getHsVar i = hsVar <$> nameOfBV i -isHaskellKind :: Type -> TCM Bool-isHaskellKind a =- (const True <$> haskellKind a) `catchError` \_ -> return False--haskellKind :: Type -> TCM HaskellKind-haskellKind a = do- a <- reduce a- case unEl a of- Sort _ -> return hsStar- Pi a b -> hsKFun <$> haskellKind (unDom a) <*> underAbstraction a b haskellKind- Def d _ -> do- d <- compiledHaskell . defCompiledRep <$> getConstInfo d- case d of- Just (HsType t) -> return hsStar- _ -> notAHaskellKind a- _ -> notAHaskellKind a- -- | Note that @Inf a b@, where @Inf@ is the INFINITY builtin, is -- translated to @<translation of b>@ (assuming that all coinductive -- builtins are defined).@@ -136,4 +113,3 @@ Shared p -> fromTerm $ derefPtr p MetaV{} -> err DontCare{} -> err- ExtLam{} -> __IMPOSSIBLE__
src/full/Agda/Compiler/JS/Compiler.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE NamedFieldPuns #-} module Agda.Compiler.JS.Compiler where@@ -27,13 +27,14 @@ ( Name, Args, Type, Clause, Pattern, Pattern'(VarP,DotP,LitP,ConP,ProjP), ClauseBodyF(Body,NoBody,Bind),ClauseBody,- Term(Var,Lam,Lit,Level,Def,Con,Pi,Sort,MetaV,DontCare,Shared,ExtLam),+ Term(Var,Lam,Lit,Level,Def,Con,Pi,Sort,MetaV,DontCare,Shared), unSpine, allApplyElims, conName, derefPtr, toTopLevelModuleName, clausePats, clauseBody, arity, unEl, unAbs )+import Agda.Syntax.Internal.Pattern ( unnumberPatVars ) import Agda.TypeChecking.Substitute ( absBody )-import Agda.Syntax.Literal ( Literal(LitInt,LitFloat,LitString,LitChar,LitQName) )+import Agda.Syntax.Literal ( Literal(LitNat,LitFloat,LitString,LitChar,LitQName,LitMeta) ) import Agda.TypeChecking.Level ( reallyUnLevelView ) import Agda.TypeChecking.Monad ( TCM, Definition(Defn), Interface,@@ -56,8 +57,9 @@ import Agda.Utils.Pretty (prettyShow) import Agda.Utils.IO.UTF8 ( writeFile ) import qualified Agda.Utils.HashMap as HMap-import Agda.Compiler.MAlonzo.Misc ( curDefs, curIF, curMName, setInterface )-import Agda.Compiler.MAlonzo.Primitives ( repl )+import Agda.Compiler.Common+ ( curDefs, curIF, curMName, setInterface, repl, inCompilerEnv,+ IsMain (..), doCompile ) import Agda.Compiler.JS.Syntax ( Exp(Self,Local,Global,Undefined,String,Char,Integer,Double,Lambda,Object,Apply,Lookup),@@ -76,28 +78,11 @@ -------------------------------------------------- compilerMain :: Interface -> TCM ()-compilerMain mainI =- -- Preserve the state (the compiler modifies the state).- localTCState $ do-- -- Compute the output directory.- opts <- commandLineOptions- compileDir <- case optCompileDir opts of- Just dir -> return dir- Nothing -> do- -- The default output directory is the project root.- let tm = toTopLevelModuleName $ iModuleName mainI- f <- findFile tm- return $ filePath $ projectRoot f tm- setCommandLineOptions $- opts { optCompileDir = Just compileDir }-- ignoreAbstractMode $ do- mapM_ (compile . miInterface) =<< (elems <$> getVisitedModules)+compilerMain mainI = inCompilerEnv mainI $ do+ doCompile IsMain mainI $ \_ -> compile compile :: Interface -> TCM () compile i = do- setInterface i ifM uptodate noComp $ do yesComp writeModule =<< curModule@@ -303,8 +288,9 @@ clause :: Clause -> TCM Case clause c = do- ps <- mapM (pattern . unArg) (clausePats c)- (av,bv,es) <- return (mapping (map unArg (clausePats c)))+ let pats = unnumberPatVars $ clausePats c+ ps <- mapM (pattern . unArg) pats+ (av,bv,es) <- return (mapping (map unArg pats)) e <- body (clauseBody c) return (Case ps (subst av es e)) @@ -417,7 +403,6 @@ (Sort _) -> return (String "*") (MetaV _ _) -> return (Undefined) (DontCare _) -> return (Undefined)- ExtLam{} -> __IMPOSSIBLE__ -- Check to see if a type is a singleton, and if so, return its only -- member. Singleton types are of the form T1 -> ... -> Tn -> T where@@ -454,11 +439,12 @@ return (foldl Lookup e ls) literal :: Literal -> Exp-literal (LitInt _ x) = Integer x+literal (LitNat _ x) = Integer x literal (LitFloat _ x) = Double x literal (LitString _ x) = String x literal (LitChar _ x) = Char x literal (LitQName _ x) = String (show x)+literal LitMeta{} = __IMPOSSIBLE__ dummyLambda :: Int -> Exp -> Exp dummyLambda n = iterate' n (Lambda 0)
src/full/Agda/Compiler/JS/Parser.hs view
@@ -12,7 +12,7 @@ import Data.Map ( Map, fromList, union, empty ) import qualified Data.Map as M -import Agda.Utils.ReadP+import Agda.Utils.Parser.ReadP ( ReadP, (+++), (<++), between, char, choice, look, many, munch, munch1, parse', pfail, satisfy, sepBy, string, skipSpaces )
src/full/Agda/Compiler/MAlonzo/Compiler.hs view
@@ -6,7 +6,7 @@ module Agda.Compiler.MAlonzo.Compiler where #if __GLASGOW_HASKELL__ <= 708-import Prelude hiding (mapM_, mapM, sequence, concat)+import Prelude hiding (foldl, mapM_, mapM, sequence, concat) #endif import Control.Applicative@@ -14,7 +14,8 @@ import Control.Monad.State hiding (mapM_, forM_, mapM, forM, sequence) import Data.Generics.Geniplate-import Data.Foldable+import Data.Foldable hiding (any, foldr, sequence_)+import Data.Function import qualified Data.List as List import Data.Map (Map) import qualified Data.Map as Map@@ -32,9 +33,12 @@ import System.FilePath hiding (normalise) import Agda.Compiler.CallCompiler+import Agda.Compiler.Common import Agda.Compiler.MAlonzo.Misc import Agda.Compiler.MAlonzo.Pretty import Agda.Compiler.MAlonzo.Primitives+import Agda.Compiler.ToTreeless+import Agda.Compiler.Treeless.Unused import Agda.Interaction.FindFile import Agda.Interaction.Imports@@ -44,6 +48,8 @@ import qualified Agda.Syntax.Abstract.Name as A import qualified Agda.Syntax.Concrete.Name as C import Agda.Syntax.Internal as I+import Agda.Syntax.Internal.Names (namesIn)+import qualified Agda.Syntax.Treeless as T import Agda.Syntax.Literal import Agda.TypeChecking.Monad@@ -60,6 +66,7 @@ import Agda.Utils.FileName import Agda.Utils.Functor+import Agda.Utils.IO.Directory import Agda.Utils.Lens import Agda.Utils.List import Agda.Utils.Maybe@@ -70,41 +77,26 @@ import Agda.Utils.Singleton import Agda.Utils.Tuple +import Paths_Agda+ #include "undefined.h" import Agda.Utils.Impossible -compilerMain :: Bool -> Interface -> TCM ()-compilerMain modIsMain mainI =- -- Preserve the state (the compiler modifies the state).- -- Andreas, 2014-03-23 But we might want to collect Benchmark info,- -- so use localTCState.- localTCState $ do-- -- Compute the output directory.- opts <- commandLineOptions- compileDir <- case optCompileDir opts of- Just dir -> return dir- Nothing -> do- -- The default output directory is the project root.- let tm = toTopLevelModuleName $ iModuleName mainI- f <- findFile tm- return $ filePath $ C.projectRoot f tm- setCommandLineOptions $- opts { optCompileDir = Just compileDir }-- ignoreAbstractMode $ do- mapM_ (compile . miInterface) =<< (Map.elems <$> getVisitedModules)- writeModule rteModule- callGHC modIsMain mainI+compilerMain :: IsMain -> Interface -> TCM ()+compilerMain isMain i =+ inCompilerEnv i $ do+ doCompile isMain i $+ \_ -> compile+ copyRTEModules+ callGHC isMain i compile :: Interface -> TCM () compile i = do- setInterface i ifM uptodate noComp $ {- else -} do yesComp writeModule =<< decl <$> curHsMod <*> (definitions =<< curDefs) <*> imports where- decl mn ds imp = HS.Module dummy mn [] Nothing Nothing imp ds+ decl mn ds imp = HS.Module dummy mn [] Nothing Nothing imp (map fakeDecl (reverse $ iHaskellCode i) ++ ds) uptodate = liftIO =<< (isNewerThan <$> outFile_ <*> ifile) ifile = maybe __IMPOSSIBLE__ filePath <$> (findInterfaceFile . toTopLevelModuleName =<< curMName)@@ -121,10 +113,18 @@ imports :: TCM [HS.ImportDecl] imports = (++) <$> hsImps <*> imps where hsImps :: TCM [HS.ImportDecl]- hsImps = (List.map decl . Set.toList .+ hsImps = ((unqualRTE :) . List.map decl . Set.toList . Set.insert mazRTE . Set.map HS.ModuleName) <$> getHaskellImports + unqualRTE :: HS.ImportDecl+ unqualRTE = HS.ImportDecl dummy mazRTE False False False Nothing Nothing $ Just $+#if MIN_VERSION_haskell_src_exts(1,17,0)+ (False, [HS.IVar $ HS.Ident x | x <- [mazCoerceName, mazErasedName]])+#else+ (False, [HS.IVar HS.NoNamespace $ HS.Ident x | x <- [mazCoerceName, mazErasedName]])+#endif+ imps :: TCM [HS.ImportDecl] imps = List.map decl . uniq <$> ((++) <$> importsForPrim <*> (List.map mazMod <$> mnames))@@ -146,8 +146,11 @@ definitions :: Definitions -> TCM [HS.Decl] definitions defs = do kit <- coinductionKit- HMap.foldr (liftM2 (++) . (definition kit <=< instantiateFull))- declsForPrim defs+ concat <$>+ (mapM (\(_, d) -> definition kit =<< instantiateFull d) $+ -- sort defs to ensure consistent order (see Issue 1900)+ sortDefs defs+ ) -- | Note that the INFINITY, SHARP and FLAT builtins are translated as -- follows (if a 'CoinductionKit' is given):@@ -179,10 +182,13 @@ , nest 2 $ text (show d) ] checkTypeOfMain q ty $ do- (infodecl q :) <$> case d of+ infodecl q <$> case d of - _ | Just (HsDefn ty hs) <- compiledHaskell compiled ->- return $ fbWithType ty (fakeExp hs)+ _ | Just (HsDefn hsty hs) <- compiledHaskell compiled -> do+ -- Make sure we have imports for all names mentioned in the type.+ ty <- normalise ty+ sequence_ [ xqual x (HS.Ident "_") | x <- Set.toList (namesIn ty) ]+ return $ fbWithType hsty (fakeExp hs) -- Special treatment of coinductive builtins. Datatype{} | Just q == (nameOfInf <$> kit) -> do@@ -225,21 +231,17 @@ ] Axiom{} -> return $ fb axiomErr- Primitive{ primClauses = [], primName = s } -> fb <$> primBody s- Primitive{ primClauses = cls } -> function Nothing $- functionFromClauses cls+ Primitive{ primName = s } -> fb <$> primBody s - -- Currently, catchAllBranches cannot be handled properly by casetree- Function{ funCompiled = Just cc } | not (hasCatchAll cc) ->- function (exportHaskell compiled) $ functionFromCaseTree q cc- Function{ funClauses = cls } ->- function (exportHaskell compiled) $ functionFromClauses cls+ Function{} -> function (exportHaskell compiled) $ functionViaTreeless q Datatype{ dataPars = np, dataIxs = ni, dataClause = cl, dataCons = cs } | Just (HsType ty) <- compiledHaskell compiled -> do- ccs <- List.concat <$> mapM checkConstructorType cs- cov <- checkCover q ty np cs- return $ tvaldecl q (dataInduction d) 0 (np + ni) [] (Just __IMPOSSIBLE__) ++ ccs ++ cov+ ccscov <- ifM (noCheckCover q) (return []) $ do+ ccs <- List.concat <$> mapM checkConstructorType cs+ cov <- checkCover q ty np cs+ return $ ccs ++ cov+ return $ tvaldecl q (dataInduction d) 0 (np + ni) [] (Just __IMPOSSIBLE__) ++ ccscov Datatype{ dataPars = np, dataIxs = ni, dataClause = cl, dataCons = cs } -> do (ars, cds) <- unzip <$> mapM condecl cs return $ tvaldecl q (dataInduction d) (List.maximum (np:ars) - np) (np + ni) cds cl@@ -264,22 +266,39 @@ tsig = HS.TypeSig dummy [HS.Ident name] (fakeType t) def :: HS.Decl- def = HS.FunBind [HS.Match dummy (HS.Ident name) [] Nothing (HS.UnGuardedRhs (hsVarUQ $ dsubname q 0)) emptyBinds]+ def = HS.FunBind [HS.Match dummy (HS.Ident name) [] Nothing (HS.UnGuardedRhs (hsVarUQ $ dname q)) emptyBinds] return ([tsig,def] ++ ccls) - functionFromClauses :: [Clause] -> TCM [HS.Decl]- functionFromClauses cls = mapM (clause q Nothing) (tag 0 cls)+ functionViaTreeless :: QName -> TCM [HS.Decl]+ functionViaTreeless q = caseMaybeM (toTreeless q) (pure []) $ \ treeless -> do - functionFromCaseTree :: QName -> CompiledClauses -> TCM [HS.Decl]- functionFromCaseTree q cc = do- e <- casetree cc `runReaderT` initCCEnv (Just q)- return $ [HS.FunBind [HS.Match dummy (dsubname q 0) [] Nothing (HS.UnGuardedRhs e) emptyBinds]]+ used <- getCompiledArgUse q+ let dostrip = any not used - tag :: Nat -> [Clause] -> [(Nat, Bool, Clause)]- tag _ [] = []- tag i [cl] = (i, True , cl) : []- tag i (cl:cls) = (i, False, cl) : tag (i + 1) cls+ e <- if dostrip then closedTerm (stripUnusedArguments used treeless)+ else closedTerm treeless+ let (ps, b) = lamView e+ lamView e =+ case stripTopCoerce e of+ HS.Lambda _ ps b -> (ps, b)+ b -> ([], b)+ stripTopCoerce (HS.Lambda i ps b) = HS.Lambda i ps $ stripTopCoerce b+ stripTopCoerce e =+ case hsAppView e of+ [c, e] | c == mazCoerce -> e+ _ -> e + funbind f ps b = HS.FunBind [HS.Match dummy f ps Nothing (HS.UnGuardedRhs b) emptyBinds]++ -- The definition of the non-stripped function+ (ps0, _) <- lamView <$> closedTerm (foldr ($) T.TErased $ replicate (length used) T.TLam)+ let b0 = foldl HS.App (hsVarUQ $ duname q) [ hsVarUQ x | (~(HS.PVar x), True) <- zip ps0 used ]++ return $ if dostrip+ then [ funbind (dname q) ps0 b0+ , funbind (duname q) ps b ]+ else [ funbind (dname q) ps b ]+ mkwhere :: [HS.Decl] -> [HS.Decl] mkwhere (HS.FunBind [m0, HS.Match _ dn ps mt rhs emptyBinds] : fbs@(_:_)) =@@ -308,11 +327,8 @@ -- | Environment for naming of local variables. -- Invariant: @reverse ccCxt ++ ccNameSupply@ data CCEnv = CCEnv- { ccFunName :: Maybe QName -- ^ Agda function we are currently compiling.- , ccNameSupply :: NameSupply -- ^ Supply of fresh names+ { ccNameSupply :: NameSupply -- ^ Supply of fresh names , ccCxt :: CCContext -- ^ Names currently in scope- , ccCatchAll :: Maybe CompiledClauses -- ^ Naive catch-all implementation.- -- If an inner case has no catch-all clause, we use the one from its parent. } type NameSupply = [HS.Name]@@ -325,149 +341,28 @@ mapContext f e = e { ccCxt = f (ccCxt e) } -- | Initial environment for expression generation.-initCCEnv :: Maybe QName -> CCEnv-initCCEnv q = CCEnv- { ccFunName = q- , ccNameSupply = map (ihname "v") [0..] -- DON'T CHANGE THESE NAMES!+initCCEnv :: CCEnv+initCCEnv = CCEnv+ { ccNameSupply = map (ihname "v") [0..] -- DON'T CHANGE THESE NAMES! , ccCxt = []- , ccCatchAll = Nothing } -- | Term variables are de Bruijn indices. lookupIndex :: Int -> CCContext -> HS.Name lookupIndex i xs = fromMaybe __IMPOSSIBLE__ $ xs !!! i --- | Case variables are de Bruijn levels.-lookupLevel :: Int -> CCContext -> HS.Name-lookupLevel l xs = fromMaybe __IMPOSSIBLE__ $ xs !!! (length xs - 1 - l)- type CC = ReaderT CCEnv TCM --- | Compile a case tree into nested case and record expressions.-casetree :: CompiledClauses -> CC HS.Exp-casetree cc = do- case cc of- Fail -> return $ rtmError $ "Impossible Clause Body"- Done xs v -> lambdasUpTo (length xs) $ hsCast <$> term v- Case n (Branches True conBrs _ _) -> lambdasUpTo n $ do- mkRecord =<< mapM casetree (content <$> conBrs)- Case n (Branches False conBrs litBrs catchAll) -> lambdasUpTo (n + 1) $ do- x <- lookupLevel n <$> asks ccCxt- HS.Case (hsCast $ hsVarUQ x) <$> do- updateCatchAll catchAll $ do- br1 <- conAlts n conBrs- br2 <- litAlts litBrs- br3 <- catchAllAlts =<< asks ccCatchAll- return (br1 ++ br2 ++ br3)---- | Replace the current catch-all clause with a new one, if given.-updateCatchAll :: Maybe CompiledClauses -> CC a -> CC a-updateCatchAll Nothing = id-updateCatchAll (Just cc) = local $ \ e -> e { ccCatchAll = Just cc }---- -- | Replace de Bruijn index by term in catch-all tree.--- substCatchAll :: Int -> I.Term -> CC a -> CC a--- substCatchAll i t = local $ \ e -> e { ccCatchAll = subst i t $ ccCatchAll e }--conAlts :: Int -> Map QName (WithArity CompiledClauses) -> CC [HS.Alt]-conAlts x br = forM (Map.toList br) $ \ (c, WithArity n cc) -> do- c <- lift $ conhqn c- -- TODO: substitute in ccCatchAll somehow- replaceVar x n $ \ xs -> do- branch (HS.PApp c $ map HS.PVar xs) cc--litAlts :: Map Literal CompiledClauses -> CC [HS.Alt]-litAlts br = forM (Map.toList br) $ \ (l, cc) ->- -- TODO: substitute in ccCatchAll somehow- branch (HS.PLit HS.Signless $ hslit l) cc--catchAllAlts :: Maybe CompiledClauses -> CC [HS.Alt]-catchAllAlts (Just cc) = mapM (branch HS.PWildCard) [cc]-catchAllAlts Nothing = do- q <- fromMaybe __IMPOSSIBLE__ <$> asks ccFunName- return [ HS.Alt dummy HS.PWildCard (HS.UnGuardedRhs $ rtmIncompleteMatch q) emptyBinds ]--branch :: HS.Pat -> CompiledClauses -> CC HS.Alt-branch pat cc = do- e <- casetree cc- return $ HS.Alt dummy pat (HS.UnGuardedRhs e) emptyBinds---- | Replace de Bruijn Level @x@ by @n@ new variables.-replaceVar :: Int -> Int -> ([HS.Name] -> CC a) -> CC a-replaceVar x n cont = do+freshNames :: Int -> ([HS.Name] -> CC a) -> CC a+freshNames n _ | n < 0 = __IMPOSSIBLE__+freshNames n cont = do (xs, rest) <- splitAt n <$> asks ccNameSupply- let upd cxt = ys ++ reverse xs ++ zs -- We reverse xs to get nicer names.- where- -- compute the de Bruijn index- i = length cxt - 1 - x- -- discard index i- (ys, _:zs) = splitAt i cxt- local (mapNameSupply (const rest) . mapContext upd) $- cont xs---- | Precondition: Map not empty.-mkRecord :: Map QName HS.Exp -> CC HS.Exp-mkRecord fs = lift $ do- -- Get the name of the first field- let p1 = fst $ fromMaybe __IMPOSSIBLE__ $ headMaybe $ Map.toList fs- -- Use the field name to get the record constructor and the field names.- ConHead c _ind xs <- recConFromProj p1- -- Convert the constructor to a Haskell name- c <- conhqn c- let (args :: [HS.Exp]) = for xs $ \ x -> fromMaybe __IMPOSSIBLE__ $ Map.lookup x fs- return $ hsCast $ List.foldl HS.App (HS.Con c) args---- -- | Precondition: Map not empty.--- MAlonzo does not translate field names in data decls.--- mkRecord :: Map QName HS.Exp -> CC HS.Exp--- mkRecord fs = lift $ do--- -- Get the list of (field name, expression pairs)--- let l = Map.toList fs--- -- Get the name of the first field--- let p1 = fst $ fromMaybe __IMPOSSIBLE__ $ headMaybe l--- -- Use the field name to get the record constructor--- c <- I.conName <$> recConFromProj p1--- -- Convert it to a Haskell name--- c <- conhqn c--- -- Convert the field names into Haskell names--- fs <- mapM (mapFstM (xhqn "d")) l--- return $ hsCast $ HS.RecConstr c $ map (uncurry HS.FieldUpdate) fs--recConFromProj :: QName -> TCM I.ConHead-recConFromProj q = do- caseMaybeM (isProjection q) __IMPOSSIBLE__ $ \ proj -> do- let d = projFromType proj- getRecordConstructor d---- | Introduce lambdas such that @n@ variables are in scope.-lambdasUpTo :: Int -> CC HS.Exp -> CC HS.Exp-lambdasUpTo n cont = do- diff <- (n -) . length <$> asks ccCxt- lambdas diff cont---- | Introduce n lambdas.-lambdas :: Int -> CC HS.Exp -> CC HS.Exp-lambdas diff cont = intros diff $ \ xs -> mkLams xs <$> cont---- -- | Introduce variables such that @n@ are in scope.--- introsUpTo :: Int -> ([HS.Name] -> CC HS.Exp) -> CC HS.Exp--- introsUpTo n cont = do--- diff <- (n -) . length <$> asks ccCxt--- intros diff cont+ local (mapNameSupply (const rest)) $ cont xs -- | Introduce n variables into the context.-intros :: Int -> ([HS.Name] -> CC HS.Exp) -> CC HS.Exp-intros diff cont = do- if diff <= 0 then cont [] else do- -- Need diff lambdas to continue.- (xs, rest) <- splitAt diff <$> asks ccNameSupply- local (mapNameSupply (const rest) . mapContext (reverse xs ++)) $- cont xs---- | Prefix a Haskell expression with lambda abstractions.-mkLams :: [HS.Name] -> HS.Exp -> HS.Exp-mkLams [] e = e-mkLams xs e = HS.Lambda dummy (map HS.PVar xs) e+intros :: Int -> ([HS.Name] -> CC a) -> CC a+intros n cont = freshNames n $ \xs ->+ local (mapContext (reverse xs ++)) $ cont xs checkConstructorType :: QName -> TCM [HS.Decl] checkConstructorType q = do@@ -496,164 +391,137 @@ Nothing (HS.UnGuardedRhs rhs) emptyBinds] ] --- | Move somewhere else!-conArityAndPars :: QName -> TCM (Nat, Nat)-conArityAndPars q = do- def <- getConstInfo q- TelV tel _ <- telView $ defType def- let Constructor{ conPars = np } = theDef def- n = length (telToList tel)- return (n - np, np)--clause :: QName -> Maybe String -> (Nat, Bool, Clause) -> TCM HS.Decl-clause q maybeName (i, isLast, Clause{ namedClausePats = ps, clauseBody = b }) =- HS.FunBind . (: cont) <$> main where- main = match <$> argpatts ps (bvars b (0::Nat)) <*> clausebody b- cont | isLast && List.any isCon ps = [match (List.map HS.PVar cvs) failrhs]- | isLast = []- | otherwise = [match (List.map HS.PVar cvs) crhs]- cvs = List.map (ihname "v") [0 .. length ps - 1]- crhs = hsCast$ List.foldl HS.App (hsVarUQ $ dsubname q (i + 1)) (List.map hsVarUQ cvs)- failrhs = rtmIncompleteMatch q -- Andreas, 2011-11-16 call to RTE instead of inlined error--- failrhs = rtmError $ "incomplete pattern matching: " ++ show q- match hps rhs = HS.Match dummy (maybe (dsubname q i) HS.Ident maybeName) hps Nothing- (HS.UnGuardedRhs rhs) emptyBinds- bvars (Body _) _ = []- bvars (Bind (Abs _ b')) n = HS.PVar (ihname "v" n) : bvars b' (n + 1)- bvars (Bind (NoAbs _ b)) n = HS.PWildCard : bvars b n- bvars NoBody _ = repeat HS.PWildCard -- ?-- isCon (Arg _ (Named _ ConP{})) = True- isCon _ = False---- argpatts aps xs = hps--- xs is alist of haskell *variables* in form of patterns (because of wildcard)-argpatts :: [I.NamedArg Pattern] -> [HS.Pat] -> TCM [HS.Pat]-argpatts ps0 bvs = evalStateT (List.concat <$> mapM pat' ps0) bvs- where- pat :: Pattern -> StateT [HS.Pat] TCM [HS.Pat]- pat (ProjP p ) = do- kit <- lift coinductionKit- -- Sharps and flats are erased from compiled code- if Just p == fmap nameOfFlat kit then return [] else- lift $ typeError $ NotImplemented $ "Compilation of copatterns"- pat (VarP _ ) = do v <- gets head; modify tail; return [v]- pat (DotP _ ) = pat (VarP dummy) -- WHY NOT: return HS.PWildCard -- SEE ABOVE- pat (LitP (LitQName _ x)) = return [ litqnamepat x ]- pat (LitP l ) = return [ HS.PLit HS.Signless $ hslit l ]-- pat p@(ConP c _ ps) = do- -- Note that irr is applied once for every subpattern, so in the- -- worst case it is quadratic in the size of the pattern. I- -- suspect that this will not be a problem in practice, though.- irrefutable <- lift $ irr p- let tilde :: HS.Pat -> HS.Pat- tilde = if tildesEnabled && irrefutable- then HS.PParen . HS.PIrrPat- else id- ((:[]) . tilde . HS.PParen) <$>- (HS.PApp <$> lift (conhqn $ conName c) <*> (List.concat <$> mapM pat' ps))-- {- Andreas, 2013-02-15 this triggers Issue 794,- because it fails to count the variables bound in p,- thus, the following variables bound by patterns do- not correspond to the according rhs-variables.-- -- Andreas, 2010-09-29- -- do not match against irrelevant stuff- pat' a | isIrrelevant a = return $ HS.PWildCard--}- pat' :: I.NamedArg Pattern -> StateT [HS.Pat] TCM [HS.Pat]- pat' a = pat $ namedArg a-- tildesEnabled = False-- -- | Is the pattern irrefutable?- irr :: Pattern -> TCM Bool- irr (ProjP {}) = __IMPOSSIBLE__- irr (VarP {}) = return True- irr (DotP {}) = return True- irr (LitP {}) = return False- irr (ConP c _ ps) =- (&&) <$> singleConstructorType (conName c)- <*> (andM $ List.map irr' ps)-- -- | Irrelevant patterns are naturally irrefutable.- irr' :: I.NamedArg Pattern -> TCM Bool- irr' a | isIrrelevant a = return $ True- irr' a = irr $ namedArg a--clausebody :: ClauseBody -> TCM HS.Exp-clausebody b0 = go 0 b0 where- go n (Body tm ) = hsCast <$> do- runReaderT (intros n $ const $ term tm) (initCCEnv Nothing)- go n (Bind (Abs _ b)) = go (n+1) b- go n (Bind (NoAbs _ b)) = go n b- go n NoBody = return $ rtmError $ "Impossible Clause Body"---closedTerm :: Term -> TCM HS.Exp-closedTerm v = term v `runReaderT` initCCEnv Nothing+closedTerm :: T.TTerm -> TCM HS.Exp+closedTerm v = hsCast <$> term v `runReaderT` initCCEnv -- | Extract Agda term to Haskell expression.--- Irrelevant arguments are extracted as @()@.+-- Erased arguments are extracted as @()@. -- Types are extracted as @()@.--- @DontCare@ outside of irrelevant arguments is extracted as @error@.-term :: Term -> CC HS.Exp-term tm0 = case unSpine $ ignoreSharing tm0 of- Var i es -> do+term :: T.TTerm -> CC HS.Exp+term tm0 = case tm0 of+ T.TVar i -> do x <- lookupIndex i <$> asks ccCxt- apps (hsVarUQ x) $ fromMaybe __IMPOSSIBLE__ $ allApplyElims es- Lam _ at -> lambdas 1 $ term $ absBody at- Lit l -> lift $ literal l- Def q es -> do- let Just as = allApplyElims es- q <- lift $ xhqn "d" q- HS.Var q `apps` as- Con c as -> do- let q = conName c+ return $ hsVarUQ x+ T.TApp (T.TDef f) ts -> do+ used <- lift $ getCompiledArgUse f+ if any not used && length ts >= length used+ then do+ f <- lift $ HS.Var <$> xhqn "du" f -- used stripped function+ f `apps` [ t | (t, True) <- zip ts $ used ++ repeat True ]+ else do+ t' <- term (T.TDef f)+ t' `apps` ts+ T.TApp t ts -> do+ t' <- term t+ t' `apps` ts+ T.TLam at -> do+ (nm:_) <- asks ccNameSupply+ intros 1 $ \ [x] ->+ hsLambda [HS.PVar x] <$> term at+ T.TLet t1 t2 -> do+ t1' <- term t1+ intros 1 $ \[x] -> do+ t2' <- term t2+ return $ hsLet x (hsCast t1') t2'++ T.TCase sc ct def alts -> do+ sc' <- term (T.TVar sc)+ alts' <- traverse (alt sc) alts+ def' <- term def+ let defAlt = HS.Alt dummy HS.PWildCard (HS.UnGuardedRhs def') emptyBinds++ return $ HS.Case (hsCast sc') (alts' ++ [defAlt])++ T.TLit l -> lift $ literal l+ T.TDef q -> do+ HS.Var <$> (lift $ xhqn "d" q)+ T.TCon q -> do kit <- lift coinductionKit if Just q == (nameOfSharp <$> kit)- then (`apps` as) . HS.Var =<< lift (xhqn "d" q)- else (`apps` as) . HS.Con =<< lift (conhqn q)- Level l -> term =<< lift (reallyUnLevelView l)- Pi _ _ -> return HS.unit_con- Sort _ -> return HS.unit_con- MetaV _ _ -> mazerror "hit MetaV"- DontCare _ -> return $ rtmError $ "hit DontCare"- Shared{} -> __IMPOSSIBLE__- ExtLam{} -> __IMPOSSIBLE__- where apps = foldM (\ h a -> HS.App h <$> term' a)+ then HS.Var <$> lift (xhqn "d" q)+ else hsCast' . HS.Con <$> lift (conhqn q)+ T.TPrim p -> return $ compilePrim p+ T.TUnit -> return HS.unit_con+ T.TSort -> return HS.unit_con+ T.TErased -> return $ hsVarUQ $ HS.Ident mazErasedName+ T.TError e -> return $ case e of+ T.TUnreachable -> rtmUnreachableError+ where apps = foldM (\ h a -> HS.App h <$> term a) --- | Irrelevant arguments are replaced by Haskells' ().-term' :: I.Arg Term -> CC HS.Exp-term' a | isIrrelevant a = return HS.unit_con-term' a = term $ unArg a+compilePrim :: T.TPrim -> HS.Exp+compilePrim s =+ case s of+ T.PQuot -> fakeExp "(Prelude.quot :: Integer -> Integer -> Integer)"+ T.PRem -> fakeExp "(Prelude.rem :: Integer -> Integer -> Integer)"+ T.PSub -> fakeExp "((Prelude.-) :: Integer -> Integer -> Integer)"+ T.PAdd -> fakeExp "((Prelude.+) :: Integer -> Integer -> Integer)"+ T.PMul -> fakeExp "((Prelude.*) :: Integer -> Integer -> Integer)"+ T.PGeq -> fakeExp "((Prelude.>=) :: Integer -> Integer -> Bool)"+ T.PLt -> fakeExp "((Prelude.<) :: Integer -> Integer -> Bool)"+ T.PEq -> fakeExp "((Prelude.==) :: Integer -> Integer -> Bool)"+ T.PSeq -> HS.Var (hsName "seq")+ -- primitives only used by GuardsToPrims transformation, which MAlonzo doesn't use+ T.PIf -> __IMPOSSIBLE__ +alt :: Int -> T.TAlt -> CC HS.Alt+alt sc a = do+ case a of+ T.TACon {} -> do+ intros (T.aArity a) $ \xs -> do+ hConNm <- lift $ conhqn $ T.aCon a+ mkAlt (HS.PApp hConNm $ map HS.PVar xs)+ T.TAGuard g b -> do+ g <- term g+ b <- term b+ return $ HS.Alt dummy HS.PWildCard+ (HS.GuardedRhss [HS.GuardedRhs dummy [HS.Qualifier g] b])+ emptyBinds+ T.TALit { T.aLit = (LitQName _ q) } -> mkAlt (litqnamepat q)+ T.TALit { T.aLit = (LitString _ s) , T.aBody = b } -> do+ b <- term b+ sc <- term (T.TVar sc)+ let guard =+ HS.Var (HS.UnQual (HS.Ident "(==)")) `HS.App`+ sc`HS.App`+ litString s+ return $ HS.Alt dummy HS.PWildCard+ (HS.GuardedRhss [HS.GuardedRhs dummy [HS.Qualifier guard] b])+ emptyBinds+ T.TALit {} -> mkAlt (HS.PLit HS.Signless $ hslit $ T.aLit a)+ where+ mkAlt :: HS.Pat -> CC HS.Alt+ mkAlt pat = do+ body' <- term $ T.aBody a+ return $ HS.Alt dummy pat (HS.UnGuardedRhs $ hsCast body') emptyBinds+ literal :: Literal -> TCM HS.Exp literal l = case l of- LitInt _ _ -> do toN <- bltQual "NATURAL" mazIntegerToNat- return $ HS.Var toN `HS.App` typed "Integer"+ LitNat _ _ -> return $ typed "Integer" LitFloat _ _ -> return $ typed "Double" LitQName _ x -> return $ litqname x+ LitString _ s -> return $ litString s _ -> return $ l' where l' = HS.Lit $ hslit l typed = HS.ExpTypeSig dummy l' . HS.TyCon . rtmQual hslit :: Literal -> HS.Literal-hslit l = case l of LitInt _ x -> HS.Int x+hslit l = case l of LitNat _ x -> HS.Int x LitFloat _ x -> HS.Frac (toRational x)- LitString _ x -> HS.String x LitChar _ x -> HS.Char x LitQName _ x -> __IMPOSSIBLE__+ LitString _ _ -> __IMPOSSIBLE__+ LitMeta{} -> __IMPOSSIBLE__ +litString :: String -> HS.Exp+litString s =+ HS.Var (HS.Qual (HS.ModuleName "Data.Text") (HS.Ident "pack")) `HS.App`+ (HS.Lit $ HS.String s)+ litqname :: QName -> HS.Exp litqname x = HS.Con (HS.Qual mazRTE $ HS.Ident "QName") `HS.App`- HS.Lit (HS.Int n) `HS.App`- HS.Lit (HS.Int m) `HS.App`- (rtmError "primQNameType: not implemented") `HS.App`- (rtmError "primQNameDefinition: not implemented") `HS.App`+ hsTypedInt n `HS.App`+ hsTypedInt m `HS.App` HS.Lit (HS.String $ show x ) where NameId n m = nameId $ qnameName x@@ -663,8 +531,6 @@ HS.PApp (HS.Qual mazRTE $ HS.Ident "QName") [ HS.PLit HS.Signless (HS.Int n) , HS.PLit HS.Signless (HS.Int m)- , HS.PWildCard- , HS.PWildCard , HS.PWildCard] where NameId n m = nameId $ qnameName x@@ -700,8 +566,9 @@ (Inductive, [HS.RecDecl _ [_]]) -> HS.NewType _ -> HS.DataType -infodecl :: QName -> HS.Decl-infodecl q = fakeD (unqhname "name" q) $ show $ prettyShow q+infodecl :: QName -> [HS.Decl] -> [HS.Decl]+infodecl _ [] = []+infodecl q ds = fakeD (unqhname "name" q) (show $ prettyShow q) : ds -------------------------------------------------- -- Inserting unsafeCoerce@@ -718,22 +585,50 @@ go e = [e] -} -hsCast e = mazCoerce `HS.App` hsCast' e+-- TODO: what's the specification for hsCast, hsCast' and hsCoerce???+hsCast e = hsCoerce (hsCast' e) hsCast' :: HS.Exp -> HS.Exp-hsCast' (HS.App e1 e2) = hsCast' e1 `HS.App` (hsCoerce $ hsCast' e2)-hsCast' (HS.Lambda _ ps e) = HS.Lambda dummy ps $ hsCast' e-hsCast' e = e+hsCast' (HS.InfixApp e1 op e2) = hsCoerce $ HS.InfixApp (hsCast' e1) op (hsCast' e2)+hsCast' (HS.Lambda _ ps e) = HS.Lambda dummy ps $ hsCast' e+hsCast' (HS.Let bs e) = HS.Let bs $ hsCast' e+hsCast' (HS.Case sc alts) = HS.Case (hsCast' sc) (map (hsMapAlt hsCast') alts)+hsCast' e =+ case hsAppView e of+ f : es -> foldl HS.App (hsCoerce f) (map hsCastApp es)+ _ -> __IMPOSSIBLE__ +-- We still have to coerce function applications in arguments to coerced+-- functions.+hsCastApp :: HS.Exp -> HS.Exp+hsCastApp (HS.Lambda i ps b) = HS.Lambda i ps (hsCastApp b)+hsCastApp (HS.Case sc bs) = HS.Case (hsCastApp sc) (map (hsMapAlt hsCastApp) bs)+hsCastApp (HS.InfixApp e1 op e2) = HS.InfixApp (hsCastApp e1) op (hsCastApp e2)+hsCastApp e =+ case hsAppView e of+ f : es@(_:_) -> foldl HS.App (hsCoerce f) $ map hsCastApp es+ _ -> e+ -- No coercion for literal integers hsCoerce :: HS.Exp -> HS.Exp hsCoerce e@(HS.ExpTypeSig _ (HS.Lit (HS.Int{})) _) = e-hsCoerce e = HS.App mazCoerce e+hsCoerce (HS.Case sc alts) = HS.Case sc (map (hsMapAlt hsCoerce) alts)+hsCoerce (HS.Let bs e) = HS.Let bs $ hsCoerce e+hsCoerce e =+ case hsAppView e of+ c : _ | c == mazCoerce || c == mazIncompleteMatch -> e+ _ -> mazCoerce `HS.App` e -------------------------------------------------- -- Writing out a haskell module -------------------------------------------------- +copyRTEModules :: TCM ()+copyRTEModules = do+ dataDir <- lift getDataDir+ let srcDir = dataDir </> "MAlonzo" </> "src"+ (lift . copyDirContent srcDir) =<< compileDir+ writeModule :: HS.Module -> TCM () writeModule (HS.Module l m ps w ex imp ds) = do -- Note that GHC assumes that sources use ASCII or UTF-8.@@ -749,41 +644,7 @@ , "Rank2Types" ] -rteModule :: HS.Module-rteModule = ok $ parse $ unlines- [ "module " ++ prettyPrint mazRTE ++ " where"- , "import Unsafe.Coerce"- , ""- , "-- Special version of coerce that plays well with rules."- , "{-# INLINE [1] mazCoerce #-}"- , "mazCoerce = Unsafe.Coerce.unsafeCoerce"- , "{-# RULES \"coerce-id\" forall (x :: a) . mazCoerce x = x #-}"- , ""- , "-- Builtin QNames, the third field is for the type."- , "data QName a b = QName { nameId, moduleId :: Integer, qnameType :: a, qnameDefinition :: b, qnameString :: String}"- , "instance Eq (QName a b) where"- , " QName a b _ _ _ == QName c d _ _ _ = (a, b) == (c, d)"- , ""- , "mazIncompleteMatch :: String -> a"- , "mazIncompleteMatch s = error (\"MAlonzo Runtime Error: incomplete pattern matching: \" ++ s)"- ]- where- parse :: String -> HS.ParseResult HS.Module- parse = HS.parseModuleWithMode- HS.defaultParseMode- { HS.extensions = [ HS.EnableExtension HS.ExplicitForAll ] } - ok :: HS.ParseResult HS.Module -> HS.Module- ok (HS.ParseOk d) = d- ok HS.ParseFailed{} = __IMPOSSIBLE__--compileDir :: TCM FilePath-compileDir = do- mdir <- optCompileDir <$> commandLineOptions- case mdir of- Just dir -> return dir- Nothing -> __IMPOSSIBLE__- outFile' :: (HS.Pretty a, TransformBi HS.ModuleName (Wrap a)) => a -> TCM (FilePath, FilePath) outFile' m = do@@ -803,7 +664,7 @@ outFile_ :: TCM FilePath outFile_ = outFile =<< curHsMod -callGHC :: Bool -> Interface -> TCM ()+callGHC :: IsMain -> Interface -> TCM () callGHC modIsMain i = do setInterface i mdir <- compileDir@@ -817,11 +678,11 @@ let overridableArgs = [ "-O"] ++- (if modIsMain then ["-o", mdir </> show (nameConcrete outputName)] else []) +++ (if modIsMain == IsMain then ["-o", mdir </> show (nameConcrete outputName)] else []) ++ [ "-Werror"] otherArgs = [ "-i" ++ mdir] ++- (if modIsMain then ["-main-is", hsmod] else []) +++ (if modIsMain == IsMain then ["-main-is", hsmod] else []) ++ [ fp , "--make" , "-fwarn-incomplete-patterns"@@ -833,4 +694,5 @@ -- Note: Some versions of GHC use stderr for progress reports. For -- those versions of GHC we don't print any progress information -- unless an error is encountered.- callCompiler compiler args+ doCall <- optGhcCallGhc <$> commandLineOptions+ callCompiler doCall compiler args
src/full/Agda/Compiler/MAlonzo/Compiler.hs-boot view
@@ -2,7 +2,7 @@ import qualified Language.Haskell.Exts.Syntax as HS -import Agda.Syntax.Internal (Term)+import Agda.Syntax.Treeless (TTerm) import Agda.TypeChecking.Monad (TCM) -closedTerm :: Term -> TCM HS.Exp+closedTerm :: TTerm -> TCM HS.Exp
src/full/Agda/Compiler/MAlonzo/Encode.hs view
@@ -24,7 +24,7 @@ isModChar :: Char -> Bool isModChar c =- isLower c || c == '_' || isUpper c || isDigit c || c == '\''+ isLower c || isUpper c || isDigit c || c == '_' || c == '\'' -- | Haskell module names have to satisfy the Haskell (including the -- hierarchical module namespace extension) lexical syntax:@@ -39,30 +39,47 @@ -- @.@s may be adjacent. encodeModuleName :: HS.ModuleName -> HS.ModuleName-encodeModuleName (HS.ModuleName s) = HS.ModuleName $ case splitUp s of- ps | mazstr' `isPrefixOf` ps ->- concat (mazstr' ++ map encNamePart (drop (length mazstr') ps))- _ -> s+encodeModuleName (HS.ModuleName s) = HS.ModuleName $ case stripPrefix mazstr s of+ Just s' -> mazstr ++ foldr encNamePart "" (splitUp' s')+ Nothing -> s where -- splitUp ".apa.bepa." == [".","apa",".","bepa","."]- splitUp = groupBy ((&&) `on` (/= '.'))+ -- splitUp = groupBy ((&&) `on` (/= '.')) - mazstr' = splitUp mazstr+ -- Since comparison against "." is wasteful, and modules name components are nonempty,+ -- we can use "" as the separator.+ -- Since modules name components are nonempty,+ -- this is more efficient than adding a Maybe wrapper:+ -- We are effectively using ``String = Maybe NEString''.+ --+ -- splitUp' ".apa.bepa." == ["","apa","","bepa",""]+ splitUp' :: String -> [String]+ splitUp' = h+ where+ h [] = []+ h (c : cs) = case c of+ '.' -> "" : h cs+ _ -> g (c :) cs+ g acc [] = [acc []]+ g acc (c : cs) = case c of+ '.' -> acc [] : "" : h cs+ _ -> g (acc . (c :)) cs - encNamePart "." = "."- encNamePart s = ensureFirstCharLarge s ++ concatMap enc s+ encNamePart "" r = '.' : r+ encNamePart s r = ensureFirstCharLarge s $ foldr enc r s - ensureFirstCharLarge s = case s of- c : cs | isUpper c && c /= largeChar -> ""- _ -> [largeChar]+ ensureFirstCharLarge s r = case s of+ c : cs | isUpper c && c /= largeChar -> r+ _ -> largeChar : r largeChar = 'Q' escapeChar = 'Z' isOK c = c /= escapeChar && isModChar c - enc c | isOK c = [c]- | otherwise = [escapeChar] ++ show (fromEnum c) ++ [escapeChar]+ enc c r | isOK c = c : r+ | otherwise = escapeChar : shows (fromEnum c) (escapeChar : r)+ -- Note: This injectivity test is quite weak. A better, dedicated -- generator could strengthen it.
src/full/Agda/Compiler/MAlonzo/Misc.hs view
@@ -2,8 +2,7 @@ module Agda.Compiler.MAlonzo.Misc where -import Control.Monad.State-+import Control.Monad.State (gets) import Data.List as List import Data.Map as Map import Data.Set as Set@@ -11,6 +10,8 @@ import qualified Language.Haskell.Exts.Syntax as HS +import Agda.Compiler.Common+ import Agda.Syntax.Common import Agda.Syntax.Internal @@ -28,39 +29,9 @@ -- Setting up Interface before compile -------------------------------------------------- -setInterface :: Interface -> TCM ()-setInterface i = do- stImportedModules .= Set.empty- stCurrentModule .= Just (iModuleName i)--curIF :: TCM Interface-curIF = do- mName <- use stCurrentModule- case mName of- Nothing -> __IMPOSSIBLE__- Just name -> do- mm <- getVisitedModule (toTopLevelModuleName name)- case mm of- Nothing -> __IMPOSSIBLE__- Just mi -> return $ miInterface mi--curSig :: TCM Signature-curSig = iSignature <$> curIF--curMName :: TCM ModuleName-curMName = sigMName <$> curSig- curHsMod :: TCM HS.ModuleName curHsMod = mazMod <$> curMName -curDefs :: TCM Definitions-curDefs = (^. sigDefinitions) <$> curSig--sigMName :: Signature -> ModuleName-sigMName sig = case Map.keys (sig ^. sigSections) of- [] -> __IMPOSSIBLE__- m : _ -> m- -------------------------------------------------- -- utilities for haskell names --------------------------------------------------@@ -88,34 +59,13 @@ -- the toplevel module containing the given one tlmodOf :: ModuleName -> TCM HS.ModuleName-tlmodOf = fmap mazMod . tlmname+tlmodOf = fmap mazMod . topLevelModuleName -tlmname :: ModuleName -> TCM ModuleName-tlmname m = do- -- get the names of the visited modules- visited <- List.map (iModuleName . miInterface) . Map.elems <$>- getVisitedModules- -- find the module with the longest matching prefix to m- let ms = sortBy (compare `on` (length . mnameToList)) $- List.filter (\ m' -> mnameToList m' `isPrefixOf` mnameToList m) visited- case ms of- (m' : _) -> return m'- -- if we did not get anything, it may be because m is a section- -- (a module _ )- [] -> curMName-{- NOT IMPOSSIBLE!- _ -> do- reportSDoc "impossible" 10 $ sep- [ text $ "m = " ++ show m- , text $ "should be contained in the visited modules " ++ show visited- ]- __IMPOSSIBLE__--} -- qualify HS.Name n by the module of QName q, if necessary; -- accumulates the used module in stImportedModules at the same time. xqual :: QName -> HS.Name -> TCM HS.QName-xqual q n = do m1 <- tlmname (qnameModule q)+xqual q n = do m1 <- topLevelModuleName (qnameModule q) m2 <- curMName if m1 == m2 then return (HS.UnQual n) else addImport m1 >> return (HS.Qual (mazMod m1) n)@@ -123,13 +73,16 @@ xhqn :: String -> QName -> TCM HS.QName xhqn s q = xqual q (unqhname s q) +hsName :: String -> HS.QName+hsName s = HS.UnQual (HS.Ident s)+ -- always use the original name for a constructor even when it's redefined. conhqn :: QName -> TCM HS.QName conhqn q = do cq <- canonicalName q def <- getConstInfo cq case (compiledHaskell (defCompiledRep def), theDef def) of- (Just (HsDefn _ hs), Constructor{}) -> return $ HS.UnQual $ HS.Ident hs+ (Just (HsDefn _ hs), Constructor{}) -> return $ hsName hs _ -> xhqn "C" cq -- qualify name s by the module of builtin b@@ -138,14 +91,58 @@ Def q _ <- ignoreSharing <$> getBuiltin b xqual q (HS.Ident s) --- Sub-naming for cascaded definitions for consecutive clauses.-dsubname :: QName -> Nat -> HS.Name-dsubname q i | i == 0 = unqhname "d" q- | otherwise = unqhname ("d_" ++ show i ++ "_") q+dname :: QName -> HS.Name+dname q = unqhname "d" q +-- | Name for definition stripped of unused arguments+duname :: QName -> HS.Name+duname q = unqhname "du" q++hsPrimOp :: String -> HS.QOp+hsPrimOp s = HS.QVarOp $ HS.UnQual $ HS.Symbol s++hsPrimOpApp :: String -> HS.Exp -> HS.Exp -> HS.Exp+hsPrimOpApp op e e1 = HS.InfixApp e (hsPrimOp op) e1++hsInt :: Integer -> HS.Exp+hsInt n = HS.Lit (HS.Int n)++hsTypedInt :: Integer -> HS.Exp+hsTypedInt n = HS.ExpTypeSig dummy (HS.Lit (HS.Int n)) (HS.TyCon (hsName "Integer"))++hspLet :: HS.Pat -> HS.Exp -> HS.Exp -> HS.Exp+hspLet p e b =+ HS.Let (HS.BDecls [HS.PatBind dummy p (HS.UnGuardedRhs e) emptyBinds]) b++hsLet :: HS.Name -> HS.Exp -> HS.Exp -> HS.Exp+hsLet x e b =+ HS.Let (HS.BDecls [HS.FunBind [HS.Match dummy x [] Nothing (HS.UnGuardedRhs e) emptyBinds]]) b+ hsVarUQ :: HS.Name -> HS.Exp hsVarUQ = HS.Var . HS.UnQual +hsAppView :: HS.Exp -> [HS.Exp]+hsAppView = reverse . view+ where+ view (HS.App e e1) = e1 : view e+ view (HS.InfixApp e1 op e2) = [e2, e1, hsOpToExp op]+ view e = [e]++hsOpToExp :: HS.QOp -> HS.Exp+hsOpToExp (HS.QVarOp x) = HS.Var x+hsOpToExp (HS.QConOp x) = HS.Con x++hsLambda :: [HS.Pat] -> HS.Exp -> HS.Exp+hsLambda ps (HS.Lambda i ps1 e) = HS.Lambda i (ps ++ ps1) e+hsLambda ps e = HS.Lambda dummy ps e++hsMapAlt :: (HS.Exp -> HS.Exp) -> HS.Alt -> HS.Alt+hsMapAlt f (HS.Alt i p rhs wh) = HS.Alt i p (hsMapRHS f rhs) wh++hsMapRHS :: (HS.Exp -> HS.Exp) -> HS.Rhs -> HS.Rhs+hsMapRHS f (HS.UnGuardedRhs def) = HS.UnGuardedRhs (f def)+hsMapRHS f (HS.GuardedRhss es) = HS.GuardedRhss [ HS.GuardedRhs i g (f e) | HS.GuardedRhs i g e <- es ]+ -------------------------------------------------- -- Hard coded module names --------------------------------------------------@@ -165,9 +162,16 @@ mazerror :: String -> a mazerror msg = error $ mazstr ++ ": " ++ msg +mazCoerceName :: String+mazCoerceName = "coe"++mazErasedName :: String+mazErasedName = "erased"+ mazCoerce :: HS.Exp -- mazCoerce = HS.Var $ HS.Qual unsafeCoerceMod (HS.Ident "unsafeCoerce")-mazCoerce = HS.Var $ HS.Qual mazRTE $ HS.Ident "mazCoerce"+-- mazCoerce = HS.Var $ HS.Qual mazRTE $ HS.Ident mazCoerceName+mazCoerce = HS.Var $ HS.UnQual $ HS.Ident mazCoerceName -- Andreas, 2011-11-16: error incomplete match now RTE-call mazIncompleteMatch :: HS.Exp@@ -176,13 +180,15 @@ rtmIncompleteMatch :: QName -> HS.Exp rtmIncompleteMatch q = mazIncompleteMatch `HS.App` hsVarUQ (unqhname "name" q) +mazUnreachableError :: HS.Exp+mazUnreachableError = HS.Var $ HS.Qual mazRTE $ HS.Ident "mazUnreachableError"++rtmUnreachableError :: HS.Exp+rtmUnreachableError = mazUnreachableError+ mazRTE :: HS.ModuleName mazRTE = HS.ModuleName "MAlonzo.RTE" --- for Runtime module: Not really used (Runtime modules has been abolished).-rtmMod :: HS.ModuleName-rtmMod = mazMod' "Runtime"- rtmQual :: String -> HS.QName rtmQual = HS.UnQual . HS.Ident @@ -217,6 +223,9 @@ fakeExp :: String -> HS.Exp fakeExp = HS.Var . HS.UnQual . HS.Ident++fakeDecl :: String -> HS.Decl+fakeDecl s = HS.TypeSig dummy [HS.Ident (s ++ " {- OMG hack")] (HS.TyVar $ HS.Ident "-}") dummy :: a dummy = error "MAlonzo : this dummy value should not have been eval'ed."
src/full/Agda/Compiler/MAlonzo/Primitives.hs view
@@ -2,13 +2,14 @@ module Agda.Compiler.MAlonzo.Primitives where -import Control.Monad.Reader import Control.Monad.State import Data.Char import Data.List as L import Data.Map as M import qualified Language.Haskell.Exts.Syntax as HS +import Agda.Compiler.Common+import Agda.Compiler.ToTreeless import {-# SOURCE #-} Agda.Compiler.MAlonzo.Compiler (closedTerm) import Agda.Compiler.MAlonzo.Misc import Agda.Compiler.MAlonzo.Pretty@@ -16,9 +17,11 @@ import Agda.Syntax.Internal import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Primitive import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty import Agda.Utils.Monad+import Agda.Utils.Except import qualified Agda.Utils.HashMap as HMap #include "undefined.h"@@ -63,6 +66,7 @@ -- Haskell modules to be imported for BUILT-INs importsForPrim :: TCM [HS.ModuleName] importsForPrim =+ fmap (++ [HS.ModuleName "Data.Text"]) $ xForPrim $ L.map (\(s, ms) -> (s, return (L.map HS.ModuleName ms))) $ [ "CHAR" |-> ["Data.Char"]@@ -80,73 +84,6 @@ ] where (|->) = (,) --- Declarations of helper functions for BUILT-INs-declsForPrim :: TCM [HS.Decl]-declsForPrim = xForPrim $- [ "NATURAL" |-> (++) <$> natToFrom "Integer" mazNatToInteger mazIntegerToNat- <*> natToFrom "Int" mazNatToInt mazIntToNat- , "LIST" |-> forList mazListToHList mazHListToList- , "STRING" |-> forList mazListToString mazStringToList- , "BOOL" |-> decls ["TRUE", "FALSE"]- mazBoolToHBool "let { f <<0>> = True; f <<1>> = False; } in f"- mazHBoolToBool "let { f True = <<0>>; f False = <<1>>; } in f"- , "CHAR" |-> return- [ fakeDS mazCharToInteger- "(fromIntegral . Data.Char.ord :: Char -> Integer)"- ]- ]- where- infix 1 |->- (|->) = (,)- forList toH toA = decls ["NIL", "CONS"]- toH (concat- ["let { f <<0>> = [];"- ," f (<<1>> x xs) = x : f (" ++ prettyPrint mazCoerce ++ " xs)"- ,"} in f"])- toA (concat- ["let { f [] = <<0>>;"- ," f (c:cs) = <<1>> c (" ++ prettyPrint mazCoerce ++ " (f cs));"- ,"} in f"])- natToFrom hty to from = let- totxt = repl ["<<0>>", "<<1>>", hty, to] $ concat- [ "\\ x -> case x of { <<0>> -> 0 :: <<2>>; "- , "<<1>> x -> 1 + (<<3>> (" ++ prettyPrint mazCoerce ++ " x)) }" ]- fromtxt = repl ["<<0>>", "<<1>>", hty, from] $ concat- [ "\\ x -> if x <= (0 :: <<2>>) then <<0>> "- , "else <<1>> (" ++ prettyPrint mazCoerce ++ " (<<3>> (x - 1)))" ]- in do- ds <- decls ["ZERO", "SUC"] to totxt from fromtxt- let rule name = HS.Rule name HS.AlwaysActive (Just [HS.RuleVar $ HS.Ident "x"])- qname = HS.UnQual . HS.Ident- var = HS.Var . qname- (%) = HS.App- return $ [HS.RulePragmaDecl dummy- [ rule (to ++ "-" ++ from) (var to % (var from % var "x")) (var "x")- , rule (from ++ "-" ++ to) (var from % (var to % var "x")) (var "x")- ],- HS.InlineSig dummy True (HS.ActiveFrom 2) (qname to),- HS.InlineSig dummy True (HS.ActiveFrom 2) (qname from)- ] ++ ds- decls cs n1 b1 n2 b2 =- do cs' <- mapM pconName cs- return $ zipWith (\ n -> fakeDS n . repl cs') [n1, n2] [b1, b2]--mazNatToInteger, mazIntegerToNat, mazNatToInt, mazIntToNat, mazCharToInteger,- mazListToHList, mazHListToList, mazListToString, mazStringToList,- mazBoolToHBool, mazHBoolToBool :: String--mazNatToInteger = "mazNatToInteger"-mazIntegerToNat = "mazIntegerToNat"-mazNatToInt = "mazNatToInt"-mazIntToNat = "mazIntToNat"-mazCharToInteger = "mazCharToInteger"-mazListToHList = "mazListToHList"-mazHListToList = "mazHListToList"-mazListToString = "mazListToString"-mazStringToList = "mazStringToList"-mazBoolToHBool = "mazBoolToHBool"-mazHBoolToBool = "mazHBoolToBool"- -------------- xForPrim :: [(String, TCM [a])] -> TCM [a]@@ -175,10 +112,9 @@ , "primIntegerMod" |-> binAsis "mod" "Integer" , "primIntegerEquality"|-> rel "(==)" "Integer" , "primIntegerLess" |-> rel "(<)" "Integer"- , "primIntegerAbs" |-> do toN <- bltQual' "NATURAL" mazIntegerToNat- return $ repl [toN] $ "\\ x -> <<0>> (abs x)"- , "primNatToInteger" |-> bltQual' "NATURAL" mazNatToInteger- , "primShowInteger" |-> return "(show :: Integer -> String)"+ , "primIntegerAbs" |-> return "(abs :: Integer -> Integer)"+ , "primNatToInteger" |-> return "(id :: Integer -> Integer)"+ , "primShowInteger" |-> return "(Data.Text.pack . show :: Integer -> Data.Text.Text)" -- Levels , "primLevelZero" |-> return "()"@@ -186,70 +122,76 @@ , "primLevelMax" |-> return "(\\ _ _ -> ())" -- Natural number functions- , "primNatPlus" |-> binNat "(+)"- , "primNatMinus" |-> binNat "(-)"- , "primNatTimes" |-> binNat "(*)"- , "primNatDivSuc" |-> binNat "(\\ x y -> div x (y + 1))"- , "primNatModSuc" |-> binNat "(\\ x y -> mod x (y + 1))"- , "primNatEquality" |-> relNat "(==)"- , "primNatLess" |-> relNat "(<)"+ , "primNatPlus" |-> binNat "(+)"+ , "primNatMinus" |-> binNat "(\\ x y -> max 0 (x - y))"+ , "primNatTimes" |-> binNat "(*)"+ , "primNatDivSucAux" |-> binNat4 "(\\ k m n j -> k + div (max 0 $ n + m - j) (m + 1))"+ , "primNatModSucAux" |-> binNat4 "(\\ k m n j -> if n > j then mod (n - j - 1) (m + 1) else (k + n))"+ , "primNatEquality" |-> relNat "(==)"+ , "primNatLess" |-> relNat "(<)" -- Floating point functions- , "primIntegerToFloat" |-> return "(fromIntegral :: Integer -> Double)"+ , "primNatToFloat" |-> return "(fromIntegral :: Integer -> Double)" , "primFloatPlus" |-> return "((+) :: Double -> Double -> Double)" , "primFloatMinus" |-> return "((-) :: Double -> Double -> Double)" , "primFloatTimes" |-> return "((*) :: Double -> Double -> Double)" , "primFloatDiv" |-> return "((/) :: Double -> Double -> Double)"- , "primFloatEquality" |-> rel "(==)" "Double"- , "primFloatLess" |-> rel "(<)" "Double"+ , "primFloatEquality" |-> return "((\\ x y -> if isNaN x && isNaN y then True else x == y) :: Double -> Double -> Bool)"+ , "primFloatLess" |-> return (unwords+ [ "((\\ x y ->"+ , "let isNegInf z = z < 0 && isInfinite z in"+ , "if isNegInf y then False else"+ , "if isNegInf x then True else"+ , "if isNaN x then True else"+ , "x < y) :: Double -> Double -> Bool)" ])+ , "primFloatSqrt" |-> return "(sqrt :: Double -> Double)" , "primRound" |-> return "(round :: Double -> Integer)" , "primFloor" |-> return "(floor :: Double -> Integer)" , "primCeiling" |-> return "(ceiling :: Double -> Integer)" , "primExp" |-> return "(exp :: Double -> Double)"- , "primLog" |-> return "(log :: Double -> Double)" -- partial+ , "primLog" |-> return "(log :: Double -> Double)" , "primSin" |-> return "(sin :: Double -> Double)"- , "primShowFloat" |-> return "(show :: Double -> String)"- , "primRound" |-> return "(round :: Double -> Integer)"+ , "primShowFloat" |-> return "(Data.Text.pack . (\\ x -> if isNegativeZero x then \"0.0\" else show x) :: Double -> Data.Text.Text)" -- Character functions , "primCharEquality" |-> rel "(==)" "Char"- , "primIsLower" |-> pred "Data.Char.isLower"- , "primIsDigit" |-> pred "Data.Char.isDigit"- , "primIsAlpha" |-> pred "Data.Char.isAlpha"- , "primIsSpace" |-> pred "Data.Char.isSpace"- , "primIsAscii" |-> pred "Data.Char.isAscii"- , "primIsLatin1" |-> pred "Data.Char.isLatin1"- , "primIsPrint" |-> pred "Data.Char.isPrint"- , "primIsHexDigit" |-> pred "Data.Char.isHexDigit"+ , "primIsLower" |-> return "Data.Char.isLower"+ , "primIsDigit" |-> return "Data.Char.isDigit"+ , "primIsAlpha" |-> return "Data.Char.isAlpha"+ , "primIsSpace" |-> return "Data.Char.isSpace"+ , "primIsAscii" |-> return "Data.Char.isAscii"+ , "primIsLatin1" |-> return "Data.Char.isLatin1"+ , "primIsPrint" |-> return "Data.Char.isPrint"+ , "primIsHexDigit" |-> return "Data.Char.isHexDigit" , "primToUpper" |-> return "Data.Char.toUpper" , "primToLower" |-> return "Data.Char.toLower"- , "primCharToNat" |-> do toN <- bltQual' "NATURAL" mazIntToNat- return $ repl [toN] $- "(\\ x -> <<0>> ((fromEnum :: Char -> Int) x))"- , "primNatToChar" |-> do toI <- bltQual' "NATURAL" mazNatToInt- return $ repl[toI] $- "(\\ x -> (toEnum :: Int -> Char) (<<0>> x))"- , "primShowChar" |-> return "(show :: Char -> String)"+ , "primCharToNat" |-> return "(fromIntegral . fromEnum :: Char -> Integer)"+ , "primNatToChar" |-> return "(toEnum . fromIntegral :: Integer -> Char)"+ , "primShowChar" |-> return "(Data.Text.pack . show :: Char -> Data.Text.Text)" -- String functions- , "primStringToList" |-> bltQual' "STRING" mazStringToList- , "primStringFromList" |-> bltQual' "STRING" mazListToString- , "primStringAppend" |-> binAsis "(++)" "String"- , "primStringEquality" |-> rel "(==)" "String"- , "primShowString" |-> return "(show :: String -> String)"+ , "primStringToList" |-> return "Data.Text.unpack"+ , "primStringFromList" |-> return "Data.Text.pack"+ , "primStringAppend" |-> binAsis "Data.Text.append" "Data.Text.Text"+ , "primStringEquality" |-> rel "(==)" "Data.Text.Text"+ , "primShowString" |-> return "Data.Text.unpack" -- Reflection- , "primQNameEquality" |-> rel "(==)" "MAlonzo.RTE.QName () ()"- , "primShowQName" |-> return "MAlonzo.RTE.qnameString"- , "primQNameType" |-> return "MAlonzo.RTE.qnameType"- , "primQNameDefinition" |-> return "MAlonzo.RTE.qnameDefinition"+ , "primQNameEquality" |-> rel "(==)" "MAlonzo.RTE.QName"+ , "primQNameLess" |-> rel "(<)" "MAlonzo.RTE.QName"+ , "primShowQName" |-> return "Data.Text.pack . MAlonzo.RTE.qnameString"+ , "primMetaEquality" |-> rel "(==)" "Integer"+ , "primMetaLess" |-> rel "(<)" "Integer"+ , "primShowMeta" |-> return "\\ x -> Data.Text.pack (\"_\" ++ show (x :: Integer))" - , "primDataConstructors" |-> return "(error \"primDataConstructors: not implemented\")"+ -- Seq+ , "primForce" |-> return "\\ _ _ _ _ x f -> f $! x"+ , "primForceLemma" |-> return "erased" -- Trust me , ("primTrustMe" , Right <$> do refl <- primRefl- closedTerm $ lam "a" (lam "A" (lam "x" (lam "y" refl))))+ closedTerm =<< (closedTermToTreeless $ lam "a" (lam "A" (lam "x" (lam "y" refl))))) ] where x |-> s = (x, Left <$> s)@@ -258,47 +200,32 @@ to' <- bltQual' blt to return $ repl [op, opty ty, from', to'] $ "\\ x y -> <<3>> ((<<0>> :: <<1>>) (<<2>> x) (<<2>> y))"- binNat op = bin "NATURAL" op "Integer" mazNatToInteger mazIntegerToNat+ binNat op = return $ repl [op] "(<<0>> :: Integer -> Integer -> Integer)"+ binNat4 op = return $ repl [op] "(<<0>> :: Integer -> Integer -> Integer -> Integer -> Integer)" binAsis op ty = return $ repl [op, opty ty] $ "((<<0>>) :: <<1>>)" rel' toTy op ty = do- toHB <- bltQual' "BOOL" mazHBoolToBool- return $ repl [op, ty, toHB, toTy] $- "(\\ x y -> <<2>> ((<<0>> :: <<1>> -> <<1>> -> Bool) (<<3>> x) (<<3>> y)))"- relNat op = do toHI <- bltQual' "NATURAL" mazNatToInteger- rel' toHI op "Integer"+ return $ repl [op, ty, toTy] $+ "(\\ x y -> (<<0>> :: <<1>> -> <<1>> -> Bool) (<<2>> x) (<<2>> y))"+ relNat op = do+ return $ repl [op] $+ "(<<0>> :: Integer -> Integer -> Bool)" rel op ty = rel' "" op ty- pred p = do toHB <- bltQual' "BOOL" mazHBoolToBool- return $ repl [p, toHB] $ "(\\ x -> <<1>> (<<0>> x))" opty t = t ++ "->" ++ t ++ "->" ++ t unimplemented = typeError $ NotImplemented s lam x t = Lam (setHiding Hidden defaultArgInfo) (Abs x t) +noCheckCover :: QName -> TCM Bool+noCheckCover q = (||) <$> isBuiltin q builtinNat <*> isBuiltin q builtinInteger+ ---------------------- -repl :: [String] -> String -> String-repl subs = go where- go ('<':'<':c:'>':'>':s) | 0 <= i && i < length subs = subs !! i ++ go s- where i = ord c - ord '0'- go (c:s) = c : go s- go [] = [] pconName :: String -> TCM String-pconName s = toS =<< getBuiltin s where+pconName s = toS . ignoreSharing =<< getBuiltin s where toS (Con q _) = prettyPrint <$> conhqn (conName q) toS (Lam _ t) = toS (unAbs t) toS _ = mazerror $ "pconName" ++ s--hasCompiledData :: [String] -> TCM Bool-hasCompiledData (s:_) = toB =<< getBuiltin s where- toB (Con q _) = do- def <- getConstInfo =<< ignoreAbstractMode (canonicalName (conName q))- return $ case compiledHaskell $ defCompiledRep def of- Just{} -> True- Nothing -> False- toB (Lam _ t) = toB (unAbs t)- toB _ = return False-hasCompiledData _ = return False bltQual' :: String -> String -> TCM String bltQual' b s = prettyPrint <$> bltQual b s
+ src/full/Agda/Compiler/ToTreeless.hs view
@@ -0,0 +1,349 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DoAndIfThenElse #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE PatternGuards #-}++module Agda.Compiler.ToTreeless+ ( toTreeless+ , closedTermToTreeless+ ) where++import Control.Applicative+import Control.Monad.Reader+import Control.Monad.State+import Data.Maybe+import Data.Map (Map)+import qualified Data.Map as Map+import Data.Traversable (traverse)++import Agda.Syntax.Common+import Agda.Syntax.Internal (QName)+import qualified Agda.Syntax.Treeless as C+import qualified Agda.Syntax.Internal as I+import Agda.Syntax.Literal+import qualified Agda.TypeChecking.CompiledClause as CC+import Agda.TypeChecking.Records (getRecordConstructor)+import Agda.TypeChecking.Pretty+import Agda.TypeChecking.CompiledClause++import Agda.Compiler.Treeless.Builtin+import Agda.Compiler.Treeless.Simplify+import Agda.Compiler.Treeless.Erase+import Agda.Compiler.Treeless.Uncase+import Agda.Compiler.Treeless.Pretty+import Agda.Compiler.Treeless.Unused++import Agda.Syntax.Common+import Agda.TypeChecking.Monad as TCM+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute++import Agda.Utils.Functor+import qualified Agda.Utils.HashMap as HMap+import Agda.Utils.List+import Agda.Utils.Maybe+import Agda.Utils.Monad+import qualified Agda.Utils.Pretty as P++#include "undefined.h"+import Agda.Utils.Impossible++prettyPure :: P.Pretty a => a -> TCM Doc+prettyPure = return . P.pretty++-- | Converts compiled clauses to treeless syntax.+--+-- Note: Do not use any of the concrete names in the returned+-- term for identification purposes! If you wish to do so,+-- first apply the Agda.Compiler.Treeless.NormalizeNames+-- transformation.+toTreeless :: QName -> TCM (Maybe C.TTerm)+toTreeless q = ifM (alwaysInline q) (pure Nothing) $ Just <$> toTreeless' q++toTreeless' :: QName -> TCM C.TTerm+toTreeless' q =+ flip fromMaybeM (getTreeless q) $ verboseBracket "treeless.convert" 20 ("compiling " ++ show q) $ do+ Just cc <- defCompiled <$> getConstInfo q+ unlessM (alwaysInline q) $ setTreeless q (C.TDef q)+ -- so recursive inlining doesn't loop, but not for always inlined+ -- functions, since that would risk inlining to fail.+ ccToTreeless q cc++ccToTreeless :: QName -> CC.CompiledClauses -> TCM C.TTerm+ccToTreeless q cc = do+ let pbody b = pbody' "" b+ pbody' suf b = sep [ text (show q ++ suf) <+> text "=", nest 2 $ prettyPure b ]+ v <- ifM (alwaysInline q) (return 20) (return 0)+ reportSDoc "treeless.convert" (30 + v) $ text "-- compiled clauses of" <+> prettyTCM q $$ nest 2 (prettyPure cc)+ body <- casetreeTop cc+ reportSDoc "treeless.opt.converted" (30 + v) $ text "-- converted" $$ pbody body+ body <- simplifyTTerm body+ reportSDoc "treeless.opt.simpl" (35 + v) $ text "-- after first simplification" $$ pbody body+ body <- translateBuiltins body+ reportSDoc "treeless.opt.builtin" (30 + v) $ text "-- after builtin translation" $$ pbody body+ body <- simplifyTTerm body+ reportSDoc "treeless.opt.simpl" (30 + v) $ text "-- after second simplification" $$ pbody body+ body <- eraseTerms q body+ reportSDoc "treeless.opt.erase" (30 + v) $ text "-- after erasure" $$ pbody body+ body <- caseToSeq body+ reportSDoc "treeless.opt.uncase" (30 + v) $ text "-- after uncase" $$ pbody body+ body <- simplifyTTerm body+ reportSDoc "treeless.opt.simpl" (30 + v) $ text "-- after third simplification" $$ pbody body+ body <- eraseTerms q body+ reportSDoc "treeless.opt.erase" (30 + v) $ text "-- after second erasure" $$ pbody body+ used <- usedArguments q body+ when (any not used) $+ reportSDoc "treeless.opt.unused" (30 + v) $+ text "-- used args:" <+> hsep [ if u then text [x] else text "_" | (x, u) <- zip ['a'..] used ] $$+ pbody' "[stripped]" (stripUnusedArguments used body)+ reportSDoc "treeless.opt.final" (20 + v) $ pbody body+ setTreeless q body+ setCompiledArgUse q used+ return body++closedTermToTreeless :: I.Term -> TCM C.TTerm+closedTermToTreeless t = do+ substTerm t `runReaderT` initCCEnv++alwaysInline :: QName -> TCM Bool+alwaysInline q = do+ def <- theDef <$> getConstInfo q+ pure $ case def of -- always inline with functions and pattern lambdas+ Function{} -> isJust (funExtLam def) || isJust (funWith def)+ _ -> False++-- | Initial environment for expression generation.+initCCEnv :: CCEnv+initCCEnv = CCEnv+ { ccCxt = []+ , ccCatchAll = Nothing+ }++-- | Environment for naming of local variables.+data CCEnv = CCEnv+ { ccCxt :: CCContext -- ^ Maps case tree de-bruijn indices to TTerm de-bruijn indices+ , ccCatchAll :: Maybe Int -- ^ TTerm de-bruijn index of the current catch all+ -- If an inner case has no catch-all clause, we use the one from its parent.+ }++type CCContext = [Int]+type CC = ReaderT CCEnv TCM++shift :: Int -> CCContext -> CCContext+shift n = map (+n)++-- | Term variables are de Bruijn indices.+lookupIndex :: Int -- ^ Case tree de bruijn index.+ -> CCContext+ -> Int -- ^ TTerm de bruijn index.+lookupIndex i xs = fromMaybe __IMPOSSIBLE__ $ xs !!! i++-- | Case variables are de Bruijn levels.+lookupLevel :: Int -- ^ case tree de bruijn level+ -> CCContext+ -> Int -- ^ TTerm de bruijn index+lookupLevel l xs = fromMaybe __IMPOSSIBLE__ $ xs !!! (length xs - 1 - l)++-- | Compile a case tree into nested case and record expressions.+casetreeTop :: CC.CompiledClauses -> TCM C.TTerm+casetreeTop cc = flip runReaderT initCCEnv $ do+ let a = commonArity cc+ lift $ reportSLn "treeless.convert.arity" 40 $ "-- common arity: " ++ show a+ lambdasUpTo a $ casetree cc++casetree :: CC.CompiledClauses -> CC C.TTerm+casetree cc = do+ case cc of+ CC.Fail -> return C.tUnreachable+ CC.Done xs v -> lambdasUpTo (length xs) $ do+ v <- lift $ putAllowedReductions [ProjectionReductions, CopatternReductions] $ normalise v+ substTerm v+ CC.Case (Arg _ n) (CC.Branches True conBrs _ _) -> lambdasUpTo n $ do+ mkRecord =<< traverse casetree (CC.content <$> conBrs)+ CC.Case (Arg _ n) (CC.Branches False conBrs litBrs catchAll) -> lambdasUpTo (n + 1) $ do+ if Map.null conBrs && Map.null litBrs then do+ -- there are no branches, just return default+ fromMaybe C.tUnreachable+ <$> (fmap C.TVar <$> asks ccCatchAll)+ else do+ caseTy <- case (Map.keys conBrs, Map.keys litBrs) of+ ((c:_), []) -> do+ c' <- lift (canonicalName c)+ dtNm <- conData . theDef <$> lift (getConstInfo c')+ return $ C.CTData dtNm+ ([], (LitChar _ _):_) -> return C.CTChar+ ([], (LitString _ _):_) -> return C.CTString+ ([], (LitQName _ _):_) -> return C.CTQName+ _ -> __IMPOSSIBLE__+ updateCatchAll catchAll $ do+ x <- lookupLevel n <$> asks ccCxt+ -- normally, Agda should make sure that a pattern match is total,+ -- so we set the default to unreachable if no default has been provided.+ def <- fromMaybe C.tUnreachable+ <$> (fmap C.TVar <$> asks ccCatchAll)+ C.TCase x caseTy def <$> do+ br1 <- conAlts n conBrs+ br2 <- litAlts n litBrs+ return (br1 ++ br2)++commonArity :: CC.CompiledClauses -> Int+commonArity cc =+ case arities 0 cc of+ [] -> 0+ as -> minimum as+ where+ arities cxt (Case (Arg _ x) (Branches False cons lits def)) =+ concatMap (wArities cxt') (Map.elems cons) +++ concatMap (wArities cxt' . WithArity 0) (Map.elems lits) +++ concat [ arities cxt' c | Just c <- [def] ] -- ??+ where cxt' = max (x + 1) cxt+ arities cxt (Case _ (Branches True _ _ _)) = [cxt]+ arities cxt (Done xs _) = [max cxt (length xs)]+ arities _ Fail = []+++ wArities cxt (WithArity k c) = map (\ x -> x - k + 1) $ arities (cxt - 1 + k) c++updateCatchAll :: Maybe CC.CompiledClauses -> (CC C.TTerm -> CC C.TTerm)+updateCatchAll Nothing cont = cont+updateCatchAll (Just cc) cont = do+ def <- casetree cc+ local (\e -> e { ccCatchAll = Just 0, ccCxt = shift 1 (ccCxt e) }) $ do+ C.mkLet def <$> cont++lambdasUpTo :: Int -> CC C.TTerm -> CC C.TTerm+lambdasUpTo n cont = do+ diff <- (n -) . length <$> asks ccCxt++ if diff <= 0 then cont -- no new lambdas needed+ else do+ catchAll <- asks ccCatchAll++ local (\e -> e { ccCxt = [0..(diff - 1)] ++ shift diff (ccCxt e)}) $ do+ createLambdas diff <$> do+ case catchAll of+ Just catchAll' -> do+ -- the catch all doesn't know about the additional lambdas, so just directly+ -- apply it again to the newly introduced lambda arguments.+ -- we also bind the catch all to a let, to avoid code duplication+ local (\e -> e { ccCatchAll = Just 0+ , ccCxt = shift 1 (ccCxt e)}) $ do+ let catchAllArgs = map C.TVar $ reverse [0..(diff - 1)]+ C.mkLet (C.mkTApp (C.TVar $ catchAll' + diff) catchAllArgs)+ <$> cont+ Nothing -> cont+ where createLambdas :: Int -> C.TTerm -> C.TTerm+ createLambdas 0 cont' = cont'+ createLambdas i cont' | i > 0 = C.TLam (createLambdas (i - 1) cont')+ createLambdas _ _ = __IMPOSSIBLE__++conAlts :: Int -> Map QName (CC.WithArity CC.CompiledClauses) -> CC [C.TAlt]+conAlts x br = forM (Map.toList br) $ \ (c, CC.WithArity n cc) -> do+ c' <- lift $ canonicalName c+ replaceVar x n $ do+ branch (C.TACon c' n) cc++litAlts :: Int -> Map Literal CC.CompiledClauses -> CC [C.TAlt]+litAlts x br = forM (Map.toList br) $ \ (l, cc) ->+ -- Issue1624: we need to drop the case scrutinee from the environment here!+ replaceVar x 0 $ do+ branch (C.TALit l ) cc++branch :: (C.TTerm -> C.TAlt) -> CC.CompiledClauses -> CC C.TAlt+branch alt cc = do+ alt <$> casetree cc++-- | Replace de Bruijn Level @x@ by @n@ new variables.+replaceVar :: Int -> Int -> CC a -> CC a+replaceVar x n cont = do+ let upd cxt = shift n ys ++ ixs ++ shift n zs+ where+ -- compute the de Bruijn index+ i = length cxt - 1 - x+ -- discard index i+ (ys, _:zs) = splitAt i cxt+ -- compute the de-bruijn indexes of the newly inserted variables+ ixs = [0..(n - 1)]+ local (\e -> e { ccCxt = upd (ccCxt e) , ccCatchAll = (+n) <$> ccCatchAll e }) $+ cont+++-- | Precondition: Map not empty.+mkRecord :: Map QName C.TTerm -> CC C.TTerm+mkRecord fs = lift $ do+ -- Get the name of the first field+ let p1 = fst $ fromMaybe __IMPOSSIBLE__ $ headMaybe $ Map.toList fs+ -- Use the field name to get the record constructor and the field names.+ I.ConHead c _ind xs <- conSrcCon . theDef <$> (getConstInfo =<< canonicalName . I.conName =<< recConFromProj p1)+ -- Convert the constructor+ let (args :: [C.TTerm]) = for xs $ \ x -> fromMaybe __IMPOSSIBLE__ $ Map.lookup x fs+ return $ C.mkTApp (C.TCon c) args+++recConFromProj :: QName -> TCM I.ConHead+recConFromProj q = do+ caseMaybeM (isProjection q) __IMPOSSIBLE__ $ \ proj -> do+ let d = projFromType proj+ getRecordConstructor d+++-- | Translate the actual Agda terms, with an environment of all the bound variables+-- from patternmatching. Agda terms are in de Bruijn indices, but the expected+-- TTerm de bruijn indexes may differ. This is due to additional let-bindings+-- introduced by the catch-all machinery, so we need to lookup casetree de bruijn+-- indices in the environment as well.+substTerm :: I.Term -> CC C.TTerm+substTerm term = normaliseStatic term >>= \ term ->+ case I.ignoreSharing $ I.unSpine term of+ I.Var ind es -> do+ ind' <- lookupIndex ind <$> asks ccCxt+ let args = fromMaybe __IMPOSSIBLE__ $ I.allApplyElims es+ C.mkTApp (C.TVar ind') <$> substArgs args+ I.Lam _ ab ->+ C.TLam <$>+ local (\e -> e { ccCxt = 0 : (shift 1 $ ccCxt e) })+ (substTerm $ I.unAbs ab)+ I.Lit l -> return $ C.TLit l+ I.Level _ -> return C.TUnit+ I.Def q es -> do+ let args = fromMaybe __IMPOSSIBLE__ $ I.allApplyElims es+ maybeInlineDef q args+ I.Con c args -> do+ c' <- lift $ canonicalName $ I.conName c+ C.mkTApp (C.TCon c') <$> substArgs args+ I.Shared _ -> __IMPOSSIBLE__ -- the ignoreSharing fun should already take care of this+ I.Pi _ _ -> return C.TUnit+ I.Sort _ -> return C.TSort+ I.MetaV _ _ -> __IMPOSSIBLE__ -- we don't compiled if unsolved metas+ I.DontCare _ -> return C.TErased++normaliseStatic :: I.Term -> CC I.Term+normaliseStatic v@(I.Def f es) = lift $ do+ static <- isStaticFun . theDef <$> getConstInfo f+ if static then normalise v else pure v+normaliseStatic v = pure v++maybeInlineDef :: I.QName -> I.Args -> CC C.TTerm+maybeInlineDef q vs =+ ifM (lift $ alwaysInline q) doinline $ do+ def <- lift $ getConstInfo q+ case theDef def of+ Function{ funInline = inline }+ | inline -> doinline+ | otherwise -> do+ _ <- lift $ toTreeless' q+ used <- lift $ getCompiledArgUse q+ let substUsed False _ = pure C.TErased+ substUsed True arg = substArg arg+ C.mkTApp (C.TDef q) <$> sequence [ substUsed u arg | (arg, u) <- zip vs $ used ++ repeat True ]+ _ -> C.mkTApp (C.TDef q) <$> substArgs vs+ where+ doinline = C.mkTApp <$> inline q <*> substArgs vs+ inline q = lift $ toTreeless' q++substArgs :: [Arg I.Term] -> CC [C.TTerm]+substArgs = traverse substArg++substArg :: Arg I.Term -> CC C.TTerm+substArg x | isIrrelevant x = return C.TErased+ | otherwise = substTerm (unArg x)
+ src/full/Agda/Compiler/Treeless/Builtin.hs view
@@ -0,0 +1,186 @@+-- | Translates the Agda builtin nat datatype to arbitrary-precision integers.+--+-- Philipp, 20150921:+-- At the moment, this optimization is the reason that there is a+-- TAPlus alternative. For Haskell, this can easily be translated to guards. However, in+-- the long term it would be easier for the backends if these things were translated+-- directly to a less-than primitive and if-then-else expressions or similar. This would+-- require us to add some internal Bool-datatype as compiler-internal type and+-- a primitive less-than function, which will be much easier once Treeless+-- is used for whole modules.+--+-- Ulf, 2015-09-21: No, actually we need the n+k patterns, or at least guards.+-- Representing them with if-then-else would make it a lot harder to do+-- optimisations that analyse case tree, like impossible case elimination.+--+-- Ulf, 2015-10-30: Guards are actually a better primitive. Fixed that.+{-# LANGUAGE CPP #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE FlexibleContexts #-}+module Agda.Compiler.Treeless.Builtin (translateBuiltins) where++import Control.Applicative++import qualified Agda.Syntax.Internal as I+import Agda.Syntax.Abstract.Name (QName)+import Agda.Syntax.Position+import Agda.Syntax.Treeless+import Agda.Syntax.Literal++import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin++import Agda.Compiler.Treeless.Subst++import Agda.Utils.Except ( MonadError(catchError) )+import Agda.Utils.Maybe+import Agda.Utils.Impossible++#include "undefined.h"++data BuiltinKit = BuiltinKit+ { isZero :: QName -> Bool+ , isSuc :: QName -> Bool+ , isPos :: QName -> Bool+ , isNegSuc :: QName -> Bool+ , isPlus :: QName -> Bool+ , isTimes :: QName -> Bool+ , isLess :: QName -> Bool+ , isEqual :: QName -> Bool+ , isForce :: QName -> Bool+ }++builtinKit :: TCM BuiltinKit+builtinKit =+ BuiltinKit <$> isB con builtinZero+ <*> isB con builtinSuc+ <*> isB con builtinIntegerPos+ <*> isB con builtinIntegerNegSuc+ <*> isB def builtinNatPlus+ <*> isB def builtinNatTimes+ <*> isB def builtinNatLess+ <*> isB def builtinNatEquals+ <*> isP pf "primForce"+ where+ con (I.Con c _) = pure $ I.conName c+ con _ = Nothing+ def (I.Def d _) = pure d+ def _ = Nothing++ pf = Just . primFunName++ is a b = maybe (const False) (==) . (a =<<) <$> b+ isB a b = is a (getBuiltin' b)+ isP a p = is a (getPrimitive' p)++translateBuiltins :: TTerm -> TCM TTerm+translateBuiltins t = do+ kit <- builtinKit+ return $ transform kit t++transform :: BuiltinKit -> TTerm -> TTerm+transform BuiltinKit{..} = tr+ where+ tr t = case t of++ TCon c | isZero c -> tInt 0+ | isSuc c -> TLam (tPlusK 1 (TVar 0))+ | isPos c -> TLam (TVar 0)+ | isNegSuc c -> TLam $ tNegPlusK 1 (TVar 0)++ TDef f | isPlus f -> TPrim PAdd+ | isTimes f -> TPrim PMul+ | isLess f -> TPrim PLt+ | isEqual f -> TPrim PEq+ -- Note: Don't do this for builtinNatMinus! PSub is integer minus and+ -- builtin minus is monus. The simplifier will do it if it can see+ -- that it won't underflow.++ TApp (TDef q) [_, _, _, _, e, f]+ | isForce q -> tr $ TLet e $ tOp PSeq (TVar 0) $ mkTApp (raise 1 f) [TVar 0]++ TApp (TCon s) [e] | isSuc s ->+ case tr e of+ TLit (LitNat r n) -> tInt (n + 1)+ e | Just (i, e) <- plusKView e -> tPlusK (i + 1) e+ e -> tPlusK 1 e++ TApp (TCon c) [e]+ | isPos c -> tr e+ | isNegSuc c ->+ case tr e of+ TLit (LitNat _ n) -> tInt (-n - 1)+ e | Just (i, e) <- plusKView e -> tNegPlusK (i + 1) e+ e -> tNegPlusK 1 e++ TCase e t d bs -> TCase e t (tr d) $ concatMap trAlt bs+ where+ trAlt b = case b of+ TACon c 0 b | isZero c -> [TALit (LitNat noRange 0) (tr b)]+ TACon c 1 b | isSuc c ->+ case tr b of+ -- Collapse nested n+k patterns+ TCase 0 _ d bs' -> map sucBranch bs' ++ [nPlusKAlt 1 d]+ b -> [nPlusKAlt 1 b]+ where+ sucBranch (TALit (LitNat r i) b) = TALit (LitNat r (i + 1)) $ applySubst (str __IMPOSSIBLE__) b+ sucBranch alt | Just (k, b) <- nPlusKView alt = nPlusKAlt (k + 1) $ applySubst (liftS 1 $ str __IMPOSSIBLE__) b+ sucBranch _ = __IMPOSSIBLE__++ nPlusKAlt k b = TAGuard (tOp PGeq (TVar e) (tInt k)) $+ TLet (tOp PSub (TVar e) (tInt k)) b++ str err = compactS err [Nothing]++ TACon c 1 b | isPos c ->+ case tr b of+ -- collapse nested nat patterns+ TCase 0 _ d bs -> map sub bs ++ [posAlt d]+ b -> [posAlt b]+ where+ -- subst scrutinee for the pos argument+ sub :: Subst TTerm a => a -> a+ sub = applySubst (TVar e :# IdS)++ posAlt b = TAGuard (tOp PGeq (TVar e) (tInt 0)) $ sub b++ TACon c 1 b | isNegSuc c ->+ case tr b of+ -- collapse nested nat patterns+ TCase 0 _ d bs -> map negsucBranch bs ++ [negAlt d]+ b -> [negAlt b]+ where+ body b = TLet (tNegPlusK 1 (TVar e)) b+ negAlt b = TAGuard (tOp PLt (TVar e) (tInt 0)) $ body b++ negsucBranch (TALit (LitNat r i) b) = TALit (LitNat r (-i - 1)) $ body b+ negsucBranch alt | Just (k, b) <- nPlusKView alt =+ TAGuard (tOp PLt (TVar e) (tInt (-k))) $+ body $ TLet (tNegPlusK (k + 1) (TVar $ e + 1)) b+ negsucBranch _ = __IMPOSSIBLE__+++ TACon c a b -> [TACon c a (tr b)]+ TALit l b -> [TALit l (tr b)]+ TAGuard g b -> [TAGuard (tr g) (tr b)]++ TVar{} -> t+ TDef{} -> t+ TCon{} -> t+ TPrim{} -> t+ TLit{} -> t+ TUnit{} -> t+ TSort{} -> t+ TErased{} -> t+ TError{} -> t++ TLam b -> TLam (tr b)+ TApp a bs -> TApp (tr a) (map tr bs)+ TLet e b -> TLet (tr e) (tr b)+ nPlusKView (TAGuard (TApp (TPrim PGeq) [TVar 0, (TLit (LitNat _ k))])+ (TLet (TApp (TPrim PSub) [TVar 0, (TLit (LitNat _ j))]) b))+ | k == j = Just (k, b)+ nPlusKView _ = Nothing+
+ src/full/Agda/Compiler/Treeless/Compare.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE PatternGuards #-}+module Agda.Compiler.Treeless.Compare (equalTerms) where++import Agda.Syntax.Treeless+import Agda.TypeChecking.Substitute+import Agda.Compiler.Treeless.Subst++equalTerms :: TTerm -> TTerm -> Bool+equalTerms u v =+ case (evalPrims u, evalPrims v) of+ (TLet s u@(TCase 0 _ _ _), TLet t v@(TCase 0 _ _ _)) ->+ equalTerms s t && equalTerms u v+ (TLet _ (TCase 0 _ _ _), _) -> False+ (_, TLet _ (TCase 0 _ _ _)) -> False+ (TLet t u, v) -> equalTerms (subst 0 t u) v+ (u, TLet t v) -> equalTerms u (subst 0 t v)+ (u, v) | u == v -> True+ (TApp f us, TApp g vs) -> eqList equalTerms (f : us) (g : vs)+ (TCase x _ d as, TCase y _ e bs) -> x == y && equalTerms d e && eqList equalAlts as bs+ (TLam u, TLam v) -> equalTerms u v+ _ -> False++equalAlts :: TAlt -> TAlt -> Bool+equalAlts (TACon c a b) (TACon c1 a1 b1) = (c, a) == (c1, a1) && equalTerms b b1+equalAlts (TALit l b) (TALit l1 b1) = l == l1 && equalTerms b b1+equalAlts (TAGuard g b) (TAGuard g1 b1) = equalTerms g g1 && equalTerms b b1+equalAlts _ _ = False++eqList :: (a -> a -> Bool) -> [a] -> [a] -> Bool+eqList eq xs ys = length xs == length ys && and (zipWith eq xs ys)++evalPrims :: TTerm -> TTerm+evalPrims (TApp (TPrim op) [a, b])+ | Just n <- intView (evalPrims a),+ Just m <- intView (evalPrims b),+ Just r <- applyPrim op n m = tInt r+evalPrims t = t++applyPrim :: TPrim -> Integer -> Integer -> Maybe Integer+applyPrim PAdd a b = Just (a + b)+applyPrim PSub a b = Just (a - b)+applyPrim PMul a b = Just (a * b)+applyPrim PQuot a b | b /= 0 = Just (quot a b)+ | otherwise = Nothing+applyPrim PRem a b | b /= 0 = Just (rem a b)+ | otherwise = Nothing+applyPrim PGeq _ _ = Nothing+applyPrim PLt _ _ = Nothing+applyPrim PEq _ _ = Nothing+applyPrim PIf _ _ = Nothing+applyPrim PSeq _ _ = Nothing+
+ src/full/Agda/Compiler/Treeless/Erase.hs view
@@ -0,0 +1,213 @@+{-# LANGUAGE CPP #-}++module Agda.Compiler.Treeless.Erase (eraseTerms) where++import Control.Arrow ((&&&), (***), first, second)+import Control.Applicative+import Control.Monad+import Control.Monad.State+import Data.Map (Map)+import qualified Data.Map as Map++import Agda.Syntax.Common+import Agda.Syntax.Internal as I+import Agda.Syntax.Abstract.Name (QName)+import Agda.Syntax.Position+import Agda.Syntax.Treeless+import Agda.Syntax.Literal++import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Monad as I+import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Datatypes+import Agda.TypeChecking.Pretty++import Agda.Compiler.Treeless.Subst+import Agda.Compiler.Treeless.Pretty++import Agda.Utils.Maybe+import Agda.Utils.Impossible+import Agda.Utils.Monad+import Agda.Utils.Functor+import Agda.Utils.Lens+import Agda.Utils.Memo++#include "undefined.h"++data ESt = ESt { _funMap :: Map QName FunInfo+ , _typeMap :: Map QName TypeInfo }++funMap :: Lens' (Map QName FunInfo) ESt+funMap f r = f (_funMap r) <&> \ a -> r { _funMap = a }++typeMap :: Lens' (Map QName TypeInfo) ESt+typeMap f r = f (_typeMap r) <&> \ a -> r { _typeMap = a }++type E = StateT ESt TCM++runE :: E a -> TCM a+runE m = evalStateT m (ESt Map.empty Map.empty)++eraseTerms :: QName -> TTerm -> TCM TTerm+eraseTerms q = runE . eraseTop q+ where+ eraseTop q t = do+ (_, h) <- getFunInfo q+ case h of+ Erasable -> pure TErased+ Empty -> pure TErased+ _ -> erase t++ erase t = case tAppView t of++ TCon c : vs -> do+ (rs, h) <- getFunInfo c+ when (length rs < length vs) __IMPOSSIBLE__+ case h of+ Erasable -> pure TErased+ Empty -> pure TErased+ _ -> tApp (TCon c) <$> zipWithM eraseRel rs vs++ TDef f : vs -> do+ (rs, h) <- getFunInfo f+ case h of+ Erasable -> pure TErased+ Empty -> pure TErased+ _ -> tApp (TDef f) <$> zipWithM eraseRel (rs ++ repeat Relevant) vs++ _ -> case t of+ TVar{} -> pure t+ TDef{} -> pure t+ TPrim{} -> pure t+ TLit{} -> pure t+ TCon{} -> pure t+ TApp f es -> tApp <$> erase f <*> mapM erase es+ TLam b -> tLam <$> erase b+ TLet e b -> do+ e <- erase e+ if isErased e+ then case b of+ TCase 0 _ _ _ -> tLet TErased <$> erase b+ _ -> erase $ subst 0 TErased b+ else tLet e <$> erase b+ TCase x t d bs -> do+ d <- erase d+ bs <- mapM eraseAlt bs+ tCase x t d bs++ TUnit -> pure t+ TSort -> pure t+ TErased -> pure t+ TError{} -> pure t++ tLam TErased = TErased+ tLam t = TLam t++ tLet e b+ | freeIn 0 b = TLet e b+ | otherwise = strengthen __IMPOSSIBLE__ b++ tApp f [] = f+ tApp TErased _ = TErased+ tApp f _ | isUnreachable f = tUnreachable+ tApp f es = TApp f es++ tCase x t d bs+ | isErased d && all (isErased . aBody) bs = pure TErased+ | otherwise = case bs of+ [TACon c a b] -> do+ h <- snd <$> getFunInfo c+ case h of+ NotErasable -> noerase+ Empty -> pure TErased+ Erasable -> (if a == 0 then pure else erase) $ applySubst (replicate a TErased ++# idS) b+ -- might enable more erasure+ _ -> noerase+ where+ noerase = pure $ TCase x t d bs++ isErased t = t == TErased || isUnreachable t++ eraseRel r t | erasableR r = pure TErased+ | otherwise = erase t++ eraseAlt a = case a of+ TALit l b -> TALit l <$> erase b+ TACon c a b -> TACon c a <$> erase b+ TAGuard g b -> TAGuard <$> erase g <*> erase b++data TypeInfo = Empty | Erasable | NotErasable+ deriving (Eq, Show)++erasableR :: Relevance -> Bool+erasableR Relevant = False+erasableR Forced{} = False -- TODO: should be True but need to transform clauses+erasableR NonStrict = True+erasableR Irrelevant = True+erasableR UnusedArg = True++erasable :: TypeInfo -> Bool+erasable Erasable = True+erasable Empty = True+erasable NotErasable = False++type FunInfo = ([Relevance], TypeInfo)++getFunInfo :: QName -> E FunInfo+getFunInfo q = memo (funMap . key q) $ getInfo q+ where+ getInfo q = do+ (rs, t) <- lift $ do+ (tel, t) <- typeWithoutParams q+ return (map getRelevance tel, t)+ h <- if isAbsurdLambdaName q then pure Erasable else getTypeInfo t+ lift $ reportSLn "treeless.opt.erase.info" 50 $ "type info for " ++ show q ++ ": " ++ show rs ++ " -> " ++ show h+ return (rs, h)++telListView :: Type -> TCM (ListTel, Type)+telListView t = do+ TelV tel t <- telView t+ return (telToList tel, t)++typeWithoutParams :: QName -> TCM (ListTel, Type)+typeWithoutParams q = do+ def <- getConstInfo q+ let d = case I.theDef def of+ Function{ funProjection = Just Projection{ projIndex = i } } -> i - 1+ Constructor{ conPars = n } -> n+ _ -> 0+ first (drop d) <$> telListView (defType def)++getTypeInfo :: Type -> E TypeInfo+getTypeInfo t = do+ (tel, t) <- lift $ telListView t+ et <- case ignoreSharing $ I.unEl t of+ I.Def d _ -> typeInfo d+ Sort{} -> return Erasable+ _ -> return NotErasable+ is <- mapM (getTypeInfo . snd . dget) tel+ let e | et == Empty = Empty+ | any (== Empty) is = Erasable+ | otherwise = et+ lift $ reportSDoc "treeless.opt.erase.type" 50 $ prettyTCM t <+> text ("is " ++ show e)+ return e+ where+ typeInfo :: QName -> E TypeInfo+ typeInfo q = memoRec (typeMap . key q) Erasable $ do -- assume recursive occurrences are erasable+ def <- lift $ getConstInfo q+ mcs <- return $ case I.theDef def of+ I.Datatype{ dataCons = cs } -> Just cs+ I.Record{ recConHead = c } -> Just [conName c]+ _ -> Nothing+ case mcs of+ Just [c] -> do+ (ts, _) <- lift $ typeWithoutParams c+ let rs = map getRelevance ts+ is <- mapM (getTypeInfo . snd . dget) ts+ let er = and [ erasable i || erasableR r | (i, r) <- zip is rs ]+ return $ if er then Erasable else NotErasable+ Just [] -> return Empty+ _ -> return NotErasable+
+ src/full/Agda/Compiler/Treeless/GuardsToPrims.hs view
@@ -0,0 +1,60 @@+-- | Translates guard alternatives to if-then-else cascades.+--+-- The builtin translation must be run before this transformation.+{-# LANGUAGE CPP #-}+module Agda.Compiler.Treeless.GuardsToPrims ( convertGuards ) where++import Data.List+++import Agda.Syntax.Abstract.Name (QName)+import Agda.Syntax.Treeless+import Agda.Syntax.Literal++import Agda.TypeChecking.Substitute++import Agda.Compiler.Treeless.Subst++import Agda.Utils.Impossible++#include "undefined.h"++++convertGuards :: TTerm -> TTerm+convertGuards = tr+ where+ tr t = case t of+ TCase sc t def alts -> TCase sc t def' (fmap trAlt otherAlts)+ where+ (plusAlts, otherAlts) = splitAlts alts++ guardedAlt :: TAlt -> TTerm -> TTerm+ guardedAlt (TAGuard g body) cont =+ TApp (TPrim PIf) [tr g, tr body, cont]+ guardedAlt _ _ = __IMPOSSIBLE__++ def' = foldr guardedAlt (tr def) plusAlts++ trAlt (TAGuard{}) = __IMPOSSIBLE__+ trAlt a = a { aBody = tr (aBody a) }++ TVar{} -> t+ TDef{} -> t+ TCon{} -> t+ TPrim{} -> t+ TLit{} -> t+ TUnit{} -> t+ TSort{} -> t+ TErased{} -> t+ TError{} -> t++ TLam b -> TLam (tr b)+ TApp a bs -> TApp (tr a) (map tr bs)+ TLet e b -> TLet (tr e) (tr b)++-- | Split alts into TAGuard alts and other alts.+splitAlts :: [TAlt] -> ([TAlt], [TAlt])+splitAlts = partition isGuardAlt+ where isGuardAlt (TAGuard _ _) = True+ isGuardAlt _ = False
+ src/full/Agda/Compiler/Treeless/NormalizeNames.hs view
@@ -0,0 +1,48 @@+-- | Ensures that all occurences of an abstract name share+-- the same concrete name.+--+-- Apply this transformation if your backend uses concrete names+-- for identification purposes!+--+-- The identity of an abstract name is only the nameId, the concrete+-- name is only a naming suggestion. If renaming imports are used,+-- the concrete name may change. This transformation makes sure+-- that all occurences of an abstract name share the same+-- concrete name.+--+-- This transfomation should be run as the last transformation.+{-# LANGUAGE CPP #-}+module Agda.Compiler.Treeless.NormalizeNames ( normalizeNames ) where++import Control.Applicative++import Agda.TypeChecking.Monad+import Agda.Syntax.Treeless++normalizeNames :: TTerm -> TCM TTerm+normalizeNames = tr+ where+ tr t = case t of+ TDef q -> do+ q' <- defName <$> getConstInfo q+ return $ TDef q'+ TVar{} -> done+ TCon{} -> done+ TPrim{} -> done+ TLit{} -> done+ TUnit{} -> done+ TSort{} -> done+ TErased{} -> done+ TError{} -> done+ TLam b -> TLam <$> tr b+ TApp a bs -> TApp <$> tr a <*> mapM tr bs+ TLet e b -> TLet <$> tr e <*> tr b+ TCase sc t def alts -> TCase sc t <$> tr def <*> mapM trAlt alts+ where+ done :: TCM TTerm+ done = return t++ trAlt a = case a of+ TAGuard g b -> TAGuard <$> tr g <*> tr b+ TACon q a b -> TACon q a <$> tr b+ TALit l b -> TALit l <$> tr b
+ src/full/Agda/Compiler/Treeless/Pretty.hs view
@@ -0,0 +1,152 @@+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE TupleSections #-}++{-# OPTIONS_GHC -fno-warn-orphans #-}++module Agda.Compiler.Treeless.Pretty () where++import Control.Arrow ((&&&), (***), first, second)+import Control.Applicative+import Control.Monad.Reader+import Data.Maybe++import Agda.Syntax.Treeless+import Agda.Utils.Pretty++data PEnv = PEnv { pPrec :: Int+ , pFresh :: [String]+ , pBound :: [String] }++type P = Reader PEnv++withName :: (String -> P a) -> P a+withName k = withNames 1 $ \[x] -> k x++withNames :: Int -> ([String] -> P a) -> P a+withNames n k = do+ (xs, ys) <- asks $ splitAt n . pFresh+ local (\ e -> e { pFresh = ys }) (k xs)++bindName :: String -> P a -> P a+bindName x = local $ \ e -> e { pBound = x : pBound e }++bindNames :: [String] -> P a -> P a+bindNames xs p = foldr bindName p xs++paren :: Int -> P Doc -> P Doc+paren p doc = do+ n <- asks pPrec+ (if p < n then parens else id) <$> doc++prec :: Int -> P a -> P a+prec p = local $ \ e -> e { pPrec = p }++name :: Int -> P String+name x = asks $ (!! x) . (++ map (("^" ++) . show) [1..]) . pBound++runP :: P a -> a+runP p = runReader p PEnv{ pPrec = 0, pFresh = names, pBound = [] }+ where+ names = [ x ++ i | i <- "" : map show [1..], x <- map (:[]) ['a'..'z'] ]++instance Pretty TTerm where+ prettyPrec p t = runP $ prec p (pTerm t)++opName :: TPrim -> String+opName PAdd = "+"+opName PSub = "-"+opName PMul = "*"+opName PQuot = "quot"+opName PRem = "rem"+opName PGeq = ">="+opName PLt = "<"+opName PEq = "=="+opName PIf = "if_then_else_"+opName PSeq = "seq"++isInfix :: TPrim -> Maybe (Int, Int, Int)+isInfix op =+ case op of+ PMul -> l 7+ PAdd -> l 6+ PSub -> l 6+ PGeq -> non 4+ PLt -> non 4+ PEq -> non 4+ _ -> Nothing+ where+ l n = Just (n, n, n + 1)+ r n = Just (n, n + 1, n)+ non n = Just (n, n + 1, n + 1)++pTerm' :: Int -> TTerm -> P Doc+pTerm' p = prec p . pTerm++pTerm :: TTerm -> P Doc+pTerm t = case t of+ TVar x -> text <$> name x+ TApp (TPrim op) [a, b] | Just (c, l, r) <- isInfix op ->+ paren c $ sep <$> sequence [ pTerm' l a+ , pure $ text $ opName op+ , pTerm' r b ]+ TApp (TPrim PIf) [a, b, c] ->+ paren 0 $ (\ a b c -> sep [ text "if" <+> a+ , nest 2 $ text "then" <+> b+ , nest 2 $ text "else" <+> c ])+ <$> pTerm' 0 a+ <*> pTerm' 0 b+ <*> pTerm c+ TDef f -> pure $ text (show f)+ TCon c -> pure $ text (show c)+ TLit l -> pure $ pretty l+ TPrim op | isJust (isInfix op) -> pure $ text ("_" ++ opName op ++ "_")+ | otherwise -> pure $ text (opName op)+ TApp f es ->+ paren 9 $ (\a bs -> sep [a, nest 2 $ fsep bs])+ <$> pTerm' 9 f+ <*> mapM (pTerm' 10) es+ TLam _ -> paren 0 $ withNames n $ \xs -> bindNames xs $+ (\b -> sep [ text ("λ " ++ unwords xs ++ " →")+ , nest 2 b ]) <$> pTerm' 0 b+ where+ (n, b) = lamV t+ lamV (TLam b) = first succ $ lamV b+ lamV t = (0, t)+ TLet{} -> paren 0 $ withNames (length es) $ \ xs ->+ (\ (binds, b) -> sep [ text "let" <+> vcat [ sep [ text x <+> text "="+ , nest 2 e ] | (x, e) <- binds ]+ <+> text "in", b ])+ <$> pLets (zip xs es) b+ where+ (es, b) = letV t+ letV (TLet e b) = first (e :) $ letV b+ letV t = ([], t)++ pLets [] b = ([],) <$> pTerm' 0 b+ pLets ((x, e) : bs) b = do+ e <- pTerm' 0 e+ first ((x, e) :) <$> bindName x (pLets bs b)++ TCase x _ def alts -> paren 0 $+ (\ sc alts def ->+ sep [ text "case" <+> sc <+> text "of"+ , nest 2 $ vcat (alts ++ [ text "_ →" <+> def ]) ]+ ) <$> pTerm' 0 (TVar x)+ <*> mapM pAlt alts+ <*> pTerm' 0 def+ where+ pAlt (TALit l b) = pAlt' <$> pTerm' 0 (TLit l) <*> pTerm' 0 b+ pAlt (TAGuard g b) =+ pAlt' <$> ((text "_" <+> text "|" <+>) <$> pTerm' 0 g)+ <*> (pTerm' 0 b)+ pAlt (TACon c a b) =+ withNames a $ \ xs -> bindNames xs $+ pAlt' <$> pTerm' 0 (TApp (TCon c) [TVar i | i <- reverse [0..a - 1]])+ <*> pTerm' 0 b+ pAlt' p b = sep [p <+> text "→", nest 2 b]++ TUnit -> pure $ text "()"+ TSort -> pure $ text "Set"+ TErased -> pure $ text "_"+ TError err -> paren 9 $ pure $ text "error" <+> text (show (show err))+
+ src/full/Agda/Compiler/Treeless/Simplify.hs view
@@ -0,0 +1,355 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE PatternGuards #-}+module Agda.Compiler.Treeless.Simplify (simplifyTTerm) where++import Control.Arrow (first, second, (***))+import Control.Applicative+import Control.Monad.Reader+import Control.Monad.Writer+import Data.Traversable (traverse)+import Data.List++import Agda.Syntax.Treeless+import Agda.Syntax.Internal (Substitution'(..))+import Agda.Syntax.Literal+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Primitive+import Agda.TypeChecking.Substitute+import Agda.Utils.Maybe++import Agda.Compiler.Treeless.Subst+import Agda.Compiler.Treeless.Pretty+import Agda.Compiler.Treeless.Compare+import Agda.Utils.Pretty++import Agda.Utils.Impossible+#include "undefined.h"++data SEnv = SEnv+ { envSubst :: Substitution' TTerm+ , envRewrite :: [(TTerm, TTerm)] }++type S = Reader SEnv++runS :: S a -> a+runS m = runReader m $ SEnv IdS []++lookupVar :: Int -> S TTerm+lookupVar i = asks $ (`lookupS` i) . envSubst++onSubst :: (Substitution' TTerm -> Substitution' TTerm) -> S a -> S a+onSubst f = local $ \ env -> env { envSubst = f (envSubst env) }++onRewrite :: Substitution' TTerm -> S a -> S a+onRewrite rho = local $ \ env -> env { envRewrite = map (applySubst rho *** applySubst rho) (envRewrite env) }++addRewrite :: TTerm -> TTerm -> S a -> S a+addRewrite lhs rhs = local $ \ env -> env { envRewrite = (lhs, rhs) : envRewrite env }++underLams :: Int -> S a -> S a+underLams i = onRewrite (raiseS i) . onSubst (liftS i)++underLam :: S a -> S a+underLam = underLams 1++underLet :: TTerm -> S a -> S a+underLet u = onRewrite (raiseS 1) . onSubst (\rho -> wkS 1 $ u :# rho)++rewrite :: TTerm -> S TTerm+rewrite t = do+ rules <- asks envRewrite+ case [ rhs | (lhs, rhs) <- rules, equalTerms t lhs ] of+ rhs : _ -> pure rhs+ [] -> pure t++data FunctionKit = FunctionKit+ { modAux, divAux, natMinus, true, false :: Maybe QName }++simplifyTTerm :: TTerm -> TCM TTerm+simplifyTTerm t = do+ kit <- FunctionKit <$> getBuiltinName builtinNatModSucAux+ <*> getBuiltinName builtinNatDivSucAux+ <*> getBuiltinName builtinNatMinus+ <*> getBuiltinName builtinTrue+ <*> getBuiltinName builtinFalse+ return $ runS $ simplify kit t++simplify :: FunctionKit -> TTerm -> S TTerm+simplify FunctionKit{..} = simpl+ where+ simpl t = rewrite' t >>= \ t -> case t of++ TDef{} -> pure t+ TPrim{} -> pure t++ TVar x -> do+ v <- lookupVar x+ pure $ if isAtomic v then v else t++ TApp (TDef f) [TLit (LitNat _ 0), m, n, m']+ -- div/mod are equivalent to quot/rem on natural numbers.+ | m == m', Just f == divAux -> simpl $ tOp PQuot n (tPlusK 1 m)+ | m == m', Just f == modAux -> simpl $ tOp PRem n (tPlusK 1 m)++ TApp (TPrim _) _ -> pure t -- taken care of by rewrite'++ TApp f es -> do+ f <- simpl f+ es <- traverse simpl es+ maybeMinusToPrim f es+ TLam b -> TLam <$> underLam (simpl b)+ TLit{} -> pure t+ TCon{} -> pure t+ TLet e b -> do+ e <- simpl e+ tLet e <$> underLet e (simpl b)++ TCase x t d bs -> do+ v <- lookupVar x+ let (lets, u) = letView v+ case u of -- TODO: also for literals+ _ | Just (c, as) <- conView u -> simpl $ matchCon lets c as d bs+ TCase y t1 d1 bs1 -> simpl $ mkLets lets $ TCase y t1 (distrDef case1 d1) $+ map (distrCase case1) bs1+ where+ -- Γ x Δ -> Γ _ Δ Θ y, where x maps to y and Θ are the lets+ n = length lets+ rho = liftS (x + n + 1) (raiseS 1) `composeS`+ singletonS (x + n + 1) (TVar 0) `composeS`+ raiseS (n + 1)+ case1 = applySubst rho (TCase x t d bs)++ distrDef v d | isUnreachable d = tUnreachable+ | otherwise = tLet d v++ distrCase v (TACon c a b) = TACon c a $ TLet b $ raiseFrom 1 a v+ distrCase v (TALit l b) = TALit l $ TLet b v+ distrCase v (TAGuard g b) = TAGuard g $ TLet b v++ _ -> do+ d <- simpl d+ bs <- traverse (simplAlt x) bs+ tCase x t d bs++ TUnit -> pure t+ TSort -> pure t+ TErased -> pure t+ TError{} -> pure t++ conView (TCon c) = Just (c, [])+ conView (TApp (TCon c) as) = Just (c, as)+ conView e = Nothing++ letView (TLet e b) = first (e :) $ letView b+ letView e = ([], e)++ mkLets es b = foldr TLet b es++ matchCon _ _ _ d [] = d+ matchCon lets c as d (TALit{} : bs) = matchCon lets c as d bs+ matchCon lets c as d (TAGuard{} : bs) = matchCon lets c as d bs+ matchCon lets c as d (TACon c' a b : bs)+ | c == c' = flip (foldr TLet) lets $ mkLet 0 as (raiseFrom a (length lets) b)+ | otherwise = matchCon lets c as d bs+ where+ mkLet _ [] b = b+ mkLet i (a : as) b = TLet (raise i a) $ mkLet (i + 1) as b++ simplPrim (TApp f@TPrim{} args) = do+ args <- mapM simpl args+ inlined <- mapM inline args+ let u = TApp f args+ v = simplPrim' (TApp f inlined)+ pure $ if v `betterThan` u then v else u+ where+ inline (TVar x) = do+ v <- lookupVar x+ if v == TVar x then pure v else inline v+ inline (TApp f@TPrim{} args) = TApp f <$> mapM inline args+ inline u@(TLet _ (TCase 0 _ _ _)) = pure u+ inline (TLet e b) = inline (subst 0 e b)+ inline u = pure u+ simplPrim t = pure t++ simplPrim' :: TTerm -> TTerm+ simplPrim' (TApp (TPrim PLt) [u, v])+ | Just (PAdd, k, u) <- constArithView u,+ Just (PAdd, j, v) <- constArithView v,+ k == j = tOp PLt u v+ simplPrim' (TApp (TPrim PEq) [u, v])+ | Just (op1, k, u) <- constArithView u,+ Just (op2, j, v) <- constArithView v,+ op1 == op2, k == j,+ elem op1 [PAdd, PSub] = tOp PEq u v+ simplPrim' (TApp (TPrim PMul) [u, v])+ | Just 0 <- intView u = tInt 0+ | Just 0 <- intView v = tInt 0+ simplPrim' (TApp (TPrim op) [u, v])+ | Just u <- negView u,+ Just v <- negView v,+ elem op [PMul, PQuot] = tOp op u v+ | Just u <- negView u,+ elem op [PMul, PQuot] = simplArith $ tOp PSub (tInt 0) (tOp op u v)+ | Just v <- negView v,+ elem op [PMul, PQuot] = simplArith $ tOp PSub (tInt 0) (tOp op u v)+ simplPrim' (TApp (TPrim PRem) [u, v])+ | Just u <- negView u = simplArith $ tOp PSub (tInt 0) (tOp PRem u (unNeg v))+ | Just v <- negView v = tOp PRem u v+ simplPrim' (TApp f@(TPrim op) [u, v]) = simplArith $ TApp f [simplPrim' u, simplPrim' v]+ simplPrim' u = u++ unNeg u | Just v <- negView u = v+ | otherwise = u++ negView (TApp (TPrim PSub) [a, b])+ | Just 0 <- intView a = Just b+ negView _ = Nothing++ -- Count arithmetic operations+ betterThan u v = operations u <= operations v+ where+ operations (TApp (TPrim _) [a, b]) = 1 + operations a + operations b+ operations TVar{} = 0+ operations TLit{} = 0+ operations _ = 1000++ rewrite' t = rewrite =<< simplPrim t++ constArithView :: TTerm -> Maybe (TPrim, Integer, TTerm)+ constArithView (TApp (TPrim op) [TLit (LitNat _ k), u])+ | elem op [PAdd, PSub] = Just (op, k, u)+ constArithView (TApp (TPrim op) [u, TLit (LitNat _ k)])+ | op == PAdd = Just (op, k, u)+ | op == PSub = Just (PAdd, -k, u)+ constArithView _ = Nothing++ simplAlt x (TACon c a b) = TACon c a <$> underLams a (maybeAddRewrite (x + a) conTerm $ simpl b)+ where conTerm = mkTApp (TCon c) [TVar i | i <- reverse $ take a [0..]]+ simplAlt x (TALit l b) = TALit l <$> maybeAddRewrite x (TLit l) (simpl b)+ simplAlt x (TAGuard g b) = TAGuard <$> simpl g <*> simpl b++ maybeAddRewrite x rhs cont = do+ v <- lookupVar x+ case v of+ TVar y | x == y -> cont+ _ -> addRewrite v rhs cont++ isTrue (TCon c) = Just c == true+ isTrue _ = False++ isFalse (TCon c) = Just c == false+ isFalse _ = False++ maybeMinusToPrim f@(TDef minus) es@[a, b]+ | Just minus == natMinus = do+ b_a <- rewrite' (tOp PLt b a)+ b_sa <- rewrite' (tOp PLt b (tOp PAdd (tInt 1) a))+ a_b <- rewrite' (tOp PLt a b)+ if isTrue b_a || isTrue b_sa || isFalse b_a && isFalse a_b+ then pure $ tOp PSub a b+ else tApp f es++ maybeMinusToPrim f es = tApp f es++ tLet (TVar x) b = subst 0 (TVar x) b+ tLet e b = TLet e b++ tCase :: Int -> CaseType -> TTerm -> [TAlt] -> S TTerm+ tCase x t d bs+ | isUnreachable d =+ case reverse bs' of+ [] -> pure d+ TALit _ b : as -> pure $ tCase' x t b (reverse as)+ TAGuard _ b : as -> pure $ tCase' x t b (reverse as)+ TACon c a b : _ -> pure $ tCase' x t d bs'+ | otherwise = pure $ TCase x t d bs'+ where+ bs' = filter (not . isUnreachable) bs++ tCase' x t d [] = d+ tCase' x t d bs = TCase x t d bs++ tApp :: TTerm -> [TTerm] -> S TTerm+ tApp (TLet e b) es = TLet e <$> underLet e (tApp b (raise 1 es))+ tApp (TCase x t d bs) es = do+ d <- tApp d es+ bs <- mapM (`tAppAlt` es) bs+ simpl $ TCase x t d bs -- will resimplify branches+ tApp (TVar x) es = do+ v <- lookupVar x+ case v of+ _ | v /= TVar x && isAtomic v -> tApp v es+ TLam{} -> tApp v es -- could blow up the code+ _ -> pure $ mkTApp (TVar x) es+ tApp f [] = pure f+ tApp (TLam b) (TVar i : es) = tApp (subst 0 (TVar i) b) es+ tApp (TLam b) (e : es) = tApp (TLet e b) es+ tApp f es = pure $ TApp f es++ tAppAlt (TACon c a b) es = TACon c a <$> underLams a (tApp b (raise a es))+ tAppAlt (TALit l b) es = TALit l <$> tApp b es+ tAppAlt (TAGuard g b) es = TAGuard g <$> tApp b es++ isAtomic v = case v of+ TVar{} -> True+ TCon{} -> True+ TPrim{} -> True+ TDef{} -> True+ TLit{} -> True+ TSort{} -> True+ TErased{} -> True+ TError{} -> True+ _ -> False++type Arith = (Integer, [Atom])++data Atom = Pos TTerm | Neg TTerm+ deriving (Show, Eq, Ord)++aNeg :: Atom -> Atom+aNeg (Pos a) = Neg a+aNeg (Neg a) = Pos a++aCancel :: [Atom] -> [Atom]+aCancel (a : as)+ | elem (aNeg a) as = aCancel (delete (aNeg a) as)+ | otherwise = a : aCancel as+aCancel [] = []++sortR :: Ord a => [a] -> [a]+sortR = sortBy (flip compare)++aAdd :: Arith -> Arith -> Arith+aAdd (a, xs) (b, ys) = (a + b, aCancel $ sortR $ xs ++ ys)++aSub :: Arith -> Arith -> Arith+aSub (a, xs) (b, ys) = (a - b, aCancel $ sortR $ xs ++ map aNeg ys)++fromArith :: Arith -> TTerm+fromArith (n, []) = tInt n+fromArith (0, xs)+ | (ys, Pos a : zs) <- break isPos xs = foldl addAtom a (ys ++ zs)+fromArith (n, xs)+ | n < 0, (ys, Pos a : zs) <- break isPos xs =+ tOp PSub (foldl addAtom a (ys ++ zs)) (tInt (-n))+fromArith (n, xs) = foldl addAtom (tInt n) xs++isPos :: Atom -> Bool+isPos Pos{} = True+isPos Neg{} = False++addAtom :: TTerm -> Atom -> TTerm+addAtom t (Pos a) = tOp PAdd t a+addAtom t (Neg a) = tOp PSub t a++toArith :: TTerm -> Arith+toArith t | Just n <- intView t = (n, [])+toArith (TApp (TPrim PAdd) [a, b]) = aAdd (toArith a) (toArith b)+toArith (TApp (TPrim PSub) [a, b]) = aSub (toArith a) (toArith b)+toArith t = (0, [Pos t])++simplArith :: TTerm -> TTerm+simplArith = fromArith . toArith+
+ src/full/Agda/Compiler/Treeless/Subst.hs view
@@ -0,0 +1,124 @@+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}++module Agda.Compiler.Treeless.Subst where++import Control.Applicative+import qualified Data.Map as Map+import Data.Map (Map)+import Data.Monoid+import Data.Maybe++import Agda.Syntax.Treeless+import Agda.Syntax.Internal (Substitution'(..))+import Agda.TypeChecking.Substitute++instance DeBruijn TTerm where+ debruijnVar = TVar+ debruijnView (TVar i) = Just i+ debruijnView _ = Nothing++instance Subst TTerm TTerm where+ applySubst IdS t = t+ applySubst rho t = case t of+ TDef{} -> t+ TLit{} -> t+ TCon{} -> t+ TPrim{} -> t+ TUnit{} -> t+ TSort{} -> t+ TErased{} -> t+ TError{} -> t+ TVar i -> lookupS rho i+ TApp f ts -> tApp (applySubst rho f) (applySubst rho ts)+ TLam b -> TLam (applySubst (liftS 1 rho) b)+ TLet e b -> TLet (applySubst rho e) (applySubst (liftS 1 rho) b)+ TCase i t d bs ->+ case applySubst rho (TVar i) of+ TVar j -> TCase j t (applySubst rho d) (applySubst rho bs)+ e -> TLet e $ TCase 0 t (applySubst rho' d) (applySubst rho' bs)+ where rho' = wkS 1 rho+ where+ tApp (TPrim PSeq) [TErased, b] = b+ tApp f ts = TApp f ts++instance Subst TTerm TAlt where+ applySubst rho (TACon c i b) = TACon c i (applySubst (liftS i rho) b)+ applySubst rho (TALit l b) = TALit l (applySubst rho b)+ applySubst rho (TAGuard g b) = TAGuard (applySubst rho g) (applySubst rho b)++newtype UnderLambda = UnderLambda Any+ deriving (Eq, Ord, Show, Monoid)++newtype SeqArg = SeqArg All+ deriving (Eq, Ord, Show, Monoid)++data Occurs = Occurs Int UnderLambda SeqArg+ deriving (Eq, Ord, Show)++once :: Occurs+once = Occurs 1 mempty (SeqArg $ All False)++inSeq :: Occurs -> Occurs+inSeq (Occurs n l _) = Occurs n l mempty++underLambda :: Occurs -> Occurs+underLambda o = o <> Occurs 0 (UnderLambda $ Any True) mempty++instance Monoid Occurs where+ mempty = Occurs 0 mempty mempty+ mappend (Occurs a k s) (Occurs b l t) = Occurs (a + b) (k <> l) (s <> t)++class HasFree a where+ freeVars :: a -> Map Int Occurs++freeIn :: HasFree a => Int -> a -> Bool+freeIn i x = Map.member i (freeVars x)++occursIn :: HasFree a => Int -> a -> Occurs+occursIn i x = fromMaybe mempty $ Map.lookup i (freeVars x)++instance HasFree Int where+ freeVars x = Map.singleton x once++instance HasFree a => HasFree [a] where+ freeVars xs = Map.unionsWith mappend $ map freeVars xs++instance (HasFree a, HasFree b) => HasFree (a, b) where+ freeVars (x, y) = Map.unionWith mappend (freeVars x) (freeVars y)++data Binder a = Binder Int a++instance HasFree a => HasFree (Binder a) where+ freeVars (Binder 0 x) = freeVars x+ freeVars (Binder k x) = Map.filterWithKey (\ k _ -> k >= 0) $ Map.mapKeysMonotonic (subtract k) $ freeVars x++newtype InSeq a = InSeq a++instance HasFree a => HasFree (InSeq a) where+ freeVars (InSeq x) = inSeq <$> freeVars x++instance HasFree TTerm where+ freeVars t = case t of+ TDef{} -> Map.empty+ TLit{} -> Map.empty+ TCon{} -> Map.empty+ TPrim{} -> Map.empty+ TUnit{} -> Map.empty+ TSort{} -> Map.empty+ TErased{} -> Map.empty+ TError{} -> Map.empty+ TVar i -> freeVars i+ TApp (TPrim PSeq) [TVar x, b] -> freeVars (InSeq x, b)+ TApp f ts -> freeVars (f, ts)+ TLam b -> underLambda <$> freeVars (Binder 1 b)+ TLet e b -> freeVars (e, Binder 1 b)+ TCase i _ d bs -> freeVars (i, (d, bs))++instance HasFree TAlt where+ freeVars a = case a of+ TACon _ i b -> freeVars (Binder i b)+ TALit _ b -> freeVars b+ TAGuard g b -> freeVars (g, b)+
+ src/full/Agda/Compiler/Treeless/Uncase.hs view
@@ -0,0 +1,69 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE PatternGuards #-}+module Agda.Compiler.Treeless.Uncase (caseToSeq) where++import Control.Applicative+import Data.Monoid++import Agda.Syntax.Treeless+import Agda.Syntax.Literal+import Agda.TypeChecking.Substitute+import Agda.Compiler.Treeless.Subst+import Agda.Compiler.Treeless.Compare++import Agda.Utils.Impossible+#include "undefined.h"++caseToSeq :: Monad m => TTerm -> m TTerm+caseToSeq t = return $ uncase t++uncase :: TTerm -> TTerm+uncase t = case t of+ TVar{} -> t+ TPrim{} -> t+ TDef{} -> t+ TApp f es -> tApp (uncase f) (map uncase es)+ TLam b -> TLam $ uncase b+ TLit{} -> t+ TCon{} -> t+ TLet e b -> tLet (uncase e) (uncase b)+ TCase x t d bs -> doCase x t (uncase d) (map uncaseAlt bs)+ TUnit{} -> t+ TSort{} -> t+ TErased{} -> t+ TError{} -> t+ where+ uncaseAlt (TACon c a b) = TACon c a $ uncase b+ uncaseAlt (TALit l b) = TALit l $ uncase b+ uncaseAlt (TAGuard g b) = TAGuard (uncase g) (uncase b)++ doCase x t d bs+ | fv > 0 = fallback -- can't do it for constructors with arguments+ | all (equalTo x u) bs = tApp (TPrim PSeq) [TVar x, u]+ | otherwise = fallback+ where+ fallback = TCase x t d bs+ (fv, u)+ | isUnreachable d =+ case last bs of+ TACon _ a b -> (a, b)+ TALit l b -> (0, b)+ TAGuard _ b -> (0, b)+ | otherwise = (0, d)++ equalTo :: Int -> TTerm -> TAlt -> Bool+ equalTo x t (TACon c a b) = a == 0 && equalTerms (subst x (TCon c) t) (subst x (TCon c) b)+ equalTo x t (TALit l b) = equalTerms (subst x (TLit l) t) (subst x (TLit l) b)+ equalTo x t (TAGuard _ b) = equalTerms t b++ -- There's no sense binding an expression just to seq on it.+ tLet e b =+ case occursIn 0 b of+ Occurs 0 _ _ -> strengthen __IMPOSSIBLE__ b+ Occurs _ _ (SeqArg (All True)) -> subst 0 TErased b -- this will get rid of the seq+ _ -> TLet e b++ -- Primitive operations are already strict+ tApp (TPrim PSeq) [_, b@(TApp (TPrim op) _)]+ | op `elem` [PAdd, PSub, PMul, PLt, PEq, PGeq, PRem, PQuot] = b+ tApp f es = TApp f es
+ src/full/Agda/Compiler/Treeless/Unused.hs view
@@ -0,0 +1,78 @@++module Agda.Compiler.Treeless.Unused+ ( usedArguments+ , stripUnusedArguments+ ) where++import Control.Arrow (first)+import Control.Applicative+import qualified Data.Set as Set+import Data.Maybe++import Agda.Syntax.Treeless+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Substitute++import Agda.Compiler.Treeless.Subst+import Agda.Compiler.Treeless.Pretty++usedArguments :: QName -> TTerm -> TCM [Bool]+usedArguments q t = computeUnused q b (replicate n False)+ where (n, b) = lamView t++computeUnused :: QName -> TTerm -> [Bool] -> TCM [Bool]+computeUnused q t used = do+ reportSLn "treeless.opt.unused" 50 $ "Unused approximation for " ++ show q ++ ": " +++ unwords [ if u then [x] else "_" | (x, u) <- zip ['a'..] used ]+ setCompiledArgUse q used+ fv <- go t+ let used' = [ Set.member i fv | (i, _) <- reverse $ zip [0..] used ]+ if used == used' then return used'+ else computeUnused q t used'+ where+ go t = case t of+ TVar x -> pure $ Set.singleton x+ TPrim{} -> pure Set.empty+ TDef{} -> pure Set.empty+ TLit{} -> pure Set.empty+ TCon{} -> pure Set.empty++ TApp (TDef f) ts -> do+ used <- getCompiledArgUse f+ Set.unions <$> sequence [ go t | (t, True) <- zip ts $ used ++ repeat True ]++ TApp f ts -> Set.unions <$> mapM go (f : ts)+ TLam b -> underBinder <$> go b+ TLet e b -> Set.union <$> go e <*> (underBinder <$> go b)+ TCase x _ d bs -> Set.insert x . Set.unions <$> ((:) <$> go d <*> mapM goAlt bs)+ TUnit{} -> pure Set.empty+ TSort{} -> pure Set.empty+ TErased{} -> pure Set.empty+ TError{} -> pure Set.empty++ goAlt (TALit _ b) = go b+ goAlt (TAGuard g b) = Set.union <$> go g <*> go b+ goAlt (TACon _ a b) = underBinders a <$> go b++ underBinder = underBinders 1+ underBinders 0 = id+ underBinders n = Set.filter (>= 0) . Set.mapMonotonic (subtract n)++stripUnusedArguments :: [Bool] -> TTerm -> TTerm+stripUnusedArguments used t = unlamView m $ applySubst rho b+ where+ (n, b) = lamView t+ m = length $ filter id used'+ used' = reverse $ take n $ used ++ repeat True+ rho = computeSubst used'+ computeSubst (False : bs) = TErased :# computeSubst bs+ computeSubst (True : bs) = liftS 1 $ computeSubst bs+ computeSubst [] = idS++lamView :: TTerm -> (Int, TTerm)+lamView (TLam b) = first succ $ lamView b+lamView t = (0, t)++unlamView :: Int -> TTerm -> TTerm+unlamView 0 t = t+unlamView n t = TLam $ unlamView (n - 1) t
+ src/full/Agda/Compiler/UHC/Bridge.hs view
@@ -0,0 +1,294 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE EmptyDataDecls #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE DeriveDataTypeable #-}++-- | Exports the UHC API, and provides dummy+-- definitions if the backend is disabled.+module Agda.Compiler.UHC.Bridge+ ( uhcBackendEnabled++ -- UHC.Util.Pretty+ , PP_Doc+ , putPPFile+ , disp+ , pp++ -- UHC.Util.Serialize+ , Serialize+ , putSerializeFile+ , serialize+ , unserialize++ -- UHC.Light.Compiler.Base.API+ , EHCOpts+ , defaultEHCOpts+ , HsName+ , CTag+ , mkHsName+ , mkHsName1+ , mkUniqueHsName++ -- UHC.Light.Compiler.Core.API+ , CModule+ , CImport+ , CExport+ , CDeclMeta+ , CDataCon+ , CExpr+ , CBind+ , CAlt+ , CPat+ , CPatFld+-- , CPatRest++ , mkUnit+ , mkInt+ , mkInteger+ , mkChar+ , mkString+ , mkError+ , mkUndefined+ , mkVar+ , mkLet1Plain+ , mkLet1Strict+ , mkLetRec+ , mkLam+ , mkApp+ , mkBind1+ , mkBind1Nm1+ , mkCTag+ , destructCTag+ , ctagUnit+ , ctagTrue+ , ctagFalse+ , ctagCons+ , ctagNil+ , mkCase+ , mkAlt+ , mkPatCon+ , mkPatRestEmpty+ , mkPatFldBind+ , mkTagTup+ , mkModule+ , mkImport+ , mkExport+ , mkMetaData+ , mkMetaDataCon+ , mkMetaDataConFromCTag+ , mkMain+ , parseExpr+ , printModule+ ) where++#include "undefined.h"+import Agda.Utils.Impossible++import Data.Binary.Put+import Data.Binary.Get+import Data.Typeable++#if defined(UHC_BACKEND)+import UHC.Util.Pretty+import UHC.Util.Serialize+import UHC.Util.ParseUtils+import UHC.Util.ScanUtils+import UU.Scanner.Position++import UHC.Light.Compiler.Core.API+import UHC.Light.Compiler.Base.API+#else++-- UHC.Util.Pretty+type PP_Doc = String++class Show a => PP a where+ pp :: a -> PP_Doc++instance PP CExpr where+ pp CExpr_DUMMY = "DUMMY - UHC backend is disabled"++putPPFile :: String -> PP_Doc -> Int -> IO ()+putPPFile = __IMPOSSIBLE__++disp :: PP_Doc -> Int -> ShowS+disp s _ = (s ++)++-- UHC.Util.Serialize+class Serialize a where++putSerializeFile :: FilePath -> a -> IO ()+putSerializeFile = __IMPOSSIBLE__++serialize :: x -> Put+serialize = __IMPOSSIBLE__++unserialize :: Get x+unserialize = __IMPOSSIBLE__++-- UHC.Light.Compiler.Base.API++data EHCOpts+defaultEHCOpts :: EHCOpts+defaultEHCOpts = __IMPOSSIBLE__++data HsName deriving (Typeable)+deriving instance Eq HsName+deriving instance Ord HsName+deriving instance Show HsName+instance Serialize HsName where++data CTag deriving (Typeable)+deriving instance Eq CTag+deriving instance Ord CTag+deriving instance Show CTag+instance Serialize CTag where++mkHsName :: [String] -> String -> HsName+mkHsName = __IMPOSSIBLE__++mkHsName1 :: String -> HsName+mkHsName1 = __IMPOSSIBLE__++mkUniqueHsName :: String -> [String] -> String -> HsName+mkUniqueHsName = __IMPOSSIBLE__++-- UHC.Light.Compiler.Core.API+data CModule+instance Serialize CModule+data CImport+data CExport+data CDeclMeta+data CDataCon+-- dummy to use as parse result for core pragmas+data CExpr = CExpr_DUMMY deriving (Eq, Ord, Show, Typeable)+instance Serialize CExpr where+data CBind+data CAlt+data CPat+data CPatFld+data CPatRest++mkUnit :: EHCOpts -> CExpr+mkUnit = __IMPOSSIBLE__++mkInt :: EHCOpts -> Int -> CExpr+mkInt = __IMPOSSIBLE__++mkInteger :: EHCOpts -> Integer -> CExpr+mkInteger = __IMPOSSIBLE__++mkChar :: Char -> CExpr+mkChar = __IMPOSSIBLE__++mkString :: EHCOpts -> String -> CExpr+mkString = __IMPOSSIBLE__++mkError :: EHCOpts -> String -> CExpr+mkError = __IMPOSSIBLE__++mkUndefined :: EHCOpts -> CExpr+mkUndefined = __IMPOSSIBLE__++mkVar :: HsName -> CExpr+mkVar = __IMPOSSIBLE__++mkLet1Plain :: HsName -> CExpr -> CExpr -> CExpr+mkLet1Plain = __IMPOSSIBLE__++mkLet1Strict :: HsName -> CExpr -> CExpr -> CExpr+mkLet1Strict = __IMPOSSIBLE__++mkLetRec :: [CBind] -> CExpr -> CExpr+mkLetRec = __IMPOSSIBLE__++mkLam :: [HsName] -> CExpr -> CExpr+mkLam = __IMPOSSIBLE__++mkApp :: CExpr -> [CExpr] -> CExpr+mkApp = __IMPOSSIBLE__++mkBind1 :: HsName -> CExpr -> CBind+mkBind1 = __IMPOSSIBLE__++mkBind1Nm1 :: HsName -> CBind+mkBind1Nm1 = __IMPOSSIBLE__++mkCTag :: HsName -> HsName -> Int -> Int -> CTag+mkCTag = __IMPOSSIBLE__++destructCTag :: a -> (HsName -> HsName -> Int -> Int -> a) -> CTag -> a+destructCTag = __IMPOSSIBLE__++ctagUnit :: CTag+ctagUnit = __IMPOSSIBLE__++ctagTrue :: EHCOpts -> CTag+ctagTrue = __IMPOSSIBLE__++ctagFalse :: EHCOpts -> CTag+ctagFalse = __IMPOSSIBLE__++ctagCons :: EHCOpts -> CTag+ctagCons = __IMPOSSIBLE__++ctagNil :: EHCOpts -> CTag+ctagNil = __IMPOSSIBLE__++mkCase :: CExpr -> [CAlt] -> CExpr+mkCase = __IMPOSSIBLE__++mkAlt :: CPat -> CExpr -> CAlt+mkAlt = __IMPOSSIBLE__++mkPatCon :: CTag -> CPatRest -> [CPatFld] -> CPat+mkPatCon = __IMPOSSIBLE__++mkPatRestEmpty :: CPatRest+mkPatRestEmpty = __IMPOSSIBLE__++mkPatFldBind :: (HsName, CExpr) -> CBind -> CPatFld+mkPatFldBind = __IMPOSSIBLE__++mkTagTup :: CTag -> [CExpr] -> CExpr+mkTagTup = __IMPOSSIBLE__++mkModule :: HsName -> [CExport] -> [CImport] -> [CDeclMeta] -> CExpr -> CModule+mkModule = __IMPOSSIBLE__++mkImport :: HsName -> CImport+mkImport = __IMPOSSIBLE__++mkExport :: HsName -> CExport+mkExport = __IMPOSSIBLE__++mkMetaData :: HsName -> [CDataCon] -> CDeclMeta+mkMetaData = __IMPOSSIBLE__++mkMetaDataCon :: HsName -> Int -> Int -> CDataCon+mkMetaDataCon = __IMPOSSIBLE__++mkMetaDataConFromCTag :: CTag -> Maybe CDataCon+mkMetaDataConFromCTag = __IMPOSSIBLE__++mkMain :: HsName -> CExpr+mkMain = __IMPOSSIBLE__++parseExpr :: EHCOpts -> String -> Either [String] CExpr+-- just always succeed, as we don't want to fail on UHC pragmas+-- if the backend is disabled+parseExpr _ _ = Right CExpr_DUMMY++printModule :: EHCOpts -> CModule -> PP_Doc+printModule = __IMPOSSIBLE__++#endif++++uhcBackendEnabled :: Bool+#if defined(UHC_BACKEND)+uhcBackendEnabled = True+#else+uhcBackendEnabled = False+#endif
+ src/full/Agda/Compiler/UHC/CompileState.hs view
@@ -0,0 +1,247 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE UndecidableInstances #-}++-- | Contains the state monad that the compiler works in and some functions+-- for tampering with the state.+module Agda.Compiler.UHC.CompileState+ ( CompileT+ , Compile+ , runCompileT+ , CoreMeta++ , addExports+ , addMetaCon+ , addMetaData+ , getExports+ , getDeclMetas++ , getCoreName+ , getCoreName1+ , getConstrCTag+ , getConstrFun+ , moduleNameToCoreName+ , moduleNameToCoreNameParts+ , freshLocalName++ , conArityAndPars+ , dataRecCons+ )+where++import Control.Monad.State+import Control.Monad.Reader.Class+import Data.List+import qualified Data.Map as Map+import Data.Maybe+import Data.Char++#if __GLASGOW_HASKELL__ <= 708+import Control.Applicative+import Data.Monoid+#endif++import Agda.Compiler.UHC.MagicTypes+import Agda.Syntax.Internal+import Agda.Syntax.Common+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Monad.Builtin hiding (coinductionKit')+import qualified Agda.TypeChecking.Monad as TM+import Agda.Compiler.UHC.Bridge+import Agda.Compiler.UHC.Pragmas.Base+import Agda.Compiler.Common++import Agda.Utils.Lens++#include "undefined.h"+import Agda.Utils.Impossible++import Data.Time.Clock.POSIX++getTime :: IO Integer+getTime = round <$> getPOSIXTime++data CoreMeta = CoreMeta+ { coreMetaData :: Map.Map QName ( [CDataCon] -> CDeclMeta )+ , coreMetaCon :: Map.Map QName [CDataCon] -- map data name to constructors+ , coreExports :: [CExport] -- ^ UHC core exports+ }++instance Monoid CoreMeta where+ mempty = CoreMeta mempty mempty []+ mappend (CoreMeta a b c) (CoreMeta r s t) =+ CoreMeta (Map.union a r) (Map.unionWith (++) b s) (c ++ t)++-- | Stuff we need in our compiler+data CompileState = CompileState+ { coreMeta :: CoreMeta+ , nameSupply :: Integer+ }++-- | Compiler monad+newtype CompileT m a = CompileT { unCompileT :: StateT CompileState m a }+ deriving (Monad, MonadIO, MonadTrans, Applicative, Functor)++type Compile = CompileT TCM++-- | Used to run the Agda-to-UHC Core transformation.+-- During this transformation,+runCompileT :: MonadIO m =>+ ModuleName -- ^ The module to compile.+ -> CompileT m a+ -> m a+runCompileT amod comp = do+ (result, state') <- runStateT (unCompileT comp) initial++ return result+ where initial = CompileState+ { coreMeta = mempty+ , nameSupply = 0+ }++appendCoreMeta :: Monad m => CoreMeta -> CompileT m ()+appendCoreMeta cm =+ CompileT $ modify (\s -> s { coreMeta = cm `mappend` coreMeta s })++addExports :: Monad m => [HsName] -> CompileT m ()+addExports = addExports' . map mkExport++addExports' :: Monad m => [CExport] -> CompileT m ()+addExports' nms = appendCoreMeta (mempty { coreExports = nms })++addMetaCon :: QName -> CDataCon -> Compile ()+addMetaCon q c = do+ dtNm <- conData . theDef <$> lift (getConstInfo q)+ appendCoreMeta (mempty { coreMetaCon = Map.singleton dtNm [c] })++addMetaData :: QName -> ([CDataCon] -> CDeclMeta) -> Compile ()+addMetaData q d =+ appendCoreMeta (mempty { coreMetaData = Map.singleton q d })++getExports :: Compile [CExport]+getExports = CompileT $ gets (coreExports . coreMeta)++getDeclMetas :: Compile [CDeclMeta]+getDeclMetas = CompileT $ do+ cons <- gets (coreMetaCon . coreMeta)+ dts <- gets (coreMetaData . coreMeta)+ return $ map (\(dtNm, f) -> f (Map.findWithDefault [] dtNm cons)) (Map.toList dts)++freshLocalName :: Monad m => CompileT m HsName+freshLocalName = CompileT $ do+ i <- gets nameSupply+ modify (\s -> s { nameSupply = i + 1 } )+ return $ mkUniqueHsName "nl.uu.agda.fresh-local-name" [] ("x" ++ show i)++-----------------+-- Constructors+-----------------+++-- | Returns the CTag for a constructor. Not defined+-- for Sharp and magic __UNIT__ constructor.+getConstrCTag :: QName -> Compile CTag+getConstrCTag q = do+ def <- lift $ getConstInfo q+ (arity, _) <- lift $ conArityAndPars q+ case compiledCore $ defCompiledRep def of+ Nothing -> do+ let dtQ = conData $ theDef def+ -- get tag, which is the index of current con in datatype con list+ tag <- fromJust . elemIndex q . dataRecCons . theDef <$> lift (getConstInfo dtQ)+ mkCTag <$> getCoreName dtQ <*> (getCoreName q) <*> pure tag <*> pure arity+ Just (CrConstr crCon) -> do+ return $ coreConstrToCTag crCon arity+ _ -> __IMPOSSIBLE__+++-- | Returns the expression to use to build a value of the given datatype/constructor.+getConstrFun :: QName -> Compile HsName+getConstrFun q = do+ def <- lift $ getConstInfo q+ case compiledCore $ defCompiledRep def of+ Nothing -> getCoreName q+ Just (CrConstr crCon) ->+ return $+ destructCTag builtinUnitCtor (\_ con _ _ -> con)+ (coreConstrToCTag crCon 0) -- Arity doesn't matter here, as we immediately destruct the ctag again!+ _ -> __IMPOSSIBLE__++dataRecCons :: Defn -> [QName]+dataRecCons r@(Record{}) = [recCon r]+dataRecCons d@(Datatype{}) = dataCons d+dataRecCons _ = __IMPOSSIBLE__+++-----------------+-- Names+-----------------++-- All agda modules live in their own namespace in Agda.XXX, to avoid+-- clashes with existing haskell modules. (e.g. Data.List) with confusing error messages.+-- If we don't wan't this, we would have to avoid loading the HS base libraries+-- or would need package-specific imports. As we don't have this in UHC right now,+-- this is the best we can do.+moduleNameToCoreNameParts :: ModuleName -> [String]+moduleNameToCoreNameParts modNm = "Agda" : (map show $ mnameToList modNm)++moduleNameToCoreName :: ModuleName -> HsName+moduleNameToCoreName modNm = mkHsName (init nmParts) (last nmParts)+ where nmParts = moduleNameToCoreNameParts modNm++getCoreName :: QName -> Compile HsName+getCoreName qnm = CompileT $ do+ lift $ getCoreName1 qnm++getCoreName1 :: QName -> TCM HsName+getCoreName1 qnm = do++ modNm <- topLevelModuleName (qnameModule qnm)++ def <- theDef <$> getConstInfo qnm++ let locName = intercalate "_" $ map show $ either id id $ unqualifyQ modNm qnm+ modParts = moduleNameToCoreNameParts modNm+ identName = locName ++ "_" ++ show idnum+ identName' = case def of+ Datatype{} -> capitalize identName+ Record{} -> capitalize identName+ Constructor{} -> capitalize identName+ _ -> identName++ return $ mkUniqueHsName "nl.uu.agda.top-level-def" modParts identName+ where+ idnum = let (NameId x _) = nameId $ qnameName qnm in x+ -- we don't really care about the original name, we just keep it for easier debugging+ capitalize (x:xs) = (toUpper x):xs+ capitalize _ = __IMPOSSIBLE__++-- | Returns the names inside a QName, with the module prefix stripped away.+-- If the name is not module-qualified, returns the full name as left. (TODO investigate when this happens)+unqualifyQ :: ModuleName -> QName -> Either [Name] [Name]+unqualifyQ modNm qnm =+ case stripPrefix modNs qnms of+ -- not sure when the name doesn't have a module prefix... just force generation of a name for the time being+ Nothing -> Left qnms+ Just nm -> Right nm+ where+ modNs = mnameToList modNm+ qnms = qnameToList qnm+++++instance MonadReader r m => MonadReader r (CompileT m) where+ ask = lift ask+ local f (CompileT x) = CompileT $ local f x++instance MonadState s m => MonadState s (CompileT m) where+ get = lift get+ put = lift . put++instance MonadTCM m => MonadTCM (CompileT m) where+ liftTCM = lift . TM.liftTCM
+ src/full/Agda/Compiler/UHC/Compiler.hs view
@@ -0,0 +1,209 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DoAndIfThenElse #-}++-- | UHC compiler backend, main entry point.++-- In the long term, it would be nice if we could use e.g. shake to build individual Agda modules. The problem with that is that+-- some parts need to be in the TCM Monad, which doesn't easily work in shake. We would need a way to extract the information+-- out of the TCM monad, so that we can pass it to the compilation function without pulling in the TCM Monad. Another minor+-- problem might be error reporting?+module Agda.Compiler.UHC.Compiler(compilerMain) where++#if __GLASGOW_HASKELL__ <= 708+import Control.Applicative+import Data.Monoid+#endif++import Control.Monad+import Control.Monad.Reader+import Control.Monad.State+import qualified Data.ByteString.Lazy as BS+import qualified Data.Map as M+import Data.Maybe++import System.Directory ( canonicalizePath, createDirectoryIfMissing+ , setCurrentDirectory+ , doesDirectoryExist+ , getDirectoryContents, copyFile+ )+import Data.List as L+import System.Exit+import System.FilePath hiding (normalise)++import Paths_Agda+import Agda.Compiler.CallCompiler+import Agda.Interaction.FindFile+import Agda.Interaction.Options+import Agda.Interaction.Imports+import qualified Agda.Syntax.Concrete.Name as CN+import Agda.Syntax.Internal hiding (Term(..))+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Serialise+import Agda.Utils.FileName+import Agda.Utils.Pretty+import qualified Agda.Utils.HashMap as HMap+import Agda.Utils.IO.Directory+import Agda.Utils.Lens++import Agda.Compiler.UHC.CompileState+import Agda.Compiler.UHC.Bridge as UB+import qualified Agda.Compiler.UHC.FromAgda as FAgda+import Agda.Compiler.Common++#include "undefined.h"+import Agda.Utils.Impossible++-- for the time being, we just copy the base library into the generated code.+-- We don't install it into the user db anymore, as that gets complicated when+-- multiple Agda instances run concurrently.+-- Just copying it is safe for the time being, as we only have full-program+-- compilation at the moment.+copyUHCAgdaBase :: FilePath -> TCM ()+copyUHCAgdaBase outDir = do+ dataDir <- liftIO getDataDir+ let srcDir = dataDir </> "uhc-agda-base" </> "src" </> "UHC"++ liftIO $ copyDirContent srcDir (outDir </> "UHC")+++-- | Compile an interface into an executable using UHC+compilerMain :: IsMain -> Interface -> TCM ()+compilerMain isMain i = inCompilerEnv i $ do+ when (not uhcBackendEnabled) $ typeError $ GenericError "Agda has been built without UHC support. To use the UHC compiler you need to reinstall Agda with 'cabal install Agda -f uhc'."+ -- TODO we should do a version check here at some point.+ let uhc_exist = ExitSuccess+ case uhc_exist of+ ExitSuccess -> do++ copyUHCAgdaBase =<< compileDir++ doCompile isMain i $ \_ -> compileModule++ case isMain of+ IsMain -> do+ main <- getMain i+ -- get core name from modInfo+ crMain <- getCoreName1 main+ runUHCMain $ Just (iModuleName i, crMain)+ NotMain -> runUHCMain Nothing++ ExitFailure _ -> internalError $ unlines+ [ "Agda cannot find the UHC compiler."+ ]+++-- | Compiles a module and it's imports. Returns the module info+-- of this module, and the accumulating module interface.+compileModule :: Interface -> TCM ()+compileModule i = do+ -- look for the Agda.Primitive interface in visited modules.+ -- (It will not be in ImportedModules, if it has not been+ -- explicitly imported)+ -- TODO this should be done in a more clean way+ [agdaPrimInter] <- filter (("Agda.Primitive"==) . prettyShow . iModuleName)+ . map miInterface . M.elems+ <$> getVisitedModules+ -- we can't use the Core module name to get the name of the aui file,+ -- as we don't know the Core module name before we loaded/compiled the file.+ -- (well, we could just compute the module name and use that, that's+ -- probably better? )+ let modNm = iModuleName i+ let topModuleName = toTopLevelModuleName modNm+ -- check if this module has already been compiled+ imports <- map miInterface . catMaybes+ <$> (mapM (getVisitedModule . toTopLevelModuleName . fst)+ (iImportedModules i))++ let imports' = if prettyShow (iModuleName i) == "Agda.Primitive"+ then imports+ else agdaPrimInter : imports++ reportSLn "" 1 $+ "Compiling: " ++ show (iModuleName i)+ code <- compileDefns modNm (map iModuleName imports') i+ crFile <- corePath modNm+ _ <- writeCoreFile crFile code+ return ()+++corePath :: ModuleName -> TCM FilePath+corePath mName = do+ mdir <- compileDir+ let fp = mdir </> replaceExtension fp' "bcr"+ liftIO $ createDirectoryIfMissing True (takeDirectory fp)+ return fp+ where+ fp' = foldl1 (</>) $ moduleNameToCoreNameParts mName++++getMain :: MonadTCM m => Interface -> m QName+getMain iface = case concatMap f defs of+ [] -> typeError $ GenericError $ "Could not find main."+ [x] -> return x+ _ -> __IMPOSSIBLE__+ where defs = HMap.toList $ iSignature iface ^. sigDefinitions+ f (qn, def) = case theDef def of+ (Function{}) | "main" == show (qnameName qn) -> [qn]+ _ -> []++-- | Perform the chain of compilation stages, from definitions to UHC Core code+compileDefns :: ModuleName+ -> [ModuleName] -- ^ top level imports+ -> Interface -> TCM UB.CModule+compileDefns modNm curModImps iface = do++ crMod <- FAgda.fromAgdaModule modNm curModImps iface++ reportSLn "uhc" 10 $ "Done generating Core for \"" ++ show modNm ++ "\"."+ return crMod++writeCoreFile :: String -> UB.CModule -> TCM ()+writeCoreFile f cmod = do+ useTextual <- optUHCTextualCore <$> commandLineOptions++ -- dump textual core, useful for debugging.+ when useTextual (do+ let f' = replaceExtension f ".dbg.tcr"+ reportSLn "uhc" 10 $ "Writing textual core to \"" ++ show f' ++ "\"."+ liftIO $ putPPFile f' (UB.printModule defaultEHCOpts cmod) 200+ )++ reportSLn "uhc" 10 $ "Writing binary core to \"" ++ show f ++ "\"."+ liftIO $ putSerializeFile f cmod++-- | Create the UHC Core main file, which calls the Agda main function+runUHCMain+ :: Maybe (ModuleName, HsName) -- main module+ -> TCM ()+runUHCMain mainInfo = do+ otherFps <- mapM (corePath . iModuleName . miInterface) =<< (M.elems <$> getVisitedModules)+ allFps <-+ case mainInfo of+ Nothing -> return otherFps+ Just (mainMod, mainName) -> do+ fp <- (</> "Main.bcr") <$> compileDir+ let mmod = FAgda.createMainModule mainMod mainName+ writeCoreFile fp mmod+ return ["Main.bcr"]++ let extraOpts = maybe+ ["--compile-only"]+ ((\x -> [x]) . ("--output="++) . prettyShow . last . mnameToList . fst)+ mainInfo++ liftIO . setCurrentDirectory =<< compileDir++ -- TODO drop the RTS args as soon as we don't need the additional memory anymore+ callUHC1 $ ["--pkg-hide-all", "--pkg-expose=uhcbase", "--pkg-expose=base"+ ] ++ extraOpts ++ allFps ++ ["+RTS", "-K50m", "-RTS"]++callUHC1 :: [String] -> TCM ()+callUHC1 args = do+ uhcBin <- getUhcBin+ doCall <- optUHCCallUHC <$> commandLineOptions+ extraArgs <- optUHCFlags <$> commandLineOptions+ callCompiler doCall uhcBin (args ++ extraArgs)++getUhcBin :: TCM FilePath+getUhcBin = fromMaybe ("uhc") . optUHCBin <$> commandLineOptions
+ src/full/Agda/Compiler/UHC/FromAgda.hs view
@@ -0,0 +1,374 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DoAndIfThenElse #-}+{-# LANGUAGE PatternGuards #-}++-- | Convert from Agda's internal representation to UHC Core via Treeless.+--+--+-- The coinduction kit is translated the same way as in MAlonzo:+-- flat = id+-- sharp = id+-- -> There is no runtime representation of Coinductive values.+module Agda.Compiler.UHC.FromAgda where++#if __GLASGOW_HASKELL__ <= 708+import Control.Applicative+import Data.Traversable (traverse)+#endif++import Control.Monad+import Control.Monad.State+import Control.Monad.Reader+import qualified Data.Map as M+import Data.Maybe+import Data.Either+import Data.List+import qualified Data.Set as Set++import Agda.Syntax.Internal hiding (Term(..))+import qualified Agda.Syntax.Internal as I+import Agda.Syntax.Literal as TL+import Agda.Syntax.Treeless (TTerm (..), TAlt (..))+import qualified Agda.Syntax.Treeless as C+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Pretty+import Agda.Utils.List+import qualified Agda.Utils.Pretty as P+import qualified Agda.Utils.HashMap as HMap+import Agda.Syntax.Abstract.Name+import Agda.Syntax.Common++import Agda.Compiler.Common+import Agda.Compiler.ToTreeless+import Agda.Compiler.Treeless.GuardsToPrims+import Agda.Compiler.Treeless.NormalizeNames+import Agda.Compiler.Treeless.Pretty+import Agda.Compiler.UHC.Pragmas.Base+import Agda.Compiler.UHC.Pragmas.Parse (coreExprToCExpr)+import Agda.Compiler.UHC.CompileState+import Agda.Compiler.UHC.Primitives+import Agda.Compiler.UHC.MagicTypes++import Agda.Compiler.UHC.Bridge as CA++import Agda.Utils.Maybe+import Agda.Utils.Except ( MonadError (catchError) )+import Agda.Utils.Lens++#include "undefined.h"+import Agda.Utils.Impossible++opts :: EHCOpts+opts = defaultEHCOpts++-- | Convert from Agda's internal representation to our auxiliary AST.+fromAgdaModule :: ModuleName+ -> [ModuleName] -- imported modules.+ -> Interface -- interface to compile+ -> TCM CModule+fromAgdaModule modNm curModImps iface = do++ -- Set correct pragma options+ setCommandLineOptions =<< gets (stPersistentOptions . stPersistentState)+ mapM_ setOptionsFromPragma (iPragmaOptions iface)++ -- sort defs to ensure consistent order (see Issue 1900)+ let defs = sortDefs $ iSignature iface ^. sigDefinitions++ runCompileT modNm (do+ lift $ reportSLn "uhc" 10 "Translate datatypes..."++ funs' <- concat <$> mapM translateDefn defs+ let funs = mkLetRec funs' (mkInt opts 0)++++ additionalImports <- lift getHaskellImportsUHC+ let imps = map mkImport $ nub $+ [ mkHsName1 "UHC.Base"+ , mkHsName1 "UHC.Agda.Builtins" ]+ ++ map moduleNameToCoreName curModImps+ ++ map mkHsName1 (Set.toList additionalImports)++ crModNm = moduleNameToCoreName modNm++ mkModule crModNm+ <$> getExports <*> pure imps <*> getDeclMetas <*> pure funs+ )+++-- | Translate an Agda definition to an UHC Core function where applicable+translateDefn :: (QName, Definition) -> Compile [CBind]+translateDefn (n, defini) = do++ crName <- getCoreName n+ let crRep = compiledCore $ defCompiledRep defini+ kit <- lift coinductionKit+ case theDef defini of+ d@(Datatype {}) -> do++ unless (isJust crRep || Just n == (nameOfInf <$> kit)) $ do+ addMetaData n (mkMetaData crName)++ vars <- replicateM (dataPars d + dataIxs d) freshLocalName+ addExports [crName]+ return [mkBind1 crName (mkLam vars $ mkUnit opts)]+ (Function{}) | Just n == (nameOfFlat <$> kit) -> do+ addExports [crName]+ (\x -> [x]) <$> mkIdentityFun n "coind-flat" 0+ f@(Function{}) | otherwise -> do+ let ty = (defType defini)+ lift $ reportSDoc "uhc.fromagda" 5 $ text "compiling fun:" <+> prettyTCM n+ lift $ reportSDoc "uhc.fromagda" 15 $ text "type:" <+> (text . show) ty++ caseMaybeM (lift $ toTreeless n) (pure []) $ \ treeless -> do+ funBody <- convertGuards <$> lift (normalizeNames treeless)+ lift $ reportSDoc "uhc.fromagda" 30 $ text " compiled treeless fun:" <+> (text . show) funBody+ funBody' <- runTT $ compileTerm funBody+ lift $ reportSDoc "uhc.fromagda" 30 $ text " compiled UHC Core fun:" <+> (text . show) funBody'++ addExports [crName]+ return [mkBind1 crName funBody']++ Constructor{} | Just n == (nameOfSharp <$> kit) -> do+ addExports [crName]+ (\x -> [x]) <$> mkIdentityFun n "coind-sharp" 0++ (Constructor{}) | Nothing <- crRep -> do -- become functions returning a constructor with their tag+ -- we have to ignore instantiated constructors here!+ n' <- lift $ canonicalName n+ if (n /= n')+ then return []+ else do+ addExports [crName]+ ctag <- getConstrCTag n++ addMetaCon n (fromJust $ mkMetaDataConFromCTag ctag)++ vars <- replicateM (getCTagArity ctag) freshLocalName+ let conWrapper = mkLam vars (mkTagTup ctag $ map mkVar vars)+ return [mkBind1 crName conWrapper]+ Constructor{} -> return []+ -- either foreign or builtin type. We can just assume existence of the wrapper functions then.++ r@(Record{}) -> do+ unless (isJust crRep) $ do+ addMetaData n (mkMetaData crName)++ vars <- replicateM (recPars r) freshLocalName+ addExports [crName]+ return [mkBind1 crName (mkLam vars $ mkUnit opts)]+ (Axiom{}) -> do -- Axioms get their code from COMPILED_UHC pragmas+ addExports [crName]+ case crRep of+ Nothing -> return [mkBind1 crName+ (coreError $ "Axiom " ++ show n ++ " used but has no computation.")]+ Just (CrDefn x) -> do+ x' <- case coreExprToCExpr x of+ -- This can only happen if an *.agdai file was generated by an Agda version+ -- without UHC support enabled.+ Left err -> internalError $ "Invalid COMPILED_UHC pragma value: " ++ err+ Right y -> return y+ return [mkBind1 crName x']+ _ -> __IMPOSSIBLE__++ p@(Primitive{}) -> do -- Primitives use primitive functions from UHC.Agda.Builtins of the same name.+ addExports [crName]++ case primName p `M.lookup` primFunctions of+ Nothing -> internalError $ "Primitive " ++ show (primName p) ++ " declared, but no such primitive exists."+ (Just expr) -> do+ expr' <- expr+ return [mkBind1 crName expr']+ where+ -- | Produces an identity function, optionally ignoring the first n arguments.+ mkIdentityFun :: QName+ -> String -- ^ comment+ -> Int -- ^ How many arguments to ignore.+ -> Compile CBind+ mkIdentityFun nm comment ignArgs = do+ crName <- getCoreName nm+ xs <- replicateM (ignArgs + 1) freshLocalName+ return $ mkBind1 crName (mkLam xs (mkVar $ last xs))+++runTT :: TT a -> Compile a+runTT r = do+ r `runReaderT` (TTEnv [])++data TTEnv = TTEnv+ { nmEnv :: [HsName] -- maps de-bruijn indices to names+ }++type TT = ReaderT TTEnv Compile+++addToEnv :: [HsName] -> TT a -> TT a+addToEnv nms cont =+ local (\e -> e { nmEnv = nms ++ (nmEnv e) }) cont++data BuiltinKit = BuiltinKit+ { isNat :: QName -> Bool+ , isInt :: QName -> Bool+ }++builtinKit :: TCM BuiltinKit+builtinKit =+ BuiltinKit <$> is dat builtinNat+ <*> is dat builtinInteger+ where+ dat (I.Def d _) = pure d+ dat _ = Nothing++ is a b = maybe (const False) (==) . (a =<<) <$> getBuiltin' b++-- | Translate the actual Agda terms, with an environment of all the bound variables+-- from patternmatching. Agda terms are in de Bruijn so we just check the new+-- names in the position.+compileTerm :: C.TTerm -> TT CExpr+compileTerm term = do+ builtinKit' <- lift $ lift builtinKit+ case term of+ C.TPrim t -> return $ compilePrim t+ C.TVar x -> do+ nm <- fromMaybe __IMPOSSIBLE__ . (!!! x) <$> asks nmEnv+ return $ mkVar nm+ C.TDef nm -> do+ nm' <- lift $ getCoreName nm+ return $ mkVar nm'+ C.TApp t xs -> do+ mkApp <$> compileTerm t <*> mapM compileTerm xs+ C.TLam t -> do+ name <- lift freshLocalName+ addToEnv [name] $ do+ mkLam [name] <$> compileTerm t+ C.TLit l -> return $ litToCore l+ C.TCon c -> do+ con <- lift $ getConstrFun c+ return $ mkVar con+ C.TLet x body -> do+ nm <- lift freshLocalName+ mkLet1Plain nm+ <$> compileTerm x+ <*> addToEnv [nm] (compileTerm body)+ C.TCase sc (C.CTData dt) def alts | not (isNat builtinKit' dt || isInt builtinKit' dt) -> do+ -- normal constructor case+ caseScr <- lift freshLocalName+ defVar <- lift freshLocalName+ def' <- compileTerm def++ branches <- traverse compileConAlt alts+ defBranches <- defaultBranches dt alts (mkVar defVar)+ let cas = mkCase (mkVar caseScr) (branches ++ defBranches)+ caseScr' <- compileTerm (C.TVar sc)++ return $ mkLet1Plain defVar def' (mkLet1Strict caseScr caseScr' cas)++ C.TCase sc ct def alts | otherwise -> do+ -- cases on literals+ sc <- compileTerm (C.TVar sc)+ var <- lift freshLocalName+ def <- compileTerm def++ css <- buildPrimCases eq (mkVar var) alts def+ return $ mkLet1Strict var sc css+ where+ eq :: CExpr+ eq = case ct of+ C.CTChar -> mkVar $ primFunNm "primCharEquality"+ C.CTString -> mkVar $ primFunNm "primStringEquality"+ C.CTQName -> mkVar $ primFunNm "primQNameEquality"+ C.CTData nm | isNat builtinKit' nm -> mkVar $ primFunNm "primIntegerEquality"+ C.CTData nm | isInt builtinKit' nm -> mkVar $ primFunNm "primIntegerEquality"+ _ -> __IMPOSSIBLE__++ C.TUnit -> unit+ C.TSort -> unit+ C.TErased -> unit+ C.TError e -> return $ case e of+ C.TUnreachable -> coreError $ "Unreachable code reached. This should never happen! Crashing..."+ where unit = return $ mkUnit opts+++buildPrimCases :: CExpr -- ^ equality function+ -> CExpr -- ^ case scrutinee (in WHNF)+ -> [C.TAlt]+ -> CExpr -- ^ default value+ -> TT CExpr+buildPrimCases _ _ [] def = return def+buildPrimCases eq scr (b:brs) def = do+ var <- lift freshLocalName+ e' <- compileTerm (C.aBody b)+ rec' <- buildPrimCases eq scr brs def++ let lit = litToCore $ C.aLit b+ eqTest = mkApp eq [scr, lit]++ return $ mkLet1Strict var eqTest (mkIfThenElse (mkVar var) e' rec')++-- move to UHC Core API+mkIfThenElse :: CExpr -> CExpr -> CExpr -> CExpr+mkIfThenElse c t e = mkCase c [b1, b2]+ where b1 = mkAlt (mkPatCon (ctagTrue opts) mkPatRestEmpty []) t+ b2 = mkAlt (mkPatCon (ctagFalse opts) mkPatRestEmpty []) e++compileConAlt :: C.TAlt -> TT CAlt+compileConAlt a =+ makeConAlt (C.aCon a)+ (\vars -> addToEnv (reverse vars) $ compileTerm (C.aBody a))++makeConAlt :: QName -> ([HsName] -> TT CExpr) -> TT CAlt+makeConAlt con mkBody = do+ ctag <- lift $ getConstrCTag con+ vars <- lift $ replicateM (getCTagArity ctag) freshLocalName+ body <- mkBody vars++ let patFlds = [mkPatFldBind (mkHsName [] "", mkInt opts i) (mkBind1Nm1 v) | (i, v) <- zip [0..] vars]+ return $ mkAlt (mkPatCon ctag mkPatRestEmpty patFlds) body++-- | Constructs an alternative for all constructors not explicitly matched by a branch.+defaultBranches :: QName -> [C.TAlt] -> CExpr -> TT [CAlt]+defaultBranches dt alts def = do+ dtCons <- dataRecCons . theDef <$> (lift . lift) (getConstInfo dt)+ let altCons = map C.aCon alts+ missingCons = dtCons \\ altCons++ mapM (\a -> makeConAlt a (\_ -> return def)) missingCons++litToCore :: Literal -> CExpr+litToCore (LitNat _ i) = mkApp (mkVar $ primFunNm "primIntegerToNat") [mkInteger opts i]+litToCore (LitString _ s) = mkString opts s+litToCore (LitChar _ c) = mkChar c+-- UHC and GHC handle trailing zeros slightly different. Work around to make sure+-- we have the same semantics as MAlonzo.+litToCore (LitFloat _ f) = mkApp (mkVar $ primFunNm "primMkFloat") [mkString opts (show f)]+litToCore (LitQName _ q) = mkApp (mkVar $ primFunNm "primMkQName")+ [mkInteger opts n, mkInteger opts m, mkString opts $ P.prettyShow q]+ where NameId n m = nameId $ qnameName q+litToCore LitMeta{} = __IMPOSSIBLE__++getCTagArity :: CTag -> Int+-- for records/datatypes, we can always extract the arity. If there is no arity,+-- it is the unit constructor, so just return zero.+getCTagArity = destructCTag 0 (\_ _ _ ar -> ar)++coreError :: String -> CExpr+coreError msg = mkError opts $ "Fatal error: " ++ msg++compilePrim :: C.TPrim -> CExpr+compilePrim C.PQuot = mkVar $ primFunNm "primIntegerQuot"+compilePrim C.PRem = mkVar $ primFunNm "primIntegerRem"+compilePrim C.PSub = mkVar $ primFunNm "primIntegerMinus"+compilePrim C.PAdd = mkVar $ primFunNm "primIntegerPlus"+compilePrim C.PMul = mkVar $ primFunNm "primIntegerTimes"+compilePrim C.PIf = mkVar $ primFunNm "primIfThenElse"+compilePrim C.PGeq = mkVar $ primFunNm "primIntegerGreaterOrEqual"+compilePrim C.PLt = mkVar $ primFunNm "primIntegerLess"+compilePrim C.PEq = mkVar $ primFunNm "primIntegerEquality"+compilePrim C.PSeq = mkVar $ primFunNm "primSeq"+++createMainModule :: ModuleName -> HsName -> CModule+createMainModule mainMod main = mkModule (mkHsName [] "Main") [] [mkImport $ mkHsName1 "UHC.Run", mkImport mainModAux] [] (mkMain main)+ where mainModAux = moduleNameToCoreName mainMod
+ src/full/Agda/Compiler/UHC/MagicTypes.hs view
@@ -0,0 +1,59 @@+{-# LANGUAGE CPP #-}+-- | Defines some magic builtin datatypes.+module Agda.Compiler.UHC.MagicTypes+( builtinUnitCtor+ , MagicName+ , getMagicTypes+ , MagicConstrInfo+ , MagicTypeInfo+ , HsDataType (..)+ )+where++import Data.List+import qualified Data.Map as M++import Agda.Compiler.UHC.Bridge+++-- | name of a magic, differently translated datatype/constructor+type MagicName = String++data HsDataType+ = HsDataType HsName+ | HsUnit++type MagicConstrInfo = M.Map MagicName CTag -- maps primitive names to constructor ctags+type MagicTypeInfo = M.Map MagicName (HsDataType, MagicConstrInfo) -- maps types to the UHC Core name+-- (or nothing for unit) and to their constructors.++getMagicTypes :: MagicTypeInfo+getMagicTypes = M.fromList $ map f primCrTys1+ where f :: (MagicName, [(MagicName, CTag)]) -> (MagicName, (HsDataType, MagicConstrInfo))+ f (dtMgcNm, constrs) = let dtCrNm = ctagDataTyNm $ snd $ head constrs+ in (dtMgcNm, (dtCrNm, M.fromList constrs))++-- | Returns the name of the datatype or 'Nothing' for the unit datatype.+ctagDataTyNm :: CTag -> HsDataType+ctagDataTyNm = destructCTag HsUnit (\dt _ _ _ -> HsDataType dt)+++primCrTys1 :: [(+ MagicName -- the magic name of the dt in COMPILED_DATA_UHC pragmas+ , [(MagicName, CTag)] -- constructors. Maps magic name to constructor tags.+ )]+primCrTys1 =+ [( "BOOL",+ [ ("TRUE", ctagTrue defaultEHCOpts)+ , ("FALSE", ctagFalse defaultEHCOpts)+ ])+ , ("LIST",+ [ ("NIL", ctagNil defaultEHCOpts)+ , ("CONS", ctagCons defaultEHCOpts)+ ])+ , ("UNIT",+ [("UNIT", ctagUnit)])+ ]++builtinUnitCtor :: HsName+builtinUnitCtor = mkHsName1 "UHC.Agda.Builtins.unit"
+ src/full/Agda/Compiler/UHC/Pragmas/Base.hs view
@@ -0,0 +1,58 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}++-- | Defines UHC Core functions used in other parts of Agda.+-- E.g. parsing Core pragmas uses the `parseCoreCode` function.+module Agda.Compiler.UHC.Pragmas.Base+ ( CoreExpr,+ CoreType (..),+ CoreConstr (..),+ coreConstrToCTag,+ setTag,+ HsName+ )+where+++import Data.Typeable+import qualified Data.Map as M++import Agda.Compiler.UHC.Bridge as CA+import Agda.Compiler.UHC.MagicTypes++#include "undefined.h"+import Agda.Utils.Impossible++++data CoreType+ = CTMagic MagicName -- ^ Magic name+ | CTNormal String -- Core Datatype name+ deriving (Eq, Show, Typeable)++-- We store the COMPILED_UHC pragmas as string,+-- as storing the UHC AST makes the serialization+-- format dependent on uhc-light. This also makes it+-- possible to just store COMPILED_UHC pragmas unchecked+-- in the interface file, if the UHC backend is disabled.+type CoreExpr = String++-- We need an explicit representation for constructors, as we need to serialise the CoreConstr+-- to store it inside agdai files. Else we could just use a partially applied+-- CTag constructor instead (we don't know the arity yet...).+data CoreConstr+ = CCMagic MagicName MagicName -- Magic type constructor with fixed arity; (datatype, ctor)+ | CCNormal HsName HsName Int -- Normall UHC Core Constructor; (datatype, constr, tag)+ deriving (Eq, Show, Typeable)+++setTag :: CoreConstr -> Int -> CoreConstr+setTag (CCNormal a b _) t = CCNormal a b t+setTag _ _ = __IMPOSSIBLE__++coreConstrToCTag :: CoreConstr+ -> Int -- ^ Arity+ -> CTag+coreConstrToCTag (CCMagic dtMgcNm conMgcNm) _ = conMp M.! conMgcNm+ where (_, conMp) = getMagicTypes M.! dtMgcNm+coreConstrToCTag (CCNormal dt con tg) ar = mkCTag dt con tg ar
+ src/full/Agda/Compiler/UHC/Pragmas/Parse.hs view
@@ -0,0 +1,103 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}++-- | Defines UHC Core functions used in other parts of Agda.+-- E.g. parsing Core pragmas uses the `parseCoreCode` function.+module Agda.Compiler.UHC.Pragmas.Parse+ ( module Agda.Compiler.UHC.Pragmas.Base+ , parseCoreExpr+ , coreExprToCExpr+ , parseCoreData+ , parseCoreConstrs+ )++where+++import Data.List+import qualified Data.Map as M++import Agda.TypeChecking.Monad+import Agda.Compiler.UHC.Pragmas.Base+import Agda.Compiler.UHC.MagicTypes++import Agda.Compiler.UHC.Bridge as CA++#include "undefined.h"+import Agda.Utils.Impossible++-- | Parse a COMPILED_DATA_UHC specification.+parseCoreData :: MonadTCM m => String -> m CoreType+parseCoreData dt = do+ isDtMgc <- isMagicEntity getMagicTypes dt "datatype"+ return $ case isDtMgc of+ Nothing -> CTNormal dt+ Just (dtMgc, _) -> CTMagic dtMgc++parseCoreConstrs :: MonadTCM m => CoreType -> [String] -> m [CoreConstr]+parseCoreConstrs (CTNormal dtCrNm) cs = do+ constrs <- mapM parseNormalConstr cs+ -- UHC assigns tags in lexographical order.+ -- Requires that the mapping is complete, else it will break.+ return $ zipWith setTag (sortBy ccOrd constrs) [0..]+ where+ parseNormalConstr :: MonadTCM m => String -> m CoreConstr+ parseNormalConstr c+ | isMagic c = typeError $+ GenericError $ "Magic constructor " ++ (drop 2 $ init $ init c) ++ " can only be used for magic datatypes."+ | otherwise = let dtMod = dropWhileEnd (/='.') dtCrNm+ conNm = dtMod ++ c+ -- tag gets assigned after we have parsed all ctors+ in return $ CCNormal (mkHsName1 dtCrNm) (mkHsName1 conNm) __IMPOSSIBLE__+ ccOrd :: CoreConstr -> CoreConstr -> Ordering+ ccOrd (CCNormal dtNm1 ctNm1 _) (CCNormal dtNm2 ctNm2 _) | dtNm1 == dtNm2 = compare ctNm1 ctNm2+ ccOrd _ _ = __IMPOSSIBLE__++parseCoreConstrs (CTMagic dtMgcNm) cs = do+ mapM parseMagicConstr cs+ where+ (_, conMp) = getMagicTypes M.! dtMgcNm+ parseMagicConstr :: MonadTCM m => String -> m CoreConstr+ parseMagicConstr c+ | not (isMagic c) = typeError $+ GenericError $ "A magic datatype can only have magic constructors."+ | otherwise = do+ (Just (conMgcNm, _)) <- isMagicEntity conMp c "constructor"+ return $ CCMagic dtMgcNm conMgcNm+++-- | Parse a COMPILED_UHC expression.+parseCoreExpr :: String -> Either String CoreExpr+#if defined(UHC_BACKEND)+parseCoreExpr str = either Left (const $ Right str) (coreExprToCExpr str)+#else+-- we don't have the uhc-light parser, so just succeed here.+parseCoreExpr str = Right str+#endif++coreExprToCExpr :: CoreExpr -> Either String CExpr+#if defined(UHC_BACKEND)+coreExprToCExpr str = case CA.parseExpr defaultEHCOpts str of+ (Left errs) -> Left $ intercalate "\n" errs+ (Right res) -> Right res+#else+coreExprToCExpr = __IMPOSSIBLE__+#endif++-- | Check if the given name is a valid Magic entity.+isMagicEntity :: MonadTCM m+ => M.Map MagicName a -- ^ lookup table+ -> String -- ^ name to lookup.+ -> String -- ^ type of the entity. Used for errors messages.+ -> m (Maybe (String, a))+isMagicEntity tbl xs ty | isMagic xs =+ case nm `M.lookup` tbl of+ Just x -> return $ Just (nm, x)+ Nothing -> typeError $ GenericError $ "No magic " ++ ty ++ " with the name " ++ nm ++ " exists."+ where nm = init $ init $ drop 2 xs+isMagicEntity _ _ _ | otherwise = return Nothing++-- | Checks if the given name is syntactically a Magic name.+-- A syntactally correct magic name is NOT necessarily a valid magic name.+isMagic :: String -> Bool+isMagic xs = "__" `isPrefixOf` xs && "__" `isSuffixOf` xs
+ src/full/Agda/Compiler/UHC/Primitives.hs view
@@ -0,0 +1,108 @@+{-# LANGUAGE CPP #-}+-- | Defines some primitive functions.+module Agda.Compiler.UHC.Primitives+ ( primFunNm+ , primFunctions+ )+where++import Agda.Compiler.UHC.CompileState+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin+import qualified Agda.Syntax.Internal as T+import Control.Monad.Trans++#include "undefined.h"+import Agda.Utils.Impossible++#if __GLASGOW_HASKELL__ <= 708+import Control.Applicative+#endif++import qualified Data.Map as M+import Data.Maybe++import Agda.Compiler.UHC.Bridge++primFunNm :: String -> HsName+primFunNm = mkHsName ["UHC", "Agda", "Builtins"]++-- | Primitives defined for the UHC backend. Maps primitive names to the core expression to be used as function body.+primFunctions :: M.Map String ((CompileT TCM) CExpr)+primFunctions = M.fromList $+ [(n, return $ mkVar (primFunNm n)) | n <-+ [+ -- Level+ "primLevelMax"+ , "primLevelZero"+ , "primLevelSuc"+ -- Integer+ , "primShowInteger"+ -- Nat+ , "primNatPlus"+ , "primNatTimes"+ , "primNatMinus"+ , "primNatDivSuc"+ , "primNatDivSucAux"+ , "primNatModSuc"+ , "primNatModSucAux"+ , "primNatToInteger"+ , "primNatEquality"+ , "primNatLess"+ , "primIntegerToNat"+ -- String+ , "primStringAppend"+ , "primStringEquality"+ , "primStringFromList"+ , "primStringToList"+ , "primShowString"+ -- Char+ , "primCharToNat"+ , "primCharEquality"+ , "primShowChar"+ , "primIsLower"+ , "primIsDigit"+ , "primIsAlpha"+ , "primIsSpace"+ , "primIsAscii"+ , "primIsLatin1"+ , "primIsPrint"+ , "primIsHexDigit"+ , "primToUpper"+ , "primToLower"+ , "primNatToChar"+ -- Float+ , "primShowFloat"+ , "primFloatEquality"+ , "primFloatLess"+ , "primNatToFloat"+ , "primFloatPlus"+ , "primFloatMinus"+ , "primFloatTimes"+ , "primFloatDiv"+ , "primFloatSqrt"+ , "primRound"+ , "primFloor"+ , "primCeiling"+ , "primExp"+ , "primLog"+ , "primSin"+ -- Reflection+ , "primQNameEquality"+ , "primQNameLess"+ , "primShowQName"+ , "primMetaEquality"+ , "primMetaLess"+ , "primShowMeta"+ ]+ ] ++ [+ ("primTrustMe", mkTrustMe)+ ]+ where mkTrustMe = do+ -- lookup refl constructor+ bt <- fromMaybe __IMPOSSIBLE__ <$> (lift $ getBuiltin' builtinRefl)+ let reflNm = case T.ignoreSharing bt of+ (T.Con conHd []) -> T.conName conHd+ _ -> __IMPOSSIBLE__++ mkVar <$> getConstrFun reflNm
+ src/full/Agda/Compiler/UHC/Smashing.hs view
@@ -0,0 +1,164 @@+++{-# LANGUAGE CPP #-}++-- DISABLED - NOT USED ANYMORE++-- | Smash functions which return something that can be inferred+-- (something of a type with only one element)++module Agda.Compiler.UHC.Smashing where++import Control.Monad.State+import Control.Monad.Trans.Maybe++import Data.List+import Data.Maybe++import Data.Set (Set)+import qualified Data.Set as Set++import Agda.Syntax.Common+import Agda.Syntax.Internal as SI+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Reduce++--import Agda.Compiler.UHC.AuxAST as AA+--import Agda.Compiler.UHC.Transform+--import Agda.Compiler.UHC.Naming++import Agda.Utils.Lens++#if __GLASGOW_HASKELL__ <= 708+import Agda.Utils.Monad+#endif++import Agda.Utils.Size+import qualified Agda.Utils.HashMap as HM++#include "undefined.h"+import Agda.Utils.Impossible++{-+type SmashT m = FreshNameT (TransformT m)++defnPars :: Integral n => Defn -> n+defnPars (Record {recPars = p}) = fromIntegral p+defnPars (Constructor {conPars = p}) = fromIntegral p+defnPars _ = 0++smash'em :: Transform+smash'em amod = do+ fs' <- smashFuns (xmodFunDefs amod)+ return $ (amod { xmodFunDefs = fs' })++-- | Main function, smash as much as possible+smashFuns :: [Fun] -> TransformT TCM [Fun]+smashFuns funs = do+ defs <- (sigDefinitions <$> use stImports)+ funs' <- evalFreshNameT "nl.uu.agda.smashing" $ forM funs $ \f -> case f of+ AA.Fun{} -> case xfunQName f >>= flip HM.lookup defs of++ Just (def@(Defn {theDef = (Function { funSmashable = True })})) -> do+ reportSLn "uhc.smashing" 10 $ "running on:" ++ (show (xfunQName f))+ minfered <- runMaybeT $ smashable (length (xfunArgs f) + defnPars (theDef def)) (defType def)+ case minfered of+ Just infered -> do+ reportSDoc "smashing" 5 $ vcat+ [ prettyTCM (defName def) <+> text "is smashable"]+ return f { xfunExpr = infered+ , xfunInline = True+ , xfunComment = xfunComment f ++ " [SMASHED]"+ }+ Nothing -> return f+ _ -> do+ reportSDoc "uhc.smashing" 10 $ vcat+ [ (text . show) f <+> text " was not found or is not eligible for smashing."]+ return f+ _ -> do+ reportSLn "uhc.smashing" 10 $ "smashing!"+ return f+ return funs'++fail' :: Monad m => MaybeT m a+fail' = fail ""++(+++) :: Telescope -> Telescope -> Telescope+xs +++ ys = unflattenTel names $ map (raise (size ys)) (flattenTel xs) ++ flattenTel ys+ where names = teleNames xs ++ teleNames ys++-- | Can a datatype be inferred? If so, return the only possible value.+inferable :: Set QName -> QName -> [SI.Arg Term] -> MaybeT (SmashT TCM) Expr+inferable visited dat _ | dat `Set.member` visited = fail'+inferable visited dat args = do+ reportSLn "uhc.smashing" 10 $ " inferring:" ++ (show dat)+ defs <- sigDefinitions <$> use stImports+ let def = fromMaybe __IMPOSSIBLE__ $ HM.lookup dat defs+ case theDef def of+ d@Datatype{} -> do+ case dataCons d of+ [c] -> inferableArgs c (dataPars d)+ _ -> fail'+ r@Record{} -> inferableArgs (recCon r) (recPars r)+ (Function{ funSmashable = True }) -> do+ term <- liftTCM $ normalise $ Def dat $ map SI.Apply args+ inferableTerm visited' term+ d -> do+ reportSLn "uhc.smashing" 10 $ " failed (inferable): " ++ (show d)+ fail'+ where+ inferableArgs :: QName -> Nat -> MaybeT (SmashT TCM) Expr+ inferableArgs c pars = do+ reportSLn "uhc.smashing" 10 $ " inferring args for: " ++ show c+ defs <- sigDefinitions <$> use stImports+ let def = fromMaybe __IMPOSSIBLE__ $ HM.lookup c defs+ TelV tel _ <- liftTCM $ telView (defType def `apply` genericTake pars args)+ reportSDoc "uhc.smashing" 10 $ nest 2 $ vcat+ [ text "inferableArgs!"+ , text "tele" <+> prettyTCM tel+ , text "constr:" <+> prettyTCM c+ ]+ conFun <- lift $ lift $ getConstrFun c+ (apps1 conFun <$>) $ forM (flattenTel tel) (inferableTerm visited' . unEl . unDom)+ visited' = Set.insert dat visited++inferableTerm :: Set QName -> Term -> MaybeT (SmashT TCM) Expr+inferableTerm visited t = do+ case ignoreSharing t of+ Def q es ->+ case allApplyElims es of+ Just vs -> inferable visited q vs+ Nothing -> fail'+ Pi _ b -> do+ t' <- inferableTerm visited (unEl $ unAbs b)+ lift $ buildLambda 1 t'+ Sort {} -> return AA.UNIT+ t' -> do+ reportSLn "uhc.smashing" 10 $ " failed to infer: " ++ show t'+ fail'++-- | Find the only possible value for a certain type. If we fail return Nothing+smashable :: Int -> Type -> MaybeT (SmashT TCM) Expr+smashable origArity typ = do+ TelV tele retType <- liftTCM $ telView typ+ retType' <- return retType++ inf <- inferableTerm Set.empty (unEl retType')+ reportSDoc "uhc.smashing" 10 $ nest 2 $ vcat+ [ text "Result is"+ , text "inf: " <+> (text . show) inf+ , text "type: " <+> prettyTCM retType'+ ]+ lift $ buildLambda (size tele - origArity) inf++buildLambda :: Int -> Expr -> SmashT TCM Expr+buildLambda n e | n <= 0 = return e+buildLambda n e | otherwise = do+ v <- freshLocalName+ e' <- buildLambda (n - 1) e+ return $ AA.Lam v e'++-}
src/full/Agda/Interaction/BasicOps.hs view
@@ -1,31 +1,36 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE TupleSections #-}-{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Agda.Interaction.BasicOps where +import Prelude hiding (null)+ import Control.Arrow ((***), first, second)-import Control.Applicative+import Control.Applicative hiding (empty) import Control.Monad.Reader import Control.Monad.State import Control.Monad.Identity import qualified Data.Map as Map-import Data.List+import Data.List hiding (null) import Data.Maybe-import Data.Traversable hiding (mapM, forM)+import Data.Traversable hiding (mapM, forM, for)+import Data.Monoid import qualified Agda.Syntax.Concrete as C -- ToDo: Remove with instance of ToConcrete import Agda.Syntax.Position-import Agda.Syntax.Abstract as A hiding (Open, Apply)+import Agda.Syntax.Abstract as A hiding (Open, Apply, Assign) import Agda.Syntax.Abstract.Views as A import Agda.Syntax.Common-import Agda.Syntax.Info (ExprInfo(..),MetaInfo(..),emptyMetaInfo)+import Agda.Syntax.Info (ExprInfo(..),MetaInfo(..),emptyMetaInfo,exprNoRange) import qualified Agda.Syntax.Info as Info import Agda.Syntax.Internal as I import Agda.Syntax.Translation.InternalToAbstract@@ -49,6 +54,7 @@ import Agda.TypeChecking.Irrelevance (wakeIrrelevantVars) import Agda.TypeChecking.Pretty (prettyTCM) import Agda.TypeChecking.Free+import Agda.TypeChecking.CheckInternal import qualified Agda.TypeChecking.Pretty as TP import Agda.Utils.Except ( Error(strMsg), MonadError(catchError, throwError) )@@ -57,6 +63,7 @@ import Agda.Utils.List import Agda.Utils.Maybe import Agda.Utils.Monad+import Agda.Utils.Null import Agda.Utils.Pretty import Agda.Utils.Permutation import Agda.Utils.Size@@ -67,7 +74,11 @@ -- | Parses an expression. parseExpr :: Range -> String -> TCM C.Expr-parseExpr rng s = liftIO $ parsePosString exprParser pos s+parseExpr rng s = do+ C.ExprWhere e wh <- liftIO $ parsePosString exprWhereParser pos s+ unless (null wh) $ typeError $ GenericError $+ "where clauses are not supported in holes"+ return e where pos = fromMaybe (startPos Nothing) $ rStart rng parseExprIn :: InteractionId -> Range -> String -> TCM Expr@@ -89,13 +100,13 @@ metaTypeCheck mv (mvJudgement mv) where metaTypeCheck mv IsSort{} = __IMPOSSIBLE__- metaTypeCheck mv (HasType _ t) = do+ metaTypeCheck mv (HasType _ t) = disableDestructiveUpdate $ do reportSDoc "interaction.give" 20 $ TP.text "give: meta type =" TP.<+> prettyTCM t -- Here, we must be in the same context where the meta was created. -- Thus, we can safely apply its type to the context variables. ctx <- getContextArgs- let t' = t `piApply` permute (takeP (length ctx) $ mvPermutation mv) ctx+ t' <- t `piApplyM` permute (takeP (length ctx) $ mvPermutation mv) ctx traceCall (CheckExprCall e t') $ do reportSDoc "interaction.give" 20 $ TP.text "give: instantiated meta type =" TP.<+> prettyTCM t'@@ -136,7 +147,7 @@ mi <- lookupInteractionId ii whenJust mr $ updateMetaVarRange mi reportSDoc "interaction.give" 10 $ TP.text "giving expression" TP.<+> prettyTCM e- reportSDoc "interaction.give" 50 $ TP.text $ show $ deepUnScope e+ reportSDoc "interaction.give" 50 $ TP.text $ show $ deepUnscope e -- Try to give mi := e _ <- catchError (giveExpr mi e) $ \ err -> case err of -- Turn PatternErr into proper error:@@ -165,7 +176,7 @@ reportSDoc "interaction.refine" 10 $ TP.text "refining with expression" TP.<+> prettyTCM e reportSDoc "interaction.refine" 50 $- TP.text $ show $ deepUnScope e+ TP.text $ show $ deepUnscope e -- We try to append up to 10 meta variables tryRefine 10 range scope e where@@ -174,7 +185,7 @@ where try :: Int -> Expr -> TCM Expr try 0 e = throwError $ strMsg "Cannot refine"- try n e = give ii (Just r) e `catchError` (\_ -> try (n-1) =<< appMeta e)+ try n e = give ii (Just r) e `catchError` (\_ -> try (n - 1) =<< appMeta e) -- Apply A.Expr to a new meta appMeta :: Expr -> TCM Expr@@ -189,7 +200,25 @@ , metaNameSuggestion = "" } metaVar = QuestionMark info ii- return $ App (ExprRange r) e $ defaultNamedArg metaVar++ count x e = getSum $ foldExpr isX e+ where isX (A.Var y) | x == y = Sum 1+ isX _ = mempty++ lamView (A.Lam _ (DomainFree _ x) e) = Just (x, e)+ lamView (A.Lam i (DomainFull (TypedBindings r (Arg ai (TBind br (x : xs) a)))) e)+ | null xs = Just (dget x, e)+ | otherwise = Just (dget x, A.Lam i (DomainFull $ TypedBindings r $ Arg ai $ TBind br xs a) e)+ lamView _ = Nothing++ -- reduce beta-redexes where the argument is used at most once+ smartApp i e arg =+ case lamView $ unScope e of+ Just (x, e) | count x e < 2 -> mapExpr subX e+ where subX (A.Var y) | x == y = namedArg arg+ subX e = e+ _ -> App i e arg+ return $ smartApp (ExprRange r) e $ defaultNamedArg metaVar --ToDo: The position of metaVar is not correct --ToDo: The fixity of metavars is not correct -- fixed? MT @@ -294,22 +323,25 @@ CheckLambda (Arg ai (xs, mt)) body target -> do domType <- maybe (return underscore) reify mt target <- reify target- let bs = TypedBindings noRange $ Arg (mapArgInfoColors (const []) ai) $+ let bs = TypedBindings noRange $ Arg ai $ TBind noRange xs domType e = A.Lam Info.exprNoRange (DomainFull bs) body return $ TypedAssign m' e target- CheckArgs _ _ _ args t0 t1 _ -> do+ CheckArgs _ _ args t0 t1 _ -> do t0 <- reify t0 t1 <- reify t1 return $ PostponedCheckArgs m' (map (namedThing . unArg) args) t0 t1+ UnquoteTactic tac _ goal -> do+ tac <- A.App exprNoRange (A.Unquote exprNoRange) . defaultNamedArg <$> reify tac+ OfType tac <$> reify goal Open{} -> __IMPOSSIBLE__ OpenIFS{} -> __IMPOSSIBLE__ InstS{} -> __IMPOSSIBLE__ InstV{} -> __IMPOSSIBLE__- reify (FindInScope m mcands) = FindInScopeOF+ reify (FindInScope m _b mcands) = FindInScopeOF <$> (reify $ MetaV m []) <*> (reify =<< getMetaType m)- <*> (forM (fromMaybe [] mcands) $ \ (tm, ty) -> do+ <*> (forM (fromMaybe [] mcands) $ \ (Candidate tm ty eti) -> do (,) <$> reify tm <*> reify ty) reify (IsEmpty r a) = IsEmptyType <$> reify a reify (CheckSizeLtSat a) = SizeLtSat <$> reify a@@ -464,7 +496,8 @@ ] ] reportSDoc "interactive.meta.scope" 20 $ TP.text $ show $ getMetaScope mv- OfType x <$> reify (t `piApply` permute (takeP (size vs) $ mvPermutation mv) vs)+ -- Andreas, 2016-01-19, issue #1783: need piApplyM instead of just piApply+ OfType x <$> do reify =<< t `piApplyM` permute (takeP (size vs) $ mvPermutation mv) vs rewriteJudg mv (IsSort i t) = do ms <- getMetaNameSuggestion i return $ JustSort $ NamedMeta ms i@@ -499,7 +532,7 @@ metaHelperType norm ii rng s = case words s of [] -> fail "C-c C-h expects an argument of the form f e1 e2 .. en" f : _ -> do- A.Application h args <- A.appView . getBody . deepUnScope <$> parseExprIn ii rng ("let " ++ f ++ " = _ in " ++ s)+ A.Application h args <- A.appView . getBody . deepUnscope <$> parseExprIn ii rng ("let " ++ f ++ " = _ in " ++ s) withInteractionId ii $ do cxtArgs <- getContextArgs -- cleanupType relies on with arguments being named 'w',@@ -510,9 +543,9 @@ -- Remember the arity of a TelV atel _ <- telView a let arity = size atel- (delta1, delta2, _, a', as', vs') = splitTelForWith tel a as vs+ (delta1, delta2, _, a', as', vs') = splitTelForWith tel a (map OtherType as) vs a <- local (\e -> e { envPrintDomainFreePi = True }) $ do- reify =<< cleanupType arity args =<< normalForm norm =<< withFunctionType delta1 vs' as' delta2 a'+ reify =<< cleanupType arity args =<< normalForm norm =<< fst <$> withFunctionType delta1 vs' as' delta2 a' return (OfType' h a) where cleanupType arity args t = do@@ -569,7 +602,6 @@ I.Level{} -> pure v I.MetaV{} -> pure v I.Shared{} -> pure v- I.ExtLam{} -> __IMPOSSIBLE__ onNamesElims f = traverse $ traverse $ onNamesTm f onNamesArgs f = traverse $ traverse $ onNamesTm f onNamesAbs f = onNamesAbs' f (stringToArgName <.> f . argNameToString)@@ -597,22 +629,20 @@ contextOfMeta :: InteractionId -> Rewrite -> TCM [OutputConstraint' Expr Name] contextOfMeta ii norm = do info <- getMetaInfo <$> (lookupMeta =<< lookupInteractionId ii)- let localVars = map ctxEntry . envContext . clEnv $ info- letVars = map (\(n, OpenThing _ (tm, (Dom c ty))) -> Dom c (n, ty))- $ Map.toDescList . envLetBindings . clEnv $ info- withMetaInfo info $ gfilter visible <$> reifyContext (length letVars)- (letVars ++ localVars)+ withMetaInfo info $ do+ cxt <- getContext+ let n = length cxt+ localVars = zipWith raise [1..] cxt+ mkLet (x, lb) = do+ (tm, Dom c ty) <- getOpen lb+ return $ Dom c (x, ty)+ letVars <- mapM mkLet . Map.toDescList =<< asks envLetBindings+ gfilter visible . reverse <$> mapM out (letVars ++ localVars) where gfilter p = catMaybes . map p visible (OfType x y) | not (isNoName x) = Just (OfType' x y) | otherwise = Nothing visible _ = __IMPOSSIBLE__- reifyContext skip xs =- reverse <$> zipWithM out- -- don't escape context for letvars- (replicate skip 0 ++ [1..])- xs-- out i (Dom _ (x, t)) = escapeContext i $ do+ out (Dom _ (x, t)) = do t' <- reify =<< normalForm norm t return $ OfType x t' @@ -656,7 +686,7 @@ mv <- lookupMeta mi withMetaInfo (getMetaInfo mv) $ case mvJudgement mv of HasType _ t -> do- t <- reduce =<< piApply t <$> getContextArgs+ t <- reduce =<< piApplyM t =<< getContextArgs -- Andreas, 2013-03-05 Issue 810: skip hidden domains in introduction -- of constructor. TelV tel' t <- telViewUpTo' (-1) notVisible t@@ -700,7 +730,7 @@ okHiding = if allHidden then const True else okHiding0 vars <- -- setShowImplicitArguments (imp || allHidden) $ (if allHidden then withShowAllArguments else id) $- mapM showTCM [ setHiding h $ defaultArg $ var i :: I.Arg Term+ mapM showTCM [ setHiding h $ defaultArg $ var i :: Arg Term | (h, i) <- zip hs $ downFrom n , okHiding h ]@@ -715,8 +745,8 @@ makeName (x, t) = (x, t) introData t = do- let tel = telFromList [domFromArg $ defaultArg ("_", t)]- pat = [defaultArg $ unnamed $ I.VarP "c"]+ let tel = telFromList [defaultDom ("_", t)]+ pat = [defaultArg $ unnamed $ I.VarP (0,"c")] r <- splitLast CoInductive tel pat case r of Left err -> return []@@ -728,7 +758,8 @@ fs <- ifM showImplicitArguments (return $ map unArg hfs) (return [ unArg a | a <- hfs, getHiding a == NotHidden ])- let e = C.Rec noRange $ map (, C.QuestionMark noRange Nothing) fs+ let e = C.Rec noRange $ for fs $ \ f ->+ Left $ C.FieldAssignment f $ C.QuestionMark noRange Nothing return [ prettyShow e ] -- | Runs the given computation as if in an anonymous goal at the end@@ -746,7 +777,7 @@ -- and put them into the context. let names :: [A.Name] names = reverse $ map snd $ notShadowedLocals $ scopeLocals scope- types :: [I.Dom I.Type]+ types :: [Dom I.Type] types = map (snd <$>) $ telToList tel gamma :: ListTel' A.Name gamma = zipWith' (\ x dom -> (x,) <$> dom) names types@@ -765,31 +796,78 @@ _ -> typeError $ GenericError $ "Not an identifier: " ++ show m ++ "." +-- | Check whether an expression is a (qualified) identifier.+isQName :: C.Expr -> Maybe C.QName+isQName m = do+ case m of+ C.Ident m -> return m+ C.RawApp _ [C.Ident m] -> return m+ _ -> Nothing++-- | Returns the contents of the given module or record.++moduleContents+ :: Rewrite+ -- ^ How should the types be presented?+ -> Range+ -- ^ The range of the next argument.+ -> String+ -- ^ The module name.+ -> TCM ([C.Name], [(C.Name, Type)])+ -- ^ Module names, names paired up with corresponding types.++moduleContents norm rng s = traceCall ModuleContents $ do+ e <- parseExpr rng s+ case isQName e of+ -- If the expression is not a single identifier, it is not a module name+ -- and treated as a record expression.+ Nothing -> getRecordContents norm e+ -- Otherwise, if it is not in scope as a module name, it is treated+ -- as a record name.+ Just x -> do+ ms :: [AbstractModule] <- scopeLookup x <$> getScope+ if null ms then getRecordContents norm e else getModuleContents norm x++-- | Returns the contents of the given record identifier.++getRecordContents+ :: Rewrite -- ^ Amount of normalization in types.+ -> C.Expr -- ^ Expression presumably of record type.+ -> TCM ([C.Name], [(C.Name, Type)])+ -- ^ Module names, names paired up with corresponding types.+getRecordContents norm ce = do+ e <- toAbstract ce+ (_, t) <- inferExpr e+ let notRecordType = typeError $ ShouldBeRecordType t+ (q, vs, defn) <- fromMaybeM notRecordType $ isRecordType t+ case defn of+ Record{ recFields = fs, recTel = tel } -> do+ let xs = map (nameConcrete . qnameName . unArg) fs+ doms = telToList $ apply tel vs+ ts <- mapM (normalForm norm) $ map (snd . unDom) doms+ return ([], zip xs ts)+ _ -> __IMPOSSIBLE__+ -- | Returns the contents of the given module. -moduleContents :: Rewrite- -- ^ How should the types be presented- -> Range- -- ^ The range of the next argument.- -> String- -- ^ The module name.- -> TCM ([C.Name], [(C.Name, Type)])- -- ^ Module names, names paired up with- -- corresponding types.-moduleContents norm rng s = do- m <- parseName rng s+getModuleContents+ :: Rewrite -- ^ Amount of normalization in types.+ -> C.QName -- ^ Module name.+ -> TCM ([C.Name], [(C.Name, Type)])+ -- ^ Module names, names paired up with corresponding types.+getModuleContents norm m = do modScope <- getNamedScope . amodName =<< resolveModule m let modules :: ThingsInScope AbstractModule modules = exportedNamesInScope modScope names :: ThingsInScope AbstractName names = exportedNamesInScope modScope- types <- mapM (\(x, n) -> do- d <- getConstInfo $ anameName n- t <- normalForm norm =<< (defType <$> instantiateDef d)- return (x, t))- (concatMap (\(x, ns) -> map ((,) x) ns) $- Map.toList names)+ xns = [ (x,n) | (x, ns) <- Map.toList names, n <- ns ]+ types <- forM xns $ \(x, n) -> do+ d <- getConstInfo $ anameName n+ t <- normalForm norm =<< (defType <$> instantiateDef d)+ return (x, t) return (Map.keys modules, types)+ whyInScope :: String -> TCM (Maybe LocalVar, [AbstractName], [AbstractModule]) whyInScope s = do
src/full/Agda/Interaction/EmacsCommand.hs view
@@ -13,6 +13,8 @@ , displayRunningInfo ) where +import qualified Data.List as List+ import Agda.Utils.Pretty import Agda.Utils.String @@ -34,8 +36,14 @@ pretty (L xs) = parens (hsep (map pretty xs)) pretty (Q x) = text "'" <> pretty x -instance Pretty a => Show (Lisp a) where- show = show . pretty+instance Show (Lisp String) where+ showsPrec _ (A a) = showString a+ showsPrec p (Cons a b) = showString "(" . showsPrec p a . showString " . " .+ showsPrec p b . showString ")"+ showsPrec p (L xs) = showString "(" . foldr (.) (showString ")")+ (List.intersperse (showString " ")+ (map (showsPrec p) xs))+ showsPrec p (Q x) = showString "'" . showsPrec p x -- | Formats a response command. --
src/full/Agda/Interaction/EmacsTop.hs view
@@ -20,11 +20,13 @@ import Agda.Syntax.Common import Agda.TypeChecking.Monad+import qualified Agda.TypeChecking.Monad.Benchmark as Bench import Agda.Interaction.Response as R import Agda.Interaction.InteractionTop import Agda.Interaction.EmacsCommand import Agda.Interaction.Highlighting.Emacs+import Agda.Interaction.Options import Agda.Version @@ -36,26 +38,34 @@ -- 'mimicGHCi' reads the Emacs frontend commands from stdin, -- interprets them and print the result into stdout. -mimicGHCi :: TCM ()-mimicGHCi = do-+mimicGHCi :: TCM () -> TCM ()+mimicGHCi setup = do liftIO $ do- hSetBuffering stdout NoBuffering+ hSetBuffering stdout LineBuffering+ hSetBuffering stdin LineBuffering hSetEncoding stdout utf8 hSetEncoding stdin utf8 setInteractionOutputCallback $ liftIO . mapM_ print <=< lispifyResponse + handleCommand_ (lift setup) `evalStateT` initCommandState+ opts <- commandLineOptions- _ <- interact' `runStateT` initCommandState { optionsOnReload = opts }+ _ <- interact' `runStateT` initCommandState { optionsOnReload = opts{ optAbsoluteIncludePaths = [] } } return () where interact' :: CommandM () interact' = do- liftIO $ putStr "Agda2> "- unlessM (liftIO isEOF) $ do+ Bench.reset+ done <- Bench.billTo [] $ do++ liftIO $ do+ putStr "Agda2> "+ hFlush stdout+ done <- liftIO isEOF+ unless done $ do r <- liftIO getLine _ <- return $! length r -- force to read the full input line case dropWhile isSpace r of@@ -65,8 +75,10 @@ Just (x, "") -> runInteraction x Just (_, rem) -> liftIO $ putStrLn $ "not consumed: " ++ rem _ -> liftIO $ putStrLn $ "cannot read: " ++ r- interact'+ return done + lift Bench.print+ unless done interact' -- | Convert Response to an elisp value for the interactive emacs frontend. @@ -79,12 +91,13 @@ Info_AllGoals s -> f s "*All Goals*" Info_Auto s -> f s "*Auto*" Info_Error s -> f s "*Error*"-+ Info_Time s -> f (render s) "*Time*" Info_NormalForm s -> f (render s) "*Normal Form*" -- show? Info_InferredType s -> f (render s) "*Inferred Type*" Info_CurrentGoal s -> f (render s) "*Current Goal*" Info_GoalType s -> f (render s) "*Goal type etc.*" Info_ModuleContents s -> f (render s) "*Module contents*"+ Info_SearchAbout s -> f (render s) "*Search About*" Info_WhyInScope s -> f (render s) "*Scope Info*" Info_Context s -> f (render s) "*Context*" Info_HelperFunction s -> [ L [ A "agda2-info-action-and-copy"@@ -114,7 +127,7 @@ lispifyResponse (Resp_JumpToError f p) = return [ lastTag 3 $- L [ A "agda2-goto", Q $ L [A (quote f), A ".", A (show p)] ]+ L [ A "agda2-maybe-goto", Q $ L [A (quote f), A ".", A (show p)] ] ] lispifyResponse (Resp_InteractionPoints is) = return [ lastTag 1 $
src/full/Agda/Interaction/FindFile.hs view
@@ -18,10 +18,8 @@ import Control.Applicative import Control.Monad-import Control.Monad.State.Class import Control.Monad.Trans import Data.List-import Data.Map (Map) import qualified Data.Map as Map import System.FilePath
src/full/Agda/Interaction/Highlighting/Emacs.hs view
@@ -7,7 +7,6 @@ , Agda.Interaction.Highlighting.Emacs.tests ) where -import Agda.Interaction.FindFile import Agda.Interaction.Highlighting.Precise import Agda.Interaction.Highlighting.Range import Agda.Interaction.EmacsCommand@@ -78,6 +77,11 @@ -- | Turns syntax highlighting information into a list of -- S-expressions.++-- TODO: The "go-to-definition" targets can contain long strings+-- (absolute paths to files). At least one of these strings (the path+-- to the current module) can occur many times. Perhaps it would be a+-- good idea to use a more compact format. lispifyHighlightingInfo :: HighlightingInfo
src/full/Agda/Interaction/Highlighting/Generate.hs view
@@ -1,6 +1,6 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE RelaxedPolyRec #-}+{-# LANGUAGE RelaxedPolyRec #-} -- | Generates data used for precise syntax highlighting. @@ -8,6 +8,7 @@ ( Level(..) , generateAndPrintSyntaxInfo , generateTokenInfo, generateTokenInfoFromString+ , printSyntaxInfo , printErrorInfo, errorHighlighting , printUnsolvedInfo , printHighlightingInfo@@ -22,23 +23,19 @@ import Control.Monad import Control.Monad.Trans-import Control.Monad.State import Control.Monad.Reader import Control.Applicative-import Control.Arrow ((***), first, second)+import Control.Arrow (second) import Data.Monoid import Data.Generics.Geniplate-import Data.HashSet (HashSet)-import qualified Data.HashSet as HSet import qualified Data.Map as Map import Data.Maybe import Data.List ((\\), isPrefixOf)-import qualified Data.Foldable as Fold (toList, fold, foldMap)-import Data.IntMap (IntMap)+import qualified Data.Foldable as Fold (fold, foldMap) import qualified Data.IntMap as IntMap+import Data.Void -import Agda.Interaction.FindFile import Agda.Interaction.Response (Response(Resp_HighlightingInfo)) import Agda.Interaction.Highlighting.Precise hiding (tests) import Agda.Interaction.Highlighting.Range hiding (tests)@@ -48,11 +45,9 @@ import Agda.TypeChecking.Monad hiding (MetaInfo, Primitive, Constructor, Record, Function, Datatype) import qualified Agda.TypeChecking.Monad as M-import Agda.TypeChecking.Pretty-import qualified Agda.TypeChecking.Reduce as R import qualified Agda.Syntax.Abstract as A-import Agda.Syntax.Common (Delayed(..))+import Agda.Syntax.Concrete (FieldAssignment'(..)) import qualified Agda.Syntax.Common as Common import qualified Agda.Syntax.Concrete as C import qualified Agda.Syntax.Info as SI@@ -67,6 +62,7 @@ import Agda.Utils.Lens import Agda.Utils.List import Agda.Utils.Maybe+import qualified Agda.Utils.Maybe.Strict as Strict import Agda.Utils.Null import Agda.Utils.TestHelpers import Agda.Utils.HashMap (HashMap)@@ -157,6 +153,8 @@ Partial {} -> "(first approximation)" ++ "." + reportSLn "highlighting.names" 60 $ "highlighting names = " ++ show names+ M.ignoreAbstractMode $ do modMap <- sourceToModule kinds <- nameKinds hlLevel decl@@ -217,6 +215,7 @@ , Fold.foldMap getLam $ universeBi decl , Fold.foldMap getTyped $ universeBi decl , Fold.foldMap getPattern $ universeBi decl+ , Fold.foldMap getPatternSyn $ universeBi decl , Fold.foldMap getExpr $ universeBi decl , Fold.foldMap getPatSynArgs $ universeBi decl , Fold.foldMap getModuleName $ universeBi decl@@ -231,6 +230,9 @@ patsyn n = nameToFileA modMap file n True $ \isOp -> mempty { aspect = Just $ Name (Just $ Constructor Common.Inductive) isOp } + macro n = nameToFileA modMap file n True $ \isOp ->+ mempty { aspect = Just $ Name (Just Macro) isOp }+ field m n = nameToFile modMap file m n (\isOp -> mempty { aspect = Just $ Name (Just Field) isOp }) Nothing@@ -247,9 +249,10 @@ (A.nameBindingSite n)) getVarAndField :: A.Expr -> File- getVarAndField (A.Var x) = bound x- getVarAndField (A.Rec _ fs) = mconcat $ map (field [] . fst) fs- getVarAndField _ = mempty+ getVarAndField (A.Var x) = bound x+ getVarAndField (A.Rec _ fs) = mconcat [ field [] x | Left (FieldAssignment x _) <- fs ]+ getVarAndField (A.RecUpdate _ _ fs) = mconcat [ field [] x | (FieldAssignment x _) <- fs ]+ getVarAndField _ = mempty -- Ulf, 2014-04-09: It would be nicer to have it on Named_ a, but -- you can't have polymorphic functions in universeBi.@@ -257,10 +260,11 @@ getNamedArg x = singleton (rToR $ P.getRange x) mempty{ aspect = Just $ Name (Just Argument) False } getLet :: A.LetBinding -> File- getLet (A.LetBind _ _ x _ _) = bound x- getLet A.LetPatBind{} = mempty- getLet A.LetApply{} = mempty- getLet A.LetOpen{} = mempty+ getLet (A.LetBind _ _ x _ _) = bound x+ getLet A.LetPatBind{} = mempty+ getLet A.LetApply{} = mempty+ getLet A.LetOpen{} = mempty+ getLet (A.LetDeclaredVariable x) = bound x getLam :: A.LamBinding -> File getLam (A.DomainFree _ x) = bound x@@ -274,21 +278,29 @@ getPatSynArgs (A.PatternSynDef _ xs _) = mconcat $ map (bound . Common.unArg) xs getPatSynArgs _ = mempty - getPattern :: A.Pattern -> File- getPattern (A.VarP x) = bound x- getPattern (A.AsP _ x _) = bound x- getPattern (A.DotP pi _) =+ getPattern' :: A.Pattern' e -> File+ getPattern' (A.VarP x) = bound x+ getPattern' (A.AsP _ x _) = bound x+ getPattern' (A.DotP pi _) = singleton (rToR $ P.getRange pi) (mempty { otherAspects = [DottedPattern] })- getPattern (A.PatternSynP _ q _) = patsyn q- getPattern _ = mempty+ getPattern' (A.PatternSynP _ q _) = patsyn q+ getPattern' (A.RecP _ fs) = mconcat [ field [] x | FieldAssignment x _ <- fs ]+ getPattern' _ = mempty + getPattern :: A.Pattern -> File+ getPattern = getPattern'++ getPatternSyn :: A.Pattern' Void -> File+ getPatternSyn = getPattern'+ getExpr :: A.Expr -> File getExpr (A.PatternSyn q) = patsyn q+ getExpr (A.Macro q) = macro q getExpr _ = mempty getFieldDecl :: A.Declaration -> File- getFieldDecl (A.RecDef _ _ _ _ _ _ fs) = Fold.foldMap extractField fs+ getFieldDecl (A.RecDef _ _ _ _ _ _ _ fs) = Fold.foldMap extractField fs where extractField (A.ScopedDecl _ ds) = Fold.foldMap extractField ds extractField (A.Field _ x _) = field (concreteQualifier x)@@ -303,7 +315,7 @@ isTopLevelModule = case catMaybes $ map (join .- fmap P.srcFile .+ fmap (Strict.toLazy . P.srcFile) . P.rStart . A.nameBindingSite) xs of f : _ -> Map.lookup f modMap ==@@ -351,11 +363,12 @@ tokenToCFile (T.TokKeyword T.KwForall i) = aToF Symbol (P.getRange i) tokenToCFile (T.TokKeyword _ i) = aToF Keyword (P.getRange i) tokenToCFile (T.TokSymbol _ i) = aToF Symbol (P.getRange i)- tokenToCFile (T.TokLiteral (L.LitInt r _)) = aToF Number r+ tokenToCFile (T.TokLiteral (L.LitNat r _)) = aToF Number r tokenToCFile (T.TokLiteral (L.LitFloat r _)) = aToF Number r tokenToCFile (T.TokLiteral (L.LitString r _)) = aToF String r tokenToCFile (T.TokLiteral (L.LitChar r _)) = aToF String r tokenToCFile (T.TokLiteral (L.LitQName r _)) = aToF String r+ tokenToCFile (T.TokLiteral (L.LitMeta r _ _)) = aToF String r tokenToCFile (T.TokComment (i, _)) = aToF Comment (P.getRange i) tokenToCFile (T.TokTeX (i, _)) = aToF Comment (P.getRange i) tokenToCFile (T.TokId {}) = mempty@@ -384,7 +397,7 @@ -- Traverses the syntax tree and constructs a map from qualified -- names to name kinds. TODO: Handle open public. let syntax = foldr ($) HMap.empty $ map declToKind $ universeBi decl- let merged = HMap.unions [local, imported, syntax]+ let merged = unions [local, imported, syntax] return (\n -> HMap.lookup n merged) where fix = HMap.map (defnToKind . theDef) . (^. sigDefinitions)@@ -394,11 +407,13 @@ -- are thrown away whenever possible. The 'declToKind' function -- below can return several explanations for one qualified name; the -- 'Postulate's are bogus.- insert = HMap.insertWith dropPostulates- where- dropPostulates Postulate k = k- dropPostulates k _ = k+ merge Postulate k = k+ merge _ Macro = Macro -- If the abstract syntax says macro, it's a macro.+ merge k _ = k + unions = foldr (HMap.unionWith merge) HMap.empty+ insert = HMap.insertWith merge+ defnToKind :: Defn -> NameKind defnToKind M.Axiom{} = Postulate defnToKind d@M.Function{} | isProperProjection d = Field@@ -410,7 +425,9 @@ declToKind :: A.Declaration -> HashMap A.QName NameKind -> HashMap A.QName NameKind- declToKind (A.Axiom _ _ _ q _) = insert q Postulate+ declToKind (A.Axiom _ i _ q _)+ | SI.defMacro i == Common.MacroDef = insert q Macro+ | otherwise = insert q Postulate declToKind (A.Field _ q _) = insert q Field -- Function -- Note that the name q can be used both as a field name and as a -- projection function. Highlighting of field names is taken care@@ -424,8 +441,9 @@ declToKind (A.ScopedDecl {}) = id declToKind (A.Open {}) = id declToKind (A.PatternSynDef q _ _) = insert q (Constructor Common.Inductive)- declToKind (A.FunDef _ q _ _) = insert q Function- declToKind (A.UnquoteDecl _ _ q _) = insert q Function+ declToKind (A.FunDef _ q _ _) = insert q Function+ declToKind (A.UnquoteDecl _ _ qs _) = foldr (\ q f -> insert q Function . f) id qs+ declToKind (A.UnquoteDef _ qs _) = foldr (\ q f -> insert q Function . f) id qs declToKind (A.DataSig _ q _ _) = insert q Datatype declToKind (A.DataDef _ q _ cs) = \m -> insert q Datatype $@@ -433,7 +451,7 @@ (Constructor Common.Inductive)) m cs declToKind (A.RecSig _ q _ _) = insert q Record- declToKind (A.RecDef _ q _ c _ _ _) = insert q Record .+ declToKind (A.RecDef _ q _ _ c _ _ _) = insert q Record . case c of Nothing -> id Just q -> insert q (Constructor Common.Inductive)@@ -456,7 +474,8 @@ -- Get boundaries of current declaration. -- @noRange@ should be impossible, but in case of @noRange@ -- it makes sense to return the empty File.- ifNull (P.getRange decl) (return mempty) $ \ (P.Range is) -> do+ ifNull (P.rangeIntervals $ P.getRange decl)+ (return mempty) $ \is -> do let start = fromIntegral $ P.posPos $ P.iStart $ head is end = fromIntegral $ P.posPos $ P.iEnd $ last is @@ -470,7 +489,13 @@ let files = for constrs $ \ q -> generate modMap file kinds $ A.AmbQ [q] return $ Fold.fold files +printSyntaxInfo :: P.Range -> TCM ()+printSyntaxInfo r = do+ syntaxInfo <- use stSyntaxInfo+ ifTopLevelAndHighlightingLevelIs NonInteractive $+ printHighlightingInfo (selectC r syntaxInfo) + -- | Prints syntax highlighting info for an error. printErrorInfo :: TCErr -> TCM ()@@ -599,7 +624,7 @@ -> File nameToFile modMap file xs x m mR = -- We don't care if we get any funny ranges.- if all (== Just file) fileNames then+ if all (== Strict.Just file) fileNames then several (map rToR rs) ((m $ C.isOperator x) { definitionSite = mFilePos }) else@@ -609,7 +634,7 @@ rs = map P.getRange (x : xs) mFilePos = do r <- mR- P.Pn { P.srcFile = Just f, P.posPos = p } <- P.rStart r+ P.Pn { P.srcFile = Strict.Just f, P.posPos = p } <- P.rStart r mod <- Map.lookup f modMap return (mod, fromIntegral p) @@ -652,9 +677,7 @@ storeDisambiguatedName q = whenJust (start $ P.getRange q) $ \ i -> stDisambiguatedNames %= IntMap.insert i q where- start (P.Range []) = Nothing- start (P.Range (i:_)) = Just $ fromIntegral $ P.posPos $ P.iStart i- -- TODO: Move start to Agda.Syntax.Position+ start r = fromIntegral . P.posPos <$> P.rStart' r ------------------------------------------------------------------------ -- All tests
src/full/Agda/Interaction/Highlighting/HTML.hs view
@@ -17,7 +17,6 @@ import Control.Applicative import Control.Monad import Control.Monad.Trans-import Control.Monad.State.Class import Data.Function import Data.Monoid@@ -36,7 +35,6 @@ import Agda.Interaction.Highlighting.Precise import Agda.Interaction.Options -import qualified Agda.Syntax.Abstract as A import qualified Agda.Syntax.Concrete as C import Agda.Syntax.Common
src/full/Agda/Interaction/Highlighting/LaTeX.hs view
@@ -23,7 +23,6 @@ import qualified Data.IntMap as IntMap import qualified Data.List as List-import qualified Data.Map as Map import Paths_Agda @@ -37,7 +36,6 @@ import Agda.Compiler.CallCompiler import qualified Agda.Utils.IO.UTF8 as UTF8 import Agda.Utils.FileName (filePath)-import Agda.Utils.Pretty (pretty, render) import Agda.Utils.Except ( ExceptT, MonadError(throwError), runExceptT ) @@ -340,29 +338,35 @@ case aspect (info tok') of Nothing -> output $ escape tok--- Just a -> output $ cmdPrefix <+> T.pack (cmd a) <+> cmdArg (escape tok)--- Andreas, 2014-02-17 preliminary fix for issue 1062- Just a -> case cmd a of- "" -> output $ escape tok- s -> output $ cmdPrefix <+> T.pack s <+> cmdArg (escape tok)+ Just a -> output $ cmdPrefix <+> T.pack (cmd a) <+> cmdArg (escape tok) code where cmd :: Aspect -> String--- cmd (Name mKind _) = maybe __IMPOSSIBLE__ showKind mKind--- Andreas, 2014-02-17 preliminary fix for issue 1062- cmd (Name mKind _) = maybe "" showKind mKind- where- showKind :: NameKind -> String- showKind (Constructor Inductive) = "InductiveConstructor"- showKind (Constructor CoInductive) = "CoinductiveConstructor"- -- Andreas, 2014-02-17- -- It might be boring boilerplate, but please spell out the- -- remaining cases instead of using the brittle @show@ function.- -- What if a constructor in @NameKind@ gets renamed?- showKind k = show k- cmd a = show a+ cmd a = let s = show a in case a of+ Comment -> s+ Keyword -> s+ String -> s+ Number -> s+ Symbol -> s+ PrimitiveType -> s+ Name mKind _ -> maybe __IMPOSSIBLE__ showKind mKind+ where+ showKind :: NameKind -> String+ showKind n = let s = show n in case n of+ Bound -> s+ Constructor Inductive -> "InductiveConstructor"+ Constructor CoInductive -> "CoinductiveConstructor"+ Datatype -> s+ Field -> s+ Function -> s+ Module -> s+ Postulate -> s+ Primitive -> s+ Record -> s+ Argument -> s+ Macro -> s -- Escapes special characters. escape :: Text -> Text@@ -378,9 +382,9 @@ '$' -> "\\$" '&' -> "\\&" '%' -> "\\%"- '~' -> "\\textasciitilde"- '^' -> "\\textasciicircum"- '\\' -> "\\textbackslash"+ '~' -> "\\textasciitilde{}"+ '^' -> "\\textasciicircum{}"+ '\\' -> "\\textbackslash{}" -- Escaping newlines seems to fix the problem caused by pattern -- synonyms. '\n' -> "\\<\\\\\n\\>"
src/full/Agda/Interaction/Highlighting/Precise.hs view
@@ -26,6 +26,7 @@ , singletonC , severalC , splitAtC+ , selectC -- ** Inspection , smallestPosC -- * Tests@@ -35,18 +36,19 @@ import Agda.Utils.TestHelpers import Agda.Utils.String import Agda.Utils.List hiding (tests)+import Data.Maybe import Data.List import Data.Function import Data.Monoid import Control.Applicative ((<$>), (<*>))+import Control.Arrow (second) import Control.Monad import Agda.Utils.QuickCheck import Data.IntMap (IntMap) import qualified Data.IntMap as IntMap-import Data.Map (Map)-import qualified Data.Map as Map import Data.Typeable (Typeable) +import qualified Agda.Syntax.Position as P import qualified Agda.Syntax.Common as Common import qualified Agda.Syntax.Concrete as SC @@ -82,6 +84,7 @@ | Primitive -- ^ Primitive. | Record -- ^ Record type. | Argument -- ^ Named argument, like x in {x = v}+ | Macro -- ^ Macro. deriving (Eq, Show, Typeable) -- | Other aspects, generated by type checking.@@ -117,8 +120,11 @@ -- ^ The definition site of the annotated thing, if applicable and -- known. File positions are counted from 1. }- deriving (Eq, Show, Typeable)+ deriving (Show, Typeable) +instance Eq Aspects where+ Aspects a o _ d == Aspects a' o' _ d' = (a, nub o, d) == (a', nub o', d')+ -- | A 'File' is a mapping from file positions to meta information. -- -- The first position in the file has number 1.@@ -351,6 +357,15 @@ positions = IntMap.keys . toMap . decompress ++selectC :: P.Range -> CompressedFile -> CompressedFile+selectC r cf = cf'+ where+ empty = (0,0)+ (from, to) = fromMaybe empty (rangeToEndPoints r)+ (_, (cf', _)) = (second (splitAtC to)) . splitAtC from $ cf++ -- | Returns the smallest position, if any, in the 'CompressedFile'. smallestPosC :: CompressedFile -> Maybe Int@@ -409,6 +424,7 @@ coarbitrary Primitive = variant 7 coarbitrary Record = variant 8 coarbitrary Argument = variant 9+ coarbitrary Macro = variant 10 instance Arbitrary OtherAspect where arbitrary = elements [minBound .. maxBound]
src/full/Agda/Interaction/Highlighting/Range.hs view
@@ -12,6 +12,7 @@ , rangeToPositions , rangesToPositions , rToR+ , rangeToEndPoints , minus , Agda.Interaction.Highlighting.Range.tests ) where@@ -86,12 +87,19 @@ -- | Converts a 'P.Range' to a 'Ranges'. rToR :: P.Range -> Ranges-rToR (P.Range is) = Ranges (map iToR is)+rToR r = Ranges (map iToR (P.rangeIntervals r)) where iToR (P.Interval { P.iStart = P.Pn { P.posPos = pos1 } , P.iEnd = P.Pn { P.posPos = pos2 } }) = Range { from = fromIntegral pos1, to = fromIntegral pos2 }++rangeToEndPoints :: P.Range -> Maybe (Int,Int)+rangeToEndPoints r =+ case P.rangeToInterval r of+ Nothing -> Nothing+ Just i -> Just ( fromIntegral $ P.posPos $ P.iStart i+ , fromIntegral $ P.posPos $ P.iEnd i) ------------------------------------------------------------------------ -- Operations
src/full/Agda/Interaction/Imports.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE TupleSections #-} #if __GLASGOW_HASKELL__ >= 710@@ -51,6 +51,8 @@ import Agda.TypeChecking.Serialise import Agda.TypeChecking.Telescope import Agda.TypeChecking.Primitive+import Agda.TypeChecking.Rewriting (killCtxId)+import Agda.TypeChecking.DeadCode import qualified Agda.TypeChecking.Monad.Benchmark as Bench import Agda.TheTypeChecker@@ -72,6 +74,7 @@ import Agda.Utils.Pretty import Agda.Utils.Time import Agda.Utils.Hash+import qualified Agda.Utils.HashMap as HMap import qualified Agda.Utils.Trie as Trie #include "undefined.h"@@ -105,23 +108,27 @@ Just b1 = Map.lookup b bs Just b2 = Map.lookup b bi mapM_ check (map fst $ Map.toList $ Map.intersection bs bi)- addImportedThings sig bi (iHaskellImports i) (iPatternSyns i)+ addImportedThings sig bi (iHaskellImports i) (iHaskellImportsUHC i) (iPatternSyns i) (iDisplayForms i) reportSLn "import.iface.merge" 20 $ " Rebinding primitives " ++ show prim- prim <- Map.fromList <$> mapM rebind prim- stImportedBuiltins %= (`Map.union` prim)+ mapM_ rebind prim where rebind (x, q) = do PrimImpl _ pf <- lookupPrimitiveFunction x- return (x, Prim $ pf { primFunName = q })+ stImportedBuiltins %= Map.insert x (Prim pf{ primFunName = q }) addImportedThings ::- Signature -> BuiltinThings PrimFun -> Set String -> A.PatternSynDefns -> TCM ()-addImportedThings isig ibuiltin hsImports patsyns = do- stImports %= \imp -> unionSignatures [imp, isig]+ Signature -> BuiltinThings PrimFun ->+ Set String -> -- MAlonzo imoprts+ Set String -> -- UHC backend imports+ A.PatternSynDefns -> DisplayForms -> TCM ()+addImportedThings isig ibuiltin hsImports hsImportsUHC patsyns display = do+ stImports %= \imp -> unionSignatures [imp, over sigRewriteRules killCtxId isig] stImportedBuiltins %= \imp -> Map.union imp ibuiltin stHaskellImports %= \imp -> Set.union imp hsImports+ stHaskellImportsUHC %= \imp -> Set.union imp hsImportsUHC stPatternSynImports %= \imp -> Map.union imp patsyns+ stImportedDisplayForms %= \imp -> HMap.unionWith (++) imp display addSignatureInstances isig -- | Scope checks the given module. A proper version of the module@@ -373,6 +380,7 @@ return (False, (i, NoWarnings)) typeCheckThe file = do+ unless includeStateChanges cleanCachedLog let withMsgs = bracket_ (chaseMsg "Checking" $ Just $ filePath file) (const $ chaseMsg "Finished" Nothing)@@ -384,9 +392,10 @@ -- Merge the signature with the signature for imported -- things.- sig <- getSignature+ sig <- getSignature patsyns <- getPatternSyns- addImportedThings sig Map.empty Set.empty patsyns+ display <- use stImportsDisplayForms+ addImportedThings sig Map.empty Set.empty Set.empty patsyns display setSignature emptySignature setPatternSyns Map.empty @@ -402,6 +411,7 @@ opts <- stPersistentOptions . stPersistentState <$> get isig <- getImportedSignature ibuiltin <- use stImportedBuiltins+ display <- use stImportsDisplayForms ipatsyns <- getPatternSynImports ho <- getInteractionOutputCallback -- Every interface is treated in isolation. Note: Changes@@ -425,7 +435,7 @@ setInteractionOutputCallback ho stModuleToSource .= mf setVisitedModules vs- addImportedThings isig ibuiltin Set.empty ipatsyns+ addImportedThings isig ibuiltin Set.empty Set.empty ipatsyns display r <- withMsgs $ createInterface file x mf <- use stModuleToSource@@ -506,9 +516,10 @@ -- i <- return $ -- i { iInsideScope = emptyScopeInfo -- }- i <- return $- i { iInsideScope = removePrivates $ iInsideScope i- }+ -- Andreas, 2016-02-02 this causes issue #1804, so don't do it:+ -- i <- return $+ -- i { iInsideScope = removePrivates $ iInsideScope i+ -- } encodeFile file i reportSLn "import.iface.write" 5 $ "Wrote interface file." reportSLn "import.iface.write" 50 $ " hash = " ++ show (iFullHash i) ++ ""@@ -548,6 +559,7 @@ " visited: " ++ intercalate ", " (map prettyShow visited) previousHsImports <- getHaskellImports+ previousHsImportsUHC <- getHaskellImportsUHC -- Parsing. (pragmas, top) <- Bench.billTo [Bench.Parsing] $@@ -560,13 +572,15 @@ options = catMaybes $ map getOptions pragmas mapM_ setOptionsFromPragma options + -- Scope checking. reportSLn "import.iface.create" 7 $ "Starting scope checking." topLevel <- Bench.billTo [Bench.Scoping] $ concreteToAbstract_ (TopLevel file top) reportSLn "import.iface.create" 7 $ "Finished scope checking." - let ds = topLevelDecls topLevel+ let ds = topLevelDecls topLevel+ scope = topLevelScope topLevel -- Highlighting from scope checker. reportSLn "import.iface.create" 7 $ "Starting highlighting from scope."@@ -577,9 +591,23 @@ mapM_ (\ d -> generateAndPrintSyntaxInfo d Partial) ds reportSLn "import.iface.create" 7 $ "Finished highlighting from scope." + -- Type checking.++ -- invalidate cache if pragmas change, TODO move+ cachingStarts+ opts <- use stPragmaOptions+ me <- readFromCachedLog+ case me of+ Just (Pragmas opts', _) | opts == opts'+ -> return ()+ _ -> do+ reportSLn "cache" 10 $ "pragma changed: " ++ show (isJust me)+ cleanCachedLog+ writeToCurrentLog $ Pragmas opts+ reportSLn "import.iface.create" 7 $ "Starting type checking."- Bench.billTo [Bench.Typing] $ checkDecls ds+ Bench.billTo [Bench.Typing] $ mapM_ checkDeclCached ds `finally_` cacheCurrentLog reportSLn "import.iface.create" 7 $ "Finished type checking." -- Ulf, 2013-11-09: Since we're rethrowing the error, leave it up to the@@ -609,17 +637,25 @@ whenM (optGenerateVimFile <$> commandLineOptions) $ -- Generate Vim file.- withScope_ (insideScope topLevel) $ generateVimFile $ filePath file+ withScope_ scope $ generateVimFile $ filePath file reportSLn "import.iface.create" 7 $ "Finished highlighting from type info." - setScope $ outsideScope topLevel- reportSLn "scope.top" 50 $ "SCOPE " ++ show (insideScope topLevel)+ setScope scope+ reportSLn "scope.top" 50 $ "SCOPE " ++ show scope -- Serialization. reportSLn "import.iface.create" 7 $ "Starting serialization." syntaxInfo <- use stSyntaxInfo i <- Bench.billTo [Bench.Serialization] $ do- buildInterface file topLevel syntaxInfo previousHsImports options+ buildInterface file topLevel syntaxInfo previousHsImports previousHsImportsUHC options++ reportSLn "tc.top" 101 $ concat $+ "Signature:\n" :+ [ show x ++ "\n type: " ++ show (defType def)+ ++ "\n def: " ++ show cc ++ "\n"+ | (x, def) <- HMap.toList $ iSignature i ^. sigDefinitions,+ Function{ funCompiled = cc } <- [theDef def]+ ] reportSLn "import.iface.create" 7 $ "Finished serialization." -- TODO: It would be nice if unsolved things were highlighted@@ -627,6 +663,7 @@ openMetas <- getOpenMetas unless (null openMetas) $ do+ reportSLn "import.metas" 10 "We have unsolved metas." reportSLn "import.metas" 10 . unlines =<< showOpenMetas unsolvedMetas <- List.nub <$> mapM getMetaRange openMetas unsolvedConstraints <- getAllConstraints@@ -673,11 +710,13 @@ -> HighlightingInfo -- ^ Syntax highlighting info for the module. -> Set String- -- ^ Haskell modules imported in imported modules (transitively).+ -- ^ MAlonzo: Haskell modules imported in imported modules (transitively).+ -> Set String+ -- ^ UHC backend: Haskell modules imported in imported modules (transitively). -> [OptionsPragma] -- ^ Options set in @OPTIONS@ pragmas. -> TCM Interface-buildInterface file topLevel syntaxInfo previousHsImports pragmas = do+buildInterface file topLevel syntaxInfo previousHsImports previousHsImportsUHC pragmas = do reportSLn "import.iface" 5 "Building interface..." let m = topLevelModuleName topLevel scope' <- getScope@@ -687,11 +726,17 @@ -- Andreas, Makoto, 2014-10-18 AIM XX: repeating the experiment -- with discarding also the nameBindingSite in QName: -- Saves 10% on serialization time (and file size)!- sig <- killRange <$> getSignature builtin <- use stLocalBuiltins ms <- getImports mhs <- mapM (\ m -> (m,) <$> moduleHash m) $ Set.toList ms hsImps <- getHaskellImports+ uhcHsImps <- getHaskellImportsUHC+ hsCode <- use stHaskellCode+ -- Ulf, 2016-04-12:+ -- Non-closed display forms are not applicable outside the module anyway,+ -- and should be dead-code eliminated (#1928).+ display <- HMap.filter (not . null) . HMap.map (filter isClosed) <$> use stImportsDisplayForms+ (display, sig) <- second killRange <$> (eliminateDeadCode display =<< getSignature) -- Andreas, 2015-02-09 kill ranges in pattern synonyms before -- serialization to avoid error locations pointing to external files -- when expanding a pattern synoym.@@ -704,10 +749,13 @@ , iImportedModules = mhs , iModuleName = m , iScope = empty -- publicModules scope- , iInsideScope = insideScope topLevel+ , iInsideScope = topLevelScope topLevel , iSignature = sig+ , iDisplayForms = display , iBuiltin = builtin' , iHaskellImports = hsImps `Set.difference` previousHsImports+ , iHaskellImportsUHC = uhcHsImps `Set.difference` previousHsImportsUHC+ , iHaskellCode = hsCode , iHighlighting = syntaxInfo , iPragmaOptions = pragmas , iPatternSyns = patsyns
src/full/Agda/Interaction/InteractionTop.hs view
@@ -1,15 +1,15 @@-{-# OPTIONS -fno-cse #-}--{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveFoldable #-}-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE Rank2Types #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE Rank2Types #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-} +{-# OPTIONS_GHC -fno-cse #-}+ {-# OPTIONS_GHC -fno-warn-orphans #-} module Agda.Interaction.InteractionTop@@ -63,6 +63,7 @@ import Agda.Interaction.Options import Agda.Interaction.Options.Lenses as Lenses import Agda.Interaction.MakeCase+import Agda.Interaction.SearchAbout import Agda.Interaction.Response hiding (Function, ExtendedLambda) import qualified Agda.Interaction.Response as R import qualified Agda.Interaction.BasicOps as B@@ -71,6 +72,7 @@ import Agda.Interaction.Highlighting.Generate import qualified Agda.Interaction.Highlighting.Range as H +import Agda.Compiler.Common (IsMain (..)) import qualified Agda.Compiler.Epic.Compiler as Epic import qualified Agda.Compiler.MAlonzo.Compiler as MAlonzo import qualified Agda.Compiler.JS.Compiler as JS@@ -89,6 +91,7 @@ import qualified Agda.Utils.HashMap as HMap import Agda.Utils.Lens import Agda.Utils.Maybe+import qualified Agda.Utils.Maybe.Strict as Strict import Agda.Utils.Monad import Agda.Utils.Null import Agda.Utils.Pretty@@ -116,7 +119,7 @@ -- the file when it was last loaded. , optionsOnReload :: CommandLineOptions -- ^ Reset the options on each reload to these.- , oldInteractionScopes :: OldInteractionScopes+ , oldInteractionScopes :: !OldInteractionScopes -- ^ We remember (the scope of) old interaction points to make it -- possible to parse and compute highlighting information for the -- expression that it got replaced by.@@ -202,56 +205,27 @@ Nothing -> fail $ "not an old interaction point: " ++ show ii Just scope -> return scope --- | Run an 'IOTCM' value, catch the exceptions, emit output------ If an error happens the state of 'CommandM' does not change,--- but stPersistent may change (which contains successfully--- loaded interfaces for example).--runInteraction :: IOTCM -> CommandM ()-runInteraction (IOTCM current highlighting highlightingMethod cmd)- = handleNastyErrors- $ inEmacs- $ do- current <- liftIO $ absolute current-- res <- (`catchErr` (return . Just)) $ do-- -- Raises an error if the given file is not the one currently- -- loaded.- cf <- gets theCurrentFile- when (not (independent cmd) && Just current /= (fst <$> cf)) $- lift $ typeError $ GenericError "Error: First load the file."-- withCurrentFile $ interpret cmd+-- | Do setup and error handling for a command. - cf <- gets theCurrentFile- when (Just current == (fst <$> cf)) $- putResponse . Resp_InteractionPoints =<< gets theInteractionPoints- return Nothing+handleCommand_ :: CommandM () -> CommandM ()+handleCommand_ = handleCommand id (return ()) - maybe (return ()) handleErr res+handleCommand :: (forall a. CommandM a -> CommandM a) -> CommandM () -> CommandM () -> CommandM ()+handleCommand wrap onFail cmd = handleNastyErrors $ wrap $ do+ res <- (`catchErr` (return . Just)) $ Nothing <$ cmd+ maybe (return ()) (\ e -> onFail >> handleErr e) res where -- Preserves state so we can do unsolved meta highlighting catchErr :: CommandM a -> (TCErr -> CommandM a) -> CommandM a catchErr m h = do s <- get- -- If an independent command fails we should reset theCurrentFile (Issue853).- let sErr | independent cmd = s { theCurrentFile = Nothing }- | otherwise = s- (x, s') <- lift $ do- disableDestructiveUpdate (runStateT m s)+ (x, s') <- lift $ do disableDestructiveUpdate (runStateT m s) `catchError_` \ e ->- runStateT (h e) sErr+ runStateT (h e) s put s' return x - inEmacs = liftCommandMT $ withEnv $ initEnv- { envHighlightingLevel = highlighting- , envHighlightingMethod = highlightingMethod- }- -- | Handle nasty errors like stack space overflow (issue 637) -- We assume that the input action handles other kind of errors. handleNastyErrors :: CommandM () -> CommandM ()@@ -280,20 +254,51 @@ , sShowImplicitArguments = x } ] +-- | Run an 'IOTCM' value, catch the exceptions, emit output+--+-- If an error happens the state of 'CommandM' does not change,+-- but stPersistent may change (which contains successfully+-- loaded interfaces for example). +runInteraction :: IOTCM -> CommandM ()+runInteraction (IOTCM current highlighting highlightingMethod cmd) =+ handleCommand inEmacs onFail $ do+ current <- liftIO $ absolute current+ -- Raises an error if the given file is not the one currently+ -- loaded.+ cf <- gets theCurrentFile+ when (not (independent cmd) && Just current /= (fst <$> cf)) $+ lift $ typeError $ GenericError "Error: First load the file."++ withCurrentFile $ interpret cmd++ cf <- gets theCurrentFile+ when (Just current == (fst <$> cf)) $+ putResponse . Resp_InteractionPoints =<< gets theInteractionPoints++ where+ inEmacs = liftCommandMT $ withEnv $ initEnv+ { envHighlightingLevel = highlighting+ , envHighlightingMethod = highlightingMethod+ }++ -- If an independent command fails we should reset theCurrentFile (Issue853).+ onFail | independent cmd = modify $ \ s -> s { theCurrentFile = Nothing }+ | otherwise = return ()+ ---------------------------------------------------------------------------- -- | An interactive computation. type Interaction = Interaction' Range data Interaction' range- -- | @cmd_load m includes@ loads the module in file @m@, using- -- @includes@ as the include directories.- = Cmd_load FilePath [FilePath]+ -- | @cmd_load m argv@ loads the module in file @m@, using+ -- @argv@ as the command-line options.+ = Cmd_load FilePath [String] - -- | @cmd_compile b m includes@ compiles the module in file @m@ using- -- the backend @b@, using @includes@ as the include directories.- | Cmd_compile Backend FilePath [FilePath]+ -- | @cmd_compile b m argv@ compiles the module in file @m@ using+ -- the backend @b@, using @argv@ as the command-line options.+ | Cmd_compile Backend FilePath [String] | Cmd_constraints @@ -307,6 +312,10 @@ B.Rewrite String + -- | Shows all the top-level names in scope which mention all the given+ -- identifiers in their type.+ | Cmd_search_about_toplevel B.Rewrite String+ | Cmd_solveAll -- | Parse the given expression (as if it were defined at the@@ -465,13 +474,15 @@ readsPrec = parseToReadsPrec $ fmap InteractionId readParse +-- | Note that the grammar implemented by this instance does not+-- necessarily match the current representation of ranges.+ instance Read a => Read (Range' a) where- readsPrec = parseToReadsPrec $ do- exact "Range"- fmap Range readParse- `mplus` do- exact "noRange"- return noRange+ readsPrec = parseToReadsPrec $+ (exact "intervalsToRange" >>+ liftM2 intervalsToRange readParse readParse)+ `mplus`+ (exact "noRange" >> return noRange) instance Read a => Read (Interval' a) where readsPrec = parseToReadsPrec $ do@@ -504,16 +515,16 @@ interpret :: Interaction -> CommandM () -interpret (Cmd_load m includes) =- cmd_load' m includes True $ \_ -> interpret Cmd_metas+interpret (Cmd_load m argv) =+ cmd_load' m argv True $ \_ -> interpret Cmd_metas -interpret (Cmd_compile b file includes) =- cmd_load' file includes False $ \(i, mw) -> do+interpret (Cmd_compile b file argv) =+ cmd_load' file argv False $ \(i, mw) -> do case mw of Imp.NoWarnings -> do lift $ case b of- MAlonzo -> MAlonzo.compilerMain True i- MAlonzoNoMain -> MAlonzo.compilerMain False i+ MAlonzo -> MAlonzo.compilerMain IsMain i+ MAlonzoNoMain -> MAlonzo.compilerMain NotMain i Epic -> Epic.compilerMain i JS -> JS.compilerMain i display_info $ Info_CompilationOk@@ -536,6 +547,9 @@ interpret (Cmd_show_module_contents_toplevel norm s) = liftCommandMT B.atTopLevel $ showModuleContents norm noRange s +interpret (Cmd_search_about_toplevel norm s) =+ liftCommandMT B.atTopLevel $ searchAbout norm noRange s+ interpret Cmd_solveAll = do out <- lift $ mapM lowr =<< B.getSolvedInteractionPoints False -- only solve metas which have a proper instantiation, i.e., not another meta putResponse $ Resp_SolveAll out@@ -558,21 +572,21 @@ interpret (ShowImplicitArgs showImpl) = do opts <- lift commandLineOptions- setCommandLineOptions' $+ setCommandLineOpts $ opts { optPragmaOptions = (optPragmaOptions opts) { optShowImplicit = showImpl } } interpret ToggleImplicitArgs = do opts <- lift commandLineOptions let ps = optPragmaOptions opts- setCommandLineOptions' $+ setCommandLineOpts $ opts { optPragmaOptions = ps { optShowImplicit = not $ optShowImplicit ps } } interpret (Cmd_load_highlighting_info source) = do -- Make sure that the include directories have -- been set.- setCommandLineOptions' =<< lift commandLineOptions+ setCommandLineOpts =<< lift commandLineOptions resp <- lift $ liftIO . tellToUpdateHighlighting =<< do ex <- liftIO $ doesFileExist source@@ -625,8 +639,7 @@ liftCommandMT (B.withInteractionId ii) $ case ss of [] -> do display_info $ Info_Intro $ text "No introduction forms found."- [s] -> do- interpret $ Cmd_refine ii rng s+ [s] -> give_gen ii rng s Intro _:_:_ -> do display_info $ Info_Intro $ sep [ text "Don't know which constructor to introduce of"@@ -737,11 +750,11 @@ -- Drops pattern added to extended lambda functions when lambda lifting them extlam_dropLLifted :: CaseContext -> Bool -> A.Clause -> A.Clause extlam_dropLLifted Nothing _ x = x- extlam_dropLLifted (Just (ExtLamInfo h nh)) hidden (A.Clause (A.LHS info A.LHSProj{} ps) rhs decl) = __IMPOSSIBLE__- extlam_dropLLifted (Just (ExtLamInfo h nh)) hidden (A.Clause (A.LHS info (A.LHSHead name nps) ps) rhs decl)+ extlam_dropLLifted (Just (ExtLamInfo h nh)) hidden (A.Clause (A.LHS info A.LHSProj{} ps) rhs decl catchall) = __IMPOSSIBLE__+ extlam_dropLLifted (Just (ExtLamInfo h nh)) hidden (A.Clause (A.LHS info (A.LHSHead name nps) ps) rhs decl catchall) = let n = if hidden then h + nh else nh in- (A.Clause (A.LHS info (A.LHSHead name (drop n nps)) ps) rhs decl)+ (A.Clause (A.LHS info (A.LHSHead name (drop n nps)) ps) rhs decl catchall) interpret (Cmd_compute ignore ii rng s) = do e <- lift $ B.parseExprIn ii rng s@@ -777,23 +790,23 @@ return $ d ++ " [ at " ++ show r ++ " ]" --- | @cmd_load' file includes unsolvedOk cmd@+-- | @cmd_load' file argv unsolvedOk cmd@ -- loads the module in file @file@,--- using @includes@ as the include directories.+-- using @argv@ as the command-line options. -- -- If type checking completes without any exceptions having been -- encountered then the command @cmd r@ is executed, where @r@ is the -- result of 'Imp.typeCheckMain'. -cmd_load' :: FilePath -> [FilePath]+cmd_load' :: FilePath -> [String] -> Bool -- ^ Allow unsolved meta-variables? -> ((Interface, Imp.MaybeWarnings) -> CommandM ()) -> CommandM ()-cmd_load' file includes unsolvedOK cmd = do+cmd_load' file argv unsolvedOK cmd = do f <- liftIO $ absolute file ex <- liftIO $ doesFileExist $ filePath f- lift $ TM.setIncludeDirs includes $- if ex then ProjectRoot f else CurrentDir+ let relativeTo | ex = ProjectRoot f+ | otherwise = CurrentDir -- Forget the previous "current file" and interaction points. modify $ \st -> st { theInteractionPoints = []@@ -803,15 +816,15 @@ t <- liftIO $ getModificationTime file -- All options are reset when a file is reloaded, including the- -- choice of whether or not to display implicit arguments. (At- -- this point the include directories have already been set, so- -- they are preserved.)- opts <- lift $ commandLineOptions- defaultOptions <- gets optionsOnReload- setCommandLineOptions' $- Lenses.setIncludeDirs (optIncludeDirs opts) $- mapPragmaOptions (\ o -> o { optAllowUnsolved = unsolvedOK }) $- defaultOptions+ -- choice of whether or not to display implicit arguments.+ opts0 <- gets optionsOnReload+ z <- liftIO $ runOptM $ parseStandardOptions' argv opts0+ case z of+ Left err -> lift $ typeError $ GenericError err+ Right opts -> do+ lift $ TM.setCommandLineOptions' relativeTo $+ mapPragmaOptions (\ o -> o { optAllowUnsolved = unsolvedOK }) opts+ displayStatus -- Reset the state, preserving options and decoded modules. Note -- that if the include directories have changed, then the decoded@@ -825,6 +838,9 @@ -- Remove any prior syntax highlighting. putResponse Resp_ClearHighlighting + -- We activate the cache only when agda is used interactively+ lift activateLoadedFileCache+ ok <- lift $ Imp.typeCheckMain f -- The module type checked. If the file was not changed while the@@ -852,7 +868,7 @@ | Epic | JS deriving (Show, Read) -data GiveRefine = Give | Refine+data GiveRefine = Give | Refine | Intro deriving (Eq, Show) -- | A "give"-like action (give, refine, etc).@@ -879,17 +895,19 @@ case giveRefine of Give -> B.give Refine -> B.refine+ Intro -> B.refine -- save scope of the interaction point (for printing the given expr. later) scope <- lift $ getInteractionScope ii -- parse string and "give", obtaining an abstract expression -- and newly created interaction points- (ae, iis) <- lift $ do- mis <- getInteractionPoints- reportSLn "interaction.give" 30 $ "interaction points before = " ++ show mis- ae <- give_ref ii Nothing =<< B.parseExprIn ii rng s- mis' <- getInteractionPoints- reportSLn "interaction.give" 30 $ "interaction points after = " ++ show mis'- return (ae, mis' \\ mis)+ (time, (ae, ae0, iis)) <- maybeTimed $ lift $ do+ mis <- getInteractionPoints+ reportSLn "interaction.give" 30 $ "interaction points before = " ++ show mis+ given <- B.parseExprIn ii rng s+ ae <- give_ref ii Nothing given+ mis' <- getInteractionPoints+ reportSLn "interaction.give" 30 $ "interaction points after = " ++ show mis'+ return (ae, given, mis' \\ mis) -- favonia: backup the old scope for highlighting insertOldInteractionScope ii scope -- sort the new interaction points and put them into the state@@ -906,7 +924,9 @@ -- we still cannot just `give' the user string (which may be empty). -- WRONG: also, if no interaction metas were created by @Refine@ -- WRONG: let literally = (giveRefine == Give || null iis) && rng /= noRange- let literally = giveRefine == Give && rng /= noRange+ -- Ulf, 2015-03-30, if we're doing intro we can't do literal give since+ -- there is nothing in the hole (issue 1892).+ let literally = giveRefine /= Intro && ae == ae0 && rng /= noRange -- Ulf, 2014-01-24: This works for give since we're highlighting the string -- that's already in the buffer. Doing it before the give action means that -- the highlighting is moved together with the text when the hole goes away.@@ -916,8 +936,8 @@ highlightExpr ae putResponse $ Resp_GiveAction ii $ mkNewTxt literally ce lift $ reportSLn "interaction.give" 30 $ "putResponse GiveAction passed"- -- display new goal set- interpret Cmd_metas+ -- display new goal set (if not measuring time)+ maybe (interpret Cmd_metas) (display_info . Info_Time) time lift $ reportSLn "interaction.give" 30 $ "interpret Cmd_metas passed" where -- Substitutes xs for x in ys.@@ -936,7 +956,7 @@ generateAndPrintSyntaxInfo decl Full where dummy = mkName_ (NameId 0 0) "dummy"- info = mkDefInfo (nameConcrete dummy) defaultFixity' PublicAccess ConcreteDef (getRange e)+ info = mkDefInfo (nameConcrete dummy) noFixity' PublicAccess ConcreteDef (getRange e) decl = A.Axiom NoFunSig info defaultArgInfo (qnameFromList [dummy]) e -- | Sorts interaction points based on their ranges.@@ -1005,6 +1025,22 @@ text "Names" $$ nest 2 (align 10 types') +-- | Shows all the top-level names in scope which mention all the given+-- identifiers in their type.++searchAbout :: B.Rewrite -> Range -> String -> CommandM ()+searchAbout norm rg nm = do+ let tnm = trim nm+ unless (null tnm) $ do+ fancy <- lift $ B.atTopLevel $ do+ hits <- findMentions norm rg tnm+ forM hits $ \ (x, t) -> do+ t <- TCP.prettyTCM t+ return (show x, text ":" <+> t)+ display_info $ Info_SearchAbout $+ text "Definitions about" <+> text (intercalate ", " $ words nm) $$+ nest 2 (align 10 fancy)+ -- | Explain why something is in scope. whyInScope :: String -> CommandM ()@@ -1048,6 +1084,7 @@ pKind ConName = TCP.text "constructor" pKind FldName = TCP.text "record field" pKind PatternSynName = TCP.text "pattern synonym"+ pKind MacroName = TCP.text "macro name" pKind QuotableName = TCP.text "quotable name" pName :: AbstractName -> TCM Doc@@ -1085,8 +1122,8 @@ -- | Sets the command line options and updates the status information. -setCommandLineOptions' :: CommandLineOptions -> CommandM ()-setCommandLineOptions' opts = do+setCommandLineOpts :: CommandLineOptions -> CommandM ()+setCommandLineOpts opts = do lift $ TM.setCommandLineOptions opts displayStatus @@ -1132,17 +1169,6 @@ displayStatus putResponse $ Resp_DisplayInfo info --- UNUSED--- takenNameStr :: TCM [String]--- takenNameStr = do--- xss <- sequence [ List.map (fst . unDom) <$> getContext--- , Map.keys <$> asks envLetBindings--- , List.map qnameName . HMap.keys . sigDefinitions <$> getSignature--- ]--- return $ concat [ parts $ nameConcrete x | x <- concat xss]--- where--- parts x = [ s | Id s <- nameParts x ]- refreshStr :: [String] -> String -> ([String], String) refreshStr taken s = go nameModifiers where go (m:mods) = let s' = s ++ m in@@ -1184,13 +1210,18 @@ -- ^ The expression to parse. -> CommandM () parseAndDoAtToplevel cmd title s = do- e <- liftIO $ parse exprParser s+ e <- liftIO $ parse exprParser s+ (time, res) <-+ maybeTimed (lift $ B.atTopLevel $+ prettyA =<< cmd =<< concreteToAbstract_ e)+ display_info (title $ fromMaybe empty time $$ res)++maybeTimed :: CommandM a -> CommandM (Maybe Doc, a)+maybeTimed work = do doTime <- lift $ hasVerbosity "profile.interactive" 10- let work = lift (B.atTopLevel $ prettyA =<< cmd =<< concreteToAbstract_ e)- res <- if not doTime then work else do- (r, time) <- measureTime work- return $ text "Time:" <+> pretty time $$ r- display_info (title res)+ if not doTime then (Nothing,) <$> work else do+ (r, time) <- measureTime work+ return (Just $ text "Time:" <+> pretty time, r) -- | Tell to highlight the code using the given highlighting -- info (unless it is @Nothing@).@@ -1206,7 +1237,7 @@ tellEmacsToJumpToError :: Range -> [Response] tellEmacsToJumpToError r = case rStart r of- Nothing -> []- Just (Pn { srcFile = Nothing }) -> []- Just (Pn { srcFile = Just f, posPos = p }) ->+ Nothing -> []+ Just (Pn { srcFile = Strict.Nothing }) -> []+ Just (Pn { srcFile = Strict.Just f, posPos = p }) -> [ Resp_JumpToError (filePath f) p ]
+ src/full/Agda/Interaction/Library.hs view
@@ -0,0 +1,198 @@+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE PatternGuards #-}++module Agda.Interaction.Library+ ( getDefaultLibraries+ , getInstalledLibraries+ , libraryIncludePaths+ , LibName+ , LibM+ ) where++import Control.Arrow (first, second)+import Control.Applicative+import Control.Exception+import Control.Monad.Writer+import Data.Char+import Data.Either+import Data.Function+import Data.List+import Data.Maybe+import System.Directory+import System.FilePath+import System.Environment++import Agda.Interaction.Library.Base+import Agda.Interaction.Library.Parse+import Agda.Utils.Monad+import Agda.Utils.Environment+import Agda.Utils.Except ( ExceptT, runExceptT, MonadError(throwError) )+import Agda.Utils.List+import Agda.Utils.Pretty++import Agda.Version++type LibM = ExceptT Doc IO++catchIO :: IO a -> (IOException -> IO a) -> IO a+catchIO = catch++getAgdaAppDir :: IO FilePath+getAgdaAppDir = do+ agdaDir <- lookupEnv "AGDA_DIR"+ case agdaDir of+ Nothing -> getAppUserDataDirectory "agda"+ Just dir ->+ ifM (doesDirectoryExist dir) (canonicalizePath dir) $ do+ d <- getAppUserDataDirectory "agda"+ putStrLn $ "Warning: Environment variable AGDA_DIR points to non-existing directory " ++ show dir ++ ", using " ++ show d ++ " instead."+ return d++defaultLibraryFiles :: [FilePath]+defaultLibraryFiles = ["libraries-" ++ version, "libraries"]++defaultsFile :: FilePath+defaultsFile = "defaults"++data LibError = LibNotFound FilePath LibName+ | AmbiguousLib LibName [AgdaLibFile]+ | OtherError String+ deriving (Show)++mkLibM :: [AgdaLibFile] -> IO (a, [LibError]) -> LibM a+mkLibM libs m = do+ (x, err) <- lift m+ case err of+ [] -> return x+ _ -> throwError =<< lift (vcat <$> mapM (formatLibError libs) err)++findAgdaLibFiles :: FilePath -> IO [FilePath]+findAgdaLibFiles root = do+ libs <- map (root </>) . filter ((== ".agda-lib") . takeExtension) <$> getDirectoryContents root+ case libs of+ [] -> do+ up <- canonicalizePath $ root </> ".."+ if up == root then return [] else findAgdaLibFiles up+ files -> return files++getDefaultLibraries :: FilePath -> LibM ([LibName], [FilePath])+getDefaultLibraries root = mkLibM [] $ do+ libs <- findAgdaLibFiles root+ if null libs then first (, []) <$> readDefaultsFile+ else first libsAndPaths <$> parseLibFiles Nothing (zip (repeat 0) libs)+ where+ libsAndPaths ls = (concatMap libDepends ls, concatMap libIncludes ls)++readDefaultsFile :: IO ([LibName], [LibError])+readDefaultsFile = do+ agdaDir <- getAgdaAppDir+ let file = agdaDir </> defaultsFile+ ifM (doesFileExist file) (do+ ls <- map snd . stripCommentLines <$> readFile file+ return ("." : concatMap splitCommas ls, [])+ ) {- else -} (return (["."], []))+ `catchIO` \e -> return (["."], [OtherError $ "Failed to read defaults file.\n" ++ show e])++getLibrariesFile :: Maybe FilePath -> IO FilePath+getLibrariesFile overrideLibFile = do+ agdaDir <- getAgdaAppDir+ let override = maybe [] (:[]) overrideLibFile+ files <- (override ++) <$> filterM doesFileExist (map (agdaDir </>) defaultLibraryFiles)+ case files of+ file : _ -> return file+ [] -> return (agdaDir </> last defaultLibraryFiles) -- doesn't exist, but that's ok++getInstalledLibraries :: Maybe FilePath -> LibM [AgdaLibFile]+getInstalledLibraries overrideLibFile = mkLibM [] $ do+ file <- getLibrariesFile overrideLibFile+ ifM (doesFileExist file) (do+ ls <- stripCommentLines <$> readFile file+ files <- sequence [ (i, ) <$> expandEnvironmentVariables s | (i, s) <- ls ]+ parseLibFiles (Just file) files+ ) {- else -} (return ([], []))+ `catchIO` \e -> return ([], [OtherError $ "Failed to read installed libraries.\n" ++ show e])++parseLibFiles :: Maybe FilePath -> [(Int, FilePath)] -> IO ([AgdaLibFile], [LibError])+parseLibFiles libFile files = do+ rs <- mapM (parseLibFile . snd) files+ let loc line | Just f <- libFile = f ++ ":" ++ show line ++ ": "+ | otherwise = ""+ errs = [ if isPrefixOf "Failed to read" err+ then OtherError $ loc line ++ err+ else OtherError $ path ++ ":" ++ (if all isDigit (take 1 err) then "" else " ") ++ err+ | ((line, path), Left err) <- zip files rs ]+ return (rights rs, errs)++stripCommentLines :: String -> [(Int, String)]+stripCommentLines = concatMap strip . zip [1..] . lines+ where+ strip (i, s) = [ (i, s') | not $ null s' ]+ where s' = stripComments $ dropWhile isSpace s++formatLibError :: [AgdaLibFile] -> LibError -> IO Doc+formatLibError installed (LibNotFound file lib) = do+ return $ vcat $+ [ text $ "Library '" ++ lib ++ "' not found."+ , sep [ text "Add the path to its .agda-lib file to"+ , nest 2 $ text $ "'" ++ file ++ "'"+ , text "to install." ]+ , text "Installed libraries:"+ ] +++ map (nest 2)+ (if null installed then [text "(none)"]+ else [ sep [ text $ libName l, nest 2 $ parens $ text $ libFile l ] | l <- installed ])+formatLibError _ (AmbiguousLib lib tgts) = return $+ vcat $ sep [ text $ "Ambiguous library '" ++ lib ++ "'."+ , text "Could refer to any one of" ]+ : [ nest 2 $ text (libName l) <+> parens (text $ libFile l) | l <- tgts ]+formatLibError _ (OtherError err) = return $ text err++libraryIncludePaths :: Maybe FilePath -> [AgdaLibFile] -> [LibName] -> LibM [FilePath]+libraryIncludePaths overrideLibFile libs xs0 = mkLibM libs $ do+ file <- getLibrariesFile overrideLibFile+ return $ runWriter ((dot ++) . incs <$> find file [] xs)+ where+ xs = map trim $ delete "." xs0+ trim = reverse . dropWhile isSpace . reverse . dropWhile isSpace+ incs = nub . concatMap libIncludes+ dot = [ "." | elem "." xs0 ]++ find :: FilePath -> [LibName] -> [LibName] -> Writer [LibError] [AgdaLibFile]+ find _ _ [] = pure []+ find file visited (x : xs)+ | elem x visited = find file visited xs+ | otherwise =+ case findLib x libs of+ [l] -> (l :) <$> find file (x : visited) (libDepends l ++ xs)+ [] -> tell [LibNotFound file x] >> find file (x : visited) xs+ ls -> tell [AmbiguousLib x ls] >> find file (x : visited) xs++findLib :: LibName -> [AgdaLibFile] -> [AgdaLibFile]+findLib x libs =+ case ls of+ l : ls -> l : takeWhile ((== versionMeasure l) . versionMeasure) ls+ [] -> []+ where+ ls = sortBy (flip compare `on` versionMeasure) [ l | l <- libs, matchLib x l ]++ -- foo > foo-2.2 > foo-2.0.1 > foo-2 > foo-1.0+ versionMeasure l = (rx, null vs, vs)+ where+ (rx, vs) = versionView (libName l)++matchLib :: LibName -> AgdaLibFile -> Bool+matchLib x l = rx == ry && (vx == vy || null vx)+ where+ (rx, vx) = versionView x+ (ry, vy) = versionView $ libName l++-- versionView "foo-1.2.3" == ("foo", [1, 2, 3])+versionView :: LibName -> (LibName, [Int])+versionView s =+ case span (\ c -> isDigit c || c == '.') (reverse s) of+ (v, '-' : x) | valid vs -> (reverse x, reverse $ map (read . reverse) vs)+ where vs = chopWhen (== '.') v+ valid [] = False+ valid vs = not $ any null vs+ _ -> (s, [])+
+ src/full/Agda/Interaction/Library/Base.hs view
@@ -0,0 +1,13 @@++module Agda.Interaction.Library.Base where++type LibName = String++data AgdaLibFile = AgdaLib+ { libName :: LibName+ , libFile :: FilePath+ , libIncludes :: [FilePath]+ , libDepends :: [LibName]+ }+ deriving (Show)+
+ src/full/Agda/Interaction/Library/Parse.hs view
@@ -0,0 +1,131 @@+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE RecordWildCards #-}+module Agda.Interaction.Library.Parse (parseLibFile, stripComments, splitCommas) where++import Control.Applicative+import Control.Exception+import Control.Monad+import Data.Char+import Data.List+import System.FilePath++import Agda.Interaction.Library.Base+import Agda.Utils.Except ( MonadError(throwError) )++catchIO :: IO a -> (IOException -> IO a) -> IO a+catchIO = catch++type P = Either String++type GenericFile = [(String, [String])]++data Field = forall a. Field+ { fName :: String+ , fOptional :: Bool+ , fParse :: [String] -> P a+ , fSet :: a -> AgdaLibFile -> AgdaLibFile }++-- | .agda-lib file format+agdaLibFields :: [Field]+agdaLibFields =+ [ Field "name" False parseName $ \ name l -> l { libName = name }+ , Field "include" True pure $ \ inc l -> l { libIncludes = inc }+ , Field "depend" True (pure . concatMap splitCommas) $ \ ds l -> l { libDepends = ds }+ ]+ where+ parseName [s] | [name] <- words s = pure name+ parseName ls = throwError $ "Bad library name: '" ++ unwords ls ++ "'"++defaultLibFile :: AgdaLibFile+defaultLibFile = AgdaLib { libName = "", libFile = "", libIncludes = [], libDepends = [] }++-- | .agda-lib parser+parseLibFile :: FilePath -> IO (P AgdaLibFile)+parseLibFile file =+ (fmap setPath . parseLib <$> readFile file) `catchIO` \e ->+ return (Left $ "Failed to read library file " ++ file ++ ".\nReason: " ++ show e)+ where+ setPath lib = unrelativise (takeDirectory file) lib{ libFile = file }+ unrelativise dir lib = lib { libIncludes = map (dir </>) (libIncludes lib) }++parseLib :: String -> P AgdaLibFile+parseLib s = fromGeneric =<< parseGeneric s++findField :: String -> [Field] -> P Field+findField s fs =+ case [ f | f <- fs, fName f == s ] of+ f : _ -> return f+ [] -> throwError $ "Unknown field '" ++ s ++ "'"++fromGeneric :: GenericFile -> P AgdaLibFile+fromGeneric = fromGeneric' agdaLibFields++fromGeneric' :: [Field] -> GenericFile -> P AgdaLibFile+fromGeneric' fields fs = do+ checkFields fields (map fst fs)+ foldM upd defaultLibFile fs+ where+ upd :: AgdaLibFile -> (String, [String]) -> P AgdaLibFile+ upd l (h, cs) = do+ Field{..} <- findField h fields+ x <- fParse cs+ return $ fSet x l++checkFields :: [Field] -> [String] -> P ()+checkFields fields fs = do+ let mandatory = [ fName f | f <- fields, not $ fOptional f ]+ missing = mandatory \\ fs+ dup = fs \\ nub fs+ s xs = if length xs > 1 then "s" else ""+ list xs = intercalate ", " [ "'" ++ f ++ "'" | f <- xs ]+ when (not $ null missing) $ throwError $ "Missing field" ++ s missing ++ " " ++ list missing+ when (not $ null dup) $ throwError $ "Duplicate field" ++ s dup ++ " " ++ list dup++-- Generic file parser ----------------------------------------------------++parseGeneric :: String -> P GenericFile+parseGeneric s =+ groupLines =<< concat <$> mapM (uncurry parseLine) (zip [1..] $ map stripComments $ lines s)++data GenericLine = Header Int String | Content Int String+ deriving (Show)++parseLine :: Int -> String -> P [GenericLine]+parseLine _ "" = pure []+parseLine l s@(c:_)+ | isSpace c = pure [Content l $ trim s]+ | otherwise =+ case break (==':') s of+ (h, ':' : r) ->+ case words h of+ [h] -> pure $ [Header l h] ++ [Content l s | let s = trim r, not (null s)]+ [] -> throwError $ show l ++ ": Missing field name"+ hs -> throwError $ show l ++ ": Bad field name " ++ show h+ _ -> throwError $ show l ++ ": Missing ':' for field " ++ show (trim s)++groupLines :: [GenericLine] -> P GenericFile+groupLines [] = pure []+groupLines (Content l c : _) = throwError $ show l ++ ": Missing field"+groupLines (Header _ h : ls) = ((h, [ c | Content _ c <- cs ]) :) <$> groupLines ls1+ where+ (cs, ls1) = span isContent ls+ isContent Content{} = True+ isContent Header{} = False++trim :: String -> String+trim = stripComments . dropWhile isSpace++splitCommas :: String -> [String]+splitCommas s = words $ map (\c -> if c == ',' then ' ' else c) s++-- | ...and trailing, but not leading, whitespace.+stripComments :: String -> String+stripComments "" = ""+stripComments ('-':'-':_) = ""+stripComments (c : s) = cons c (stripComments s)+ where+ cons c "" | isSpace c = ""+ cons c s = c : s+
src/full/Agda/Interaction/MakeCase.hs view
@@ -1,6 +1,6 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE DoAndIfThenElse #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TupleSections #-} module Agda.Interaction.MakeCase where @@ -16,6 +16,7 @@ import qualified Agda.Syntax.Abstract as A import qualified Agda.Syntax.Info as A import Agda.Syntax.Internal+import Agda.Syntax.Internal.Pattern import Agda.Syntax.Scope.Monad (resolveName, ResolvedName(..)) import Agda.Syntax.Translation.ConcreteToAbstract import Agda.Syntax.Translation.InternalToAbstract@@ -26,6 +27,7 @@ import Agda.TypeChecking.RecordPatterns import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Substitute.Pattern import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.Rules.LHS.Implicit import Agda.TheTypeChecker@@ -152,7 +154,8 @@ makeCase :: InteractionId -> Range -> String -> TCM (CaseContext , [A.Clause]) makeCase hole rng s = withInteractionId hole $ do meta <- lookupInteractionId hole- (casectxt, f, clause@(Clause{ clauseTel = tel, clausePerm = perm, namedClausePats = ps })) <- findClause meta+ (casectxt, f, clause@(Clause{ clauseTel = tel, namedClausePats = ps })) <- findClause meta+ let perm = clausePerm clause reportSDoc "interaction.case" 10 $ vcat [ text "splitting clause:" , nest 2 $ vcat@@ -188,7 +191,12 @@ else do -- split on variables vars <- parseVariables hole rng vars- (casectxt,) <$> do split f vars $ clauseToSplitClause clause+ cs <- split f vars $ clauseToSplitClause clause+ reportSDoc "interaction.case" 65 $ vcat+ [ text "split result:"+ , nest 2 $ vcat $ map (text . show) cs+ ]+ return (casectxt,cs) where failNoCop = typeError $ GenericError $@@ -209,26 +217,27 @@ -- Finds the new variable corresponding to an old one, if any. newVar :: SplitClause -> Nat -> Maybe Nat- newVar c x = case ignoreSharing $ applySubst (scSubst c) (var x) of+ newVar c x = case ignoreSharing $ applyPatSubst (scSubst c) (var x) of Var y [] -> Just y _ -> Nothing makeAbsurdClause :: QName -> SplitClause -> TCM A.Clause-makeAbsurdClause f (SClause tel perm ps _ t) = do+makeAbsurdClause f (SClause tel ps _ t) = do reportSDoc "interaction.case" 10 $ vcat [ text "Interaction.MakeCase.makeCase: split clause:" , nest 2 $ vcat [ text "context =" <+> (prettyTCM =<< getContextTelescope) , text "tel =" <+> prettyTCM tel- , text "perm =" <+> text (show perm) , text "ps =" <+> text (show ps) ] ] withCurrentModule (qnameModule f) $ do -- Andreas, 2015-05-29 Issue 635 -- Contract implicit record patterns before printing.- c <- translateRecordPatterns $ Clause noRange tel perm ps NoBody t+ -- c <- translateRecordPatterns $ Clause noRange tel perm ps NoBody t False+ -- Jesper, 2015-09-19 Don't contract, since we do on-demand splitting+ let c = Clause noRange tel ps NoBody t False -- Normalise the dot patterns ps <- addCtxTel tel $ normalise $ namedClausePats c inTopContext $ reify $ QNamed f $ c { namedClausePats = ps }@@ -236,10 +245,11 @@ -- | Make a clause with a question mark as rhs. makeAbstractClause :: QName -> SplitClause -> TCM A.Clause makeAbstractClause f cl = do- A.Clause lhs _ _ <- makeAbsurdClause f cl- let ii = __IMPOSSIBLE__ -- No interaction point since we never type check this- let info = A.emptyMetaInfo -- metaNumber = Nothing in order to print as ?, not ?n- return $ A.Clause lhs (A.RHS $ A.QuestionMark info ii) []+ A.Clause lhs _ _ _ <- makeAbsurdClause f cl+ let ii = InteractionId (-1) -- Dummy interaction point since we never type check this.+ -- Can end up in verbose output though (#1842), hence not __IMPOSSIBLE__.+ let info = A.emptyMetaInfo -- metaNumber = Nothing in order to print as ?, not ?n+ return $ A.Clause lhs (A.RHS $ A.QuestionMark info ii) [] False deBruijnIndex :: A.Expr -> TCM Nat deBruijnIndex e = do
src/full/Agda/Interaction/Options.hs view
@@ -4,11 +4,10 @@ ( CommandLineOptions(..) , PragmaOptions(..) , OptionsPragma- , Flag+ , Flag, OptM, runOptM , Verbosity- , IncludeDirs , checkOpts- , parseStandardOptions+ , parseStandardOptions, parseStandardOptions' , parsePragmaOptions , parsePluginOptions , defaultOptions@@ -28,13 +27,16 @@ , getOptSimple ) where -import Control.Monad ( when )+import Control.Applicative+import Control.Monad ( (>=>), when )+import Control.Monad.Trans -- base-4.7 defines the Functor instances for OptDescr and ArgDescr #if !(MIN_VERSION_base(4,7,0)) import Data.Orphans () #endif +import Data.Either import Data.Maybe import Data.List ( isSuffixOf , intercalate ) import System.Console.GetOpt ( getOpt', usageInfo, ArgOrder(ReturnInOrder)@@ -46,6 +48,14 @@ import Agda.Termination.CutOff ( CutOff(..) ) +import Agda.Interaction.Library++import Agda.Utils.Except+ ( ExceptT+ , MonadError(catchError, throwError)+ , runExceptT+ )+ import Agda.Utils.TestHelpers ( runTests ) import Agda.Utils.QuickCheck ( quickCheck' ) import Agda.Utils.FileName ( absolute, AbsolutePath, filePath )@@ -55,8 +65,7 @@ import Agda.Utils.Trie ( Trie ) import qualified Agda.Utils.Trie as Trie -import Agda.Utils.Except ( MonadError(catchError, throwError) )-+import Agda.Version -- Paths_Agda.hs is in $(BUILD_DIR)/build/autogen/. import Paths_Agda ( getDataFileName ) @@ -68,25 +77,34 @@ type Verbosity = Trie String Int -type IncludeDirs = Either [FilePath] [AbsolutePath]- -- ^ 'Left' is used temporarily, before the paths have- -- been made absolute. An empty 'Left' list is- -- interpreted as @["."]@ (see- -- 'Agda.TypeChecking.Monad.Options.makeIncludeDirsAbsolute').- data CommandLineOptions = Options { optProgramName :: String , optInputFile :: Maybe FilePath- , optIncludeDirs :: IncludeDirs+ , optIncludePaths :: [FilePath]+ , optAbsoluteIncludePaths :: [AbsolutePath]+ , optLibraries :: [LibName]+ , optOverrideLibrariesFile :: Maybe FilePath+ -- ^ Use this (if Just) instead of .agda/libraries+ , optDefaultLibs :: Bool+ -- ^ Use ~/.agda/defaults or look for .agda-lib file. , optShowVersion :: Bool , optShowHelp :: Bool , optInteractive :: Bool , optRunTests :: Bool , optGHCiInteraction :: Bool- , optCompile :: Bool , optCompileNoMain :: Bool+ , optGhcCompile :: Bool+ , optGhcCallGhc :: Bool+ , optGhcFlags :: [String] , optEpicCompile :: Bool , optJSCompile :: Bool+ , optUHCCompile :: Bool+ , optUHCBin :: Maybe FilePath+ , optUHCTextualCore :: Bool+ , optUHCCallUHC :: Bool+ , optUHCTraceLevel :: Int+ , optUHCFlags :: [String]+ , optOptimSmashing :: Bool , optCompileDir :: Maybe FilePath -- ^ In the absence of a path the project root is used. , optGenerateVimFile :: Bool@@ -98,10 +116,11 @@ , optCSSFile :: Maybe FilePath , optIgnoreInterfaces :: Bool , optForcing :: Bool- , optGhcFlags :: [String] , optPragmaOptions :: PragmaOptions , optEpicFlags :: [String] , optSafe :: Bool+ , optSharing :: Bool+ , optCaching :: Bool } deriving Show @@ -128,9 +147,11 @@ , optWithoutK :: Bool , optCopatterns :: Bool -- ^ Allow definitions by copattern matching? , optPatternMatching :: Bool -- ^ Is pattern matching allowed in the current file?+ , optExactSplit :: Bool+ , optEta :: Bool , optRewriting :: Bool -- ^ Can rewrite rules be added and used? }- deriving Show+ deriving (Show,Eq) -- | The options from an @OPTIONS@ pragma. --@@ -154,16 +175,29 @@ defaultOptions = Options { optProgramName = "agda" , optInputFile = Nothing- , optIncludeDirs = Left []+ , optIncludePaths = []+ , optAbsoluteIncludePaths = []+ , optLibraries = []+ , optOverrideLibrariesFile = Nothing+ , optDefaultLibs = True , optShowVersion = False , optShowHelp = False , optInteractive = False , optRunTests = False , optGHCiInteraction = False- , optCompile = False , optCompileNoMain = False+ , optGhcCompile = False+ , optGhcCallGhc = True+ , optGhcFlags = [] , optEpicCompile = False , optJSCompile = False+ , optUHCCompile = False+ , optUHCBin = Nothing+ , optUHCTextualCore = False+ , optUHCCallUHC = True+ , optUHCTraceLevel = 0+ , optUHCFlags = []+ , optOptimSmashing = True , optCompileDir = Nothing , optGenerateVimFile = False , optGenerateLaTeX = False@@ -174,10 +208,11 @@ , optCSSFile = Nothing , optIgnoreInterfaces = False , optForcing = True- , optGhcFlags = [] , optPragmaOptions = defaultPragmaOptions , optEpicFlags = [] , optSafe = False+ , optSharing = False+ , optCaching = False } defaultPragmaOptions :: PragmaOptions@@ -201,6 +236,8 @@ , optWithoutK = False , optCopatterns = True , optPatternMatching = True+ , optExactSplit = False+ , optEta = True , optRewriting = False } @@ -219,43 +256,49 @@ defaultHTMLDir :: String defaultHTMLDir = "html" -prop_defaultOptions :: Bool-prop_defaultOptions = case checkOpts defaultOptions of- Left _ -> False- Right _ -> True+prop_defaultOptions :: IO Bool+prop_defaultOptions =+ either (const False) (const True) <$> runOptM (checkOpts defaultOptions) +type OptM = ExceptT String IO++runOptM :: OptM a -> IO (Either String a)+runOptM = runExceptT+ {- | @f :: Flag opts@ is an action on the option record that results from parsing an option. @f opts@ produces either an error message or an updated options record -}-type Flag opts = opts -> Either String opts+type Flag opts = opts -> OptM opts -- | Checks that the given options are consistent. checkOpts :: Flag CommandLineOptions checkOpts opts- | not (atMostOne [optAllowUnsolved . p, \x -> optCompile x]) = Left+ | not (atMostOne [optAllowUnsolved . p, \x -> optGhcCompile x]) = throwError "Unsolved meta variables are not allowed when compiling.\n"- | optCompileNoMain opts && not (optCompile opts) = Left+ | optCompileNoMain opts && (not (optGhcCompile opts || optUHCCompile opts)) = throwError "--no-main only allowed in combination with --compile.\n" | not (atMostOne [optGHCiInteraction, isJust . optInputFile]) =- Left "Choose at most one: input file or --interaction.\n"- | not (atMostOne $ interactive ++ [\x -> optCompile x, optEpicCompile, optJSCompile]) =- Left "Choose at most one: compilers/--interactive/--interaction.\n"+ throwError "Choose at most one: input file or --interaction.\n"+ | not (atMostOne $ interactive ++ [\x -> optGhcCompile x, optEpicCompile, optJSCompile]) =+ throwError "Choose at most one: compilers/--interactive/--interaction.\n" | not (atMostOne $ interactive ++ [optGenerateHTML]) =- Left "Choose at most one: --html/--interactive/--interaction.\n"+ throwError "Choose at most one: --html/--interactive/--interaction.\n" | not (atMostOne $ interactive ++ [isJust . optDependencyGraph]) =- Left "Choose at most one: --dependency-graph/--interactive/--interaction.\n"- | not (atMostOne [ optUniversePolymorphism . p- , not . optUniverseCheck . p- ]) =- Left "Cannot have both universe polymorphism and type in type.\n"+ throwError "Choose at most one: --dependency-graph/--interactive/--interaction.\n" | not (atMostOne $ interactive ++ [optGenerateLaTeX]) =- Left "Choose at most one: --latex/--interactive/--interaction.\n"+ throwError "Choose at most one: --latex/--interactive/--interaction.\n" | (not . null . optEpicFlags $ opts) && not (optEpicCompile opts) =- Left "Cannot set Epic flags without using the Epic backend.\n"- | otherwise = Right opts+ throwError "Cannot set Epic flags without using the Epic backend.\n"+ | (isJust $ optUHCBin opts)+ && not (optUHCCompile opts) =+ throwError "Cannot set uhc binary without using UHC backend.\n"+ | (optUHCTextualCore opts)+ && not (optUHCCompile opts) =+ throwError "Cannot set --uhc-textual-core without using UHC backend.\n"+ | otherwise = return opts where atMostOne bs = length (filter ($ opts) bs) <= 1 @@ -270,7 +313,6 @@ [ "--allow-unsolved-metas" | optAllowUnsolved opts ] ++ [ "--no-positivity-check" | optDisablePositivity opts ] ++ [ "--no-termination-check" | not (optTerminationCheck opts) ] ++- [ "--no-coverage-check" | not (optCompletenessCheck opts) ] ++ [ "--type-in-type" | not (optUniverseCheck opts) ] ++ -- [ "--sized-types" | optSizedTypes opts ] ++ [ "--injective-type-constructors" | optInjectiveTypeConstructors opts ] ++@@ -304,6 +346,12 @@ safeFlag :: Flag CommandLineOptions safeFlag o = return $ o { optSafe = True } +sharingFlag :: Bool -> Flag CommandLineOptions+sharingFlag b o = return $ o { optSharing = b }++cachingFlag :: Bool -> Flag CommandLineOptions+cachingFlag b o = return $ o { optCaching = b }+ proofIrrelevanceFlag :: Flag PragmaOptions proofIrrelevanceFlag o = return $ o { optProofIrrelevance = True } @@ -346,14 +394,20 @@ dontTerminationCheckFlag :: Flag PragmaOptions dontTerminationCheckFlag o = return $ o { optTerminationCheck = False } +-- The option was removed. See Issue 1918. dontCompletenessCheckFlag :: Flag PragmaOptions-dontCompletenessCheckFlag o = return $ o { optCompletenessCheck = False }+dontCompletenessCheckFlag _ =+ throwError "the --no-coverage-check option has been removed" dontUniverseCheckFlag :: Flag PragmaOptions dontUniverseCheckFlag o = return $ o { optUniverseCheck = False- , optUniversePolymorphism = False }+etaFlag :: Flag PragmaOptions+etaFlag o = return $ o { optEta = True } +noEtaFlag :: Flag PragmaOptions+noEtaFlag o = return $ o { optEta = False }+ sizedTypes :: Flag PragmaOptions sizedTypes o = return $ o { optSizedTypes = True } @@ -390,6 +444,12 @@ noPatternMatchingFlag :: Flag PragmaOptions noPatternMatchingFlag o = return $ o { optPatternMatching = False } +exactSplitFlag :: Flag PragmaOptions+exactSplitFlag o = return $ o { optExactSplit = True }++noExactSplitFlag :: Flag PragmaOptions+noExactSplitFlag o = return $ o { optExactSplit = False }+ rewritingFlag :: Flag PragmaOptions rewritingFlag o = return $ o { optRewriting = True } @@ -399,12 +459,19 @@ { optAllowUnsolved = True } } -compileFlag :: Flag CommandLineOptions-compileFlag o = return $ o { optCompile = True }- compileFlagNoMain :: Flag CommandLineOptions compileFlagNoMain o = return $ o { optCompileNoMain = True } +compileGhcFlag :: Flag CommandLineOptions+compileGhcFlag o = return $ o { optGhcCompile = True }++ghcDontCallGhcFlag :: Flag CommandLineOptions+ghcDontCallGhcFlag o = return $ o { optGhcCallGhc = False }++-- NOTE: Quadratic in number of flags.+ghcFlag :: String -> Flag CommandLineOptions+ghcFlag f o = return $ o { optGhcFlags = optGhcFlags o ++ [f] }+ -- The Epic backend has been removed. See Issue 1481. compileEpicFlag :: Flag CommandLineOptions -- compileEpicFlag o = return $ o { optEpicCompile = True}@@ -413,19 +480,37 @@ compileJSFlag :: Flag CommandLineOptions compileJSFlag o = return $ o { optJSCompile = True } +compileUHCFlag :: Flag CommandLineOptions+compileUHCFlag o = return $ o { optUHCCompile = True}+ compileDirFlag :: FilePath -> Flag CommandLineOptions compileDirFlag f o = return $ o { optCompileDir = Just f } -- NOTE: Quadratic in number of flags.-ghcFlag :: String -> Flag CommandLineOptions-ghcFlag f o = return $ o { optGhcFlags = optGhcFlags o ++ [f] }---- NOTE: Quadratic in number of flags. -- The Epic backend has been removed. See Issue 1481. epicFlagsFlag :: String -> Flag CommandLineOptions -- epicFlagsFlag s o = return $ o { optEpicFlags = optEpicFlags o ++ [s] } epicFlagsFlag s o = throwError "the Epic backend has been disabled" +uhcBinFlag :: String -> Flag CommandLineOptions+uhcBinFlag s o = return $ o { optUHCBin = Just s }++uhcTextualCoreFlag :: Flag CommandLineOptions+uhcTextualCoreFlag o = return $ o { optUHCTextualCore = True }++uhcDontCallUHCFlag :: Flag CommandLineOptions+uhcDontCallUHCFlag o = return $ o { optUHCCallUHC = False }++uhcTraceLevelFlag :: String -> Flag CommandLineOptions+-- TODO proper parsing and error handling+uhcTraceLevelFlag i o = return $ o { optUHCTraceLevel = read i }++uhcFlagsFlag :: String -> Flag CommandLineOptions+uhcFlagsFlag s o = return $ o { optUHCFlags = optUHCFlags o ++ [s] }++optimNoSmashing :: Flag CommandLineOptions+optimNoSmashing o = return $ o {optOptimSmashing = False }+ htmlFlag :: Flag CommandLineOptions htmlFlag o = return $ o { optGenerateHTML = True } @@ -439,9 +524,17 @@ cssFlag f o = return $ o { optCSSFile = Just f } includeFlag :: FilePath -> Flag CommandLineOptions-includeFlag d o = return $ o { optIncludeDirs = Left (d : ds) }- where ds = either id (const []) $ optIncludeDirs o+includeFlag d o = return $ o { optIncludePaths = d : optIncludePaths o } +libraryFlag :: String -> Flag CommandLineOptions+libraryFlag s o = return $ o { optLibraries = optLibraries o ++ [s] }++overrideLibrariesFileFlag :: String -> Flag CommandLineOptions+overrideLibrariesFileFlag s o = return $ o { optOverrideLibrariesFile = Just s }++noDefaultLibsFlag :: Flag CommandLineOptions+noDefaultLibsFlag o = return $ o { optDefaultLibs = False }+ verboseFlag :: String -> Flag PragmaOptions verboseFlag s o = do (k,n) <- parseVerbose s@@ -461,7 +554,7 @@ return $ o { optTerminationDepth = CutOff $ k-1 } where usage = throwError "argument to termination-depth should be >= 1" -integerArgument :: String -> String -> Either String Int+integerArgument :: String -> String -> OptM Int integerArgument flag s = readM s `catchError` \_ -> throwError $ "option '" ++ flag ++ "' requires an integer argument"@@ -474,10 +567,13 @@ "start in interactive mode" , Option [] ["interaction"] (NoArg ghciInteractionFlag) "for use with the Emacs mode"- , Option ['c'] ["compile"] (NoArg compileFlag)- "compile program using the MAlonzo backend (experimental)"+ , Option ['c'] ["compile", "ghc"] (NoArg compileGhcFlag)+ "compile program using the GHC backend (experimental)"+ , Option [] ["ghc-dont-call-ghc"] (NoArg ghcDontCallGhcFlag) "Don't call ghc, just write the GHC Haskell files."+ , Option [] ["ghc-flag"] (ReqArg ghcFlag "GHC-FLAG")+ "give the flag GHC-FLAG to GHC when compiling using the GHC backend" , Option [] ["no-main"] (NoArg compileFlagNoMain)- "when compiling using the MAlonzo backend (experimental), do not treat the requested module as the main module of a program"+ "when compiling using the GHC backend or the UHC backend (experimental), do not treat the requested module as the main module of a program" -- The Epic backend has been removed. See Issue 1481. , Option [] ["epic"] (NoArg compileEpicFlag)@@ -485,10 +581,16 @@ "the Epic backend has been removed" , Option [] ["js"] (NoArg compileJSFlag) "compile program using the JS backend"+ , Option [] ["uhc"] (NoArg compileUHCFlag) "compile program using the UHC backend"+ , Option [] ["uhc-bin"] (ReqArg uhcBinFlag "UHC") "The uhc binary to use when compiling with the UHC backend."+ , Option [] ["uhc-textual-core"] (NoArg uhcTextualCoreFlag) "Use textual core as intermediate representation instead of binary core."+ , Option [] ["uhc-dont-call-uhc"] (NoArg uhcDontCallUHCFlag) "Don't call uhc, just write the UHC Core files."+ , Option [] ["uhc-gen-trace"] (ReqArg uhcTraceLevelFlag "TRACE") "Add tracing code to generated executable."+ , Option [] ["uhc-flag"] (ReqArg uhcFlagsFlag "UHC-FLAG")+ "give the flag UHC-FLAG to UHC when compiling using the UHC backend"+ , Option [] ["no-smashing"] (NoArg optimNoSmashing) "Don't apply the smashing optimization." , Option [] ["compile-dir"] (ReqArg compileDirFlag "DIR") ("directory for compiler output (default: the project root)")- , Option [] ["ghc-flag"] (ReqArg ghcFlag "GHC-FLAG")- "give the flag GHC-FLAG to GHC when compiling using MAlonzo" -- The Epic backend has been removed. See Issue 1481. , Option [] ["epic-flag"] (ReqArg epicFlagsFlag "EPIC-FLAG")@@ -517,10 +619,24 @@ "ignore interface files (re-type check everything)" , Option ['i'] ["include-path"] (ReqArg includeFlag "DIR") "look for imports in DIR"+ , Option ['l'] ["library"] (ReqArg libraryFlag "LIB")+ "use library LIB"+ , Option [] ["library-file"] (ReqArg overrideLibrariesFileFlag "FILE")+ "use FILE instead of the standard libraries file"+ , Option [] ["no-default-libraries"] (NoArg noDefaultLibsFlag)+ "don't use default libraries" , Option [] ["no-forcing"] (NoArg noForcingFlag) "disable the forcing optimisation" , Option [] ["safe"] (NoArg safeFlag) "disable postulates, unsafe OPTION pragmas and primTrustMe"+ , Option [] ["sharing"] (NoArg $ sharingFlag True)+ "enable sharing and call-by-need evaluation (experimental) (default: OFF)"+ , Option [] ["no-sharing"] (NoArg $ sharingFlag False)+ "disable sharing and call-by-need evaluation"+ , Option [] ["caching"] (NoArg $ cachingFlag True)+ "enable caching of typechecking (experimental) (default: OFF)"+ , Option [] ["no-caching"] (NoArg $ cachingFlag False)+ "disable caching of typechecking" ] ++ map (fmap lift) pragmaOptions where lift :: Flag PragmaOptions -> Flag CommandLineOptions@@ -547,7 +663,7 @@ , Option [] ["termination-depth"] (ReqArg terminationDepthFlag "N") "allow termination checker to count decrease/increase upto N (default N=1)" , Option [] ["no-coverage-check"] (NoArg dontCompletenessCheckFlag)- "do not warn about possibly incomplete pattern matches"+ "the option has been removed" , Option [] ["type-in-type"] (NoArg dontUniverseCheckFlag) "ignore universe levels (this makes Agda inconsistent)" , Option [] ["sized-types"] (NoArg sizedTypes)@@ -576,6 +692,12 @@ "disable definitions by copattern matching" , Option [] ["no-pattern-matching"] (NoArg noPatternMatchingFlag) "disable pattern matching completely"+ , Option [] ["exact-split"] (NoArg exactSplitFlag)+ "require all clauses in a definition by pattern matching to hold as definitional equalities (except those marked as CATCHALL)"+ , Option [] ["no-exact-split"] (NoArg noExactSplitFlag)+ "do not require all clauses in a definition by pattern matching to hold as definitional equalities (ignore those marked as CATCHALL)"+ , Option [] ["no-eta-equality"] (NoArg noEtaFlag)+ "disable eta rules for records" , Option [] ["rewriting"] (NoArg rewritingFlag) "enable declaration and use of REWRITE rules" ]@@ -633,18 +755,21 @@ sugs as = "any of " ++ intercalate " " as -- | Parse the standard options.-parseStandardOptions :: [String] -> Either String CommandLineOptions-parseStandardOptions argv =- checkOpts =<<- getOptSimple argv standardOptions inputFlag defaultOptions+parseStandardOptions :: [String] -> OptM CommandLineOptions+parseStandardOptions argv = parseStandardOptions' argv defaultOptions +parseStandardOptions' :: [String] -> Flag CommandLineOptions+parseStandardOptions' argv opts = do+ opts <- getOptSimple (stripRTS argv) standardOptions inputFlag opts+ checkOpts opts+ -- | Parse options from an options pragma. parsePragmaOptions :: [String] -- ^ Pragma options. -> CommandLineOptions -- ^ Command-line options which should be updated.- -> Either String PragmaOptions+ -> OptM PragmaOptions parsePragmaOptions argv opts = do ps <- getOptSimple argv pragmaOptions (\s _ -> throwError $ "Bad option in pragma: " ++ s)@@ -661,29 +786,21 @@ -- | The usage info message. The argument is the program name (probably -- agda).-usage :: [OptDescr ()] -> [(String, String, [String], [OptDescr ()])] -> String -> String-usage options pluginInfos progName =- usageInfo (header progName) options ++- "\nPlugins:\n" ++- indent 2 (concatMap pluginMsg pluginInfos)-+usage :: [OptDescr ()] -> String -> String+usage options progName = usageInfo (header progName) options where- header progName = unlines [ "Agda"- , ""- , "Usage: " ++ progName ++ " [OPTIONS...] [FILE]"- ]+ header progName = unlines [ "Agda version " ++ version, ""+ , "Usage: " ++ progName ++ " [OPTIONS...] [FILE]" ] - pluginMsg (name, help, inherited, opts)- | null opts && null inherited = optHeader- | otherwise = usageInfo (optHeader ++- " Plugin-specific options:" ++- inheritedOptions inherited- ) opts- where- optHeader = "\n" ++ name ++ "-plugin:\n" ++ indent 2 help- inheritedOptions [] = ""- inheritedOptions pls =- "\n Inherits options from: " ++ unwords pls+-- Remove +RTS .. -RTS from arguments+stripRTS :: [String] -> [String]+stripRTS [] = []+stripRTS ("--RTS" : argv) = argv+stripRTS (arg : argv)+ | is "+RTS" arg = stripRTS $ drop 1 $ dropWhile (not . is "-RTS") argv+ | otherwise = arg : stripRTS argv+ where+ is x arg = [x] == take 1 (words arg) ------------------------------------------------------------------------ -- Some paths@@ -702,6 +819,6 @@ tests :: IO Bool tests = runTests "Agda.Interaction.Options"- [ quickCheck' prop_defaultOptions+ [ prop_defaultOptions , defaultPragmaOptionsSafe ]
src/full/Agda/Interaction/Options/Lenses.hs view
@@ -13,6 +13,7 @@ import Agda.Interaction.Options import Agda.Utils.Lens+import Agda.Utils.FileName --------------------------------------------------------------------------- -- * Pragma options@@ -127,32 +128,50 @@ -- ** Include directories --------------------------------------------------------------------------- -class LensIncludeDirs a where- getIncludeDirs :: a -> IncludeDirs- setIncludeDirs :: IncludeDirs -> a -> a- mapIncludeDirs :: (IncludeDirs -> IncludeDirs) -> a -> a+class LensIncludePaths a where+ getIncludePaths :: a -> [FilePath]+ setIncludePaths :: [FilePath] -> a -> a+ mapIncludePaths :: ([FilePath] -> [FilePath]) -> a -> a + getAbsoluteIncludePaths :: a -> [AbsolutePath]+ setAbsoluteIncludePaths :: [AbsolutePath] -> a -> a+ mapAbsoluteIncludePaths :: ([AbsolutePath] -> [AbsolutePath]) -> a -> a+ -- default implementations- setIncludeDirs = mapIncludeDirs . const- mapIncludeDirs f a = setIncludeDirs (f $ getIncludeDirs a) a+ setIncludePaths = mapIncludePaths . const+ mapIncludePaths f a = setIncludePaths (f $ getIncludePaths a) a+ setAbsoluteIncludePaths = mapAbsoluteIncludePaths . const+ mapAbsoluteIncludePaths f a = setAbsoluteIncludePaths (f $ getAbsoluteIncludePaths a) a -instance LensIncludeDirs CommandLineOptions where- getIncludeDirs = optIncludeDirs- setIncludeDirs is opts = opts { optIncludeDirs = is }+instance LensIncludePaths CommandLineOptions where+ getIncludePaths = optIncludePaths+ setIncludePaths is opts = opts { optIncludePaths = is }+ getAbsoluteIncludePaths = optAbsoluteIncludePaths+ setAbsoluteIncludePaths is opts = opts { optAbsoluteIncludePaths = is } -instance LensIncludeDirs PersistentTCState where- getIncludeDirs = getIncludeDirs . getCommandLineOptions- mapIncludeDirs = mapCommandLineOptions . mapIncludeDirs+instance LensIncludePaths PersistentTCState where+ getIncludePaths = getIncludePaths . getCommandLineOptions+ mapIncludePaths = mapCommandLineOptions . mapIncludePaths+ getAbsoluteIncludePaths = getAbsoluteIncludePaths . getCommandLineOptions+ mapAbsoluteIncludePaths = mapCommandLineOptions . mapAbsoluteIncludePaths -instance LensIncludeDirs TCState where- getIncludeDirs = getIncludeDirs . getCommandLineOptions- mapIncludeDirs = mapCommandLineOptions . mapIncludeDirs+instance LensIncludePaths TCState where+ getIncludePaths = getIncludePaths . getCommandLineOptions+ mapIncludePaths = mapCommandLineOptions . mapIncludePaths+ getAbsoluteIncludePaths = getAbsoluteIncludePaths . getCommandLineOptions+ mapAbsoluteIncludePaths = mapCommandLineOptions . mapAbsoluteIncludePaths -modifyIncludeDirs :: (IncludeDirs -> IncludeDirs) -> TCM ()-modifyIncludeDirs = modify . mapIncludeDirs+modifyIncludePaths :: ([FilePath] -> [FilePath]) -> TCM ()+modifyIncludePaths = modify . mapIncludePaths -putIncludeDirs :: IncludeDirs -> TCM ()-putIncludeDirs = modify . setIncludeDirs+putIncludePaths :: [FilePath] -> TCM ()+putIncludePaths = modify . setIncludePaths++modifyAbsoluteIncludePaths :: ([AbsolutePath] -> [AbsolutePath]) -> TCM ()+modifyAbsoluteIncludePaths = modify . mapAbsoluteIncludePaths++putAbsoluteIncludePaths :: [AbsolutePath] -> TCM ()+putAbsoluteIncludePaths = modify . setAbsoluteIncludePaths --------------------------------------------------------------------------- -- ** Include directories
src/full/Agda/Interaction/Response.hs view
@@ -57,6 +57,7 @@ = Info_CompilationOk | Info_Constraints String | Info_AllGoals String+ | Info_Time Doc | Info_Error String -- ^ When an error message is displayed this constructor should be -- used, if appropriate.@@ -67,6 +68,7 @@ -- ^ 'Info_Auto' denotes either an error or a success (when 'Resp_GiveAction' is present) -- TODO: split these into separate constructors | Info_ModuleContents Doc+ | Info_SearchAbout Doc | Info_WhyInScope Doc | Info_NormalForm Doc | Info_GoalType Doc
+ src/full/Agda/Interaction/SearchAbout.hs view
@@ -0,0 +1,74 @@+module Agda.Interaction.SearchAbout (findMentions) where++import Control.Applicative+import Control.Monad+import Control.Monad.State+import qualified Data.Map as Map+import Data.List (isInfixOf)+import Data.Either (partitionEithers)++import Agda.Syntax.Position (Range)+import Agda.Syntax.Scope.Base+import Agda.Syntax.Scope.Monad+import Agda.TypeChecking.Monad+import qualified Agda.Syntax.Common as Com+import Agda.Syntax.Internal+import Agda.Interaction.BasicOps (normalForm)+import qualified Agda.Syntax.Translation.ConcreteToAbstract as TCA+import qualified Agda.Syntax.Abstract as A+import qualified Agda.Syntax.Concrete as C++import Agda.Interaction.BasicOps+import Debug.Trace++collectNamesInType :: Type -> [A.QName]+collectNamesInType = collectNamesInTerm . unEl++collectNamesInTerm :: Term -> [A.QName]+collectNamesInTerm (Var _ els) = collectNamesInElims els+collectNamesInTerm (Lam ty t) = collectNamesInTerm $ unAbs t+collectNamesInTerm (Def n els) = n : collectNamesInElims els+collectNamesInTerm (Con n args) = conName n : collectNamesInArgs args+collectNamesInTerm (Pi dom cod) = collectNamesInType (Com.unDom dom) ++ collectNamesInType (unAbs cod)+collectNamesInTerm (Shared t) = collectNamesInTerm $ ignoreSharing $ derefPtr t+collectNamesInTerm _ = []++collectNamesInElims :: Elims -> [A.QName]+collectNamesInElims = concatMap collectNamesInElim++collectNamesInElim :: Elim -> [A.QName]+collectNamesInElim (Apply a) = collectNamesInTerm $ Com.unArg a+collectNamesInElim (Proj n) = [n]++collectNamesInArgs :: Args -> [A.QName]+collectNamesInArgs = concatMap (collectNamesInTerm . Com.unArg)++findMentions :: Rewrite -> Range -> String -> TCM [(C.Name, Type)]+findMentions norm rg nm = do+ let (strs, nms) = partitionEithers $ fmap isString $ words nm+ cnms <- mapM (parseName rg) nms+ rnms <- mapM resolveName cnms+ let defs = fmap (fmap anameName . anames) rnms+ scp <- getNamedScope =<< currentModule+ let names = nsNames $ allThingsInScope scp+ concat <$> mapM (\ (x, n) -> do+ t <- normalForm norm =<< typeOfConst (anameName n)+ let defName = show x+ let namesInT = collectNamesInType t+ return $ do+ guard (all (`isInfixOf` defName) strs)+ guard (all (any (`elem` namesInT)) defs)+ return (x, t)+ ) (concatMap (\ (x, ns) -> map ((,) x) ns) $ Map.toList names)+ where+ isString str+ | not (null str)+ && head str == '"'+ && last str == '"' = Left $ filter (/= '"') str+ | otherwise = Right str++ anames (DefinedName _ an) = [an]+ anames (FieldName an) = [an]+ anames (ConstructorName ans) = ans+ anames (PatternSynResName an) = [an]+ anames _ = []
src/full/Agda/Main.hs view
@@ -30,9 +30,11 @@ import Agda.TypeChecking.Errors import Agda.TypeChecking.Pretty +import Agda.Compiler.Common (IsMain (..)) import Agda.Compiler.MAlonzo.Compiler as MAlonzo import Agda.Compiler.Epic.Compiler as Epic import Agda.Compiler.JS.Compiler as JS+import Agda.Compiler.UHC.Compiler as UHC import Agda.Utils.Lens import Agda.Utils.Monad@@ -51,7 +53,7 @@ runAgda = do progName <- liftIO getProgName argv <- liftIO getArgs- let opts = parseStandardOptions argv+ opts <- liftIO $ runOptM $ parseStandardOptions argv case opts of Left err -> liftIO $ optionError err Right opts -> runAgdaWithOptions generateHTML progName opts@@ -73,45 +75,47 @@ && not (optGHCiInteraction opts) = liftIO printUsage | otherwise = do- setCommandLineOptions opts -- Main function. -- Bill everything to root of Benchmark trie.- Bench.billTo [] $ checkFile-- -- Print benchmarks.- Bench.print-- -- Print accumulated statistics.- printStatistics 20 Nothing =<< use lensAccumStatistics+ Bench.billTo [] (checkFile opts) `finally_` do+ -- Print benchmarks.+ Bench.print + -- Print accumulated statistics.+ printStatistics 20 Nothing =<< use lensAccumStatistics where- checkFile :: TCM ()- checkFile = do- i <- optInteractive <$> liftTCM commandLineOptions- ghci <- optGHCiInteraction <$> liftTCM commandLineOptions- compile <- optCompile <$> liftTCM commandLineOptions- compileNoMain <- optCompileNoMain <$> liftTCM commandLineOptions- epic <- optEpicCompile <$> liftTCM commandLineOptions- js <- optJSCompile <$> liftTCM commandLineOptions+ checkFile :: CommandLineOptions -> TCM ()+ checkFile opts = do+ let i = optInteractive opts+ ghci = optGHCiInteraction opts+ ghc = optGhcCompile opts+ compileNoMain = optCompileNoMain opts+ epic = optEpicCompile opts+ js = optJSCompile opts+ uhc = optUHCCompile opts when i $ liftIO $ putStr splashScreen let failIfNoInt (Just i) = return i -- The allowed combinations of command-line -- options should rule out Nothing here. failIfNoInt Nothing = __IMPOSSIBLE__ - failIfInt x Nothing = x- failIfInt _ (Just _) = __IMPOSSIBLE__+ failIfInt Nothing = return ()+ failIfInt (Just _) = __IMPOSSIBLE__ interaction :: TCM (Maybe Interface) -> TCM () interaction | i = runIM . interactionLoop- | ghci = (failIfInt mimicGHCi =<<)- | compile && compileNoMain- = (MAlonzo.compilerMain False =<<) . (failIfNoInt =<<)- | compile = (MAlonzo.compilerMain True =<<) . (failIfNoInt =<<)+ | ghci = mimicGHCi . (failIfInt =<<)+ | ghc && compileNoMain+ = (MAlonzo.compilerMain NotMain =<<) . (failIfNoInt =<<)+ | ghc = (MAlonzo.compilerMain IsMain =<<) . (failIfNoInt =<<) | epic = (Epic.compilerMain =<<) . (failIfNoInt =<<) | js = (JS.compilerMain =<<) . (failIfNoInt =<<)+ | uhc && compileNoMain+ = (UHC.compilerMain NotMain =<<) . (failIfNoInt =<<)+ | uhc = (UHC.compilerMain IsMain =<<) . (failIfNoInt =<<) | otherwise = (() <$) interaction $ do+ setCommandLineOptions opts hasFile <- hasInputFile -- Andreas, 2013-10-30 The following 'resetState' kills the -- verbosity options. That does not make sense (see fail/Issue641).@@ -156,7 +160,7 @@ printUsage :: IO () printUsage = do progName <- getProgName- putStr $ usage standardOptions_ [] progName+ putStr $ usage standardOptions_ progName -- | Print version information. printVersion :: IO ()@@ -166,8 +170,7 @@ -- | What to do for bad options. optionError :: String -> IO () optionError err = do- putStrLn $ "Error: " ++ err- printUsage+ putStrLn $ "Error: " ++ err ++ "\nRun 'agda --help' for help on command line options." exitFailure -- | Run a TCM action in IO; catch and pretty print errors.
src/full/Agda/Syntax/Abstract.hs view
@@ -17,7 +17,7 @@ ) where import Prelude hiding (foldl, foldr)-import Control.Arrow ((***), first, second)+import Control.Arrow (first) import Control.Applicative import Data.Foldable as Fold@@ -27,13 +27,13 @@ import qualified Data.Sequence as Seq import Data.Traversable import Data.Typeable (Typeable)+import Data.Void +import Agda.Syntax.Concrete (FieldAssignment'(..), exprFieldA) import qualified Agda.Syntax.Concrete as C import Agda.Syntax.Concrete.Pretty () import Agda.Syntax.Info-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)-import qualified Agda.Syntax.Common as Common-import Agda.Syntax.Fixity+import Agda.Syntax.Common import Agda.Syntax.Position import Agda.Syntax.Abstract.Name import Agda.Syntax.Abstract.Name as A (QNamed)@@ -41,29 +41,12 @@ import Agda.Syntax.Scope.Base import Agda.Utils.Geniplate-import Agda.Utils.Tuple+import Agda.Utils.Lens #include "undefined.h" import Agda.Utils.Impossible -type Color = Expr-type Arg a = Common.Arg Color a-type Dom a = Common.Dom Color a-type NamedArg a = Common.NamedArg Color a-type ArgInfo = Common.ArgInfo Color-type Args = [NamedArg Expr]--instance Eq Color where- Var x == Var y = x == y- Def x == Def y = x == y- -- TODO guilhem:- _ == _ = __IMPOSSIBLE__--instance Ord Color where- Var x <= Var y = x <= y- Def x <= Def y = x <= y- -- TODO guilhem:- _ <= _ = __IMPOSSIBLE__+type Args = [NamedArg Expr] -- | Expressions after scope checking (operators parsed, names resolved). data Expr@@ -72,6 +55,7 @@ | Proj QName -- ^ Projection. | Con AmbiguousQName -- ^ Constructor. | PatternSyn QName -- ^ Pattern synonym.+ | Macro QName -- ^ Macro. | Lit Literal -- ^ Literal. | QuestionMark MetaInfo InteractionId -- ^ Meta variable for interaction.@@ -93,20 +77,24 @@ | Prop ExprInfo -- ^ @Prop@ (no longer supported, used as dummy type). | Let ExprInfo [LetBinding] Expr -- ^ @let bs in e@. | ETel Telescope -- ^ Only used when printing telescopes.- | Rec ExprInfo Assigns -- ^ Record construction.+ | Rec ExprInfo RecordAssigns -- ^ Record construction. | RecUpdate ExprInfo Expr Assigns -- ^ Record update. | ScopedExpr ScopeInfo Expr -- ^ Scope annotation. | QuoteGoal ExprInfo Name Expr -- ^ Binds @Name@ to current type in @Expr@.- | QuoteContext ExprInfo Name Expr -- ^ Binds @Name@ to current context in @Expr@.+ | QuoteContext ExprInfo -- ^ Returns the current context. | Quote ExprInfo -- ^ Quote an identifier 'QName'. | QuoteTerm ExprInfo -- ^ Quote a term. | Unquote ExprInfo -- ^ The splicing construct: unquote ...+ | Tactic ExprInfo Expr [NamedArg Expr] [NamedArg Expr]+ -- ^ @tactic e x1 .. xn | y1 | .. | yn@ | DontCare Expr -- ^ For printing @DontCare@ from @Syntax.Internal@. deriving (Typeable, Show) -- | Record field assignment @f = e@.-type Assign = (C.Name, Expr)+type Assign = FieldAssignment' Expr type Assigns = [Assign]+type RecordAssign = Either Assign ModuleName+type RecordAssigns = [RecordAssign] -- | Is a type signature a `postulate' or a function signature? data Axiom@@ -124,10 +112,12 @@ | Primitive DefInfo QName Expr -- ^ primitive function | Mutual MutualInfo [Declaration] -- ^ a bunch of mutually recursive definitions | Section ModuleInfo ModuleName [TypedBindings] [Declaration]- | Apply ModuleInfo ModuleName ModuleApplication (Ren QName) (Ren ModuleName)- | Import ModuleInfo ModuleName+ | Apply ModuleInfo ModuleName ModuleApplication (Ren QName) (Ren ModuleName) ImportDirective+ -- ^ The @ImportDirective@ is for highlighting purposes.+ | Import ModuleInfo ModuleName ImportDirective+ -- ^ The @ImportDirective@ is for highlighting purposes. | Pragma Range Pragma- | Open ModuleInfo ModuleName+ | Open ModuleInfo ModuleName ImportDirective -- ^ only retained for highlighting purposes | FunDef DefInfo QName Delayed [Clause] -- ^ sequence of function clauses | DataSig DefInfo QName Telescope Expr -- ^ lone data signature@@ -135,12 +125,13 @@ | DataDef DefInfo QName [LamBinding] [Constructor] -- ^ the 'LamBinding's are 'DomainFree' and binds the parameters of the datatype. | RecSig DefInfo QName Telescope Expr -- ^ lone record signature- | RecDef DefInfo QName (Maybe (Ranged Induction)) (Maybe QName) [LamBinding] Expr [Declaration]+ | RecDef DefInfo QName (Maybe (Ranged Induction)) (Maybe Bool) (Maybe QName) [LamBinding] Expr [Declaration] -- ^ The 'Expr' gives the constructor type telescope, @(x1 : A1)..(xn : An) -> Prop@, -- and the optional name is the constructor's name.- | PatternSynDef QName [Arg Name] Pattern+ | PatternSynDef QName [Arg Name] (Pattern' Void) -- ^ Only for highlighting purposes- | UnquoteDecl MutualInfo DefInfo QName Expr+ | UnquoteDecl MutualInfo [DefInfo] [QName] Expr+ | UnquoteDef [DefInfo] [QName] Expr | ScopedDecl ScopeInfo [Declaration] -- ^ scope annotation deriving (Typeable, Show) @@ -156,15 +147,19 @@ getDefInfo (DataSig i _ _ _) = Just i getDefInfo (DataDef i _ _ _) = Just i getDefInfo (RecSig i _ _ _) = Just i- getDefInfo (RecDef i _ _ _ _ _ _) = Just i+ getDefInfo (RecDef i _ _ _ _ _ _ _) = Just i getDefInfo _ = Nothing +type ImportDirective = ImportDirective' QName ModuleName+type Renaming = Renaming' QName ModuleName+type ImportedName = ImportedName' QName ModuleName+ data ModuleApplication = SectionApp Telescope ModuleName [NamedArg Expr] -- ^ @tel. M args@: applies @M@ to @args@ and abstracts @tel@. | RecordModuleIFS ModuleName -- ^ @M {{...}}@- deriving (Typeable, Show)+ deriving (Typeable, Show, Eq) data Pragma = OptionsPragma [String]@@ -175,13 +170,18 @@ | RewritePragma QName | CompiledPragma QName String | CompiledExportPragma QName String+ | CompiledDeclareDataPragma QName String | CompiledTypePragma QName String | CompiledDataPragma QName String [String] | CompiledEpicPragma QName String | CompiledJSPragma QName String+ | CompiledUHCPragma QName String+ | CompiledDataUHCPragma QName String [String]+ | NoSmashingPragma QName | StaticPragma QName- | EtaPragma QName- deriving (Typeable, Show)+ | InlinePragma QName+ | DisplayPragma QName [NamedArg Pattern] Expr+ deriving (Typeable, Show, Eq) -- | Bindings that are valid in a @let@. data LetBinding@@ -189,11 +189,15 @@ -- ^ @LetBind info rel name type defn@ | LetPatBind LetInfo Pattern Expr -- ^ Irrefutable pattern binding.- | LetApply ModuleInfo ModuleName ModuleApplication (Ren QName) (Ren ModuleName)- -- ^ @LetApply mi newM (oldM args) renaming moduleRenaming@.- | LetOpen ModuleInfo ModuleName+ | LetApply ModuleInfo ModuleName ModuleApplication (Ren QName) (Ren ModuleName) ImportDirective+ -- ^ @LetApply mi newM (oldM args) renaming moduleRenaming dir@.+ -- The @ImportDirective@ is for highlighting purposes.+ | LetOpen ModuleInfo ModuleName ImportDirective -- ^ only for highlighting and abstractToConcrete- deriving (Typeable, Show)+ | LetDeclaredVariable Name+ -- ^ Only used for highlighting. Refers to the first occurrence of+ -- @x@ in @let x : A; x = e@.+ deriving (Typeable, Show, Eq) -- | Only 'Axiom's. type TypeSignature = Declaration@@ -204,12 +208,12 @@ data LamBinding = DomainFree ArgInfo Name -- ^ . @x@ or @{x}@ or @.x@ or @.{x}@ | DomainFull TypedBindings -- ^ . @(xs:e)@ or @{xs:e}@ or @(let Ds)@- deriving (Typeable, Show)+ deriving (Typeable, Show, Eq) -- | Typed bindings with hiding information. data TypedBindings = TypedBindings Range (Arg TypedBinding) -- ^ . @(xs : e)@ or @{xs : e}@- deriving (Typeable, Show)+ deriving (Typeable, Show, Eq) -- | A typed binding. Appears in dependent function spaces, typed lambdas, and -- telescopes. It might be tempting to simplify this to only bind a single@@ -230,7 +234,7 @@ -- ^ As in telescope @(x y z : A)@ or type @(x y z : A) -> B@. | TLet Range [LetBinding] -- ^ E.g. @(let x = e)@ or @(let open M)@.- deriving (Typeable, Show)+ deriving (Typeable, Show, Eq) type Telescope = [TypedBindings] @@ -241,7 +245,8 @@ { clauseLHS :: lhs , clauseRHS :: RHS , clauseWhereDecls :: [Declaration]- } deriving (Typeable, Show, Functor, Foldable, Traversable)+ , clauseCatchall :: Bool+ } deriving (Typeable, Show, Functor, Foldable, Traversable, Eq) type Clause = Clause' LHS type SpineClause = Clause' SpineLHS@@ -255,7 +260,7 @@ -- ^ The 'QName's are the names of the generated with functions. -- One for each 'Expr'. -- The RHS shouldn't be another @RewriteRHS@.- deriving (Typeable, Show)+ deriving (Typeable, Show, Eq) -- | The lhs of a clause in spine view (inside-out). -- Projection patterns are contained in @spLhsPats@,@@ -266,8 +271,12 @@ , spLhsPats :: [NamedArg Pattern] -- ^ Function parameters (patterns). , spLhsWithPats :: [Pattern] -- ^ @with@ patterns (after @|@). }- deriving (Typeable, Show)+ deriving (Typeable, Show, Eq) ++instance Eq LHS where+ (LHS _ core wps) == (LHS _ core' wps') = core == core' && wps == wps'+ -- | The lhs of a clause in focused (projection-application) view (outside-in). -- Projection patters are represented as 'LHSProj's. data LHS = LHS@@ -295,7 +304,7 @@ , lhsPatsRight :: [NamedArg (Pattern' e)] -- ^ Further applied to patterns. }- deriving (Eq, Typeable, Show, Functor, Foldable, Traversable)+ deriving (Typeable, Show, Functor, Foldable, Traversable, Eq) type LHSCore = LHSCore' Expr @@ -336,8 +345,8 @@ -- | Add projection and applicative patterns to the right. lhsCoreAddSpine :: LHSCore' e -> [NamedArg (Pattern' e)] -> LHSCore' e lhsCoreAddSpine core ps = case ps2 of- (Common.Arg info (Named n (DefP i d ps0)) : ps2') ->- LHSProj d ps0 (Common.Arg info $ Named n $ lhsCoreApp core ps1) []+ (Arg info (Named n (DefP i d ps0)) : ps2') ->+ LHSProj d ps0 (Arg info $ Named n $ lhsCoreApp core ps1) [] `lhsCoreAddSpine` ps2' [] -> lhsCoreApp core ps _ -> __IMPOSSIBLE__@@ -382,7 +391,8 @@ | AbsurdP PatInfo | LitP Literal | PatternSynP PatInfo QName [NamedArg (Pattern' e)]- deriving (Typeable, Show, Functor, Foldable, Traversable)+ | RecP PatInfo [FieldAssignment' (Pattern' e)]+ deriving (Typeable, Show, Functor, Foldable, Traversable, Eq) type Pattern = Pattern' Expr type Patterns = [NamedArg Pattern]@@ -395,7 +405,7 @@ isProjP (DefP _ d []) = Just d isProjP _ = Nothing -instance IsProjP a => IsProjP (Common.Arg c a) where+instance IsProjP a => IsProjP (Arg a) where isProjP = isProjP . unArg instance IsProjP a => IsProjP (Named n a) where@@ -405,27 +415,68 @@ Instances --------------------------------------------------------------------------} --- | Literal equality of patterns, ignoring dot patterns-instance Eq (Pattern' e) where- p == p' =- case (p,p') of- ((VarP x) , (VarP x') ) -> x === x'- ((ConP _ x ps) , (ConP _ x' ps') ) -> x == x' && ps == ps'- ((DefP _ x ps) , (DefP _ x' ps') ) -> x == x' && ps == ps'- ((WildP _) , (WildP _) ) -> True- ((AsP _ x p) , (AsP _ x' p') ) -> x === x' && p == p'- ((DotP _ _) , (DotP _ _) ) -> True- (AbsurdP{} , AbsurdP{} ) -> True- ((LitP l) , (LitP l') ) -> l == l'- ((PatternSynP _ x ps) , (PatternSynP _ x' ps')) -> x == x' && ps == ps'- (_ , _ ) -> False- where (Name _ (C.Name _ x) _ _) === (Name _ (C.Name _ x') _ _) = True- (Name _ C.NoName{} _ _) === (Name _ C.NoName{} _ _) = True- _ === _ = False+-- | Does not compare 'ScopeInfo' fields. -instance Eq LHS where- (LHS _ core wps) == (LHS _ core' wps') = core == core' && wps == wps'+instance Eq Expr where+ ScopedExpr _ a1 == ScopedExpr _ a2 = a1 == a2 + Var a1 == Var a2 = a1 == a2+ Def a1 == Def a2 = a1 == a2+ Proj a1 == Proj a2 = a1 == a2+ Con a1 == Con a2 = a1 == a2+ PatternSyn a1 == PatternSyn a2 = a1 == a2+ Macro a1 == Macro a2 = a1 == a2+ Lit a1 == Lit a2 = a1 == a2+ QuestionMark a1 b1 == QuestionMark a2 b2 = (a1, b1) == (a2, b2)+ Underscore a1 == Underscore a2 = a1 == a2+ App a1 b1 c1 == App a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)+ WithApp a1 b1 c1 == WithApp a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)+ Lam a1 b1 c1 == Lam a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)+ AbsurdLam a1 b1 == AbsurdLam a2 b2 = (a1, b1) == (a2, b2)+ ExtendedLam a1 b1 c1 d1 == ExtendedLam a2 b2 c2 d2 = (a1, b1, c1, d1) == (a2, b2, c2, d2)+ Pi a1 b1 c1 == Pi a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)+ Fun a1 b1 c1 == Fun a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)+ Set a1 b1 == Set a2 b2 = (a1, b1) == (a2, b2)+ Prop a1 == Prop a2 = a1 == a2+ Let a1 b1 c1 == Let a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)+ ETel a1 == ETel a2 = a1 == a2+ Rec a1 b1 == Rec a2 b2 = (a1, b1) == (a2, b2)+ RecUpdate a1 b1 c1 == RecUpdate a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)+ QuoteGoal a1 b1 c1 == QuoteGoal a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)+ QuoteContext a1 == QuoteContext a2 = a1 == a2+ Quote a1 == Quote a2 = a1 == a2+ QuoteTerm a1 == QuoteTerm a2 = a1 == a2+ Unquote a1 == Unquote a2 = a1 == a2+ Tactic a1 b1 c1 d1 == Tactic a2 b2 c2 d2 = (a1, b1, c1, d1) == (a2, b2, c2, d2)+ DontCare a1 == DontCare a2 = a1 == a2++ _ == _ = False++-- | Does not compare 'ScopeInfo' fields.++instance Eq Declaration where+ ScopedDecl _ a1 == ScopedDecl _ a2 = a1 == a2++ Axiom a1 b1 c1 d1 e1 == Axiom a2 b2 c2 d2 e2 = (a1, b1, c1, d1, e1) == (a2, b2, c2, d2, e2)+ Field a1 b1 c1 == Field a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)+ Primitive a1 b1 c1 == Primitive a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)+ Mutual a1 b1 == Mutual a2 b2 = (a1, b1) == (a2, b2)+ Section a1 b1 c1 d1 == Section a2 b2 c2 d2 = (a1, b1, c1, d1) == (a2, b2, c2, d2)+ Apply a1 b1 c1 d1 e1 f1 == Apply a2 b2 c2 d2 e2 f2 = (a1, b1, c1, d1, e1, f1) == (a2, b2, c2, d2, e2, f2)+ Import a1 b1 c1 == Import a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)+ Pragma a1 b1 == Pragma a2 b2 = (a1, b1) == (a2, b2)+ Open a1 b1 c1 == Open a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)+ FunDef a1 b1 c1 d1 == FunDef a2 b2 c2 d2 = (a1, b1, c1, d1) == (a2, b2, c2, d2)+ DataSig a1 b1 c1 d1 == DataSig a2 b2 c2 d2 = (a1, b1, c1, d1) == (a2, b2, c2, d2)+ DataDef a1 b1 c1 d1 == DataDef a2 b2 c2 d2 = (a1, b1, c1, d1) == (a2, b2, c2, d2)+ RecSig a1 b1 c1 d1 == RecSig a2 b2 c2 d2 = (a1, b1, c1, d1) == (a2, b2, c2, d2)+ RecDef a1 b1 c1 d1 e1 f1 g1 h1 == RecDef a2 b2 c2 d2 e2 f2 g2 h2 = (a1, b1, c1, d1, e1, f1, g1, h1) == (a2, b2, c2, d2, e2, f2, g2, h2)+ PatternSynDef a1 b1 c1 == PatternSynDef a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)+ UnquoteDecl a1 b1 c1 d1 == UnquoteDecl a2 b2 c2 d2 = (a1, b1, c1, d1) == (a2, b2, c2, d2)+ UnquoteDef a1 b1 c1 == UnquoteDef a2 b2 c2 = (a1, b1, c1) == (a2, b2, c2)++ _ == _ = False+ instance Underscore Expr where underscore = Underscore emptyMetaInfo isUnderscore = __IMPOSSIBLE__@@ -474,31 +525,34 @@ getRange (ETel tel) = getRange tel getRange (ScopedExpr _ e) = getRange e getRange (QuoteGoal _ _ e) = getRange e- getRange (QuoteContext _ _ e) = getRange e+ getRange (QuoteContext i) = getRange i getRange (Quote i) = getRange i getRange (QuoteTerm i) = getRange i getRange (Unquote i) = getRange i+ getRange (Tactic i _ _ _) = getRange i getRange (DontCare{}) = noRange getRange (PatternSyn x) = getRange x+ getRange (Macro x) = getRange x instance HasRange Declaration where getRange (Axiom _ i _ _ _ ) = getRange i getRange (Field i _ _ ) = getRange i getRange (Mutual i _ ) = getRange i getRange (Section i _ _ _ ) = getRange i- getRange (Apply i _ _ _ _ ) = getRange i- getRange (Import i _ ) = getRange i+ getRange (Apply i _ _ _ _ _) = getRange i+ getRange (Import i _ _ ) = getRange i getRange (Primitive i _ _ ) = getRange i getRange (Pragma i _ ) = getRange i- getRange (Open i _ ) = getRange i+ getRange (Open i _ _ ) = getRange i getRange (ScopedDecl _ d ) = getRange d getRange (FunDef i _ _ _ ) = getRange i getRange (DataSig i _ _ _ ) = getRange i getRange (DataDef i _ _ _ ) = getRange i getRange (RecSig i _ _ _ ) = getRange i- getRange (RecDef i _ _ _ _ _ _) = getRange i+ getRange (RecDef i _ _ _ _ _ _ _) = getRange i getRange (PatternSynDef x _ _ ) = getRange x getRange (UnquoteDecl _ i _ _) = getRange i+ getRange (UnquoteDef i _ _) = getRange i instance HasRange (Pattern' e) where getRange (VarP x) = getRange x@@ -510,6 +564,7 @@ getRange (AbsurdP i) = getRange i getRange (LitP l) = getRange l getRange (PatternSynP i _ _) = getRange i+ getRange (RecP i _) = getRange i instance HasRange SpineLHS where getRange (SpineLHS i _ _ _) = getRange i@@ -522,7 +577,7 @@ getRange (LHSProj d ps1 lhscore ps2) = d `fuseRange` ps1 `fuseRange` lhscore `fuseRange` ps2 instance HasRange a => HasRange (Clause' a) where- getRange (Clause lhs rhs ds) = getRange (lhs,rhs,ds)+ getRange (Clause lhs rhs ds catchall) = getRange (lhs,rhs,ds) instance HasRange RHS where getRange AbsurdRHS = noRange@@ -533,8 +588,9 @@ instance HasRange LetBinding where getRange (LetBind i _ _ _ _ ) = getRange i getRange (LetPatBind i _ _ ) = getRange i- getRange (LetApply i _ _ _ _ ) = getRange i- getRange (LetOpen i _ ) = getRange i+ getRange (LetApply i _ _ _ _ _ ) = getRange i+ getRange (LetOpen i _ _ ) = getRange i+ getRange (LetDeclaredVariable x) = getRange x -- setRange for patterns applies the range to the outermost pattern constructor instance SetRange (Pattern' a) where@@ -547,6 +603,7 @@ setRange r (AbsurdP _) = AbsurdP (PatRange r) setRange r (LitP l) = LitP (setRange r l) setRange r (PatternSynP _ n as) = PatternSynP (PatRange r) (setRange r n) as+ setRange r (RecP i as) = RecP (PatRange r) as instance KillRange LamBinding where killRange (DomainFree info x) = killRange1 (DomainFree info) x@@ -582,32 +639,36 @@ killRange (ETel tel) = killRange1 ETel tel killRange (ScopedExpr s e) = killRange1 (ScopedExpr s) e killRange (QuoteGoal i x e) = killRange3 QuoteGoal i x e- killRange (QuoteContext i x e) = killRange3 QuoteContext i x e+ killRange (QuoteContext i) = killRange1 QuoteContext i killRange (Quote i) = killRange1 Quote i killRange (QuoteTerm i) = killRange1 QuoteTerm i killRange (Unquote i) = killRange1 Unquote i+ killRange (Tactic i e xs ys) = killRange4 Tactic i e xs ys killRange (DontCare e) = killRange1 DontCare e killRange (PatternSyn x) = killRange1 PatternSyn x+ killRange (Macro x) = killRange1 Macro x instance KillRange Declaration where killRange (Axiom p i rel a b ) = killRange4 (Axiom p) i rel a b killRange (Field i a b ) = killRange3 Field i a b killRange (Mutual i a ) = killRange2 Mutual i a killRange (Section i a b c ) = killRange4 Section i a b c- killRange (Apply i a b c d ) = killRange3 Apply i a b c d- -- the last two arguments of Apply are name maps, so nothing to kill- killRange (Import i a ) = killRange2 Import i a+ killRange (Apply i a b c d e ) = killRange3 Apply i a b c d (killRange e)+ -- the arguments c and d of Apply are name maps, so nothing to kill+ -- Andreas, 2016-01-24 really?+ killRange (Import i a b ) = killRange3 Import i a b killRange (Primitive i a b ) = killRange3 Primitive i a b killRange (Pragma i a ) = Pragma (killRange i) a- killRange (Open i x ) = killRange2 Open i x+ killRange (Open i x dir ) = killRange3 Open i x dir killRange (ScopedDecl a d ) = killRange1 (ScopedDecl a) d killRange (FunDef i a b c ) = killRange4 FunDef i a b c killRange (DataSig i a b c ) = killRange4 DataSig i a b c killRange (DataDef i a b c ) = killRange4 DataDef i a b c killRange (RecSig i a b c ) = killRange4 RecSig i a b c- killRange (RecDef i a b c d e f ) = killRange7 RecDef i a b c d e f+ killRange (RecDef i a b c d e f g ) = killRange8 RecDef i a b c d e f g killRange (PatternSynDef x xs p ) = killRange3 PatternSynDef x xs p killRange (UnquoteDecl mi i x e ) = killRange4 UnquoteDecl mi i x e+ killRange (UnquoteDef i x e ) = killRange3 UnquoteDef i x e instance KillRange ModuleApplication where killRange (SectionApp a b c ) = killRange3 SectionApp a b c@@ -623,6 +684,7 @@ killRange (AbsurdP i) = killRange1 AbsurdP i killRange (LitP l) = killRange1 LitP l killRange (PatternSynP i a p) = killRange3 PatternSynP i a p+ killRange (RecP i as) = killRange2 RecP i as instance KillRange SpineLHS where killRange (SpineLHS i a b c) = killRange4 SpineLHS i a b c@@ -635,7 +697,7 @@ killRange (LHSProj a b c d) = killRange4 LHSProj a b c d instance KillRange a => KillRange (Clause' a) where- killRange (Clause lhs rhs ds) = killRange3 Clause lhs rhs ds+ killRange (Clause lhs rhs ds catchall) = killRange4 Clause lhs rhs ds catchall instance KillRange RHS where killRange AbsurdRHS = AbsurdRHS@@ -646,9 +708,13 @@ instance KillRange LetBinding where killRange (LetBind i info a b c) = killRange5 LetBind i info a b c killRange (LetPatBind i a b ) = killRange3 LetPatBind i a b- killRange (LetApply i a b c d ) = killRange3 LetApply i a b c d- killRange (LetOpen i x ) = killRange2 LetOpen i x+ killRange (LetApply i a b c d e ) = killRange3 LetApply i a b c d (killRange e)+ killRange (LetOpen i x dir ) = killRange3 LetOpen i x dir+ killRange (LetDeclaredVariable x) = killRange1 LetDeclaredVariable x +-- See Agda.Utils.GeniPlate:+-- Does not descend into ScopeInfo and renaming maps, for instance.+ instanceUniverseBiT' [] [t| (Declaration, QName) |] instanceUniverseBiT' [] [t| (Declaration, AmbiguousQName) |] instanceUniverseBiT' [] [t| (Declaration, Expr) |]@@ -656,6 +722,7 @@ instanceUniverseBiT' [] [t| (Declaration, LamBinding) |] instanceUniverseBiT' [] [t| (Declaration, TypedBinding) |] instanceUniverseBiT' [] [t| (Declaration, Pattern) |]+instanceUniverseBiT' [] [t| (Declaration, Pattern' Void) |] instanceUniverseBiT' [] [t| (Declaration, Declaration) |] instanceUniverseBiT' [] [t| (Declaration, ModuleName) |] instanceUniverseBiT' [] [t| (Declaration, ModuleInfo) |]@@ -700,9 +767,10 @@ allNames (DataSig _ q _ _) = Seq.singleton q allNames (DataDef _ q _ decls) = q <| allNames decls allNames (RecSig _ q _ _) = Seq.singleton q- allNames (RecDef _ q _ c _ _ decls) = q <| allNames c >< allNames decls+ allNames (RecDef _ q _ _ c _ _ decls) = q <| allNames c >< allNames decls allNames (PatternSynDef q _ _) = Seq.singleton q- allNames (UnquoteDecl _ _ q _) = Seq.singleton q+ allNames (UnquoteDecl _ _ qs _) = Seq.fromList qs+ allNames (UnquoteDef _ qs _) = Seq.fromList qs allNames (FunDef _ q _ cls) = q <| allNames cls allNames (Section _ _ _ decls) = allNames decls allNames Apply{} = Seq.empty@@ -712,7 +780,7 @@ allNames (ScopedDecl _ decls) = allNames decls instance AllNames Clause where- allNames (Clause _ rhs decls) = allNames rhs >< allNames decls+ allNames (Clause _ rhs decls _) = allNames rhs >< allNames decls instance AllNames RHS where allNames (RHS e) = allNames e@@ -739,16 +807,18 @@ allNames Prop{} = Seq.empty allNames (Let _ lbs e) = allNames lbs >< allNames e allNames ETel{} = __IMPOSSIBLE__- allNames (Rec _ fields) = allNames $ map snd fields- allNames (RecUpdate _ e fs) = allNames e >< allNames (map snd fs)+ allNames (Rec _ fields) = allNames [ a ^. exprFieldA | Left a <- fields ]+ allNames (RecUpdate _ e fs) = allNames e >< allNames (map (view exprFieldA) fs) allNames (ScopedExpr _ e) = allNames e allNames (QuoteGoal _ _ e) = allNames e- allNames (QuoteContext _ _ e) = allNames e+ allNames (QuoteContext _) = Seq.empty allNames Quote{} = Seq.empty allNames QuoteTerm{} = Seq.empty allNames Unquote{} = Seq.empty+ allNames (Tactic _ e xs ys) = allNames e >< allNames xs >< allNames ys allNames DontCare{} = Seq.empty- allNames (PatternSyn x) = Seq.empty+ allNames PatternSyn{} = Seq.empty+ allNames Macro{} = Seq.empty instance AllNames LamBinding where allNames DomainFree{} = Seq.empty@@ -762,10 +832,11 @@ allNames (TLet _ lbs) = allNames lbs instance AllNames LetBinding where- allNames (LetBind _ _ _ e1 e2) = allNames e1 >< allNames e2- allNames (LetPatBind _ _ e) = allNames e- allNames (LetApply _ _ app _ _) = allNames app- allNames LetOpen{} = Seq.empty+ allNames (LetBind _ _ _ e1 e2) = allNames e1 >< allNames e2+ allNames (LetPatBind _ _ e) = allNames e+ allNames (LetApply _ _ app _ _ _) = allNames app+ allNames LetOpen{} = Seq.empty+ allNames (LetDeclaredVariable _) = Seq.empty instance AllNames ModuleApplication where allNames (SectionApp bindss _ es) = allNames bindss >< allNames es@@ -797,14 +868,30 @@ anyAbstract (Section _ _ _ ds) = anyAbstract ds anyAbstract (FunDef i _ _ _) = defAbstract i == AbstractDef anyAbstract (DataDef i _ _ _) = defAbstract i == AbstractDef- anyAbstract (RecDef i _ _ _ _ _ _) = defAbstract i == AbstractDef+ anyAbstract (RecDef i _ _ _ _ _ _ _) = defAbstract i == AbstractDef anyAbstract (DataSig i _ _ _) = defAbstract i == AbstractDef anyAbstract (RecSig i _ _ _) = defAbstract i == AbstractDef anyAbstract _ = __IMPOSSIBLE__ +-- | Turn an 'AbstractName' to an expression.+nameExpr :: AbstractName -> Expr+nameExpr d = mk (anameKind d) $ anameName d+ where+ mk DefName x = Def x+ mk FldName x = Proj x+ mk ConName x = Con $ AmbQ [x]+ mk PatternSynName x = PatternSyn x+ mk MacroName x = Macro x+ mk QuotableName x = App i (Quote i) (defaultNamedArg $ Def x)+ where i = ExprRange (getRange x)+ app :: Expr -> [NamedArg Expr] -> Expr app = foldl (App (ExprRange noRange)) +mkLet :: ExprInfo -> [LetBinding] -> Expr -> Expr+mkLet i [] e = e+mkLet i ds e = Let i ds e+ patternToExpr :: Pattern -> Expr patternToExpr (VarP x) = Var x patternToExpr (ConP _ c ps) =@@ -817,8 +904,9 @@ patternToExpr (AbsurdP _) = Underscore emptyMetaInfo -- TODO: could this happen? patternToExpr (LitP l) = Lit l patternToExpr (PatternSynP _ _ _) = __IMPOSSIBLE__+patternToExpr (RecP _ as) = Rec exprNoRange $ map (Left . fmap patternToExpr) as -type PatternSynDefn = ([Arg Name], Pattern)+type PatternSynDefn = ([Arg Name], Pattern' Void) type PatternSynDefns = Map QName PatternSynDefn lambdaLiftExpr :: [Name] -> Expr -> Expr@@ -828,14 +916,16 @@ substPattern :: [(Name, Pattern)] -> Pattern -> Pattern substPattern s p = case p of- VarP z -> fromMaybe p (lookup z s)- ConP i q ps -> ConP i q (fmap (fmap (fmap (substPattern s))) ps)- WildP i -> p- DotP i e -> DotP i (substExpr (map (fmap patternToExpr) s) e)- AbsurdP i -> p- LitP l -> p- _ -> __IMPOSSIBLE__ -- pattern synonyms (already gone) and- -- @-patterns (not supported anyways).+ VarP z -> fromMaybe p (lookup z s)+ ConP i q ps -> ConP i q (map (fmap (fmap (substPattern s))) ps)+ RecP i ps -> RecP i (map (fmap (substPattern s)) ps)+ WildP i -> p+ DotP i e -> DotP i (substExpr (map (fmap patternToExpr) s) e)+ AbsurdP i -> p+ LitP l -> p+ DefP{} -> p -- destructor pattern+ AsP{} -> __IMPOSSIBLE__ -- @-patterns (not supported anyways)+ PatternSynP{} -> __IMPOSSIBLE__ -- pattern synonyms (already gone) class SubstExpr a where substExpr :: [(Name, Expr)] -> a -> a@@ -846,15 +936,25 @@ instance SubstExpr a => SubstExpr (Arg a) where substExpr = fmap . substExpr -instance SubstExpr a => SubstExpr (Common.Named name a) where+instance SubstExpr a => SubstExpr (Named name a) where substExpr = fmap . substExpr instance (SubstExpr a, SubstExpr b) => SubstExpr (a, b) where substExpr s (x, y) = (substExpr s x, substExpr s y) +instance (SubstExpr a, SubstExpr b) => SubstExpr (Either a b) where+ substExpr s (Left x) = Left (substExpr s x)+ substExpr s (Right y) = Right (substExpr s y)+ instance SubstExpr C.Name where substExpr _ = id +instance SubstExpr ModuleName where+ substExpr _ = id++instance SubstExpr Assign where+ substExpr s (FieldAssignment n x) = FieldAssignment n (substExpr s x)+ instance SubstExpr Expr where substExpr s e = case e of Var n -> fromMaybe e (lookup n s)@@ -880,12 +980,14 @@ -- XXX: Do we need to do more with ScopedExprs? ScopedExpr si e -> ScopedExpr si (substExpr s e) QuoteGoal i n e -> QuoteGoal i n (substExpr s e)- QuoteContext i n e -> QuoteContext i n (substExpr s e)+ QuoteContext i -> e Quote i -> e QuoteTerm i -> e Unquote i -> e+ Tactic i e xs ys -> Tactic i (substExpr s e) (substExpr s xs) (substExpr s ys) DontCare e -> DontCare (substExpr s e)- PatternSyn x -> e+ PatternSyn{} -> e+ Macro{} -> e instance SubstExpr LetBinding where substExpr s lb = case lb of
src/full/Agda/Syntax/Abstract/Copatterns.hs view
@@ -21,15 +21,15 @@ import Data.Traversable as T import Agda.Syntax.Abstract-import Agda.Syntax.Abstract.Name as A-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import qualified Agda.Syntax.Concrete.Name as C+import Agda.Syntax.Concrete (FieldAssignment'(..)) import Agda.Syntax.Info import Agda.Syntax.Position import Agda.Syntax.Scope.Monad import Agda.TypeChecking.Monad.Base (TypeError(..), typeError)+import Agda.Utils.Either import Agda.Utils.Tuple #include "undefined.h"@@ -191,10 +191,10 @@ rhsExpr _ = __IMPOSSIBLE__ clauseToPath :: Clause -> ScopeM (ProjPath Clause)-clauseToPath (Clause (LHS i lhs wps) (RHS e) []) =- fmap (\ lhs -> Clause (LHS i lhs wps) (RHS e) []) <$> lhsToPath [] lhs-clauseToPath (Clause lhs (RHS e) (_:_)) = typeError $ NotImplemented $ "copattern clauses with where declarations"-clauseToPath (Clause lhs _ wheredecls) = typeError $ NotImplemented $ "copattern clauses with absurd, with or rewrite right hand side"+clauseToPath (Clause (LHS i lhs wps) (RHS e) [] catchall) =+ fmap (\ lhs -> Clause (LHS i lhs wps) (RHS e) [] catchall) <$> lhsToPath [] lhs+clauseToPath (Clause lhs (RHS e) (_:_) _) = typeError $ NotImplemented $ "copattern clauses with where declarations"+clauseToPath (Clause lhs _ wheredecls _) = typeError $ NotImplemented $ "copattern clauses with absurd, with or rewrite right hand side" lhsToPath :: [ProjEntry] -> LHSCore -> ScopeM (ProjPath LHSCore) lhsToPath acc lhs@LHSHead{} = return $ Path acc lhs@@ -219,14 +219,14 @@ Rec ei <$> mapM abstractions pes where- abstractions :: (ProjEntry, Expr) -> ScopeM (C.Name, Expr)- abstractions (ProjEntry p xs, e) = (C.unqualify $ qnameToConcrete p,) <$>+ abstractions :: (ProjEntry, Expr) -> ScopeM RecordAssign+ abstractions (ProjEntry p xs, e) = Left . FieldAssignment (C.unqualify $ qnameToConcrete p) <$> foldr abstract (return e) xs abstract :: NamedArg Name -> ScopeM Expr -> ScopeM Expr- abstract (Common.Arg info (Named Nothing x)) me =+ abstract (Arg info (Named Nothing x)) me = Lam (ExprRange noRange) (DomainFree info x) <$> me- abstract (Common.Arg _ (Named Just{} _)) me = typeError $ NotImplemented $+ abstract (Arg _ (Named Just{} _)) me = typeError $ NotImplemented $ "named arguments in projection patterns" -- | Similar to 'groupClauses'.@@ -266,10 +266,13 @@ instance Rename QName where rename _ q = q +instance Rename Name where+ rename rho x = maybe x id (rho x)+ instance Rename Expr where rename rho e = case e of- Var x -> Var $ maybe x id (rho x)+ Var x -> Var (rename rho x) Def f -> e Proj f -> e Con c -> e@@ -287,24 +290,33 @@ Prop{} -> e Let i bs e -> Let i (rename rho bs) (rename rho e) ETel tel -> ETel (rename rho tel)- Rec i fes -> Rec i $ map (id -*- rename rho) fes- RecUpdate i e fes -> RecUpdate i (rename rho e) $ map (id -*- rename rho) fes+ Rec i fes -> Rec i $ rename rho fes+ RecUpdate i e fes -> RecUpdate i (rename rho e) (rename rho fes) ScopedExpr i e -> ScopedExpr i (rename rho e) QuoteGoal i n e -> QuoteGoal i n (rename rho e)- QuoteContext i n e -> QuoteContext i n (rename rho e)+ QuoteContext i -> e Quote i -> e QuoteTerm i -> e Unquote i -> e+ Tactic i e xs ys -> Tactic i (rename rho e) (rename rho xs) (rename rho ys) DontCare e -> DontCare (rename rho e)- PatternSyn n -> e+ PatternSyn{} -> e+ Macro{} -> e +instance Rename ModuleName where+ rename rho x = x++instance Rename a => Rename (FieldAssignment' a) where+ rename rho = fmap (rename rho)+ instance Rename LetBinding where rename rho e = case e of- LetBind i r n e e' -> LetBind i r n (rename rho e) (rename rho e')- LetPatBind i p e -> LetPatBind i (rename rho p) (rename rho e)- LetApply{} -> e- LetOpen{} -> e+ LetBind i r n e e' -> LetBind i r n (rename rho e) (rename rho e')+ LetPatBind i p e -> LetPatBind i (rename rho p) (rename rho e)+ LetApply{} -> e+ LetOpen{} -> e+ LetDeclaredVariable x -> LetDeclaredVariable (rename rho x) instance Rename LamBinding where rename rho e =@@ -320,8 +332,8 @@ rename rho (TLet r lbs) = TLet r (rename rho lbs) instance Rename Clause where- rename rho (Clause lhs rhs wheredecls) =- Clause (rename rho lhs) (rename rho rhs) (rename rho wheredecls)+ rename rho (Clause lhs rhs wheredecls catchall) =+ Clause (rename rho lhs) (rename rho rhs) (rename rho wheredecls) catchall instance Rename RHS where rename rho e = case e of@@ -351,9 +363,11 @@ instance Rename a => Rename [a] where rename rho = map (rename rho) +instance (Rename a, Rename b) => Rename (Either a b) where+ rename rho = mapEither (rename rho) (rename rho)+ instance (Rename a, Rename b) => Rename (a, b) where rename rho (a,b) = (rename rho a, rename rho b)- -- | Alpha-Equivalence of patterns, ignoring dot patterns
src/full/Agda/Syntax/Abstract/Name.hs view
@@ -15,7 +15,7 @@ , IsNoName(..) ) where -import Control.Monad.State+import Control.DeepSeq import Data.Foldable (Foldable) import Data.Traversable (Traversable)@@ -29,7 +29,7 @@ import Agda.Syntax.Position import Agda.Syntax.Common import {-# SOURCE #-} Agda.Syntax.Fixity-import Agda.Syntax.Concrete.Name (IsNoName(..))+import Agda.Syntax.Concrete.Name (IsNoName(..), NumHoles(..)) import qualified Agda.Syntax.Concrete.Name as C import Agda.Utils.List@@ -44,7 +44,7 @@ -- | A name is a unique identifier and a suggestion for a concrete name. The -- concrete name contains the source location (if any) of the name. The -- source location of the binding site is also recorded.-data Name = Name { nameId :: NameId+data Name = Name { nameId :: !NameId , nameConcrete :: C.Name , nameBindingSite :: Range , nameFixity :: Fixity'@@ -137,7 +137,7 @@ mkName_ = mkName noRange instance MkName String where- mkName r i s = Name i (C.Name noRange (C.stringNameParts s)) r defaultFixity'+ mkName r i s = Name i (C.Name noRange (C.stringNameParts s)) r noFixity' qnameToList :: QName -> [Name]@@ -256,6 +256,12 @@ instance IsNoName Name where isNoName = isNoName . nameConcrete +instance NumHoles Name where+ numHoles = numHoles . nameConcrete++instance NumHoles QName where+ numHoles = numHoles . qnameName+ ------------------------------------------------------------------------ -- * Show instances ------------------------------------------------------------------------@@ -397,3 +403,18 @@ instance CoArbitrary QName where coarbitrary = coarbitrary . qnameName++------------------------------------------------------------------------+-- * NFData instances+------------------------------------------------------------------------++-- | The range is not forced.++instance NFData Name where+ rnf (Name _ a _ b) = rnf a `seq` rnf b++instance NFData QName where+ rnf (QName a b) = rnf a `seq` rnf b++instance NFData ModuleName where+ rnf (MName a) = rnf a
src/full/Agda/Syntax/Abstract/Views.hs view
@@ -1,8 +1,13 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE NoMonomorphismRestriction #-} {-# LANGUAGE PatternGuards #-} {-# LANGUAGE TupleSections #-} +#if __GLASGOW_HASKELL__ <= 706+{-# LANGUAGE FlexibleContexts #-}+#endif+ module Agda.Syntax.Abstract.Views where import Control.Applicative@@ -12,13 +17,18 @@ import Data.Foldable (foldMap) import Data.Monoid import Data.Traversable+import Data.Void import Agda.Syntax.Position-import qualified Agda.Syntax.Common as Common-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg)+import Agda.Syntax.Common import Agda.Syntax.Abstract as A+import Agda.Syntax.Concrete (FieldAssignment', exprFieldA) import Agda.Syntax.Info+import Agda.Syntax.Scope.Base (emptyScopeInfo) +import Agda.Utils.Either+import Agda.Utils.Lens+ data AppView = Application Expr [NamedArg Expr] -- | Gather applications to expose head and spine.@@ -51,12 +61,28 @@ -- | Remove top 'ScopedExpr' wrappers. unScope :: Expr -> Expr unScope (ScopedExpr scope e) = unScope e+unScope (QuestionMark i ii) = QuestionMark (i {metaScope = emptyScopeInfo}) ii+unScope (Underscore i) = Underscore (i {metaScope = emptyScopeInfo}) unScope e = e -- | Remove 'ScopedExpr' wrappers everywhere.-deepUnScope :: Expr -> Expr-deepUnScope = mapExpr unScope+--+-- NB: Unless the implementation of 'ExprLike' for clauses+-- has been finished, this does not work for clauses yet.+deepUnscope :: ExprLike a => a -> a+deepUnscope = mapExpr unScope +deepUnscopeDecls :: [A.Declaration] -> [A.Declaration]+deepUnscopeDecls = concatMap deepUnscopeDecl++deepUnscopeDecl :: A.Declaration -> [A.Declaration]+deepUnscopeDecl (A.ScopedDecl _ ds) = deepUnscopeDecls ds+deepUnscopeDecl (A.Mutual i ds) = [A.Mutual i (deepUnscopeDecls ds)]+deepUnscopeDecl (A.Section i m tel ds) = [A.Section i m (deepUnscope tel) (deepUnscopeDecls ds)]+deepUnscopeDecl (A.RecDef i x ind eta c bs e ds) = [A.RecDef i x ind eta c (deepUnscope bs) (deepUnscope e)+ (deepUnscopeDecls ds)]+deepUnscopeDecl d = [deepUnscope d]+ -- * Traversal -- | Apply an expression rewriting to every subexpression, inside-out.@@ -64,18 +90,24 @@ class ExprLike a where -- | The first expression is pre-traversal, the second one post-traversal. recurseExpr :: (Applicative m) => (Expr -> m Expr -> m Expr) -> a -> m a- default recurseExpr :: (ExprLike a, Traversable f, Applicative m)- => (Expr -> m Expr -> m Expr) -> f a -> m (f a)+ default recurseExpr :: (Traversable f, Applicative m)+ => (Expr -> m Expr -> m Expr) -> f a -> m (f a) recurseExpr = traverse . recurseExpr foldExpr :: Monoid m => (Expr -> m) -> a -> m- foldExpr f = getConst . recurseExpr (\ pre post -> Const $ f pre)+ foldExpr f = getConst . recurseExpr (\ pre post -> Const (f pre) <* post) - traverseExpr :: (Monad m, Applicative m) => (Expr -> m Expr) -> a -> m a+ traverseExpr+#if __GLASGOW_HASKELL__ <= 708+ :: (Applicative m, Monad m)+#else+ :: Monad m+#endif+ => (Expr -> m Expr) -> a -> m a traverseExpr f = recurseExpr (\ pre post -> f =<< post) mapExpr :: (Expr -> Expr) -> (a -> a)- mapExpr f e = runIdentity $ traverseExpr (Identity . f) e+ mapExpr f = runIdentity . traverseExpr (Identity . f) instance ExprLike Expr where recurseExpr f e0 = f e0 $ do@@ -103,12 +135,14 @@ RecUpdate ei e bs -> RecUpdate ei <$> recurse e <*> recurse bs ScopedExpr sc e -> ScopedExpr sc <$> recurse e QuoteGoal ei n e -> QuoteGoal ei n <$> recurse e- QuoteContext ei n e -> QuoteContext ei n <$> recurse e+ QuoteContext ei -> pure e0 Quote{} -> pure e0 QuoteTerm{} -> pure e0 Unquote{} -> pure e0 DontCare e -> DontCare <$> recurse e PatternSyn{} -> pure e0+ Tactic ei e xs ys -> Tactic ei <$> recurse e <*> recurse xs <*> recurse ys+ Macro{} -> pure e0 foldExpr f e = case e of@@ -117,6 +151,7 @@ Proj{} -> m Con{} -> m PatternSyn{} -> m+ Macro{} -> m Lit{} -> m QuestionMark{} -> m Underscore{} -> m@@ -135,10 +170,11 @@ RecUpdate _ e as -> m `mappend` fold e `mappend` fold as ScopedExpr _ e -> m `mappend` fold e QuoteGoal _ _ e -> m `mappend` fold e- QuoteContext _ _ e -> m `mappend` fold e+ QuoteContext _ -> m Quote{} -> m QuoteTerm{} -> m Unquote{} -> m+ Tactic _ e xs ys -> m `mappend` fold e `mappend` fold xs `mappend` fold ys DontCare e -> m `mappend` fold e where m = f e@@ -169,30 +205,38 @@ RecUpdate ei e bs -> f =<< RecUpdate ei <$> trav e <*> trav bs ScopedExpr sc e -> f =<< ScopedExpr sc <$> trav e QuoteGoal ei n e -> f =<< QuoteGoal ei n <$> trav e- QuoteContext ei n e -> f =<< QuoteContext ei n <$> trav e+ QuoteContext{} -> f e Quote{} -> f e QuoteTerm{} -> f e Unquote{} -> f e+ Tactic ei e xs ys -> f =<< Tactic ei <$> trav e <*> trav xs <*> trav ys DontCare e -> f =<< DontCare <$> trav e PatternSyn{} -> f e---- | TODO: currently does not go into colors.-instance ExprLike a => ExprLike (Common.Arg c a) where- foldExpr = foldMap . foldExpr- traverseExpr = traverse . traverseExpr+ Macro{} -> f e +instance ExprLike a => ExprLike (Arg a) where instance ExprLike a => ExprLike (Named x a) where- foldExpr = foldMap . foldExpr- traverseExpr = traverse . traverseExpr+instance ExprLike a => ExprLike [a] where -instance ExprLike a => ExprLike [a] where- foldExpr = foldMap . foldExpr- traverseExpr = traverse . traverseExpr+instance (ExprLike a, ExprLike b) => ExprLike (a, b) where+ recurseExpr f (x, y) = (,) <$> recurseExpr f x <*> recurseExpr f y -instance ExprLike a => ExprLike (x, a) where- foldExpr f (x, e) = foldExpr f e- traverseExpr f (x, e) = (x,) <$> traverseExpr f e+instance ExprLike Void where+ recurseExpr f = absurd +instance ExprLike a => ExprLike (FieldAssignment' a) where+ recurseExpr = exprFieldA . recurseExpr++instance (ExprLike a, ExprLike b) => ExprLike (Either a b) where+ recurseExpr f = traverseEither (recurseExpr f)+ (recurseExpr f)++instance ExprLike ModuleName where+ recurseExpr f = pure++instance ExprLike QName where+ recurseExpr _ = pure+ instance ExprLike LamBinding where recurseExpr f e = case e of@@ -230,60 +274,101 @@ recurseExpr f e = do let recurse e = recurseExpr f e case e of- LetBind li ai x e e' -> LetBind li ai x <$> recurse e <*> recurse e'- LetPatBind li p e -> LetPatBind li <$> recurse p <*> recurse e- LetApply{} -> pure e- LetOpen{} -> pure e+ LetBind li ai x e e' -> LetBind li ai x <$> recurse e <*> recurse e'+ LetPatBind li p e -> LetPatBind li <$> recurse p <*> recurse e+ LetApply{} -> pure e+ LetOpen{} -> pure e+ LetDeclaredVariable _ -> pure e foldExpr f e = case e of- LetBind _ _ _ e e' -> fold e `mappend` fold e'- LetPatBind _ p e -> fold p `mappend` fold e- LetApply{} -> mempty- LetOpen{} -> mempty+ LetBind _ _ _ e e' -> fold e `mappend` fold e'+ LetPatBind _ p e -> fold p `mappend` fold e+ LetApply{} -> mempty+ LetOpen{} -> mempty+ LetDeclaredVariable _ -> mempty where fold e = foldExpr f e traverseExpr f e = do let trav e = traverseExpr f e case e of- LetBind li ai x e e' -> LetBind li ai x <$> trav e <*> trav e'- LetPatBind li p e -> LetPatBind li <$> trav p <*> trav e- LetApply{} -> pure e- LetOpen{} -> pure e+ LetBind li ai x e e' -> LetBind li ai x <$> trav e <*> trav e'+ LetPatBind li p e -> LetPatBind li <$> trav p <*> trav e+ LetApply{} -> pure e+ LetOpen{} -> pure e+ LetDeclaredVariable _ -> pure e instance ExprLike a => ExprLike (Pattern' a) where --- | TODO: currently does not go into clauses.-instance ExprLike (Clause' a) where- recurseExpr f e = pure e- foldExpr f _ = mempty- traverseExpr f e = pure e--{- TODO: finish-instance ExprLike (Clause' a) where- foldExpr f (Clause _ rhs ds) = fold rhs `mappend` fold ds- where fold e = foldExpr f e- traverseExpr f (Clause lhs rhs ds) = Clause lhs <$> trav rhs <*> trav ds- where trav e = traverseExpr f e+instance ExprLike a => ExprLike (Clause' a) where+ recurseExpr f (Clause lhs rhs ds ca) = Clause <$> rec lhs <*> rec rhs <*> rec ds <*> pure ca+ where rec = recurseExpr f instance ExprLike RHS where- foldExpr f rhs =- case rhs of- RHS e -> fold e- AbsurdRHS{} -> mempty- WithRHS _ es cs -> fold es `mappend` fold cs- RewriteRHS xes rhs ds -> fold xes `mappend` fold rhs `mappend` fold ds- where fold e = foldExpr f e-- traverseExpr f rhs =+ recurseExpr f rhs = case rhs of- RHS e -> RHS <$> trav e+ RHS e -> RHS <$> rec e AbsurdRHS{} -> pure rhs- WithRHS x es cs -> WithRHS x <$> trav es <*> trav cs- RewriteRHS xes rhs ds -> RewriteRHS <$> trav xes <*> trav rhs <*> trav ds- where trav e = traverseExpr f e+ WithRHS x es cs -> WithRHS x <$> rec es <*> rec cs+ RewriteRHS xes rhs ds -> RewriteRHS <$> rec xes <*> rec rhs <*> rec ds+ where rec e = recurseExpr f e +instance ExprLike ModuleApplication where+ recurseExpr f a =+ case a of+ SectionApp tel m es -> SectionApp <$> rec tel <*> rec m <*> rec es+ RecordModuleIFS{} -> pure a+ where rec e = recurseExpr f e++instance ExprLike Pragma where+ recurseExpr f p =+ case p of+ BuiltinPragma s e -> BuiltinPragma s <$> rec e+ OptionsPragma{} -> pure p+ BuiltinNoDefPragma{} -> pure p+ RewritePragma{} -> pure p+ CompiledPragma{} -> pure p+ CompiledExportPragma{} -> pure p+ CompiledDeclareDataPragma{} -> pure p+ CompiledTypePragma{} -> pure p+ CompiledDataPragma{} -> pure p+ CompiledEpicPragma{} -> pure p+ CompiledJSPragma{} -> pure p+ CompiledUHCPragma{} -> pure p+ CompiledDataUHCPragma{} -> pure p+ NoSmashingPragma{} -> pure p+ StaticPragma{} -> pure p+ InlinePragma{} -> pure p+ DisplayPragma f xs e -> DisplayPragma f <$> rec xs <*> rec e+ where rec e = recurseExpr f e++instance ExprLike LHS where+ recurseExpr f (LHS i c ps) = LHS i <$> recurseExpr f c <*> recurseExpr f ps++instance ExprLike a => ExprLike (LHSCore' a) where++instance ExprLike SpineLHS where+ recurseExpr f (SpineLHS i x ps wps) = SpineLHS i x <$> recurseExpr f ps <*> recurseExpr f wps+ instance ExprLike Declaration where- foldExpr f d =+ recurseExpr f d = case d of--}+ Axiom a d i x e -> Axiom a d i x <$> rec e+ Field i x e -> Field i x <$> rec e+ Primitive i x e -> Primitive i x <$> rec e+ Mutual i ds -> Mutual i <$> rec ds+ Section i m tel ds -> Section i m <$> rec tel <*> rec ds+ Apply i m a rd rm d -> (\ a -> Apply i m a rd rm d) <$> rec a+ Import{} -> pure d+ Pragma i p -> Pragma i <$> rec p+ Open{} -> pure d+ FunDef i f d cs -> FunDef i f d <$> rec cs+ DataSig i d tel e -> DataSig i d <$> rec tel <*> rec e+ DataDef i d bs cs -> DataDef i d <$> rec bs <*> rec cs+ RecSig i r tel e -> RecSig i r <$> rec tel <*> rec e+ RecDef i r n co c bs e ds -> RecDef i r n co c <$> rec bs <*> rec e <*> rec ds+ PatternSynDef f xs p -> PatternSynDef f xs <$> rec p+ UnquoteDecl i is xs e -> UnquoteDecl i is xs <$> rec e+ UnquoteDef i xs e -> UnquoteDef i xs <$> rec e+ ScopedDecl s ds -> ScopedDecl s <$> rec ds+ where rec e = recurseExpr f e
src/full/Agda/Syntax/Common.hs view
@@ -1,10 +1,10 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE DeriveFoldable #-}-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-| Some common syntactic entities are defined in this module.@@ -12,6 +12,7 @@ module Agda.Syntax.Common where import Control.Applicative+import Control.DeepSeq import Data.ByteString.Char8 (ByteString) import qualified Data.ByteString.Char8 as ByteString@@ -68,6 +69,10 @@ coarbitrary Inductive = variant 0 coarbitrary CoInductive = variant 1 +instance NFData Induction where+ rnf Inductive = ()+ rnf CoInductive = ()+ --------------------------------------------------------------------------- -- * Hiding ---------------------------------------------------------------------------@@ -88,8 +93,13 @@ instance KillRange Hiding where killRange = id +instance NFData Hiding where+ rnf Hidden = ()+ rnf Instance = ()+ rnf NotHidden = ()+ -- | Decorating something with 'Hiding' information.-data WithHiding a = WithHiding Hiding a+data WithHiding a = WithHiding !Hiding a deriving (Typeable, Eq, Ord, Show, Functor, Foldable, Traversable) instance Decoration WithHiding where@@ -108,6 +118,9 @@ instance KillRange a => KillRange (WithHiding a) where killRange = fmap killRange +instance NFData a => NFData (WithHiding a) where+ rnf (WithHiding _ a) = rnf a+ -- | A lens to access the 'Hiding' attribute in data structures. -- Minimal implementation: @getHiding@ and one of @setHiding@ or @mapHiding@. class LensHiding a where@@ -153,6 +166,13 @@ hide :: LensHiding a => a -> a hide = setHiding Hidden +hideOrKeepInstance :: LensHiding a => a -> a+hideOrKeepInstance x =+ case getHiding x of+ Hidden -> x+ Instance -> x+ NotHidden -> setHiding Hidden x+ makeInstance :: LensHiding a => a -> a makeInstance = setHiding Instance @@ -176,6 +196,10 @@ Big <= Small = False _ <= _ = True +instance NFData Big where+ rnf Big = ()+ rnf Small = ()+ -- | A function argument can be relevant or irrelevant. -- See "Agda.TypeChecking.Irrelevance". data Relevance@@ -213,6 +237,13 @@ instance Ord Relevance where (<=) = moreRelevant +instance NFData Relevance where+ rnf Relevant = ()+ rnf NonStrict = ()+ rnf Irrelevant = ()+ rnf (Forced a) = rnf a+ rnf UnusedArg = ()+ -- | A lens to access the 'Relevance' attribute in data structures. -- Minimal implementation: @getRelevance@ and one of @setRelevance@ or @mapRelevance@. class LensRelevance a where@@ -331,90 +362,70 @@ -- | A function argument can be hidden and/or irrelevant. -data ArgInfo c = ArgInfo+data ArgInfo = ArgInfo { argInfoHiding :: Hiding , argInfoRelevance :: Relevance- , argInfoColors :: [c]- } deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable, Show)--instance KillRange c => KillRange (ArgInfo c) where- killRange (ArgInfo h r cs) = killRange3 ArgInfo h r cs--{- FAILED to define a lens for ArgInfo, since it is parametrized by c+ } deriving (Typeable, Eq, Ord, Show) - can't instantiate the following to f c = Arg c e- since Haskell does not have lambda abstraction+instance KillRange ArgInfo where+ killRange (ArgInfo h r) = killRange2 ArgInfo h r -class LensArgInfo f where- getArgInfo :: f c -> ArgInfo c- setArgInfo :: ArgInfo c' -> f c -> f c'+class LensArgInfo a where+ getArgInfo :: a -> ArgInfo+ setArgInfo :: ArgInfo -> a -> a setArgInfo ai = mapArgInfo (const ai)- mapArgInfo :: (ArgInfo c -> ArgInfo c') -> f c -> f c'+ mapArgInfo :: (ArgInfo -> ArgInfo) -> a -> a mapArgInfo f a = setArgInfo (f $ getArgInfo a) a instance LensArgInfo ArgInfo where getArgInfo = id setArgInfo = const mapArgInfo = id--}-{- FAILS because map is too restricted-class LensArgInfo c a where- getArgInfo :: a -> ArgInfo c- setArgInfo :: ArgInfo c -> a -> a- setArgInfo ai = mapArgInfo (const ai)- mapArgInfo :: (ArgInfo c -> ArgInfo c) -> a -> a- mapArgInfo f a = setArgInfo (f $ getArgInfo a) a -instance LensArgInfo c (ArgInfo c) where- getArgInfo = id- setArgInfo = const- mapArgInfo = id--}+instance NFData ArgInfo where+ rnf (ArgInfo a b) = rnf a `seq` rnf b -instance LensHiding (ArgInfo c) where+instance LensHiding ArgInfo where getHiding = argInfoHiding setHiding h ai = ai { argInfoHiding = h } mapHiding f ai = ai { argInfoHiding = f (argInfoHiding ai) } -instance LensRelevance (ArgInfo c) where+instance LensRelevance ArgInfo where getRelevance = argInfoRelevance setRelevance h ai = ai { argInfoRelevance = h } mapRelevance f ai = ai { argInfoRelevance = f (argInfoRelevance ai) } -mapArgInfoColors :: ([c] -> [c']) -> ArgInfo c -> ArgInfo c'-mapArgInfoColors f info = info { argInfoColors = f $ argInfoColors info }--defaultArgInfo :: ArgInfo c+defaultArgInfo :: ArgInfo defaultArgInfo = ArgInfo { argInfoHiding = NotHidden- , argInfoRelevance = Relevant- , argInfoColors = [] }+ , argInfoRelevance = Relevant } + --------------------------------------------------------------------------- -- * Arguments --------------------------------------------------------------------------- -data Arg c e = Arg- { argInfo :: ArgInfo c+data Arg e = Arg+ { argInfo :: ArgInfo , unArg :: e } deriving (Typeable, Ord, Functor, Foldable, Traversable) -instance Decoration (Arg c) where+instance Decoration Arg where traverseF f (Arg ai a) = Arg ai <$> f a -instance HasRange a => HasRange (Arg c a) where+instance HasRange a => HasRange (Arg a) where getRange = getRange . unArg -instance SetRange a => SetRange (Arg c a) where+instance SetRange a => SetRange (Arg a) where setRange r = fmap $ setRange r -instance (KillRange c, KillRange a) => KillRange (Arg c a) where+instance KillRange a => KillRange (Arg a) where killRange (Arg info a) = killRange2 Arg info a -instance (Eq a, Eq c) => Eq (Arg c a) where- Arg (ArgInfo h1 _ cs1) x1 == Arg (ArgInfo h2 _ cs2) x2 = (h1, cs1, x1) == (h2, cs2, x2)+instance Eq a => Eq (Arg a) where+ Arg (ArgInfo h1 _) x1 == Arg (ArgInfo h2 _) x2 = (h1, x1) == (h2, x2) -instance (Show a, Show c) => Show (Arg c a) where- show (Arg (ArgInfo h r cs) x) = showC cs $ showR r $ showH h $ show x+instance Show a => Show (Arg a) where+ show (Arg (ArgInfo h r) x) = showR r $ showH h $ show x where showH Hidden s = "{" ++ s ++ "}" showH NotHidden s = "(" ++ s ++ ")"@@ -426,61 +437,46 @@ Forced Small -> "!" ++ s UnusedArg -> "k" ++ s -- constant Relevant -> "r" ++ s -- Andreas: I want to see it explicitly- showC cs s = show cs ++ s -instance LensHiding (Arg c e) where+instance NFData e => NFData (Arg e) where+ rnf (Arg a b) = rnf a `seq` rnf b++instance LensHiding (Arg e) where getHiding = getHiding . argInfo mapHiding = mapArgInfo . mapHiding -instance LensRelevance (Arg c e) where+instance LensRelevance (Arg e) where getRelevance = getRelevance . argInfo mapRelevance = mapArgInfo . mapRelevance {- RETIRED-hide :: Arg c a -> Arg c a+hide :: Arg a -> Arg a hide = setArgHiding Hidden -makeInstance :: Arg c a -> Arg c a+makeInstance :: Arg a -> Arg a makeInstance = setHiding Instance -isHiddenArg :: Arg c a -> Bool+isHiddenArg :: Arg a -> Bool isHiddenArg arg = argHiding arg /= NotHidden -} -mapArgInfo :: (ArgInfo c -> ArgInfo c') -> Arg c a -> Arg c' a-mapArgInfo f arg = arg { argInfo = f $ argInfo arg }--argColors :: Arg c a -> [c]-argColors = argInfoColors . argInfo--mapArgColors :: ([c] -> [c']) -> Arg c a -> Arg c' a-mapArgColors = mapArgInfo . mapArgInfoColors--setArgColors :: [c] -> Arg c' a -> Arg c a-setArgColors = mapArgColors . const+instance LensArgInfo (Arg a) where+ getArgInfo = argInfo+ mapArgInfo f arg = arg { argInfo = f $ argInfo arg } -defaultArg :: a -> Arg c a+defaultArg :: a -> Arg a defaultArg = Arg defaultArgInfo -defaultColoredArg :: ([c],a) -> Arg c a-defaultColoredArg (cs,a) = setArgColors cs $ defaultArg a--noColorArg :: Hiding -> Relevance -> a -> Arg c a-noColorArg h r = Arg ArgInfo { argInfoHiding = h- , argInfoRelevance = r- , argInfoColors = []- }- -- | @xs \`withArgsFrom\` args@ translates @xs@ into a list of 'Arg's, -- using the elements in @args@ to fill in the non-'unArg' fields. -- -- Precondition: The two lists should have equal length. -withArgsFrom :: [a] -> [Arg c b] -> [Arg c a]+withArgsFrom :: [a] -> [Arg b] -> [Arg a] xs `withArgsFrom` args = zipWith (\x arg -> fmap (const x) arg) xs args -withNamedArgsFrom :: [a] -> [NamedArg c b] -> [NamedArg c a]+withNamedArgsFrom :: [a] -> [NamedArg b] -> [NamedArg a] xs `withNamedArgsFrom` args = zipWith (\x -> fmap (x <$)) xs args @@ -514,44 +510,42 @@ -- @Dom@ is used in 'Pi' of internal syntax, in 'Context' and 'Telescope'. -- 'Arg' is used for actual arguments ('Var', 'Con', 'Def' etc.) -- and in 'Abstract' syntax and other situations.-data Dom c e = Dom- { domInfo :: ArgInfo c+data Dom e = Dom+ { domInfo :: ArgInfo , unDom :: e } deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable) -instance Decoration (Dom c) where+instance Decoration Dom where traverseF f (Dom ai a) = Dom ai <$> f a -instance HasRange a => HasRange (Dom c a) where+instance HasRange a => HasRange (Dom a) where getRange = getRange . unDom -instance (KillRange c, KillRange a) => KillRange (Dom c a) where+instance KillRange a => KillRange (Dom a) where killRange (Dom info a) = killRange2 Dom info a -instance (Show a, Show c) => Show (Dom c a) where+instance Show a => Show (Dom a) where show = show . argFromDom -instance LensHiding (Dom c e) where+instance LensHiding (Dom e) where getHiding = getHiding . domInfo- mapHiding = mapDomInfo . mapHiding+ mapHiding = mapArgInfo . mapHiding -instance LensRelevance (Dom c e) where+instance LensRelevance (Dom e) where getRelevance = getRelevance . domInfo- mapRelevance = mapDomInfo . mapRelevance--mapDomInfo :: (ArgInfo c -> ArgInfo c') -> Dom c a -> Dom c' a-mapDomInfo f arg = arg { domInfo = f $ domInfo arg }+ mapRelevance = mapArgInfo . mapRelevance -domColors :: Dom c a -> [c]-domColors = argInfoColors . domInfo+instance LensArgInfo (Dom e) where+ getArgInfo = domInfo+ mapArgInfo f arg = arg { domInfo = f $ domInfo arg } -argFromDom :: Dom c a -> Arg c a+argFromDom :: Dom a -> Arg a argFromDom (Dom i a) = Arg i a -domFromArg :: Arg c a -> Dom c a+domFromArg :: Arg a -> Dom a domFromArg (Arg i a) = Dom i a -defaultDom :: a -> Dom c a+defaultDom :: a -> Dom a defaultDom = Dom defaultArgInfo ---------------------------------------------------------------------------@@ -590,19 +584,22 @@ show (Named Nothing x) = show x show (Named (Just n) x) = rawNameToString (rangedThing n) ++ " = " ++ show x +instance (NFData name, NFData a) => NFData (Named name a) where+ rnf (Named a b) = rnf a `seq` rnf b+ -- | Only 'Hidden' arguments can have names.-type NamedArg c a = Arg c (Named_ a)+type NamedArg a = Arg (Named_ a) -- | Get the content of a 'NamedArg'.-namedArg :: NamedArg c a -> a+namedArg :: NamedArg a -> a namedArg = namedThing . unArg -defaultNamedArg :: a -> NamedArg c a+defaultNamedArg :: a -> NamedArg a defaultNamedArg = defaultArg . unnamed -- | The functor instance for 'NamedArg' would be ambiguous, -- so we give it another name here.-updateNamedArg :: (a -> b) -> NamedArg c a -> NamedArg c b+updateNamedArg :: (a -> b) -> NamedArg a -> NamedArg b updateNamedArg = fmap . fmap ---------------------------------------------------------------------------@@ -638,6 +635,11 @@ instance Decoration Ranged where traverseF f (Ranged r x) = Ranged r <$> f x +-- | Ranges are not forced.++instance NFData a => NFData (Ranged a) where+ rnf (Ranged _ a) = rnf a+ --------------------------------------------------------------------------- -- * Raw names (before parsing into name parts). ---------------------------------------------------------------------------@@ -691,12 +693,33 @@ data IsInstance = InstanceDef | NotInstanceDef deriving (Typeable, Show, Eq, Ord) +instance KillRange IsInstance where+ killRange = id++instance HasRange IsInstance where+ getRange _ = noRange++instance NFData IsInstance where+ rnf InstanceDef = ()+ rnf NotInstanceDef = ()++-- | Is this a macro definition?+data IsMacro = MacroDef | NotMacroDef+ deriving (Typeable, Show, Eq, Ord)++instance KillRange IsMacro where killRange = id+instance HasRange IsMacro where getRange _ = noRange+ type Nat = Int type Arity = Nat +---------------------------------------------------------------------------+-- * NameId+---------------------------------------------------------------------------+ -- | The unique identifier of a name. Second argument is the top-level module -- identifier.-data NameId = NameId Integer Integer+data NameId = NameId !Integer !Integer deriving (Eq, Ord, Typeable, Generic) instance KillRange NameId where@@ -711,6 +734,9 @@ toEnum n = __IMPOSSIBLE__ -- should not be used fromEnum (NameId n _) = fromIntegral n +instance NFData NameId where+ rnf (NameId _ _) = ()+ instance Hashable NameId where {-# INLINE hashWithSalt #-} hashWithSalt salt (NameId n m) = hashWithSalt salt (n, m)@@ -720,6 +746,10 @@ instance CoArbitrary NameId +---------------------------------------------------------------------------+-- * Meta variables+---------------------------------------------------------------------------+ -- | A meta variable identifier is just a natural number. -- newtype MetaId = MetaId { metaId :: Nat }@@ -733,8 +763,38 @@ showsPrec p (MetaId n) = showParen (p > 0) $ showString "MetaId " . shows n +instance NFData MetaId where+ rnf (MetaId x) = rnf x+ newtype Constr a = Constr a +data Placeholder+ = Beginning+ -- ^ @_foo@.+ | Middle+ -- ^ @foo_bar@.+ | End+ -- ^ @foo_@.+ deriving (Show, Eq, Ord)++-- | Placeholders are used to represent the underscores in a section.+data MaybePlaceholder e+ = Placeholder !Placeholder+ | NoPlaceholder e+ deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable, Show)++instance HasRange a => HasRange (MaybePlaceholder a) where+ getRange Placeholder{} = noRange+ getRange (NoPlaceholder e) = getRange e++instance KillRange a => KillRange (MaybePlaceholder a) where+ killRange p@Placeholder{} = p+ killRange (NoPlaceholder e) = killRange1 NoPlaceholder e++instance NFData a => NFData (MaybePlaceholder a) where+ rnf (Placeholder _) = ()+ rnf (NoPlaceholder a) = rnf a+ --------------------------------------------------------------------------- -- * Interaction meta variables ---------------------------------------------------------------------------@@ -748,10 +808,119 @@ instance KillRange InteractionId where killRange = id -----------------------------------------------------------------------------+-- * Import directive+-----------------------------------------------------------------------------++-- | The things you are allowed to say when you shuffle names between name+-- spaces (i.e. in @import@, @namespace@, or @open@ declarations).+data ImportDirective' a b = ImportDirective+ { importDirRange :: Range+ , using :: Using' a b+ , hiding :: [ImportedName' a b]+ , impRenaming :: [Renaming' a b]+ , publicOpen :: Bool -- ^ Only for @open@. Exports the opened names from the current module.+ }+ deriving (Typeable, Eq)++data Using' a b = UseEverything | Using [ImportedName' a b]+ deriving (Typeable, Eq)++instance Monoid (Using' a b) where+ mempty = UseEverything+ mappend UseEverything u = u+ mappend u UseEverything = u+ mappend (Using xs) (Using ys) = Using (xs ++ ys)++-- | Default is directive is @private@ (use everything, but do not export).+defaultImportDir :: ImportDirective' a b+defaultImportDir = ImportDirective noRange UseEverything [] [] False++isDefaultImportDir :: ImportDirective' a b -> Bool+isDefaultImportDir (ImportDirective _ UseEverything [] [] False) = True+isDefaultImportDir _ = False++-- | An imported name can be a module or a defined name+data ImportedName' a b+ = ImportedModule b+ | ImportedName a+ deriving (Typeable, Eq, Ord)++setImportedName :: ImportedName' a a -> a -> ImportedName' a a+setImportedName (ImportedName x) y = ImportedName y+setImportedName (ImportedModule x) y = ImportedModule y++instance (Show a, Show b) => Show (ImportedName' a b) where+ show (ImportedModule x) = "module " ++ show x+ show (ImportedName x) = show x++data Renaming' a b = Renaming+ { renFrom :: ImportedName' a b+ -- ^ Rename from this name.+ , renTo :: ImportedName' a b+ -- ^ To this one. Must be same kind as 'renFrom'.+ , renToRange :: Range+ -- ^ The range of the \"to\" keyword. Retained for highlighting purposes.+ }+ deriving (Typeable, Eq)++-- ** HasRange instances++instance (HasRange a, HasRange b) => HasRange (ImportDirective' a b) where+ getRange = importDirRange++instance (HasRange a, HasRange b) => HasRange (Using' a b) where+ getRange (Using xs) = getRange xs+ getRange UseEverything = noRange++instance (HasRange a, HasRange b) => HasRange (Renaming' a b) where+ getRange r = getRange (renFrom r, renTo r)++instance (HasRange a, HasRange b) => HasRange (ImportedName' a b) where+ getRange (ImportedName x) = getRange x+ getRange (ImportedModule x) = getRange x++-- ** KillRange instances++instance (KillRange a, KillRange b) => KillRange (ImportDirective' a b) where+ killRange (ImportDirective _ u h r p) =+ killRange3 (\u h r -> ImportDirective noRange u h r p) u h r++instance (KillRange a, KillRange b) => KillRange (Using' a b) where+ killRange (Using i) = killRange1 Using i+ killRange UseEverything = UseEverything++instance (KillRange a, KillRange b) => KillRange (Renaming' a b) where+ killRange (Renaming i n _) = killRange2 (\i n -> Renaming i n noRange) i n++instance (KillRange a, KillRange b) => KillRange (ImportedName' a b) where+ killRange (ImportedModule n) = killRange1 ImportedModule n+ killRange (ImportedName n) = killRange1 ImportedName n++-- ** NFData instances++-- | Ranges are not forced.++instance (NFData a, NFData b) => NFData (ImportDirective' a b) where+ rnf (ImportDirective _ a b c _) = rnf a `seq` rnf b `seq` rnf c++instance (NFData a, NFData b) => NFData (Using' a b) where+ rnf UseEverything = ()+ rnf (Using a) = rnf a++-- | Ranges are not forced.++instance (NFData a, NFData b) => NFData (Renaming' a b) where+ rnf (Renaming a b _) = rnf a `seq` rnf b++instance (NFData a, NFData b) => NFData (ImportedName' a b) where+ rnf (ImportedModule a) = rnf a+ rnf (ImportedName a) = rnf a++----------------------------------------------------------------------------- -- * Termination ----------------------------------------------------------------------------- --- | Termination check? (Default = True).+-- | Termination check? (Default = TerminationCheck). data TerminationCheck m = TerminationCheck -- ^ Run the termination checker.@@ -761,10 +930,24 @@ -- ^ Treat as non-terminating. | Terminating -- ^ Treat as terminating (unsafe). Same effect as 'NoTerminationCheck'.- | TerminationMeasure !Range m+ | TerminationMeasure Range m -- ^ Skip termination checking but use measure instead. deriving (Typeable, Show, Eq, Functor) instance KillRange m => KillRange (TerminationCheck m) where killRange (TerminationMeasure _ m) = TerminationMeasure noRange (killRange m) killRange t = t++instance NFData a => NFData (TerminationCheck a) where+ rnf TerminationCheck = ()+ rnf NoTerminationCheck = ()+ rnf NonTerminating = ()+ rnf Terminating = ()+ rnf (TerminationMeasure _ a) = rnf a++-----------------------------------------------------------------------------+-- * Positivity+-----------------------------------------------------------------------------++-- | Positivity check? (Default = True).+type PositivityCheck = Bool
src/full/Agda/Syntax/Concrete.hs view
@@ -23,7 +23,10 @@ , TypedBindings'(..) , TypedBinding , TypedBinding'(..)- , ColoredTypedBinding(..)+ , RecordAssignment+ , RecordAssignments+ , FieldAssignment, FieldAssignment'(..), nameFieldA, exprFieldA+ , ModuleAssignment(..) , BoundName(..), mkBoundName_, mkBoundName , Telescope -- (..) , countTelVars@@ -32,40 +35,36 @@ , ModuleApplication(..) , TypeSignature , TypeSignatureOrInstanceBlock- , Constructor- , ImportDirective(..), UsingOrHiding(..), ImportedName(..)- , Renaming(..), AsName(..)- , defaultImportDir+ , ImportDirective, Using, ImportedName+ , Renaming+ , AsName(..) , OpenShortHand(..), RewriteEqn, WithExpr , LHS(..), Pattern(..), LHSCore(..)- , RHS, RHS'(..), WhereClause, WhereClause'(..)+ , RHS, RHS'(..), WhereClause, WhereClause'(..), ExprWhere(..) , Pragma(..) , Module , ThingWithFixity(..) , topLevelModuleName+ , spanAllowedBeforeModule -- * Pattern tools , patternNames, patternQNames -- * Lenses , mapLhsOriginalPattern- -- * Concrete instances- , Color- , Arg- -- , Dom- , NamedArg- , ArgInfo ) where +import Prelude hiding (null)+ import Control.DeepSeq import Data.Typeable (Typeable) import Data.Foldable (Foldable) import Data.Traversable (Traversable)-import Data.List+import Data.List hiding (null) import Data.Set (Set)+import Data.Monoid import Agda.Syntax.Position-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Fixity import Agda.Syntax.Notation import Agda.Syntax.Literal@@ -74,18 +73,13 @@ import qualified Agda.Syntax.Abstract.Name as A import Agda.Utils.Lens+import Agda.Utils.Null #include "undefined.h" import Agda.Utils.Impossible -type Color = Expr-type Arg a = Common.Arg Color a--- type Dom a = Common.Dom Color a-type NamedArg a = Common.NamedArg Color a-type ArgInfo = Common.ArgInfo Color- data OpApp e- = SyntaxBindingLambda !Range [LamBinding] e+ = SyntaxBindingLambda Range [LamBinding] e -- ^ An abstraction inside a special syntax declaration -- (see Issue 358 why we introduce this). | Ordinary e@@ -95,77 +89,104 @@ fromOrdinary d (Ordinary e) = e fromOrdinary d _ = d +data FieldAssignment' a = FieldAssignment { _nameFieldA :: Name, _exprFieldA :: a }+ deriving (Typeable, Functor, Foldable, Traversable, Show, Eq)++type FieldAssignment = FieldAssignment' Expr++data ModuleAssignment = ModuleAssignment+ { _qnameModA :: QName+ , _exprModA :: [Expr]+ , _importDirModA :: ImportDirective+ }+ deriving (Typeable)+type RecordAssignment = Either FieldAssignment ModuleAssignment+type RecordAssignments = [RecordAssignment]++nameFieldA :: Lens' Name (FieldAssignment' a)+nameFieldA f r = f (_nameFieldA r) <&> \x -> r { _nameFieldA = x }++exprFieldA :: Lens' a (FieldAssignment' a)+exprFieldA f r = f (_exprFieldA r) <&> \x -> r { _exprFieldA = x }++qnameModA :: Lens' QName ModuleAssignment+qnameModA f r = f (_qnameModA r) <&> \x -> r { _qnameModA = x }++exprModA :: Lens' [Expr] ModuleAssignment+exprModA f r = f (_exprModA r) <&> \x -> r { _exprModA = x }++importDirModA :: Lens' ImportDirective ModuleAssignment+importDirModA f r = f (_importDirModA r) <&> \x -> r { _importDirModA = x }+ -- | Concrete expressions. Should represent exactly what the user wrote. data Expr = Ident QName -- ^ ex: @x@ | Lit Literal -- ^ ex: @1@ or @\"foo\"@- | QuestionMark !Range (Maybe Nat) -- ^ ex: @?@ or @{! ... !}@- | Underscore !Range (Maybe String) -- ^ ex: @_@ or @_A_5@- | RawApp !Range [Expr] -- ^ before parsing operators- | App !Range Expr (NamedArg Expr) -- ^ ex: @e e@, @e {e}@, or @e {x = e}@- | OpApp !Range QName (Set A.Name)- [NamedArg (OpApp Expr)] -- ^ ex: @e + e@+ | QuestionMark Range (Maybe Nat) -- ^ ex: @?@ or @{! ... !}@+ | Underscore Range (Maybe String) -- ^ ex: @_@ or @_A_5@+ | RawApp Range [Expr] -- ^ before parsing operators+ | App Range Expr (NamedArg Expr) -- ^ ex: @e e@, @e {e}@, or @e {x = e}@+ | OpApp Range QName (Set A.Name)+ [NamedArg+ (MaybePlaceholder (OpApp Expr))] -- ^ ex: @e + e@ -- The 'QName' is -- possibly ambiguous, -- but it must -- correspond to one of -- the names in the -- set.- | WithApp !Range Expr [Expr] -- ^ ex: @e | e1 | .. | en@- | HiddenArg !Range (Named_ Expr) -- ^ ex: @{e}@ or @{x=e}@- | InstanceArg !Range (Named_ Expr) -- ^ ex: @{{e}}@ or @{{x=e}}@- | Lam !Range [LamBinding] Expr -- ^ ex: @\\x {y} -> e@ or @\\(x:A){y:B} -> e@- | AbsurdLam !Range Hiding -- ^ ex: @\\ ()@- | ExtendedLam !Range [(LHS,RHS,WhereClause)] -- ^ ex: @\\ { p11 .. p1a -> e1 ; .. ; pn1 .. pnz -> en }@- | Fun !Range Expr Expr -- ^ ex: @e -> e@ or @.e -> e@ (NYI: @{e} -> e@)+ | WithApp Range Expr [Expr] -- ^ ex: @e | e1 | .. | en@+ | HiddenArg Range (Named_ Expr) -- ^ ex: @{e}@ or @{x=e}@+ | InstanceArg Range (Named_ Expr) -- ^ ex: @{{e}}@ or @{{x=e}}@+ | Lam Range [LamBinding] Expr -- ^ ex: @\\x {y} -> e@ or @\\(x:A){y:B} -> e@+ | AbsurdLam Range Hiding -- ^ ex: @\\ ()@+ | ExtendedLam Range [(LHS,RHS,WhereClause,Bool)] -- ^ ex: @\\ { p11 .. p1a -> e1 ; .. ; pn1 .. pnz -> en }@+ | Fun Range Expr Expr -- ^ ex: @e -> e@ or @.e -> e@ (NYI: @{e} -> e@) | Pi Telescope Expr -- ^ ex: @(xs:e) -> e@ or @{xs:e} -> e@- | Set !Range -- ^ ex: @Set@- | Prop !Range -- ^ ex: @Prop@- | SetN !Range Integer -- ^ ex: @Set0, Set1, ..@- | Rec !Range [(Name, Expr)] -- ^ ex: @record {x = a; y = b}@- | RecUpdate !Range Expr [(Name, Expr)] -- ^ ex: @record e {x = a; y = b}@- | Let !Range [Declaration] Expr -- ^ ex: @let Ds in e@- | Paren !Range Expr -- ^ ex: @(e)@- | Absurd !Range -- ^ ex: @()@ or @{}@, only in patterns- | As !Range Name Expr -- ^ ex: @x\@p@, only in patterns- | Dot !Range Expr -- ^ ex: @.p@, only in patterns+ | Set Range -- ^ ex: @Set@+ | Prop Range -- ^ ex: @Prop@+ | SetN Range Integer -- ^ ex: @Set0, Set1, ..@+ | Rec Range RecordAssignments -- ^ ex: @record {x = a; y = b}@, or @record { x = a; M1; M2 }@+ | RecUpdate Range Expr [FieldAssignment] -- ^ ex: @record e {x = a; y = b}@+ | Let Range [Declaration] Expr -- ^ ex: @let Ds in e@+ | Paren Range Expr -- ^ ex: @(e)@+ | Absurd Range -- ^ ex: @()@ or @{}@, only in patterns+ | As Range Name Expr -- ^ ex: @x\@p@, only in patterns+ | Dot Range Expr -- ^ ex: @.p@, only in patterns | ETel Telescope -- ^ only used for printing telescopes- | QuoteGoal !Range Name Expr -- ^ ex: @quoteGoal x in e@- | QuoteContext !Range Name Expr -- ^ ex: @quoteContext ctx in e@- | Quote !Range -- ^ ex: @quote@, should be applied to a name- | QuoteTerm !Range -- ^ ex: @quoteTerm@, should be applied to a term- | Tactic !Range Expr [Expr] -- ^ @tactic solve | subgoal1 | .. | subgoalN@- | Unquote !Range -- ^ ex: @unquote@, should be applied to a term of type @Term@+ | QuoteGoal Range Name Expr -- ^ ex: @quoteGoal x in e@+ | QuoteContext Range -- ^ ex: @quoteContext@+ | Quote Range -- ^ ex: @quote@, should be applied to a name+ | QuoteTerm Range -- ^ ex: @quoteTerm@, should be applied to a term+ | Tactic Range Expr [Expr] -- ^ @tactic solve | subgoal1 | .. | subgoalN@+ | Unquote Range -- ^ ex: @unquote@, should be applied to a term of type @Term@ | DontCare Expr -- ^ to print irrelevant things- | Equal !Range Expr Expr -- ^ ex: @a = b@, used internally in the parser+ | Equal Range Expr Expr -- ^ ex: @a = b@, used internally in the parser deriving (Typeable) -instance NFData Expr where rnf x = seq x ()- -- | Concrete patterns. No literals in patterns at the moment. data Pattern- = IdentP QName -- ^ @c@ or @x@- | QuoteP !Range -- ^ @quote@- | AppP Pattern (NamedArg Pattern) -- ^ @p p'@ or @p {x = p'}@- | RawAppP !Range [Pattern] -- ^ @p1..pn@ before parsing operators- | OpAppP !Range QName (Set A.Name)- [NamedArg Pattern] -- ^ eg: @p => p'@ for operator @_=>_@- -- The 'QName' is possibly- -- ambiguous, but it must- -- correspond to one of- -- the names in the set.- | HiddenP !Range (Named_ Pattern) -- ^ @{p}@ or @{x = p}@- | InstanceP !Range (Named_ Pattern) -- ^ @{{p}}@ or @{{x = p}}@- | ParenP !Range Pattern -- ^ @(p)@- | WildP !Range -- ^ @_@- | AbsurdP !Range -- ^ @()@- | AsP !Range Name Pattern -- ^ @x\@p@ unused- | DotP !Range Expr -- ^ @.e@- | LitP Literal -- ^ @0@, @1@, etc.+ = IdentP QName -- ^ @c@ or @x@+ | QuoteP Range -- ^ @quote@+ | AppP Pattern (NamedArg Pattern) -- ^ @p p'@ or @p {x = p'}@+ | RawAppP Range [Pattern] -- ^ @p1..pn@ before parsing operators+ | OpAppP Range QName (Set A.Name)+ [NamedArg Pattern] -- ^ eg: @p => p'@ for operator @_=>_@+ -- The 'QName' is possibly+ -- ambiguous, but it must+ -- correspond to one of+ -- the names in the set.+ | HiddenP Range (Named_ Pattern) -- ^ @{p}@ or @{x = p}@+ | InstanceP Range (Named_ Pattern) -- ^ @{{p}}@ or @{{x = p}}@+ | ParenP Range Pattern -- ^ @(p)@+ | WildP Range -- ^ @_@+ | AbsurdP Range -- ^ @()@+ | AsP Range Name Pattern -- ^ @x\@p@ unused+ | DotP Range Expr -- ^ @.e@+ | LitP Literal -- ^ @0@, @1@, etc.+ | RecP Range [FieldAssignment' Pattern] -- ^ @record {x = p; y = q}@ deriving (Typeable) -instance NFData Pattern where rnf x = seq x ()- -- | A lambda binding is either domain free or typed. type LamBinding = LamBinding' TypedBindings data LamBinding' a@@ -182,7 +203,7 @@ type TypedBindings = TypedBindings' TypedBinding -data TypedBindings' a = TypedBindings !Range (Arg a)+data TypedBindings' a = TypedBindings Range (Arg a) -- ^ . @(xs : e)@ or @{xs : e}@ or something like @(x {y} _ : e)@. deriving (Typeable, Functor, Foldable, Traversable) @@ -194,7 +215,7 @@ deriving (Typeable) mkBoundName_ :: Name -> BoundName-mkBoundName_ x = mkBoundName x defaultFixity'+mkBoundName_ x = mkBoundName x noFixity' mkBoundName :: Name -> Fixity' -> BoundName mkBoundName x f = BName x x f@@ -204,13 +225,10 @@ type TypedBinding = TypedBinding' Expr data TypedBinding' e- = TBind !Range [WithHiding BoundName] e -- ^ Binding @(x1 ... xn : A)@.- | TLet !Range [Declaration] -- ^ Let binding @(let Ds)@ or @(open M args)@.+ = TBind Range [WithHiding BoundName] e -- ^ Binding @(x1 ... xn : A)@.+ | TLet Range [Declaration] -- ^ Let binding @(let Ds)@ or @(open M args)@. deriving (Typeable, Functor, Foldable, Traversable) --- | Color a TypeBinding. Used by Pretty.-data ColoredTypedBinding = WithColors [Color] TypedBinding- -- | A telescope is a sequence of typed bindings. Bound variables are in scope -- in later types. type Telescope = [TypedBindings]@@ -246,7 +264,7 @@ -- | Processed (scope-checked) intermediate form of the core @f ps@ of 'LHS'. -- Corresponds to 'lhsOriginalPattern'. data LHSCore- = LHSHead { lhsDefName :: Name -- ^ @f@+ = LHSHead { lhsDefName :: QName -- ^ @f@ , lhsPats :: [NamedArg Pattern] -- ^ @ps@ } | LHSProj { lhsDestructor :: QName -- ^ record projection identifier@@ -256,8 +274,6 @@ } deriving (Typeable) -instance NFData LHSCore where rnf x = seq x ()- type RHS = RHS' Expr data RHS' e = AbsurdRHS -- ^ No right hand side because of absurd match.@@ -272,45 +288,18 @@ | SomeWhere Name decls -- ^ Named where: @module M where@. deriving (Typeable, Functor, Foldable, Traversable) +-- | An expression followed by a where clause.+-- Currently only used to give better a better error message in interaction.+data ExprWhere = ExprWhere Expr WhereClause -- | The things you are allowed to say when you shuffle names between name -- spaces (i.e. in @import@, @namespace@, or @open@ declarations).-data ImportDirective = ImportDirective- { importDirRange :: !Range- , usingOrHiding :: UsingOrHiding- , renaming :: [Renaming]- , publicOpen :: Bool -- ^ Only for @open@. Exports the opened names from the current module.- }- deriving (Typeable)---- | Default is directive is @private@ (use everything, but do not export).-defaultImportDir :: ImportDirective-defaultImportDir = ImportDirective noRange (Hiding []) [] False--data UsingOrHiding- = Hiding [ImportedName]- | Using [ImportedName]- deriving (Typeable)---- | An imported name can be a module or a defined name-data ImportedName- = ImportedModule { importedName :: Name }- | ImportedName { importedName :: Name }- deriving (Typeable, Eq, Ord)--instance Show ImportedName where- show (ImportedModule x) = "module " ++ show x- show (ImportedName x) = show x+type ImportDirective = ImportDirective' Name Name+type Using = Using' Name Name+type Renaming = Renaming' Name Name -data Renaming = Renaming- { renFrom :: ImportedName- -- ^ Rename from this name.- , renTo :: Name- -- ^ To this one.- , renToRange :: Range- -- ^ The range of the \"to\" keyword. Retained for highlighting purposes.- }- deriving (Typeable)+-- | An imported name can be a module or a defined name.+type ImportedName = ImportedName' Name Name data AsName = AsName { asName :: Name@@ -330,9 +319,6 @@ -- | Just type signatures or instance blocks. type TypeSignatureOrInstanceBlock = Declaration --- | A data constructor declaration is just a type signature.-type Constructor = TypeSignature- {-| The representation type of a declaration. The comments indicate which type in the intended family the constructor targets. -}@@ -340,27 +326,29 @@ data Declaration = TypeSig ArgInfo Name Expr -- ^ Axioms and functions can be irrelevant. (Hiding should be NotHidden)- | Field Name (Arg Expr) -- ^ Record field, can be hidden and/or irrelevant.- | FunClause LHS RHS WhereClause- | DataSig !Range Induction Name [LamBinding] Expr -- ^ lone data signature in mutual block- | Data !Range Induction Name [LamBinding] (Maybe Expr) [Constructor]- | RecordSig !Range Name [LamBinding] Expr -- ^ lone record signature in mutual block- | Record !Range Name (Maybe (Ranged Induction)) (Maybe Name) [LamBinding] (Maybe Expr) [Declaration]+ | Field IsInstance Name (Arg Expr) -- ^ Record field, can be hidden and/or irrelevant.+ | FunClause LHS RHS WhereClause Bool+ | DataSig Range Induction Name [LamBinding] Expr -- ^ lone data signature in mutual block+ | Data Range Induction Name [LamBinding] (Maybe Expr) [TypeSignatureOrInstanceBlock]+ | RecordSig Range Name [LamBinding] Expr -- ^ lone record signature in mutual block+ | Record Range Name (Maybe (Ranged Induction)) (Maybe Bool) (Maybe (Name, IsInstance)) [LamBinding] (Maybe Expr) [Declaration] -- ^ The optional name is a name for the record constructor. | Infix Fixity [Name] | Syntax Name Notation -- ^ notation declaration for a name- | PatternSyn !Range Name [Arg Name] Pattern- | Mutual !Range [Declaration]- | Abstract !Range [Declaration]- | Private !Range [Declaration]- | InstanceB !Range [Declaration]- | Postulate !Range [TypeSignatureOrInstanceBlock]- | Primitive !Range [TypeSignature]- | Open !Range QName ImportDirective- | Import !Range QName (Maybe AsName) OpenShortHand ImportDirective- | ModuleMacro !Range Name ModuleApplication OpenShortHand ImportDirective- | Module !Range QName [TypedBindings] [Declaration]- | UnquoteDecl !Range Name Expr+ | PatternSyn Range Name [Arg Name] Pattern+ | Mutual Range [Declaration]+ | Abstract Range [Declaration]+ | Private Range [Declaration]+ | InstanceB Range [Declaration]+ | Macro Range [Declaration]+ | Postulate Range [TypeSignatureOrInstanceBlock]+ | Primitive Range [TypeSignature]+ | Open Range QName ImportDirective+ | Import Range QName (Maybe AsName) !OpenShortHand ImportDirective+ | ModuleMacro Range Name ModuleApplication !OpenShortHand ImportDirective+ | Module Range QName [TypedBindings] [Declaration]+ | UnquoteDecl Range [Name] Expr+ | UnquoteDef Range [Name] Expr | Pragma Pragma deriving (Typeable) @@ -377,21 +365,31 @@ -- Pragmas ---------------------------------------------------------------- data Pragma- = OptionsPragma !Range [String]- | BuiltinPragma !Range String Expr- | RewritePragma !Range QName- | CompiledDataPragma !Range QName String [String]- | CompiledTypePragma !Range QName String- | CompiledPragma !Range QName String- | CompiledExportPragma !Range QName String- | CompiledEpicPragma !Range QName String- | CompiledJSPragma !Range QName String- | StaticPragma !Range QName- | ImportPragma !Range String+ = OptionsPragma Range [String]+ | BuiltinPragma Range String Expr+ | RewritePragma Range QName+ | CompiledDataPragma Range QName String [String]+ | CompiledDeclareDataPragma Range QName String+ | CompiledTypePragma Range QName String+ | CompiledPragma Range QName String+ | CompiledExportPragma Range QName String+ | CompiledEpicPragma Range QName String+ | CompiledJSPragma Range QName String+ | CompiledUHCPragma Range QName String+ | CompiledDataUHCPragma Range QName String [String]+ | HaskellCodePragma Range String+ | NoSmashingPragma Range QName+ | StaticPragma Range QName+ | InlinePragma Range QName+ | ImportPragma Range String -- ^ Invariant: The string must be a valid Haskell module name.- | ImpossiblePragma !Range- | EtaPragma !Range QName- | TerminationCheckPragma !Range (TerminationCheck Name)+ | ImportUHCPragma Range String+ -- ^ same as above, but for the UHC backend+ | ImpossiblePragma Range+ | TerminationCheckPragma Range (TerminationCheck Name)+ | CatchallPragma Range+ | DisplayPragma Range Pattern Expr+ | NoPositivityCheckPragma Range deriving (Typeable) ---------------------------------------------------------------------------@@ -403,13 +401,30 @@ -- | Computes the top-level module name. -- -- Precondition: The 'Module' has to be well-formed.+-- This means that there are only allowed declarations before the+-- first module declaration, typically import declarations.+-- See 'spanAllowedBeforeModule'. topLevelModuleName :: Module -> TopLevelModuleName topLevelModuleName (_, []) = __IMPOSSIBLE__-topLevelModuleName (_, ds) = case last ds of- Module _ n _ _ -> toTopLevelModuleName n- _ -> __IMPOSSIBLE__+topLevelModuleName (_, ds) = case spanAllowedBeforeModule ds of+ (_, Module _ n _ _ : _) -> toTopLevelModuleName n+ _ -> __IMPOSSIBLE__ +-- | Splits off allowed (= import) declarations before the first+-- non-allowed declaration.+-- After successful parsing, the first non-allowed declaration+-- should be a module declaration.+spanAllowedBeforeModule :: [Declaration] -> ([Declaration], [Declaration])+spanAllowedBeforeModule = span isAllowedBeforeModule+ where+ isAllowedBeforeModule (Pragma OptionsPragma{}) = True+ isAllowedBeforeModule (Private _ ds) = all isAllowedBeforeModule ds+ isAllowedBeforeModule Import{} = True+ isAllowedBeforeModule ModuleMacro{} = True+ isAllowedBeforeModule Open{} = True+ isAllowedBeforeModule _ = False+ {-------------------------------------------------------------------------- Lenses --------------------------------------------------------------------------}@@ -432,9 +447,9 @@ vApp (AppView e es) arg = AppView e (es ++ [arg]) appView (RawApp _ (e:es)) = AppView e $ map arg es where- arg (HiddenArg _ e) = noColorArg Hidden Relevant e- arg (InstanceArg _ e) = noColorArg Instance Relevant e- arg e = noColorArg NotHidden Relevant (unnamed e)+ arg (HiddenArg _ e) = setHiding Hidden $ defaultArg e+ arg (InstanceArg _ e) = setHiding Instance $ defaultArg e+ arg e = defaultArg (unnamed e) appView e = AppView e [] {--------------------------------------------------------------------------@@ -458,6 +473,7 @@ LitP _ -> [] QuoteP _ -> [] InstanceP _ (namedPat) -> patternQNames (namedThing namedPat)+ RecP _ fs -> concatMap (patternQNames . (^. exprFieldA)) fs -- | Get all the identifiers in a pattern in left-to-right order. patternNames :: Pattern -> [Name]@@ -467,6 +483,18 @@ Instances --------------------------------------------------------------------------} +-- Null+------------------------------------------------------------------------++-- | A 'WhereClause' is 'null' when the @where@ keyword is absent.+-- An empty list of declarations does not count as 'null' here.++instance Null (WhereClause' a) where+ empty = NoWhere+ null NoWhere = True+ null AnyWhere{} = False+ null SomeWhere{} = False+ -- Lenses ------------------------------------------------------------------------ @@ -522,7 +550,7 @@ RecUpdate r _ _ -> r ETel tel -> getRange tel QuoteGoal r _ _ -> r- QuoteContext r _ _ -> r+ QuoteContext r -> r Quote r -> r QuoteTerm r -> r Unquote r -> r@@ -557,20 +585,27 @@ getRange (SectionApp r _ _) = r getRange (RecordModuleIFS r _) = r +instance HasRange a => HasRange (FieldAssignment' a) where+ getRange (FieldAssignment a b) = fuseRange a b++instance HasRange ModuleAssignment where+ getRange (ModuleAssignment a b c) = fuseRange a b `fuseRange` c+ instance HasRange Declaration where getRange (TypeSig _ x t) = fuseRange x t- getRange (Field x t) = fuseRange x t- getRange (FunClause lhs rhs wh) = fuseRange lhs rhs `fuseRange` wh+ getRange (Field _ x t) = fuseRange x t+ getRange (FunClause lhs rhs wh _) = fuseRange lhs rhs `fuseRange` wh getRange (DataSig r _ _ _ _) = r getRange (Data r _ _ _ _ _) = r getRange (RecordSig r _ _ _) = r- getRange (Record r _ _ _ _ _ _) = r+ getRange (Record r _ _ _ _ _ _ _) = r getRange (Mutual r _) = r getRange (Abstract r _) = r getRange (Open r _ _) = r getRange (ModuleMacro r _ _ _ _) = r getRange (Import r _ _ _ _) = r getRange (InstanceB r _) = r+ getRange (Macro r _) = r getRange (Private r _) = r getRange (Postulate r _) = r getRange (Primitive r _) = r@@ -579,6 +614,7 @@ getRange (Syntax n _) = getRange n getRange (PatternSyn r _ _ _) = r getRange (UnquoteDecl r _ _) = r+ getRange (UnquoteDef r _ _) = r getRange (Pragma p) = getRange p instance HasRange LHS where@@ -594,34 +630,29 @@ getRange (RHS e) = getRange e instance HasRange Pragma where- getRange (OptionsPragma r _) = r- getRange (BuiltinPragma r _ _) = r- getRange (RewritePragma r _) = r- getRange (CompiledDataPragma r _ _ _) = r- getRange (CompiledTypePragma r _ _) = r- getRange (CompiledPragma r _ _) = r- getRange (CompiledExportPragma r _ _) = r- getRange (CompiledEpicPragma r _ _) = r- getRange (CompiledJSPragma r _ _) = r- getRange (StaticPragma r _) = r- getRange (ImportPragma r _) = r- getRange (ImpossiblePragma r) = r- getRange (EtaPragma r _) = r- getRange (TerminationCheckPragma r _) = r--instance HasRange UsingOrHiding where- getRange (Using xs) = getRange xs- getRange (Hiding xs) = getRange xs--instance HasRange ImportDirective where- getRange = importDirRange--instance HasRange ImportedName where- getRange (ImportedName x) = getRange x- getRange (ImportedModule x) = getRange x--instance HasRange Renaming where- getRange r = getRange (renFrom r, renTo r)+ getRange (OptionsPragma r _) = r+ getRange (BuiltinPragma r _ _) = r+ getRange (RewritePragma r _) = r+ getRange (CompiledDataPragma r _ _ _) = r+ getRange (CompiledDeclareDataPragma r _ _) = r+ getRange (CompiledTypePragma r _ _) = r+ getRange (CompiledPragma r _ _) = r+ getRange (CompiledExportPragma r _ _) = r+ getRange (CompiledEpicPragma r _ _) = r+ getRange (CompiledJSPragma r _ _) = r+ getRange (CompiledUHCPragma r _ _) = r+ getRange (CompiledDataUHCPragma r _ _ _) = r+ getRange (HaskellCodePragma r _) = r+ getRange (NoSmashingPragma r _) = r+ getRange (StaticPragma r _) = r+ getRange (InlinePragma r _) = r+ getRange (ImportPragma r _) = r+ getRange (ImportUHCPragma r _) = r+ getRange (ImpossiblePragma r) = r+ getRange (TerminationCheckPragma r _) = r+ getRange (CatchallPragma r) = r+ getRange (DisplayPragma r _ _) = r+ getRange (NoPositivityCheckPragma r) = r instance HasRange AsName where getRange a = getRange (asRange a, asName a)@@ -640,6 +671,7 @@ getRange (HiddenP r _) = r getRange (InstanceP r _) = r getRange (DotP r _) = r+ getRange (RecP r _) = r -- SetRange instances ------------------------------------------------------------------------@@ -661,10 +693,17 @@ setRange r (HiddenP _ p) = HiddenP r p setRange r (InstanceP _ p) = InstanceP r p setRange r (DotP _ e) = DotP r e+ setRange r (RecP _ fs) = RecP r fs -- KillRange instances ------------------------------------------------------------------------ +instance KillRange a => KillRange (FieldAssignment' a) where+ killRange (FieldAssignment a b) = killRange2 FieldAssignment a b++instance KillRange ModuleAssignment where+ killRange (ModuleAssignment a b c) = killRange3 ModuleAssignment a b c+ instance KillRange AsName where killRange (AsName n _) = killRange1 (flip AsName noRange) n @@ -673,12 +712,12 @@ instance KillRange Declaration where killRange (TypeSig i n e) = killRange2 (TypeSig i) n e- killRange (Field n a) = killRange2 Field n a- killRange (FunClause l r w) = killRange3 FunClause l r w+ killRange (Field i n a) = killRange2 (Field i) n a+ killRange (FunClause l r w ca) = killRange4 FunClause l r w ca killRange (DataSig _ i n l e) = killRange4 (DataSig noRange) i n l e killRange (Data _ i n l e c) = killRange4 (Data noRange i) n l e c killRange (RecordSig _ n l e) = killRange3 (RecordSig noRange) n l e- killRange (Record _ n mi mn k e d)= killRange6 (Record noRange) n mi mn k e d+ killRange (Record _ n mi mb mn k e d)= killRange7 (Record noRange) n mi mb mn k e d killRange (Infix f n) = killRange2 Infix f n killRange (Syntax n no) = killRange1 (\n -> Syntax n no) n killRange (PatternSyn _ n ns p) = killRange3 (PatternSyn noRange) n ns p@@ -686,6 +725,7 @@ killRange (Abstract _ d) = killRange1 (Abstract noRange) d killRange (Private _ d) = killRange1 (Private noRange) d killRange (InstanceB _ d) = killRange1 (InstanceB noRange) d+ killRange (Macro _ d) = killRange1 (Macro noRange) d killRange (Postulate _ t) = killRange1 (Postulate noRange) t killRange (Primitive _ t) = killRange1 (Primitive noRange) t killRange (Open _ q i) = killRange2 (Open noRange) q i@@ -693,6 +733,7 @@ killRange (ModuleMacro _ n m o i) = killRange3 (\n m -> ModuleMacro noRange n m o) n m i killRange (Module _ q t d) = killRange3 (Module noRange) q t d killRange (UnquoteDecl _ x t) = killRange2 (UnquoteDecl noRange) x t+ killRange (UnquoteDef _ x t) = killRange2 (UnquoteDef noRange) x t killRange (Pragma p) = killRange1 Pragma p instance KillRange Expr where@@ -723,7 +764,7 @@ killRange (Dot _ e) = killRange1 (Dot noRange) e killRange (ETel t) = killRange1 ETel t killRange (QuoteGoal _ n e) = killRange2 (QuoteGoal noRange) n e- killRange (QuoteContext _ n e) = killRange2 (QuoteContext noRange) n e+ killRange (QuoteContext _) = QuoteContext noRange killRange (Quote _) = Quote noRange killRange (QuoteTerm _) = QuoteTerm noRange killRange (Unquote _) = Unquote noRange@@ -731,14 +772,6 @@ killRange (DontCare e) = killRange1 DontCare e killRange (Equal _ x y) = Equal noRange x y -instance KillRange ImportDirective where- killRange (ImportDirective _ u r p) =- killRange2 (\u r -> ImportDirective noRange u r p) u r--instance KillRange ImportedName where- killRange (ImportedModule n) = killRange1 ImportedModule n- killRange (ImportedName n) = killRange1 ImportedName n- instance KillRange LamBinding where killRange (DomainFree i b) = killRange2 DomainFree i b killRange (DomainFull t) = killRange1 DomainFull t@@ -769,25 +802,32 @@ killRange (DotP _ e) = killRange1 (DotP noRange) e killRange (LitP l) = killRange1 LitP l killRange (QuoteP _) = QuoteP noRange+ killRange (RecP _ fs) = killRange1 (RecP noRange) fs instance KillRange Pragma where- killRange (OptionsPragma _ s) = OptionsPragma noRange s- killRange (BuiltinPragma _ s e) = killRange1 (BuiltinPragma noRange s) e- killRange (RewritePragma _ q) = killRange1 (RewritePragma noRange) q- killRange (CompiledDataPragma _ q s ss) = killRange1 (\q -> CompiledDataPragma noRange q s ss) q- killRange (CompiledTypePragma _ q s) = killRange1 (\q -> CompiledTypePragma noRange q s) q- killRange (CompiledPragma _ q s) = killRange1 (\q -> CompiledPragma noRange q s) q- killRange (CompiledExportPragma _ q s) = killRange1 (\q -> CompiledExportPragma noRange q s) q- killRange (CompiledEpicPragma _ q s) = killRange1 (\q -> CompiledEpicPragma noRange q s) q- killRange (CompiledJSPragma _ q s) = killRange1 (\q -> CompiledJSPragma noRange q s) q- killRange (StaticPragma _ q) = killRange1 (StaticPragma noRange) q- killRange (ImportPragma _ s) = ImportPragma noRange s- killRange (ImpossiblePragma _) = ImpossiblePragma noRange- killRange (EtaPragma _ q) = killRange1 (EtaPragma noRange) q- killRange (TerminationCheckPragma _ t) = TerminationCheckPragma noRange (killRange t)--instance KillRange Renaming where- killRange (Renaming i n _) = killRange2 (\i n -> Renaming i n noRange) i n+ killRange (OptionsPragma _ s) = OptionsPragma noRange s+ killRange (BuiltinPragma _ s e) = killRange1 (BuiltinPragma noRange s) e+ killRange (RewritePragma _ q) = killRange1 (RewritePragma noRange) q+ killRange (CompiledDataPragma _ q s ss) = killRange1 (\q -> CompiledDataPragma noRange q s ss) q+ killRange (CompiledDeclareDataPragma _ q s) = killRange1 (\q -> CompiledDeclareDataPragma noRange q s) q+ killRange (CompiledTypePragma _ q s) = killRange1 (\q -> CompiledTypePragma noRange q s) q+ killRange (CompiledPragma _ q s) = killRange1 (\q -> CompiledPragma noRange q s) q+ killRange (CompiledExportPragma _ q s) = killRange1 (\q -> CompiledExportPragma noRange q s) q+ killRange (CompiledEpicPragma _ q s) = killRange1 (\q -> CompiledEpicPragma noRange q s) q+ killRange (CompiledJSPragma _ q s) = killRange1 (\q -> CompiledJSPragma noRange q s) q+ killRange (CompiledUHCPragma _ q s) = killRange1 (\q -> CompiledUHCPragma noRange q s) q+ killRange (CompiledDataUHCPragma _ q s ss) = killRange1 (\q -> CompiledDataUHCPragma noRange q s ss) q+ killRange (HaskellCodePragma _ s) = HaskellCodePragma noRange s+ killRange (NoSmashingPragma _ q) = killRange1 (NoSmashingPragma noRange) q+ killRange (StaticPragma _ q) = killRange1 (StaticPragma noRange) q+ killRange (InlinePragma _ q) = killRange1 (InlinePragma noRange) q+ killRange (ImportPragma _ s) = ImportPragma noRange s+ killRange (ImportUHCPragma _ s) = ImportUHCPragma noRange s+ killRange (ImpossiblePragma _) = ImpossiblePragma noRange+ killRange (TerminationCheckPragma _ t) = TerminationCheckPragma noRange (killRange t)+ killRange (CatchallPragma _) = CatchallPragma noRange+ killRange (DisplayPragma _ lhs rhs) = killRange2 (DisplayPragma noRange) lhs rhs+ killRange (NoPositivityCheckPragma _) = NoPositivityCheckPragma noRange instance KillRange RHS where killRange AbsurdRHS = AbsurdRHS@@ -800,11 +840,177 @@ instance KillRange TypedBindings where killRange (TypedBindings _ t) = killRange1 (TypedBindings noRange) t -instance KillRange UsingOrHiding where- killRange (Hiding i) = killRange1 Hiding i- killRange (Using i) = killRange1 Using i- instance KillRange WhereClause where killRange NoWhere = NoWhere killRange (AnyWhere d) = killRange1 AnyWhere d killRange (SomeWhere n d) = killRange2 SomeWhere n d++------------------------------------------------------------------------+-- NFData instances++-- | Ranges are not forced.++instance NFData Expr where+ rnf (Ident a) = rnf a+ rnf (Lit a) = rnf a+ rnf (QuestionMark _ a) = rnf a+ rnf (Underscore _ a) = rnf a+ rnf (RawApp _ a) = rnf a+ rnf (App _ a b) = rnf a `seq` rnf b+ rnf (OpApp _ a b c) = rnf a `seq` rnf b `seq` rnf c+ rnf (WithApp _ a b) = rnf a `seq` rnf b+ rnf (HiddenArg _ a) = rnf a+ rnf (InstanceArg _ a) = rnf a+ rnf (Lam _ a b) = rnf a `seq` rnf b+ rnf (AbsurdLam _ a) = rnf a+ rnf (ExtendedLam _ a) = rnf a+ rnf (Fun _ a b) = rnf a `seq` rnf b+ rnf (Pi a b) = rnf a `seq` rnf b+ rnf (Set _) = ()+ rnf (Prop _) = ()+ rnf (SetN _ a) = rnf a+ rnf (Rec _ a) = rnf a+ rnf (RecUpdate _ a b) = rnf a `seq` rnf b+ rnf (Let _ a b) = rnf a `seq` rnf b+ rnf (Paren _ a) = rnf a+ rnf (Absurd _) = ()+ rnf (As _ a b) = rnf a `seq` rnf b+ rnf (Dot _ a) = rnf a+ rnf (ETel a) = rnf a+ rnf (QuoteGoal _ a b) = rnf a `seq` rnf b+ rnf (QuoteContext _) = ()+ rnf (Quote _) = ()+ rnf (QuoteTerm _) = ()+ rnf (Tactic _ a b) = rnf a `seq` rnf b+ rnf (Unquote _) = ()+ rnf (DontCare a) = rnf a+ rnf (Equal _ a b) = rnf a `seq` rnf b++-- | Ranges are not forced.++instance NFData Pattern where+ rnf (IdentP a) = rnf a+ rnf (QuoteP _) = ()+ rnf (AppP a b) = rnf a `seq` rnf b+ rnf (RawAppP _ a) = rnf a+ rnf (OpAppP _ a b c) = rnf a `seq` rnf b `seq` rnf c+ rnf (HiddenP _ a) = rnf a+ rnf (InstanceP _ a) = rnf a+ rnf (ParenP _ a) = rnf a+ rnf (WildP _) = ()+ rnf (AbsurdP _) = ()+ rnf (AsP _ a b) = rnf a `seq` rnf b+ rnf (DotP _ a) = rnf a+ rnf (LitP a) = rnf a+ rnf (RecP _ a) = rnf a++-- | Ranges are not forced.++instance NFData Declaration where+ rnf (TypeSig a b c) = rnf a `seq` rnf b `seq` rnf c+ rnf (Field a b c) = rnf a `seq` rnf b `seq` rnf c+ rnf (FunClause a b c d) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d+ rnf (DataSig _ a b c d) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d+ rnf (Data _ a b c d e) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d `seq` rnf e+ rnf (RecordSig _ a b c) = rnf a `seq` rnf b `seq` rnf c+ rnf (Record _ a b c d e f g) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d `seq` rnf e `seq` rnf f `seq` rnf g+ rnf (Infix a b) = rnf a `seq` rnf b+ rnf (Syntax a b) = rnf a `seq` rnf b+ rnf (PatternSyn _ a b c) = rnf a `seq` rnf b `seq` rnf c+ rnf (Mutual _ a) = rnf a+ rnf (Abstract _ a) = rnf a+ rnf (Private _ a) = rnf a+ rnf (InstanceB _ a) = rnf a+ rnf (Macro _ a) = rnf a+ rnf (Postulate _ a) = rnf a+ rnf (Primitive _ a) = rnf a+ rnf (Open _ a b) = rnf a `seq` rnf b+ rnf (Import _ a b _ c) = rnf a `seq` rnf b `seq` rnf c+ rnf (ModuleMacro _ a b _ c) = rnf a `seq` rnf b `seq` rnf c+ rnf (Module _ a b c) = rnf a `seq` rnf b `seq` rnf c+ rnf (UnquoteDecl _ a b) = rnf a `seq` rnf b+ rnf (UnquoteDef _ a b) = rnf a `seq` rnf b+ rnf (Pragma a) = rnf a++-- | Ranges are not forced.++instance NFData Pragma where+ rnf (OptionsPragma _ a) = rnf a+ rnf (BuiltinPragma _ a b) = rnf a `seq` rnf b+ rnf (RewritePragma _ a) = rnf a+ rnf (CompiledDataPragma _ a b c) = rnf a `seq` rnf b `seq` rnf c+ rnf (CompiledDeclareDataPragma _ a b) = rnf a `seq` rnf b+ rnf (CompiledTypePragma _ a b) = rnf a `seq` rnf b+ rnf (CompiledPragma _ a b) = rnf a `seq` rnf b+ rnf (CompiledExportPragma _ a b) = rnf a `seq` rnf b+ rnf (CompiledEpicPragma _ a b) = rnf a `seq` rnf b+ rnf (CompiledJSPragma _ a b) = rnf a `seq` rnf b+ rnf (CompiledUHCPragma _ a b) = rnf a `seq` rnf b+ rnf (CompiledDataUHCPragma _ a b c) = rnf a `seq` rnf b `seq` rnf c+ rnf (HaskellCodePragma _ s) = rnf s+ rnf (NoSmashingPragma _ a) = rnf a+ rnf (StaticPragma _ a) = rnf a+ rnf (InlinePragma _ a) = rnf a+ rnf (ImportPragma _ a) = rnf a+ rnf (ImportUHCPragma _ a) = rnf a+ rnf (ImpossiblePragma _) = ()+ rnf (TerminationCheckPragma _ a) = rnf a+ rnf (CatchallPragma _) = ()+ rnf (DisplayPragma _ a b) = rnf a `seq` rnf b+ rnf (NoPositivityCheckPragma _) = ()++-- | Ranges are not forced.++instance NFData a => NFData (TypedBindings' a) where+ rnf (TypedBindings _ a) = rnf a++-- | Ranges are not forced.++instance NFData AsName where+ rnf (AsName a _) = rnf a++-- | Ranges are not forced.++instance NFData a => NFData (TypedBinding' a) where+ rnf (TBind _ a b) = rnf a `seq` rnf b+ rnf (TLet _ a) = rnf a++-- | Ranges are not forced.++instance NFData ModuleApplication where+ rnf (SectionApp _ a b) = rnf a `seq` rnf b+ rnf (RecordModuleIFS _ a) = rnf a++-- | Ranges are not forced.++instance NFData a => NFData (OpApp a) where+ rnf (SyntaxBindingLambda _ a b) = rnf a `seq` rnf b+ rnf (Ordinary a) = rnf a++-- | Ranges are not forced.++instance NFData LHS where+ rnf (LHS a b c d) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d+ rnf (Ellipsis _ a b c) = rnf a `seq` rnf b `seq` rnf c++instance NFData a => NFData (FieldAssignment' a) where+ rnf (FieldAssignment a b) = rnf a `seq` rnf b++instance NFData ModuleAssignment where+ rnf (ModuleAssignment a b c) = rnf a `seq` rnf b `seq` rnf c++instance NFData a => NFData (WhereClause' a) where+ rnf NoWhere = ()+ rnf (AnyWhere a) = rnf a+ rnf (SomeWhere a b) = rnf a `seq` rnf b++instance NFData a => NFData (LamBinding' a) where+ rnf (DomainFree a b) = rnf a `seq` rnf b+ rnf (DomainFull a) = rnf a++instance NFData BoundName where+ rnf (BName a b c) = rnf a `seq` rnf b `seq` rnf c++instance NFData a => NFData (RHS' a) where+ rnf AbsurdRHS = ()+ rnf (RHS a) = rnf a
src/full/Agda/Syntax/Concrete/Definitions.hs view
@@ -1,8 +1,9 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE PatternGuards #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-} #if __GLASGOW_HASKELL__ >= 710 {-# LANGUAGE FlexibleContexts #-}@@ -49,16 +50,9 @@ import Control.Applicative hiding (empty) import Control.Monad.State -import Data.Foldable hiding- ( all- , concatMap- , elem- , mapM_- , notElem-#if MIN_VERSION_base(4,8,0)- , null+#if __GLASGOW_HASKELL__ <= 708+import Data.Foldable ( foldMap ) #endif- ) import qualified Data.Map as Map import Data.Map (Map)@@ -69,19 +63,20 @@ import Data.Typeable (Typeable) import Agda.Syntax.Concrete-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo, TerminationCheck())+import Agda.Syntax.Common hiding (TerminationCheck()) import qualified Agda.Syntax.Common as Common import Agda.Syntax.Position import Agda.Syntax.Fixity import Agda.Syntax.Notation import Agda.Syntax.Concrete.Pretty () -import Agda.Utils.Except ( Error(noMsg, strMsg), MonadError(throwError) )+import Agda.Utils.Except ( Error(strMsg), MonadError(throwError) ) import Agda.Utils.Lens import Agda.Utils.List (headMaybe, isSublistOf) import Agda.Utils.Monad import Agda.Utils.Null import Agda.Utils.Pretty+import Agda.Utils.Tuple import Agda.Utils.Update #include "undefined.h"@@ -99,29 +94,30 @@ data NiceDeclaration = Axiom Range Fixity' Access IsInstance ArgInfo Name Expr -- ^ Axioms and functions can be declared irrelevant. (Hiding should be NotHidden)- | NiceField Range Fixity' Access IsAbstract Name (Arg Expr)+ | NiceField Range IsInstance Fixity' Access IsAbstract Name (Arg Expr) | PrimitiveFunction Range Fixity' Access IsAbstract Name Expr- | NiceMutual Range TerminationCheck [NiceDeclaration]+ | NiceMutual Range TerminationCheck PositivityCheck [NiceDeclaration] | NiceModule Range Access IsAbstract QName Telescope [Declaration] | NiceModuleMacro Range Access Name ModuleApplication OpenShortHand ImportDirective | NiceOpen Range QName ImportDirective | NiceImport Range QName (Maybe AsName) OpenShortHand ImportDirective | NicePragma Range Pragma- | NiceRecSig Range Fixity' Access Name [LamBinding] Expr- | NiceDataSig Range Fixity' Access Name [LamBinding] Expr- | NiceFunClause Range Access IsAbstract TerminationCheck Declaration+ | NiceRecSig Range Fixity' Access Name [LamBinding] Expr PositivityCheck+ | NiceDataSig Range Fixity' Access Name [LamBinding] Expr PositivityCheck+ | NiceFunClause Range Access IsAbstract TerminationCheck Catchall Declaration -- ^ An uncategorized function clause, could be a function clause -- without type signature or a pattern lhs (e.g. for irrefutable let). -- The 'Declaration' is the actual 'FunClause'.- | FunSig Range Fixity' Access IsInstance ArgInfo TerminationCheck Name Expr+ | FunSig Range Fixity' Access IsInstance IsMacro ArgInfo TerminationCheck Name Expr | FunDef Range [Declaration] Fixity' IsAbstract TerminationCheck Name [Clause] -- ^ Block of function clauses (we have seen the type signature before). -- The 'Declaration's are the original declarations that were processed -- into this 'FunDef' and are only used in 'notSoNiceDeclaration'.- | DataDef Range Fixity' IsAbstract Name [LamBinding] [NiceConstructor]- | RecDef Range Fixity' IsAbstract Name (Maybe (Ranged Induction)) (Maybe (ThingWithFixity Name)) [LamBinding] [NiceDeclaration]+ | DataDef Range Fixity' IsAbstract Name [LamBinding] PositivityCheck [NiceConstructor]+ | RecDef Range Fixity' IsAbstract Name (Maybe (Ranged Induction)) (Maybe Bool) (Maybe (ThingWithFixity Name, IsInstance)) [LamBinding] PositivityCheck [NiceDeclaration] | NicePatternSyn Range Fixity' Name [Arg Name] Pattern- | NiceUnquoteDecl Range Fixity' Access IsInstance IsAbstract TerminationCheck Name Expr+ | NiceUnquoteDecl Range [Fixity'] Access IsInstance IsAbstract TerminationCheck [Name] Expr+ | NiceUnquoteDef Range [Fixity'] Access IsAbstract TerminationCheck [Name] Expr deriving (Typeable, Show) type TerminationCheck = Common.TerminationCheck Measure@@ -129,6 +125,8 @@ -- | Termination measure is, for now, a variable name. type Measure = Name +type Catchall = Bool+ -- | Only 'Axiom's. type NiceConstructor = NiceTypeSignature @@ -137,7 +135,7 @@ -- | One clause in a function definition. There is no guarantee that the 'LHS' -- actually declares the 'Name'. We will have to check that later.-data Clause = Clause Name LHS RHS WhereClause [Clause]+data Clause = Clause Name Catchall LHS RHS WhereClause [Clause] deriving (Typeable, Show) -- | The exception type.@@ -167,6 +165,10 @@ | PragmaNoTerminationCheck Range -- ^ Pragma @{-# NO_TERMINATION_CHECK #-}@ has been replaced -- by {-# TERMINATING #-} and {-# NON_TERMINATING #-}.+ | InvalidCatchallPragma Range+ | UnquoteDefRequiresSignature [Name]+ | BadMacroDef NiceDeclaration+ | InvalidNoPositivityCheckPragma Range deriving (Typeable) -- | Several declarations expect only type signatures as sub-declarations. These are:@@ -175,52 +177,57 @@ | PrimitiveBlock -- ^ @primitive@. Ensured by parser. | InstanceBlock -- ^ @instance@. Actually, here all kinds of sub-declarations are allowed a priori. | FieldBlock -- ^ @field@. Ensured by parser.- | DataBlock -- ^ @data ... where@. Here we got a bad error message for Agda-2.4.3 (Issue 1698).+ | DataBlock -- ^ @data ... where@. Here we got a bad error message for Agda-2.5 (Issue 1698). deriving (Typeable, Eq, Ord, Show) instance HasRange DeclarationException where- getRange (MultipleFixityDecls xs) = getRange (fst $ head xs)- getRange (InvalidName x) = getRange x- getRange (DuplicateDefinition x) = getRange x- getRange (MissingDefinition x) = getRange x- getRange (MissingWithClauses x) = getRange x- getRange (MissingTypeSignature x) = getRange x- getRange (MissingDataSignature x) = getRange x- getRange (WrongDefinition x k k') = getRange x- getRange (WrongParameters x) = getRange x- getRange (AmbiguousFunClauses lhs xs) = getRange lhs- getRange (NotAllowedInMutual x) = getRange x- getRange (UnknownNamesInFixityDecl xs) = getRange . head $ xs- getRange (Codata r) = r- getRange (DeclarationPanic _) = noRange- getRange (UselessPrivate r) = r- getRange (UselessAbstract r) = r- getRange (UselessInstance r) = r- getRange (WrongContentBlock _ r) = r- getRange (InvalidTerminationCheckPragma r) = r- getRange (InvalidMeasureMutual r) = r- getRange (PragmaNoTerminationCheck r) = r+ getRange (MultipleFixityDecls xs) = getRange (fst $ head xs)+ getRange (InvalidName x) = getRange x+ getRange (DuplicateDefinition x) = getRange x+ getRange (MissingDefinition x) = getRange x+ getRange (MissingWithClauses x) = getRange x+ getRange (MissingTypeSignature x) = getRange x+ getRange (MissingDataSignature x) = getRange x+ getRange (WrongDefinition x k k') = getRange x+ getRange (WrongParameters x) = getRange x+ getRange (AmbiguousFunClauses lhs xs) = getRange lhs+ getRange (NotAllowedInMutual x) = getRange x+ getRange (UnknownNamesInFixityDecl xs) = getRange . head $ xs+ getRange (Codata r) = r+ getRange (DeclarationPanic _) = noRange+ getRange (UselessPrivate r) = r+ getRange (UselessAbstract r) = r+ getRange (UselessInstance r) = r+ getRange (WrongContentBlock _ r) = r+ getRange (InvalidTerminationCheckPragma r) = r+ getRange (InvalidMeasureMutual r) = r+ getRange (PragmaNoTerminationCheck r) = r+ getRange (InvalidCatchallPragma r) = r+ getRange (UnquoteDefRequiresSignature x) = getRange x+ getRange (BadMacroDef d) = getRange d+ getRange (InvalidNoPositivityCheckPragma r) = r instance HasRange NiceDeclaration where- getRange (Axiom r _ _ _ _ _ _) = r- getRange (NiceField r _ _ _ _ _) = r- getRange (NiceMutual r _ _) = r- getRange (NiceModule r _ _ _ _ _) = r- getRange (NiceModuleMacro r _ _ _ _ _) = r- getRange (NiceOpen r _ _) = r- getRange (NiceImport r _ _ _ _) = r- getRange (NicePragma r _) = r- getRange (PrimitiveFunction r _ _ _ _ _) = r- getRange (FunSig r _ _ _ _ _ _ _) = r- getRange (FunDef r _ _ _ _ _ _) = r- getRange (DataDef r _ _ _ _ _) = r- getRange (RecDef r _ _ _ _ _ _ _) = r- getRange (NiceRecSig r _ _ _ _ _) = r- getRange (NiceDataSig r _ _ _ _ _) = r- getRange (NicePatternSyn r _ _ _ _) = r- getRange (NiceFunClause r _ _ _ _) = r+ getRange (Axiom r _ _ _ _ _ _) = r+ getRange (NiceField r _ _ _ _ _ _) = r+ getRange (NiceMutual r _ _ _) = r+ getRange (NiceModule r _ _ _ _ _ ) = r+ getRange (NiceModuleMacro r _ _ _ _ _) = r+ getRange (NiceOpen r _ _) = r+ getRange (NiceImport r _ _ _ _) = r+ getRange (NicePragma r _) = r+ getRange (PrimitiveFunction r _ _ _ _ _) = r+ getRange (FunSig r _ _ _ _ _ _ _ _) = r+ getRange (FunDef r _ _ _ _ _ _) = r+ getRange (DataDef r _ _ _ _ _ _) = r+ getRange (RecDef r _ _ _ _ _ _ _ _ _) = r+ getRange (NiceRecSig r _ _ _ _ _ _) = r+ getRange (NiceDataSig r _ _ _ _ _ _) = r+ getRange (NicePatternSyn r _ _ _ _) = r+ getRange (NiceFunClause r _ _ _ _ _) = r getRange (NiceUnquoteDecl r _ _ _ _ _ _ _) = r+ getRange (NiceUnquoteDef r _ _ _ _ _ _) = r instance Error DeclarationException where strMsg = DeclarationPanic@@ -265,40 +272,53 @@ pwords "Using abstract here has no effect. Abstract applies only definitions like data definitions, record type definitions and function clauses." pretty (UselessInstance _) = fsep $ pwords "Using instance here has no effect. Instance applies only to declarations that introduce new identifiers into the module, like type signatures and axioms."- pretty (WrongContentBlock b _) = fsep $- pwords "A postulate block can only contain type signatures or instance blocks"+ pretty (WrongContentBlock b _) = fsep . pwords $+ case b of+ PostulateBlock -> "A postulate block can only contain type signatures, possibly under keyword instance"+ DataBlock -> "A data definition can only contain type signatures, possibly under keyword instance"+ _ -> __IMPOSSIBLE__ pretty (PragmaNoTerminationCheck _) = fsep $ pwords "Pragma {-# NO_TERMINATION_CHECK #-} has been removed. To skip the termination check, label your definitions either as {-# TERMINATING #-} or {-# NON_TERMINATING #-}." pretty (InvalidTerminationCheckPragma _) = fsep $ pwords "Termination checking pragmas can only precede a mutual block or a function definition." pretty (InvalidMeasureMutual _) = fsep $ pwords "In a mutual block, either all functions must have the same (or no) termination checking pragma."+ pretty (InvalidCatchallPragma _) = fsep $+ pwords "The CATCHALL pragma can only preceed a function clause."+ pretty (UnquoteDefRequiresSignature xs) = fsep $+ pwords "Missing type signatures for unquoteDef" ++ map pretty xs+ pretty (BadMacroDef nd) = fsep $+ [text $ declName nd] ++ pwords "are not allowed in macro blocks" pretty (NotAllowedInMutual nd) = fsep $- [text $ decl nd] ++ pwords "are not allowed in mutual blocks"- where- decl Axiom{} = "Postulates"- decl NiceField{} = "Fields"- decl NiceMutual{} = "Mutual blocks"- decl NiceModule{} = "Modules"- decl NiceModuleMacro{} = "Modules"- decl NiceOpen{} = "Open declarations"- decl NiceImport{} = "Import statements"- decl NicePragma{} = "Pragmas"- decl PrimitiveFunction{} = "Primitive declarations"- decl NicePatternSyn{} = "Pattern synonyms"- decl NiceUnquoteDecl{} = "Unquoted declarations"- decl NiceRecSig{} = __IMPOSSIBLE__- decl NiceDataSig{} = __IMPOSSIBLE__- decl NiceFunClause{} = __IMPOSSIBLE__- decl FunSig{} = __IMPOSSIBLE__- decl FunDef{} = __IMPOSSIBLE__- decl RecDef{} = __IMPOSSIBLE__- decl DataDef{} = __IMPOSSIBLE__+ [text $ declName nd] ++ pwords "are not allowed in mutual blocks" pretty (Codata _) = text $ "The codata construction has been removed. " ++ "Use the INFINITY builtin instead." pretty (DeclarationPanic s) = text s+ pretty (InvalidNoPositivityCheckPragma _) = fsep $+ pwords "No positivity checking pragmas can only precede a mutual block or a data/record definition." +declName :: NiceDeclaration -> String+declName Axiom{} = "Postulates"+declName NiceField{} = "Fields"+declName NiceMutual{} = "Mutual blocks"+declName NiceModule{} = "Modules"+declName NiceModuleMacro{} = "Modules"+declName NiceOpen{} = "Open declarations"+declName NiceImport{} = "Import statements"+declName NicePragma{} = "Pragmas"+declName PrimitiveFunction{} = "Primitive declarations"+declName NicePatternSyn{} = "Pattern synonyms"+declName NiceUnquoteDecl{} = "Unquoted declarations"+declName NiceUnquoteDef{} = "Unquoted definitions"+declName NiceRecSig{} = "Records"+declName NiceDataSig{} = "Data types"+declName NiceFunClause{} = "Functions without a type signature"+declName FunSig{} = "Type signatures"+declName FunDef{} = "Function definitions"+declName RecDef{} = "Records"+declName DataDef{} = "Data types"+ {-------------------------------------------------------------------------- The niceifier --------------------------------------------------------------------------}@@ -309,18 +329,25 @@ deriving (Eq, Show) -- | The kind of the forward declaration, remembering the parameters.+ data DataRecOrFun- = DataName Params -- ^ name of a data with parameters- | RecName Params -- ^ name of a record with parameters- | FunName TerminationCheck -- ^ name of a function- deriving (Eq)+ = DataName PositivityCheck Params -- ^ name of a data with parameters+ | RecName PositivityCheck Params -- ^ name of a record with parameters+ | FunName TerminationCheck -- ^ name of a function +-- Ignore pragmas when checking equality+instance Eq DataRecOrFun where+ DataName _ p == DataName _ q = p == q+ RecName _ p == RecName _ q = p == q+ FunName _ == FunName _ = True+ _ == _ = False+ type Params = [Hiding] instance Show DataRecOrFun where- show (DataName n) = "data type" -- "with " ++ show n ++ " visible parameters"- show (RecName n) = "record type" -- "with " ++ show n ++ " visible parameters"- show (FunName{}) = "function"+ show (DataName _ n) = "data type" -- "with " ++ show n ++ " visible parameters"+ show (RecName _ n) = "record type" -- "with " ++ show n ++ " visible parameters"+ show (FunName{}) = "function" isFunName :: DataRecOrFun -> Bool isFunName (FunName{}) = True@@ -336,6 +363,11 @@ terminationCheck (FunName tc) = tc terminationCheck _ = TerminationCheck +positivityCheck :: DataRecOrFun -> PositivityCheck+positivityCheck (DataName pc _) = pc+positivityCheck (RecName pc _) = pc+positivityCheck _ = True+ -- | Check that declarations in a mutual block are consistently -- equipped with MEASURE pragmas, or whether there is a -- NO_TERMINATION_CHECK pragma.@@ -432,32 +464,44 @@ getFixity :: Name -> Nice Fixity' getFixity x = do when (isUnderscore x) $ throwError $ InvalidName x- Map.findWithDefault defaultFixity' x <$> gets fixs+ Map.findWithDefault noFixity' x <$> gets fixs -- WAS: defaultFixity' runNice :: Nice a -> Either DeclarationException a runNice nice = nice `evalStateT` initNiceEnv data DeclKind = LoneSig DataRecOrFun Name- | LoneDef DataRecOrFun Name+ | LoneDefs DataRecOrFun [Name] | OtherDecl deriving (Eq, Show) declKind :: NiceDeclaration -> DeclKind-declKind (FunSig _ _ _ _ _ tc x _) = LoneSig (FunName tc) x-declKind (NiceRecSig _ _ _ x pars _) = LoneSig (RecName $ parameters pars) x-declKind (NiceDataSig _ _ _ x pars _) = LoneSig (DataName $ parameters pars) x-declKind (FunDef _ _ _ _ tc x _) = LoneDef (FunName tc) x-declKind (DataDef _ _ _ x pars _) = LoneDef (DataName $ parameters pars) x-declKind (RecDef _ _ _ x _ _ pars _) = LoneDef (RecName $ parameters pars) x-declKind _ = OtherDecl+declKind (FunSig _ _ _ _ _ _ tc x _) = LoneSig (FunName tc) x+declKind (NiceRecSig _ _ _ x pars _ pc) = LoneSig (RecName pc $ parameters pars) x+declKind (NiceDataSig _ _ _ x pars _ pc) = LoneSig (DataName pc $ parameters pars) x+declKind (FunDef _ _ _ _ tc x _) = LoneDefs (FunName tc) [x]+declKind (DataDef _ _ _ x pars pc _) = LoneDefs (DataName pc $ parameters pars) [x]+declKind (RecDef _ _ _ x _ _ _ pars pc _) = LoneDefs (RecName pc $ parameters pars) [x]+declKind (NiceUnquoteDef _ _ _ _ tc xs _) = LoneDefs (FunName tc) xs+declKind Axiom{} = OtherDecl+declKind NiceField{} = OtherDecl+declKind PrimitiveFunction{} = OtherDecl+declKind NiceMutual{} = OtherDecl+declKind NiceModule{} = OtherDecl+declKind NiceModuleMacro{} = OtherDecl+declKind NiceOpen{} = OtherDecl+declKind NiceImport{} = OtherDecl+declKind NicePragma{} = OtherDecl+declKind NiceFunClause{} = OtherDecl+declKind NicePatternSyn{} = OtherDecl+declKind NiceUnquoteDecl{} = OtherDecl -- | Compute visible parameters of a data or record signature or definition. parameters :: [LamBinding] -> Params parameters = List.concat . List.map numP where numP (DomainFree i _) = [argInfoHiding i]- numP (DomainFull (TypedBindings _ (Common.Arg i (TBind _ xs _)))) = List.replicate (length xs) $ argInfoHiding i- numP (DomainFull (TypedBindings _ (Common.Arg _ TLet{}))) = []+ numP (DomainFull (TypedBindings _ (Arg i (TBind _ xs _)))) = List.replicate (length xs) $ argInfoHiding i+ numP (DomainFull (TypedBindings _ (Arg _ TLet{}))) = [] -- | Main. niceDeclarations :: [Declaration] -> Nice [NiceDeclaration]@@ -483,15 +527,15 @@ declaredNames :: Declaration -> [Name] declaredNames d = case d of TypeSig _ x _ -> [x]- Field x _ -> [x]- FunClause (LHS p [] [] []) _ _+ Field _ x _ -> [x]+ FunClause (LHS p [] [] []) _ _ _ | IdentP (QName x) <- removeSingletonRawAppP p -> [x] FunClause{} -> [] DataSig _ _ x _ _ -> [x] Data _ _ x _ _ cs -> x : concatMap declaredNames cs RecordSig _ x _ _ -> [x]- Record _ x _ c _ _ _ -> x : foldMap (:[]) c+ Record _ x _ _ c _ _ _ -> x : foldMap (:[]) (fst <$> c) Infix _ _ -> [] Syntax _ _ -> [] PatternSyn _ x _ _ -> [x]@@ -499,47 +543,63 @@ Abstract _ ds -> concatMap declaredNames ds Private _ ds -> concatMap declaredNames ds InstanceB _ ds -> concatMap declaredNames ds+ Macro _ ds -> concatMap declaredNames ds Postulate _ ds -> concatMap declaredNames ds Primitive _ ds -> concatMap declaredNames ds Open{} -> [] Import{} -> [] ModuleMacro{} -> [] Module{} -> []- UnquoteDecl _ x _ -> [x]+ UnquoteDecl _ xs _ -> xs+ UnquoteDef{} -> [] Pragma{} -> [] inferMutualBlocks :: [NiceDeclaration] -> Nice [NiceDeclaration] inferMutualBlocks [] = return [] inferMutualBlocks (d : ds) = case declKind d of- OtherDecl -> (d :) <$> inferMutualBlocks ds- LoneDef _ x -> __IMPOSSIBLE__- LoneSig k x -> do+ OtherDecl -> (d :) <$> inferMutualBlocks ds+ LoneDefs _ xs -> __IMPOSSIBLE__+ LoneSig k x -> do addLoneSig x k- (tcs, (ds0, ds1)) <- untilAllDefined [terminationCheck k] ds+ ((tcs, pcs), (ds0, ds1)) <- untilAllDefined ([terminationCheck k], [positivityCheck k]) ds tc <- combineTermChecks (getRange d) tcs -- Record modules are, for performance reasons, not always -- placed in mutual blocks.- let prefix = case (d, ds0) of- (NiceRecSig{}, [r@RecDef{}]) -> ([d, r] ++)- _ ->- (NiceMutual (getRange (d : ds0)) tc (d : ds0) :)++ -- ASR (01 January 2016): If the record module has a+ -- NO_POSITIVITY_CHECK pragma, it is placed in a mutual+ -- block. See Issue 1760.+ let prefix :: [NiceDeclaration] -> [NiceDeclaration]+ prefix = case (d, ds0) of+ (NiceRecSig{}, [r@(RecDef _ _ _ _ _ _ _ _ True _)]) -> ([d, r] ++)+ _ ->+ (NiceMutual (getRange (d : ds0)) tc (and pcs) (d : ds0) :)+ prefix <$> inferMutualBlocks ds1 where- untilAllDefined :: [TerminationCheck]- -> [NiceDeclaration]- -> Nice ([TerminationCheck], ([NiceDeclaration], [NiceDeclaration]))- untilAllDefined tc ds = do+ untilAllDefined :: ([TerminationCheck], [PositivityCheck])+ -> [NiceDeclaration]+ -> Nice (([TerminationCheck], [PositivityCheck]), ([NiceDeclaration], [NiceDeclaration]))+ untilAllDefined (tc, pc) ds = do done <- noLoneSigs- if done then return (tc, ([], ds)) else+ if done then return ((tc, pc), ([], ds)) else case ds of [] -> __IMPOSSIBLE__ <$ (checkLoneSigs . Map.toList =<< use loneSigs) d : ds -> case declKind d of- LoneSig k x -> addLoneSig x k >> cons d (untilAllDefined (terminationCheck k : tc) ds)- LoneDef k x -> removeLoneSig x >> cons d (untilAllDefined (terminationCheck k : tc) ds)- OtherDecl -> cons d (untilAllDefined tc ds)+ LoneSig k x ->+ addLoneSig x k >> cons d (untilAllDefined (terminationCheck k : tc, positivityCheck k : pc) ds)+ LoneDefs k xs -> do+ mapM_ removeLoneSig xs+ cons d (untilAllDefined (terminationCheck k : tc, positivityCheck k : pc) ds)+ OtherDecl -> cons d (untilAllDefined (tc, pc) ds) where+ -- ASR (26 December 2015): Type annotated version of the @cons@ function.+ -- cons d = fmap $+ -- (id :: (([TerminationCheck], [PositivityCheck]) -> ([TerminationCheck], [PositivityCheck])))+ -- *** (d :)+ -- *** (id :: [NiceDeclaration] -> [NiceDeclaration]) cons d = fmap (id *** (d :) *** id) notMeasure TerminationMeasure{} = False@@ -547,52 +607,77 @@ nice :: [Declaration] -> Nice [NiceDeclaration] nice [] = return []- -- Andreas, AIM XX: do not forbid NO_TERMINATION_CHECK in maintenance version.- -- nice (Pragma (TerminationCheckPragma r NoTerminationCheck) : _) =- -- throwError $ PragmaNoTerminationCheck r++ nice (Pragma (TerminationCheckPragma r NoTerminationCheck) : _) =+ throwError $ PragmaNoTerminationCheck r+ nice (Pragma (TerminationCheckPragma r tc) : ds@(Mutual{} : _)) | notMeasure tc = do ds <- nice ds case ds of- NiceMutual r _ ds' : ds -> return $ NiceMutual r tc ds' : ds- _ -> __IMPOSSIBLE__+ NiceMutual r _ pc ds' : ds -> return $ NiceMutual r tc pc ds' : ds+ _ -> __IMPOSSIBLE__+ nice (Pragma (TerminationCheckPragma r tc) : d@TypeSig{} : ds) = niceTypeSig tc d ds+ nice (Pragma (TerminationCheckPragma r tc) : d@FunClause{} : ds) | notMeasure tc =- niceFunClause tc d ds+ niceFunClause tc False d ds+ nice (Pragma (TerminationCheckPragma r tc) : ds@(UnquoteDecl{} : _)) | notMeasure tc = do NiceUnquoteDecl r f p a i _ x e : ds <- nice ds return $ NiceUnquoteDecl r f p a i tc x e : ds + nice (Pragma (TerminationCheckPragma r tc) : d@(Pragma (NoPositivityCheckPragma _)) : ds@(Mutual{} : _)) | notMeasure tc = do+ ds <- nice (d : ds)+ case ds of+ NiceMutual r _ pc ds' : ds -> return $ NiceMutual r tc pc ds' : ds+ _ -> __IMPOSSIBLE__++ nice (Pragma (CatchallPragma r) : d@FunClause{} : ds) =+ niceFunClause TerminationCheck True d ds+ nice (d@TypeSig{} : Pragma (TerminationCheckPragma r (TerminationMeasure _ x)) : ds) = niceTypeSig (TerminationMeasure r x) d ds+ -- nice (Pragma (MeasurePragma r x) : d@FunClause{} : ds) = -- niceFunClause (TerminationMeasure r x) d ds + nice (Pragma (NoPositivityCheckPragma _) : ds@(Mutual{} : _)) = do+ ds <- nice ds+ case ds of+ NiceMutual r tc _ ds' : ds -> return $ NiceMutual r tc False ds' : ds+ _ -> __IMPOSSIBLE__++ nice (Pragma (NoPositivityCheckPragma _) : d@(Data _ Inductive _ _ _ _) : ds) =+ niceDataDef False d ds++ nice (Pragma (NoPositivityCheckPragma _) : d@(DataSig _ Inductive _ _ _) : ds) =+ niceDataSig False d ds++ nice (Pragma (NoPositivityCheckPragma _) : d@Record{} : ds) =+ niceRecord False d ds++ nice (Pragma (NoPositivityCheckPragma _) : d@RecordSig{} : ds) =+ niceRecordSig False d ds++ nice (Pragma (NoPositivityCheckPragma _) : d@(Pragma (TerminationCheckPragma _ _)) : ds@(Mutual{} : _)) = do+ ds <- nice (d : ds)+ case ds of+ NiceMutual r tc _ ds' : ds -> return $ NiceMutual r tc False ds' : ds+ _ -> __IMPOSSIBLE__+ nice (d:ds) = do case d of- TypeSig{} -> niceTypeSig TerminationCheck d ds- FunClause{} -> niceFunClause TerminationCheck d ds- Field x t -> (++) <$> niceAxioms FieldBlock [ d ] <*> nice ds- DataSig r CoInductive x tel t -> throwError (Codata r)- Data r CoInductive x tel t cs -> throwError (Codata r)- DataSig r Inductive x tel t -> do- addLoneSig x (DataName $ parameters tel)- (++) <$> dataOrRec DataDef NiceDataSig (niceAxioms DataBlock) r x tel (Just t) Nothing- <*> nice ds- Data r Inductive x tel t cs -> do- t <- defaultTypeSig (DataName $ parameters tel) x t- (++) <$> dataOrRec DataDef NiceDataSig (niceAxioms DataBlock) r x tel t (Just cs)- <*> nice ds- RecordSig r x tel t -> do- addLoneSig x (RecName $ parameters tel)- fx <- getFixity x- (NiceRecSig r fx PublicAccess x tel t :) <$> nice ds- Record r x i c tel t cs -> do- t <- defaultTypeSig (RecName $ parameters tel) x t- c <- traverse (\c -> ThingWithFixity c <$> getFixity c) c- (++) <$> dataOrRec (\x1 x2 x3 x4 -> RecDef x1 x2 x3 x4 i c) NiceRecSig- niceDeclarations r x tel t (Just cs)- <*> nice ds+ TypeSig{} -> niceTypeSig TerminationCheck d ds+ FunClause{} -> niceFunClause TerminationCheck False d ds+ Field{} -> (++) <$> niceAxioms FieldBlock [ d ] <*> nice ds+ DataSig r CoInductive _ _ _ -> throwError (Codata r)+ Data r CoInductive _ _ _ _ -> throwError (Codata r)+ d@(DataSig _ Inductive _ _ _) -> niceDataSig True d ds+ d@(Data _ Inductive _ _ _ _) -> niceDataDef True d ds+ d@RecordSig{} -> niceRecordSig True d ds+ d@Record{} -> niceRecord True d ds+ Mutual r ds' -> (:) <$> (mkOldMutual r =<< nice ds') <*> nice ds @@ -605,6 +690,9 @@ InstanceB r ds' -> (++) <$> (instanceBlock r =<< nice ds') <*> nice ds + Macro r ds' ->+ (++) <$> (macroBlock r =<< nice ds') <*> nice ds+ Postulate _ ds' -> (++) <$> niceAxioms PostulateBlock ds' <*> nice ds Primitive _ ds' -> (++) <$> (map toPrim <$> niceAxioms PrimitiveBlock ds') <*> nice ds@@ -626,18 +714,35 @@ Open r x is -> (NiceOpen r x is :) <$> nice ds Import r x as op is -> (NiceImport r x as op is :) <$> nice ds - UnquoteDecl r x e -> do- fx <- getFixity x- (NiceUnquoteDecl r fx PublicAccess NotInstanceDef ConcreteDef TerminationCheck x e :) <$> nice ds- -- Andreas, AIM XX: do not forbid NO_TERMINATION_CHECK in maintenance version.- -- Pragma (TerminationCheckPragma r NoTerminationCheck) ->- -- throwError $ PragmaNoTerminationCheck r+ UnquoteDecl r xs e -> do+ fxs <- mapM getFixity xs+ (NiceUnquoteDecl r fxs PublicAccess NotInstanceDef ConcreteDef TerminationCheck xs e :) <$> nice ds++ UnquoteDef r xs e -> do+ fxs <- mapM getFixity xs+ sigs <- map fst . filter (isFunName . snd) . Map.toList <$> use loneSigs+ let missing = filter (`notElem` sigs) xs+ if null missing+ then do+ mapM_ removeLoneSig xs+ (NiceUnquoteDef r fxs PublicAccess ConcreteDef TerminationCheck xs e :) <$> nice ds+ else throwError $ UnquoteDefRequiresSignature missing++ Pragma (TerminationCheckPragma r NoTerminationCheck) ->+ throwError $ PragmaNoTerminationCheck r Pragma (TerminationCheckPragma r _) -> throwError $ InvalidTerminationCheckPragma r- Pragma p -> (NicePragma (getRange p) p :) <$> nice ds - niceFunClause :: TerminationCheck -> Declaration -> [Declaration] -> Nice [NiceDeclaration]- niceFunClause termCheck d@(FunClause lhs _ _) ds = do+ Pragma (CatchallPragma r) ->+ throwError $ InvalidCatchallPragma r++ Pragma (NoPositivityCheckPragma r) ->+ throwError $ InvalidNoPositivityCheckPragma r++ Pragma p -> (NicePragma (getRange p) p :) <$> nice ds++ niceFunClause :: TerminationCheck -> Catchall -> Declaration -> [Declaration] -> Nice [NiceDeclaration]+ niceFunClause termCheck catchall d@(FunClause lhs _ _ _) ds = do xs <- map fst . filter (isFunName . snd) . Map.toList <$> use loneSigs -- for each type signature 'x' waiting for clauses, we try -- if we have some clauses for 'x'@@ -662,12 +767,12 @@ -- A missing type signature error might be raise in ConcreteToAbstract _ -> do ds <- nice ds- return $ NiceFunClause (getRange d) PublicAccess ConcreteDef termCheck d : ds+ return $ NiceFunClause (getRange d) PublicAccess ConcreteDef termCheck catchall d : ds -- case: clauses match exactly one of the sigs [(x,(fits,rest))] -> do removeLoneSig x- cs <- mkClauses x $ expandEllipsis fits+ cs <- mkClauses x (expandEllipsis fits) False ds1 <- nice rest fx <- getFixity x d <- return $ FunDef (getRange fits) fits fx ConcreteDef termCheck x cs@@ -675,7 +780,7 @@ -- case: clauses match more than one sigs (ambiguity) l -> throwError $ AmbiguousFunClauses lhs $ reverse $ map fst l -- "ambiguous function clause; cannot assign it uniquely to one type signature"- niceFunClause _ _ _ = __IMPOSSIBLE__+ niceFunClause _ _ _ _ = __IMPOSSIBLE__ niceTypeSig :: TerminationCheck -> Declaration -> [Declaration] -> Nice [NiceDeclaration] niceTypeSig termCheck d@(TypeSig info x t) ds = do@@ -683,9 +788,43 @@ -- register x as lone type signature, to recognize clauses later addLoneSig x (FunName termCheck) ds <- nice ds- return $ FunSig (getRange d) fx PublicAccess NotInstanceDef info termCheck x t : ds+ return $ FunSig (getRange d) fx PublicAccess NotInstanceDef NotMacroDef info termCheck x t : ds niceTypeSig _ _ _ = __IMPOSSIBLE__ + niceDataDef :: PositivityCheck -> Declaration -> [Declaration] ->+ Nice [NiceDeclaration]+ niceDataDef pc (Data r Inductive x tel t cs) ds = do+ t <- defaultTypeSig (DataName pc $ parameters tel) x t+ (++) <$> dataOrRec pc DataDef NiceDataSig (niceAxioms DataBlock) r x tel t (Just cs)+ <*> nice ds+ niceDataDef _ _ _ = __IMPOSSIBLE__++ niceDataSig :: PositivityCheck -> Declaration -> [Declaration] ->+ Nice [NiceDeclaration]+ niceDataSig pc (DataSig r Inductive x tel t) ds = do+ addLoneSig x (DataName pc $ parameters tel)+ (++) <$> dataOrRec pc DataDef NiceDataSig (niceAxioms DataBlock) r x tel (Just t) Nothing+ <*> nice ds+ niceDataSig _ _ _ = __IMPOSSIBLE__++ niceRecord :: PositivityCheck -> Declaration -> [Declaration] ->+ Nice [NiceDeclaration]+ niceRecord pc (Record r x i e c tel t cs) ds = do+ t <- defaultTypeSig (RecName pc $ parameters tel) x t+ c <- traverse (\(cname, cinst) -> do fix <- getFixity cname; return (ThingWithFixity cname fix, cinst)) c+ (++) <$> dataOrRec pc (\x1 x2 x3 x4 -> RecDef x1 x2 x3 x4 i e c) NiceRecSig+ niceDeclarations r x tel t (Just cs)+ <*> nice ds+ niceRecord _ _ _ = __IMPOSSIBLE__++ niceRecordSig :: PositivityCheck -> Declaration -> [Declaration] ->+ Nice [NiceDeclaration]+ niceRecordSig pc (RecordSig r x tel t) ds = do+ addLoneSig x (RecName pc $ parameters tel)+ fx <- getFixity x+ (NiceRecSig r fx PublicAccess x tel t pc :) <$> nice ds+ niceRecordSig _ _ _ = __IMPOSSIBLE__+ -- We could add a default type signature here, but at the moment we can't -- infer the type of a record or datatype, so better to just fail here. defaultTypeSig :: DataRecOrFun -> Name -> Maybe Expr -> Nice (Maybe Expr)@@ -698,18 +837,31 @@ | sameKind k k' -> throwError $ WrongParameters x | otherwise -> throwError $ WrongDefinition x k' k - dataOrRec mkDef mkSig niceD r x tel mt mcs = do+ dataOrRec :: forall a .+ PositivityCheck ->+ (Range -> Fixity' -> IsAbstract -> Name -> [LamBinding] ->+ PositivityCheck -> [NiceConstructor] -> NiceDeclaration) ->+ (Range -> Fixity' -> Access -> Name -> [LamBinding] -> Expr ->+ PositivityCheck -> NiceDeclaration) ->+ ([a] -> Nice [NiceDeclaration]) ->+ Range ->+ Name ->+ [LamBinding] ->+ Maybe Expr ->+ Maybe [a] ->+ Nice [NiceDeclaration]+ dataOrRec pc mkDef mkSig niceD r x tel mt mcs = do mds <- traverse niceD mcs f <- getFixity x return $ catMaybes $- [ mt <&> \ t -> mkSig (fuseRange x t) f PublicAccess x tel t- , mkDef r f ConcreteDef x (concatMap dropType tel) <$> mds+ [ mt <&> \ t -> mkSig (fuseRange x t) f PublicAccess x tel t pc+ , mkDef r f ConcreteDef x (concatMap dropType tel) pc <$> mds ] where dropType :: LamBinding -> [LamBinding]- dropType (DomainFull (TypedBindings _r (Common.Arg ai (TBind _ xs _)))) =+ dropType (DomainFull (TypedBindings _r (Arg ai (TBind _ xs _)))) = map (mergeHiding . fmap (DomainFree ai)) xs- dropType (DomainFull (TypedBindings _r (Common.Arg _ TLet{}))) = []+ dropType (DomainFull (TypedBindings _r (Arg _ TLet{}))) = [] dropType b@DomainFree{} = [b] -- Translate axioms@@ -721,9 +873,9 @@ TypeSig rel x t -> do fx <- getFixity x return [ Axiom (getRange d) fx PublicAccess NotInstanceDef rel x t ]- Field x argt -> do+ Field i x argt -> do fx <- getFixity x- return [ NiceField (getRange d) fx PublicAccess ConcreteDef x argt ]+ return [ NiceField (getRange d) i fx PublicAccess ConcreteDef x argt ] InstanceB r decls -> do instanceBlock r =<< niceAxioms InstanceBlock decls Pragma p@(RewritePragma r _) -> do@@ -736,9 +888,9 @@ -- Create a function definition. mkFunDef info termCheck x mt ds0 = do- cs <- mkClauses x $ expandEllipsis ds0+ cs <- mkClauses x (expandEllipsis ds0) False f <- getFixity x- return [ FunSig (fuseRange x t) f PublicAccess NotInstanceDef info termCheck x t+ return [ FunSig (fuseRange x t) f PublicAccess NotInstanceDef NotMacroDef info termCheck x t , FunDef (getRange ds0) ds0 f ConcreteDef termCheck x cs ] where t = case mt of@@ -750,51 +902,63 @@ expandEllipsis :: [Declaration] -> [Declaration] expandEllipsis [] = []- expandEllipsis (d@(FunClause Ellipsis{} _ _) : ds) =+ expandEllipsis (d@(FunClause Ellipsis{} _ _ _) : ds) = d : expandEllipsis ds- expandEllipsis (d@(FunClause lhs@(LHS p ps _ _) _ _) : ds) =+ expandEllipsis (d@(FunClause lhs@(LHS p ps _ _) _ _ _) : ds) = d : expand p ps ds where expand _ _ [] = []- expand p ps (FunClause (Ellipsis r ps' eqs []) rhs wh : ds) =- FunClause (LHS (setRange r p) ((setRange r ps) ++ ps') eqs []) rhs wh : expand p ps ds- expand p ps (FunClause (Ellipsis r ps' eqs es) rhs wh : ds) =- FunClause (LHS (setRange r p) ((setRange r ps) ++ ps') eqs es) rhs wh : expand p (ps ++ ps') ds- expand p ps (d@(FunClause (LHS _ _ _ []) _ _) : ds) =+ expand p ps (d@(Pragma (CatchallPragma r)) : ds) = d : expand p ps ds+ expand p ps (FunClause (Ellipsis r ps' eqs []) rhs wh ca : ds) =+ FunClause (LHS (setRange r p) ((setRange r ps) ++ ps') eqs []) rhs wh ca : expand p ps ds+ expand p ps (FunClause (Ellipsis r ps' eqs es) rhs wh ca : ds) =+ FunClause (LHS (setRange r p) ((setRange r ps) ++ ps') eqs es) rhs wh ca : expand p (ps ++ ps') ds+ expand p ps (d@(FunClause (LHS _ _ _ []) _ _ _) : ds) = d : expand p ps ds- expand _ _ (d@(FunClause (LHS p ps _ (_ : _)) _ _) : ds) =+ expand _ _ (d@(FunClause (LHS p ps _ (_ : _)) _ _ _) : ds) = d : expand p ps ds expand _ _ (_ : ds) = __IMPOSSIBLE__ expandEllipsis (_ : ds) = __IMPOSSIBLE__ - -- Turn function clauses into nice function clauses.- mkClauses :: Name -> [Declaration] -> Nice [Clause]- mkClauses _ [] = return []- mkClauses x (FunClause lhs@(LHS _ _ _ []) rhs wh : cs) =- (Clause x lhs rhs wh [] :) <$> mkClauses x cs- mkClauses x (FunClause lhs@(LHS _ ps _ es) rhs wh : cs) = do+ mkClauses :: Name -> [Declaration] -> Catchall -> Nice [Clause]+ mkClauses _ [] _ = return []+ mkClauses x (Pragma (CatchallPragma r) : cs) True = throwError $ InvalidCatchallPragma r+ mkClauses x (Pragma (CatchallPragma r) : cs) False = do+ when (null cs) $ throwError $ InvalidCatchallPragma r+ mkClauses x cs True+ mkClauses x (FunClause lhs@(LHS _ _ _ []) rhs wh ca : cs) catchall =+ (Clause x (ca || catchall) lhs rhs wh [] :) <$> mkClauses x cs False+ mkClauses x (FunClause lhs@(LHS _ ps _ es) rhs wh ca : cs) catchall = do when (null with) $ throwError $ MissingWithClauses x- wcs <- mkClauses x with- (Clause x lhs rhs wh wcs :) <$> mkClauses x cs'+ wcs <- mkClauses x with False+ (Clause x (ca || catchall) lhs rhs wh wcs :) <$> mkClauses x cs' False where- (with, cs') = span subClause cs+ (with, cs') = subClauses cs -- A clause is a subclause if the number of with-patterns is -- greater or equal to the current number of with-patterns plus the -- number of with arguments.- subClause (FunClause (LHS _ ps' _ _) _ _) =- length ps' >= length ps + length es- subClause (FunClause (Ellipsis _ ps' _ _) _ _) = True- subClause _ = __IMPOSSIBLE__- mkClauses x (FunClause lhs@Ellipsis{} rhs wh : cs) =- (Clause x lhs rhs wh [] :) <$> mkClauses x cs -- Will result in an error later.- mkClauses _ _ = __IMPOSSIBLE__+ subClauses :: [Declaration] -> ([Declaration],[Declaration])+ subClauses (c@(FunClause (LHS _ ps' _ _) _ _ _) : cs)+ | length ps' >= length ps + length es = mapFst (c:) (subClauses cs)+ | otherwise = ([], c:cs)+ subClauses (c@(FunClause (Ellipsis _ ps' _ _) _ _ _) : cs)+ = mapFst (c:) (subClauses cs)+ subClauses (c@(Pragma (CatchallPragma r)) : cs) = case subClauses cs of+ ([], cs') -> ([], c:cs')+ (cs, cs') -> (c:cs, cs')+ subClauses [] = ([],[])+ subClauses _ = __IMPOSSIBLE__+ mkClauses x (FunClause lhs@Ellipsis{} rhs wh ca : cs) catchall =+ (Clause x (ca || catchall) lhs rhs wh [] :) <$> mkClauses x cs False -- Will result in an error later.+ mkClauses _ _ _ = __IMPOSSIBLE__ -- for finding clauses for a type sig in mutual blocks couldBeFunClauseOf :: Maybe Fixity' -> Name -> Declaration -> Bool- couldBeFunClauseOf mFixity x (FunClause Ellipsis{} _ _) = True- couldBeFunClauseOf mFixity x (FunClause (LHS p _ _ _) _ _) =+ couldBeFunClauseOf mFixity x (Pragma (CatchallPragma{})) = True+ couldBeFunClauseOf mFixity x (FunClause Ellipsis{} _ _ _) = True+ couldBeFunClauseOf mFixity x (FunClause (LHS p _ _ _) _ _ _) = let pns = patternNames p xStrings = nameStringParts x@@ -849,11 +1013,15 @@ -- Check that there are no declarations that aren't allowed in old style mutual blocks case filter notAllowedInMutual ds of [] -> return ()- (NiceFunClause _ _ _ _ (FunClause lhs _ _)):_ -> throwError $ MissingTypeSignature lhs+ (NiceFunClause _ _ _ _ s_ (FunClause lhs _ _ _)):_ -> throwError $ MissingTypeSignature lhs d:_ -> throwError $ NotAllowedInMutual d let tcs = map termCheck ds tc <- combineTermChecks r tcs- return $ NiceMutual r tc $ sigs ++ other++ let pc :: PositivityCheck+ pc = all positivityCheckOldMutual ds++ return $ NiceMutual r tc pc $ sigs ++ other where -- Andreas, 2013-11-23 allow postulates in mutual blocks notAllowedInMutual Axiom{} = False@@ -865,23 +1033,48 @@ isTypeSig _ = False sigNames = [ (x, k) | LoneSig k x <- map declKind ds ]- defNames = [ (x, k) | LoneDef k x <- map declKind ds ]+ defNames = [ (x, k) | LoneDefs k xs <- map declKind ds, x <- xs ] -- compute the set difference with equality just on names loneNames = [ (x, k) | (x, k) <- sigNames, List.all ((x /=) . fst) defNames ] -- Andreas, 2013-02-28 (issue 804): -- do not termination check a mutual block if any of its -- inner declarations comes with a {-# NO_TERMINATION_CHECK #-}- termCheck (FunSig _ _ _ _ _ tc _ _) = tc- termCheck (FunDef _ _ _ _ tc _ _) = tc- termCheck (NiceMutual _ tc _) = tc+ termCheck (FunSig _ _ _ _ _ _ tc _ _) = tc+ termCheck (FunDef _ _ _ _ tc _ _) = tc+ -- ASR (28 December 2015): Is this equation necessary?+ termCheck (NiceMutual _ tc _ _) = __IMPOSSIBLE__ termCheck (NiceUnquoteDecl _ _ _ _ _ tc _ _) = tc- termCheck _ = TerminationCheck+ termCheck (NiceUnquoteDef _ _ _ _ tc _ _) = tc+ termCheck Axiom{} = TerminationCheck+ termCheck NiceField{} = TerminationCheck+ termCheck PrimitiveFunction{} = TerminationCheck+ termCheck NiceModule{} = TerminationCheck+ termCheck NiceModuleMacro{} = TerminationCheck+ termCheck NiceOpen{} = TerminationCheck+ termCheck NiceImport{} = TerminationCheck+ termCheck NicePragma{} = TerminationCheck+ termCheck NiceRecSig{} = TerminationCheck+ termCheck NiceDataSig{} = TerminationCheck+ termCheck NiceFunClause{} = TerminationCheck+ termCheck DataDef{} = TerminationCheck+ termCheck RecDef{} = TerminationCheck+ termCheck NicePatternSyn{} = TerminationCheck + -- ASR (26 December 2015): Do not positivity check a mutual+ -- block if any of its inner declarations comes with a+ -- NO_POSITIVITY_CHECK pragma. See Issue 1614.+ positivityCheckOldMutual :: NiceDeclaration -> PositivityCheck+ positivityCheckOldMutual (DataDef _ _ _ _ _ pc _) = pc+ positivityCheckOldMutual (NiceDataSig _ _ _ _ _ _ pc) = pc+ positivityCheckOldMutual (NiceMutual _ _ pc _) = __IMPOSSIBLE__+ positivityCheckOldMutual (NiceRecSig _ _ _ _ _ _ pc) = pc+ positivityCheckOldMutual (RecDef _ _ _ _ _ _ _ _ pc _) = pc+ positivityCheckOldMutual _ = True+ -- A mutual block cannot have a measure, -- but it can skip termination check. - abstractBlock _ [] = return [] abstractBlock r ds = do let (ds', anyChange) = runChange $ mapM mkAbstract ds@@ -893,25 +1086,26 @@ mkAbstract :: Updater NiceDeclaration mkAbstract d = case d of- NiceMutual r termCheck ds -> NiceMutual r termCheck <$> mapM mkAbstract ds- FunDef r ds f a tc x cs -> (\ a -> FunDef r ds f a tc x) <$> setAbstract a <*> mapM mkAbstractClause cs- DataDef r f a x ps cs -> (\ a -> DataDef r f a x ps) <$> setAbstract a <*> mapM mkAbstract cs- RecDef r f a x i c ps cs -> (\ a -> RecDef r f a x i c ps) <$> setAbstract a <*> mapM mkAbstract cs- NiceFunClause r p a termCheck d -> (\ a -> NiceFunClause r p a termCheck d) <$> setAbstract a+ NiceMutual r termCheck pc ds -> NiceMutual r termCheck pc <$> mapM mkAbstract ds+ FunDef r ds f a tc x cs -> (\ a -> FunDef r ds f a tc x) <$> setAbstract a <*> mapM mkAbstractClause cs+ DataDef r f a x ps pc cs -> (\ a -> DataDef r f a x ps pc) <$> setAbstract a <*> mapM mkAbstract cs+ RecDef r f a x i e c ps pc cs -> (\ a -> RecDef r f a x i e c ps pc) <$> setAbstract a <*> mapM mkAbstract cs+ NiceFunClause r p a termCheck catchall d -> (\ a -> NiceFunClause r p a termCheck catchall d) <$> setAbstract a -- no effect on fields or primitives, the InAbstract field there is unused- NiceField r f p _ x e -> return $ NiceField r f p AbstractDef x e+ NiceField r i f p _ x e -> return $ NiceField r i f p AbstractDef x e PrimitiveFunction r f p _ x e -> return $ PrimitiveFunction r f p AbstractDef x e NiceUnquoteDecl r f p i _ t x e -> return $ NiceUnquoteDecl r f p i AbstractDef t x e- NiceModule{} -> return $ d- NiceModuleMacro{} -> return $ d- Axiom{} -> return $ d- NicePragma{} -> return $ d- NiceOpen{} -> return $ d- NiceImport{} -> return $ d- FunSig{} -> return $ d- NiceRecSig{} -> return $ d- NiceDataSig{} -> return $ d- NicePatternSyn{} -> return $ d+ NiceUnquoteDef r f p _ t x e -> return $ NiceUnquoteDef r f p AbstractDef t x e+ NiceModule{} -> return d+ NiceModuleMacro{} -> return d+ Axiom{} -> return d+ NicePragma{} -> return d+ NiceOpen{} -> return d+ NiceImport{} -> return d+ FunSig{} -> return d+ NiceRecSig{} -> return d+ NiceDataSig{} -> return d+ NicePatternSyn{} -> return d setAbstract :: Updater IsAbstract setAbstract a = case a of@@ -919,9 +1113,9 @@ ConcreteDef -> dirty $ AbstractDef mkAbstractClause :: Updater Clause- mkAbstractClause (Clause x lhs rhs wh with) = do+ mkAbstractClause (Clause x catchall lhs rhs wh with) = do wh <- mkAbstractWhere wh- Clause x lhs rhs wh <$> mapM mkAbstractClause with+ Clause x catchall lhs rhs wh <$> mapM mkAbstractClause with mkAbstractWhere :: Updater WhereClause mkAbstractWhere NoWhere = return $ NoWhere@@ -943,16 +1137,17 @@ mkPrivate d = case d of Axiom r f p i rel x e -> (\ p -> Axiom r f p i rel x e) <$> setPrivate p- NiceField r f p a x e -> (\ p -> NiceField r f p a x e) <$> setPrivate p+ NiceField r i f p a x e -> (\ p -> NiceField r i f p a x e) <$> setPrivate p PrimitiveFunction r f p a x e -> (\ p -> PrimitiveFunction r f p a x e) <$> setPrivate p- NiceMutual r termCheck ds -> NiceMutual r termCheck <$> mapM mkPrivate ds+ NiceMutual r termCheck pc ds -> NiceMutual r termCheck pc <$> mapM mkPrivate ds NiceModule r p a x tel ds -> (\ p -> NiceModule r p a x tel ds) <$> setPrivate p NiceModuleMacro r p x ma op is -> (\ p -> NiceModuleMacro r p x ma op is) <$> setPrivate p- FunSig r f p i rel tc x e -> (\ p -> FunSig r f p i rel tc x e) <$> setPrivate p- NiceRecSig r f p x ls t -> (\ p -> NiceRecSig r f p x ls t) <$> setPrivate p- NiceDataSig r f p x ls t -> (\ p -> NiceDataSig r f p x ls t) <$> setPrivate p- NiceFunClause r p a termCheck d -> (\ p -> NiceFunClause r p a termCheck d) <$> setPrivate p+ FunSig r f p i m rel tc x e -> (\ p -> FunSig r f p i m rel tc x e) <$> setPrivate p+ NiceRecSig r f p x ls t pc -> (\ p -> NiceRecSig r f p x ls t pc) <$> setPrivate p+ NiceDataSig r f p x ls t pc -> (\ p -> NiceDataSig r f p x ls t pc) <$> setPrivate p+ NiceFunClause r p a termCheck catchall d -> (\ p -> NiceFunClause r p a termCheck catchall d) <$> setPrivate p NiceUnquoteDecl r f p i a t x e -> (\ p -> NiceUnquoteDecl r f p i a t x e) <$> setPrivate p+ NiceUnquoteDef r f p a t x e -> (\ p -> NiceUnquoteDef r f p a t x e) <$> setPrivate p NicePragma _ _ -> return $ d NiceOpen _ _ _ -> return $ d NiceImport _ _ _ _ _ -> return $ d@@ -969,9 +1164,9 @@ -- Andreas, 2012-11-22: Q: is this necessary? -- Are where clauses not always private? mkPrivateClause :: Updater Clause- mkPrivateClause (Clause x lhs rhs wh with) = do+ mkPrivateClause (Clause x catchall lhs rhs wh with) = do wh <- mkPrivateWhere wh- Clause x lhs rhs wh <$> mapM mkPrivateClause with+ Clause x catchall lhs rhs wh <$> mapM mkPrivateClause with mkPrivateWhere :: Updater WhereClause mkPrivateWhere NoWhere = return $ NoWhere@@ -983,35 +1178,44 @@ let (ds', anyChange) = runChange $ mapM mkInstance ds if anyChange then return ds' else throwError $ UselessInstance r - -- Make a declaration eligible for instance search. mkInstance :: Updater NiceDeclaration mkInstance d = case d of Axiom r f p i rel x e -> (\ i -> Axiom r f p i rel x e) <$> setInstance i- FunSig r f p i rel tc x e -> (\ i -> FunSig r f p i rel tc x e) <$> setInstance i+ FunSig r f p i m rel tc x e -> (\ i -> FunSig r f p i m rel tc x e) <$> setInstance i NiceUnquoteDecl r f p i a tc x e -> (\ i -> NiceUnquoteDecl r f p i a tc x e) <$> setInstance i- NiceMutual{} -> return $ d- NiceFunClause{} -> return $ d- FunDef{} -> return $ d- NiceField{} -> return $ d- PrimitiveFunction{} -> return $ d- NiceRecSig{} -> return $ d- NiceDataSig{} -> return $ d- NiceModuleMacro{} -> return $ d- NiceModule{} -> return $ d- NicePragma _ _ -> return $ d- NiceOpen _ _ _ -> return $ d- NiceImport _ _ _ _ _ -> return $ d- DataDef{} -> return $ d- RecDef{} -> return $ d- NicePatternSyn _ _ _ _ _ -> return $ d+ NiceMutual{} -> return d+ NiceFunClause{} -> return d+ FunDef{} -> return d+ NiceField{} -> return d -- Field instance are handled by the parser+ PrimitiveFunction{} -> return d+ NiceUnquoteDef{} -> return d+ NiceRecSig{} -> return d+ NiceDataSig{} -> return d+ NiceModuleMacro{} -> return d+ NiceModule{} -> return d+ NicePragma{} -> return d+ NiceOpen{} -> return d+ NiceImport{} -> return d+ DataDef{} -> return d+ RecDef{} -> return d+ NicePatternSyn{} -> return d setInstance :: Updater IsInstance setInstance i = case i of InstanceDef -> return i- _ -> dirty $ InstanceDef+ _ -> dirty $ InstanceDef + macroBlock r ds = mapM mkMacro ds++ mkMacro :: NiceDeclaration -> Nice NiceDeclaration+ mkMacro d =+ case d of+ FunSig r f p i _ rel tc x e -> return $ FunSig r f p i MacroDef rel tc x e+ FunDef{} -> return d+ _ -> throwError (BadMacroDef d)+ -- | Add more fixities. Throw an exception for multiple fixity declarations. -- OR: Disjoint union of fixity maps. Throws exception if not disjoint. @@ -1061,6 +1265,7 @@ Abstract _ ds' -> fixities ds' Private _ ds' -> fixities ds' InstanceB _ ds' -> fixities ds'+ Macro _ ds' -> fixities ds' -- All other declarations are ignored. -- We expand these boring cases to trigger a revisit -- in case the @Declaration@ type is extended in the future.@@ -1079,6 +1284,7 @@ ModuleMacro {} -> mempty Module {} -> mempty UnquoteDecl {} -> mempty+ UnquoteDef {} -> mempty Pragma {} -> mempty @@ -1089,34 +1295,35 @@ -- | (Approximately) convert a 'NiceDeclaration' back to a 'Declaration'. notSoNiceDeclaration :: NiceDeclaration -> Declaration notSoNiceDeclaration d =- case d of- Axiom _ _ _ _ rel x e -> TypeSig rel x e- NiceField _ _ _ _ x argt -> Field x argt- PrimitiveFunction r _ _ _ x e -> Primitive r [TypeSig defaultArgInfo x e]- NiceMutual r _ ds -> Mutual r $ map notSoNiceDeclaration ds- NiceModule r _ _ x tel ds -> Module r x tel ds- NiceModuleMacro r _ x ma o dir -> ModuleMacro r x ma o dir- NiceOpen r x dir -> Open r x dir- NiceImport r x as o dir -> Import r x as o dir- NicePragma _ p -> Pragma p- NiceRecSig r _ _ x bs e -> RecordSig r x bs e- NiceDataSig r _ _ x bs e -> DataSig r Inductive x bs e- NiceFunClause _ _ _ _ d -> d- FunSig _ _ _ _ rel tc x e -> TypeSig rel x e- FunDef r [d] _ _ _ _ _ -> d- FunDef r ds _ _ _ _ _ -> Mutual r ds -- Andreas, 2012-04-07 Hack!- DataDef r _ _ x bs cs -> Data r Inductive x bs Nothing $ map notSoNiceDeclaration cs- RecDef r _ _ x i c bs ds -> Record r x i (unThing <$> c) bs Nothing $ map notSoNiceDeclaration ds- where unThing (ThingWithFixity c _) = c- NicePatternSyn r _ n as p -> PatternSyn r n as p- NiceUnquoteDecl r _ _ _ _ _ x e -> UnquoteDecl r x e+ case d of+ Axiom _ _ _ _ rel x e -> TypeSig rel x e+ NiceField _ i _ _ _ x argt -> Field i x argt+ PrimitiveFunction r _ _ _ x e -> Primitive r [TypeSig defaultArgInfo x e]+ NiceMutual r _ _ ds -> Mutual r $ map notSoNiceDeclaration ds+ NiceModule r _ _ x tel ds -> Module r x tel ds+ NiceModuleMacro r _ x ma o dir -> ModuleMacro r x ma o dir+ NiceOpen r x dir -> Open r x dir+ NiceImport r x as o dir -> Import r x as o dir+ NicePragma _ p -> Pragma p+ NiceRecSig r _ _ x bs e _ -> RecordSig r x bs e+ NiceDataSig r _ _ x bs e _ -> DataSig r Inductive x bs e+ NiceFunClause _ _ _ _ _ d -> d+ FunSig _ _ _ _ _ rel tc x e -> TypeSig rel x e+ FunDef r [d] _ _ _ _ _ -> d+ FunDef r ds _ _ _ _ _ -> Mutual r ds -- Andreas, 2012-04-07 Hack!+ DataDef r _ _ x bs _ cs -> Data r Inductive x bs Nothing $ map notSoNiceDeclaration cs+ RecDef r _ _ x i e c bs _ ds -> Record r x i e (unThing <$> c) bs Nothing $ map notSoNiceDeclaration ds+ where unThing (ThingWithFixity c _, inst) = (c, inst)+ NicePatternSyn r _ n as p -> PatternSyn r n as p+ NiceUnquoteDecl r _ _ _ _ _ x e -> UnquoteDecl r x e+ NiceUnquoteDef r _ _ _ _ x e -> UnquoteDef r x e -- | Has the 'NiceDeclaration' a field of type 'IsAbstract'? niceHasAbstract :: NiceDeclaration -> Maybe IsAbstract niceHasAbstract d = case d of Axiom{} -> Nothing- NiceField _ _ _ a _ _ -> Just a+ NiceField _ _ _ _ a _ _ -> Just a PrimitiveFunction _ _ _ a _ _ -> Just a NiceMutual{} -> Nothing NiceModule _ _ a _ _ _ -> Just a@@ -1126,10 +1333,11 @@ NicePragma{} -> Nothing NiceRecSig{} -> Nothing NiceDataSig{} -> Nothing- NiceFunClause _ _ a _ _ -> Just a+ NiceFunClause _ _ a _ _ _ -> Just a FunSig{} -> Nothing FunDef _ _ _ a _ _ _ -> Just a- DataDef _ _ a _ _ _ -> Just a- RecDef _ _ a _ _ _ _ _ -> Just a+ DataDef _ _ a _ _ _ _ -> Just a+ RecDef _ _ a _ _ _ _ _ _ _ -> Just a NicePatternSyn{} -> Nothing NiceUnquoteDecl _ _ _ _ a _ _ _ -> Just a+ NiceUnquoteDef _ _ _ a _ _ _ -> Just a
src/full/Agda/Syntax/Concrete/Generic.hs view
@@ -14,9 +14,11 @@ import Data.Monoid import Data.Foldable -import Agda.Syntax.Common hiding (Arg)+import Agda.Syntax.Common import Agda.Syntax.Concrete +import Agda.Utils.Either+ #include "undefined.h" import Agda.Utils.Impossible @@ -24,11 +26,19 @@ -- -- Note: does not go into patterns! class ExprLike a where- mapExpr :: (Expr -> Expr) -> a -> a+ mapExpr :: (Expr -> Expr) -> a -> a -- ^ This corresponds to 'map'.- traverseExpr :: (Monad m, Applicative m) => (Expr -> m Expr) -> a -> m a++ traverseExpr+#if __GLASGOW_HASKELL__ <= 708+ :: (Applicative m, Monad m)+#else+ :: Monad m+#endif+ => (Expr -> m Expr) -> a -> m a -- ^ This corresponds to 'mapM'.- foldExpr :: Monoid m => (Expr -> m) -> a -> m++ foldExpr :: Monoid m => (Expr -> m) -> a -> m -- ^ This is a reduce. traverseExpr = __IMPOSSIBLE__ -- TODO: implement!@@ -42,6 +52,9 @@ instance ExprLike QName where mapExpr f = id +instance ExprLike Bool where+ mapExpr f = id+ -- * Instances for functors. instance ExprLike a => ExprLike (Named name a) where@@ -64,6 +77,16 @@ traverseExpr = traverse . traverseExpr foldExpr = foldMap . foldExpr +instance ExprLike a => ExprLike (MaybePlaceholder a) where+ mapExpr = fmap . mapExpr+ traverseExpr = traverse . traverseExpr+ foldExpr = foldMap . foldExpr++instance (ExprLike a, ExprLike b) => ExprLike (Either a b) where+ mapExpr f = mapEither (mapExpr f) (mapExpr f)+ traverseExpr f = traverseEither (traverseExpr f) (traverseExpr f)+ foldExpr f = either (foldExpr f) (foldExpr f)+ instance ExprLike a => ExprLike (TypedBinding' a) where mapExpr = fmap . mapExpr traverseExpr = traverse . traverseExpr@@ -89,6 +112,11 @@ traverseExpr f (x, y, z) = (,,) <$> traverseExpr f x <*> traverseExpr f y <*> traverseExpr f z foldExpr f (x, y, z) = foldExpr f x `mappend` foldExpr f y `mappend` foldExpr f z +instance (ExprLike a, ExprLike b, ExprLike c, ExprLike d) => ExprLike (a, b, c, d) where+ mapExpr f (x, y, z, w) = (mapExpr f x, mapExpr f y, mapExpr f z, mapExpr f w)+ traverseExpr f (x, y, z, w) = (,,,) <$> traverseExpr f x <*> traverseExpr f y <*> traverseExpr f z <*> traverseExpr f w+ foldExpr f (x, y, z, w) = foldExpr f x `mappend` foldExpr f y `mappend` foldExpr f z `mappend` foldExpr f w+ -- * Interesting instances instance ExprLike Expr where@@ -120,7 +148,7 @@ Dot r e -> f $ Dot r $ mapE e ETel tel -> f $ ETel $ mapE tel QuoteGoal r x e -> f $ QuoteGoal r x $ mapE e- QuoteContext r x e -> f $ QuoteContext r x $ mapE e+ QuoteContext r -> f $ e0 Tactic r e es -> f $ Tactic r (mapE e) $ mapE es Quote{} -> f $ e0 QuoteTerm{} -> f $ e0@@ -129,6 +157,16 @@ Equal{} -> f $ e0 where mapE e = mapExpr f e +instance ExprLike FieldAssignment where+ mapExpr f (FieldAssignment x e) = FieldAssignment x (mapExpr f e)+ traverseExpr f (FieldAssignment x e) = (\e' -> FieldAssignment x e') <$> traverseExpr f e+ foldExpr f (FieldAssignment _ e) = foldExpr f e++instance ExprLike ModuleAssignment where+ mapExpr f (ModuleAssignment m es i) = ModuleAssignment m (mapExpr f es) i+ traverseExpr f (ModuleAssignment m es i) = (\es' -> ModuleAssignment m es' i) <$> traverseExpr f es+ foldExpr f (ModuleAssignment m es i) = foldExpr f es+ instance ExprLike a => ExprLike (OpApp a) where mapExpr f e0 = case e0 of SyntaxBindingLambda r bs e -> SyntaxBindingLambda r (mapE bs) $ mapE e@@ -161,12 +199,12 @@ instance ExprLike Declaration where mapExpr f e0 = case e0 of TypeSig ai x e -> TypeSig ai x $ mapE e- Field x e -> Field x $ mapE e- FunClause lhs rhs wh -> FunClause (mapE lhs) (mapE rhs) $ mapE wh+ Field i x e -> Field i x $ mapE e+ FunClause lhs rhs wh ca -> FunClause (mapE lhs) (mapE rhs) (mapE wh) (mapE ca) DataSig r ind x bs e -> DataSig r ind x (mapE bs) $ mapE e Data r ind n bs e cs -> Data r ind n (mapE bs) (mapE e) $ mapE cs RecordSig r ind bs e -> RecordSig r ind (mapE bs) $ mapE e- Record r n ind c tel e ds -> Record r n ind c (mapE tel) (mapE e) $ mapE ds+ Record r n ind eta c tel e ds -> Record r n ind eta c (mapE tel) (mapE e) $ mapE ds Infix{} -> e0 Syntax{} -> e0 PatternSyn{} -> e0@@ -174,6 +212,7 @@ Abstract r ds -> Abstract r $ mapE ds Private r ds -> Private r $ mapE ds InstanceB r ds -> InstanceB r $ mapE ds+ Macro r ds -> Macro r $ mapE ds Postulate r ds -> Postulate r $ mapE ds Primitive r ds -> Primitive r $ mapE ds Open{} -> e0@@ -181,6 +220,7 @@ ModuleMacro r n es op dir -> ModuleMacro r n (mapE es) op dir Module r n tel ds -> Module r n (mapE tel) $ mapE ds UnquoteDecl r x e -> UnquoteDecl r x (mapE e)+ UnquoteDef r x e -> UnquoteDef r x (mapE e) Pragma{} -> e0 where mapE e = mapExpr f e
src/full/Agda/Syntax/Concrete/Name.hs view
@@ -14,7 +14,6 @@ import Control.Applicative import Data.ByteString.Char8 (ByteString)-import qualified Data.ByteString.Char8 as ByteString import Data.List import Data.Typeable (Typeable) @@ -41,12 +40,10 @@ in different locations are equal. -} data Name- = Name !Range [NamePart] -- ^ A (mixfix) identifier.- | NoName !Range NameId -- ^ @_@.+ = Name Range [NamePart] -- ^ A (mixfix) identifier.+ | NoName Range NameId -- ^ @_@. deriving (Typeable) -instance NFData Name where rnf x = seq x ()- instance Underscore Name where underscore = NoName noRange __IMPOSSIBLE__ isUnderscore NoName{} = True@@ -125,18 +122,37 @@ nameParts :: Name -> [NamePart] nameParts (Name _ ps) = ps-nameParts (NoName _ _) = [Hole]+nameParts (NoName _ _) = [Id "_"] -- To not return an empty list nameStringParts :: Name -> [RawName] nameStringParts n = [ s | Id s <- nameParts n ] -- | Parse a string to parts of a concrete name.+--+-- Note: @stringNameParts "_" == [Id "_"] == nameParts NoName{}@ stringNameParts :: String -> [NamePart]-stringNameParts "" = []-stringNameParts ('_':s) = Hole : stringNameParts s-stringNameParts s | (x, s') <- break (== '_') s = Id (stringToRawName x) : stringNameParts s'+stringNameParts "_" = [Id "_"] -- NoName+stringNameParts s = loop s where+ loop "" = []+ loop ('_':s) = Hole : loop s+ loop s | (x, s') <- break (== '_') s = Id (stringToRawName x) : loop s' +-- | Number of holes in a 'Name' (i.e., arity of a mixfix-operator).+class NumHoles a where+ numHoles :: a -> Int++instance NumHoles [NamePart] where+ numHoles = length . filter (== Hole)++instance NumHoles Name where+ numHoles NoName{} = 0+ numHoles (Name _ parts) = numHoles parts++instance NumHoles QName where+ numHoles (QName x) = numHoles x+ numHoles (Qual _ x) = numHoles x+ -- | Is the name an operator? isOperator :: Name -> Bool@@ -217,7 +233,6 @@ noName_ :: Name noName_ = noName noRange --- | @noName r = 'Name' r ['Hole']@ noName :: Range -> Name noName r = NoName r (NameId 0 0) @@ -341,3 +356,21 @@ instance KillRange Name where killRange (Name r ps) = Name (killRange r) ps killRange (NoName r i) = NoName (killRange r) i++------------------------------------------------------------------------+-- * NFData instances+------------------------------------------------------------------------++-- | Ranges are not forced.++instance NFData Name where+ rnf (Name _ ns) = rnf ns+ rnf (NoName _ n) = rnf n++instance NFData NamePart where+ rnf Hole = ()+ rnf (Id s) = rnf s++instance NFData QName where+ rnf (Qual a b) = rnf a `seq` rnf b+ rnf (QName a) = rnf a
src/full/Agda/Syntax/Concrete/Operators.hs view
@@ -1,4 +1,6 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE GADTs #-} {-# LANGUAGE ScopedTypeVariables #-} {-| The parser doesn't know about operators and parses everything as normal@@ -17,11 +19,13 @@ , parsePatternSyn ) where +import Control.Arrow ((***), (&&&), first, second) import Control.DeepSeq import Control.Applicative import Control.Monad import Data.Either (partitionEithers)+import qualified Data.Foldable as Fold import Data.Function import Data.List import Data.Maybe@@ -33,8 +37,7 @@ import qualified Data.Traversable as Trav import Agda.Syntax.Concrete.Pretty ()-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Concrete hiding (appView) import Agda.Syntax.Concrete.Operators.Parser import qualified Agda.Syntax.Abstract.Name as A@@ -50,12 +53,15 @@ import Agda.TypeChecking.Monad.Options import Agda.Utils.Either-import Agda.Utils.ReadP+import Agda.Utils.Parser.MemoisedCPS (memoise)+import Agda.Utils.Pretty #if MIN_VERSION_base(4,8,0) import Agda.Utils.List hiding ( uncons ) #else import Agda.Utils.List #endif+import Agda.Utils.Trie (Trie)+import qualified Agda.Utils.Trie as Trie #include "undefined.h" import Agda.Utils.Impossible@@ -96,7 +102,7 @@ localNames :: FlatScope -> ScopeM ([QName], [NewNotation]) localNames flat = do let defs = getDefinedNames allKindsOfNames flat- locals <- notShadowedLocals <$> getLocalVars+ locals <- nubOn fst . notShadowedLocals <$> getLocalVars -- Note: Debug printout aligned with the one in buildParsers. reportSLn "scope.operators" 50 $ unlines [ "flat = " ++ show flat@@ -107,7 +113,7 @@ localNames = Set.fromList $ map notaName localNots otherNots = filter (\n -> not (Set.member (notaName n) localNames)) (concat defs)- return $ split $ localNots ++ otherNots+ return $ second (map useDefaultFixity) $ split $ localNots ++ otherNots where localOp (x, y) = namesToNotation (QName x) y split ops = partitionEithers $ concatMap opOrNot ops@@ -119,109 +125,373 @@ -- but @pArgs@ is used to convert module application -- from concrete to abstract syntax. data Parsers e = Parsers- { pTop :: ReadP e e- , pApp :: ReadP e e- , pArgs :: ReadP e [NamedArg e]- , pNonfix :: ReadP e e- , pAtom :: ReadP e e+ { pTop :: Parser e e+ , pApp :: Parser e e+ , pArgs :: Parser e [NamedArg e]+ , pNonfix :: Parser e e+ , pAtom :: Parser e e } -data UseBoundNames = UseBoundNames | DontUseBoundNames+data ExprKind = IsPattern | IsExpr+ deriving (Eq, Show) -{-| Builds parser for operator applications from all the operators and function- symbols in scope. When parsing a pattern we use 'DontUseBoundNames'.+-- | Builds a parser for operator applications from all the operators+-- and function symbols in scope.+--+-- When parsing a pattern we do not use bound names. The effect is+-- that operator parts (that are not constructor parts) can be used as+-- atomic names in the pattern (so they can be rebound). See+-- @test/succeed/OpBind.agda@ for an example.+--+-- When parsing a pattern we also disallow the use of sections, mainly+-- because there is little need for sections in patterns. Note that+-- sections are parsed by splitting up names into multiple tokens+-- (@_+_@ is replaced by @_@, @+@ and @_@), and if we were to support+-- sections in patterns, then we would have to accept certain such+-- sequences of tokens as single pattern variables.+--+-- The list of names must include every name part in the+-- expression/pattern to be parsed (excluding name parts inside things+-- like parenthesised subexpressions that are treated as atoms). The+-- list is used to optimise the parser. For instance, a given notation+-- is only included in the generated grammar if all of the notation's+-- name parts are present in the list of names.+--+-- The returned list contains all operators/notations/sections that+-- were used to generate the grammar. - The effect is that operator parts (that are not constructor parts)- can be used as atomic names in the pattern (so they can be- rebound). See test/succeed/OpBind.agda for an example.+buildParsers ::+ forall e. IsExpr e =>+ Range -> FlatScope -> ExprKind -> [QName] ->+ ScopeM (ParseSections, [NotationSection], Parsers e)+buildParsers r flat kind exprNames = do+ (names, ops) <- localNames flat - To avoid problems with operators of the same precedence but different- associativity we decide (completely arbitrary) to fix the precedences of- operators with the same given precedence in the following order (from- loosest to hardest):+ let -- All names.+ namesInExpr :: Set QName+ namesInExpr = Set.fromList exprNames - - non-associative+ partListsInExpr' = map (nameParts . unqualify) $+ Set.toList namesInExpr - - left associative+ partListTrie f =+ foldr (\ps -> Trie.union (Trie.everyPrefix ps ()))+ Trie.empty+ (f partListsInExpr') - - right associative+ -- All names.+ partListsInExpr :: Trie NamePart ()+ partListsInExpr = partListTrie id - - prefix+ -- All names, with the name parts in reverse order.+ reversedPartListsInExpr :: Trie NamePart ()+ reversedPartListsInExpr = partListTrie (map reverse) - - postfix+ -- Every regular name part (not holes etc.).+ partsInExpr :: Set RawName+ partsInExpr =+ Set.fromList [ s | Id s <- concat partListsInExpr' ] - This has the effect that if you mix operators with the same precedence but- different associativity the parser won't complain. One could argue that- this is a Bad Thing, but since it's not trivial to implement the check it- will stay this way until people start complaining about it.--}-buildParsers :: forall e. IsExpr e => Range -> FlatScope -> UseBoundNames -> ScopeM (Parsers e)-buildParsers r flat use = do- (names, ops) <- localNames flat- let cons = getDefinedNames [ConName, PatternSynName] flat- reportSLn "scope.operators" 50 $ unlines- [ "names = " ++ show names- , "ops = " ++ show ops- , "cons = " ++ show cons ]- let conparts = Set.fromList $ concatMap notationNames $ concat cons- opsparts = Set.fromList $ concatMap notationNames ops- allParts = Set.union conparts opsparts- connames = Set.fromList $ map (notaName . head) cons- (non, fix) = partition nonfix ops- set = Set.fromList names- isAtom x = case use of- UseBoundNames -> not (Set.member x allParts) || Set.member x set- DontUseBoundNames -> not (Set.member x conparts) || Set.member x connames+ -- Are all name parts present in the expression?+ partsPresent n =+ [ Set.member p partsInExpr+ | p <- stringParts (notation n)+ ]++ addHole True p = [Hole, Id p]+ addHole False p = [Id p]++ -- Is the first identifier part present in n present in the+ -- expression, without any preceding name parts, except for a+ -- leading underscore iff withHole is True?+ firstPartPresent withHole n =+ Trie.member (addHole withHole p) partListsInExpr+ where+ p = case n of+ NormalHole{} : IdPart p : _ -> p+ IdPart p : _ -> p+ _ -> __IMPOSSIBLE__++ -- Is the last identifier part present in n present in the+ -- expression, without any succeeding name parts, except for a+ -- trailing underscore iff withHole is True?+ lastPartPresent withHole n =+ Trie.member (addHole withHole p) reversedPartListsInExpr+ where+ p = case reverse n of+ NormalHole{} : IdPart p : _ -> p+ IdPart p : _ -> p+ _ -> __IMPOSSIBLE__++ -- | Are the initial and final identifier parts present with+ -- the right mix of leading and trailing underscores?+ correctUnderscores :: Bool -> Bool -> Notation -> Bool+ correctUnderscores withInitialHole withFinalHole n =+ firstPartPresent withInitialHole n+ &&+ lastPartPresent withFinalHole n++ -- Should be used with operators (not sections) and notations+ -- coming from syntax declarations.+ filterCorrectUnderscoresOp :: [NewNotation] -> [NotationSection]+ filterCorrectUnderscoresOp ns =+ [ noSection n+ | n <- ns+ , if notaIsOperator n+ then correctUnderscores False False (notation n)+ else all (\s -> Trie.member [Id s] partListsInExpr)+ (stringParts $ notation n)+ ]++ -- Should be used with sections.+ correctUnderscoresSect :: NotationKind -> Notation -> Bool+ correctUnderscoresSect k n = case (k, notationKind n) of+ (PrefixNotation, InfixNotation) -> correctUnderscores True False n+ (PostfixNotation, InfixNotation) -> correctUnderscores False True n+ (NonfixNotation, InfixNotation) -> correctUnderscores True True n+ (NonfixNotation, PrefixNotation) -> correctUnderscores False True n+ (NonfixNotation, PostfixNotation) -> correctUnderscores True False n+ _ -> __IMPOSSIBLE__++ -- If "or" is replaced by "and" in conParts/allParts below,+ -- then the misspelled operator application "if x thenn x else+ -- x" can be parsed as "if" applied to five arguments,+ -- resulting in a confusing error message claiming that "if"+ -- is not in scope.++ (non, fix) = partition nonfix (filter (and . partsPresent) ops)++ cons = getDefinedNames [ConName, PatternSynName] flat+ conNames = Set.fromList $+ filter (flip Set.member namesInExpr) $+ map (notaName . head) cons+ conParts = Set.fromList $+ concatMap notationNames $+ filter (or . partsPresent) $+ concat cons++ allNames = Set.fromList $+ filter (flip Set.member namesInExpr) names+ allParts = Set.union conParts+ (Set.fromList $+ concatMap notationNames $+ filter (or . partsPresent) ops)++ isAtom x = case kind of+ IsExpr -> not (Set.member x allParts) || Set.member x allNames+ IsPattern -> not (Set.member x conParts) || Set.member x conNames -- If string is a part of notation, it cannot be used as an identifier, -- unless it is also used as an identifier. See issue 307. - let chain = foldr ( $ )+ parseSections = case kind of+ IsPattern -> DoNotParseSections+ IsExpr -> ParseSections - return $ Data.Function.fix $ \p -> Parsers- { pTop = chain (pApp p) (concatMap (mkP (pTop p)) (order fix))- , pApp = appP (pNonfix p) (pArgs p)+ let nonClosedSections l ns =+ case parseSections of+ DoNotParseSections -> []+ ParseSections ->+ [ NotationSection n k (Just l) True+ | n <- ns+ , isinfix n && notaIsOperator n+ , k <- [PrefixNotation, PostfixNotation]+ , correctUnderscoresSect k (notation n)+ ]++ unrelatedOperators :: [NotationSection]+ unrelatedOperators =+ filterCorrectUnderscoresOp unrelated+ +++ nonClosedSections Unrelated unrelated+ where+ unrelated = filter ((== Unrelated) . level) fix++ nonWithSections :: [NotationSection]+ nonWithSections =+ map (\s -> s { sectLevel = Nothing })+ (filterCorrectUnderscoresOp non)+ +++ case parseSections of+ DoNotParseSections -> []+ ParseSections ->+ [ NotationSection n NonfixNotation Nothing True+ | n <- fix+ , notaIsOperator n+ , correctUnderscoresSect NonfixNotation (notation n)+ ]++ -- The triples have the form (level, operators). The lowest+ -- level comes first.+ relatedOperators :: [(Integer, [NotationSection])]+ relatedOperators =+ map (\((l, ns) : rest) -> (l, ns ++ concat (map snd rest))) .+ groupBy ((==) `on` fst) .+ sortBy (compare `on` fst) .+ mapMaybe (\n -> case level n of+ Unrelated -> Nothing+ r@(Related l) ->+ Just (l, filterCorrectUnderscoresOp [n] +++ nonClosedSections r [n])) $+ fix++ everything :: [NotationSection]+ everything =+ concatMap snd relatedOperators +++ unrelatedOperators +++ nonWithSections++ reportSLn "scope.operators" 50 $ unlines+ [ "unrelatedOperators = " ++ show unrelatedOperators+ , "nonWithSections = " ++ show nonWithSections+ , "relatedOperators = " ++ show relatedOperators+ ]++ return (parseSections, everything, Data.Function.fix $ \p -> Parsers+ { pTop = memoise TopK $+ Fold.asum $+ foldr ($) (pApp p)+ (map (\(l, ns) higher ->+ mkP (Right l) parseSections+ (pTop p) ns higher True)+ relatedOperators) :+ map (\(k, n) ->+ mkP (Left k) parseSections+ (pTop p) [n] (pApp p) False)+ (zip [0..] unrelatedOperators)+ , pApp = memoise AppK $ appP (pNonfix p) (pArgs p) , pArgs = argsP (pNonfix p)- , pNonfix = chain (pAtom p) (map (nonfixP . opP (pTop p)) non)+ , pNonfix = memoise NonfixK $+ Fold.asum $+ pAtom p :+ flip map nonWithSections (\sect ->+ let n = sectNotation sect++ inner :: forall k. NK k ->+ Parser e (OperatorType k e)+ inner = opP parseSections (pTop p) n+ in+ case notationKind (notation n) of+ InfixNotation ->+ flip ($) <$> placeholder Beginning+ <*> inner In+ <*> placeholder End+ PrefixNotation ->+ inner Pre <*> placeholder End+ PostfixNotation ->+ flip ($) <$> placeholder Beginning+ <*> inner Post+ NonfixNotation -> inner Non+ NoNotation -> __IMPOSSIBLE__) , pAtom = atomP isAtom- }+ }) where- level :: NewNotation -> Integer+ level :: NewNotation -> PrecedenceLevel level = fixityLevel . notaFixity - nonfix, isprefix, ispostfix :: NewNotation -> Bool+ nonfix, isinfix, isprefix, ispostfix :: NewNotation -> Bool nonfix = (== NonfixNotation) . notationKind . notation+ isinfix = (== InfixNotation) . notationKind . notation isprefix = (== PrefixNotation) . notationKind . notation ispostfix = (== PostfixNotation) . notationKind . notation - isinfix :: Associativity -> NewNotation -> Bool- isinfix ass syn =- notationKind (notation syn) == InfixNotation- &&- fixityAssoc (notaFixity syn) == ass+ isPrefix, isPostfix :: NotationSection -> Bool+ isPrefix = (== PrefixNotation) . sectKind+ isPostfix = (== PostfixNotation) . sectKind - -- | Group operators by precedence level- order :: [NewNotation] -> [[NewNotation]]- order = groupBy ((==) `on` level) . sortBy (compare `on` level)+ isInfix :: Associativity -> NotationSection -> Bool+ isInfix ass s =+ sectKind s == InfixNotation+ &&+ fixityAssoc (notaFixity (sectNotation s)) == ass - -- | Each element of the returned list takes the parser for an- -- expression of higher precedence as parameter.- mkP :: ReadP e e -> [NewNotation] -> [ReadP e e -> ReadP e e]- mkP p0 ops = case concat [infx, inlfx, inrfx, prefx, postfx] of- [] -> [id]- fs -> fs+ mkP :: Either Integer Integer+ -- ^ Memoisation key.+ -> ParseSections+ -> Parser e e+ -> [NotationSection]+ -> Parser e e+ -- ^ A parser for an expression of higher precedence.+ -> Bool+ -- ^ Include the \"expression of higher precedence\"+ -- parser as one of the choices?+ -> Parser e e+ mkP key parseSections p0 ops higher includeHigher =+ memoise (NodeK key) $+ Fold.asum $+ (if includeHigher then (higher :) else id) $+ catMaybes [nonAssoc, preRights, postLefts] where- inlfx = fixP infixlP (isinfix LeftAssoc)- inrfx = fixP infixrP (isinfix RightAssoc)- infx = fixP infixP (isinfix NonAssoc)- prefx = fixP prefixP isprefix- postfx = fixP postfixP ispostfix+ choice :: forall k.+ NK k -> [NotationSection] ->+ Parser e (OperatorType k e)+ choice k =+ Fold.asum .+ map (\sect ->+ let n = sectNotation sect - fixP :: (ReadP e (NewNotation,Range,[e]) -> ReadP e e -> ReadP e e) -> (NewNotation -> Bool) -> [ReadP e e -> ReadP e e]- fixP f g =- case filter g ops of- [] -> []- ops -> [ f $ choice $ map (opP p0) ops ]+ inner :: forall k.+ NK k -> Parser e (OperatorType k e)+ inner = opP parseSections p0 n+ in+ case k of+ In -> inner In + Pre -> if isinfix n || ispostfix n+ then flip ($) <$> placeholder Beginning+ <*> inner In+ else inner Pre++ Post -> if isinfix n || isprefix n+ then flip <$> inner In+ <*> placeholder End+ else inner Post++ Non -> __IMPOSSIBLE__)++ nonAssoc :: Maybe (Parser e e)+ nonAssoc = case filter (isInfix NonAssoc) ops of+ [] -> Nothing+ ops -> Just $ do+ x <- NoPlaceholder <$> higher+ f <- choice In ops+ y <- NoPlaceholder <$> higher+ return (f x y)++ or p1 [] p2 [] = Nothing+ or p1 [] p2 ops2 = Just (p2 ops2)+ or p1 ops1 p2 [] = Just (p1 ops1)+ or p1 ops1 p2 ops2 = Just (p1 ops1 <|> p2 ops2)++ preRight :: Maybe (Parser e (MaybePlaceholder e -> e))+ preRight =+ or (choice Pre)+ (filter isPrefix ops)+ (\ops -> flip ($) <$> (NoPlaceholder <$> higher)+ <*> choice In ops)+ (filter (isInfix RightAssoc) ops)++ preRights :: Maybe (Parser e e)+ preRights = do+ preRight <- preRight+ return $ Data.Function.fix $ \preRights ->+ preRight <*> (NoPlaceholder <$> (preRights <|> higher))++ postLeft :: Maybe (Parser e (MaybePlaceholder e -> e))+ postLeft =+ or (choice Post)+ (filter isPostfix ops)+ (\ops -> flip <$> choice In ops+ <*> (NoPlaceholder <$> higher))+ (filter (isInfix LeftAssoc) ops)++ postLefts :: Maybe (Parser e e)+ postLefts = do+ postLeft <- postLeft+ return $ Data.Function.fix $ \postLefts ->+ memoise (PostLeftsK key) $+ flip ($) <$> (NoPlaceholder <$> (postLefts <|> higher))+ <*> postLeft+ --------------------------------------------------------------------------- -- * Helpers for pattern and lhs parsing ---------------------------------------------------------------------------@@ -244,10 +514,11 @@ --------------------------------------------------------------------------- -- | Returns the list of possible parses.-parsePat :: ReadP Pattern Pattern -> Pattern -> [Pattern]+parsePat ::+ (ParseSections, Parser Pattern Pattern) -> Pattern -> [Pattern] parsePat prs p = case p of- AppP p (Common.Arg info q) ->- fullParen' <$> (AppP <$> parsePat prs p <*> (Common.Arg info <$> traverse (parsePat prs) q))+ AppP p (Arg info q) ->+ fullParen' <$> (AppP <$> parsePat prs p <*> (Arg info <$> traverse (parsePat prs) q)) RawAppP _ ps -> fullParen' <$> (parsePat prs =<< parse prs ps) OpAppP r d ns ps -> fullParen' . OpAppP r d ns <$> (mapM . traverse . traverse) (parsePat prs) ps HiddenP _ _ -> fail "bad hidden argument"@@ -260,6 +531,7 @@ LitP _ -> return p QuoteP _ -> return p IdentP _ -> return p+ RecP r fs -> RecP r <$> mapM (traverse (parsePat prs)) fs {- Implement parsing of copattern left hand sides, e.g.@@ -298,21 +570,35 @@ - the applied patterns -} -type ParseLHS = Either Pattern (Name, LHSCore)+type ParseLHS = Either Pattern (QName, LHSCore) -parseLHS' :: LHSOrPatSyn -> Maybe Name -> Pattern -> ScopeM ParseLHS+-- | The returned list contains all operators/notations/sections that+-- were used to generate the grammar.++parseLHS' ::+ LHSOrPatSyn -> Maybe QName -> Pattern ->+ ScopeM (ParseLHS, [NotationSection]) parseLHS' lhsOrPatSyn top p = do- let ms = qualifierModules $ patternQNames p+ let names = patternQNames p+ ms = qualifierModules names flat <- flattenScope ms <$> getScope- parsers <- buildParsers (getRange p) flat DontUseBoundNames- let patP = pTop parsers+ (parseSections, ops, parsers) <-+ buildParsers (getRange p) flat IsPattern names+ let patP = (parseSections, pTop parsers) let cons = getNames [ConName, PatternSynName] flat let flds = getNames [FldName] flat- case [ res | p' <- force $ parsePat patP p+ case [ res | let result = parsePat patP p+ , p' <- foldr seq () result `seq` result , res <- validPattern (PatternCheckConfig top cons flds) p' ] of- [(p,lhs)] -> return lhs- [] -> typeError $ NoParseForLHS lhsOrPatSyn p- rs -> typeError $ AmbiguousParseForLHS lhsOrPatSyn p $+ [(p,lhs)] -> do reportSDoc "scope.operators" 50 $ return $+ text "Parsed lhs:" <+> pretty lhs+ return (lhs, ops)+ [] -> typeError $ OperatorChangeMessage+ $ OperatorInformation ops+ $ NoParseForLHS lhsOrPatSyn p+ rs -> typeError $ OperatorChangeMessage+ $ OperatorInformation ops+ $ AmbiguousParseForLHS lhsOrPatSyn p $ map (fullParen . fst) rs where getNames kinds flat =@@ -327,7 +613,7 @@ -- | Name sets for classifying a pattern. data PatternCheckConfig = PatternCheckConfig- { topName :: Maybe Name -- ^ name of defined symbol+ { topName :: Maybe QName -- ^ name of defined symbol , conNames :: [QName] -- ^ valid constructor names , fldNames :: [QName] -- ^ valid field names }@@ -338,12 +624,12 @@ case patternAppView p of -- case @f ps@- Common.Arg _ (Named _ (IdentP x@(QName f))) : ps | Just f == topName conf -> do+ Arg _ (Named _ (IdentP x)) : ps | Just x == topName conf -> do guard $ all validPat ps- return $ Right (f, LHSHead f ps)+ return $ Right (x, LHSHead x ps) -- case @d ps@- Common.Arg _ (Named _ (IdentP x)) : ps | x `elem` fldNames conf -> do+ Arg _ (Named _ (IdentP x)) : ps | x `elem` fldNames conf -> do -- ps0 :: [NamedArg ParseLHS] ps0 <- mapM classPat ps let (ps1, rest) = span (isLeft . namedArg) ps0@@ -363,18 +649,20 @@ classPat :: NamedArg Pattern -> Maybe (NamedArg ParseLHS) classPat = Trav.mapM (Trav.mapM (classifyPattern conf)) fromR :: NamedArg (Either a (b, c)) -> (b, NamedArg c)- fromR (Common.Arg info (Named n (Right (b, c)))) = (b, Common.Arg info (Named n c))- fromR (Common.Arg info (Named n (Left a ))) = __IMPOSSIBLE__+ fromR (Arg info (Named n (Right (b, c)))) = (b, Arg info (Named n c))+ fromR (Arg info (Named n (Left a ))) = __IMPOSSIBLE__ -- | Parses a left-hand side, and makes sure that it defined the expected name.-parseLHS :: Name -> Pattern -> ScopeM LHSCore+parseLHS :: QName -> Pattern -> ScopeM LHSCore parseLHS top p = billToParser $ do- res <- parseLHS' IsLHS (Just top) p+ (res, ops) <- parseLHS' IsLHS (Just top) p case res of Right (f, lhs) -> return lhs- _ -> typeError $ NoParseForLHS IsLHS p+ _ -> typeError $ OperatorChangeMessage+ $ OperatorInformation ops+ $ NoParseForLHS IsLHS p -- | Parses a pattern. parsePattern :: Pattern -> ScopeM Pattern@@ -385,10 +673,12 @@ parsePatternOrSyn :: LHSOrPatSyn -> Pattern -> ScopeM Pattern parsePatternOrSyn lhsOrPatSyn p = billToParser $ do- res <- parseLHS' lhsOrPatSyn Nothing p+ (res, ops) <- parseLHS' lhsOrPatSyn Nothing p case res of Left p -> return p- _ -> typeError $ NoParseForLHS lhsOrPatSyn p+ _ -> typeError $ OperatorChangeMessage+ $ OperatorInformation ops+ $ NoParseForLHS lhsOrPatSyn p -- | Helper function for 'parseLHS' and 'parsePattern'. validConPattern :: [QName] -> Pattern -> Bool@@ -425,15 +715,25 @@ parseApplication [e] = return e parseApplication es = billToParser $ do -- Build the parser- let ms = qualifierModules [ q | Ident q <- es ]+ let names = [ q | Ident q <- es ]+ ms = qualifierModules names flat <- flattenScope ms <$> getScope- p <- buildParsers (getRange es) flat UseBoundNames+ (parseSections, ops, p) <- buildParsers (getRange es) flat IsExpr names -- Parse- case force $ parse (pTop p) es of- [e] -> return e- [] -> typeError $ NoParseForApplication es- es' -> typeError $ AmbiguousParseForApplication es $ map fullParen es'+ let result = parse (parseSections, pTop p) es+ case foldr seq () result `seq` result of+ [e] -> do+ reportSDoc "scope.operators" 50 $ return $+ text "Parsed an operator application:" <+> pretty e+ return e+ [] -> typeError $ OperatorChangeMessage+ $ OperatorInformation ops+ $ NoParseForApplication es+ es' -> typeError $ OperatorChangeMessage+ $ OperatorInformation ops+ $ AmbiguousParseForApplication es+ $ map fullParen es' parseModuleIdentifier :: Expr -> ScopeM QName parseModuleIdentifier (Ident m) = return m@@ -445,17 +745,24 @@ m <- parseModuleIdentifier e -- Build the arguments parser- let ms = qualifierModules [ q | Ident q <- es_args ]+ let names = [ q | Ident q <- es_args ]+ ms = qualifierModules names flat <- flattenScope ms <$> getScope- p <- buildParsers (getRange es_args) flat UseBoundNames+ (parseSections, ops, p) <-+ buildParsers (getRange es_args) flat IsExpr names -- Parse- case {-force $-} parse (pArgs p) es_args of -- TODO: not sure about forcing+ -- TODO: not sure about forcing+ case {-force $-} parse (parseSections, pArgs p) es_args of [as] -> return (m, as)- [] -> typeError $ NoParseForApplication es+ [] -> typeError $ OperatorChangeMessage+ $ OperatorInformation ops+ $ NoParseForApplication es ass -> do let f = fullParen . foldl (App noRange) (Ident m)- typeError $ AmbiguousParseForApplication es+ typeError $ OperatorChangeMessage+ $ OperatorInformation ops+ $ AmbiguousParseForApplication es $ map f ass -- | Parse an expression into a module application@@ -486,13 +793,13 @@ HiddenArgV _ -> e InstanceArgV _ -> e ParenV _ -> e- AppV e1 (Common.Arg info e2) -> par $ unExprView $ AppV (fullParen' e1) (Common.Arg info e2')+ AppV e1 (Arg info e2) -> par $ unExprView $ AppV (fullParen' e1) (Arg info e2') where e2' = case argInfoHiding info of Hidden -> e2 Instance -> e2 NotHidden -> fullParen' <$> e2- OpAppV x ns es -> par $ unExprView $ OpAppV x ns $ (map . fmap . fmap . fmap) fullParen' es+ OpAppV x ns es -> par $ unExprView $ OpAppV x ns $ (map . fmap . fmap . fmap . fmap) fullParen' es LamV bs e -> par $ unExprView $ LamV bs (fullParen e) where par = unExprView . ParenV
src/full/Agda/Syntax/Concrete/Operators/Parser.hs view
@@ -1,35 +1,79 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE GADTs #-} {-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeFamilies #-} module Agda.Syntax.Concrete.Operators.Parser where -import Control.Exception (throw)+import Control.Applicative +import Data.Either+import Data.Hashable import Data.Maybe import Data.Set (Set) +import GHC.Generics (Generic)+ import Agda.Syntax.Position import qualified Agda.Syntax.Abstract.Name as A-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg)+import Agda.Syntax.Common import Agda.Syntax.Fixity import Agda.Syntax.Notation import Agda.Syntax.Concrete -import Agda.TypeChecking.Monad.Base (TCErr(Exception))--import Agda.Utils.Monad-import Agda.Utils.Pretty-import Agda.Utils.ReadP+import qualified Agda.Utils.Parser.MemoisedCPS as MemoisedCPS+import Agda.Utils.Parser.MemoisedCPS hiding (Parser, parse)+import qualified Agda.Utils.Parser.MemoisedCPS as Parser #include "undefined.h" import Agda.Utils.Impossible +data MemoKey = NodeK (Either Integer Integer)+ | PostLeftsK (Either Integer Integer)+ | TopK+ | AppK+ | NonfixK+ deriving (Eq, Generic)++instance Hashable MemoKey++type Parser tok a =+ MemoisedCPS.Parser MemoKey tok (MaybePlaceholder tok) a++placeholder :: Placeholder -> Parser e (MaybePlaceholder e)+placeholder p = sat $ \t ->+ case t of+ Placeholder p' | p' == p -> True+ _ -> False++maybePlaceholder ::+ Maybe Placeholder -> Parser e e -> Parser e (MaybePlaceholder e)+maybePlaceholder mp p = case mp of+ Nothing -> p'+ Just h -> placeholder h <|> p'+ where+ p' = NoPlaceholder <$> p++notPlaceholder :: Parser e e+notPlaceholder = do+ tok <- token+ case tok of+ Placeholder _ -> empty+ NoPlaceholder e -> return e++sat' :: (e -> Bool) -> Parser e e+sat' p = do+ tok <- notPlaceholder+ if p tok then return tok else empty+ data ExprView e = LocalV QName | WildV e | OtherV e | AppV e (NamedArg e)- | OpAppV QName (Set A.Name) [NamedArg (OpApp e)]+ | OpAppV QName (Set A.Name) [NamedArg (MaybePlaceholder (OpApp e))] -- ^ The 'QName' is possibly ambiguous, but it must correspond -- to one of the names in the set. | HiddenArgV (Named_ e)@@ -71,7 +115,8 @@ exprView e = case e of IdentP x -> LocalV x AppP e1 e2 -> AppV e1 e2- OpAppP r d ns es -> OpAppV d ns ((map . fmap . fmap) Ordinary es)+ OpAppP r d ns es -> OpAppV d ns ((map . fmap . fmap)+ (NoPlaceholder . Ordinary) es) HiddenP _ e -> HiddenArgV e InstanceP _ e -> InstanceArgV e ParenP _ e -> ParenV e@@ -81,8 +126,12 @@ LocalV x -> IdentP x AppV e1 e2 -> AppP e1 e2 OpAppV d ns es -> let ess :: [NamedArg Pattern]- ess = (map . fmap . fmap) (fromOrdinary __IMPOSSIBLE__) es- in OpAppP (fuseRange d es) d ns ess+ ess = (map . fmap . fmap)+ (\x -> case x of+ Placeholder{} -> __IMPOSSIBLE__+ NoPlaceholder x -> fromOrdinary __IMPOSSIBLE__ x)+ es+ in OpAppP (fuseRange d ess) d ns ess HiddenArgV e -> HiddenP (getRange e) e InstanceArgV e -> InstanceP (getRange e) e ParenV e -> ParenP (getRange e) e@@ -90,6 +139,43 @@ WildV e -> e OtherV e -> e +-- | Should sections be parsed?+data ParseSections = ParseSections | DoNotParseSections+ deriving (Eq, Show)++parse :: IsExpr e => (ParseSections, Parser e a) -> [e] -> [a]+parse (DoNotParseSections, p) es = Parser.parse p (map NoPlaceholder es)+parse (ParseSections, p) es = Parser.parse p+ (concat $ map splitExpr es)+ where+ splitExpr :: IsExpr e => e -> [MaybePlaceholder e]+ splitExpr e = case exprView e of+ LocalV n -> splitName n+ _ -> noSplit+ where+ noSplit = [NoPlaceholder e]++ splitName n = case last ns of+ NoName{} -> noSplit+ Name r ps -> splitParts r (init ns) Beginning ps+ where+ ns = qnameParts n++ -- Note that the same range is used for every name part. This is+ -- not entirely correct, but will hopefully not lead to any+ -- problems.++ -- Note also that the module qualifier, if any, is only applied+ -- to the first name part.++ splitParts _ _ _ [] = []+ splitParts _ _ _ (Hole : []) = [Placeholder End]+ splitParts r m w (Hole : ps) = Placeholder w : splitParts r m Middle ps+ splitParts r m _ (Id s : ps) = part : splitParts r [] Middle ps+ where+ part = NoPlaceholder $ unExprView $ LocalV $+ foldr Qual (QName (Name r [Id s])) m+ --------------------------------------------------------------------------- -- * Parser combinators ---------------------------------------------------------------------------@@ -98,115 +184,148 @@ -- Specific combinators -- | Parse a specific identifier as a NamePart-partP :: IsExpr e => [Name] -> RawName -> ReadP e Range+partP :: IsExpr e => [Name] -> RawName -> Parser e Range partP ms s = do- tok <- get+ tok <- notPlaceholder case isLocal tok of Just p -> return p- Nothing -> pfail+ Nothing -> empty where str = show (foldr Qual (QName (Name noRange [Id s])) ms) isLocal e = case exprView e of LocalV y | str == show y -> Just (getRange y) _ -> Nothing -binop :: IsExpr e => ReadP e (NewNotation,Range,[e]) -> ReadP e (e -> e -> e)-binop middleP = do- (nsyn,r,es) <- middleP- return $ \x y -> rebuild nsyn r (x : es ++ [y])+-- | Used to define the return type of 'opP'. -preop, postop :: IsExpr e => ReadP e (NewNotation,Range,[e]) -> ReadP e (e -> e)-preop middleP = do- (nsyn,r,es) <- middleP- return $ \x -> rebuild nsyn r (es ++ [x])+type family OperatorType (k :: NotationKind) (e :: *) :: *+type instance OperatorType 'InfixNotation e = MaybePlaceholder e -> MaybePlaceholder e -> e+type instance OperatorType 'PrefixNotation e = MaybePlaceholder e -> e+type instance OperatorType 'PostfixNotation e = MaybePlaceholder e -> e+type instance OperatorType 'NonfixNotation e = e -postop middleP = do- (nsyn,r,es) <- middleP- return $ \x -> rebuild nsyn r (x : es)+-- | A singleton type for 'NotationKind' (except for the constructor+-- 'NoNotation'). +data NK (k :: NotationKind) :: * where+ In :: NK 'InfixNotation+ Pre :: NK 'PrefixNotation+ Post :: NK 'PostfixNotation+ Non :: NK 'NonfixNotation --- | Parse the "operator part" of the given syntax.--- holes at beginning and end are IGNORED.+-- | Parse the \"operator part\" of the given notation.+--+-- Normal holes (but not binders) at the beginning and end are+-- ignored.+--+-- If the notation does not contain any binders, then a section+-- notation is allowed.+opP :: forall e k. IsExpr e+ => ParseSections+ -> Parser e e -> NewNotation -> NK k -> Parser e (OperatorType k e)+opP parseSections p (NewNotation q names _ syn isOp) kind = do --- Note: it would be better to take the decision of "postprocessing" at the same--- place as where the holes are discarded, however that would require a dependently--- typed function (or duplicated code)-opP :: IsExpr e =>- ReadP e e -> NewNotation -> ReadP e (NewNotation,Range,[e])-opP p nsyn@(NewNotation q _ _ syn) = do- (range,es) <- worker (init $ qnameParts q) $ removeExternalHoles syn- return (nsyn,range,es)- where worker ms [IdPart x] = do r <- partP ms x; return (r,[])- worker ms (IdPart x : _ : xs) = do- r1 <- partP ms x- e <- p- (r2 , es) <- worker [] xs -- only the first part is qualified- return (fuseRanges r1 r2, e : es)- worker _ x = __IMPOSSIBLE__ -- holes and non-holes must be alternated.+ (range, hs) <- worker (init $ qnameParts q) withoutExternalHoles - removeExternalHoles = reverse . removeLeadingHoles . reverse . removeLeadingHoles- where removeLeadingHoles = dropWhile isAHole+ let (normal, binders) = partitionEithers hs+ lastHole = maximum $ mapMaybe holeTarget syn --- | Given a name with a syntax spec, and a list of parsed expressions--- fitting it, rebuild the expression.-rebuild :: forall e. IsExpr e => NewNotation -> Range -> [e] -> e-rebuild (NewNotation name names _ syn) r es =- unExprView $ OpAppV (setRange r name) names exprs+ app :: ([(MaybePlaceholder e, NamedArg Int)] ->+ [(MaybePlaceholder e, NamedArg Int)]) -> e+ app f =+ -- If we have an operator and there is exactly one+ -- placeholder for every hole, then we only return+ -- the operator.+ if isOp && noPlaceholders args == lastHole + 1 then+ -- Note that the information in the set "names" is thrown+ -- away here.+ unExprView (LocalV q')+ else+ unExprView (OpAppV q' names args)+ where+ args = map (findExprFor (f normal) binders) [0..lastHole]+ q' = setRange range q++ return $ case kind of+ In -> \x y -> app (\es -> (x, leadingHole) : es ++ [(y, trailingHole)])+ Pre -> \ y -> app (\es -> es ++ [(y, trailingHole)])+ Post -> \x -> app (\es -> (x, leadingHole) : es)+ Non -> app (\es -> es)+ where- exprs = map findExprFor [0..lastHole]- filledHoles = zip es (filter isAHole syn)- lastHole = maximum $ mapMaybe holeTarget syn- findExprFor :: Int -> NamedArg (OpApp e)- findExprFor n =- case [setArgColors [] $ fmap (e <$) m | (e, NormalHole m) <- filledHoles, namedArg m == n] of- [] -> __IMPOSSIBLE__- [x] -> case [e | (e, BindHole m) <- filledHoles, m == n] of- [] -> (fmap . fmap) Ordinary x -- no variable to bind- vars ->- let bs = map (rebuildBinding . exprView) vars in- (fmap . fmap) (SyntaxBindingLambda (fuseRange bs x) bs) x- _ -> __IMPOSSIBLE__ -rebuildBinding :: IsExpr e => ExprView e -> LamBinding- -- Andreas, 2011-04-07 put just 'Relevant' here, is this correct?-rebuildBinding (LocalV (QName name)) = DomainFree defaultArgInfo $ mkBoundName_ name-rebuildBinding (WildV e) =- DomainFree defaultArgInfo $ mkBoundName_ $ Name noRange [Hole]-rebuildBinding e = throw $ Exception (getRange e) $- text "Expected variable name in binding position"+ (leadingHoles, syn1) = span isNormalHole syn+ (trailingHoles, syn2) = span isNormalHole (reverse syn1)+ withoutExternalHoles = reverse syn2 --- | Parse using the appropriate fixity, given a parser parsing the--- operator part, the name of the operator, and a parser of--- subexpressions.-infixP, infixrP, infixlP, postfixP, prefixP,nonfixP :: IsExpr e => ReadP e (NewNotation,Range,[e]) -> ReadP e e -> ReadP e e-prefixP op p = do- fs <- many (preop op)- e <- p- return $ foldr ( $ ) e fs+ leadingHole = case leadingHoles of+ [NormalHole h] -> h+ _ -> __IMPOSSIBLE__ -postfixP op p = do- e <- p- fs <- many (postop op)- return $ foldl (flip ( $ )) e fs+ trailingHole = case trailingHoles of+ [NormalHole h] -> h+ _ -> __IMPOSSIBLE__ -infixlP op p = chainl1 p (binop op)-infixrP op p = chainr1 p (binop op)-infixP op p = do- e <- p- restP e+ worker ::+ [Name] -> Notation ->+ Parser e (Range, [Either (MaybePlaceholder e, NamedArg Int)+ (LamBinding, Int)])+ worker ms [] = return (noRange, [])+ worker ms (IdPart x : xs) = do+ r1 <- partP ms x+ (r2, es) <- worker [] xs+ -- Only the first+ -- part is qualified.+ return (fuseRanges r1 r2, es)+ worker ms (NormalHole h : xs) = do+ e <- maybePlaceholder+ (if isOp && parseSections == ParseSections+ then Just Middle else Nothing)+ p+ (r, es) <- worker ms xs+ return (r, Left (e, h) : es)+ worker ms (WildHole h : xs) = do+ (r, es) <- worker ms xs+ return (r, Right (mkBinding h $ Name noRange [Hole]) : es)+ worker ms (BindHole h : xs) = do+ e <- notPlaceholder+ case exprView e of+ LocalV (QName name) -> ret name+ WildV e -> ret (Name noRange [Hole])+ _ -> empty+ -- Old error message: "Expected variable name in binding+ -- position". where- restP x = return x +++ do- f <- binop op- f x <$> p+ ret x = do+ (r, es) <- worker ms xs+ return (r, Right (mkBinding h x) : es)+ -- Andreas, 2011-04-07 put just 'Relevant' here, is this correct? -nonfixP op p = do- (nsyn,r,es) <- op- return $ rebuild nsyn r es- +++ p+ mkBinding h x = (DomainFree defaultArgInfo $ mkBoundName_ x, h) -argsP :: IsExpr e => ReadP e e -> ReadP e [NamedArg e]-argsP p = many (nothidden +++ hidden +++ instanceH)+ set x arg = fmap (fmap (const x)) arg++ findExprFor ::+ [(MaybePlaceholder e, NamedArg Int)] ->+ [(LamBinding, Int)] -> Int ->+ NamedArg (MaybePlaceholder (OpApp e))+ findExprFor normalHoles binders n =+ case [ h | h@(_, m) <- normalHoles, namedArg m == n ] of+ [(Placeholder p, arg)] -> set (Placeholder p) arg+ [(NoPlaceholder e, arg)] -> case [b | (b, m) <- binders, m == n] of+ [] -> set (NoPlaceholder (Ordinary e)) arg -- no variable to bind+ bs -> set (NoPlaceholder (SyntaxBindingLambda (fuseRange bs e) bs e)) arg+ _ -> __IMPOSSIBLE__++ noPlaceholders :: [NamedArg (MaybePlaceholder (OpApp e))] -> Int+ noPlaceholders = sum . map (isPlaceholder . namedArg) where+ isPlaceholder NoPlaceholder{} = 0+ isPlaceholder Placeholder{} = 1++argsP :: IsExpr e => Parser e e -> Parser e [NamedArg e]+argsP p = many (nothidden <|> hidden <|> instanceH)+ where isHidden (HiddenArgV _) = True isHidden _ = False @@ -216,19 +335,19 @@ nothidden = defaultArg . unnamed <$> do e <- p case exprView e of- HiddenArgV _ -> pfail- InstanceArgV _ -> pfail+ HiddenArgV _ -> empty+ InstanceArgV _ -> empty _ -> return e instanceH = do- InstanceArgV e <- exprView <$> satisfy (isInstance . exprView)+ InstanceArgV e <- exprView <$> sat' (isInstance . exprView) return $ makeInstance $ defaultArg e hidden = do- HiddenArgV e <- exprView <$> satisfy (isHidden . exprView)+ HiddenArgV e <- exprView <$> sat' (isHidden . exprView) return $ hide $ defaultArg e -appP :: IsExpr e => ReadP e e -> ReadP e [NamedArg e] -> ReadP e e+appP :: IsExpr e => Parser e e -> Parser e [NamedArg e] -> Parser e e appP p pa = do h <- p es <- pa@@ -236,9 +355,9 @@ where app e = unExprView . AppV e -atomP :: IsExpr e => (QName -> Bool) -> ReadP e e+atomP :: IsExpr e => (QName -> Bool) -> Parser e e atomP p = do- e <- get+ e <- notPlaceholder case exprView e of- LocalV x | not (p x) -> pfail+ LocalV x | not (p x) -> empty _ -> return e
src/full/Agda/Syntax/Concrete/Pretty.hs view
@@ -1,6 +1,7 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-| Pretty printer for the concrete syntax.@@ -9,15 +10,12 @@ import Prelude hiding (null) -import Data.Char import Data.Functor import Data.Maybe -import qualified Agda.Syntax.Common as Common-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)+import Agda.Syntax.Common import Agda.Syntax.Concrete import Agda.Syntax.Fixity-import Agda.Syntax.Literal import Agda.Syntax.Notation import Agda.Syntax.Position @@ -35,7 +33,8 @@ instance Show TypedBinding where show = show . pretty instance Show TypedBindings where show = show . pretty instance Show LamBinding where show = show . pretty-instance Show ImportDirective where show = show . pretty+instance (Pretty a, Pretty b) => Show (ImportDirective' a b)+ where show = show . pretty instance Show Pragma where show = show . pretty instance Show RHS where show = show . pretty @@ -105,6 +104,10 @@ pretty (Ordinary e) = pretty e pretty (SyntaxBindingLambda r bs e) = pretty (Lam r bs e) +instance Pretty a => Pretty (MaybePlaceholder a) where+ pretty Placeholder{} = text "_"+ pretty (NoPlaceholder e) = pretty e+ instance Pretty Expr where pretty e = case e of@@ -136,7 +139,7 @@ AbsurdLam _ Instance -> lambda <+> text "{{}}" AbsurdLam _ Hidden -> lambda <+> text "{}" ExtendedLam _ pes ->- lambda <+> bracesAndSemicolons (map (\(x,y,z) -> prettyClause x y z) pes)+ lambda <+> bracesAndSemicolons (map (\(x,y,z,_) -> prettyClause x y z) pes) where prettyClause lhs rhs wh = sep [ pretty lhs , nest 2 $ pretty' rhs ] $$ nest 2 (pretty wh)@@ -161,15 +164,14 @@ As _ x e -> pretty x <> text "@" <> pretty e Dot _ e -> text "." <> pretty e Absurd _ -> text "()"- Rec _ xs -> sep [text "record", bracesAndSemicolons (map recPr xs)]+ Rec _ xs -> sep [text "record", bracesAndSemicolons (map pretty xs)] RecUpdate _ e xs ->- sep [text "record" <+> pretty e, bracesAndSemicolons (map recPr xs)]+ sep [text "record" <+> pretty e, bracesAndSemicolons (map pretty xs)] ETel [] -> text "()" ETel tel -> fsep $ map pretty tel QuoteGoal _ x e -> sep [text "quoteGoal" <+> pretty x <+> text "in", nest 2 $ pretty e]- QuoteContext _ x e -> sep [text "quoteContext" <+> pretty x <+> text "in",- nest 2 $ pretty e]+ QuoteContext _ -> text "quoteContext" Quote _ -> text "quote" QuoteTerm _ -> text "quoteTerm" Unquote _ -> text "unquote"@@ -180,9 +182,16 @@ -- Andreas, 2011-10-03 print irrelevant things as .(e) DontCare e -> text "." <> parens (pretty e) Equal _ a b -> pretty a <+> text "=" <+> pretty b- where- recPr (x, e) = sep [ pretty x <+> text "=" , nest 2 $ pretty e ] +instance (Pretty a, Pretty b) => Pretty (Either a b) where+ pretty = either pretty pretty++instance Pretty a => Pretty (FieldAssignment' a) where+ pretty (FieldAssignment x e) = sep [ pretty x <+> text "=" , nest 2 $ pretty e ]++instance Pretty ModuleAssignment where+ pretty (ModuleAssignment m es i) = (fsep $ pretty m : map pretty es) <+> pretty i+ instance Pretty BoundName where pretty BName{ boundName = x, boundLabel = l } | x == l = pretty x@@ -195,7 +204,7 @@ instance Pretty TypedBindings where pretty (TypedBindings _ a) = prettyRelevance a $ prettyHiding a p $- pretty $ WithColors (argColors a) $ unArg a+ pretty $ unArg a where p | isUnderscore (unArg a) = id | otherwise = parens@@ -210,27 +219,13 @@ | any isMeta tel = text "∀" <+> fsep (map pretty tel) | otherwise = fsep (map pretty tel) where- isMeta (TypedBindings _ (Common.Arg _ (TBind _ _ (Underscore _ Nothing)))) = True+ isMeta (TypedBindings _ (Arg _ (TBind _ _ (Underscore _ Nothing)))) = True isMeta _ = False -instance Pretty ColoredTypedBinding where- -- (x y :{ i j } A) -> ...- pretty (WithColors [] (TBind _ xs (Underscore _ Nothing))) =- fsep (map pretty xs)- pretty (WithColors [] (TLet _ ds)) =- text "let" <+> vcat (map pretty ds)- pretty (WithColors _ (TLet _ _)) = __IMPOSSIBLE__- pretty (WithColors cs (TBind _ xs e)) =- sep [ fsep (map pretty xs)- , pColors ":" cs <+> pretty e- ]--pColors :: String -> [Color] -> Doc-pColors s [] = text s-pColors s cs = text (s ++ "{") <+> fsep (map pretty cs) <+> text "}"- instance Pretty TypedBinding where+ pretty (TBind _ xs (Underscore _ Nothing)) =+ fsep (map pretty xs) pretty (TBind _ xs e) = sep [ fsep (map pretty xs) , text ":" <+> pretty e@@ -239,10 +234,10 @@ text "let" <+> vcat (map pretty ds) smashTel :: Telescope -> Telescope-smashTel (TypedBindings r (Common.Arg i (TBind r' xs e)) :- TypedBindings _ (Common.Arg i' (TBind _ ys e')) : tel)+smashTel (TypedBindings r (Arg i (TBind r' xs e)) :+ TypedBindings _ (Arg i' (TBind _ ys e')) : tel) | show i == show i' && show e == show e' && all (isUnnamed . dget) (xs ++ ys) =- smashTel (TypedBindings r (Common.Arg i (TBind r' (xs ++ ys) e)) : tel)+ smashTel (TypedBindings r (Arg i (TBind r' (xs ++ ys) e)) : tel) where isUnnamed x = boundLabel x == boundName x smashTel (b : tel) = b : smashTel tel@@ -299,15 +294,19 @@ pretty d = case d of TypeSig i x e ->- sep [ prettyRelevance i $ pretty x <+> pColors ":" (argInfoColors i)+ sep [ prettyRelevance i $ pretty x <+> text ":" , nest 2 $ pretty e ]- Field x (Common.Arg i e) ->+ Field inst x (Arg i e) -> sep [ text "field"- , nest 2 $ prettyRelevance i $ prettyHiding i id $+ , nest 2 $ mkInst inst $+ prettyRelevance i $ prettyHiding i id $ pretty $ TypeSig (i {argInfoRelevance = Relevant}) x e ]- FunClause lhs rhs wh ->+ where+ mkInst InstanceDef d = sep [ text "instance", nest 2 d ]+ mkInst NotInstanceDef d = d+ FunClause lhs rhs wh _ -> sep [ pretty lhs , nest 2 $ pretty rhs ] $$ nest 2 (pretty wh)@@ -349,13 +348,14 @@ , pretty e ] ]- Record _ x ind con tel me cs ->+ Record _ x ind eta con tel me cs -> sep [ hsep [ text "record" , pretty x , fcat (map pretty tel) ] , nest 2 $ pType me ] $$ nest 2 (vcat $ pInd +++ pEta ++ pCon ++ map pretty cs) where pType (Just e) = hsep@@ -366,7 +366,8 @@ pType Nothing = text "where" pInd = maybeToList $ text . show . rangedThing <$> ind- pCon = maybeToList $ (text "constructor" <+>) . pretty <$> con+ pEta = maybeToList $ (\x -> if x then text "eta-equality" else text "no-eta-equality") <$> eta+ pCon = maybeToList $ (text "constructor" <+>) . pretty <$> fst <$> con Infix f xs -> pretty f <+> (fsep $ punctuate comma $ map pretty xs) Syntax n xs -> text "syntax" <+> pretty n <+> text "..."@@ -376,6 +377,7 @@ Abstract _ ds -> namedBlock "abstract" ds Private _ ds -> namedBlock "private" ds InstanceB _ ds -> namedBlock "instance" ds+ Macro _ ds -> namedBlock "macro" ds Postulate _ ds -> namedBlock "postulate" ds Primitive _ ds -> namedBlock "primitive" ds Module _ x tel ds ->@@ -403,8 +405,10 @@ where as Nothing = empty as (Just x) = text "as" <+> pretty (asName x)- UnquoteDecl _ x t ->- sep [ text "unquoteDecl" <+> pretty x <+> text "=", nest 2 $ pretty t ]+ UnquoteDecl _ xs t ->+ sep [ text "unquoteDecl" <+> fsep (map pretty xs) <+> text "=", nest 2 $ pretty t ]+ UnquoteDef _ xs t ->+ sep [ text "unquoteDef" <+> fsep (map pretty xs) <+> text "=", nest 2 $ pretty t ] Pragma pr -> sep [ text "{-#" <+> pretty pr, text "#-}" ] where namedBlock s ds =@@ -427,20 +431,32 @@ hsep [ text "COMPILED_EXPORT", pretty x, text hs ] pretty (CompiledTypePragma _ x hs) = hsep [ text "COMPILED_TYPE", pretty x, text hs ]+ pretty (CompiledDeclareDataPragma _ x hs) =+ hsep [ text "COMPILED_DECLARE_DATA", pretty x, text hs ] pretty (CompiledDataPragma _ x hs hcs) = hsep $ [text "COMPILED_DATA", pretty x] ++ map text (hs : hcs) pretty (CompiledEpicPragma _ x e) = hsep [ text "COMPILED_EPIC", pretty x, text e ] pretty (CompiledJSPragma _ x e) = hsep [ text "COMPILED_JS", pretty x, text e ]+ pretty (CompiledUHCPragma _ x e) =+ hsep [ text "COMPILED_UHC", pretty x, text e ]+ pretty (CompiledDataUHCPragma _ x crd crcs) =+ hsep $ [ text "COMPILED_DATA_UHC", pretty x] ++ map text (crd : crcs)+ pretty (HaskellCodePragma _ s) =+ vcat (text "HASKELL" : map text (lines s))+ pretty (NoSmashingPragma _ i) =+ hsep $ [text "NO_SMASHING", pretty i] pretty (StaticPragma _ i) = hsep $ [text "STATIC", pretty i]+ pretty (InlinePragma _ i) =+ hsep $ [text "INLINE", pretty i] pretty (ImportPragma _ i) = hsep $ [text "IMPORT", text i]+ pretty (ImportUHCPragma _ i) =+ hsep $ [text "IMPORT_UHC", text i] pretty (ImpossiblePragma _) = hsep $ [text "IMPOSSIBLE"]- pretty (EtaPragma _ x) =- hsep $ [text "ETA", pretty x] pretty (TerminationCheckPragma _ tc) = case tc of TerminationCheck -> __IMPOSSIBLE__@@ -448,9 +464,13 @@ NonTerminating -> text "NON_TERMINATING" Terminating -> text "TERMINATING" TerminationMeasure _ x -> hsep $ [text "MEASURE", pretty x]+ pretty (CatchallPragma _) = text "CATCHALL"+ pretty (DisplayPragma _ lhs rhs) = text "DISPLAY" <+> sep [ pretty lhs <+> text "=", nest 2 $ pretty rhs ]+ pretty (NoPositivityCheckPragma _) = text "NO_POSITIVITY_CHECK" instance Pretty Fixity where- pretty (Fixity _ n ass) = text s <+> text (show n)+ pretty (Fixity _ Unrelated _) = __IMPOSSIBLE__+ pretty (Fixity _ (Related n) ass) = text s <+> text (show n) where s = case ass of LeftAssoc -> "infixl"@@ -461,14 +481,15 @@ pretty (IdPart x) = text x pretty BindHole{} = underscore pretty NormalHole{} = underscore+ pretty WildHole{} = underscore instance Pretty Notation where pretty = hcat . map pretty instance Pretty Fixity' where pretty (Fixity' fix nota)- | nota == defaultNotation = pretty fix- | otherwise = text "syntax" <+> pretty nota+ | nota == noNotation = pretty fix+ | otherwise = text "syntax" <+> pretty nota instance Pretty e => Pretty (Arg e) where -- Andreas 2010-09-21: do not print relevance in general, only in function types!@@ -490,7 +511,7 @@ IdentP x -> pretty x AppP p1 p2 -> sep [ pretty p1, nest 2 $ pretty p2 ] RawAppP _ ps -> fsep $ map pretty ps- OpAppP _ q _ ps -> fsep $ prettyOpApp q ps+ OpAppP _ q _ ps -> fsep $ prettyOpApp q (fmap (fmap (fmap NoPlaceholder)) ps) HiddenP _ p -> braces' $ pretty p InstanceP _ p -> dbraces $ pretty p ParenP _ p -> parens $ pretty p@@ -500,30 +521,63 @@ AbsurdP _ -> text "()" LitP l -> pretty l QuoteP _ -> text "quote"+ RecP _ fs -> sep [ text "record", bracesAndSemicolons (map pretty fs) ] -prettyOpApp :: Pretty a => QName -> [a] -> [Doc]-prettyOpApp q es = prOp ms xs es+prettyOpApp ::+ Pretty a => QName -> [NamedArg (MaybePlaceholder a)] -> [Doc]+prettyOpApp q es = merge [] $ prOp ms xs es where ms = init (qnameParts q) xs = case unqualify q of Name _ xs -> xs NoName{} -> __IMPOSSIBLE__- prOp ms (Hole : xs) (e : es) = pretty e : prOp ms xs es++ prOp ms (Hole : xs) (e : es) = (pretty e, case namedArg e of+ Placeholder p -> Just p+ _ -> Nothing) :+ prOp ms xs es prOp _ (Hole : _) [] = __IMPOSSIBLE__- prOp ms (Id x : xs) es = pretty (foldr Qual (QName (Name noRange $ [Id x])) ms) : prOp [] xs es+ prOp ms (Id x : xs) es = ( pretty (foldr Qual (QName (Name noRange $ [Id x])) ms)+ , Nothing+ ) : prOp [] xs es prOp _ [] [] = []- prOp _ [] es = map pretty es+ prOp _ [] es = map (\e -> (pretty e, Nothing)) es -instance Pretty ImportDirective where+ -- Section underscores should be printed without surrounding+ -- whitespace. This function takes care of that.+ merge :: [Doc] -> [(Doc, Maybe Placeholder)] -> [Doc]+ merge before [] = reverse before+ merge before ((d, Nothing) : after) = merge (d : before) after+ merge before ((d, Just Beginning) : after) = mergeRight before d after+ merge before ((d, Just End) : after) = case mergeLeft d before of+ (d, bs) -> merge (d : bs) after+ merge before ((d, Just Middle) : after) = case mergeLeft d before of+ (d, bs) -> mergeRight bs d after++ mergeRight before d after =+ reverse before +++ case merge [] after of+ [] -> [d]+ a : as -> (d <> a) : as++ mergeLeft d before = case before of+ [] -> (d, [])+ b : bs -> (b <> d, bs)++instance (Pretty a, Pretty b) => Pretty (ImportDirective' a b) where pretty i = sep [ public (publicOpen i)- , pretty $ usingOrHiding i- , rename $ renaming i+ , pretty $ using i+ , prettyHiding $ hiding i+ , rename $ impRenaming i ] where public True = text "public" public False = empty + prettyHiding [] = empty+ prettyHiding xs = text "hiding" <+> parens (fsep $ punctuate (text ";") $ map pretty xs)+ rename [] = empty rename xs = hsep [ text "renaming" , parens $ fsep $ punctuate (text ";") $ map pr xs@@ -531,13 +585,11 @@ pr r = hsep [ pretty (renFrom r), text "to", pretty (renTo r) ] -instance Pretty UsingOrHiding where- pretty (Hiding []) = empty- pretty (Hiding xs) =- text "hiding" <+> parens (fsep $ punctuate (text ";") $ map pretty xs)+instance (Pretty a, Pretty b) => Pretty (Using' a b) where+ pretty UseEverything = empty pretty (Using xs) = text "using" <+> parens (fsep $ punctuate (text ";") $ map pretty xs) -instance Pretty ImportedName where+instance (Pretty a, Pretty b) => Pretty (ImportedName' a b) where pretty (ImportedName x) = pretty x pretty (ImportedModule x) = text "module" <+> pretty x
src/full/Agda/Syntax/Fixity.hs view
@@ -3,14 +3,20 @@ {-# LANGUAGE DeriveFoldable #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE PatternGuards #-} {-| Definitions for fixity, precedence levels, and declared syntax. -} module Agda.Syntax.Fixity where +import Prelude hiding (concatMap)++import Control.DeepSeq+ import Data.Foldable import Data.Function-import Data.List as List+import qualified Data.List as List+import Data.Maybe import Data.Set (Set) import qualified Data.Set as Set import Data.Traversable@@ -22,6 +28,7 @@ import Agda.Syntax.Concrete.Name import Agda.Syntax.Notation +import Agda.Utils.Lens import Agda.Utils.List #include "undefined.h"@@ -32,7 +39,7 @@ -- | The notation is handled as the fixity in the renamer. -- Hence, they are grouped together in this type. data Fixity' = Fixity'- { theFixity :: Fixity+ { theFixity :: !Fixity , theNotation :: Notation } deriving (Typeable, Show, Eq)@@ -43,35 +50,45 @@ -- | All the notation information related to a name. data NewNotation = NewNotation- { notaName :: QName- , notaNames :: Set A.Name+ { notaName :: QName+ , notaNames :: Set A.Name -- ^ The names the syntax and/or fixity belong to. -- -- Invariant: The set is non-empty. Every name in the list matches -- 'notaName'. , notaFixity :: Fixity -- ^ Associativity and precedence (fixity) of the names.- , notation :: Notation+ , notation :: Notation -- ^ Syntax associated with the names.+ , notaIsOperator :: Bool+ -- ^ True if the notation comes from an operator (rather than a+ -- syntax declaration). } deriving (Typeable, Show) -- | If an operator has no specific notation, then it is computed from -- its name. namesToNotation :: QName -> A.Name -> NewNotation namesToNotation q n = NewNotation- { notaName = q- , notaNames = Set.singleton n- , notaFixity = f- , notation = if null syn then syntaxOf $ unqualify q else syn+ { notaName = q+ , notaNames = Set.singleton n+ , notaFixity = f+ , notation = if null syn then syntaxOf (unqualify q) else syn+ , notaIsOperator = null syn } where Fixity' f syn = A.nameFixity n +-- | Replace 'noFixity' by 'defaultFixity'.+useDefaultFixity :: NewNotation -> NewNotation+useDefaultFixity n+ | notaFixity n == noFixity = n { notaFixity = defaultFixity }+ | otherwise = n+ -- | Return the 'IdPart's of a notation, the first part qualified, -- the other parts unqualified. -- This allows for qualified use of operators, e.g., -- @M.for x ∈ xs return e@, or @x ℕ.+ y@. notationNames :: NewNotation -> [QName]-notationNames (NewNotation q _ _ parts) =+notationNames (NewNotation q _ _ parts _) = zipWith ($) (reQualify : repeat QName) [Name noRange [Id x] | IdPart x <- parts ] where -- The qualification of @q@.@@ -96,36 +113,104 @@ mkSyn n (Hole : xs) = NormalHole (defaultNamedArg n) : mkSyn (1 + n) xs mkSyn n (Id x : xs) = IdPart x : mkSyn n xs -defaultFixity' :: Fixity'-defaultFixity' = Fixity' defaultFixity defaultNotation- noFixity' :: Fixity' noFixity' = Fixity' noFixity noNotation --- | Merges all 'NewNotation's that have the same notation.+-- | Merges 'NewNotation's that have the same precedence level and+-- notation, with two exceptions: ----- If all 'NewNotation's with a given notation have the same fixity,--- then this fixity is preserved, and otherwise it is replaced by--- 'defaultFixity'.+-- * Operators and notations coming from syntax declarations are kept+-- separate. --+-- * If /all/ instances of a given 'NewNotation' have the same+-- precedence level or are \"unrelated\", then they are merged. They+-- get the given precedence level, if any, and otherwise they become+-- unrelated (but related to each other).+--+-- If 'NewNotation's that are merged have distinct associativities,+-- then they get 'NonAssoc' as their associativity.+-- -- Precondition: No 'A.Name' may occur in more than one list element. -- Every 'NewNotation' must have the same 'notaName'. -- -- Postcondition: No 'A.Name' occurs in more than one list element. mergeNotations :: [NewNotation] -> [NewNotation]-mergeNotations = map (merge . fixFixities) . groupOn notation+mergeNotations =+ map merge .+ concatMap groupIfLevelsMatch .+ groupOn (\n -> ( notation n+ , notaIsOperator n+ )) where- fixFixities ns- | allEqual (map notaFixity ns) = ns- | otherwise =- map (\n -> n { notaFixity = defaultFixity }) ns+ groupIfLevelsMatch :: [NewNotation] -> [[NewNotation]]+ groupIfLevelsMatch [] = __IMPOSSIBLE__+ groupIfLevelsMatch ns@(n : _) =+ if allEqual (map fixityLevel related)+ then [sameAssoc (sameLevel ns)]+ else map (: []) ns+ where+ -- Fixities of operators whose precedence level is not Unrelated.+ related = mapMaybe (\f -> case fixityLevel f of+ Unrelated -> Nothing+ Related {} -> Just f)+ (map notaFixity ns) + -- Precondition: All related operators have the same precedence+ -- level.+ --+ -- Gives all unrelated operators the same level.+ sameLevel = map (set (_notaFixity . _fixityLevel) level)+ where+ level = case related of+ f : _ -> fixityLevel f+ [] -> Unrelated++ -- If all related operators have the same associativity, then the+ -- unrelated operators get the same associativity, and otherwise+ -- all operators get the associativity NonAssoc.+ sameAssoc = map (set (_notaFixity . _fixityAssoc) assoc)+ where+ assoc = case related of+ f : _ | allEqual (map fixityAssoc related) -> fixityAssoc f+ _ -> NonAssoc+ merge :: [NewNotation] -> NewNotation merge [] = __IMPOSSIBLE__ merge ns@(n : _) = n { notaNames = Set.unions $ map notaNames ns } +-- * Sections++-- | Sections, as well as non-sectioned operators.++data NotationSection = NotationSection+ { sectNotation :: NewNotation+ , sectKind :: NotationKind+ -- ^ For non-sectioned operators this should match the notation's+ -- 'notationKind'.+ , sectLevel :: Maybe PrecedenceLevel+ -- ^ Effective precedence level. 'Nothing' for closed notations.+ , sectIsSection :: Bool+ -- ^ 'False' for non-sectioned operators.+ }+ deriving Show++-- | Converts a notation to a (non-)section.++noSection :: NewNotation -> NotationSection+noSection n = NotationSection+ { sectNotation = n+ , sectKind = notationKind (notation n)+ , sectLevel = Just (fixityLevel (notaFixity n))+ , sectIsSection = False+ }+ -- * Fixity +-- | Precedence levels for operators.++data PrecedenceLevel = Unrelated | Related !Integer+ deriving (Eq, Ord, Show, Typeable)+ -- | Associativity. data Associativity = NonAssoc | LeftAssoc | RightAssoc@@ -135,8 +220,8 @@ data Fixity = Fixity { fixityRange :: Range- , fixityLevel :: Integer- , fixityAssoc :: Associativity+ , fixityLevel :: !PrecedenceLevel+ , fixityAssoc :: !Associativity } deriving (Typeable, Show) @@ -148,21 +233,11 @@ -- For @instance Pretty Fixity@, see Agda.Syntax.Concrete.Pretty --- | The default fixity. Currently defined to be @'NonAssoc' 20@.-defaultFixity :: Fixity-defaultFixity = Fixity noRange 20 NonAssoc---- | Hack used for @syntax@ facility. noFixity :: Fixity-noFixity = Fixity noRange (negate 666) NonAssoc- -- Ts,ts,ts, why the number of the beast? Revelation 13, 18- --- -- It's not the number of the beast, it's the negation of the- -- number of the beast, which must be a divine number, right?- --- -- The divine is not the negation of evil.- -- Evil is only the absense of the good and divine.+noFixity = Fixity noRange Unrelated NonAssoc +defaultFixity :: Fixity+defaultFixity = Fixity noRange (Related 20) NonAssoc -- * Precendence @@ -171,8 +246,7 @@ | LeftOperandCtx Fixity | RightOperandCtx Fixity | FunctionCtx | ArgumentCtx | InsideOperandCtx | WithFunCtx | WithArgCtx | DotPatternCtx- deriving (Show,Typeable)-+ deriving (Show, Typeable, Eq) -- | The precedence corresponding to a possibly hidden argument. hiddenArgumentCtx :: Hiding -> Precedence@@ -183,14 +257,18 @@ -- | Do we need to bracket an operator application of the given fixity -- in a context with the given precedence. opBrackets :: Fixity -> Precedence -> Bool-opBrackets (Fixity _ n1 LeftAssoc)- (LeftOperandCtx (Fixity _ n2 LeftAssoc)) | n1 >= n2 = False-opBrackets (Fixity _ n1 RightAssoc)- (RightOperandCtx (Fixity _ n2 RightAssoc)) | n1 >= n2 = False+opBrackets (Fixity _ (Related n1) LeftAssoc)+ (LeftOperandCtx (Fixity _ (Related n2) LeftAssoc)) | n1 >= n2 = False+opBrackets (Fixity _ (Related n1) RightAssoc)+ (RightOperandCtx (Fixity _ (Related n2) RightAssoc)) | n1 >= n2 = False opBrackets f1- (LeftOperandCtx f2) | fixityLevel f1 > fixityLevel f2 = False+ (LeftOperandCtx f2) | Related f1 <- fixityLevel f1+ , Related f2 <- fixityLevel f2+ , f1 > f2 = False opBrackets f1- (RightOperandCtx f2) | fixityLevel f1 > fixityLevel f2 = False+ (RightOperandCtx f2) | Related f1 <- fixityLevel f1+ , Related f2 <- fixityLevel f2+ , f1 > f2 = False opBrackets _ TopCtx = False opBrackets _ FunctionSpaceDomainCtx = False opBrackets _ InsideOperandCtx = False@@ -245,8 +323,31 @@ instance KillRange x => KillRange (ThingWithFixity x) where killRange (ThingWithFixity c f) = ThingWithFixity (killRange c) f +-- * Some lenses++_notaFixity :: Lens' Fixity NewNotation+_notaFixity f r = f (notaFixity r) <&> \x -> r { notaFixity = x }++_fixityAssoc :: Lens' Associativity Fixity+_fixityAssoc f r = f (fixityAssoc r) <&> \x -> r { fixityAssoc = x }++_fixityLevel :: Lens' PrecedenceLevel Fixity+_fixityLevel f r = f (fixityLevel r) <&> \x -> r { fixityLevel = x }+ ------------------------------------------------------------------------ -- * Printing ------------------------------------------------------------------------ -- deriving instance Show Fixity'++------------------------------------------------------------------------+-- * NFData instances+------------------------------------------------------------------------++instance NFData Fixity' where+ rnf (Fixity' _ a) = rnf a++-- | Ranges are not forced.++instance NFData Fixity where+ rnf (Fixity _ _ _) = ()
src/full/Agda/Syntax/Fixity.hs-boot view
@@ -1,10 +1,13 @@ module Agda.Syntax.Fixity where +import Control.DeepSeq (NFData)+ import Agda.Syntax.Position ( KillRange ) data Fixity' instance KillRange Fixity'+instance NFData Fixity' instance Show Fixity' -noFixity', defaultFixity' :: Fixity'+noFixity' :: Fixity'
src/full/Agda/Syntax/Info.hs view
@@ -36,7 +36,7 @@ , metaNumber :: Maybe MetaId , metaNameSuggestion :: String }- deriving (Typeable, Show)+ deriving (Typeable, Show, Eq) emptyMetaInfo :: MetaInfo emptyMetaInfo = MetaInfo@@ -57,7 +57,7 @@ --------------------------------------------------------------------------} newtype ExprInfo = ExprRange Range- deriving (Typeable, Show, Null)+ deriving (Typeable, Show, Eq, Null) exprNoRange :: ExprInfo exprNoRange = ExprRange noRange@@ -83,7 +83,7 @@ , minfoDirective :: Maybe ImportDirective -- ^ Retained for @abstractToConcrete@ of 'ModuleMacro'. }- deriving (Typeable)+ deriving (Typeable, Eq) deriving instance (Show OpenShortHand, Show ImportDirective) => Show ModuleInfo @@ -101,7 +101,7 @@ --------------------------------------------------------------------------- newtype LetInfo = LetRange Range- deriving (Typeable, Show, Null)+ deriving (Typeable, Show, Eq, Null) instance HasRange LetInfo where getRange (LetRange r) = r@@ -118,16 +118,17 @@ , defAccess :: Access , defAbstract :: IsAbstract , defInstance :: IsInstance+ , defMacro :: IsMacro , defInfo :: DeclInfo }- deriving (Typeable, Show)+ deriving (Typeable, Show, Eq) mkDefInfo :: Name -> Fixity' -> Access -> IsAbstract -> Range -> DefInfo-mkDefInfo x f a ab r = DefInfo f a ab NotInstanceDef (DeclInfo x r)+mkDefInfo x f a ab r = DefInfo f a ab NotInstanceDef NotMacroDef (DeclInfo x r) -- | Same as @mkDefInfo@ but where we can also give the @IsInstance@-mkDefInfoInstance :: Name -> Fixity' -> Access -> IsAbstract -> IsInstance -> Range -> DefInfo-mkDefInfoInstance x f a ab i r = DefInfo f a ab i (DeclInfo x r)+mkDefInfoInstance :: Name -> Fixity' -> Access -> IsAbstract -> IsInstance -> IsMacro -> Range -> DefInfo+mkDefInfoInstance x f a ab i m r = DefInfo f a ab i m (DeclInfo x r) instance HasRange DefInfo where getRange = getRange . defInfo@@ -146,7 +147,7 @@ { declName :: Name , declRange :: Range }- deriving (Typeable, Show)+ deriving (Typeable, Show, Eq) instance HasRange DeclInfo where getRange = declRange@@ -162,10 +163,11 @@ --------------------------------------------------------------------------} data MutualInfo = MutualInfo- { mutualTermCheck :: TerminationCheck Name- , mutualRange :: Range+ { mutualTermCheck :: TerminationCheck Name+ , mutualPositivityCheck :: PositivityCheck+ , mutualRange :: Range }- deriving (Typeable, Show)+ deriving (Typeable, Show, Eq) instance HasRange MutualInfo where getRange = mutualRange@@ -178,7 +180,7 @@ --------------------------------------------------------------------------} newtype LHSInfo = LHSRange Range- deriving (Typeable, Show, Null)+ deriving (Typeable, Show, Eq, Null) instance HasRange LHSInfo where getRange (LHSRange r) = r@@ -206,7 +208,7 @@ --- Or from a user written constructor or record pattern? , patInfo :: PatInfo }- deriving (Typeable)+ deriving (Typeable, Eq) instance Show ConPatInfo where show (ConPatInfo po i) = applyWhen (po == ConPImplicit) ("implicit " ++) $ show i
src/full/Agda/Syntax/Internal.hs view
@@ -9,6 +9,10 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TupleSections #-}+#if __GLASGOW_HASKELL__ <= 708+{-# LANGUAGE OverlappingInstances #-}+#endif module Agda.Syntax.Internal ( module Agda.Syntax.Internal@@ -19,11 +23,8 @@ import Prelude hiding (foldr, mapM, null) -import Control.Arrow ((***)) import Control.Applicative hiding (empty) import Control.Monad.Identity hiding (mapM)-import Control.Monad.State hiding (mapM)-import Control.Parallel import Data.Foldable ( Foldable, foldMap ) import Data.Function@@ -40,8 +41,7 @@ import Data.Typeable (Typeable) import Agda.Syntax.Position-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Literal import Agda.Syntax.Abstract (IsProjP(..)) import Agda.Syntax.Abstract.Name@@ -63,16 +63,11 @@ import Agda.Utils.Pointer import Agda.Utils.Size import Agda.Utils.Pretty as P+import Agda.Utils.Tuple #include "undefined.h" import Agda.Utils.Impossible -type Color = Term-type ArgInfo = Common.ArgInfo Color-type Arg a = Common.Arg Color a-type Dom a = Common.Dom Color a-type NamedArg a = Common.NamedArg Color a- -- | Type of argument lists. -- type Args = [Arg Term]@@ -126,7 +121,6 @@ -- data Term = Var {-# UNPACK #-} !Int Elims -- ^ @x es@ neutral | Lam ArgInfo (Abs Term) -- ^ Terms are beta normal. Relevance is ignored- | ExtLam [Clause] Args -- ^ Only used by unquote --> reify. Should never appear elsewhere. | Lit Literal | Def QName Elims -- ^ @f es@, possibly a delta/iota-redex | Con ConHead Args -- ^ @c vs@@@ -199,7 +193,7 @@ -- General instance leads to overlapping instances. -- instance (Decoration f, LensSort a) => LensSort (f a) where-instance LensSort a => LensSort (Common.Dom c a) where+instance LensSort a => LensSort (Dom a) where lensSort = traverseF . lensSort instance LensSort a => LensSort (Abs a) where@@ -273,6 +267,10 @@ -- ^ Introduced by 'instantiate', removed by 'reduce'. deriving (Show, Typeable) +---------------------------------------------------------------------------+-- * Blocked Terms+---------------------------------------------------------------------------+ -- | Even if we are not stuck on a meta during reduction -- we can fail to reduce a definition by pattern matching -- for another reason.@@ -337,10 +335,10 @@ _ `mappend` b@Blocked{} = b NotBlocked x _ `mappend` NotBlocked y _ = NotBlocked (x `mappend` y) () --- See Issue 1573.+-- See issues 1573 and 1674. #if !MIN_VERSION_transformers(0,4,1) instance Error Blocked_ where- noMsg = __IMPOSSIBLE__+ noMsg = mempty #endif -- | When trying to reduce @f es@, on match failed on one@@ -384,7 +382,7 @@ -- | A clause is a list of patterns and the clause body should @Bind@. -- -- The telescope contains the types of the pattern variables and the--- permutation is how to get from the order the variables occur in+-- de Bruijn indices say how to get from the order the variables occur in -- the patterns to the order they occur in the telescope. The body -- binds the variables in the order they appear in the patterns. --@@ -398,9 +396,7 @@ { clauseRange :: Range , clauseTel :: Telescope -- ^ @Δ@: The types of the pattern variables.- , clausePerm :: Permutation- -- ^ @π@ with @Γ ⊢ renamingR π : Δ@, which means @Δ ⊢ renaming π : Γ@.- , namedClausePats :: [NamedArg Pattern]+ , namedClausePats :: [NamedArg DeBruijnPattern] -- ^ @let Γ = patternVars namedClausePats@ , clauseBody :: ClauseBody -- ^ @λΓ.v@@@ -409,10 +405,11 @@ -- Used, e.g., by @TermCheck@. -- Can be 'Irrelevant' if we encountered an irrelevant projection -- pattern on the lhs.+ , clauseCatchall :: Bool } deriving (Typeable, Show) -clausePats :: Clause -> [Arg Pattern]+clausePats :: Clause -> [Arg DeBruijnPattern] clausePats = map (fmap namedThing) . namedClausePats data ClauseBodyF a = Body a@@ -471,6 +468,9 @@ namedVarP x = Named named $ VarP x where named = if isUnderscore x then Nothing else Just $ unranged x +namedDBVarP :: Int -> PatVarName -> Named (Ranged PatVarName) DeBruijnPattern+namedDBVarP m = (fmap . fmap) (m,) . namedVarP+ -- | The @ConPatternInfo@ states whether the constructor belongs to -- a record type (@Just@) or data type (@Nothing@). -- In the former case, the @Bool@ says whether the record pattern@@ -497,15 +497,15 @@ -- | Extract pattern variables in left-to-right order. -- A 'DotP' is also treated as variable (see docu for 'Clause').-patternVars :: Arg Pattern -> [Arg (Either PatVarName Term)]-patternVars (Common.Arg i (VarP x) ) = [Common.Arg i $ Left x]-patternVars (Common.Arg i (DotP t) ) = [Common.Arg i $ Right t]-patternVars (Common.Arg i (ConP _ _ ps)) = List.concat $ map (patternVars . fmap namedThing) ps-patternVars (Common.Arg i (LitP l) ) = []-patternVars (Common.Arg i ProjP{} ) = []+patternVars :: Arg (Pattern' a) -> [Arg (Either a Term)]+patternVars (Arg i (VarP x) ) = [Arg i $ Left x]+patternVars (Arg i (DotP t) ) = [Arg i $ Right t]+patternVars (Arg i (ConP _ _ ps)) = List.concat $ map (patternVars . fmap namedThing) ps+patternVars (Arg i (LitP l) ) = []+patternVars (Arg i ProjP{} ) = [] -- | Does the pattern perform a match that could fail?-properlyMatching :: Pattern -> Bool+properlyMatching :: Pattern' a -> Bool properlyMatching VarP{} = False properlyMatching DotP{} = False properlyMatching LitP{} = True@@ -513,7 +513,7 @@ List.any (properlyMatching . namedArg) ps -- or one of subpatterns is a proper m properlyMatching ProjP{} = True -instance IsProjP Pattern where+instance IsProjP (Pattern' a) where isProjP (ProjP d) = Just d isProjP _ = Nothing @@ -523,7 +523,7 @@ -- | Substitutions. -data Substitution+data Substitution' a = IdS -- ^ Identity substitution.@@ -534,7 +534,7 @@ -- Apply this to closed terms you want to use in a non-empty context. -- @Γ ⊢ EmptyS : ()@ - | Term :# Substitution+ | a :# Substitution' a -- ^ Substitution extension, ``cons''. -- @ -- Γ ⊢ u : Aρ Γ ⊢ ρ : Δ@@ -542,7 +542,7 @@ -- Γ ⊢ u :# ρ : Δ, A -- @ - | Strengthen Empty Substitution+ | Strengthen Empty (Substitution' a) -- ^ Strengthening substitution. First argument is @__IMPOSSIBLE__@. -- Apply this to a term which does not contain variable 0 -- to lower all de Bruijn indices by one.@@ -552,7 +552,7 @@ -- Γ ⊢ Strengthen ρ : Δ, A -- @ - | Wk !Int Substitution+ | Wk !Int (Substitution' a) -- ^ Weakning substitution, lifts to an extended context. -- @ -- Γ ⊢ ρ : Δ@@ -561,7 +561,7 @@ -- @ - | Lift !Int Substitution+ | Lift !Int (Substitution' a) -- ^ Lifting substitution. Use this to go under a binder. -- @Lift 1 ρ == var 0 :# Wk 1 ρ@. -- @@@ -569,11 +569,37 @@ -- ------------------------- -- Γ, Ψρ ⊢ Lift |Ψ| ρ : Δ, Ψ -- @- deriving (Show) + deriving (Show, Functor, Foldable, Traversable)++type Substitution = Substitution' Term+type PatternSubstitution = Substitution' DeBruijnPattern+ infixr 4 :# + ---------------------------------------------------------------------------+-- * Views+---------------------------------------------------------------------------++-- | View type as equality type.++data EqualityView+ = EqualityType+ { eqtSort :: Sort -- ^ Sort of this type.+ , eqtName :: QName -- ^ Builtin EQUALITY.+ , eqtLevel :: Arg Term -- ^ Hidden+ , eqtType :: Arg Term -- ^ Hidden+ , eqtLhs :: Arg Term -- ^ NotHidden+ , eqtRhs :: Arg Term -- ^ NotHidden+ }+ | OtherType Type -- ^ reduced++isEqualityType :: EqualityView -> Bool+isEqualityType EqualityType{} = True+isEqualityType OtherType{} = False++--------------------------------------------------------------------------- -- * Absurd Lambda --------------------------------------------------------------------------- @@ -596,33 +622,36 @@ -- * Pointers and Sharing --------------------------------------------------------------------------- +-- | Remove top-level @Shared@ data constructors. ignoreSharing :: Term -> Term--- ignoreSharing (Shared p) = ignoreSharing $ derefPtr p+ignoreSharing (Shared p) = ignoreSharing $ derefPtr p ignoreSharing v = v ignoreSharingType :: Type -> Type--- ignoreSharingType (El s v) = El s (ignoreSharing v)-ignoreSharingType v = v+ignoreSharingType (El s v) = El s (ignoreSharing v)+-- ignoreSharingType v = v -- | Introduce sharing.-shared :: Term -> Term--- shared v@Shared{} = v--- shared v@(Var _ []) = v--- shared v = Shared (newPtr v)-shared v = v--sharedType :: Type -> Type--- sharedType (El s v) = El s (shared v)-sharedType v = v+shared_ :: Term -> Term+shared_ v@Shared{} = v+shared_ v@(Var _ []) = v+shared_ v@(Con _ []) = v -- Issue 1691: sharing (zero : Nat) destroys constructorForm+shared_ v = Shared (newPtr v) -- | Typically m would be TCM and f would be Blocked.-updateSharedFM :: (Monad m, Applicative m, Traversable f) => (Term -> m (f Term)) -> Term -> m (f Term)+updateSharedFM+#if __GLASGOW_HASKELL__ <= 708+ :: (Applicative m, Monad m, Traversable f)+#else+ :: (Monad m, Traversable f)+#endif+ => (Term -> m (f Term)) -> Term -> m (f Term) updateSharedFM f v0@(Shared p) = do fv <- f (derefPtr p) flip traverse fv $ \v -> case derefPtr (setPtr v p) of Var _ [] -> return v- _ -> compressPointerChain v0 `pseq` return v0+ _ -> return $! compressPointerChain v0 updateSharedFM f v = f v updateSharedM :: Monad m => (Term -> m Term) -> Term -> m Term@@ -630,14 +659,14 @@ v <- f (derefPtr p) case derefPtr (setPtr v p) of Var _ [] -> return v- _ -> compressPointerChain v0 `pseq` return v0+ _ -> return $! compressPointerChain v0 updateSharedM f v = f v updateShared :: (Term -> Term) -> Term -> Term updateShared f v0@(Shared p) = case derefPtr (setPtr (f $ derefPtr p) p) of v@(Var _ []) -> v- _ -> compressPointerChain v0 `pseq` v0+ _ -> compressPointerChain v0 updateShared f v = f v pointerChain :: Term -> [Ptr Term]@@ -645,14 +674,16 @@ pointerChain _ = [] -- Redirect all top-level pointers to point to the last pointer. So, after--- compression there are at most two top-level indirections.+-- compression there are at most two top-level indirections. Then return the+-- inner-most pointer so we have only one pointer for the result. compressPointerChain :: Term -> Term compressPointerChain v = case reverse $ pointerChain v of p:_:ps@(_:_) -> setPointers (Shared p) ps+ p:_:_ -> (Shared p) _ -> v where- setPointers _ [] = v+ setPointers u [] = u setPointers u (p : ps) = setPtr u p `seq` setPointers u ps @@ -717,16 +748,16 @@ sgTel (x, dom) = ExtendTel dom $ Abs x EmptyTel instance SgTel (Dom (ArgName, Type)) where- sgTel (Common.Dom ai (x, t)) = ExtendTel (Common.Dom ai t) $ Abs x EmptyTel+ sgTel (Dom ai (x, t)) = ExtendTel (Dom ai t) $ Abs x EmptyTel instance SgTel (Dom Type) where sgTel dom = sgTel (stringToArgName "_", dom) hackReifyToMeta :: Term-hackReifyToMeta = DontCare $ Lit $ LitInt noRange (-42)+hackReifyToMeta = DontCare $ Lit $ LitNat noRange (-42) isHackReifyToMeta :: Term -> Bool-isHackReifyToMeta (DontCare (Lit (LitInt r (-42)))) = r == noRange+isHackReifyToMeta (DontCare (Lit (LitNat r (-42)))) = r == noRange isHackReifyToMeta _ = False ---------------------------------------------------------------------------@@ -809,12 +840,15 @@ MetaV x es -> Just (MetaV x, es) Con{} -> Nothing Lit{} -> Nothing+ -- Andreas, 2016-04-13, Issue 1932: We convert λ x → x .f into f+ Lam _ (Abs _ v) -> case ignoreSharing v of+ Var 0 [Proj f] -> Just (Def f, [])+ _ -> Nothing Lam{} -> Nothing Pi{} -> Nothing Sort{} -> Nothing Level{} -> Nothing DontCare{} -> Nothing- ExtLam{} -> Nothing Shared{} -> __IMPOSSIBLE__ {- PROBABLY USELESS@@ -840,7 +874,7 @@ -- | Split at first non-'Apply' splitApplyElims :: Elims -> (Args, Elims)-splitApplyElims (Apply u : es) = (u :) *** id $ splitApplyElims es+splitApplyElims (Apply u : es) = mapFst (u :) $ splitApplyElims es splitApplyElims es = ([], es) class IsProjElim e where@@ -858,17 +892,21 @@ argsFromElims :: Elims -> Args argsFromElims = map argFromElim . dropProjElims +-- | Drop 'Proj' constructors. (Safe)+allProjElims :: Elims -> Maybe [QName]+allProjElims = mapM isProjElim+ {- NOTE: Elim' already contains Arg. -- | Commute functors 'Arg' and 'Elim\''.-swapArgElim :: Common.Arg c (Elim' a) -> Elim' (Common.Arg c a)+swapArgElim :: Arg (Elim' a) -> Elim' (Arg a) -swapArgElim (Common.Arg ai (Apply a)) = Apply (Common.Arg ai a)-swapArgElim (Common.Arg ai (Proj d)) = Proj d+swapArgElim (Arg ai (Apply a)) = Apply (Arg ai a)+swapArgElim (Arg ai (Proj d)) = Proj d -- IMPOSSIBLE TO DEFINE-swapElimArg :: Elim' (Common.Arg c a) -> Common.Arg c (Elim' a)-swapElimArg (Apply (Common.Arg ai a)) = Common.Arg ai (Apply a)+swapElimArg :: Elim' (Arg a) -> Arg (Elim' a)+swapElimArg (Apply (Arg ai a)) = Arg ai (Apply a) swapElimArg (Proj d) = defaultArg (Proj d) -} @@ -889,8 +927,8 @@ -- | A 'null' clause is one with no patterns and no rhs. -- Should not exist in practice. instance Null Clause where- empty = Clause empty empty empty empty empty empty- null (Clause r tel perm pats body t)+ empty = Clause empty empty empty empty empty False+ null (Clause r tel pats body t catchall) = null tel && null pats && null body@@ -939,7 +977,11 @@ tsize :: a -> Sum Int +#if __GLASGOW_HASKELL__ >= 710+instance {-# OVERLAPPABLE #-} (Foldable t, TermSize a) => TermSize (t a) where+#else instance (Foldable t, TermSize a) => TermSize (t a) where+#endif tsize = foldMap tsize instance TermSize Term where@@ -955,7 +997,6 @@ Sort s -> tsize s DontCare mv -> tsize mv Shared p -> tsize (derefPtr p)- ExtLam{} -> __IMPOSSIBLE__ instance TermSize Sort where tsize s = case s of@@ -978,7 +1019,7 @@ tsize (NeutralLevel _ v) = tsize v tsize (UnreducedLevel v) = tsize v -instance TermSize Substitution where+instance TermSize a => TermSize (Substitution' a) where tsize IdS = 1 tsize EmptyS = 1 tsize (Wk _ rho) = 1 + tsize rho@@ -1006,7 +1047,6 @@ Sort s -> killRange1 Sort s DontCare mv -> killRange1 DontCare mv Shared p -> Shared $ updatePtr killRange p- ExtLam c vs -> killRange2 ExtLam c vs instance KillRange Level where killRange (Max as) = killRange1 Max as@@ -1043,17 +1083,17 @@ instance KillRange ConPatternInfo where killRange (ConPatternInfo mr mt) = killRange1 (ConPatternInfo mr) mt -instance KillRange Pattern where+instance KillRange a => KillRange (Pattern' a) where killRange p = case p of- VarP{} -> p+ VarP x -> killRange1 VarP x DotP v -> killRange1 DotP v ConP con info ps -> killRange3 ConP con info ps LitP l -> killRange1 LitP l ProjP q -> killRange1 ProjP q instance KillRange Clause where- killRange (Clause r tel perm ps body t) = killRange6 Clause r tel perm ps body t+ killRange (Clause r tel ps body t catchall) = killRange6 Clause r tel ps body t catchall instance KillRange a => KillRange (ClauseBodyF a) where killRange = fmap killRange@@ -1119,7 +1159,6 @@ MetaV x els -> pretty x `pApp` els DontCare v -> pretty v Shared{} -> __IMPOSSIBLE__- ExtLam{} -> __IMPOSSIBLE__ where pApp d els = mparens (not (null els) && p > 9) $ d <+> fsep (map (prettyPrec 10) els)@@ -1174,14 +1213,6 @@ instance Pretty Elim where prettyPrec p (Apply v) = prettyPrec p v prettyPrec _ (Proj x) = text ("." ++ show x)--instance Pretty a => Pretty (Arg a) where- prettyPrec p a =- ($ unArg a) $- case getHiding a of- NotHidden -> prettyPrec p- Hidden -> braces . pretty- Instance -> braces . braces . pretty instance Pretty a => Pretty (Pattern' a) where prettyPrec n (VarP x) = prettyPrec n x
src/full/Agda/Syntax/Internal/Defs.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-} -- | Extract used definitions from terms.@@ -10,10 +9,7 @@ import qualified Data.Foldable as Fold import Agda.Syntax.Common-import Agda.Syntax.Internal hiding (ArgInfo, Arg, Dom)--import Agda.Utils.Impossible-#include "undefined.h"+import Agda.Syntax.Internal -- | @getDefs' lookup emb a@ extracts all used definitions -- (functions, data/record types) from @a@, embedded into a monoid via @emb@.@@ -68,7 +64,6 @@ MetaV x vs -> getDefs x >> getDefs vs DontCare v -> getDefs v Shared p -> getDefs $ derefPtr p -- TODO: exploit sharing!- ExtLam _ _ -> __IMPOSSIBLE__ instance GetDefs MetaId where getDefs x = doMeta x@@ -109,14 +104,11 @@ instance GetDefs a => GetDefs (Elim' a) where getDefs = Fold.mapM_ getDefs -instance GetDefs c => GetDefs (ArgInfo c) where- getDefs = Fold.mapM_ getDefs--instance (GetDefs c, GetDefs a) => GetDefs (Arg c a) where- getDefs (Arg c a) = getDefs c >> getDefs a+instance GetDefs a => GetDefs (Arg a) where+ getDefs = getDefs . unArg -instance (GetDefs c, GetDefs a) => GetDefs (Dom c a) where- getDefs (Dom c a) = getDefs c >> getDefs a+instance GetDefs a => GetDefs (Dom a) where+ getDefs = getDefs . unDom instance GetDefs a => GetDefs (Abs a) where getDefs = getDefs . unAbs
src/full/Agda/Syntax/Internal/Generic.hs view
@@ -7,15 +7,19 @@ import Data.Traversable import Data.Monoid import Data.Foldable+import Agda.Syntax.Common import Agda.Syntax.Internal -import Agda.Utils.Impossible-#include "undefined.h"- class TermLike a where- traverseTerm :: (Term -> Term) -> a -> a- traverseTermM :: (Monad m, Applicative m) => (Term -> m Term) -> a -> m a- foldTerm :: Monoid m => (Term -> m) -> a -> m+ traverseTerm :: (Term -> Term) -> a -> a+ traverseTermM+#if __GLASGOW_HASKELL__ <= 708+ :: (Applicative m, Monad m)+#else+ :: Monad m+#endif+ => (Term -> m Term) -> a -> m a+ foldTerm :: Monoid m => (Term -> m) -> a -> m -- * Constants @@ -111,7 +115,6 @@ Sort _ -> f t DontCare mv -> f $ DontCare $ traverseTerm f mv Shared p -> f $ Shared $ traverseTerm f p- ExtLam{} -> __IMPOSSIBLE__ traverseTermM f t = case t of Var i xs -> f =<< Var i <$> traverseTermM f xs@@ -125,7 +128,6 @@ Sort _ -> f t DontCare mv -> f =<< DontCare <$> traverseTermM f mv Shared p -> f =<< Shared <$> traverseTermM f p- ExtLam{} -> __IMPOSSIBLE__ foldTerm f t = f t `mappend` case t of Var i xs -> foldTerm f xs@@ -139,7 +141,6 @@ Sort _ -> mempty DontCare mv -> foldTerm f mv Shared p -> foldTerm f p- ExtLam{} -> __IMPOSSIBLE__ instance TermLike Level where traverseTerm f (Max as) = Max $ traverseTerm f as@@ -178,6 +179,36 @@ traverseTermM f (El s t) = El s <$> traverseTermM f t foldTerm f (El s t) = foldTerm f t +instance TermLike EqualityView where++ traverseTerm f v = case v of+ OtherType t -> OtherType+ (traverseTerm f t)+ EqualityType s eq l t a b -> EqualityType s eq+ (traverseTerm f l)+ (traverseTerm f t)+ (traverseTerm f a)+ (traverseTerm f b)++ traverseTermM f v = case v of+ OtherType t -> OtherType+ <$> traverseTermM f t+ EqualityType s eq l t a b -> EqualityType s eq+ <$> traverseTermM f l+ <*> traverseTermM f t+ <*> traverseTermM f a+ <*> traverseTermM f b++ foldTerm f v = case v of+ OtherType t -> foldTerm f t+ EqualityType s eq l t a b -> foldTerm f [l, t, a, b]+ -- | Put it in a monad to make it possible to do strictly.-copyTerm :: (TermLike a, Applicative m, Monad m) => a -> m a+copyTerm+#if __GLASGOW_HASKELL__ <= 708+ :: (TermLike a, Applicative m, Monad m)+#else+ :: (TermLike a, Monad m)+#endif+ => a -> m a copyTerm = traverseTermM return
+ src/full/Agda/Syntax/Internal/Names.hs view
@@ -0,0 +1,173 @@+{-# LANGUAGE CPP #-}++-- | Extract all names from things.+module Agda.Syntax.Internal.Names where++import Data.Foldable+import Data.Map (Map)+import qualified Data.Map as Map+import Data.Set (Set)+import qualified Data.Set as Set++import Control.Applicative++import Agda.Syntax.Common+import Agda.Syntax.Literal+import Agda.Syntax.Internal+import qualified Agda.Syntax.Concrete as C+import qualified Agda.Syntax.Abstract as A+import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.CompiledClause++import Agda.Utils.Impossible+#include "undefined.h"++class NamesIn a where+ namesIn :: a -> Set QName++namesInFoldable :: (Foldable f, NamesIn a) => f a -> Set QName+namesInFoldable x = Set.unions $ foldMap ((:[]) . namesIn) x++instance NamesIn a => NamesIn (Maybe a) where namesIn = namesInFoldable+instance NamesIn a => NamesIn [a] where namesIn = namesInFoldable+instance NamesIn a => NamesIn (Arg a) where namesIn = namesInFoldable+instance NamesIn a => NamesIn (Dom a) where namesIn = namesInFoldable+instance NamesIn a => NamesIn (Named n a) where namesIn = namesInFoldable+instance NamesIn a => NamesIn (Abs a) where namesIn = namesInFoldable+instance NamesIn a => NamesIn (WithArity a) where namesIn = namesInFoldable+instance NamesIn a => NamesIn (Tele a) where namesIn = namesInFoldable+instance NamesIn a => NamesIn (ClauseBodyF a) where namesIn = namesInFoldable++instance NamesIn a => NamesIn (C.FieldAssignment' a) where namesIn = namesInFoldable++instance (NamesIn a, NamesIn b) => NamesIn (a, b) where+ namesIn (x, y) = Set.union (namesIn x) (namesIn y)++instance (NamesIn a, NamesIn b, NamesIn c) => NamesIn (a, b, c) where+ namesIn (x, y, z) = namesIn (x, (y, z))++instance NamesIn Definition where+ namesIn def = namesIn (defType def, theDef def)++instance NamesIn Defn where+ namesIn def = case def of+ Axiom -> Set.empty+ Function { funClauses = cl, funCompiled = cc } -> namesIn (cl, cc)+ Datatype { dataClause = cl, dataCons = cs, dataSort = s } -> namesIn (cl, cs, s)+ Record { recClause = cl, recConHead = c, recFields = fs } -> namesIn (cl, c, fs)+ -- Don't need recTel or recConType since those will be reachable from the constructor+ Constructor { conSrcCon = c, conData = d } -> namesIn (c, d)+ Primitive { primClauses = cl, primCompiled = cc } -> namesIn (cl, cc)++instance NamesIn Clause where+ namesIn Clause{ clauseTel = tel, namedClausePats = ps, clauseBody = b, clauseType = t } =+ namesIn ((tel, ps, b), t)++instance NamesIn CompiledClauses where+ namesIn (Case _ c) = namesIn c+ namesIn (Done _ v) = namesIn v+ namesIn Fail = Set.empty++instance NamesIn a => NamesIn (Case a) where+ namesIn Branches{ conBranches = bs, catchAllBranch = c } =+ namesIn (Map.toList bs, c)++instance NamesIn (Pattern' a) where+ namesIn p = case p of+ VarP{} -> Set.empty+ LitP l -> namesIn l+ DotP v -> namesIn v+ ConP c _ args -> namesIn (c, args)+ ProjP f -> namesIn f++instance NamesIn a => NamesIn (Type' a) where+ namesIn (El s t) = namesIn (s, t)++instance NamesIn Sort where+ namesIn s = case s of+ Type l -> namesIn l+ Prop -> Set.empty+ Inf -> Set.empty+ SizeUniv -> Set.empty+ DLub a b -> namesIn (a, b)++instance NamesIn Term where+ namesIn v = case ignoreSharing v of+ Var _ args -> namesIn args+ Lam _ b -> namesIn b+ Lit l -> namesIn l+ Def f args -> namesIn (f, args)+ Con c args -> namesIn (c, args)+ Pi a b -> namesIn (a, b)+ Sort s -> namesIn s+ Level l -> namesIn l+ MetaV _ args -> namesIn args+ DontCare v -> namesIn v+ Shared{} -> __IMPOSSIBLE__++instance NamesIn Level where+ namesIn (Max ls) = namesIn ls++instance NamesIn PlusLevel where+ namesIn ClosedLevel{} = Set.empty+ namesIn (Plus _ l) = namesIn l++instance NamesIn LevelAtom where+ namesIn l = case l of+ MetaLevel _ args -> namesIn args+ BlockedLevel _ v -> namesIn v+ NeutralLevel _ v -> namesIn v+ UnreducedLevel v -> namesIn v++-- For QName literals!+instance NamesIn Literal where+ namesIn l = case l of+ LitNat{} -> Set.empty+ LitString{} -> Set.empty+ LitChar{} -> Set.empty+ LitFloat{} -> Set.empty+ LitQName _ x -> namesIn x+ LitMeta{} -> Set.empty++instance NamesIn a => NamesIn (Elim' a) where+ namesIn (Apply arg) = namesIn arg+ namesIn (Proj f) = namesIn f++instance NamesIn QName where namesIn x = Set.singleton x+instance NamesIn ConHead where namesIn h = namesIn (conName h)++instance NamesIn a => NamesIn (Open a) where+ namesIn = namesIn . openThing++instance NamesIn DisplayForm where+ namesIn (Display _ ps v) = namesIn (ps, v)++instance NamesIn DisplayTerm where+ namesIn v = case v of+ DWithApp v us vs -> namesIn (v, us, vs)+ DCon c vs -> namesIn (c, vs)+ DDef f es -> namesIn (f, es)+ DDot v -> namesIn v+ DTerm v -> namesIn v++-- Pattern synonym stuff --++newtype PSyn = PSyn A.PatternSynDefn+instance NamesIn PSyn where+ namesIn (PSyn (_args, p)) = namesIn p++instance NamesIn (A.Pattern' a) where+ namesIn p = case p of+ A.VarP{} -> Set.empty+ A.ConP _ c args -> namesIn (c, args)+ A.DefP _ f args -> namesIn (f, args)+ A.WildP{} -> Set.empty+ A.AsP _ _ p -> namesIn p+ A.AbsurdP{} -> Set.empty+ A.LitP l -> namesIn l+ A.PatternSynP _ c args -> namesIn (c, args)+ A.RecP _ fs -> namesIn fs+ A.DotP{} -> __IMPOSSIBLE__ -- Dot patterns are not allowed in pattern synonyms++instance NamesIn AmbiguousQName where+ namesIn (AmbQ cs) = namesIn cs
src/full/Agda/Syntax/Internal/Pattern.hs view
@@ -16,15 +16,16 @@ import Control.Monad.State import Data.Maybe+import Data.List import Data.Traversable (traverse) -import Agda.Syntax.Common as Common hiding (NamedArg)+import Agda.Syntax.Common import Agda.Syntax.Abstract (IsProjP(..))-import Agda.Syntax.Internal hiding (Arg)+import Agda.Syntax.Internal import qualified Agda.Syntax.Internal as I +import Agda.Utils.Functor import Agda.Utils.List-import Agda.Utils.Functor ((<.>)) import Agda.Utils.Permutation import Agda.Utils.Size (size) import Agda.Utils.Tuple@@ -44,7 +45,7 @@ -- | Translate the clause patterns to an elimination spine -- with free variables bound by the clause telescope. clauseElims :: Clause -> Elims-clauseElims cl = patternsToElims (clausePerm cl) (namedClausePats cl)+clauseElims cl = patternsToElims $ namedClausePats cl -- | Arity of a function, computed from clauses. class FunArity a where@@ -78,17 +79,21 @@ -- using one label for each variable pattern and one for each dot pattern. class LabelPatVars a b i | b -> i where labelPatVars :: a -> State [i] b+ unlabelPatVars :: b -> a -- ^ Intended, but unpractical due to the absence of type-level lambda, is: -- @labelPatVars :: f (Pattern' x) -> State [i] (f (Pattern' (i,x)))@ -instance LabelPatVars a b i => LabelPatVars (Arg c a) (Arg c b) i where+instance LabelPatVars a b i => LabelPatVars (Arg a) (Arg b) i where labelPatVars = traverse labelPatVars+ unlabelPatVars = fmap unlabelPatVars instance LabelPatVars a b i => LabelPatVars (Named x a) (Named x b) i where labelPatVars = traverse labelPatVars+ unlabelPatVars = fmap unlabelPatVars instance LabelPatVars a b i => LabelPatVars [a] [b] i where labelPatVars = traverse labelPatVars+ unlabelPatVars = fmap unlabelPatVars instance LabelPatVars (Pattern' x) (Pattern' (i,x)) i where labelPatVars p =@@ -99,6 +104,7 @@ LitP l -> return $ LitP l ProjP q -> return $ ProjP q where next = do (x:xs) <- get; put xs; return x+ unlabelPatVars = fmap snd -- | Augment pattern variables with their de Bruijn index. {-# SPECIALIZE numberPatVars :: Permutation -> [NamedArg (Pattern' x)] -> [NamedArg (Pattern' (Int, x))] #-}@@ -121,22 +127,47 @@ numberPatVars perm ps = evalState (labelPatVars ps) $ permPicks $ flipP $ invertP __IMPOSSIBLE__ perm -patternsToElims :: Permutation -> [I.NamedArg Pattern] -> [Elim]-patternsToElims perm ps = map build' $ numberPatVars perm ps+unnumberPatVars :: LabelPatVars a b i => b -> a+unnumberPatVars = unlabelPatVars++dbPatPerm :: [NamedArg DeBruijnPattern] -> Permutation+dbPatPerm ps = Perm (size ixs) picks where+ ixs = concatMap (getIndices . namedThing . unArg) ps+ n = size $ catMaybes ixs+ picks = for (downFrom n) $ \i ->+ fromMaybe __IMPOSSIBLE__ $ findIndex (Just i ==) ixs - build' :: NamedArg (Pattern' (Int, PatVarName)) -> Elim- build' = build . fmap namedThing+ getIndices :: DeBruijnPattern -> [Maybe Int]+ getIndices (VarP (i,_)) = [Just i]+ getIndices (ConP c _ ps) = concatMap (getIndices . namedThing . unArg) ps+ getIndices (DotP _) = [Nothing]+ getIndices (LitP _) = []+ getIndices (ProjP _) = [] - build :: I.Arg (Pattern' (Int, PatVarName)) -> Elim- build (Arg ai (VarP (i, _))) = Apply $ Arg ai $ var i- build (Arg ai (ConP c _ ps)) = Apply $ Arg ai $ Con c $- map (argFromElim . build') ps- build (Arg ai (DotP t) ) = Apply $ Arg ai t- build (Arg ai (LitP l) ) = Apply $ Arg ai $ Lit l- build (Arg ai (ProjP dest) ) = Proj $ dest+clausePerm :: Clause -> Permutation+clausePerm = dbPatPerm . namedClausePats --- patternsToElims :: Permutation -> [I.NamedArg Pattern] -> [Elim]+patternToElim :: Arg DeBruijnPattern -> Elim+patternToElim (Arg ai (VarP (i, _))) = Apply $ Arg ai $ var i+patternToElim (Arg ai (ConP c _ ps)) = Apply $ Arg ai $ Con c $+ map (argFromElim . patternToElim . fmap namedThing) ps+patternToElim (Arg ai (DotP t) ) = Apply $ Arg ai t+patternToElim (Arg ai (LitP l) ) = Apply $ Arg ai $ Lit l+patternToElim (Arg ai (ProjP dest) ) = Proj $ dest++patternsToElims :: [NamedArg DeBruijnPattern] -> [Elim]+patternsToElims ps = map build ps+ where+ build :: NamedArg DeBruijnPattern -> Elim+ build = patternToElim . fmap namedThing++patternToTerm :: DeBruijnPattern -> Term+patternToTerm p = case patternToElim (defaultArg p) of+ Apply x -> unArg x+ Proj f -> __IMPOSSIBLE__++-- patternsToElims :: Permutation -> [NamedArg Pattern] -> [Elim] -- patternsToElims perm ps = evalState (mapM build' ps) xs -- where -- xs = permute (invertP __IMPOSSIBLE__ perm) $ downFrom (size perm)@@ -147,58 +178,10 @@ -- build' :: NamedArg Pattern -> State [Int] Elim -- build' = build . fmap namedThing --- build :: I.Arg Pattern -> State [Int] Elim+-- build :: Arg Pattern -> State [Int] Elim -- build (Arg ai (VarP _) ) = Apply . Arg ai . var <$> tick -- build (Arg ai (ConP c _ ps)) = -- Apply . Arg ai . Con c <$> mapM (argFromElim <.> build') ps -- build (Arg ai (DotP t) ) = Apply (Arg ai t) <$ tick -- build (Arg ai (LitP l) ) = return $ Apply $ Arg ai $ Lit l -- build (Arg ai (ProjP dest) ) = return $ Proj $ dest---- * One hole patterns---- | A @OneholePattern@ is a linear pattern context @P@ such that for--- any non-projection pattern @p@, inserting @p@ into the single hole @P[p]@,--- yields again a non-projection pattern.-data OneHolePatterns = OHPats [NamedArg Pattern]- (NamedArg OneHolePattern)- [NamedArg Pattern]- deriving (Show)-data OneHolePattern = Hole- | OHCon ConHead ConPatternInfo OneHolePatterns- -- ^ The type in 'ConPatternInfo' serves the same role as in 'ConP'.- --- -- TODO: If a hole is plugged this type may- -- have to be updated in some way.- deriving (Show)--plugHole :: Pattern -> OneHolePatterns -> [NamedArg Pattern]-plugHole p (OHPats ps hole qs) = ps ++ [fmap (plug p <$>) hole] ++ qs- where- plug p Hole = p- plug p (OHCon c mt h) = ConP c mt $ plugHole p h---- | @allHoles ps@ returns for each pattern variable @x@ in @ps@ a--- context @P@ such @P[x]@ is one of the patterns of @ps@.--- The @Ps@ are returned in the left-to-right order of the--- pattern variables in @ps@.-allHoles :: [NamedArg Pattern] -> [OneHolePatterns]-allHoles = map snd . allHolesWithContents--allHolesWithContents :: [NamedArg Pattern] -> [(Pattern, OneHolePatterns)]-allHolesWithContents [] = []-allHolesWithContents (p : ps) = map left phs ++ map (right p) (allHolesWithContents ps)- where- phs :: [(Pattern, NamedArg OneHolePattern)]- phs = map (id -*- \h -> fmap (h <$) p)- (holes $ namedArg p)-- holes :: Pattern -> [(Pattern, OneHolePattern)]- holes p@(VarP _) = [(p, Hole)]- holes p@(DotP _) = [(p, Hole)]- holes (ConP c mt qs) = map (id -*- OHCon c mt) $ allHolesWithContents qs- holes LitP{} = []- holes ProjP{} = []-- left (p, ph) = (p, OHPats [] ph ps)- right q (p, OHPats ps h qs) = (p, OHPats (q : ps) h qs)
src/full/Agda/Syntax/Literal.hs view
@@ -2,36 +2,42 @@ module Agda.Syntax.Literal where +import Control.DeepSeq import Data.Char import Data.Typeable (Typeable) import Agda.Syntax.Position+import Agda.Syntax.Common import Agda.Syntax.Abstract.Name import Agda.Utils.Pretty+import Agda.Utils.FileName -data Literal = LitInt Range Integer- | LitFloat Range Double+data Literal = LitNat Range !Integer+ | LitFloat Range !Double | LitString Range String- | LitChar Range Char+ | LitChar Range !Char | LitQName Range QName+ | LitMeta Range AbsolutePath MetaId deriving (Typeable) instance Show Literal where showsPrec p l = showParen (p > 9) $ case l of- LitInt _ n -> sh "LitInt" n+ LitNat _ n -> sh "LitNat" n LitFloat _ x -> sh "LitFloat" x LitString _ s -> sh "LitString" s LitChar _ c -> sh "LitChar" c LitQName _ q -> sh "LitQName" q+ LitMeta _ _ x -> sh "LitMeta" x where sh :: Show a => String -> a -> ShowS sh c x = showString (c ++ " ") . shows x instance Pretty Literal where- pretty (LitInt _ n) = text $ show n+ pretty (LitNat _ n) = text $ show n pretty (LitFloat _ x) = text $ show x pretty (LitString _ s) = text $ showString' s "" pretty (LitChar _ c) = text $ "'" ++ showChar' c "" ++ "'" pretty (LitQName _ x) = text $ show x+ pretty (LitMeta _ _ x) = pretty x showString' :: String -> ShowS showString' s =@@ -46,45 +52,64 @@ escapeMe c = not (isPrint c) || c == '\\' instance Eq Literal where- LitInt _ n == LitInt _ m = n == m+ LitNat _ n == LitNat _ m = n == m LitFloat _ x == LitFloat _ y = x == y LitString _ s == LitString _ t = s == t LitChar _ c == LitChar _ d = c == d LitQName _ x == LitQName _ y = x == y+ LitMeta _ f x == LitMeta _ g y = (f, x) == (f, y) _ == _ = False instance Ord Literal where- LitInt _ n `compare` LitInt _ m = n `compare` m+ LitNat _ n `compare` LitNat _ m = n `compare` m LitFloat _ x `compare` LitFloat _ y = x `compare` y LitString _ s `compare` LitString _ t = s `compare` t LitChar _ c `compare` LitChar _ d = c `compare` d LitQName _ x `compare` LitQName _ y = x `compare` y- compare LitInt{} _ = LT- compare _ LitInt{} = GT+ LitMeta _ f x `compare` LitMeta _ g y = (f, x) `compare` (g, y)+ compare LitNat{} _ = LT+ compare _ LitNat{} = GT compare LitFloat{} _ = LT- compare _ LitFloat{} = GT+ compare _ LitFloat{} = GT compare LitString{} _ = LT compare _ LitString{} = GT+ compare LitChar{} _ = LT+ compare _ LitChar{} = GT compare LitQName{} _ = LT compare _ LitQName{} = GT+ -- compare LitMeta{} _ = LT+ -- compare _ LitMeta{} = GT instance HasRange Literal where- getRange (LitInt r _) = r+ getRange (LitNat r _) = r getRange (LitFloat r _) = r getRange (LitString r _) = r getRange (LitChar r _) = r getRange (LitQName r _) = r+ getRange (LitMeta r _ _) = r instance SetRange Literal where- setRange r (LitInt _ x) = LitInt r x+ setRange r (LitNat _ x) = LitNat r x setRange r (LitFloat _ x) = LitFloat r x setRange r (LitString _ x) = LitString r x setRange r (LitChar _ x) = LitChar r x setRange r (LitQName _ x) = LitQName r x+ setRange r (LitMeta _ f x) = LitMeta r f x instance KillRange Literal where- killRange (LitInt r x) = LitInt (killRange r) x+ killRange (LitNat r x) = LitNat (killRange r) x killRange (LitFloat r x) = LitFloat (killRange r) x killRange (LitString r x) = LitString (killRange r) x killRange (LitChar r x) = LitChar (killRange r) x killRange (LitQName r x) = killRange2 LitQName r x+ killRange (LitMeta r f x) = LitMeta (killRange r) f x++-- | Ranges are not forced.++instance NFData Literal where+ rnf (LitNat _ _) = ()+ rnf (LitFloat _ _) = ()+ rnf (LitString _ a) = rnf a+ rnf (LitChar _ _) = ()+ rnf (LitQName _ a) = rnf a+ rnf (LitMeta _ _ x) = rnf x
src/full/Agda/Syntax/Notation.hs view
@@ -16,6 +16,7 @@ module Agda.Syntax.Notation where import Control.Applicative+import Control.DeepSeq import Control.Monad import Data.List@@ -50,10 +51,12 @@ -- | Part of a Notation data GenPart- = BindHole Int+ = BindHole !Int -- ^ Argument is the position of the hole (with binding) where the binding should occur.- | NormalHole (NamedArg () Int)+ | NormalHole (NamedArg Int) -- ^ Argument is where the expression should go.+ | WildHole !Int+ -- ^ An underscore in binding position. | IdPart RawName deriving (Typeable, Show, Eq, Ord) @@ -61,8 +64,15 @@ killRange p = case p of IdPart x -> IdPart x BindHole i -> BindHole i+ WildHole i -> WildHole i NormalHole x -> NormalHole $ killRange x +instance NFData GenPart where+ rnf (BindHole _) = ()+ rnf (NormalHole a) = rnf a+ rnf (WildHole _) = ()+ rnf (IdPart a) = rnf a+ -- | Get a flat list of identifier parts of a notation. stringParts :: Notation -> [RawName] stringParts gs = [ x | IdPart x <- gs ]@@ -70,16 +80,29 @@ -- | Target argument position of a part (Nothing if it is not a hole). holeTarget :: GenPart -> Maybe Int holeTarget (BindHole n) = Just n+holeTarget (WildHole n) = Just n holeTarget (NormalHole n) = Just $ namedArg n holeTarget IdPart{} = Nothing --- | Is the part a hole?+-- | Is the part a hole? WildHoles don't count since they don't correspond to+-- anything the user writes. isAHole :: GenPart -> Bool-isAHole = isJust . holeTarget+isAHole BindHole{} = True+isAHole NormalHole{} = True+isAHole WildHole{} = False+isAHole IdPart{} = False +-- | Is the part a normal hole?+isNormalHole :: GenPart -> Bool+isNormalHole NormalHole{} = True+isNormalHole BindHole{} = False+isNormalHole WildHole{} = False+isNormalHole IdPart{} = False+ -- | Is the part a binder? isBindingHole :: GenPart -> Bool isBindingHole (BindHole _) = True+isBindingHole (WildHole _) = True isBindingHole _ = False -- | Classification of notations.@@ -92,11 +115,12 @@ | NoNotation deriving (Eq, Show) --- | Classify a notation by presence of leading and/or trailing hole.+-- | Classify a notation by presence of leading and/or trailing+-- /normal/ holes. notationKind :: Notation -> NotationKind notationKind [] = NoNotation notationKind syn =- case (isAHole $ head syn, isAHole $ last syn) of+ case (isNormalHole $ head syn, isNormalHole $ last syn) of (True , True ) -> InfixNotation (True , False) -> PostfixNotation (False, True ) -> PrefixNotation@@ -116,7 +140,7 @@ -- , IdPart "return" , NormalHole 0 -- ] -- @-mkNotation :: [NamedArg c HoleName] -> [RawName] -> Either String Notation+mkNotation :: [NamedArg HoleName] -> [RawName] -> Either String Notation mkNotation _ [] = throwError "empty notation is disallowed" mkNotation holes ids = do unless uniqueHoleNames $ throwError "syntax must use unique argument names"@@ -124,37 +148,54 @@ unless (isAlternating xs) $ throwError "syntax must alternate holes and non-holes" unless (isExprLinear xs) $ throwError "syntax must use holes exactly once" unless (isLambdaLinear xs) $ throwError "syntax must use binding holes exactly once"- return xs+ return $ insertWildHoles xs where mkPart ident = fromMaybe (IdPart ident) $ lookup ident holeMap holeNumbers = [0 .. length holes - 1] numberedHoles = zip holeNumbers holes + -- The WildHoles don't correspond to anything in the right-hand side so+ -- we add them next to their corresponding body. Slightly subtle: due to+ -- the way the operator parsing works they can't be added first or last.+ insertWildHoles xs = foldr ins xs wilds+ where+ wilds = [ i | (_, WildHole i) <- holeMap ]+ ins w (NormalHole h : hs)+ | namedArg h == w = NormalHole h : WildHole w : hs+ ins w (h : hs) = h : insBefore w hs+ ins _ [] = __IMPOSSIBLE__++ insBefore w (NormalHole h : hs)+ | namedArg h == w = WildHole w : NormalHole h : hs+ insBefore w (h : hs) = h : insBefore w hs+ insBefore _ [] = __IMPOSSIBLE__+ -- Create a map (association list) from hole names to holes. -- A @LambdaHole@ contributes two entries: -- both names are mapped to the same number, -- but distinguished by BindHole vs. NormalHole. holeMap = do (i, h) <- numberedHoles- let normalHole = NormalHole $ setArgColors [] $ fmap (i <$) h+ let normalHole = NormalHole $ fmap (i <$) h case namedArg h of- ExprHole y -> [(y, normalHole)]- LambdaHole x y -> [(x, BindHole i), (y, normalHole)]+ ExprHole y -> [(y, normalHole)]+ LambdaHole "_" y -> [("_", WildHole i), (y, normalHole)]+ LambdaHole x y -> [(x, BindHole i), (y, normalHole)] -- Check whether all hole names are distinct. -- The hole names are the keys of the @holeMap@.- uniqueHoleNames = distinct $ map fst holeMap+ uniqueHoleNames = distinct [ x | (x, _) <- holeMap, x /= "_" ] - isExprLinear xs = sort [ namedArg x | NormalHole x <- xs] == holeNumbers- isLambdaLinear xs = sort [ x | BindHole x <- xs] == [ i | (i, h) <- numberedHoles, isLambdaHole (namedArg h) ]+ isExprLinear xs = sort [ i | x <- xs, isNormalHole x, let Just i = holeTarget x ] == holeNumbers+ isLambdaLinear xs = sort [ x | BindHole x <- xs ] ==+ [ i | (i, h) <- numberedHoles,+ LambdaHole x _ <- [namedArg h], x /= "_" ] isAlternating :: [GenPart] -> Bool isAlternating [] = __IMPOSSIBLE__ isAlternating [x] = True isAlternating (x:y:xs) = isAHole x /= isAHole y && isAlternating (y:xs) --- | No notation by default.-defaultNotation, noNotation :: Notation-defaultNotation = []+noNotation :: Notation noNotation = []
src/full/Agda/Syntax/Parser.hs view
@@ -11,6 +11,7 @@ , moduleParser , moduleNameParser , exprParser+ , exprWhereParser , tokensParser -- * Parse errors , ParseError(..)@@ -98,6 +99,14 @@ exprParser :: Parser Expr exprParser = Parser { parser = P.exprParser , parseFlags = withoutComments }++-- | Parses an expression followed by a where clause.++exprWhereParser :: Parser ExprWhere+exprWhereParser = Parser+ { parser = P.exprWhereParser+ , parseFlags = withoutComments+ } -- | Gives the parsed token stream (including comments).
src/full/Agda/Syntax/Parser/Alex.hs view
@@ -16,7 +16,6 @@ ) where -import Control.Arrow import Control.Monad.State import Data.Word @@ -25,12 +24,14 @@ import Agda.Utils.Lens import Agda.Utils.Monad+import Agda.Utils.Tuple -- | This is what the lexer manipulates. data AlexInput = AlexInput- { lexPos :: !Position -- ^ current position- , lexInput :: String -- ^ current input- , lexPrevChar :: !Char -- ^ previously read character+ { lexSrcFile :: !SrcFile -- ^ File.+ , lexPos :: !PositionWithoutFile -- ^ Current position.+ , lexInput :: String -- ^ Current input.+ , lexPrevChar :: !Char -- ^ Previously read character. } -- | A lens for 'lexInput'.@@ -46,10 +47,11 @@ -- -- This function is used by Alex 2. alexGetChar :: AlexInput -> Maybe (Char, AlexInput)-alexGetChar (AlexInput { lexInput = [] }) = Nothing-alexGetChar (AlexInput { lexInput = c:s, lexPos = p }) =+alexGetChar (AlexInput { lexInput = [] }) = Nothing+alexGetChar inp@(AlexInput { lexInput = c:s, lexPos = p }) = Just (c, AlexInput- { lexInput = s+ { lexSrcFile = lexSrcFile inp+ , lexInput = s , lexPos = movePos p c , lexPrevChar = c }@@ -62,7 +64,7 @@ alexGetByte ai = -- Note that we ensure that every character presented to Alex fits -- in seven bits.- (fromIntegral . fromEnum *** id) <$> alexGetChar ai+ mapFst (fromIntegral . fromEnum) <$> alexGetChar ai {-------------------------------------------------------------------------- Monad operations@@ -72,7 +74,8 @@ getLexInput = getInp <$> get where getInp s = AlexInput- { lexPos = parsePos s+ { lexSrcFile = parseSrcFile s+ , lexPos = parsePos s , lexInput = parseInp s , lexPrevChar = parsePrevChar s }@@ -80,7 +83,8 @@ setLexInput :: AlexInput -> Parser () setLexInput inp = modify upd where- upd s = s { parsePos = lexPos inp+ upd s = s { parseSrcFile = lexSrcFile inp+ , parsePos = lexPos inp , parseInp = lexInput inp , parsePrevChar = lexPrevChar inp }
src/full/Agda/Syntax/Parser/Comments.hs view
@@ -42,7 +42,7 @@ if keep then do inp'' <- getLexInput let p1 = lexPos inp; p2 = lexPos inp''- i = Interval p1 p2+ i = posToInterval (lexSrcFile inp) p1 p2 s = case (p1, p2) of (Pn { posPos = p1 }, Pn { posPos = p2 }) -> genericTake (p2 - p1) $ lexInput inp@@ -59,7 +59,9 @@ do setLexInput inp' runLookAhead err $ skipBlock "{!" "!}" p <- lexPos <$> getLexInput- return $ TokSymbol SymQuestionMark (Interval (lexPos inp) p)+ return $+ TokSymbol SymQuestionMark $+ posToInterval (lexSrcFile inp) (lexPos inp) p where err _ = liftP $ parseErrorAt (lexPos inp) "Unterminated '{!'"
src/full/Agda/Syntax/Parser/Layout.hs view
@@ -79,13 +79,14 @@ do offs <- getOffside p case offs of LT -> do popContext- return (TokSymbol SymCloseVirtualBrace (Interval p p))+ return (TokSymbol SymCloseVirtualBrace i) EQ -> do popLexState- return (TokSymbol SymVirtualSemi (Interval p p))+ return (TokSymbol SymVirtualSemi i) GT -> do popLexState lexToken where p = lexPos inp+ i = posToInterval (lexSrcFile inp) p p {-| This action is only executed from the 'Agda.Syntax.Parser.Lexer.empty_layout'@@ -97,9 +98,10 @@ emptyLayout inp _ _ = do popLexState pushLexState bol- return (TokSymbol SymCloseVirtualBrace (Interval p p))+ return (TokSymbol SymCloseVirtualBrace i) where p = lexPos inp+ i = posToInterval (lexSrcFile inp) p p {-| Start a new layout context. This is one of two ways to get out of the@@ -130,17 +132,18 @@ case ctx of Layout prevOffs | prevOffs >= offset -> do pushLexState empty_layout- return (TokSymbol SymOpenVirtualBrace (Interval p p))+ return (TokSymbol SymOpenVirtualBrace i) _ -> do pushContext (Layout offset)- return (TokSymbol SymOpenVirtualBrace (Interval p p))+ return (TokSymbol SymOpenVirtualBrace i) where p = lexPos inp+ i = posToInterval (lexSrcFile inp) p p -- | Compute the relative position of a location to the -- current layout context.-getOffside :: Position -> Parser Ordering+getOffside :: Position' a -> Parser Ordering getOffside loc = do ctx <- topContext return $ case ctx of
src/full/Agda/Syntax/Parser/LexActions.hs view
@@ -1,4 +1,3 @@--- {-# LANGUAGE CPP #-} {-| This module contains the building blocks used to construct the lexer. -}@@ -20,7 +19,6 @@ ) where import Data.Char-import Control.Arrow import Agda.Syntax.Parser.Lexer import Agda.Syntax.Parser.Alex@@ -70,6 +68,7 @@ postToken :: Token -> Token postToken (TokId (r, "\x03bb")) = TokSymbol SymLambda r+postToken (TokId (r, "\x2026")) = TokSymbol SymEllipsis r postToken (TokId (r, "\x2192")) = TokSymbol SymArrow r postToken (TokId (r, "\x2983")) = TokSymbol SymDoubleOpenBrace r postToken (TokId (r, "\x2984")) = TokSymbol SymDoubleCloseBrace r@@ -197,7 +196,7 @@ -- | Parse a literal. literal :: Read a => (Range -> a -> Literal) -> LexAction Token literal lit =- withInterval' read (TokLiteral . uncurry lit . (getRange *** id))+ withInterval' read (TokLiteral . uncurry lit . mapFst getRange) -- | Parse an identifier. Identifiers can be qualified (see 'Name'). -- Example: @Foo.Bar.f@
src/full/Agda/Syntax/Parser/Lexer.x view
@@ -51,8 +51,9 @@ $white_nonl = $white_notab # \n @number = $digit+ | "0x" $hexdigit++@integer = [\-]? @number @exponent = [eE] [\-\+]? @number-@float = @number \. @number @exponent? | @number @exponent+@float = @integer \. @number @exponent? | @number @exponent -- A name can't start with \x (to allow \x -> x). -- Bug in alex: [ _ op ]+ doesn't seem to work!@@ -81,28 +82,37 @@ <pragma_> $white_notab ; -- Pragmas-<0,code> "{-#" { begin pragma }-<pragma_> "{-#" { symbol SymOpenPragma }-<pragma_> "#-}" { endWith $ symbol SymClosePragma }-<pragma_> "OPTIONS" { keyword KwOPTIONS }-<pragma_> "BUILTIN" { keyword KwBUILTIN }-<pragma_> "REWRITE" { keyword KwREWRITE }-<pragma_> "COMPILED_DATA" { keyword KwCOMPILED_DATA }-<pragma_> "COMPILED_TYPE" { keyword KwCOMPILED_TYPE }-<pragma_> "COMPILED" { keyword KwCOMPILED }-<pragma_> "COMPILED_EXPORT" { keyword KwCOMPILED_EXPORT }-<pragma_> "COMPILED_EPIC" { keyword KwCOMPILED_EPIC }-<pragma_> "COMPILED_JS" { keyword KwCOMPILED_JS }-<pragma_> "STATIC" { keyword KwSTATIC }-<pragma_> "IMPORT" { keyword KwIMPORT }-<pragma_> "IMPOSSIBLE" { keyword KwIMPOSSIBLE }-<pragma_> "ETA" { keyword KwETA }-<pragma_> "NO_TERMINATION_CHECK" { keyword KwNO_TERMINATION_CHECK }-<pragma_> "NON_TERMINATING" { keyword KwNON_TERMINATING }-<pragma_> "TERMINATING" { keyword KwTERMINATING }-<pragma_> "MEASURE" { keyword KwMEASURE }-<pragma_> "LINE" { keyword KwLINE }-<pragma_> . # [ $white ] + { withInterval $ TokString }+<0,code> "{-#" { begin pragma }+<pragma_> "{-#" { symbol SymOpenPragma }+<pragma_> "#-}" { endWith $ symbol SymClosePragma }+<pragma_> "BUILTIN" { keyword KwBUILTIN }+<pragma_> "CATCHALL" { keyword KwCATCHALL }+<pragma_> "COMPILED" { keyword KwCOMPILED }+<pragma_> "COMPILED_DATA" { keyword KwCOMPILED_DATA }+<pragma_> "COMPILED_DATA_UHC" { keyword KwCOMPILED_DATA_UHC }+<pragma_> "COMPILED_DECLARE_DATA" { keyword KwCOMPILED_DECLARE_DATA }+<pragma_> "COMPILED_EPIC" { keyword KwCOMPILED_EPIC }+<pragma_> "COMPILED_EXPORT" { keyword KwCOMPILED_EXPORT }+<pragma_> "COMPILED_JS" { keyword KwCOMPILED_JS }+<pragma_> "COMPILED_TYPE" { keyword KwCOMPILED_TYPE }+<pragma_> "COMPILED_UHC" { keyword KwCOMPILED_UHC }+<pragma_> "HASKELL" { keyword KwHASKELL }+<pragma_> "DISPLAY" { keyword KwDISPLAY }+<pragma_> "IMPORT" { keyword KwIMPORT }+<pragma_> "IMPORT_UHC" { keyword KwIMPORT_UHC }+<pragma_> "IMPOSSIBLE" { keyword KwIMPOSSIBLE }+<pragma_> "INLINE" { keyword KwINLINE }+<pragma_> "LINE" { keyword KwLINE }+<pragma_> "MEASURE" { keyword KwMEASURE }+<pragma_> "NO_POSITIVITY_CHECK" { keyword KwNO_POSITIVITY_CHECK }+<pragma_> "NO_SMASHING" { keyword KwNO_SMASHING }+<pragma_> "NO_TERMINATION_CHECK" { keyword KwNO_TERMINATION_CHECK }+<pragma_> "NON_TERMINATING" { keyword KwNON_TERMINATING }+<pragma_> "OPTIONS" { keyword KwOPTIONS }+<pragma_> "REWRITE" { keyword KwREWRITE }+<pragma_> "STATIC" { keyword KwSTATIC }+<pragma_> "TERMINATING" { keyword KwTERMINATING }+<pragma_> . # [ $white ] + { withInterval $ TokString } -- Comments -- We need to rule out pragmas here. Usually longest match would take@@ -160,6 +170,8 @@ <0,code> constructor { keyword KwConstructor } <0,code> inductive { keyword KwInductive } <0,code> coinductive { keyword KwCoInductive }+<0,code> "eta-equality" { keyword KwEta }+<0,code> "no-eta-equality" { keyword KwNoEta } <0,code> infix { keyword KwInfix } <0,code> infixl { keyword KwInfixL } <0,code> infixr { keyword KwInfixR }@@ -167,8 +179,8 @@ <0,code> abstract { keyword KwAbstract } <0,code> private { keyword KwPrivate } <0,code> instance { keyword KwInstance }+<0,code> macro { keyword KwMacro } <0,code> Set { keyword KwSet }-<0,code> Prop { keyword KwProp } <0,code> forall { keyword KwForall } <0,code> Set @number { withInterval' (read . drop 3) TokSetN } <0,code> quoteGoal { keyword KwQuoteGoal }@@ -177,6 +189,7 @@ <0,code> quoteTerm { keyword KwQuoteTerm } <0,code> unquote { keyword KwUnquote } <0,code> unquoteDecl { keyword KwUnquoteDecl }+<0,code> unquoteDef { keyword KwUnquoteDef } <0,code> tactic { keyword KwTactic } <0,code> syntax { keyword KwSyntax } <0,code> pattern { keyword KwPatternSyn }@@ -222,7 +235,7 @@ -- Literals <0,code> \' { litChar } <0,code> \" { litString }-<0,code> @number { literal LitInt }+<0,code> @integer { literal LitNat } <0,code> @float { literal LitFloat } -- Identifiers
src/full/Agda/Syntax/Parser/LookAhead.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE Rank2Types #-}+{-# LANGUAGE Rank2Types #-} {-| When lexing by hands (for instance string literals) we need to do some looking ahead. The 'LookAhead' monad keeps track of the position we are@@ -47,7 +47,7 @@ --------------------------------------------------------------------------} instance Monad LookAhead where- return = LookAhead . return+ return = pure m >>= k = LookAhead $ unLookAhead m >>= unLookAhead . k fail s = do err <- LookAhead ask
src/full/Agda/Syntax/Parser/Monad.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE MultiParamTypeClasses #-} module Agda.Syntax.Parser.Monad@@ -58,15 +58,16 @@ -- | The parser state. Contains everything the parser and the lexer could ever -- need. data ParseState = PState- { parsePos :: !Position -- ^ position at current input location- , parseLastPos :: !Position -- ^ position of last token- , parseInp :: String -- ^ the current input- , parsePrevChar :: !Char -- ^ the character before the input- , parsePrevToken:: String -- ^ the previous token- , parseLayout :: [LayoutContext] -- ^ the stack of layout contexts- , parseLexState :: [LexState] -- ^ the state of the lexer- -- (states can be nested so we need a stack)- , parseFlags :: ParseFlags -- ^ currently there are no flags+ { parseSrcFile :: !SrcFile+ , parsePos :: !PositionWithoutFile -- ^ position at current input location+ , parseLastPos :: !PositionWithoutFile -- ^ position of last token+ , parseInp :: String -- ^ the current input+ , parsePrevChar :: !Char -- ^ the character before the input+ , parsePrevToken:: String -- ^ the previous token+ , parseLayout :: [LayoutContext] -- ^ the stack of layout contexts+ , parseLexState :: [LexState] -- ^ the state of the lexer+ -- (states can be nested so we need a stack)+ , parseFlags :: ParseFlags -- ^ currently there are no flags } deriving Show @@ -92,10 +93,16 @@ -- | What you get if parsing fails. data ParseError = ParseError- { errPos :: Position -- ^ where the error occured- , errInput :: String -- ^ the remaining input- , errPrevToken :: String -- ^ the previous token- , errMsg :: String -- ^ hopefully an explanation of what happened+ { errSrcFile :: !SrcFile+ -- ^ The file in which the error occurred.+ , errPos :: !PositionWithoutFile+ -- ^ Where the error occurred.+ , errInput :: String+ -- ^ The remaining input.+ , errPrevToken :: String+ -- ^ The previous token.+ , errMsg :: String+ -- ^ Hopefully an explanation of what happened. } deriving (Typeable) @@ -110,14 +117,15 @@ --------------------------------------------------------------------------} instance Monad Parser where- return x = P $ \s -> ParseOk s x+ return = pure P m >>= f = P $ \s -> case m s of ParseFailed e -> ParseFailed e ParseOk s' x -> unP (f x) s' fail msg = P $ \s -> ParseFailed $- ParseError { errPos = parseLastPos s+ ParseError { errSrcFile = parseSrcFile s+ , errPos = parseLastPos s , errInput = parseInp s , errPrevToken = parsePrevToken s , errMsg = msg@@ -127,8 +135,8 @@ fmap = liftM instance Applicative Parser where- pure = return- (<*>) = ap+ pure x = P $ \s -> ParseOk s x+ (<*>) = ap instance MonadError ParseError Parser where throwError e = P $ \_ -> ParseFailed e@@ -146,13 +154,15 @@ instance Pretty ParseError where pretty err = vcat- [ pretty (errPos err) <> colon <+> text (errMsg err)+ [ pretty ((errPos err) { srcFile = errSrcFile err }) <> colon <+>+ text (errMsg err) , text $ errPrevToken err ++ "<ERROR>" , text $ take 30 (errInput err) ++ "..." ] instance HasRange ParseError where- getRange err = posToRange (errPos err) (errPos err)+ getRange err = posToRange' (errSrcFile err) p p+ where p = errPos err {-------------------------------------------------------------------------- Running the parser@@ -160,8 +170,9 @@ initStatePos :: Position -> ParseFlags -> String -> [LexState] -> ParseState initStatePos pos flags inp st =- PState { parsePos = pos- , parseLastPos = pos+ PState { parseSrcFile = srcFile pos+ , parsePos = pos'+ , parseLastPos = pos' , parseInp = inp , parsePrevChar = '\n' , parsePrevToken = ""@@ -169,6 +180,8 @@ , parseLayout = [NoLayout] , parseFlags = flags }+ where+ pos' = pos { srcFile = () } -- | Constructs the initial state of the parser. The string argument -- is the input string, the file path is only there because it's part@@ -208,23 +221,23 @@ Manipulating the state --------------------------------------------------------------------------} -setParsePos :: Position -> Parser ()+setParsePos :: PositionWithoutFile -> Parser () setParsePos p = modify $ \s -> s { parsePos = p } -setLastPos :: Position -> Parser ()+setLastPos :: PositionWithoutFile -> Parser () setLastPos p = modify $ \s -> s { parseLastPos = p } setPrevToken :: String -> Parser () setPrevToken t = modify $ \s -> s { parsePrevToken = t } -getLastPos :: Parser Position+getLastPos :: Parser PositionWithoutFile getLastPos = get >>= return . parseLastPos -- | The parse interval is between the last position and the current position. getParseInterval :: Parser Interval-getParseInterval =- do s <- get- return $ Interval (parseLastPos s) (parsePos s)+getParseInterval = do+ s <- get+ return $ posToInterval (parseSrcFile s) (parseLastPos s) (parsePos s) getLexState :: Parser [LexState] getLexState = parseLexState <$> get@@ -255,13 +268,13 @@ -- lexing nested comments, which when failing will always fail at the end -- of the file. A more informative position is the beginning of the failing -- comment.-parseErrorAt :: Position -> String -> Parser a+parseErrorAt :: PositionWithoutFile -> String -> Parser a parseErrorAt p msg = do setLastPos p parseError msg -- | Use 'parseErrorAt' or 'parseError' as appropriate.-parseError' :: Maybe Position -> String -> Parser a+parseError' :: Maybe PositionWithoutFile -> String -> Parser a parseError' = maybe parseError parseErrorAt
src/full/Agda/Syntax/Parser/Parser.y view
@@ -18,6 +18,7 @@ moduleParser , moduleNameParser , exprParser+ , exprWhereParser , tokensParser , tests ) where@@ -28,6 +29,7 @@ import Data.Functor import Data.List import Data.Maybe+import Data.Monoid import qualified Data.Traversable as T import Debug.Trace@@ -38,12 +40,12 @@ import Agda.Syntax.Parser.Tokens import Agda.Syntax.Concrete as C import Agda.Syntax.Concrete.Pretty ()-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Fixity import Agda.Syntax.Notation import Agda.Syntax.Literal +import Agda.Utils.Either hiding (tests) import Agda.Utils.Hash import Agda.Utils.List (spanJust) import Agda.Utils.Monad@@ -53,12 +55,17 @@ import Agda.Utils.TestHelpers import Agda.Utils.Tuple +import Agda.Utils.Impossible+#include "undefined.h"+ } %name tokensParser Tokens %name exprParser Expr+%name exprWhereParser ExprWhere %name moduleParser File %name moduleNameParser ModuleName+%name funclauseParser FunClause %tokentype { Token } %monad { Parser } %lexer { lexer } { TokEOF }@@ -79,6 +86,7 @@ 'coinductive' { TokKeyword KwCoInductive $$ } 'constructor' { TokKeyword KwConstructor $$ } 'data' { TokKeyword KwData $$ }+ 'eta-equality' { TokKeyword KwEta $$ } 'field' { TokKeyword KwField $$ } 'forall' { TokKeyword KwForall $$ } 'hiding' { TokKeyword KwHiding $$ }@@ -90,8 +98,10 @@ 'infixr' { TokKeyword KwInfixR $$ } 'instance' { TokKeyword KwInstance $$ } 'let' { TokKeyword KwLet $$ }+ 'macro' { TokKeyword KwMacro $$ } 'module' { TokKeyword KwModule $$ } 'mutual' { TokKeyword KwMutual $$ }+ 'no-eta-equality' { TokKeyword KwNoEta $$ } 'open' { TokKeyword KwOpen $$ } 'pattern' { TokKeyword KwPatternSyn $$ } 'postulate' { TokKeyword KwPostulate $$ }@@ -112,22 +122,32 @@ 'to' { TokKeyword KwTo $$ } 'unquote' { TokKeyword KwUnquote $$ } 'unquoteDecl' { TokKeyword KwUnquoteDecl $$ }+ 'unquoteDef' { TokKeyword KwUnquoteDef $$ } 'using' { TokKeyword KwUsing $$ } 'where' { TokKeyword KwWhere $$ } 'with' { TokKeyword KwWith $$ } 'BUILTIN' { TokKeyword KwBUILTIN $$ }+ 'CATCHALL' { TokKeyword KwCATCHALL $$ } 'COMPILED' { TokKeyword KwCOMPILED $$ } 'COMPILED_DATA' { TokKeyword KwCOMPILED_DATA $$ }+ 'COMPILED_DATA_UHC' { TokKeyword KwCOMPILED_DATA_UHC $$ }+ 'COMPILED_DECLARE_DATA' { TokKeyword KwCOMPILED_DECLARE_DATA $$ } 'COMPILED_EPIC' { TokKeyword KwCOMPILED_EPIC $$ } 'COMPILED_EXPORT' { TokKeyword KwCOMPILED_EXPORT $$ } 'COMPILED_JS' { TokKeyword KwCOMPILED_JS $$ } 'COMPILED_TYPE' { TokKeyword KwCOMPILED_TYPE $$ }- 'ETA' { TokKeyword KwETA $$ }+ 'COMPILED_UHC' { TokKeyword KwCOMPILED_UHC $$ }+ 'HASKELL' { TokKeyword KwHASKELL $$ }+ 'DISPLAY' { TokKeyword KwDISPLAY $$ } 'IMPORT' { TokKeyword KwIMPORT $$ }+ 'IMPORT_UHC' { TokKeyword KwIMPORT_UHC $$ } 'IMPOSSIBLE' { TokKeyword KwIMPOSSIBLE $$ }+ 'INLINE' { TokKeyword KwINLINE $$ } 'MEASURE' { TokKeyword KwMEASURE $$ }+ 'NO_SMASHING' { TokKeyword KwNO_SMASHING $$ } 'NO_TERMINATION_CHECK' { TokKeyword KwNO_TERMINATION_CHECK $$ }+ 'NO_POSITIVITY_CHECK' { TokKeyword KwNO_POSITIVITY_CHECK $$ } 'NON_TERMINATING' { TokKeyword KwNON_TERMINATING $$ } 'OPTIONS' { TokKeyword KwOPTIONS $$ } 'REWRITE' { TokKeyword KwREWRITE $$ }@@ -193,6 +213,7 @@ | 'coinductive' { TokKeyword KwCoInductive $1 } | 'constructor' { TokKeyword KwConstructor $1 } | 'data' { TokKeyword KwData $1 }+ | 'eta-equality' { TokKeyword KwEta $1 } | 'field' { TokKeyword KwField $1 } | 'forall' { TokKeyword KwForall $1 } | 'hiding' { TokKeyword KwHiding $1 }@@ -204,8 +225,10 @@ | 'infixr' { TokKeyword KwInfixR $1 } | 'instance' { TokKeyword KwInstance $1 } | 'let' { TokKeyword KwLet $1 }+ | 'macro' { TokKeyword KwMacro $1 } | 'module' { TokKeyword KwModule $1 } | 'mutual' { TokKeyword KwMutual $1 }+ | 'no-eta-equality' { TokKeyword KwNoEta $1 } | 'open' { TokKeyword KwOpen $1 } | 'pattern' { TokKeyword KwPatternSyn $1 } | 'postulate' { TokKeyword KwPostulate $1 }@@ -226,22 +249,32 @@ | 'to' { TokKeyword KwTo $1 } | 'unquote' { TokKeyword KwUnquote $1 } | 'unquoteDecl' { TokKeyword KwUnquoteDecl $1 }+ | 'unquoteDef' { TokKeyword KwUnquoteDef $1 } | 'using' { TokKeyword KwUsing $1 } | 'where' { TokKeyword KwWhere $1 } | 'with' { TokKeyword KwWith $1 } | 'BUILTIN' { TokKeyword KwBUILTIN $1 }+ | 'CATCHALL' { TokKeyword KwCATCHALL $1 } | 'COMPILED' { TokKeyword KwCOMPILED $1 } | 'COMPILED_DATA' { TokKeyword KwCOMPILED_DATA $1 }+ | 'COMPILED_DATA_UHC' { TokKeyword KwCOMPILED_DATA_UHC $1 }+ | 'COMPILED_DECLARE_DATA' { TokKeyword KwCOMPILED_DECLARE_DATA $1 } | 'COMPILED_EPIC' { TokKeyword KwCOMPILED_EPIC $1 } | 'COMPILED_EXPORT' { TokKeyword KwCOMPILED_EXPORT $1 } | 'COMPILED_JS' { TokKeyword KwCOMPILED_JS $1 } | 'COMPILED_TYPE' { TokKeyword KwCOMPILED_TYPE $1 }- | 'ETA' { TokKeyword KwETA $1 }+ | 'COMPILED_UHC' { TokKeyword KwCOMPILED_UHC $1 }+ | 'HASKELL' { TokKeyword KwHASKELL $1 }+ | 'DISPLAY' { TokKeyword KwDISPLAY $1 } | 'IMPORT' { TokKeyword KwIMPORT $1 }+ | 'IMPORT_UHC' { TokKeyword KwIMPORT_UHC $1 } | 'IMPOSSIBLE' { TokKeyword KwIMPOSSIBLE $1 }+ | 'INLINE' { TokKeyword KwINLINE $1 } | 'MEASURE' { TokKeyword KwMEASURE $1 }+ | 'NO_SMASHING' { TokKeyword KwNO_SMASHING $1 } | 'NO_TERMINATION_CHECK' { TokKeyword KwNO_TERMINATION_CHECK $1 }+ | 'NO_POSITIVITY_CHECK' { TokKeyword KwNO_POSITIVITY_CHECK $1 } | 'NON_TERMINATING' { TokKeyword KwNON_TERMINATING $1 } | 'OPTIONS' { TokKeyword KwOPTIONS $1 } | 'REWRITE' { TokKeyword KwREWRITE $1 }@@ -331,17 +364,10 @@ -- An integer. Used in fixity declarations. Int :: { Integer } Int : literal {% case $1 of {- LitInt _ i -> return i;+ LitNat _ i -> return i; _ -> fail $ "Expected integer" } }- | id {% case $1 of {- (_, s) -> case readM s of {- Right i -> return i;- Left (err :: String) -> fail $ "Expected integer"- }- }- } {--------------------------------------------------------------------------@@ -369,9 +395,9 @@ DoubleCloseBrace : '}}' { getRange $1 } | '}' '}' {%- if posPos (fromJust (rEnd (getRange $2))) -- posPos (fromJust (rStart (getRange $1))) > 2- then parseErrorAt (fromJust (rStart (getRange $2)))+ if posPos (fromJust (rEnd' (getRange $2))) -+ posPos (fromJust (rStart' (getRange $1))) > 2+ then parseErrorAt (fromJust (rStart' (getRange $2))) "Expecting '}}', found separated '}'s." else return $ getRange ($1, $2) }@@ -529,6 +555,10 @@ PragmaString : string { snd $1 } +Strings :: { [(Interval, String)] }+Strings : {- empty -} { [] }+ | string Strings { $1 : $2 }+ PragmaName :: { Name } PragmaName : string {% mkName $1 } @@ -592,7 +622,6 @@ | 'let' Declarations 'in' Expr { Let (getRange ($1,$2,$3,$4)) $2 $4 } | Expr3 { $1 } | 'quoteGoal' Id 'in' Expr { QuoteGoal (getRange ($1,$2,$3,$4)) $2 $4 }- | 'quoteContext' Id 'in' Expr { QuoteContext (getRange ($1,$2,$3,$4)) $2 $4 } | 'tactic' Application3 { Tactic (getRange ($1, $2)) (RawApp (getRange $2) $2) [] } | 'tactic' Application3 '|' WithExprs { Tactic (getRange ($1, $2, $3, $4)) (RawApp (getRange $2) $2) $4 } @@ -606,7 +635,7 @@ Right es -> do -- it is of the form @\ { p1 ... () }@ p <- exprToLHS (RawApp (getRange es) es); return $ ExtendedLam (fuseRange $1 es)- [(p [] [], AbsurdRHS, NoWhere)]+ [(p [] [], AbsurdRHS, NoWhere, False)] } Application3 :: { [Expr] }@@ -628,6 +657,7 @@ | 'Set' { Set (getRange $1) } | 'quote' { Quote (getRange $1) } | 'quoteTerm' { QuoteTerm (getRange $1) }+ | 'quoteContext' { QuoteContext (getRange $1) } | 'unquote' { Unquote (getRange $1) } | setN { SetN (getRange (fst $1)) (snd $1) } | '{{' Expr DoubleCloseBrace { InstanceArg (getRange ($1,$2,$3))@@ -637,26 +667,45 @@ | '{{' DoubleCloseBrace { let r = fuseRange $1 $2 in InstanceArg r $ unnamed $ Absurd r } | Id '@' Expr3 { As (getRange ($1,$2,$3)) $1 $3 } | '.' Expr3 { Dot (fuseRange $1 $2) $2 }- | 'record' '{' FieldAssignments '}' { Rec (getRange ($1,$2,$3,$4)) $3 }+ | 'record' '{' RecordAssignments '}' { Rec (getRange ($1,$2,$3,$4)) $3 } | 'record' Expr3NoCurly '{' FieldAssignments '}' { RecUpdate (getRange ($1,$2,$3,$4,$5)) $2 $4 } Expr3 : Expr3Curly { $1 } | Expr3NoCurly { $1 } -FieldAssignments :: { [(Name, Expr)] }+RecordAssignments :: { RecordAssignments }+RecordAssignments+ : {- empty -} { [] }+ | RecordAssignments1 { $1 }++RecordAssignments1 :: { RecordAssignments }+RecordAssignments1+ : RecordAssignment { [$1] }+ | RecordAssignment ';' RecordAssignments1 { $1 : $3 }++RecordAssignment :: { RecordAssignment }+RecordAssignment+ : FieldAssignment { Left $1 }+ | ModuleAssignment { Right $1 }++ModuleAssignment :: { ModuleAssignment }+ModuleAssignment+ : ModuleName OpenArgs ImportDirective { ModuleAssignment $1 $2 $3 }++FieldAssignments :: { [FieldAssignment] } FieldAssignments : {- empty -} { [] } | FieldAssignments1 { $1 } -FieldAssignments1 :: { [(Name, Expr)] }+FieldAssignments1 :: { [FieldAssignment] } FieldAssignments1 : FieldAssignment { [$1] } | FieldAssignment ';' FieldAssignments1 { $1 : $3 } -FieldAssignment :: { (Name, Expr) }+FieldAssignment :: { FieldAssignment } FieldAssignment- : Id '=' Expr { ($1, $3) }+ : Id '=' Expr { FieldAssignment $1 $3 } {-------------------------------------------------------------------------- Bindings@@ -775,30 +824,38 @@ | '{{' DoubleCloseBrace { Left [Left Instance] } -- FNF, 2011-05-05: No where clauses in extended lambdas for now-NonAbsurdLamClause :: { (LHS,RHS,WhereClause) }+NonAbsurdLamClause :: { (LHS,RHS,WhereClause,Bool) } NonAbsurdLamClause : Application3 '->' Expr {% do p <- exprToLHS (RawApp (getRange $1) $1) ;- return (p [] [], RHS $3, NoWhere)+ return (p [] [], RHS $3, NoWhere, False) }+ | CatchallPragma Application3 '->' Expr {% do+ p <- exprToLHS (RawApp (getRange $2) $2) ;+ return (p [] [], RHS $4, NoWhere, True)+ } -AbsurdLamClause :: { (LHS,RHS,WhereClause) }+AbsurdLamClause :: { (LHS,RHS,WhereClause,Bool) } AbsurdLamClause -- FNF, 2011-05-09: By being more liberal here, we avoid shift/reduce and reduce/reduce errors. -- Later stages such as scope checking will complain if we let something through which we should not : Application {% do p <- exprToLHS (RawApp (getRange $1) $1);- return (p [] [], AbsurdRHS, NoWhere)+ return (p [] [], AbsurdRHS, NoWhere, False) }+ | CatchallPragma Application {% do+ p <- exprToLHS (RawApp (getRange $2) $2);+ return (p [] [], AbsurdRHS, NoWhere, True)+ } -LamClause :: { (LHS,RHS,WhereClause) }+LamClause :: { (LHS,RHS,WhereClause,Bool) } LamClause : NonAbsurdLamClause { $1 } | AbsurdLamClause { $1 } -- Parses all extended lambda clauses except for a single absurd clause, which is taken care of -- in AbsurdLambda-LamClauses :: { [(LHS,RHS,WhereClause)] }+LamClauses :: { [(LHS,RHS,WhereClause,Bool)] } LamClauses : LamClauses semi LamClause { $3 : $1 } | AbsurdLamClause semi LamClause { [$3, $1] }@@ -852,7 +909,7 @@ | '.' BId { Left [DomainFree (setRelevance Irrelevant $ defaultArgInfo) $ mkBoundName_ $2] } | '..' BId { Left [DomainFree (setRelevance NonStrict $ defaultArgInfo) $ mkBoundName_ $2] } | '{' CommaBIdAndAbsurds '}'- { either (Left . map (DomainFree (setHiding Hidden $ defaultArgInfo) . mkBoundName_)) Right $2 }+ { mapLeft (map (DomainFree (setHiding Hidden $ defaultArgInfo) . mkBoundName_)) $2 } | '{{' CommaBIds DoubleCloseBrace { Left $ map (DomainFree (setHiding Instance $ defaultArgInfo) . mkBoundName_) $2 } | '.' '{' CommaBIds '}' { Left $ map (DomainFree (setHiding Hidden $ setRelevance Irrelevant $ defaultArgInfo) . mkBoundName_) $3 } | '.' '{{' CommaBIds DoubleCloseBrace { Left $ map (DomainFree (setHiding Instance $ setRelevance Irrelevant $ defaultArgInfo) . mkBoundName_) $3 }@@ -875,14 +932,18 @@ ImportDirective1 :: { ImportDirective } : 'public' { defaultImportDir { importDirRange = getRange $1, publicOpen = True } }- | UsingOrHiding { defaultImportDir { importDirRange = snd $1, usingOrHiding = fst $1 } }- | RenamingDir { defaultImportDir { importDirRange = snd $1, renaming = fst $1 } }+ | Using { defaultImportDir { importDirRange = snd $1, using = fst $1 } }+ | Hiding { defaultImportDir { importDirRange = snd $1, hiding = fst $1 } }+ | RenamingDir { defaultImportDir { importDirRange = snd $1, impRenaming = fst $1 } } -UsingOrHiding :: { (UsingOrHiding , Range) }-UsingOrHiding+Using :: { (Using, Range) }+Using : 'using' '(' CommaImportNames ')' { (Using $3 , getRange ($1,$2,$3,$4)) } -- using can have an empty list- | 'hiding' '(' CommaImportNames ')' { (Hiding $3 , getRange ($1,$2,$3,$4)) }++Hiding :: { ([ImportedName], Range) }+Hiding+ : 'hiding' '(' CommaImportNames ')' { ($3 , getRange ($1,$2,$3,$4)) } -- if you want to hide nothing that's fine, isn't it? RenamingDir :: { ([Renaming] , Range) }@@ -898,7 +959,7 @@ Renaming :: { Renaming } Renaming- : ImportName_ 'to' Id { Renaming $1 $3 (getRange $2) }+ : ImportName_ 'to' Id { Renaming $1 (setImportedName $1 $3) (getRange $2) } -- We need a special imported name here, since we have to trigger -- the imp_dir state exactly one token before the 'to'@@ -960,6 +1021,8 @@ | 'module' Id 'where' Declarations0 { SomeWhere $2 $4 } | 'module' Underscore 'where' Declarations0 { SomeWhere $2 $4 } +ExprWhere :: { ExprWhere }+ExprWhere : Expr WhereClause { ExprWhere $1 $2 } {-------------------------------------------------------------------------- Different kinds of declarations@@ -979,6 +1042,7 @@ | Abstract { [$1] } | Private { [$1] } | Instance { [$1] }+ | Macro { [$1] } | Postulate { [$1] } | Primitive { [$1] } | Open { $1 }@@ -1004,7 +1068,13 @@ -- as hidden or irrelevant using braces and dots: -- {n1 .n2} n3 .n4 {n5} .{n6 n7} ... : Type. ArgTypeSigs :: { [Arg Declaration] }-ArgTypeSigs : ArgIds ':' Expr { map (fmap (\ x -> TypeSig defaultArgInfo x $3)) $1 }+ArgTypeSigs+ : ArgIds ':' Expr { map (fmap (\ x -> TypeSig defaultArgInfo x $3)) $1 }+ | 'instance' ArgTypeSignatures {+ let+ setInstance (TypeSig info x t) = TypeSig (setHiding Instance info) x t+ setInstance _ = __IMPOSSIBLE__ in+ map (fmap setInstance) $2 } -- Function declarations. The left hand side is parsed as an expression to allow -- declarations like 'x::xs ++ ys = e', when '::' has higher precedence than '++'.@@ -1020,15 +1090,15 @@ -- Data declaration. Can be local. Data :: { Declaration } Data : 'data' Id TypedUntypedBindings ':' Expr 'where'- Constructors { Data (getRange ($1,$2,$3,$4,$5,$6,$7)) Inductive $2 $3 (Just $5) $7 }+ Declarations0 { Data (getRange ($1,$2,$3,$4,$5,$6,$7)) Inductive $2 $3 (Just $5) $7 } | 'codata' Id TypedUntypedBindings ':' Expr 'where'- Constructors { Data (getRange ($1,$2,$3,$4,$5,$6,$7)) CoInductive $2 $3 (Just $5) $7 }+ Declarations0 { Data (getRange ($1,$2,$3,$4,$5,$6,$7)) CoInductive $2 $3 (Just $5) $7 } -- New cases when we already had a DataSig. Then one can omit the sort. | 'data' Id TypedUntypedBindings 'where'- Constructors { Data (getRange ($1,$2,$3,$4,$5)) Inductive $2 $3 Nothing $5 }+ Declarations0 { Data (getRange ($1,$2,$3,$4,$5)) Inductive $2 $3 Nothing $5 } | 'codata' Id TypedUntypedBindings 'where'- Constructors { Data (getRange ($1,$2,$3,$4,$5)) CoInductive $2 $3 Nothing $5 }+ Declarations0 { Data (getRange ($1,$2,$3,$4,$5)) CoInductive $2 $3 Nothing $5 } -- Data type signature. Found in mutual blocks. DataSig :: { Declaration }@@ -1043,10 +1113,10 @@ Record :: { Declaration } Record : 'record' Expr3NoCurly TypedUntypedBindings ':' Expr 'where' RecordDeclarations- {% exprToName $2 >>= \ n -> return $ Record (getRange ($1,$2,$3,$4,$5,$6,$7)) n (fst3 $7) (snd3 $7) $3 (Just $5) (thd3 $7) }+ {% exprToName $2 >>= \ n -> let ((x,y,z),ds) = $7 in return $ Record (getRange ($1,$2,$3,$4,$5,$6,$7)) n x y z $3 (Just $5) ds } | 'record' Expr3NoCurly TypedUntypedBindings 'where' RecordDeclarations- {% exprToName $2 >>= \ n -> return $ Record (getRange ($1,$2,$3,$4,$5)) n (fst3 $5) (snd3 $5) $3 Nothing (thd3 $5) }+ {% exprToName $2 >>= \ n -> let ((x,y,z),ds) = $5 in return $ Record (getRange ($1,$2,$3,$4,$5)) n x y z $3 Nothing ds } -- Record type signature. In mutual blocks. RecordSig :: { Declaration }@@ -1054,20 +1124,24 @@ {% exprToName $2 >>= \ n -> return $ RecordSig (getRange ($1,$2,$3,$4,$5)) n $3 $5 } -- Declaration of record constructor name.-RecordConstructorName :: { Name }-RecordConstructorName : 'constructor' Id { $2 }+RecordConstructorName :: { (Name, IsInstance) }+RecordConstructorName : 'constructor' Id { ($2, NotInstanceDef) }+ | 'instance' vopen 'constructor' Id vclose { ($4, InstanceDef) } -- Fixity declarations. Infix :: { Declaration }-Infix : 'infix' Int SpaceBIds { Infix (Fixity (getRange ($1,$3)) $2 NonAssoc) $3 }- | 'infixl' Int SpaceBIds { Infix (Fixity (getRange ($1,$3)) $2 LeftAssoc) $3 }- | 'infixr' Int SpaceBIds { Infix (Fixity (getRange ($1,$3)) $2 RightAssoc) $3 }+Infix : 'infix' Int SpaceBIds { Infix (Fixity (getRange ($1,$3)) (Related $2) NonAssoc) $3 }+ | 'infixl' Int SpaceBIds { Infix (Fixity (getRange ($1,$3)) (Related $2) LeftAssoc) $3 }+ | 'infixr' Int SpaceBIds { Infix (Fixity (getRange ($1,$3)) (Related $2) RightAssoc) $3 } -- Field declarations. Fields :: { [Declaration] } Fields : 'field' ArgTypeSignatures- { let toField (Common.Arg info (TypeSig _ x t)) = Field x (Common.Arg info t) in map toField $2 }---REM { let toField (h, TypeSig x t) = Field h x t in map toField $2 }+ { let+ inst i | getHiding i == Instance = InstanceDef+ | otherwise = NotInstanceDef+ toField (Arg info (TypeSig info' x t)) = Field (inst info') x (Arg info t)+ in map toField $2 } -- Mutually recursive declarations. Mutual :: { Declaration }@@ -1089,6 +1163,11 @@ Instance : 'instance' Declarations { InstanceB (fuseRange $1 $2) $2 } +-- Macro declarations.+Macro :: { Declaration }+Macro : 'macro' Declarations { Macro (fuseRange $1 $2) $2 }++ -- Postulates. Postulate :: { Declaration } Postulate : 'postulate' Declarations { Postulate (fuseRange $1 $2) $2 }@@ -1099,7 +1178,10 @@ -- Unquoting declarations. UnquoteDecl :: { Declaration }-UnquoteDecl : 'unquoteDecl' Id '=' Expr { UnquoteDecl (fuseRange $1 $4) $2 $4 }+UnquoteDecl+ : 'unquoteDecl' '=' Expr { UnquoteDecl (fuseRange $1 $3) [] $3 }+ | 'unquoteDecl' SpaceIds '=' Expr { UnquoteDecl (fuseRange $1 $4) $2 $4 }+ | 'unquoteDef' SpaceIds '=' Expr { UnquoteDef (fuseRange $1 $4) $2 $4 } -- Syntax declaration (To declare eg. mixfix binders) Syntax :: { Declaration }@@ -1143,11 +1225,13 @@ SimpleTopHole : SimpleId { ExprHole (rangedThing $1) } | '(' '\\' SimpleId '->' SimpleId ')' { LambdaHole (rangedThing $3) (rangedThing $5) }+ | '(' '\\' '_' '->' SimpleId ')' { LambdaHole "_" (rangedThing $5) } SimpleHole :: { HoleName } SimpleHole : SimpleId { ExprHole (rangedThing $1) } | '\\' SimpleId '->' SimpleId { LambdaHole (rangedThing $2) (rangedThing $4) }+ | '\\' '_' '->' SimpleId { LambdaHole "_" (rangedThing $4) } -- Variable name hole to be implemented later. -- Discard the interval.@@ -1199,7 +1283,7 @@ (Just (AsName m' asR)) doOpen dir ] else return [ impStm asR, appStm m' initArgs ]- | DontOpen <- doOpen -> parseErrorAt (fromJust $ rStart $ getRange $2) "An import statement with module instantiation does not actually import the module. This statement achieves nothing. Either add the `open' keyword or bind the instantiated module with an `as' clause."+ | DontOpen <- doOpen -> parseErrorAt (fromJust $ rStart' $ getRange $2) "An import statement with module instantiation does not actually import the module. This statement achieves nothing. Either add the `open' keyword or bind the instantiated module with an `as' clause." | otherwise -> return [ impStm noRange , appStm (noName $ beginningOf $ getRange m) es@@ -1275,17 +1359,26 @@ | CompiledPragma { $1 } | CompiledExportPragma { $1 } | CompiledDataPragma { $1 }+ | CompiledDeclareDataPragma { $1 } | CompiledTypePragma { $1 } | CompiledEpicPragma { $1 } | CompiledJSPragma { $1 }+ | CompiledUHCPragma { $1 }+ | CompiledDataUHCPragma { $1 }+ | HaskellPragma { $1 }+ | NoSmashingPragma { $1 } | StaticPragma { $1 }+ | InlinePragma { $1 } | ImportPragma { $1 }+ | ImportUHCPragma { $1 } | ImpossiblePragma { $1 }- | RecordEtaPragma { $1 } | TerminatingPragma { $1 } | NonTerminatingPragma { $1 } | NoTerminationCheckPragma { $1 } | MeasurePragma { $1 }+ | CatchallPragma { $1 }+ | DisplayPragma { $1 }+ | NoPositivityCheckPragma { $1 } | OptionsPragma { $1 } -- Andreas, 2014-03-06 -- OPTIONS pragma not allowed everywhere, but don't give parse error.@@ -1317,6 +1410,11 @@ : '{-#' 'COMPILED_EXPORT' PragmaQName PragmaString '#-}' { CompiledExportPragma (getRange ($1,$2,$3,$5)) $3 $4 } +CompiledDeclareDataPragma :: { Pragma }+CompiledDeclareDataPragma+ : '{-#' 'COMPILED_DECLARE_DATA' PragmaQName PragmaStrings '#-}'+ { CompiledDeclareDataPragma (getRange ($1,$2,$3,$5)) $3 (unwords $4) }+ CompiledTypePragma :: { Pragma } CompiledTypePragma : '{-#' 'COMPILED_TYPE' PragmaQName PragmaStrings '#-}'@@ -1337,16 +1435,41 @@ : '{-#' 'COMPILED_JS' PragmaQName PragmaStrings '#-}' { CompiledJSPragma (getRange ($1,$2,$3,$5)) $3 (unwords $4) } +CompiledUHCPragma :: { Pragma }+CompiledUHCPragma+ : '{-#' 'COMPILED_UHC' PragmaQName PragmaStrings '#-}'+ { CompiledUHCPragma (getRange ($1,$2,$3,$5)) $3 (unwords $4) }++CompiledDataUHCPragma :: { Pragma }+CompiledDataUHCPragma+ : '{-#' 'COMPILED_DATA_UHC' PragmaQName string PragmaStrings '#-}'+ { CompiledDataUHCPragma (getRange ($1,$2,$3,fst $4,$6)) $3 (snd $4) $5 }++HaskellPragma :: { Pragma }+HaskellPragma+ : '{-#' 'HASKELL' Strings '#-}' { HaskellCodePragma (getRange ($1, $2, $4)) (recoverLayout $3) }++NoSmashingPragma :: { Pragma }+NoSmashingPragma+ : '{-#' 'NO_SMASHING' PragmaQName '#-}'+ { NoSmashingPragma (getRange ($1,$2,$3,$4)) $3 }+ StaticPragma :: { Pragma } StaticPragma : '{-#' 'STATIC' PragmaQName '#-}' { StaticPragma (getRange ($1,$2,$3,$4)) $3 } -RecordEtaPragma :: { Pragma }-RecordEtaPragma- : '{-#' 'ETA' PragmaQName '#-}'- { EtaPragma (getRange ($1,$2,$3,$4)) $3 }+InlinePragma :: { Pragma }+InlinePragma+ : '{-#' 'INLINE' PragmaQName '#-}'+ { InlinePragma (getRange ($1,$2,$3,$4)) $3 } +DisplayPragma :: { Pragma }+DisplayPragma+ : '{-#' 'DISPLAY' string PragmaStrings '#-}' {%+ let (r, s) = $3 in+ parseDisplayPragma (fuseRange $1 $5) (iStart r) (unwords (s : $4)) }+ NoTerminationCheckPragma :: { Pragma } NoTerminationCheckPragma : '{-#' 'NO_TERMINATION_CHECK' '#-}'@@ -1368,6 +1491,12 @@ { let r = getRange ($1, $2, $3, $4) in TerminationCheckPragma r (TerminationMeasure r $3) } +CatchallPragma :: { Pragma }+CatchallPragma+ : '{-#' 'CATCHALL' '#-}'+ { CatchallPragma (getRange ($1,$2,$3)) }++ ImportPragma :: { Pragma } ImportPragma : '{-#' 'IMPORT' string '#-}'@@ -1377,9 +1506,24 @@ else parseError $ "Malformed module name: " ++ s ++ "." } +ImportUHCPragma :: { Pragma }+ImportUHCPragma+ : '{-#' 'IMPORT_UHC' string '#-}'+ {% let s = snd $3 in+ if validHaskellModuleName s+ then return $ ImportUHCPragma (getRange ($1,$2,fst $3,$4)) s+ else parseError $ "Malformed module name: " ++ s ++ "."+ }++ ImpossiblePragma :: { Pragma } : '{-#' 'IMPOSSIBLE' '#-}' { ImpossiblePragma (getRange ($1,$2,$3)) } +NoPositivityCheckPragma :: { Pragma }+NoPositivityCheckPragma+ : '{-#' 'NO_POSITIVITY_CHECK' '#-}'+ { NoPositivityCheckPragma (getRange ($1,$2,$3)) }+ {-------------------------------------------------------------------------- Sequences of declarations --------------------------------------------------------------------------}@@ -1408,24 +1552,31 @@ : ArgTypeSignatures1 semi ArgTypeSigs { reverse $3 ++ $1 } | ArgTypeSigs { reverse $1 } --- Constructors are type signatures. But constructor lists can be empty.-Constructors :: { [Constructor] }-Constructors- : vopen close { [] }- | TypeSignatures { $1 }- -- Record declarations, including an optional record constructor name.-RecordDeclarations :: { (Maybe (Ranged Induction), Maybe Name, [Declaration]) }+RecordDeclarations :: { ((Maybe (Ranged Induction), Maybe Bool, Maybe (Name, IsInstance)), [Declaration]) } RecordDeclarations- : vopen close { (Nothing, Nothing, []) }- | vopen RecordConstructorName close { (Nothing, Just $2, []) }- | vopen RecordConstructorName semi Declarations1 close { (Nothing, Just $2, $4) }- | vopen Declarations1 close { (Nothing, Nothing, $2) }- | vopen RecordInduction close { (Just $2, Nothing, []) }- | vopen RecordInduction semi RecordConstructorName close { (Just $2, Just $4, []) }- | vopen RecordInduction semi RecordConstructorName semi Declarations1 close { (Just $2, Just $4, $6) }- | vopen RecordInduction semi Declarations1 close { (Just $2, Nothing, $4) }+ : vopen RecordDirectives close {% ((,) `fmap` verifyRecordDirectives $2 <*> pure []) }+ | vopen RecordDirectives semi Declarations1 close {% ((,) `fmap` verifyRecordDirectives $2 <*> pure $4) }+ | vopen Declarations1 close {% ((,) `fmap` verifyRecordDirectives [] <*> pure $2) } ++RecordDirectives :: { [RecordDirective] }+RecordDirectives+ : { [] }+ | RecordDirectives semi RecordDirective { $3 : $1 }+ | RecordDirective { [$1] }++RecordDirective :: { RecordDirective }+RecordDirective+ : RecordConstructorName { Constructor $1 }+ | RecordInduction { Induction $1 }+ | RecordEta { Eta $1 }++RecordEta :: { Ranged Bool }+RecordEta+ : 'eta-equality' { Ranged (getRange $1) True }+ | 'no-eta-equality' { Ranged (getRange $1) False }+ -- Declaration of record as 'inductive' or 'coinductive'. RecordInduction :: { Ranged Induction } RecordInduction@@ -1437,7 +1588,7 @@ Declarations : vopen Declarations1 close { $2 } --- Arbitrary declarations+-- Arbitrary declarations (possibly empty) Declarations0 :: { [Declaration] } Declarations0 : vopen close { [] }@@ -1465,6 +1616,9 @@ -- | Parse an expression. Could be used in interactions. exprParser :: Parser Expr +-- | Parse an expression followed by a where clause. Could be used in interactions.+exprWhereParser :: Parser ExprWhere+ -- | Parse a module. moduleParser :: Parser Module @@ -1489,18 +1643,27 @@ _ -> Nothing -- | Insert a top-level module if there is none.+-- Also fix-up for the case the declarations in the top-level module+-- are not indented (this is allowed as a special case). figureOutTopLevelModule :: [Declaration] -> [Declaration] figureOutTopLevelModule ds =- case span isAllowedBeforeModule ds of- (ds0, Module r m tel ds1 : ds2) -> ds0 ++ [Module r m tel $ ds1 ++ ds2]+ case spanAllowedBeforeModule ds of+ -- Andreas 2016-02-01, issue #1388.+ -- We need to distinguish two additional cases.+ -- Case 1: Regular file layout: imports followed by one module. Nothing to do.+ (ds0, [ Module{} ]) -> ds+ -- Case 2: The declarations in the module are not indented.+ -- This is allowed for the top level module, and thus rectified here.+ (ds0, Module r m tel [] : ds2) -> ds0 ++ [Module r m tel ds2]+ -- Case 3: There is a module with indented declarations,+ -- followed by non-indented declarations. This should be a+ -- parse error and be reported later (see @toAbstract TopLevel{}@),+ -- thus, we do not do anything here.+ (ds0, Module r m tel ds1 : ds2) -> ds -- Gives parse error in scope checker.+ -- OLD code causing issue 1388:+ -- (ds0, Module r m tel ds1 : ds2) -> ds0 ++ [Module r m tel $ ds1 ++ ds2]+ -- Case 4: a top-level module declaration is missing. (ds0, ds1) -> ds0 ++ [Module (getRange ds1) (QName noName_) [] ds1]- where- isAllowedBeforeModule (Pragma OptionsPragma{}) = True- isAllowedBeforeModule (Private _ ds) = all isAllowedBeforeModule ds- isAllowedBeforeModule Import{} = True- isAllowedBeforeModule ModuleMacro{} = True- isAllowedBeforeModule Open{} = True- isAllowedBeforeModule _ = False -- | Create a name from a string. @@ -1529,9 +1692,22 @@ xs <- mapM mkName ss return $ foldr Qual (QName $ last xs) (init xs) +recoverLayout :: [(Interval, String)] -> String+recoverLayout [] = ""+recoverLayout xs@((i, _) : _) = go (iStart i) xs+ where+ c0 = posCol (iStart i)++ go cur [] = ""+ go cur ((i, s) : xs) = padding cur (iStart i) ++ s ++ go (iEnd i) xs++ padding Pn{ posLine = l1, posCol = c1 } Pn{ posLine = l2, posCol = c2 }+ | l1 < l2 = genericReplicate (l2 - l1) '\n' ++ genericReplicate (max 0 (c2 - c0)) ' '+ | l1 == l2 = genericReplicate (c2 - c1) ' '+ ensureUnqual :: QName -> Parser Name ensureUnqual (QName x) = return x-ensureUnqual q@Qual{} = parseError' (rStart $ getRange q) "Qualified name not allowed here"+ensureUnqual q@Qual{} = parseError' (rStart' $ getRange q) "Qualified name not allowed here" -- | Match a particular name. isName :: String -> (Interval, String) -> Parser ()@@ -1545,12 +1721,12 @@ -- | Build a telescoping let (let Ds) tLet :: Range -> [Declaration] -> TypedBindings-tLet r = TypedBindings r . Common.Arg defaultArgInfo . TLet r+tLet r = TypedBindings r . Arg defaultArgInfo . TLet r -- | Converts lambda bindings to typed bindings. addType :: LamBinding -> TypedBindings addType (DomainFull b) = b-addType (DomainFree info x) = TypedBindings r $ Common.Arg info $ TBind r [pure x] $ Underscore r Nothing+addType (DomainFree info x) = TypedBindings r $ Arg info $ TBind r [pure x] $ Underscore r Nothing where r = getRange x mergeImportDirectives :: [ImportDirective] -> Parser ImportDirective@@ -1560,18 +1736,12 @@ where merge mi i2 = do i1 <- mi- let err = parseError' (rStart $ getRange i2) "Cannot mix using and hiding module directives"- uh <- case (usingOrHiding i1, usingOrHiding i2) of- (Hiding [], u) -> return u- (u, Hiding []) -> return u- (Using{}, Hiding{}) -> err- (Hiding{}, Using{}) -> err- (Using xs, Using ys) -> return $ Using (xs ++ ys)- (Hiding xs, Hiding ys) -> return $ Hiding (xs ++ ys)+ let err = parseError' (rStart' $ getRange i2) "Cannot mix using and hiding module directives" return $ ImportDirective { importDirRange = fuseRange i1 i2- , usingOrHiding = uh- , renaming = renaming i1 ++ renaming i2+ , using = mappend (using i1) (using i2)+ , hiding = hiding i1 ++ hiding i2+ , impRenaming = impRenaming i1 ++ impRenaming i2 , publicOpen = publicOpen i1 || publicOpen i2 } -- | Check that an import directive doesn't contain repeated names@@ -1582,7 +1752,7 @@ $ sort xs of [] -> return i- yss -> let Just pos = rStart $ getRange $ head $ concat yss in+ yss -> let Just pos = rStart' $ getRange $ head $ concat yss in parseErrorAt pos $ "Repeated name" ++ s ++ " in import directive: " ++ concat (intersperse ", " $ map (show . head) yss)@@ -1591,10 +1761,35 @@ [_] -> "" _ -> "s" where- xs = names (usingOrHiding i) ++ map renFrom (renaming i)+ xs = names (using i) ++ hiding i ++ map renFrom (impRenaming i) names (Using xs) = xs- names (Hiding xs) = xs+ names UseEverything = [] +data RecordDirective+ = Induction (Ranged Induction)+ | Constructor (Name, IsInstance)+ | Eta (Ranged Bool)+ deriving (Eq,Show)++verifyRecordDirectives :: [RecordDirective] -> Parser (Maybe (Ranged Induction), Maybe Bool, Maybe (Name, IsInstance))+verifyRecordDirectives xs | null rs = return (ltm is, ltm es, ltm cs)+ | otherwise = let Just pos = rStart' $ (head rs) in+ parseErrorAt pos $ "Repeated record directives at: \n" ++ intercalate "\n" (map show rs)++ where+ ltm :: [a] -> Maybe a+ ltm [] = Nothing+ ltm (x:xs) = Just x+ errorFromList [] = []+ errorFromList [x] = []+ errorFromList xs = map getRange xs+ rs = sort (concat ([errorFromList is, errorFromList es', errorFromList cs]))+ is = [ i | Induction i <- xs ]+ es' = [ i | Eta i <- xs ]+ es = map rangedThing es'+ cs = [ i | Constructor i <- xs ]++ -- | Breaks up a string into substrings. Returns every maximal -- subsequence of zero or more characters distinct from @'.'@. --@@ -1646,7 +1841,9 @@ -- | Turn an expression into a pattern. Fails if the expression is not a -- valid pattern. exprToPattern :: Expr -> Parser Pattern-exprToPattern e =+exprToPattern e = do+ let Just pos = rStart' $ getRange e+ failure = parseErrorAt pos $ "Not a valid pattern: " ++ show e case e of Ident x -> return $ IdentP x App _ e1 e2 -> AppP <$> exprToPattern e1@@ -1663,9 +1860,9 @@ InstanceArg r e -> InstanceP r <$> T.mapM exprToPattern e RawApp r es -> RawAppP r <$> mapM exprToPattern es Quote r -> return $ QuoteP r- _ ->- let Just pos = rStart $ getRange e in- parseErrorAt pos $ "Not a valid pattern: " ++ show e+ Rec r es | Just fs <- mapM maybeLeft es -> do+ RecP r <$> T.mapM (T.mapM exprToPattern) fs+ _ -> failure opAppExprToPattern :: OpApp Expr -> Parser Pattern opAppExprToPattern (SyntaxBindingLambda _ _ _) = parseError "Syntax binding lambda cannot appear in a pattern"@@ -1676,7 +1873,7 @@ exprToName :: Expr -> Parser Name exprToName (Ident (QName x)) = return x exprToName e =- let Just pos = rStart $ getRange e in+ let Just pos = rStart' $ getRange e in parseErrorAt pos $ "Not a valid identifier: " ++ show e stripSingletonRawApp :: Expr -> Expr@@ -1703,7 +1900,7 @@ pSynArg (Right (DomainFree a x)) | getHiding a `notElem` [Hidden, NotHidden] = parseError $ show (getHiding a) ++ " arguments not allowed to pattern synonyms" | getRelevance a /= Relevant = parseError "Arguments to pattern synonyms must be relevant"- | otherwise = return $ Common.Arg a (boundName x)+ | otherwise = return $ Arg a (boundName x) parsePanic s = parseError $ "Internal parser error: " ++ s ++ ". Please report this as a bug." @@ -1714,7 +1911,7 @@ | TypeSigsRHS Expr deriving Show -patternToNames :: Pattern -> Parser [(C.ArgInfo, Name)]+patternToNames :: Pattern -> Parser [(ArgInfo, Name)] patternToNames p = case p of IdentP (QName i) -> return [(defaultArgInfo, i)]@@ -1728,7 +1925,7 @@ funClauseOrTypeSigs lhs mrhs wh = do -- traceShowM lhs case mrhs of- JustRHS rhs -> return [FunClause lhs rhs wh]+ JustRHS rhs -> return [FunClause lhs rhs wh False] TypeSigsRHS e -> case wh of NoWhere -> case lhs of Ellipsis{} -> parseError "The ellipsis ... cannot have a type signature"@@ -1737,6 +1934,13 @@ LHS _ (_:_) _ _ -> parseError "Illegal: with patterns in type signature" LHS p [] [] [] -> map (\ (x, y) -> TypeSig x y e) <$> patternToNames p _ -> parseError "A type signature cannot have a where clause"++parseDisplayPragma :: Range -> Position -> String -> Parser Pragma+parseDisplayPragma r pos s =+ case parsePosString pos defaultParseFlags [normal] funclauseParser s of+ ParseOk s [FunClause (LHS lhs [] [] []) (RHS rhs) NoWhere ca] | null (parseInp s) ->+ return $ DisplayPragma r lhs rhs+ _ -> parseError "Invalid DISPLAY pragma. Should have form {-# DISPLAY LHS = RHS #-}." {-------------------------------------------------------------------------- Tests
src/full/Agda/Syntax/Parser/Tokens.hs view
@@ -11,25 +11,30 @@ data Keyword = KwLet | KwIn | KwWhere | KwData | KwCoData | KwPostulate | KwMutual | KwAbstract | KwPrivate | KwInstance- | KwOpen | KwImport | KwModule | KwPrimitive+ | KwOpen | KwImport | KwModule | KwPrimitive | KwMacro | KwInfix | KwInfixL | KwInfixR | KwWith | KwRewrite | KwSet | KwProp | KwForall | KwRecord | KwConstructor | KwField | KwInductive | KwCoInductive+ | KwEta | KwNoEta | KwHiding | KwUsing | KwRenaming | KwTo | KwPublic | KwOPTIONS | KwBUILTIN | KwLINE- | KwCOMPILED_DATA | KwCOMPILED_TYPE | KwCOMPILED | KwCOMPILED_EXPORT- | KwCOMPILED_EPIC | KwCOMPILED_JS- | KwIMPORT | KwIMPOSSIBLE | KwETA | KwSTATIC+ | KwCOMPILED_DATA | KwCOMPILED_DECLARE_DATA | KwCOMPILED_TYPE | KwCOMPILED | KwCOMPILED_EXPORT+ | KwHASKELL+ | KwCOMPILED_EPIC | KwCOMPILED_JS | KwCOMPILED_UHC | KwCOMPILED_DATA_UHC+ | KwIMPORT | KwIMPORT_UHC | KwIMPOSSIBLE | KwSTATIC | KwINLINE | KwNO_SMASHING | KwNO_TERMINATION_CHECK | KwTERMINATING | KwNON_TERMINATING- | KwMEASURE+ | KwMEASURE | KwDISPLAY | KwREWRITE- | KwQuoteGoal | KwQuoteContext | KwQuote | KwQuoteTerm | KwUnquote | KwUnquoteDecl | KwSyntax- | KwPatternSyn | KwTactic+ | KwQuoteGoal | KwQuoteContext | KwQuote | KwQuoteTerm+ | KwUnquote | KwUnquoteDecl | KwUnquoteDef+ | KwSyntax+ | KwPatternSyn | KwTactic | KwCATCHALL+ | KwNO_POSITIVITY_CHECK deriving (Eq, Show) layoutKeywords :: [Keyword] layoutKeywords =- [ KwLet, KwWhere, KwPostulate, KwMutual, KwAbstract, KwPrivate, KwInstance, KwPrimitive, KwField ]+ [ KwLet, KwWhere, KwPostulate, KwMutual, KwAbstract, KwPrivate, KwInstance, KwMacro, KwPrimitive, KwField ] data Symbol = SymDot | SymSemi | SymVirtualSemi | SymBar@@ -68,7 +73,7 @@ instance HasRange Token where getRange (TokKeyword _ i) = getRange i getRange (TokId (i, _)) = getRange i- getRange (TokQId iss) = Range $ map fst iss+ getRange (TokQId iss) = getRange (map fst iss) getRange (TokLiteral lit) = getRange lit getRange (TokSymbol _ i) = getRange i getRange (TokString (i, _)) = getRange i
src/full/Agda/Syntax/Position.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveFoldable #-} {-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}@@ -19,7 +20,9 @@ module Agda.Syntax.Position ( -- * Positions Position+ , PositionWithoutFile , Position'(..)+ , SrcFile , positionInvariant , startPos , movePos@@ -28,20 +31,26 @@ -- * Intervals , Interval+ , IntervalWithoutFile , Interval'(..) , intervalInvariant+ , posToInterval , takeI , dropI -- * Ranges , Range- , Range'(..)+ , Range' , rangeInvariant+ , consecutiveAndSeparated+ , intervalsToRange+ , rangeIntervals+ , rangeFile , rightMargin , noRange- , posToRange- , rStart- , rEnd+ , posToRange, posToRange'+ , rStart, rStart'+ , rEnd, rEnd' , rangeToInterval , continuous , continuousPerLine@@ -70,6 +79,7 @@ import Control.Monad import Data.Foldable (Foldable)+import qualified Data.Foldable as Fold import Data.Function import Data.Int import Data.List hiding (null)@@ -79,15 +89,19 @@ import qualified Data.Set as Set import Data.Traversable (Traversable) import Data.Typeable (Typeable)+import Data.Sequence (Seq)+import qualified Data.Sequence as Seq+import Data.Void +import GHC.Generics (Generic)+ import Test.QuickCheck.All import Agda.Utils.FileName hiding (tests) import Agda.Utils.List hiding (tests)-import Agda.Utils.Maybe+import qualified Agda.Utils.Maybe.Strict as Strict import Agda.Utils.Null import Agda.Utils.Pretty-import Agda.Utils.TestHelpers import Agda.Utils.QuickCheck #include "undefined.h"@@ -107,7 +121,7 @@ -- -- Note the invariant which positions have to satisfy: 'positionInvariant'. data Position' a = Pn- { srcFile :: a+ { srcFile :: !a -- ^ File. , posPos :: !Int32 -- ^ Position, counting from 1.@@ -116,7 +130,7 @@ , posCol :: !Int32 -- ^ Column number, counting from 1. }- deriving (Typeable, Functor, Foldable, Traversable)+ deriving (Typeable, Functor, Foldable, Traversable, Generic) positionInvariant :: Position' a -> Bool positionInvariant p =@@ -131,48 +145,111 @@ instance Ord a => Ord (Position' a) where compare = compare `on` importantPart -type SrcFile = Maybe AbsolutePath+type SrcFile = Strict.Maybe AbsolutePath -type Position = Position' SrcFile+type Position = Position' SrcFile+type PositionWithoutFile = Position' () -- | An interval. The @iEnd@ position is not included in the interval. -- -- Note the invariant which intervals have to satisfy: 'intervalInvariant'. data Interval' a = Interval { iStart, iEnd :: !(Position' a) }- deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable)+ deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable, Generic) -type Interval = Interval' SrcFile+type Interval = Interval' SrcFile+type IntervalWithoutFile = Interval' () intervalInvariant :: Ord a => Interval' a -> Bool intervalInvariant i =- all positionInvariant [iStart i, iEnd i] &&+ all positionInvariant [iStart i, iEnd i]+ && iStart i <= iEnd i+ &&+ srcFile (iStart i) == srcFile (iEnd i) --- | The length of an interval, assuming that the start and end--- positions are in the same file.+-- | Sets the 'srcFile' components of the interval.++setIntervalFile :: a -> Interval' b -> Interval' a+setIntervalFile f (Interval p1 p2) =+ Interval (p1 { srcFile = f }) (p2 { srcFile = f })++-- | Converts a file name and two positions to an interval.+posToInterval ::+ a -> PositionWithoutFile -> PositionWithoutFile -> Interval' a+posToInterval f p1 p2 = setIntervalFile f $+ if p1 < p2+ then Interval p1 p2+ else Interval p2 p1++-- | The length of an interval. iLength :: Interval' a -> Int32 iLength i = posPos (iEnd i) - posPos (iStart i) --- | A range is a list of intervals. The intervals should be--- consecutive and separated.+-- | A range is a file name, plus a sequence of intervals, assumed to+-- point to the given file. The intervals should be consecutive and+-- separated. -- -- Note the invariant which ranges have to satisfy: 'rangeInvariant'.-newtype Range' a = Range [Interval' a]- deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable, Null)+data Range' a+ = NoRange+ | Range !a (Seq IntervalWithoutFile)+ deriving+ (Typeable, Eq, Ord, Functor, Foldable, Traversable, Generic) type Range = Range' SrcFile -rangeInvariant :: Range -> Bool-rangeInvariant (Range []) = True-rangeInvariant (Range is) =- all intervalInvariant is &&- and (zipWith (<) (map iEnd $ init is) (map iStart $ tail is))+instance Null (Range' a) where+ null NoRange = True+ null Range{} = False + empty = NoRange++-- | The intervals that make up the range. The intervals are+-- consecutive and separated ('consecutiveAndSeparated').+rangeIntervals :: Range' a -> [IntervalWithoutFile]+rangeIntervals NoRange = []+rangeIntervals (Range _ is) = Fold.toList is++-- | Turns a file name plus a list of intervals into a range.+--+-- Precondition: 'consecutiveAndSeparated'.+intervalsToRange :: a -> [IntervalWithoutFile] -> Range' a+intervalsToRange _ [] = NoRange+intervalsToRange f is = Range f (Seq.fromList is)++-- | Are the intervals consecutive and separated, do they all point to+-- the same file, and do they satisfy the interval invariant?+consecutiveAndSeparated :: Ord a => [Interval' a] -> Bool+consecutiveAndSeparated is =+ all intervalInvariant is+ &&+ allEqual (map (srcFile . iStart) is)+ &&+ (null is+ ||+ and (zipWith (<) (map iEnd (init is))+ (map iStart (tail is))))++-- | Range invariant.+rangeInvariant :: Ord a => Range' a -> Bool+rangeInvariant r =+ consecutiveAndSeparated (rangeIntervals r)+ &&+ case r of+ Range _ is -> not (null is)+ NoRange -> True++-- | The file the range is pointing to.+rangeFile :: Range -> SrcFile+rangeFile NoRange = Strict.Nothing+rangeFile (Range f _) = f+ -- | Conflate a range to its right margin. rightMargin :: Range -> Range-rightMargin r@(Range is) =- if null is then r else- let i = last is in Range [ i { iStart = iEnd i } ]+rightMargin r@NoRange = r+rightMargin r@(Range f is) = case Seq.viewr is of+ Seq.EmptyR -> __IMPOSSIBLE__+ _ Seq.:> i -> intervalToRange f (i { iStart = iEnd i }) -- | Wrapper to indicate that range should be printed. newtype PrintRange a = PrintRange a@@ -183,29 +260,48 @@ getRange :: t -> Range instance HasRange Interval where- getRange i = Range [i]+ getRange i =+ intervalToRange (srcFile (iStart i))+ (setIntervalFile () i) instance HasRange Range where getRange = id +instance HasRange Bool where+ getRange _ = noRange++-- | Precondition: The ranges of the list elements must point to the+-- same file (or be empty). instance HasRange a => HasRange [a] where getRange = foldr fuseRange noRange +-- | Precondition: The ranges of the tuple elements must point to the+-- same file (or be empty). instance (HasRange a, HasRange b) => HasRange (a,b) where getRange = uncurry fuseRange +-- | Precondition: The ranges of the tuple elements must point to the+-- same file (or be empty). instance (HasRange a, HasRange b, HasRange c) => HasRange (a,b,c) where getRange (x,y,z) = getRange (x,(y,z)) +-- | Precondition: The ranges of the tuple elements must point to the+-- same file (or be empty). instance (HasRange a, HasRange b, HasRange c, HasRange d) => HasRange (a,b,c,d) where getRange (x,y,z,w) = getRange (x,(y,(z,w))) +-- | Precondition: The ranges of the tuple elements must point to the+-- same file (or be empty). instance (HasRange a, HasRange b, HasRange c, HasRange d, HasRange e) => HasRange (a,b,c,d,e) where getRange (x,y,z,w,v) = getRange (x,(y,(z,(w,v)))) +-- | Precondition: The ranges of the tuple elements must point to the+-- same file (or be empty). instance (HasRange a, HasRange b, HasRange c, HasRange d, HasRange e, HasRange f) => HasRange (a,b,c,d,e,f) where getRange (x,y,z,w,v,u) = getRange (x,(y,(z,(w,(v,u))))) +-- | Precondition: The ranges of the tuple elements must point to the+-- same file (or be empty). instance (HasRange a, HasRange b, HasRange c, HasRange d, HasRange e, HasRange f, HasRange g) => HasRange (a,b,c,d,e,f,g) where getRange (x,y,z,w,v,u,t) = getRange (x,(y,(z,(w,(v,(u,t)))))) @@ -213,6 +309,9 @@ getRange Nothing = noRange getRange (Just a) = getRange a +instance (HasRange a, HasRange b) => HasRange (Either a b) where+ getRange = either getRange getRange+ -- | If it is also possible to set the range, this is the class. -- -- Instances should satisfy @'getRange' ('setRange' r x) == r@.@@ -361,6 +460,9 @@ instance KillRange Range where killRange _ = noRange +instance KillRange Void where+ killRange = id+ instance KillRange () where killRange = id @@ -430,24 +532,22 @@ -- ASR (02 December 2014). This instance is not used anymore (module -- the test suite) when reporting errors. See Issue 1293.-instance Show a => Show (Position' (Maybe a)) where- show (Pn Nothing _ l c) = show l ++ "," ++ show c- show (Pn (Just f) _ l c) = show f ++ ":" ++ show l ++ "," ++ show c+instance Show a => Show (Position' (Strict.Maybe a)) where+ show (Pn (Strict.Just f) _ l c) = show f ++ ":" +++ show l ++ "," ++ show c+ show (Pn Strict.Nothing _ l c) = show l ++ "," ++ show c -instance Show a => Show (Interval' (Maybe a)) where- show (Interval s e) = file ++ start ++ "-" ++ end+instance Show PositionWithoutFile where+ show p = show (p { srcFile = Strict.Nothing } :: Position)++instance Show IntervalWithoutFile where+ show (Interval s e) = start ++ "-" ++ end where- f = srcFile s sl = posLine s el = posLine e sc = posCol s ec = posCol e - file :: String- file = case f of- Nothing -> ""- Just f -> show f ++ ":"- start :: String start = show sl ++ "," ++ show sc @@ -455,34 +555,42 @@ end | sl == el = show ec | otherwise = show el ++ "," ++ show ec -instance Show a => Show (Range' (Maybe a)) where- show r = case rangeToInterval r of+instance Show a => Show (Interval' (Strict.Maybe a)) where+ show i@(Interval s _) = file ++ show (setIntervalFile () i)+ where+ file :: String+ file = case srcFile s of+ Strict.Nothing -> ""+ Strict.Just f -> show f ++ ":"++instance Show a => Show (Range' (Strict.Maybe a)) where+ show r = case rangeToIntervalWithFile r of Nothing -> "" Just i -> show i +instance Show a => Show (Range' (Maybe a)) where+ show = show . fmap Strict.toStrict+ ------------------------------------------------------------------------ -- Printing ------------------------------------------------------------------------ -instance Pretty a => Pretty (Position' (Maybe a)) where- pretty (Pn Nothing _ l c) = pretty l <> pretty "," <> pretty c- pretty (Pn (Just f) _ l c) =+instance Pretty a => Pretty (Position' (Strict.Maybe a)) where+ pretty (Pn Strict.Nothing _ l c) = pretty l <> pretty "," <> pretty c+ pretty (Pn (Strict.Just f) _ l c) = pretty f <> pretty ":" <> pretty l <> pretty "," <> pretty c -instance Pretty a => Pretty (Interval' (Maybe a)) where- pretty (Interval s e) = file <> start <> pretty "-" <> end+instance Pretty PositionWithoutFile where+ pretty p = pretty (p { srcFile = Strict.Nothing } :: Position)++instance Pretty IntervalWithoutFile where+ pretty (Interval s e) = start <> pretty "-" <> end where- f = srcFile s sl = posLine s el = posLine e sc = posCol s ec = posCol e - file :: Doc- file = case f of- Nothing -> empty- Just f -> pretty f <> colon- start :: Doc start = pretty sl <> comma <> pretty sc @@ -490,8 +598,16 @@ | sl == el = pretty ec | otherwise = pretty el <> comma <> pretty ec -instance Pretty a => Pretty (Range' (Maybe a)) where- pretty r = case rangeToInterval r of+instance Pretty a => Pretty (Interval' (Strict.Maybe a)) where+ pretty i@(Interval s _) = file <> pretty (setIntervalFile () i)+ where+ file :: Doc+ file = case srcFile s of+ Strict.Nothing -> empty+ Strict.Just f -> pretty f <> colon++instance Pretty a => Pretty (Range' (Strict.Maybe a)) where+ pretty r = case rangeToIntervalWithFile r of Nothing -> empty Just i -> pretty i @@ -503,12 +619,21 @@ --------------------------------------------------------------------------} -- | The first position in a file: position 1, line 1, column 1.+startPos' :: a -> Position' a+startPos' f = Pn+ { srcFile = f+ , posPos = 1+ , posLine = 1+ , posCol = 1+ }++-- | The first position in a file: position 1, line 1, column 1. startPos :: Maybe AbsolutePath -> Position-startPos f = Pn { srcFile = f, posPos = 1, posLine = 1, posCol = 1 }+startPos = startPos' . Strict.toStrict -- | Ranges between two unknown positions noRange :: Range' a-noRange = Range []+noRange = NoRange -- | Advance the position by one character. -- A newline character (@'\n'@) moves the position to the first@@ -547,62 +672,135 @@ dropI s i | genericLength s > iLength i = __IMPOSSIBLE__ | otherwise = i { iStart = movePosByString (iStart i) s } +-- | Converts a file name and two positions to a range.+posToRange' ::+ a -> PositionWithoutFile -> PositionWithoutFile -> Range' a+posToRange' f p1 p2 = intervalToRange f (posToInterval () p1 p2)+ -- | Converts two positions to a range.-posToRange :: Ord a => Position' a -> Position' a -> Range' a-posToRange p1 p2 | p1 < p2 = Range [Interval p1 p2]- | otherwise = Range [Interval p2 p1]+--+-- Precondition: The positions have to point to the same file.+posToRange :: Position' a -> Position' a -> Range' a+posToRange p1 p2 =+ posToRange' (srcFile p1) (p1 { srcFile = () }) (p2 { srcFile = () }) +-- | Converts a file name and an interval to a range.+intervalToRange :: a -> IntervalWithoutFile -> Range' a+intervalToRange f i = Range f (Seq.singleton i)+ -- | Converts a range to an interval, if possible.-rangeToInterval :: Range' a -> Maybe (Interval' a)-rangeToInterval (Range []) = Nothing-rangeToInterval (Range is) = Just $ Interval { iStart = iStart (head is)- , iEnd = iEnd (last is)+rangeToIntervalWithFile :: Range' a -> Maybe (Interval' a)+rangeToIntervalWithFile NoRange = Nothing+rangeToIntervalWithFile (Range f is) = case (Seq.viewl is, Seq.viewr is) of+ (head Seq.:< _, _ Seq.:> last) -> Just $ setIntervalFile f $+ Interval { iStart = iStart head+ , iEnd = iEnd last }+ _ -> __IMPOSSIBLE__ +-- | Converts a range to an interval, if possible. Note that the+-- information about the source file is lost.+rangeToInterval :: Range' a -> Maybe IntervalWithoutFile+rangeToInterval NoRange = Nothing+rangeToInterval (Range _ is) = case (Seq.viewl is, Seq.viewr is) of+ (head Seq.:< _, _ Seq.:> last) -> Just $+ Interval { iStart = iStart head+ , iEnd = iEnd last+ }+ _ -> __IMPOSSIBLE__+ -- | Returns the shortest continuous range containing the given one. continuous :: Range' a -> Range' a-continuous r = case rangeToInterval r of- Nothing -> Range []- Just i -> Range [i]+continuous NoRange = NoRange+continuous r@(Range f _) = case rangeToInterval r of+ Nothing -> __IMPOSSIBLE__+ Just i -> intervalToRange f i -- | Removes gaps between intervals on the same line. continuousPerLine :: Ord a => Range' a -> Range' a-continuousPerLine (Range []) = Range []-continuousPerLine (Range (i:is)) = Range $ fuse i is+continuousPerLine r@NoRange = r+continuousPerLine r@(Range f _) =+ Range f (Seq.unfoldr step (rangeIntervals r)) where- fuse i [] = [i]- fuse i (j:is)- | sameLine i j = fuse (fuseIntervals i j) is- | otherwise = i : fuse j is- sameLine i j = posLine (iEnd i) == posLine (iStart j)+ step [] = Nothing+ step [i] = Just (i, [])+ step (i : is@(j : js))+ | sameLine = step (fuseIntervals i j : js)+ | otherwise = Just (i, is)+ where+ sameLine = posLine (iEnd i) == posLine (iStart j) -- | The initial position in the range, if any.+rStart' :: Range' a -> Maybe PositionWithoutFile+rStart' r = iStart <$> rangeToInterval r++-- | The initial position in the range, if any. rStart :: Range' a -> Maybe (Position' a)-rStart r = iStart <$> rangeToInterval r+rStart NoRange = Nothing+rStart r@(Range f _) = (\p -> p { srcFile = f }) <$> rStart' r -- | The position after the final position in the range, if any.+rEnd' :: Range' a -> Maybe PositionWithoutFile+rEnd' r = iEnd <$> rangeToInterval r++-- | The position after the final position in the range, if any. rEnd :: Range' a -> Maybe (Position' a)-rEnd r = iEnd <$> rangeToInterval r+rEnd NoRange = Nothing+rEnd r@(Range f _) = (\p -> p { srcFile = f }) <$> rEnd' r -- | Finds the least interval which covers the arguments.+--+-- Precondition: The intervals must point to the same file. fuseIntervals :: Ord a => Interval' a -> Interval' a -> Interval' a-fuseIntervals x y = Interval { iStart = head ps, iEnd = last ps }- where ps = sort [iStart x, iStart y, iEnd x, iEnd y]+fuseIntervals x y = Interval { iStart = head ss, iEnd = last es }+ where+ ss = sort [iStart x, iStart y]+ es = sort [iEnd x, iEnd y] -- | @fuseRanges r r'@ unions the ranges @r@ and @r'@. -- -- Meaning it finds the least range @r0@ that covers @r@ and @r'@.+--+-- Precondition: The ranges must point to the same file (or be empty). fuseRanges :: (Ord a) => Range' a -> Range' a -> Range' a-fuseRanges (Range is) (Range js) = Range (helper is js)+fuseRanges NoRange is2 = is2+fuseRanges is1 NoRange = is1+fuseRanges (Range f is1) (Range _ is2) = Range f (fuse is1 is2) where- helper [] js = js- helper is [] = is- helper (i:is) (j:js)- | iEnd i < iStart j = i : helper is (j:js)- | iEnd j < iStart i = j : helper (i:is) js- | iEnd i < iEnd j = helper is (fuseIntervals i j : js)- | otherwise = helper (fuseIntervals i j : is) js+ fuse is1 is2 = case (Seq.viewl is1, Seq.viewr is1,+ Seq.viewl is2, Seq.viewr is2) of+ (Seq.EmptyL, _, _, _) -> is2+ (_, _, Seq.EmptyL, _) -> is1+ (s1 Seq.:< r1, l1 Seq.:> e1, s2 Seq.:< r2, l2 Seq.:> e2)+ -- Special cases.+ | iEnd e1 < iStart s2 -> is1 Seq.>< is2+ | iEnd e2 < iStart s1 -> is2 Seq.>< is1+ | iEnd e1 == iStart s2 -> mergeTouching l1 e1 s2 r2+ | iEnd e2 == iStart s1 -> mergeTouching l2 e2 s1 r1+ -- General cases.+ | iEnd s1 < iStart s2 -> outputLeftPrefix s1 r1 s2 is2+ | iEnd s2 < iStart s1 -> outputLeftPrefix s2 r2 s1 is1+ | iEnd s1 < iEnd s2 -> fuseSome s1 r1 s2 r2+ | otherwise -> fuseSome s2 r2 s1 r1+ _ -> __IMPOSSIBLE__ + mergeTouching l e s r = l Seq.>< i Seq.<| r+ where+ i = Interval { iStart = iStart e, iEnd = iEnd s }++ -- The following two functions could use binary search instead of+ -- linear.++ outputLeftPrefix s1 r1 s2 is2 = s1 Seq.<| r1' Seq.>< fuse r1'' is2+ where+ (r1', r1'') = Seq.spanl (\s -> iEnd s < iStart s2) r1++ fuseSome s1 r1 s2 r2 = fuse r1' (fuseIntervals s1 s2 Seq.<| r2)+ where+ r1' = Seq.dropWhileL (\s -> iEnd s <= iEnd s2) r1++-- | Precondition: The ranges must point to the same file (or be+-- empty). fuseRange :: (HasRange u, HasRange t) => u -> t -> Range fuseRange x y = fuseRanges (getRange x) (getRange y) @@ -610,18 +808,18 @@ -- positioned at the beginning of @r@. If @r@ does not have a -- beginning, then 'noRange' is returned. beginningOf :: Range -> Range-beginningOf r = case rStart r of- Nothing -> noRange- Just pos -> posToRange pos pos+beginningOf NoRange = NoRange+beginningOf r@(Range f _) = case rStart' r of+ Nothing -> __IMPOSSIBLE__+ Just pos -> posToRange' f pos pos -- | @beginningOfFile r@ is an empty range (a single, empty interval) -- at the beginning of @r@'s starting position's file. If there is no -- such position, then an empty range is returned. beginningOfFile :: Range -> Range-beginningOfFile r = case rStart r of- Nothing -> noRange- Just (Pn { srcFile = f }) -> posToRange p p- where p = startPos f+beginningOfFile NoRange = NoRange+beginningOfFile (Range f _) = posToRange' f p p+ where p = startPos' () -- | @x \`withRangeOf\` y@ sets the range of @x@ to the range of @y@. withRangeOf :: (SetRange t, HasRange u) => t -> u -> t@@ -630,17 +828,16 @@ ------------------------------------------------------------------------ -- Test suite --- | The positions corresponding to the interval, /including/ the--- end-point. This function assumes that the two end points belong to--- the same file. Note that the 'Arbitrary' instance for 'Position's--- uses a single, hard-wired file name.+-- | The positions corresponding to the interval. The positions do not+-- refer to characters, but to the positions between characters, with+-- zero pointing to the position before the first character. iPositions :: Interval' a -> Set Int32 iPositions i = Set.fromList [posPos (iStart i) .. posPos (iEnd i)] -- | The positions corresponding to the range, including the--- end-points. All ranges are assumed to belong to a single file.+-- end-points. rPositions :: Range' a -> Set Int32-rPositions (Range is) = Set.unions (map iPositions is)+rPositions r = Set.unions (map iPositions $ rangeIntervals r) -- | Constructs the least interval containing all the elements in the -- set.@@ -652,11 +849,14 @@ prop_iLength :: Interval' Integer -> Bool prop_iLength i = iLength i >= 0 +prop_startPos' :: Bool+prop_startPos' = positionInvariant (startPos' ())+ prop_startPos :: Maybe AbsolutePath -> Bool prop_startPos = positionInvariant . startPos prop_noRange :: Bool-prop_noRange = rangeInvariant noRange+prop_noRange = rangeInvariant (noRange :: Range) prop_takeI_dropI :: Interval' Integer -> Property prop_takeI_dropI i =@@ -669,12 +869,38 @@ intervalInvariant d && fuseIntervals t d == i +prop_posToRange' ::+ Integer -> PositionWithoutFile -> PositionWithoutFile -> Bool+prop_posToRange' f p1 p2 =+ rangeInvariant (posToRange' f p1 p2)++prop_posToRange :: Position' Integer -> Position' Integer -> Bool+prop_posToRange p1 p2 =+ rangeInvariant (posToRange p1 (p2 { srcFile = srcFile p1 }))++prop_intervalToRange :: Integer -> IntervalWithoutFile -> Bool+prop_intervalToRange f i = rangeInvariant (intervalToRange f i)++rangeToIntervalPropertyTemplate ::+ Ord a =>+ (Range' Integer -> Maybe (Interval' a)) ->+ Range' Integer -> Bool+rangeToIntervalPropertyTemplate r2i r = case r2i r of+ Nothing -> r == noRange+ Just i ->+ r /= noRange+ &&+ intervalInvariant i+ &&+ iPositions i == makeInterval (rPositions r)++prop_rangeToIntervalWithFile :: Range' Integer -> Bool+prop_rangeToIntervalWithFile =+ rangeToIntervalPropertyTemplate rangeToIntervalWithFile+ prop_rangeToInterval :: Range' Integer -> Bool-prop_rangeToInterval (Range []) = True-prop_rangeToInterval r =- intervalInvariant i &&- iPositions i == makeInterval (rPositions r)- where Just i = rangeToInterval r+prop_rangeToInterval =+ rangeToIntervalPropertyTemplate rangeToInterval prop_continuous :: Range -> Bool prop_continuous r =@@ -687,10 +913,12 @@ rangeInvariant r' && distinct lineNumbers+ &&+ rangeFile r' == rangeFile r where- r'@(Range is') = continuousPerLine r+ r' = continuousPerLine r - lineNumbers = concatMap lines is'+ lineNumbers = concatMap lines (rangeIntervals r') where lines i | s == e = [s] | otherwise = [s, e]@@ -706,11 +934,13 @@ iPositions i == makeInterval (Set.union (iPositions i1) (iPositions i2)) -prop_fuseRanges :: Range -> Range -> Bool-prop_fuseRanges r1 r2 =- rangeInvariant r &&- rPositions r == Set.union (rPositions r1) (rPositions r2)- where r = fuseRanges r1 r2+prop_fuseRanges :: Range -> Property+prop_fuseRanges r1 =+ forAll (rangeInSameFileAs r1) $ \r2 ->+ let r = fuseRanges r1 r2 in+ rangeInvariant r+ &&+ rPositions r == Set.union (rPositions r1) (rPositions r2) prop_beginningOf :: Range -> Bool prop_beginningOf r = rangeInvariant (beginningOf r)@@ -728,17 +958,14 @@ return (Pn {srcFile = srcFile, posPos = pos, posLine = line, posCol = col }) --- | Sets the 'srcFile' components of the interval.--setFile :: a -> Interval' a -> Interval' a-setFile f (Interval p1 p2) =- Interval (p1 { srcFile = f }) (p2 { srcFile = f })- -- | Generates an interval located in the same file as the given -- interval. -intervalInSameFileAs :: Interval' Integer -> Gen (Interval' Integer)-intervalInSameFileAs i = setFile (srcFile $ iStart i) <$> arbitrary+intervalInSameFileAs ::+ (Arbitrary a, Ord a) => Interval' a -> Gen (Interval' a)+intervalInSameFileAs i =+ setIntervalFile (srcFile $ iStart i) <$>+ (arbitrary :: Gen IntervalWithoutFile) prop_intervalInSameFileAs :: Interval' Integer -> Property prop_intervalInSameFileAs i =@@ -746,6 +973,25 @@ intervalInvariant i' && srcFile (iStart i) == srcFile (iStart i') +-- | Generates a range located in the same file as the given+-- range (if possible).++rangeInSameFileAs :: (Arbitrary a, Ord a) => Range' a -> Gen (Range' a)+rangeInSameFileAs NoRange = arbitrary+rangeInSameFileAs (Range f is) = do+ Range _f is <- arbitrary `suchThat` (not . null)+ return $ Range (f `asTypeOf` _f) is++prop_rangeInSameFileAs :: Range' Integer -> Property+prop_rangeInSameFileAs r =+ forAll (rangeInSameFileAs r) $ \r' ->+ rangeInvariant r'+ &&+ case (r, r') of+ (NoRange, _) -> True+ (Range f _, Range f' _) -> f == f'+ (Range _ _, NoRange) -> False+ instance (Arbitrary a, Ord a) => Arbitrary (Interval' a) where arbitrary = do (p1, p2 :: Position' a) <- liftM2 (,) arbitrary arbitrary@@ -753,16 +999,19 @@ return (Interval p1' p2') instance (Ord a, Arbitrary a) => Arbitrary (Range' a) where- arbitrary = Range . fuse . sort . fixFiles <$> arbitrary+ arbitrary = do+ f <- arbitrary+ intervalsToRange f . fuse . sort <$> arbitrary where- fixFiles [] = []- fixFiles (i : is) = i : map (setFile $ srcFile $ iStart i) is- fuse (i1 : i2 : is) | iEnd i1 >= iStart i2 = fuse (fuseIntervals i1 i2 : is) | otherwise = i1 : fuse (i2 : is) fuse is = is +instance CoArbitrary a => CoArbitrary (Position' a)+instance CoArbitrary a => CoArbitrary (Interval' a)+instance CoArbitrary a => CoArbitrary (Range' a)+ prop_positionInvariant :: Position' Integer -> Bool prop_positionInvariant = positionInvariant @@ -772,9 +1021,9 @@ prop_rangeInvariant :: Range -> Bool prop_rangeInvariant = rangeInvariant -instance Show (Position' Integer) where show = show . fmap Just-instance Show (Interval' Integer) where show = show . fmap Just-instance Show (Range' Integer) where show = show . fmap Just+instance Show (Position' Integer) where show = show . fmap Strict.Just+instance Show (Interval' Integer) where show = show . fmap Strict.Just+instance Show (Range' Integer) where show = show . fmap Strict.Just ------------------------------------------------------------------------ -- * All tests@@ -789,20 +1038,3 @@ tests = do putStrLn "Agda.Syntax.Position" $quickCheckAll---- tests = runTests "Agda.Syntax.Position"--- [ quickCheck' (positionInvariant :: Position -> Bool)--- , quickCheck' intervalInvariant--- , quickCheck' rangeInvariant--- , quickCheck' prop_iLength--- , quickCheck' prop_startPos--- , quickCheck' prop_noRange--- , quickCheck' prop_takeI_dropI--- , quickCheck' prop_rangeToInterval--- , quickCheck' prop_continuous--- , quickCheck' prop_fuseIntervals--- , quickCheck' prop_fuseRanges--- , quickCheck' prop_beginningOf--- , quickCheck' prop_beginningOfFile--- , quickCheck' prop_intervalInSameFileAs--- ]
+ src/full/Agda/Syntax/Reflected.hs view
@@ -0,0 +1,58 @@+{-# OPTIONS_GHC -fwarn-missing-signatures #-}++module Agda.Syntax.Reflected where++import Agda.Syntax.Common+import Agda.Syntax.Literal+import Agda.Syntax.Abstract.Name++type Args = [Arg Term]++data Elim' a = Apply (Arg a) -- no record projections for now+ deriving (Show)+type Elim = Elim' Term+type Elims = [Elim]++argsToElims :: Args -> Elims+argsToElims = map Apply++data Abs a = Abs String a+ deriving (Show)++data Term = Var Int Elims+ | Con QName Elims+ | Def QName Elims+ | Meta MetaId Elims+ | Lam Hiding (Abs Term)+ | ExtLam [Clause] Elims+ | Pi (Dom Type) (Abs Type)+ | Sort Sort+ | Lit Literal+ | Unknown+ deriving (Show)++type Type = Term++data Sort = SetS Term+ | LitS Integer+ | UnknownS+ deriving (Show)++data Pattern = ConP QName [Arg Pattern]+ | DotP+ | VarP String+ | LitP Literal+ | AbsurdP+ | ProjP QName+ deriving (Show)++data Clause = Clause [Arg Pattern] Term | AbsurdClause [Arg Pattern]+ deriving (Show)++data Definition = FunDef Type [Clause]+ | DataDef -- nothing for now+ | RecordDef -- nothing for now+ | DataConstructor+ | Axiom+ | Primitive+ deriving (Show)
src/full/Agda/Syntax/Scope/Base.hs view
@@ -1,22 +1,27 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE GADTs #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE RankNTypes #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TupleSections #-} {-| This module defines the notion of a scope and operations on scopes. -} module Agda.Syntax.Scope.Base where -import Control.Arrow ((***), first, second)+import Control.Arrow (first, second, (***)) import Control.Applicative import Control.DeepSeq+import Control.Monad +import Data.Either (partitionEithers) import Data.Function import Data.List as List import Data.Map (Map) import qualified Data.Map as Map+import Data.Set (Set)+import qualified Data.Set as Set import Data.Maybe import Data.Typeable (Typeable) @@ -29,14 +34,14 @@ import Agda.Syntax.Fixity import Agda.Syntax.Abstract.Name as A import Agda.Syntax.Concrete.Name as C-import Agda.Syntax.Concrete- (ImportDirective(..), UsingOrHiding(..), ImportedName(..), Renaming(..))+import qualified Agda.Syntax.Concrete as C import Agda.Utils.AssocList (AssocList) import qualified Agda.Utils.AssocList as AssocList import Agda.Utils.Functor import Agda.Utils.Lens import Agda.Utils.List+import Agda.Utils.Pretty import qualified Agda.Utils.Map as Map #include "undefined.h"@@ -53,7 +58,7 @@ , scopeImports :: Map C.QName A.ModuleName , scopeDatatypeModule :: Bool }- deriving (Typeable)+ deriving (Typeable, Eq) -- | See 'Agda.Syntax.Common.Access'. data NameSpaceId@@ -93,13 +98,20 @@ -- | The complete information about the scope at a particular program point -- includes the scope stack, the local variables, and the context precedence. data ScopeInfo = ScopeInfo- { scopeCurrent :: A.ModuleName- , scopeModules :: Map A.ModuleName Scope- , scopeLocals :: LocalVars- , scopePrecedence :: Precedence+ { scopeCurrent :: A.ModuleName+ , scopeModules :: Map A.ModuleName Scope+ , scopeLocals :: LocalVars+ , scopePrecedence :: Precedence+ , scopeInverseName :: Map A.QName [C.QName]+ , scopeInverseModule :: Map A.ModuleName [C.QName]+ , scopeInScope :: InScopeSet }- deriving (Typeable)+ deriving Typeable +instance Eq ScopeInfo where+ ScopeInfo c1 m1 l1 p1 _ _ _ == ScopeInfo c2 m2 l2 p2 _ _ _ =+ c1 == c2 && m1 == m2 && l1 == l2 && p1 == p2+ -- | Local variables. type LocalVars = AssocList C.Name LocalVar @@ -114,8 +126,6 @@ -- (List not empty). deriving (Typeable) -instance NFData LocalVar where rnf x = seq x ()- instance Eq LocalVar where (==) = (==) `on` localVar @@ -138,7 +148,7 @@ notShadowedLocal (LocalVar x) = Just x notShadowedLocal ShadowedVar{} = Nothing --- | Get all locals that are not shadowed.+-- | Get all locals that are not shadowed __by imports__. notShadowedLocals :: LocalVars -> AssocList C.Name A.Name notShadowedLocals = mapMaybe $ \ (c,x) -> (c,) <$> notShadowedLocal x @@ -149,6 +159,9 @@ setScopeLocals :: LocalVars -> ScopeInfo -> ScopeInfo setScopeLocals vars = updateScopeLocals (const vars) +mapScopeInfo :: (Scope -> Scope) -> ScopeInfo -> ScopeInfo+mapScopeInfo f i = i{ scopeModules = f <$> scopeModules i }+ ------------------------------------------------------------------------ -- * Name spaces --@@ -163,12 +176,14 @@ -- ^ Maps concrete names to a list of abstract names. , nsModules :: ModulesInScope -- ^ Maps concrete module names to a list of abstract module names.+ , nsInScope :: InScopeSet }- deriving (Typeable)+ deriving (Typeable, Eq) type ThingsInScope a = Map C.Name [a] type NamesInScope = ThingsInScope AbstractName type ModulesInScope = ThingsInScope AbstractModule+type InScopeSet = Set A.QName -- | Set of types consisting of exactly 'AbstractName' and 'AbstractModule'. --@@ -209,7 +224,8 @@ | FldName -- ^ Record field name. | DefName -- ^ Ordinary defined name. | PatternSynName -- ^ Name of a pattern synonym.- | QuotableName -- ^ A name that can only quoted.+ | MacroName -- ^ Name of a macro+ | QuotableName -- ^ A name that can only be quoted. deriving (Eq, Show, Typeable, Enum, Bounded) -- | A list containing all name kinds.@@ -280,35 +296,40 @@ -- | The empty name space. emptyNameSpace :: NameSpace-emptyNameSpace = NameSpace Map.empty Map.empty+emptyNameSpace = NameSpace Map.empty Map.empty Set.empty -- | Map functions over the names and modules in a name space. mapNameSpace :: (NamesInScope -> NamesInScope ) -> (ModulesInScope -> ModulesInScope) ->+ (InScopeSet -> InScopeSet ) -> NameSpace -> NameSpace-mapNameSpace fd fm ns =- ns { nsNames = fd $ nsNames ns- , nsModules = fm $ nsModules ns+mapNameSpace fd fm fs ns =+ ns { nsNames = fd $ nsNames ns+ , nsModules = fm $ nsModules ns+ , nsInScope = fs $ nsInScope ns } -- | Zip together two name spaces. zipNameSpace :: (NamesInScope -> NamesInScope -> NamesInScope ) -> (ModulesInScope -> ModulesInScope -> ModulesInScope) ->+ (InScopeSet -> InScopeSet -> InScopeSet ) -> NameSpace -> NameSpace -> NameSpace-zipNameSpace fd fm ns1 ns2 =+zipNameSpace fd fm fs ns1 ns2 = ns1 { nsNames = nsNames ns1 `fd` nsNames ns2 , nsModules = nsModules ns1 `fm` nsModules ns2+ , nsInScope = nsInScope ns1 `fs` nsInScope ns2 } -- | Map monadic function over a namespace. mapNameSpaceM :: Applicative m => (NamesInScope -> m NamesInScope ) -> (ModulesInScope -> m ModulesInScope) ->+ (InScopeSet -> m InScopeSet ) -> NameSpace -> m NameSpace-mapNameSpaceM fd fm ns = update ns <$> fd (nsNames ns) <*> fm (nsModules ns)+mapNameSpaceM fd fm fs ns = update ns <$> fd (nsNames ns) <*> fm (nsModules ns) <*> fs (nsInScope ns) where- update ns ds ms = ns { nsNames = ds, nsModules = ms }+ update ns ds ms is = ns { nsNames = ds, nsModules = ms, nsInScope = is } ------------------------------------------------------------------------ -- * General operations on scopes@@ -327,49 +348,66 @@ -- | The empty scope info. emptyScopeInfo :: ScopeInfo emptyScopeInfo = ScopeInfo- { scopeCurrent = noModuleName- , scopeModules = Map.singleton noModuleName emptyScope- , scopeLocals = []- , scopePrecedence = TopCtx+ { scopeCurrent = noModuleName+ , scopeModules = Map.singleton noModuleName emptyScope+ , scopeLocals = []+ , scopePrecedence = TopCtx+ , scopeInverseName = Map.empty+ , scopeInverseModule = Map.empty+ , scopeInScope = Set.empty } -- | Map functions over the names and modules in a scope. mapScope :: (NameSpaceId -> NamesInScope -> NamesInScope ) -> (NameSpaceId -> ModulesInScope -> ModulesInScope) ->+ (NameSpaceId -> InScopeSet -> InScopeSet ) -> Scope -> Scope-mapScope fd fm = updateScopeNameSpaces $ AssocList.mapWithKey mapNS+mapScope fd fm fs = updateScopeNameSpaces $ AssocList.mapWithKey mapNS where- mapNS acc = mapNameSpace (fd acc) (fm acc)+ mapNS acc = mapNameSpace (fd acc) (fm acc) (fs acc) -- | Same as 'mapScope' but applies the same function to all name spaces. mapScope_ :: (NamesInScope -> NamesInScope ) -> (ModulesInScope -> ModulesInScope) ->+ (InScopeSet -> InScopeSet ) -> Scope -> Scope-mapScope_ fd fm = mapScope (const fd) (const fm)+mapScope_ fd fm fs = mapScope (const fd) (const fm) (const fs) +-- | Same as 'mapScope' but applies the function only on the given name space.+mapScope' :: NameSpaceId -> (NamesInScope -> NamesInScope ) ->+ (ModulesInScope -> ModulesInScope) ->+ (InScopeSet -> InScopeSet ) ->+ Scope -> Scope+mapScope' i fd fm fs = mapScope (\ j -> if i == j then fd else id)+ (\ j -> if i == j then fm else id)+ (\ j -> if i == j then fs else id)+ -- | Map monadic functions over the names and modules in a scope.-mapScopeM :: (Functor m, Applicative m) =>+mapScopeM :: Applicative m => (NameSpaceId -> NamesInScope -> m NamesInScope ) -> (NameSpaceId -> ModulesInScope -> m ModulesInScope) ->+ (NameSpaceId -> InScopeSet -> m InScopeSet ) -> Scope -> m Scope-mapScopeM fd fm = updateScopeNameSpacesM $ AssocList.mapWithKeyM mapNS+mapScopeM fd fm fs = updateScopeNameSpacesM $ AssocList.mapWithKeyM mapNS where- mapNS acc = mapNameSpaceM (fd acc) (fm acc)+ mapNS acc = mapNameSpaceM (fd acc) (fm acc) (fs acc) -- | Same as 'mapScopeM' but applies the same function to both the public and -- private name spaces.-mapScopeM_ :: (Functor m, Applicative m) =>+mapScopeM_ :: Applicative m => (NamesInScope -> m NamesInScope ) -> (ModulesInScope -> m ModulesInScope) ->+ (InScopeSet -> m InScopeSet ) -> Scope -> m Scope-mapScopeM_ fd fm = mapScopeM (const fd) (const fm)+mapScopeM_ fd fm fs = mapScopeM (const fd) (const fm) (const fs) -- | Zip together two scopes. The resulting scope has the same name as the -- first scope. zipScope :: (NameSpaceId -> NamesInScope -> NamesInScope -> NamesInScope ) -> (NameSpaceId -> ModulesInScope -> ModulesInScope -> ModulesInScope) ->+ (NameSpaceId -> InScopeSet -> InScopeSet -> InScopeSet ) -> Scope -> Scope -> Scope-zipScope fd fm s1 s2 =+zipScope fd fm fs s1 s2 = s1 { scopeNameSpaces = [ (nsid, zipNS nsid ns1 ns2) | ((nsid, ns1), (nsid', ns2)) <- zipWith' (,) (scopeNameSpaces s1) (scopeNameSpaces s2) , assert (nsid == nsid')@@ -379,19 +417,29 @@ where assert True = True assert False = __IMPOSSIBLE__- zipNS acc = zipNameSpace (fd acc) (fm acc)+ zipNS acc = zipNameSpace (fd acc) (fm acc) (fs acc) -- | Same as 'zipScope' but applies the same function to both the public and -- private name spaces. zipScope_ :: (NamesInScope -> NamesInScope -> NamesInScope ) -> (ModulesInScope -> ModulesInScope -> ModulesInScope) ->+ (InScopeSet -> InScopeSet -> InScopeSet ) -> Scope -> Scope -> Scope-zipScope_ fd fm = zipScope (const fd) (const fm)+zipScope_ fd fm fs = zipScope (const fd) (const fm) (const fs) +-- | Recompute the inScope sets of a scope.+recomputeInScopeSets :: Scope -> Scope+recomputeInScopeSets = updateScopeNameSpaces (map $ second recomputeInScope)+ where+ recomputeInScope ns = ns { nsInScope = Set.unions $ map (Set.fromList . map anameName)+ $ Map.elems $ nsNames ns }+ -- | Filter a scope keeping only concrete names matching the predicates. -- The first predicate is applied to the names and the second to the modules. filterScope :: (C.Name -> Bool) -> (C.Name -> Bool) -> Scope -> Scope-filterScope pd pm = mapScope_ (Map.filterKeys pd) (Map.filterKeys pm)+filterScope pd pm = recomputeInScopeSets . mapScope_ (Map.filterKeys pd) (Map.filterKeys pm) id+ -- We don't have enough information in the in scope set to do an+ -- incremental update here, so just recompute it from the name map. -- | Return all names in a scope. allNamesInScope :: InScope a => Scope -> ThingsInScope a@@ -417,11 +465,12 @@ thingsInScope fs s = NameSpace { nsNames = namesInScope fs s , nsModules = namesInScope fs s+ , nsInScope = Set.unions [ nsInScope $ scopeNameSpace nsid s | nsid <- fs ] } -- | Merge two scopes. The result has the name of the first scope. mergeScope :: Scope -> Scope -> Scope-mergeScope = zipScope_ mergeNames mergeNames+mergeScope = zipScope_ mergeNames mergeNames Set.union -- | Merge a non-empty list of scopes. The result has the name of the first -- scope in the list.@@ -460,15 +509,18 @@ addNamesToScope acc x ys s = mergeScope s s1 where s1 = setScopeAccess acc $ setNameSpace PublicNS ns emptyScope- ns = emptyNameSpace { nsNames = Map.singleton x ys }+ ns = emptyNameSpace { nsNames = Map.singleton x ys+ , nsInScope = Set.fromList (map anameName ys) } -- | Add a name to a scope. addNameToScope :: NameSpaceId -> C.Name -> AbstractName -> Scope -> Scope addNameToScope acc x y s = addNamesToScope acc x [y] s --- | Remove a name from a scope.+-- | Remove a name from a scope. Caution: does not update the nsInScope set.+-- This is only used by rebindName and in that case we add the name right+-- back (but with a different kind). removeNameFromScope :: NameSpaceId -> C.Name -> Scope -> Scope-removeNameFromScope ns x s = mapScope remove (const id) s+removeNameFromScope ns x s = mapScope remove (const id) (const id) s where remove ns' | ns' /= ns = id | otherwise = Map.delete x@@ -480,66 +532,90 @@ s1 = setScopeAccess acc $ setNameSpace PublicNS ns emptyScope ns = emptyNameSpace { nsModules = Map.singleton x [m] } +-- When we get here we cannot have both using and hiding+type UsingOrHiding = Either C.Using [C.ImportedName]++usingOrHiding :: C.ImportDirective -> UsingOrHiding+usingOrHiding i =+ case (using i, hiding i) of+ (UseEverything, xs) -> Right xs+ (u, []) -> Left u+ _ -> __IMPOSSIBLE__+ -- | Apply an 'ImportDirective' to a scope.-applyImportDirective :: ImportDirective -> Scope -> Scope+applyImportDirective :: C.ImportDirective -> Scope -> Scope applyImportDirective dir s = mergeScope usedOrHidden renamed where- usedOrHidden = useOrHide (hideLHS (renaming dir) $ usingOrHiding dir) s- renamed = rename (renaming dir) $ useOrHide useRenamedThings s+ usedOrHidden = useOrHide (hideLHS (impRenaming dir) $ usingOrHiding dir) s+ renamed = rename (impRenaming dir) $ useOrHide useRenamedThings s - useRenamedThings = Using $ map renFrom $ renaming dir+ useRenamedThings = Left $ Using $ map renFrom $ impRenaming dir - hideLHS :: [Renaming] -> UsingOrHiding -> UsingOrHiding- hideLHS _ i@(Using _) = i- hideLHS ren (Hiding xs) = Hiding $ xs ++ map renFrom ren+ hideLHS :: [C.Renaming] -> UsingOrHiding -> UsingOrHiding+ hideLHS _ i@(Left _) = i+ hideLHS ren (Right xs) = Right $ xs ++ map renFrom ren useOrHide :: UsingOrHiding -> Scope -> Scope- useOrHide (Hiding xs) s = filterNames notElem notElem xs s- useOrHide (Using xs) s = filterNames elem elem xs s+ useOrHide (Right xs) s = filterNames notElem notElem xs s+ useOrHide (Left (Using xs)) s = filterNames elem elem xs s+ useOrHide _ _ = __IMPOSSIBLE__ - filterNames :: (C.Name -> [C.Name] -> Bool) -> (C.Name -> [C.Name] -> Bool) ->- [ImportedName] -> Scope -> Scope- filterNames pd pm xs = filterScope' (flip pd ds) (flip pm ms)+ filterNames :: (C.Name -> [C.Name] -> Bool) ->+ (C.Name -> [C.Name] -> Bool) ->+ [C.ImportedName] -> Scope -> Scope+ filterNames pd pm xs = filterScope (`pd` ds) (`pm` ms) where ds = [ x | ImportedName x <- xs ] ms = [ m | ImportedModule m <- xs ] - filterScope' pd pm = filterScope pd pm- -- Renaming- rename :: [Renaming] -> Scope -> Scope+ rename :: [C.Renaming] -> Scope -> Scope rename rho = mapScope_ (Map.mapKeys $ ren drho) (Map.mapKeys $ ren mrho)+ id where- mrho = [ (x, y) | Renaming { renFrom = ImportedModule x, renTo = y } <- rho ]- drho = [ (x, y) | Renaming { renFrom = ImportedName x, renTo = y } <- rho ]+ (drho, mrho) = partitionEithers $ for rho $ \case+ Renaming (ImportedName x) (ImportedName y) _ -> Left (x,y)+ Renaming (ImportedModule x) (ImportedModule y) _ -> Right (x,y)+ _ -> __IMPOSSIBLE__ ren r x = fromMaybe x $ lookup x r -- | Rename the abstract names in a scope. renameCanonicalNames :: Map A.QName A.QName -> Map A.ModuleName A.ModuleName -> Scope -> Scope-renameCanonicalNames renD renM = mapScope_ renameD renameM+renameCanonicalNames renD renM = mapScope_ renameD renameM (Set.map newName) where- renameD = Map.map $ map $ over lensAnameName $ \ x -> Map.findWithDefault x x renD- renameM = Map.map $ map $ over lensAmodName $ \ x -> Map.findWithDefault x x renM+ newName x = Map.findWithDefault x x renD+ newMod x = Map.findWithDefault x x renM + renameD = Map.map $ map $ over lensAnameName newName+ renameM = Map.map $ map $ over lensAmodName newMod+ -- | Remove private name space of a scope. -- -- Should be a right identity for 'exportedNamesInScope'. -- @exportedNamesInScope . restrictPrivate == exportedNamesInScope@. restrictPrivate :: Scope -> Scope-restrictPrivate s- = setNameSpace PrivateNS emptyNameSpace- $ s { scopeImports = Map.empty }+restrictPrivate s = setNameSpace PrivateNS emptyNameSpace+ $ s { scopeImports = Map.empty } +-- | Remove private things from the given module from a scope.+restrictLocalPrivate :: ModuleName -> Scope -> Scope+restrictLocalPrivate m = mapScope' PrivateNS (Map.mapMaybe rName) (Map.mapMaybe rMod)+ (Set.filter (not . (`isInModule` m)))+ where+ check p x = x <$ guard (p x)+ rName as = check (not . null) $ filter (not . (`isInModule` m) . anameName) as+ rMod as = check (not . null) $ filter (not . (`isSubModuleOf` m) . amodName) as+ -- | Remove names that can only be used qualified (when opening a scope) removeOnlyQualified :: Scope -> Scope removeOnlyQualified s = setNameSpace OnlyQualifiedNS emptyNameSpace s -- | Add an explanation to why things are in scope. inScopeBecause :: (WhyInScope -> WhyInScope) -> Scope -> Scope-inScopeBecause f = mapScope_ mapName mapMod+inScopeBecause f = mapScope_ mapName mapMod id where mapName = fmap . map $ \a -> a { anameLineage = f $ anameLineage a } mapMod = fmap . map $ \a -> a { amodLineage = f $ amodLineage a }@@ -559,6 +635,11 @@ reachable = (`elem` chase root) +publicNames :: ScopeInfo -> Set AbstractName+publicNames scope =+ Set.fromList $ concat $ Map.elems $+ exportedNamesInScope $ mergeScopes $ Map.elems $ publicModules scope+ everythingInScope :: ScopeInfo -> NameSpace everythingInScope scope = allThingsInScope $ mergeScopes $ (s0 :) $ map look $ scopeParents s0@@ -601,6 +682,36 @@ moduleScope :: A.ModuleName -> Scope moduleScope m = fromMaybe __IMPOSSIBLE__ $ Map.lookup m $ scopeModules scope +-- | Get all concrete names in scope. Includes bound variables.+concreteNamesInScope :: ScopeInfo -> Set C.QName+concreteNamesInScope scope =+ Set.unions [ build allNamesInScope root, imported, locals ]+ where+ current = moduleScope $ scopeCurrent scope+ root = mergeScopes $ current : map moduleScope (scopeParents current)++ locals = Set.fromList [ C.QName x | (x, _) <- scopeLocals scope ]++ imported = Set.unions+ [ qual c (build exportedNamesInScope $ moduleScope a)+ | (c, a) <- Map.toList $ scopeImports root ]+ qual c = Set.map (q c)+ where+ q (C.QName x) = C.Qual x+ q (C.Qual m x) = C.Qual m . q x++ build :: (forall a. InScope a => Scope -> ThingsInScope a) -> Scope -> Set C.QName+ build getNames s = Set.unions $+ (Set.fromList $ map C.QName $ Map.keys (getNames s :: ThingsInScope AbstractName)) :+ [ Set.mapMonotonic (\ y -> C.Qual x y) $+ build exportedNamesInScope $ moduleScope m+ | (x, mods) <- Map.toList (getNames s)+ , prettyShow x /= "_"+ , AbsModule m _ <- mods ]++ moduleScope :: A.ModuleName -> Scope+ moduleScope m = fromMaybe __IMPOSSIBLE__ $ Map.lookup m $ scopeModules scope+ -- | Look up a name in the scope scopeLookup :: InScope a => C.QName -> ScopeInfo -> [a] scopeLookup q scope = map fst $ scopeLookup' q scope@@ -637,10 +748,10 @@ -- that constructors can also be qualified by their datatype -- and projections by their record type. This feature is off -- if we just consider the modules:- -- m <- mods+ m <- mods -- The feature is on if we consider also the data and record types: -- trace ("mods ++ defs = " ++ show (mods ++ defs)) $ do- m <- nub $ mods ++ defs -- record types will appear both as a mod and a def+ -- m <- nub $ mods ++ defs -- record types will appear both as a mod and a def -- Get the scope of module m, if any, and remove its private definitions. let ss = Map.lookup m $ scopeModules scope ss' = restrictPrivate <$> ss@@ -680,23 +791,54 @@ -- * Inverse look-up -data AllowAmbiguousConstructors = AllowAmbiguousConstructors | NoAmbiguousConstructors+data AllowAmbiguousNames = AmbiguousAnything | AmbiguousConstructors | AmbiguousNothing deriving (Eq) +isNameInScope :: A.QName -> ScopeInfo -> Bool+isNameInScope q scope =+ billToPure [ Scoping, InverseScopeLookup ] $+ Set.member q (scopeInScope scope)+ -- | Find the concrete names that map (uniquely) to a given abstract name. -- Sort by length, shortest first. inverseScopeLookup :: Either A.ModuleName A.QName -> ScopeInfo -> [C.QName]-inverseScopeLookup = inverseScopeLookup' AllowAmbiguousConstructors+inverseScopeLookup = inverseScopeLookup' AmbiguousConstructors -inverseScopeLookup' :: AllowAmbiguousConstructors -> Either A.ModuleName A.QName -> ScopeInfo -> [C.QName]-inverseScopeLookup' ambCon name scope = billToPure [ Scoping , InverseScopeLookup ] $+inverseScopeLookup' :: AllowAmbiguousNames -> Either A.ModuleName A.QName -> ScopeInfo -> [C.QName]+inverseScopeLookup' amb name scope = billToPure [ Scoping , InverseScopeLookup ] $ -- trace ("importMap = " ++ show importMap) $ -- trace ("moduleMap = " ++ show moduleMap) $ case name of Left m -> best $ filter unambiguousModule $ findModule m- Right q -> best $ filter unambiguousName $ findName nameMap q+ Right q -> best $ filter unambiguousName $ findName q where+ findName x = fromMaybe [] $ Map.lookup x (scopeInverseName scope)+ findModule x = fromMaybe [] $ Map.lookup x (scopeInverseModule scope)++ len :: C.QName -> Int+ len (C.QName _) = 1+ len (C.Qual _ x) = 1 + len x++ best :: [C.QName] -> [C.QName]+ best = sortBy (compare `on` len)++ unique :: forall a . [a] -> Bool+ unique [] = __IMPOSSIBLE__+ unique [_] = True+ unique (_:_:_) = False++ unambiguousModule q = amb == AmbiguousAnything || unique (scopeLookup q scope :: [AbstractModule])+ unambiguousName q = amb == AmbiguousAnything || unique xs || amb == AmbiguousConstructors && all ((ConName ==) . anameKind) xs+ where xs = scopeLookup q scope++recomputeInverseScopeMaps :: ScopeInfo -> ScopeInfo+recomputeInverseScopeMaps scope = billToPure [ Scoping , InverseScopeLookup ] $+ scope { scopeInverseName = nameMap+ , scopeInverseModule = Map.fromList [ (x, findModule x) | x <- Map.keys moduleMap ++ Map.keys importMap ]+ , scopeInScope = Set.unions $ map (scopeSet . snd) scopes+ }+ where this = scopeCurrent scope current = this : scopeParents (moduleScope this) scopes = [ (m, restrict m s) | (m, s) <- Map.toList (scopeModules scope) ]@@ -707,12 +849,8 @@ restrict m s | m `elem` current = s | otherwise = restrictPrivate s - len :: C.QName -> Int- len (C.QName _) = 1- len (C.Qual _ x) = 1 + len x-- best :: [C.QName] -> [C.QName]- best = sortBy (compare `on` len) . filter (not . internalName)+ scopeSet s = Set.unions $ map (namespaceSet . snd) $ scopeNameSpaces s+ namespaceSet s = nsInScope s internalName :: C.QName -> Bool internalName C.QName{} = False@@ -721,15 +859,7 @@ -- Recognize fresh names created Parser.y intern (C.Name _ [ C.Id ('.' : '#' : _) ]) = True intern _ = False- unique :: forall a . [a] -> Bool- unique [] = __IMPOSSIBLE__- unique [_] = True- unique (_:_:_) = False - unambiguousModule q = unique (scopeLookup q scope :: [AbstractModule])- unambiguousName q = unique xs || AllowAmbiguousConstructors == ambCon && all ((ConName ==) . anameKind) xs- where xs = scopeLookup q scope- findName :: Ord a => Map a [(A.ModuleName, C.Name)] -> a -> [C.QName] findName table q = do (m, x) <- fromMaybe [] $ Map.lookup q table@@ -737,7 +867,9 @@ then return (C.QName x) else do y <- findModule m- return $ C.qualify y x+ let z = C.qualify y x+ guard $ not $ internalName z+ return z findModule :: A.ModuleName -> [C.QName] findModule q = findName moduleMap q ++@@ -758,14 +890,20 @@ (m, s) <- scopes (x, ms) <- Map.toList (allNamesInScope s) q <- anameName <$> ms- return (q, [(m, x)])+ if elem m current+ then return (q, [C.QName x])+ else do+ y <- findModule m+ let z = C.qualify y x+ guard $ not $ internalName z+ return (q, [z]) -- | Find the concrete names that map (uniquely) to a given abstract qualified name. -- Sort by length, shortest first. inverseScopeLookupName :: A.QName -> ScopeInfo -> [C.QName] inverseScopeLookupName x = inverseScopeLookup (Right x) -inverseScopeLookupName' :: AllowAmbiguousConstructors -> A.QName -> ScopeInfo -> [C.QName]+inverseScopeLookupName' :: AllowAmbiguousNames -> A.QName -> ScopeInfo -> [C.QName] inverseScopeLookupName' ambCon x = inverseScopeLookup' ambCon (Right x) -- | Find the concrete names that map (uniquely) to a given abstract module name.@@ -791,7 +929,7 @@ OnlyQualifiedNS -> "only-qualified" instance Show NameSpace where- show (NameSpace names mods) =+ show (NameSpace names mods _) = unlines $ blockOfLines "names" (map pr $ Map.toList names) ++ blockOfLines "modules" (map pr $ Map.toList mods)@@ -818,7 +956,7 @@ blockOfLines hd ss = hd : map (" " ++) ss instance Show ScopeInfo where- show (ScopeInfo this mods locals ctx) =+ show (ScopeInfo this mods locals ctx _ _ _) = unlines $ [ "ScopeInfo" , " current = " ++ show this
src/full/Agda/Syntax/Scope/Monad.hs view
@@ -1,5 +1,7 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE NondecreasingIndentation #-}+{-# LANGUAGE TupleSections #-} #if __GLASGOW_HASKELL__ >= 710 {-# LANGUAGE FlexibleContexts #-}@@ -11,11 +13,11 @@ module Agda.Syntax.Scope.Monad where import Prelude hiding (mapM)-import Control.Arrow ((***), first, second)+import Control.Arrow (first, second) import Control.Applicative-import Control.Monad hiding (mapM)-import Control.Monad.Writer hiding (mapM)-import Control.Monad.State hiding (mapM)+import Control.Monad hiding (mapM, forM)+import Control.Monad.Writer hiding (mapM, forM)+import Control.Monad.State hiding (mapM, forM) import Data.List as List import Data.Map (Map)@@ -23,7 +25,7 @@ import Data.Maybe import Data.Set (Set) import qualified Data.Set as Set-import Data.Traversable+import Data.Traversable hiding (for) import Agda.Syntax.Common import Agda.Syntax.Position@@ -39,11 +41,12 @@ import qualified Agda.Utils.AssocList as AssocList import Agda.Utils.Function+import Agda.Utils.Functor import Agda.Utils.List import Agda.Utils.Maybe import Agda.Utils.Null (unlessNull)-import Agda.Utils.Size import Agda.Utils.Pretty+import Agda.Utils.Size import Agda.Utils.Tuple #include "undefined.h"@@ -68,7 +71,7 @@ getCurrentModule = setRange noRange . scopeCurrent <$> getScope setCurrentModule :: A.ModuleName -> ScopeM ()-setCurrentModule m = modifyScopeInfo $ \s -> s { scopeCurrent = m }+setCurrentModule m = modifyScope $ \s -> s { scopeCurrent = m } withCurrentModule :: A.ModuleName -> ScopeM a -> ScopeM a withCurrentModule new action = do@@ -107,16 +110,13 @@ sm = emptyScope { scopeName = m , scopeParents = parents , scopeDatatypeModule = b }- -- Andreas, 2015-07-02: internall error if module is not new.- modifyScopes $ Map.insertWith __IMPOSSIBLE__ m sm---- | Apply a function to the scope info.-modifyScopeInfo :: (ScopeInfo -> ScopeInfo) -> ScopeM ()-modifyScopeInfo = modifyScope+ -- Andreas, 2015-07-02: internal error if module is not new.+ -- Ulf, 2016-02-15: It's not new if multiple imports (#1770).+ modifyScopes $ Map.insertWith const m sm -- | Apply a function to the scope map. modifyScopes :: (Map A.ModuleName Scope -> Map A.ModuleName Scope) -> ScopeM ()-modifyScopes f = modifyScopeInfo $ \s -> s { scopeModules = f $ scopeModules s }+modifyScopes f = modifyScope $ \s -> s { scopeModules = f $ scopeModules s } -- | Apply a function to the given scope. modifyNamedScope :: A.ModuleName -> (Scope -> Scope) -> ScopeM ()@@ -126,14 +126,17 @@ setNamedScope m s = modifyNamedScope m $ const s -- | Apply a monadic function to the top scope.-modifyNamedScopeM :: A.ModuleName -> (Scope -> ScopeM Scope) -> ScopeM ()-modifyNamedScopeM m f = setNamedScope m =<< f =<< getNamedScope m+modifyNamedScopeM :: A.ModuleName -> (Scope -> ScopeM (a, Scope)) -> ScopeM a+modifyNamedScopeM m f = do+ (a, s) <- f =<< getNamedScope m+ setNamedScope m s+ return a -- | Apply a function to the current scope. modifyCurrentScope :: (Scope -> Scope) -> ScopeM () modifyCurrentScope f = getCurrentModule >>= (`modifyNamedScope` f) -modifyCurrentScopeM :: (Scope -> ScopeM Scope) -> ScopeM ()+modifyCurrentScopeM :: (Scope -> ScopeM (a, Scope)) -> ScopeM a modifyCurrentScopeM f = getCurrentModule >>= (`modifyNamedScopeM` f) -- | Apply a function to the public or private name space.@@ -142,7 +145,7 @@ AssocList.updateAt acc f setContextPrecedence :: Precedence -> ScopeM ()-setContextPrecedence p = modifyScopeInfo $ \s -> s { scopePrecedence = p }+setContextPrecedence p = modifyScope_ $ \s -> s { scopePrecedence = p } getContextPrecedence :: ScopeM Precedence getContextPrecedence = scopePrecedence <$> getScope@@ -159,7 +162,7 @@ getLocalVars = scopeLocals <$> getScope modifyLocalVars :: (LocalVars -> LocalVars) -> ScopeM ()-modifyLocalVars = modifyScope . updateScopeLocals+modifyLocalVars = modifyScope_ . updateScopeLocals setLocalVars :: LocalVars -> ScopeM () setLocalVars vars = modifyLocalVars $ const vars@@ -189,9 +192,9 @@ , nameFixity = fx } --- | @freshAbstractName_ = freshAbstractName defaultFixity@+-- | @freshAbstractName_ = freshAbstractName noFixity'@ freshAbstractName_ :: C.Name -> ScopeM A.Name-freshAbstractName_ = freshAbstractName defaultFixity'+freshAbstractName_ = freshAbstractName noFixity' -- | Create a fresh abstract qualified name. freshAbstractQName :: Fixity' -> C.Name -> ScopeM A.QName@@ -300,7 +303,7 @@ -- | Bind a variable. The abstract name is supplied as the second argument. bindVariable :: C.Name -> A.Name -> ScopeM ()-bindVariable x y = modifyScope $ updateScopeLocals $ AssocList.insert x $ LocalVar y+bindVariable x y = modifyScope_ $ updateScopeLocals $ AssocList.insert x $ LocalVar y -- | Bind a defined name. Must not shadow anything. bindName :: Access -> KindOfName -> C.Name -> A.QName -> ScopeM ()@@ -341,7 +344,7 @@ -- | Clear the scope of any no names. stripNoNames :: ScopeM ()-stripNoNames = modifyScopes $ Map.map $ mapScope_ stripN stripN+stripNoNames = modifyScopes $ Map.map $ mapScope_ stripN stripN id where stripN = Map.filterWithKey $ const . not . isNoName @@ -351,23 +354,17 @@ -- | Create a new scope with the given name from an old scope. Renames -- public names in the old scope to match the new name and returns the -- renamings.------ Data and record types share a common abstract name with their module.--- This invariant needs to be preserved by @copyScope@, since constructors--- (fields) can be qualified by their data (record) type name (as an--- alternative to qualification by their module).--- (See Issue 836). copyScope :: C.QName -> A.ModuleName -> Scope -> ScopeM (Scope, (A.Ren A.ModuleName, A.Ren A.QName)) copyScope oldc new s = first (inScopeBecause $ Applied oldc) <$> runStateT (copy new s) ([], []) where- -- | A memoizing algorithm, the renamings serving as memo structure. copy :: A.ModuleName -> Scope -> StateT (A.Ren A.ModuleName, A.Ren A.QName) ScopeM Scope copy new s = do lift $ reportSLn "scope.copy" 20 $ "Copying scope " ++ show old ++ " to " ++ show new lift $ reportSLn "scope.copy" 50 $ show s s0 <- lift $ getNamedScope new- -- Delete private names, then copy names and modules.- s' <- mapScopeM_ copyD copyM $ setNameSpace PrivateNS emptyNameSpace s+ -- Delete private names, then copy names and modules. Recompute inScope+ -- set rather than trying to copy it.+ s' <- recomputeInScopeSets <$> mapScopeM_ copyD copyM return (setNameSpace PrivateNS emptyNameSpace s) -- Fix name and parent. return $ s' { scopeName = scopeName s0 , scopeParents = scopeParents s0@@ -398,15 +395,16 @@ findName x = lookup x <$> gets snd findMod x = lookup x <$> gets fst + refresh :: A.Name -> WSM A.Name+ refresh x = do+ i <- lift fresh+ return $ x { nameId = i }+ -- Change a binding M.x -> old.M'.y to M.x -> new.M'.y renName :: A.QName -> WSM A.QName renName x = do- -- Check whether we have already seen a module of the same name.- -- If yes, use its copy as @y@.- y <- ifJustM (findMod $ qnameToMName x) (return . mnameToQName) $ {- else -} do- -- First time, generate a fresh name for it.- i <- lift fresh- return $ A.qualify new' $ (qnameName x) { nameId = i }+ -- Generate a fresh name for the target.+ y <- A.qualify new' <$> refresh (qnameName x) lift $ reportSLn "scope.copy" 50 $ " Copying " ++ show x ++ " to " ++ show y -- Andreas, 2015-08-11 Issue 1619: -- Names copied by a module macro should get the module macro's@@ -425,19 +423,22 @@ -- If we have already copied this module, return the copy. ifJustM (findMod x) return $ {- else -} do - -- Check whether we have seen it already, yet as name.- -- If yes, use its copy as @y@.- y <- ifJustM (findName $ mnameToQName x) (return . qnameToMName) $ {- else -} do+ y <- do -- Andreas, Jesper, 2015-07-02: Issue 1597 -- Don't blindly drop a prefix of length of the old qualifier. -- If things are imported by open public they do not have the old qualifier -- as prefix. Those need just to be linked, not copied. -- return $ A.mnameFromList $ (newL ++) $ drop (size old) $ A.mnameToList x- caseMaybe (maybePrefixMatch (A.mnameToList old) (A.mnameToList x)) (return x) $ \ suffix -> do- return $ A.mnameFromList $ newL ++ suffix+ -- caseMaybe (maybePrefixMatch (A.mnameToList old) (A.mnameToList x)) (return x) $ \ suffix -> do+ -- return $ A.mnameFromList $ newL ++ suffix+ -- Ulf, 2016-02-22: #1726+ -- We still need to copy modules from 'open public'. Same as in renName.+ y <- refresh (last $ A.mnameToList x)+ return $ A.mnameFromList $ newL ++ [y] -- Andreas, Jesper, 2015-07-02: Issue 1597 -- Don't copy a module over itself, it will just be emptied of its contents. if (x == y) then return x else do+ lift $ reportSLn "scope.copy" 50 $ " Copying module " ++ show x ++ " to " ++ show y addMod x y -- We need to copy the contents of included modules recursively lift $ createModule False y@@ -448,48 +449,176 @@ -- | Apply an import directive and check that all the names mentioned actually -- exist.-applyImportDirectiveM :: C.QName -> ImportDirective -> Scope -> ScopeM Scope-applyImportDirectiveM m dir scope = do- let xs = filter doesntExist names- reportSLn "scope.import.apply" 20 $ "non existing names: " ++ show xs- unless (null xs) $ typeError $ ModuleDoesntExport m xs+applyImportDirectiveM :: C.QName -> C.ImportDirective -> Scope -> ScopeM (A.ImportDirective, Scope)+applyImportDirectiveM m dir@ImportDirective{ impRenaming = ren, using = u, hiding = h } scope = do+ -- Translate exported names to abstract syntax.+ -- Raise error if unsuccessful.+ caseMaybe mNamesA doesntExport $ \ namesA -> do + let extraModules =+ [ x | ImportedName x <- names,+ let mx = ImportedModule x,+ not $ doesntExist mx,+ notElem mx names ]+ dir' = addExtraModules extraModules dir++ dir' <- sanityCheck dir'++ -- Check for duplicate imports in a single import directive.+ -- @dup@ : To be imported names that are mentioned more than once. let dup = targetNames \\ nub targetNames unless (null dup) $ typeError $ DuplicateImports m dup- return $ applyImportDirective dir scope + -- Apply the import directive.+ let scope' = applyImportDirective dir' scope++ -- Look up the defined names in the new scope.+ let namesInScope' = (allNamesInScope scope' :: ThingsInScope AbstractName)+ let modulesInScope' = (allNamesInScope scope' :: ThingsInScope AbstractModule)+ let look x = head . Map.findWithDefault __IMPOSSIBLE__ x+ -- We set the ranges to the ranges of the concrete names in order to get+ -- highlighting for the names in the import directive.+ let definedA = for definedNames $ \case+ ImportedName x -> ImportedName . (x,) . setRange (getRange x) . anameName $ look x namesInScope'+ ImportedModule x -> ImportedModule . (x,) . setRange (getRange x) . amodName $ look x modulesInScope'++ let adir = mapImportDir namesA definedA dir+ return (adir, scope') -- TODO Issue 1714: adir+ where+ -- | Names in the @using@ directive.+ usingNames :: [ImportedName]+ usingNames = case u of+ Using xs -> xs+ UseEverything -> []++ -- | All names from the imported module mentioned in the import directive. names :: [ImportedName]- names = map renFrom (renaming dir) ++ case usingOrHiding dir of- Using xs -> xs- Hiding xs -> xs+ names = map renFrom ren ++ h ++ usingNames + -- | Names defined by the import (targets of renaming).+ definedNames :: [ImportedName]+ definedNames = map renTo ren++ -- | Names to be in scope after import. targetNames :: [ImportedName]- targetNames = map renName (renaming dir) ++ case usingOrHiding dir of- Using xs -> xs- Hiding{} -> []+ targetNames = definedNames ++ usingNames++ sanityCheck dir =+ case (using dir, hiding dir) of+ (Using xs, ys) -> do+ let uselessHiding = [ x | x@ImportedName{} <- ys ] +++ [ x | x@(ImportedModule y) <- ys, ImportedName y `notElem` names ]+ unless (null uselessHiding) $ typeError $ GenericError $ "Hiding " ++ intercalate ", " (map show uselessHiding)+ ++ " has no effect"+ return dir{ hiding = [] }+ _ -> return dir++ addExtraModules :: [C.Name] -> C.ImportDirective -> C.ImportDirective+ addExtraModules extra dir =+ dir{ using =+ case using dir of+ Using xs -> Using $ concatMap addExtra xs+ UseEverything -> UseEverything+ , hiding = concatMap addExtra (hiding dir)+ , impRenaming = concatMap extraRenaming (impRenaming dir)+ } where- renName r = (renFrom r) { importedName = renTo r }+ addExtra f@(ImportedName y) | elem y extra = [f, ImportedModule y]+ addExtra m = [m] - doesntExist (ImportedName x) = isNothing $- Map.lookup x (allNamesInScope scope :: ThingsInScope AbstractName)- doesntExist (ImportedModule x) = isNothing $- Map.lookup x (allNamesInScope scope :: ThingsInScope AbstractModule)+ extraRenaming r@(Renaming from to rng) =+ case (from, to) of+ (ImportedName y, ImportedName z) | elem y extra ->+ [r, Renaming (ImportedModule y) (ImportedModule z) rng]+ _ -> [r] + -- | Names and modules (abstract) in scope before the import.+ namesInScope = (allNamesInScope scope :: ThingsInScope AbstractName)+ modulesInScope = (allNamesInScope scope :: ThingsInScope AbstractModule)++ -- | AST versions of the concrete names from the imported module.+ -- @Nothing@ is one of the names is not exported.+ mNamesA = forM names $ \case+ ImportedName x -> ImportedName . (x,) . setRange (getRange x) . anameName . head <$> Map.lookup x namesInScope+ ImportedModule x -> ImportedModule . (x,) . setRange (getRange x) . amodName . head <$> Map.lookup x modulesInScope++ head = headWithDefault __IMPOSSIBLE__++ -- For the sake of the error message, we (re)compute the list of unresolved names.+ doesntExport = do+ -- Names @xs@ mentioned in the import directive @dir@ but not in the @scope@.+ let xs = filter doesntExist names+ reportSLn "scope.import.apply" 20 $ "non existing names: " ++ show xs+ typeError $ ModuleDoesntExport m xs++ doesntExist (ImportedName x) = isNothing $ Map.lookup x namesInScope+ doesntExist (ImportedModule x) = isNothing $ Map.lookup x modulesInScope++-- | A finite map for @ImportedName@s.+lookupImportedName+ :: (Eq a, Eq b)+ => ImportedName' a b+ -> [ImportedName' (a,c) (b,d)]+ -> ImportedName' c d+lookupImportedName (ImportedName x) = loop where+ loop [] = __IMPOSSIBLE__+ loop (ImportedName (y,z) : _) | x == y = ImportedName z+ loop (_ : ns) = loop ns+lookupImportedName (ImportedModule x) = loop where+ loop [] = __IMPOSSIBLE__+ loop (ImportedModule (y,z) : _) | x == y = ImportedModule z+ loop (_ : ns) = loop ns++-- | Translation of @ImportDirective@.+mapImportDir+ :: (Eq a, Eq b)+ => [ImportedName' (a,c) (b,d)] -- ^ Translation of imported names.+ -> [ImportedName' (a,c) (b,d)] -- ^ Translation of names defined by this import.+ -> ImportDirective' a b+ -> ImportDirective' c d+mapImportDir src tgt (ImportDirective r u h ren open) =+ ImportDirective r+ (mapUsing src u)+ (map (`lookupImportedName` src) h)+ (map (mapRenaming src tgt) ren) open++-- | Translation of @Using or Hiding@.+mapUsing+ :: (Eq a, Eq b)+ => [ImportedName' (a,c) (b,d)] -- ^ Translation of names in @using@ or @hiding@ list.+ -> Using' a b+ -> Using' c d+mapUsing src UseEverything = UseEverything+mapUsing src (Using xs) = Using $ map (`lookupImportedName` src) xs++-- | Translation of @Renaming@.+mapRenaming+ :: (Eq a, Eq b)+ => [ImportedName' (a,c) (b,d)] -- ^ Translation of 'renFrom' names.+ -> [ImportedName' (a,c) (b,d)] -- ^ Translation of 'rento' names.+ -> Renaming' a b+ -> Renaming' c d+mapRenaming src tgt (Renaming from to r) =+ Renaming (lookupImportedName from src) (lookupImportedName to tgt) r+ -- | Open a module.-openModule_ :: C.QName -> ImportDirective -> ScopeM ()+openModule_ :: C.QName -> C.ImportDirective -> ScopeM A.ImportDirective openModule_ cm dir = do current <- getCurrentModule m <- amodName <$> resolveModule cm let acc | not (publicOpen dir) = PrivateNS | m `isSubModuleOf` current = PublicNS | otherwise = ImportedNS+ -- Get the scope exported by module to be opened.- s <- setScopeAccess acc <$>- (applyImportDirectiveM cm dir . inScopeBecause (Opened cm) . removeOnlyQualified . restrictPrivate =<< getNamedScope m)+ (adir, s') <- applyImportDirectiveM cm dir . inScopeBecause (Opened cm) . removeOnlyQualified . restrictPrivate =<< getNamedScope m+ let s = setScopeAccess acc s' let ns = scopeNameSpace acc s checkForClashes ns modifyCurrentScope (`mergeScope` s)++ -- Importing names might shadow existing locals. verboseS "scope.locals" 10 $ do locals <- mapMaybe (\ (c,x) -> c <$ notShadowedLocal x) <$> getLocalVars let newdefs = Map.keys $ nsNames ns@@ -500,6 +629,9 @@ case Map.lookup c $ nsNames ns of Nothing -> x Just ys -> shadowLocal ys x++ return adir+ where -- Only checks for clashes that would lead to the same -- name being exported twice from the module.
src/full/Agda/Syntax/Translation/AbstractToConcrete.hs view
@@ -1,11 +1,16 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE PatternGuards #-}-{-# LANGUAGE TupleSections #-}-{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE UndecidableInstances #-} +#if __GLASGOW_HASKELL__ >= 710+{-# LANGUAGE FlexibleContexts #-}+#endif+ -- {-# OPTIONS -fwarn-unused-binds #-} {-| The translation of abstract syntax to concrete syntax has two purposes.@@ -33,16 +38,15 @@ import Control.Applicative hiding (empty) import Control.Monad.Reader -import Data.List as List hiding (null) import qualified Data.Map as Map import Data.Maybe import Data.Monoid import Data.Set (Set) import qualified Data.Set as Set import Data.Traversable (traverse)+import Data.Void -import Agda.Syntax.Common hiding (Arg, Dom, NamedArg)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Position import Agda.Syntax.Literal import Agda.Syntax.Info@@ -58,7 +62,9 @@ import Agda.TypeChecking.Monad.Options import qualified Agda.Utils.AssocList as AssocList+import Agda.Utils.Either import Agda.Utils.Functor+import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Null import Agda.Utils.Tuple@@ -139,7 +145,7 @@ Just y -> return y Nothing -> return $ nameConcrete x -lookupQName :: AllowAmbiguousConstructors -> A.QName -> AbsToCon C.QName+lookupQName :: AllowAmbiguousNames -> A.QName -> AbsToCon C.QName lookupQName ambCon x = do ys <- inverseScopeLookupName' ambCon x <$> asks currentScope lift $ reportSLn "scope.inverse" 100 $@@ -217,7 +223,7 @@ withInfixDecl i x m = do ds <- m return $ fixDecl ++ synDecl ++ ds- where fixDecl = [C.Infix (theFixity $ defFixity i) [x] | theFixity (defFixity i) /= defaultFixity]+ where fixDecl = [C.Infix (theFixity $ defFixity i) [x] | theFixity (defFixity i) /= noFixity] synDecl = [C.Syntax x (theNotation (defFixity i))] {- UNUSED@@ -287,6 +293,15 @@ toConcrete = mapM toConcrete bindToConcrete = thread bindToConcrete +instance (ToConcrete a1 c1, ToConcrete a2 c2) => ToConcrete (Either a1 a2) (Either c1 c2) where+ toConcrete = traverseEither toConcrete toConcrete+ bindToConcrete (Left x) ret =+ bindToConcrete x $ \x ->+ ret (Left x)+ bindToConcrete (Right y) ret =+ bindToConcrete y $ \y ->+ ret (Right y)+ instance (ToConcrete a1 c1, ToConcrete a2 c2) => ToConcrete (a1,a2) (c1,c2) where toConcrete (x,y) = liftM2 (,) (toConcrete x) (toConcrete y) bindToConcrete (x,y) ret =@@ -304,19 +319,12 @@ where reorder (x,(y,z)) = (x,y,z) -instance ToConcrete (Common.ArgInfo ac) C.ArgInfo where- toConcrete info = -- do cs <- mapM toConcrete $ argInfoColors info- return $ info { argInfoColors = [] } -- TODO: zapping ignoring colours--instance ToConcrete a c => ToConcrete (Common.Arg ac a) (C.Arg c) where- toConcrete (Common.Arg info x) = Common.Arg- <$> toConcrete info- <*> toConcreteHiding info x+instance ToConcrete a c => ToConcrete (Arg a) (Arg c) where+ toConcrete (Arg i a) = Arg i <$> toConcreteHiding i a - bindToConcrete (Common.Arg info x) ret = do- info <- toConcrete info+ bindToConcrete (Arg info x) ret = bindToConcreteCtx (hiddenArgumentCtx $ getHiding info) x $- ret . Common.Arg info+ ret . Arg info instance ToConcrete a c => ToConcrete (WithHiding a) (WithHiding c) where toConcrete (WithHiding h a) = WithHiding h <$> toConcreteHiding h a@@ -339,7 +347,7 @@ bindToConcrete x = bindName x instance ToConcrete A.QName C.QName where- toConcrete = lookupQName AllowAmbiguousConstructors+ toConcrete = lookupQName AmbiguousConstructors instance ToConcrete A.ModuleName C.QName where toConcrete = lookupModule@@ -350,13 +358,14 @@ toConcrete (Var x) = Ident . C.QName <$> toConcrete x toConcrete (Def x) = Ident <$> toConcrete x toConcrete (Proj x) = Ident <$> toConcrete x+ toConcrete (A.Macro x) = Ident <$> toConcrete x toConcrete (Con (AmbQ (x:_))) = Ident <$> toConcrete x toConcrete (Con (AmbQ [])) = __IMPOSSIBLE__ -- for names we have to use the name from the info, since the abstract -- name has been resolved to a fully qualified name (except for -- variables) toConcrete (A.Lit (LitQName r x)) = do- x <- lookupQName NoAmbiguousConstructors x+ x <- lookupQName AmbiguousNothing x bracket appBrackets $ return $ C.App r (C.Quote r) (defaultNamedArg $ C.Ident x) toConcrete (A.Lit l) = return $ C.Lit l@@ -423,12 +432,12 @@ removeApp p = do lift $ reportSLn "extendedlambda" 50 $ "abstractToConcrete removeApp p = " ++ show p return p -- __IMPOSSIBLE__ -- Andreas, this is actually not impossible, my strictification exposed this sleeping bug- let decl2clause (C.FunClause lhs rhs wh) = do+ let decl2clause (C.FunClause lhs rhs wh ca) = do let p = lhsOriginalPattern lhs lift $ reportSLn "extendedlambda" 50 $ "abstractToConcrete extended lambda pattern p = " ++ show p p' <- removeApp p lift $ reportSLn "extendedlambda" 50 $ "abstractToConcrete extended lambda pattern p' = " ++ show p'- return (lhs{ lhsOriginalPattern = p' }, rhs, wh)+ return (lhs{ lhsOriginalPattern = p' }, rhs, wh, ca) decl2clause _ = __IMPOSSIBLE__ C.ExtendedLam (getRange i) <$> mapM decl2clause decls toConcrete (A.Pi _ [] e) = toConcrete e@@ -454,7 +463,7 @@ NonStrict -> addDot a (addDot a e) _ -> e addDot a e = Dot (getRange a) e- mkArg (Common.Arg info e) = case getHiding info of+ mkArg (Arg info e) = case getHiding info of Hidden -> HiddenArg (getRange e) (unnamed e) Instance -> InstanceArg (getRange e) (unnamed e) NotHidden -> e@@ -471,16 +480,11 @@ toConcrete (A.Rec i fs) = bracket appBrackets $ do- let (xs, es) = unzip fs- es <- toConcreteTop es- return $ C.Rec (getRange i) $ zip xs es+ C.Rec (getRange i) . map (fmap (\x -> ModuleAssignment x [] defaultImportDir)) <$> toConcreteTop fs toConcrete (A.RecUpdate i e fs) = bracket appBrackets $ do- let (xs, es) = unzip fs- e <- toConcrete e- es <- toConcreteTop es- return $ C.RecUpdate (getRange i) e $ zip xs es+ C.RecUpdate (getRange i) <$> toConcrete e <*> toConcreteTop fs toConcrete (A.ETel tel) = do tel <- concat <$> toConcrete tel@@ -493,38 +497,38 @@ bindToConcrete x $ \ x' -> do e' <- toConcrete e return $ C.QuoteGoal (getRange i) x' e'- toConcrete (A.QuoteContext i x e) =- bracket lamBrackets $- bindToConcrete x $ \ x' -> do- e' <- toConcrete e- return $ C.QuoteContext (getRange i) x' e'+ toConcrete (A.QuoteContext i) = return $ C.QuoteContext (getRange i) toConcrete (A.Quote i) = return $ C.Quote (getRange i) toConcrete (A.QuoteTerm i) = return $ C.QuoteTerm (getRange i) toConcrete (A.Unquote i) = return $ C.Unquote (getRange i)+ toConcrete (A.Tactic i e xs ys) = do+ e' <- toConcrete e+ xs' <- toConcrete xs+ ys' <- toConcrete ys+ let r = getRange i+ rawtac = foldl (C.App r) e' xs'+ return $ C.Tactic (getRange i) rawtac (map namedArg ys') -- Andreas, 2012-04-02: TODO! print DontCare as irrAxiom -- Andreas, 2010-10-05 print irrelevant things as ordinary things toConcrete (A.DontCare e) = C.Dot r . C.Paren r <$> toConcrete e where r = getRange e--- toConcrete (A.DontCare e) = C.DontCare <$> toConcreteTop e-{-- -- Andreas, 2010-09-21 abuse C.Underscore to print irrelevant things- toConcrete (A.DontCare) = return $ C.Underscore noRange Nothing--} toConcrete (A.PatternSyn n) = C.Ident <$> toConcrete n makeDomainFree :: A.LamBinding -> A.LamBinding-makeDomainFree b@(A.DomainFull (A.TypedBindings r (Common.Arg info (A.TBind _ [WithHiding h x] t)))) =+makeDomainFree b@(A.DomainFull (A.TypedBindings r (Arg info (A.TBind _ [WithHiding h x] t)))) = case unScope t of A.Underscore MetaInfo{metaNumber = Nothing} -> A.DomainFree (mapHiding (mappend h) info) x _ -> b makeDomainFree b = b +instance ToConcrete a c => ToConcrete (FieldAssignment' a) (FieldAssignment' c) where+ toConcrete = traverse toConcrete+ -- Binder instances ------------------------------------------------------- instance ToConcrete A.LamBinding [C.LamBinding] where- bindToConcrete (A.DomainFree info x) ret = do info <- toConcrete info- bindToConcrete x $ ret . (:[]) . C.DomainFree info . mkBoundName_+ bindToConcrete (A.DomainFree info x) ret = bindToConcrete x $ ret . (:[]) . C.DomainFree info . mkBoundName_ bindToConcrete (A.DomainFull b) ret = bindToConcrete b $ ret . map C.DomainFull instance ToConcrete A.TypedBindings [C.TypedBindings] where@@ -532,7 +536,7 @@ bindToConcrete bs $ \cbs -> ret (map (C.TypedBindings r) $ recoverLabels bs cbs) where- recoverLabels :: A.Arg A.TypedBinding -> C.Arg C.TypedBinding -> [C.Arg C.TypedBinding]+ recoverLabels :: Arg A.TypedBinding -> Arg C.TypedBinding -> [Arg C.TypedBinding] recoverLabels b cb | getHiding b == NotHidden = [cb] -- We don't care about labels for explicit args | otherwise = traverse (recover (unArg b)) cb@@ -564,17 +568,16 @@ bindToConcrete (LetBind i info x t e) ret = bindToConcrete x $ \x -> do (t,(e, [], [], [])) <- toConcrete (t, A.RHS e)- info <- toConcrete info ret [ C.TypeSig info x t , C.FunClause (C.LHS (C.IdentP $ C.QName x) [] [] [])- e C.NoWhere+ e C.NoWhere False ] -- TODO: bind variables bindToConcrete (LetPatBind i p e) ret = do p <- toConcrete p e <- toConcrete e- ret [ C.FunClause (C.LHS p [] [] []) (C.RHS e) NoWhere ]- bindToConcrete (LetApply i x modapp _ _) ret = do+ ret [ C.FunClause (C.LHS p [] [] []) (C.RHS e) NoWhere False ]+ bindToConcrete (LetApply i x modapp _ _ _) ret = do x' <- unqualify <$> toConcrete x modapp <- toConcrete modapp let r = getRange modapp@@ -583,11 +586,14 @@ -- This is no use since toAbstract LetDefs is in localToAbstract. local (openModule' x dir id) $ ret [ C.ModuleMacro (getRange i) x' modapp open dir ]- bindToConcrete (LetOpen i x) ret = do+ bindToConcrete (LetOpen i x _) ret = do x' <- toConcrete x let dir = maybe defaultImportDir id $ minfoDirective i local (openModule' x dir restrictPrivate) $ ret [ C.Open (getRange i) x' dir ]+ bindToConcrete (LetDeclaredVariable _) ret =+ -- Note that the range of the declaration site is dropped.+ ret [] data AsWhereDecls = AsWhereDecls [A.Declaration] @@ -602,14 +608,14 @@ ret . AnyWhere =<< declsToConcrete ds mergeSigAndDef :: [C.Declaration] -> [C.Declaration]-mergeSigAndDef (C.RecordSig _ x bs e : C.Record r y ind c _ Nothing fs : ds)- | x == y = C.Record r y ind c bs (Just e) fs : mergeSigAndDef ds+mergeSigAndDef (C.RecordSig _ x bs e : C.Record r y ind eta c _ Nothing fs : ds)+ | x == y = C.Record r y ind eta c bs (Just e) fs : mergeSigAndDef ds mergeSigAndDef (C.DataSig _ _ x bs e : C.Data r i y _ Nothing cs : ds) | x == y = C.Data r i y bs (Just e) cs : mergeSigAndDef ds mergeSigAndDef (d : ds) = d : mergeSigAndDef ds mergeSigAndDef [] = [] -openModule' :: A.ModuleName -> ImportDirective -> (Scope -> Scope) -> Env -> Env+openModule' :: A.ModuleName -> C.ImportDirective -> (Scope -> Scope) -> Env -> Env openModule' x dir restrict env = env{currentScope = sInfo{scopeModules = mods'}} where sInfo = currentScope env amod = scopeCurrent sInfo@@ -649,37 +655,23 @@ x' <- toConcrete (qnameName x) return $ Just x' -{- UNUSED--- | Helper function used in instance @ToConcrete Definition@.-telToTypedBindingss :: [C.LamBinding] -> [C.TypedBindings]-telToTypedBindingss = map lamBindingToTypedBindings where-- lamBindingToTypedBindings :: C.LamBinding -> C.TypedBindings- lamBindingToTypedBindings b =- case b of- C.DomainFull t -> t- C.DomainFree info n -> C.TypedBindings noRange $- Common.Arg info $ C.TBind noRange [n] $ C.Underscore noRange Nothing--}- instance ToConcrete (Constr A.Constructor) C.Declaration where toConcrete (Constr (A.ScopedDecl scope [d])) = withScope scope $ toConcrete (Constr d) toConcrete (Constr (A.Axiom _ i info x t)) = do x' <- unsafeQNameToName <$> toConcrete x t' <- toConcreteTop t- info <- toConcrete info return $ C.TypeSig info x' t' toConcrete (Constr d) = head <$> toConcrete d instance ToConcrete a C.LHS => ToConcrete (A.Clause' a) [C.Declaration] where- toConcrete (A.Clause lhs rhs wh) =+ toConcrete (A.Clause lhs rhs wh catchall) = bindToConcrete lhs $ \lhs -> case lhs of C.LHS p wps _ _ -> do bindToConcrete (AsWhereDecls wh) $ \wh' -> do (rhs', eqs, with, wcs) <- toConcreteTop rhs- return $ FunClause (C.LHS p wps eqs with) rhs' wh' : wcs+ return $ FunClause (C.LHS p wps eqs with) rhs' wh' catchall : wcs C.Ellipsis {} -> __IMPOSSIBLE__ -- TODO: Is the case above impossible? Previously there was -- no code for it, but GHC 7's completeness checker spotted@@ -706,7 +698,6 @@ withAbstractPrivate i $ withInfixDecl i x' $ do t' <- toConcreteTop t- info <- toConcrete info return [C.Postulate (getRange i) [C.TypeSig info x' t']] toConcrete (A.Field i x t) = do@@ -714,7 +705,7 @@ withAbstractPrivate i $ withInfixDecl i x' $ do t' <- toConcreteTop t- return [C.Field x' t']+ return [C.Field (defInstance i) x' t'] toConcrete (A.Primitive i x t) = do x' <- unsafeQNameToName <$> toConcrete x@@ -747,11 +738,11 @@ t' <- toConcreteTop t return [ C.RecordSig (getRange i) x' (map C.DomainFull $ concat tel') t' ] - toConcrete (A.RecDef i x ind c bs t cs) =+ toConcrete (A.RecDef i x ind eta c bs t cs) = withAbstractPrivate i $ bindToConcrete (map makeDomainFree bs) $ \tel' -> do (x',cs') <- (unsafeQNameToName -*- id) <$> toConcrete (x, map Constr cs)- return [ C.Record (getRange i) x' ind Nothing (concat tel') Nothing cs' ]+ return [ C.Record (getRange i) x' ind eta Nothing (concat tel') Nothing cs' ] toConcrete (A.Mutual i ds) = declsToConcrete ds @@ -761,7 +752,7 @@ ds <- declsToConcrete ds return [ C.Module (getRange i) x (concat tel) ds ] - toConcrete (A.Apply i x modapp _ _) = do+ toConcrete (A.Apply i x modapp _ _ _) = do x <- unsafeQNameToName <$> toConcrete x modapp <- toConcrete modapp let r = getRange modapp@@ -769,7 +760,7 @@ dir = fromMaybe defaultImportDir{ importDirRange = r } $ minfoDirective i return [ C.ModuleMacro (getRange i) x modapp open dir ] - toConcrete (A.Import i x) = do+ toConcrete (A.Import i x _) = do x <- toConcrete x let open = maybe DontOpen id $ minfoOpenShort i dir = maybe defaultImportDir id $ minfoDirective i@@ -779,19 +770,27 @@ p <- toConcrete $ RangeAndPragma (getRange i) p return [C.Pragma p] - toConcrete (A.Open i x) = do+ toConcrete (A.Open i x _) = do x <- toConcrete x return [C.Open (getRange i) x defaultImportDir] toConcrete (A.PatternSynDef x xs p) = do C.QName x <- toConcrete x- bindToConcrete xs $ \xs -> (:[]) . C.PatternSyn (getRange x) x xs <$> toConcrete p+ bindToConcrete xs $ \xs -> (:[]) . C.PatternSyn (getRange x) x xs <$> toConcrete (vacuous p :: A.Pattern) - toConcrete (A.UnquoteDecl _ i x e) = do- C.QName x <- toConcrete x- (:[]) . C.UnquoteDecl (getRange i) x <$> toConcrete e+ toConcrete (A.UnquoteDecl _ i xs e) = do+ let unqual (C.QName x) = return x+ unqual _ = __IMPOSSIBLE__+ xs <- mapM (unqual <=< toConcrete) xs+ (:[]) . C.UnquoteDecl (getRange i) xs <$> toConcrete e + toConcrete (A.UnquoteDef i xs e) = do+ let unqual (C.QName x) = return x+ unqual _ = __IMPOSSIBLE__+ xs <- mapM (unqual <=< toConcrete) xs+ (:[]) . C.UnquoteDef (getRange i) xs <$> toConcrete e + data RangeAndPragma = RangeAndPragma Range A.Pragma instance ToConcrete RangeAndPragma C.Pragma where@@ -807,6 +806,9 @@ A.CompiledDataPragma x hs hcs -> do x <- toConcrete x return $ C.CompiledDataPragma r x hs hcs+ A.CompiledDeclareDataPragma x hs -> do+ x <- toConcrete x+ return $ C.CompiledDeclareDataPragma r x hs A.CompiledPragma x hs -> do x <- toConcrete x return $ C.CompiledPragma r x hs@@ -819,28 +821,27 @@ A.CompiledJSPragma x e -> do x <- toConcrete x return $ C.CompiledJSPragma r x e+ A.CompiledUHCPragma x cr -> do+ x <- toConcrete x+ return $ C.CompiledUHCPragma r x cr+ A.CompiledDataUHCPragma x crd crcs -> do+ x <- toConcrete x+ return $ C.CompiledDataUHCPragma r x crd crcs+ A.NoSmashingPragma x -> C.NoSmashingPragma r <$> toConcrete x A.StaticPragma x -> C.StaticPragma r <$> toConcrete x- A.EtaPragma x -> C.EtaPragma r <$> toConcrete x+ A.InlinePragma x -> C.InlinePragma r <$> toConcrete x+ A.DisplayPragma f ps rhs ->+ C.DisplayPragma r <$> toConcrete (A.DefP (PatRange noRange) f ps) <*> toConcrete rhs -- Left hand sides -------------------------------------------------------- -noImplicitArgs :: A.Patterns -> A.Patterns-noImplicitArgs = filter (noImplicit . namedArg)--noImplicitPats :: [A.Pattern] -> [A.Pattern]-noImplicitPats = filter noImplicit--noImplicit :: A.Pattern -> Bool-noImplicit (A.WildP _) = False-noImplicit _ = True- instance ToConcrete A.SpineLHS C.LHS where bindToConcrete lhs = bindToConcrete (A.spineToLhs lhs :: A.LHS) instance ToConcrete A.LHS C.LHS where bindToConcrete (A.LHS i lhscore wps) ret = do bindToConcreteCtx TopCtx lhscore $ \lhs ->- bindToConcreteCtx TopCtx (noImplicitPats wps) $ \wps ->+ bindToConcreteCtx TopCtx wps $ \wps -> ret $ C.LHS lhs wps [] [] instance ToConcrete A.LHSCore C.Pattern where@@ -852,46 +853,71 @@ -- TODO: bind variables properly instance ToConcrete A.Pattern C.Pattern where- toConcrete (VarP x) = toConcrete x >>= return . IdentP . C.QName- toConcrete (A.WildP i) =+ toConcrete p =+ case p of+ A.VarP x ->+ C.IdentP . C.QName <$> toConcrete x++ A.WildP i -> return $ C.WildP (getRange i)- toConcrete (ConP i (AmbQ []) args) = __IMPOSSIBLE__- toConcrete p@(ConP i (AmbQ (x:_)) args) =- tryToRecoverOpAppP p $- bracketP_ (appBrackets' args) $ do- x <- toConcrete x- args <- toConcreteCtx ArgumentCtx (noImplicitArgs args)- return $ foldl AppP (C.IdentP x) args- toConcrete p@(DefP i x args) =- tryToRecoverOpAppP p $- bracketP_ (appBrackets' args) $ do- x <- toConcrete x- args <- toConcreteCtx ArgumentCtx (noImplicitArgs args)- return $ foldl AppP (C.IdentP x) args- toConcrete (A.AsP i x p) = do- (x, p) <- toConcreteCtx ArgumentCtx (x,p)- return $ C.AsP (getRange i) x p- toConcrete (A.AbsurdP i) = return $ C.AbsurdP (getRange i)- toConcrete (A.LitP (LitQName r x)) = do- x <- lookupQName NoAmbiguousConstructors x- bracketP_ appBrackets $ return $ AppP (C.QuoteP r) (defaultNamedArg (C.IdentP x))- toConcrete (A.LitP l) = return $ C.LitP l- toConcrete (A.DotP i e) = do- e <- toConcreteCtx DotPatternCtx e- return $ C.DotP (getRange i) e- toConcrete (A.PatternSynP i n _) = IdentP <$> toConcrete n + A.ConP i (AmbQ []) args -> __IMPOSSIBLE__+ p@(A.ConP i xs@(AmbQ (x:_)) args) -> tryOp x (A.ConP i xs) args+ p@(A.DefP i x args) -> tryOp x (A.DefP i x) args + A.AsP i x p -> do+ (x, p) <- toConcreteCtx ArgumentCtx (x,p)+ return $ C.AsP (getRange i) x p++ A.AbsurdP i ->+ return $ C.AbsurdP (getRange i)++ A.LitP (LitQName r x) -> do+ x <- lookupQName AmbiguousNothing x+ bracketP_ appBrackets $ return $ C.AppP (C.QuoteP r) (defaultNamedArg (C.IdentP x))+ A.LitP l ->+ return $ C.LitP l++ A.DotP i e -> do+ c <- toConcreteCtx DotPatternCtx e+ case c of+ -- Andreas, 2016-02-04 print ._ pattern as _ pattern,+ -- following the fusing of WildP and ImplicitP.+ C.Underscore{} -> return $ C.WildP $ getRange i+ _ -> return $ C.DotP (getRange i) c++ A.PatternSynP i n _ ->+ C.IdentP <$> toConcrete n++ A.RecP i as ->+ C.RecP (getRange i) <$> mapM (traverse toConcrete) as+ where+ tryOp x f args = do+ -- Andreas, 2016-02-04, Issue #1792+ -- To prevent failing of tryToRecoverOpAppP for overapplied operators,+ -- we take off the exceeding arguments first+ -- and apply them pointwise with C.AppP later.+ let (args1, args2) = splitAt (numHoles x) args+ let funCtx = if null args2 then id else withPrecedence FunctionCtx+ funCtx (tryToRecoverOpAppP $ f args1) >>= \case+ Just c -> applyTo args2 c+ Nothing -> applyTo args . C.IdentP =<< toConcrete x+ -- Note: applyTo [] c = return c+ applyTo args c = bracketP_ (appBrackets' args) $ do+ foldl C.AppP c <$> toConcreteCtx ArgumentCtx args++ -- Helpers for recovering C.OpApp ------------------------------------------ data Hd = HdVar A.Name | HdCon A.QName | HdDef A.QName cOpApp :: Range -> C.QName -> A.Name -> [C.Expr] -> C.Expr cOpApp r x n es =- C.OpApp r x (Set.singleton n) (map (defaultNamedArg . Ordinary) es)+ C.OpApp r x (Set.singleton n)+ (map (defaultNamedArg . NoPlaceholder . Ordinary) es) tryToRecoverOpApp :: A.Expr -> AbsToCon C.Expr -> AbsToCon C.Expr-tryToRecoverOpApp e def = recoverOpApp bracket cOpApp view e def+tryToRecoverOpApp e def = caseMaybeM (recoverOpApp bracket cOpApp view e) def return where view e = do let Application hd args = AV.appView e@@ -902,8 +928,8 @@ Con (AmbQ []) -> __IMPOSSIBLE__ _ -> Nothing -tryToRecoverOpAppP :: A.Pattern -> AbsToCon C.Pattern -> AbsToCon C.Pattern-tryToRecoverOpAppP p def = recoverOpApp bracketP_ opApp view p def+tryToRecoverOpAppP :: A.Pattern -> AbsToCon (Maybe C.Pattern)+tryToRecoverOpAppP = recoverOpApp bracketP_ opApp view where opApp r x n ps = C.OpAppP r x (Set.singleton n) (map defaultNamedArg ps)@@ -916,11 +942,10 @@ recoverOpApp :: (ToConcrete a c, HasRange c) => ((Precedence -> Bool) -> AbsToCon c -> AbsToCon c) -> (Range -> C.QName -> A.Name -> [c] -> c)- -> (a -> Maybe (Hd, [A.NamedArg a]))+ -> (a -> Maybe (Hd, [NamedArg a])) -> a- -> AbsToCon c- -> AbsToCon c-recoverOpApp bracket opApp view e mDefault = case view e of+ -> AbsToCon (Maybe c)+recoverOpApp bracket opApp view e = case view e of Nothing -> mDefault Just (hd, args) | all notHidden args -> do@@ -933,23 +958,21 @@ HdCon qn -> doQNameHelper qnameName id qn args' | otherwise -> mDefault where+ mDefault = return Nothing doQNameHelper fixityHelper conHelper n as = do- x <- toConcrete n- doQName (theFixity $ nameFixity n') (conHelper x) n' as- where n' = fixityHelper n+ x <- conHelper <$> toConcrete n+ doQName (theFixity $ nameFixity n') x n' as (C.nameParts $ C.unqualify x)+ where+ n' = fixityHelper n -- fall-back (wrong number of arguments or no holes)- doQName _ x _ es- | length xs == 1 = mDefault- | length es /= numHoles = mDefault- | null es = mDefault- where- xs = C.nameParts $ C.unqualify x- numHoles = length (filter (== Hole) xs)+ doQName _ x _ es xs+ | null es = mDefault+ | length es /= numHoles x = mDefault -- binary case- doQName fixity x n as+ doQName fixity x n as xs | Hole <- head xs , Hole <- last xs = do let a1 = head as@@ -960,13 +983,12 @@ e1 <- toConcreteCtx (LeftOperandCtx fixity) a1 es <- mapM (toConcreteCtx InsideOperandCtx) as' en <- toConcreteCtx (RightOperandCtx fixity) an- bracket (opBrackets fixity)- $ return $ opApp (getRange (e1, en)) x n ([e1] ++ es ++ [en])- where- xs = C.nameParts $ C.unqualify x+ Just <$> do+ bracket (opBrackets fixity) $+ return $ opApp (getRange (e1, en)) x n ([e1] ++ es ++ [en]) -- prefix- doQName fixity x n as+ doQName fixity x n as xs | Hole <- last xs = do let an = last as as' = case as of@@ -974,28 +996,27 @@ _ -> __IMPOSSIBLE__ es <- mapM (toConcreteCtx InsideOperandCtx) as' en <- toConcreteCtx (RightOperandCtx fixity) an- bracket (opBrackets fixity)- $ return $ opApp (getRange (n, en)) x n (es ++ [en])- where- xs = C.nameParts $ C.unqualify x+ Just <$> do+ bracket (opBrackets fixity) $+ return $ opApp (getRange (n, en)) x n (es ++ [en]) -- postfix- doQName fixity x n as+ doQName fixity x n as xs | Hole <- head xs = do let a1 = head as as' = tail as e1 <- toConcreteCtx (LeftOperandCtx fixity) a1 es <- mapM (toConcreteCtx InsideOperandCtx) as'- bracket (opBrackets fixity)- $ return $ opApp (getRange (e1, n)) x n ([e1] ++ es)- where- xs = C.nameParts $ C.unqualify x+ Just <$> do+ bracket (opBrackets fixity) $+ return $ opApp (getRange (e1, n)) x n ([e1] ++ es) -- roundfix- doQName _ x n as = do+ doQName _ x n as xs = do es <- mapM (toConcreteCtx InsideOperandCtx) as- bracket roundFixBrackets- $ return $ opApp (getRange x) x n es+ Just <$> do+ bracket roundFixBrackets $+ return $ opApp (getRange x) x n es -- Some instances that are related to interaction with users -----------
src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs view
@@ -42,16 +42,17 @@ import qualified Data.Set as Set import qualified Data.Map as Map import Data.Maybe+import Data.Void import Agda.Syntax.Concrete as C hiding (topLevelModuleName) import Agda.Syntax.Concrete.Generic import Agda.Syntax.Concrete.Operators import Agda.Syntax.Abstract as A import Agda.Syntax.Abstract.Pretty+import qualified Agda.Syntax.Internal as I import Agda.Syntax.Position import Agda.Syntax.Literal-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Info import Agda.Syntax.Concrete.Definitions as C import Agda.Syntax.Fixity@@ -64,6 +65,7 @@ ( TypeError(..) , Call(..) , typeError , genericError , TCErr(..) , fresh , freshName , freshName_ , freshNoName , extendedLambdaName , envAbstractMode , AbstractMode(..)+ , TCM ) import qualified Agda.TypeChecking.Monad.Benchmark as Bench import Agda.TypeChecking.Monad.Builtin@@ -72,6 +74,7 @@ import Agda.TypeChecking.Monad.MetaVars (registerInteractionPoint) import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Monad.Env (insideDotPattern, isInsideDotPattern)+import Agda.TypeChecking.Rules.Builtin (isUntypedBuiltin, bindUntypedBuiltin) import Agda.TypeChecking.Pretty hiding (pretty, prettyA) @@ -80,15 +83,18 @@ import {-# SOURCE #-} Agda.Interaction.Imports (scopeCheckImport) import Agda.Interaction.Options +import Agda.Utils.Either import Agda.Utils.Except ( MonadError(catchError, throwError) ) import Agda.Utils.FileName import Agda.Utils.Functor+import Agda.Utils.Lens import Agda.Utils.List import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Null import qualified Agda.Utils.Pretty as P import Agda.Utils.Pretty (render, Pretty, pretty, prettyShow)+import Agda.Utils.Tuple #include "undefined.h" import Agda.Utils.Impossible@@ -157,7 +163,25 @@ -- Projection pattern, @args@ should be empty unless we have -- indexed records. A.PatternSynP _ _ args -> concatMap (vars . namedArg) args+ A.RecP _ fs -> concatMap (vars . (^. exprFieldA)) fs +-- | Make sure that there are no dot patterns (called on pattern synonyms).+noDotPattern :: String -> A.Pattern' e -> ScopeM (A.Pattern' Void)+noDotPattern err = dot+ where+ dot :: A.Pattern' e -> ScopeM (A.Pattern' Void)+ dot p = case p of+ A.VarP x -> pure $ A.VarP x+ A.ConP i c args -> A.ConP i c <$> (traverse $ traverse $ traverse dot) args+ A.WildP i -> pure $ A.WildP i+ A.AsP i x p -> A.AsP i x <$> dot p+ A.DotP{} -> typeError $ GenericError err+ A.AbsurdP i -> pure $ A.AbsurdP i+ A.LitP l -> pure $ A.LitP l+ A.DefP i f args -> A.DefP i f <$> (traverse $ traverse $ traverse dot) args+ A.PatternSynP i c args -> A.PatternSynP i c <$> (traverse $ traverse $ traverse dot) args+ A.RecP i fs -> A.RecP i <$> (traverse $ traverse dot) fs+ -- | Compute the type of the record constructor (with bogus target type) recordConstructorType :: [NiceDeclaration] -> C.Expr recordConstructorType fields = build fs@@ -177,8 +201,8 @@ build (NiceModuleMacro r p x modapp open dir@ImportDirective{ publicOpen = True } : fs) = build (NiceModuleMacro r p x modapp open dir{ publicOpen = False } : fs) - build (NiceField r f _ _ x (Common.Arg info e) : fs) =- C.Pi [C.TypedBindings r $ Common.Arg info (C.TBind r [pure $ mkBoundName x f] e)] $ build fs+ build (NiceField r _ f _ _ x (Arg info e) : fs) =+ C.Pi [C.TypedBindings r $ Arg info (C.TBind r [pure $ mkBoundName x f] e)] $ build fs where r = getRange x build (d : fs) = C.Let (getRange d) [notSoNiceDeclaration d] $ build fs@@ -193,8 +217,8 @@ :: C.ModuleApplication -> ModuleName -> C.Name- -> ImportDirective- -> ScopeM (A.ModuleApplication, Ren A.QName, Ren ModuleName)+ -> C.ImportDirective+ -> ScopeM (A.ModuleApplication, Ren A.QName, Ren ModuleName, A.ImportDirective) checkModuleApplication (C.SectionApp _ tel e) m0 x dir' = do reportSDoc "scope.decl" 70 $ vcat $@@ -214,8 +238,8 @@ let noRecConstr | null args = id | otherwise = removeOnlyQualified -- Copy the scope associated with m and take the parts actually imported.- (s', (renM, renD)) <- copyScope m m0 . noRecConstr =<< getNamedScope m1- s' <- applyImportDirectiveM (C.QName x) dir' s'+ (adir, s) <- applyImportDirectiveM (C.QName x) dir' =<< getNamedScope m1+ (s', (renM, renD)) <- copyScope m m0 (noRecConstr s) -- Set the current scope to @s'@ modifyCurrentScope $ const s' printScope "mod.inst" 20 "copied source module"@@ -227,18 +251,18 @@ reportSDoc "scope.decl" 70 $ vcat $ [ nest 2 $ prettyA amodapp ]- return (amodapp, renD, renM)+ return (amodapp, renD, renM, adir) checkModuleApplication (C.RecordModuleIFS _ recN) m0 x dir' = withCurrentModule m0 $ do m1 <- toAbstract $ OldModuleName recN s <- getNamedScope m1+ (adir, s) <- applyImportDirectiveM recN dir' s (s', (renM, renD)) <- copyScope recN m0 s- s' <- applyImportDirectiveM recN dir' s' modifyCurrentScope $ const s' printScope "mod.inst" 20 "copied record module"- return ((A.RecordModuleIFS m1), renD, renM)+ return (A.RecordModuleIFS m1, renD, renM, adir) -- | @checkModuleMacro mkApply range access concreteName modapp open dir@ --@@ -246,13 +270,19 @@ checkModuleMacro :: (Pretty c, ToConcrete a c)- => (ModuleInfo -> ModuleName -> A.ModuleApplication -> Ren A.QName -> Ren ModuleName -> a)+ => (ModuleInfo+ -> ModuleName+ -> A.ModuleApplication+ -> Ren A.QName+ -> Ren ModuleName+ -> A.ImportDirective+ -> a) -> Range -> Access -> C.Name -> C.ModuleApplication -> OpenShortHand- -> ImportDirective+ -> C.ImportDirective -> ScopeM [a] checkModuleMacro apply r p x modapp open dir = do reportSDoc "scope.decl" 70 $ vcat $@@ -265,14 +295,18 @@ printScope "mod.inst" 20 "module macro" - -- If we're opening, the import directive is applied to the open,- -- otherwise to the module itself.- let dir' = case open of- DontOpen -> dir- DoOpen -> defaultImportDir+ -- If we're opening a /named/ module, the import directive is+ -- applied to the "open", otherwise to the module itself. However,+ -- "public" is always applied to the "open".+ let (moduleDir, openDir) = case (open, isNoName x) of+ (DoOpen, False) -> (defaultImportDir, dir)+ (DoOpen, True) -> ( dir { publicOpen = False }+ , defaultImportDir { publicOpen = publicOpen dir }+ )+ (DontOpen, _) -> (dir, defaultImportDir) -- Restore the locals after module application has been checked.- (modapp', renD, renM) <- withLocalVars $ checkModuleApplication modapp m0 x dir'+ (modapp', renD, renM, adir') <- withLocalVars $ checkModuleApplication modapp m0 x moduleDir printScope "mod.inst.app" 20 "checkModuleMacro, after checkModuleApplication" reportSDoc "scope.decl" 90 $ text "after mod app: trying to print m0 ..."@@ -282,9 +316,12 @@ reportSDoc "scope.decl" 90 $ text "after bindMod: m0 =" <+> prettyA m0 printScope "mod.inst.copy.after" 20 "after copying"++ -- Open the module if DoOpen. -- Andreas, 2014-09-02 openModule_ might shadow some locals!- when (open == DoOpen) $- openModule_ (C.QName x) dir+ adir <- case open of+ DontOpen -> return adir'+ DoOpen -> openModule_ (C.QName x) openDir printScope "mod.inst" 20 $ show open reportSDoc "scope.decl" 90 $ text "after open : m0 =" <+> prettyA m0 @@ -293,7 +330,7 @@ reportSDoc "scope.decl" 90 $ text "after stripNo: m0 =" <+> prettyA m0 let m = m0 `withRangesOf` [x]- adecls = [ apply info m modapp' renD renM ]+ adecls = [ apply info m modapp' renD renM adir ] reportSDoc "scope.decl" 70 $ vcat $ [ text $ "scope checked ModuleMacro " ++ prettyShow x@@ -317,7 +354,7 @@ -- | The @public@ keyword must only be used together with @open@. -notPublicWithoutOpen :: OpenShortHand -> ImportDirective -> ScopeM ()+notPublicWithoutOpen :: OpenShortHand -> C.ImportDirective -> ScopeM () notPublicWithoutOpen DoOpen dir = return () notPublicWithoutOpen DontOpen dir = when (publicOpen dir) $ typeError $ GenericError@@ -326,9 +363,35 @@ -- | Computes the range of all the \"to\" keywords used in a renaming -- directive. -renamingRange :: ImportDirective -> Range-renamingRange = getRange . map renToRange . renaming+renamingRange :: C.ImportDirective -> Range+renamingRange = getRange . map renToRange . impRenaming +-- | Scope check a 'NiceOpen'.+checkOpen+ :: Range -> C.QName -> C.ImportDirective -- ^ Arguments of 'NiceOpen'+ -> ScopeM (ModuleInfo, A.ModuleName, A.ImportDirective) -- ^ Arguments of 'A.Open'+checkOpen r x dir = do+ reportSDoc "scope.decl" 70 $ vcat $+ [ text $ "scope checking NiceOpen " ++ prettyShow x+ ]++ m <- toAbstract (OldModuleName x)+ printScope "open" 20 $ "opening " ++ show x+ adir <- openModule_ x dir+ printScope "open" 20 $ "result:"+ let minfo = ModuleInfo+ { minfoRange = r+ , minfoAsName = Nothing+ , minfoAsTo = renamingRange dir+ , minfoOpenShort = Nothing+ , minfoDirective = Just dir+ }+ let adecls = [A.Open minfo m adir]+ reportSDoc "scope.decl" 70 $ vcat $+ [ text $ "scope checked NiceOpen " ++ prettyShow x+ ] ++ map (nest 2 . prettyA) adecls+ return (minfo, m, adir)+ {-------------------------------------------------------------------------- Translation --------------------------------------------------------------------------}@@ -394,6 +457,10 @@ #endif toAbstract = mapM toAbstract +instance (ToAbstract c1 a1, ToAbstract c2 a2) =>+ ToAbstract (Either c1 c2) (Either a1 a2) where+ toAbstract = traverseEither toAbstract toAbstract+ instance ToAbstract c a => ToAbstract (Maybe c) (Maybe a) where toAbstract = traverse toAbstract @@ -403,7 +470,7 @@ data OldQName = OldQName C.QName (Maybe (Set A.Name)) -- ^ If a set is given, then the first name must correspond to one -- of the names in the set.-newtype OldName = OldName C.Name+newtype OldName a = OldName a data PatName = PatName C.QName (Maybe (Set A.Name)) -- ^ If a set is given, then the first name must correspond to one -- of the names in the set.@@ -420,16 +487,6 @@ bindVariable x y return y -nameExpr :: AbstractName -> A.Expr-nameExpr d = mk (anameKind d) $ anameName d- where- mk DefName x = A.Def x- mk FldName x = A.Proj x- mk ConName x = A.Con $ AmbQ [x]- mk PatternSynName x = A.PatternSyn x- mk QuotableName x = A.App i (A.Quote i) (defaultNamedArg $ A.Def x)- where i = ExprRange (getRange x)- instance ToAbstract OldQName A.Expr where toAbstract (OldQName x ns) = do qx <- resolveName' allKindsOfNames ns x@@ -474,15 +531,25 @@ reportSLn "scope.pat" 10 $ "it was a pat syn: " ++ show (anameName d) return $ PatternSynPatName d +class ToQName a where+ toQName :: a -> C.QName +instance ToQName C.Name where toQName = C.QName+instance ToQName C.QName where toQName = id+ -- Should be a defined name.-instance ToAbstract OldName A.QName where+instance (Show a, ToQName a) => ToAbstract (OldName a) A.QName where toAbstract (OldName x) = do- rx <- resolveName (C.QName x)+ rx <- resolveName (toQName x) case rx of- DefinedName _ d -> return $ anameName d- _ -> __IMPOSSIBLE__- -- error $ show x ++ " - " ++ show rx+ DefinedName _ d -> return $ anameName d+ -- We can get the cases below for DISPLAY pragmas+ ConstructorName (d : _) -> return $ anameName d -- We'll throw out this one, so it doesn't matter which one we pick+ ConstructorName [] -> __IMPOSSIBLE__+ FieldName d -> return $ anameName d+ PatternSynResName d -> return $ anameName d+ VarName x -> typeError $ GenericError $ "Not a defined name: " ++ show x+ UnknownName -> notInScope (toQName x) newtype NewModuleName = NewModuleName C.Name newtype NewModuleQName = NewModuleQName C.QName@@ -526,19 +593,19 @@ -- Expressions ------------------------------------------------------------ -- | Peel off 'C.HiddenArg' and represent it as an 'NamedArg'.-mkNamedArg :: C.Expr -> C.NamedArg C.Expr-mkNamedArg (C.HiddenArg _ e) = Common.Arg (setHiding Hidden defaultArgInfo) e-mkNamedArg (C.InstanceArg _ e) = Common.Arg (setHiding Instance defaultArgInfo) e-mkNamedArg e = Common.Arg defaultArgInfo $ unnamed e+mkNamedArg :: C.Expr -> NamedArg C.Expr+mkNamedArg (C.HiddenArg _ e) = Arg (setHiding Hidden defaultArgInfo) e+mkNamedArg (C.InstanceArg _ e) = Arg (setHiding Instance defaultArgInfo) e+mkNamedArg e = Arg defaultArgInfo $ unnamed e -- | Peel off 'C.HiddenArg' and represent it as an 'Arg', throwing away any name.-mkArg' :: C.ArgInfo -> C.Expr -> C.Arg C.Expr-mkArg' info (C.HiddenArg _ e) = Common.Arg (setHiding Hidden info) $ namedThing e-mkArg' info (C.InstanceArg _ e) = Common.Arg (setHiding Instance info) $ namedThing e-mkArg' info e = Common.Arg (setHiding NotHidden info) e+mkArg' :: ArgInfo -> C.Expr -> Arg C.Expr+mkArg' info (C.HiddenArg _ e) = Arg (setHiding Hidden info) $ namedThing e+mkArg' info (C.InstanceArg _ e) = Arg (setHiding Instance info) $ namedThing e+mkArg' info e = Arg (setHiding NotHidden info) e -- | By default, arguments are @Relevant@.-mkArg :: C.Expr -> C.Arg C.Expr+mkArg :: C.Expr -> Arg C.Expr mkArg e = mkArg' defaultArgInfo e @@ -562,13 +629,6 @@ e <- toAbstractCtx prec e return (e, False) --- | An argument @OpApp C.Expr@ to an operator can have binders,--- in case the operator is some @syntax@-notation.--- For these binders, we have to create lambda-abstractions.-toAbstractOpArg :: Precedence -> OpApp C.Expr -> ScopeM A.Expr-toAbstractOpArg ctx (Ordinary e) = toAbstractCtx ctx e-toAbstractOpArg ctx (SyntaxBindingLambda r bs e) = toAbstractLam r bs e ctx- -- | Translate concrete expression under at least one binder into nested -- lambda abstraction in abstract syntax. toAbstractLam :: Range -> [C.LamBinding] -> C.Expr -> Precedence -> ScopeM A.Expr@@ -584,7 +644,7 @@ mkLam b e = A.Lam (ExprRange $ fuseRange b e) b e -- | Scope check extended lambda expression.-scopeCheckExtendedLam :: Range -> [(C.LHS, C.RHS, WhereClause)] -> ScopeM A.Expr+scopeCheckExtendedLam :: Range -> [(C.LHS, C.RHS, WhereClause, Bool)] -> ScopeM A.Expr scopeCheckExtendedLam r cs = do whenM isInsideDotPattern $ genericError "Extended lambdas are not allowed in dot patterns"@@ -603,9 +663,9 @@ insertApp (C.IdentP q ) = C.RawAppP r $ IdentP (C.QName cname) : [C.IdentP q] where r = getRange q insertApp _ = __IMPOSSIBLE__- d = C.FunDef r [] defaultFixity' {-'-} a __IMPOSSIBLE__ cname $- for cs $ \ (lhs, rhs, wh) -> -- wh == NoWhere, see parser for more info- C.Clause cname (mapLhsOriginalPattern insertApp lhs) rhs wh []+ d = C.FunDef r [] noFixity' {-'-} a __IMPOSSIBLE__ cname $+ for cs $ \ (lhs, rhs, wh, ca) -> -- wh == NoWhere, see parser for more info+ C.Clause cname ca (mapLhsOriginalPattern insertApp lhs) rhs wh [] scdef <- toAbstract d -- Create the abstract syntax for the extended lambda.@@ -635,6 +695,23 @@ Ident x -> toAbstract (OldQName x Nothing) -- Literals+ C.Lit l@(LitNat r n) -> do+ let builtin | n < 0 = Just <$> primFromNeg -- negative literals are only allowed if FROMNEG is defined+ | otherwise = getBuiltin' builtinFromNat+ l' = LitNat r (abs n)+ info = ExprRange r+ conv <- builtin+ case conv of+ Just (I.Def q _) -> return $ A.App info (A.Def q) $ defaultNamedArg (A.Lit l')+ _ -> return $ A.Lit l++ C.Lit l@(LitString r s) -> do+ conv <- getBuiltin' builtinFromString+ let info = ExprRange r+ case conv of+ Just (I.Def q _) -> return $ A.App info (A.Def q) $ defaultNamedArg (A.Lit l)+ _ -> return $ A.Lit l+ C.Lit l -> return $ A.Lit l -- Meta variables@@ -691,11 +768,9 @@ C.ExtendedLam r cs -> scopeCheckExtendedLam r cs -- Relevant and irrelevant non-dependent function type- C.Fun r e1 e2 -> do- Common.Arg info (e0, dotted) <- traverse (toAbstractDot FunctionSpaceDomainCtx) $ mkArg e1- info <- toAbstract info- let e1 = Common.Arg ((if dotted then setRelevance Irrelevant else id) info) e0+ Arg info (e0, dotted) <- traverse (toAbstractDot FunctionSpaceDomainCtx) $ mkArg e1+ let e1 = Arg ((if dotted then setRelevance Irrelevant else id) info) e0 e2 <- toAbstractCtx TopCtx e2 return $ A.Fun (ExprRange r) e1 e2 @@ -715,22 +790,21 @@ e0@(C.Let _ ds e) -> ifM isInsideDotPattern (genericError $ "Let-expressions are not allowed in dot patterns") $ localToAbstract (LetDefs ds) $ \ds' -> do- e <- toAbstractCtx TopCtx e- let info = ExprRange (getRange e0)- return $ A.Let info ds' e+ e <- toAbstractCtx TopCtx e+ let info = ExprRange (getRange e0)+ return $ A.Let info ds' e -- Record construction C.Rec r fs -> do- let (xs, es) = unzip fs- es <- toAbstractCtx TopCtx es- return $ A.Rec (ExprRange r) $ zip xs es+ fs' <- toAbstractCtx TopCtx fs+ let ds' = [ d | Right (_, ds) <- fs', d <- ds ]+ fs'' = map (mapRight fst) fs'+ i = ExprRange r+ return $ A.mkLet i ds' (A.Rec i fs'') -- Record update C.RecUpdate r e fs -> do- let (xs, es) = unzip fs- e <- toAbstract e- es <- toAbstractCtx TopCtx es- return $ A.RecUpdate (ExprRange r) e $ zip xs es+ A.RecUpdate (ExprRange r) <$> toAbstract e <*> toAbstractCtx TopCtx fs -- Parenthesis C.Paren _ e -> toAbstractCtx TopCtx e@@ -749,32 +823,43 @@ x' <- toAbstract (NewName x) e' <- toAbstract e return $ A.QuoteGoal (ExprRange $ getRange e) x' e'- C.QuoteContext _ x e -> do- x' <- toAbstract (NewName x)- e' <- toAbstract e- return $ A.QuoteContext (ExprRange $ getRange e) x' e'+ C.QuoteContext r -> return $ A.QuoteContext (ExprRange r) C.Quote r -> return $ A.Quote (ExprRange r) C.QuoteTerm r -> return $ A.QuoteTerm (ExprRange r) C.Unquote r -> return $ A.Unquote (ExprRange r) C.Tactic r e es -> do- g <- freshName r "g"- let re = ExprRange (getRange e)- e : es <- toAbstract (e : es)- let tac = A.App re e (defaultNamedArg $ A.Var g)- return $ A.QuoteGoal (ExprRange r) g $ foldl (A.App re) (A.Unquote re) (map defaultNamedArg $ tac : es)+ let AppView e' args = appView e+ e' : es <- toAbstract (e' : es)+ args <- toAbstract args+ return $ A.Tactic (ExprRange r) e' args (map defaultNamedArg es) -- DontCare C.DontCare e -> A.DontCare <$> toAbstract e +instance ToAbstract C.ModuleAssignment (A.ModuleName, [A.LetBinding]) where+ toAbstract (C.ModuleAssignment m es i)+ | null es && isDefaultImportDir i = (\x-> (x, [])) <$> toAbstract (OldModuleName m)+ | otherwise = do+ x <- C.NoName (getRange m) <$> fresh+ r <- checkModuleMacro LetApply (getRange (m, es, i)) PublicAccess x+ (C.SectionApp (getRange (m , es)) [] (RawApp (fuseRange m es) (Ident m : es)))+ DontOpen i+ case r of+ (LetApply _ m' _ _ _ _ : _) -> return (m', r)+ _ -> __IMPOSSIBLE__++instance ToAbstract c a => ToAbstract (FieldAssignment' c) (FieldAssignment' a) where+ toAbstract = traverse toAbstract+ instance ToAbstract C.LamBinding A.LamBinding where- toAbstract (C.DomainFree info x) = A.DomainFree <$> toAbstract info <*> toAbstract (NewName x)+ toAbstract (C.DomainFree info x) = A.DomainFree info <$> toAbstract (NewName x) toAbstract (C.DomainFull tb) = A.DomainFull <$> toAbstract tb makeDomainFull :: C.LamBinding -> C.TypedBindings makeDomainFull (C.DomainFull b) = b makeDomainFull (C.DomainFree info x) =- C.TypedBindings r $ Common.Arg info $ C.TBind r [pure x] $ C.Underscore r Nothing+ C.TypedBindings r $ Arg info $ C.TBind r [pure x] $ C.Underscore r Nothing where r = getRange x instance ToAbstract C.TypedBindings A.TypedBindings where@@ -831,6 +916,7 @@ -- If the module was anonymous open it public. when open $+ void $ -- We can discard the returned default A.ImportDirective. openModule_ (C.QName name) $ defaultImportDir { publicOpen = True } return ds@@ -934,14 +1020,13 @@ data TopLevelInfo = TopLevelInfo { topLevelDecls :: [A.Declaration]- , outsideScope :: ScopeInfo- , insideScope :: ScopeInfo+ , topLevelScope :: ScopeInfo -- ^ as seen from inside the module } -- | The top-level module name. topLevelModuleName :: TopLevelInfo -> A.ModuleName-topLevelModuleName topLevel = scopeCurrent (insideScope topLevel)+topLevelModuleName topLevel = scopeCurrent (topLevelScope topLevel) -- | Top-level declarations are always -- @@@ -952,8 +1037,15 @@ toAbstract (TopLevel file ds) = -- A file is a bunch of preliminary decls (imports etc.) -- plus a single module decl.- caseMaybe (initLast ds) __IMPOSSIBLE__ $- \ (outsideDecls, C.Module r m0 tel insideDecls) -> do+ case C.spanAllowedBeforeModule ds of++ -- If there are declarations after the top-level module+ -- we have to report a parse error here.+ (_, C.Module{} : d : _) -> traceCall (SetRange $ getRange d) $+ genericError $ "No declarations allowed after top-level module."++ -- Otherwise, proceed.+ (outsideDecls, [ C.Module r m0 tel insideDecls ]) -> do -- If the module name is _ compute the name from the file path m <- if isNoName m0 then return $ C.QName $ C.Name noRange [Id $ stringToRawName $ rootName file]@@ -970,9 +1062,15 @@ outsideDecls <- toAbstract outsideDecls (insideScope, insideDecls) <- scopeCheckModule r m am tel $ toAbstract insideDecls- outsideScope <- getScope- return $ TopLevelInfo (outsideDecls ++ insideDecls) outsideScope insideScope+ let scope = mapScopeInfo (restrictLocalPrivate am) insideScope+ setScope scope+ return $ TopLevelInfo (outsideDecls ++ insideDecls) scope + -- We already inserted the missing top-level module, see+ -- 'Agda.Syntax.Parser.Parser.figureOutTopLevelModule',+ -- thus, this case is impossible:+ _ -> __IMPOSSIBLE__+ -- | runs Syntax.Concrete.Definitions.niceDeclarations on main module niceDecls :: [C.Declaration] -> ScopeM [NiceDeclaration] niceDecls ds = case runNice $ niceDeclarations ds of@@ -985,18 +1083,28 @@ instance ToAbstract [C.Declaration] [A.Declaration] where #endif toAbstract ds = do- -- don't allow to switch off termination checker in --safe mode- ds <- ifM (optSafe <$> commandLineOptions) (mapM noNoTermCheck ds) (return ds)+ -- Don't allow to switch off termination checker (Issue 586) or+ -- positivity checker (Issue 1614) in --safe mode.+ ds <- ifM (optSafe <$> commandLineOptions)+ (mapM (noNoTermCheck >=> noNoPositivityCheck) ds)+ (return ds) toAbstract =<< niceDecls ds where- noNoTermCheck (C.Pragma (C.TerminationCheckPragma r NoTerminationCheck)) =- typeError $ SafeFlagNoTerminationCheck+ -- ASR (31 December 2015). We don't pattern-match on+ -- @NoTerminationCheck@ because the @NO_TERMINATION_CHECK@ pragma+ -- was removed. See Issue 1763.+ noNoTermCheck :: C.Declaration -> TCM C.Declaration noNoTermCheck (C.Pragma (C.TerminationCheckPragma r NonTerminating)) = typeError $ SafeFlagNonTerminating noNoTermCheck (C.Pragma (C.TerminationCheckPragma r Terminating)) = typeError $ SafeFlagTerminating noNoTermCheck d = return d + noNoPositivityCheck :: C.Declaration -> TCM C.Declaration+ noNoPositivityCheck (C.Pragma (C.NoPositivityCheckPragma _)) =+ typeError $ SafeFlagNoPositivityCheck+ noNoPositivityCheck d = return d+ newtype LetDefs = LetDefs [C.Declaration] newtype LetDef = LetDef NiceDeclaration @@ -1005,114 +1113,116 @@ concat <$> (toAbstract =<< map LetDef <$> niceDecls ds) instance ToAbstract LetDef [A.LetBinding] where- toAbstract (LetDef d) =- case d of- NiceMutual _ _ d@[C.FunSig _ fx _ instanc info _ x t, C.FunDef _ _ _ abstract _ _ [cl]] ->- do when (abstract == AbstractDef) $ do- genericError $ "abstract not allowed in let expressions"- when (instanc == InstanceDef) $ do- genericError $ "Using instance is useless here, let expressions are always eligible for instance search."- (x', e) <- letToAbstract cl- t <- toAbstract t- -- Andreas, 2015-08-27 keeping both the range of x and x' solves Issue 1618.- -- The situation is- -- @- -- let y : t- -- y = e- -- @- -- and we need to store the ranges of both occurences of y in order- -- for the highlighter to do the right thing.- x <- setRange (fuseRange x x') <$> toAbstract (NewName $ mkBoundName x fx)- info <- toAbstract info- return [ A.LetBind (LetRange $ getRange d) info x t e ]+ toAbstract (LetDef d) =+ case d of+ NiceMutual _ _ _ d@[C.FunSig _ fx _ instanc macro info _ x t, C.FunDef _ _ _ abstract _ _ [cl]] ->+ do when (abstract == AbstractDef) $ do+ genericError $ "abstract not allowed in let expressions"+ when (macro == MacroDef) $ do+ genericError $ "Macros cannot be defined in a let expression."+ (x', e) <- letToAbstract cl+ t <- toAbstract t+ x <- toAbstract (NewName $ mkBoundName x fx)+ -- If InstanceDef set info to Instance+ let info' | instanc == InstanceDef = setHiding Instance info+ | otherwise = info+ -- There are sometimes two instances of the+ -- let-bound variable, one declaration and one+ -- definition. The first list element below is+ -- used to highlight the declared instance in the+ -- right way (see Issue 1618).+ return [ A.LetDeclaredVariable (setRange (getRange x') x)+ , A.LetBind (LetRange $ getRange d) info' x t e+ ] - -- irrefutable let binding, like (x , y) = rhs- NiceFunClause r PublicAccess ConcreteDef termCheck d@(C.FunClause lhs@(C.LHS p [] [] []) (C.RHS rhs) NoWhere) -> do- mp <- setCurrentRange p $- (Right <$> parsePattern p)- `catchError`- (return . Left)- case mp of- Right p -> do- rhs <- toAbstract rhs- p <- toAbstract p- checkPatternLinearity [p]- p <- toAbstract p- return [ A.LetPatBind (LetRange r) p rhs ]- -- It's not a record pattern, so it should be a prefix left-hand side- Left err ->- case definedName p of- Nothing -> throwError err- Just x -> toAbstract $ LetDef $ NiceMutual r termCheck- [ C.FunSig r defaultFixity' PublicAccess NotInstanceDef defaultArgInfo termCheck x (C.Underscore (getRange x) Nothing)- , C.FunDef r __IMPOSSIBLE__ __IMPOSSIBLE__ ConcreteDef __IMPOSSIBLE__ __IMPOSSIBLE__- [C.Clause x lhs (C.RHS rhs) NoWhere []]- ]- where- definedName (C.IdentP (C.QName x)) = Just x- definedName C.IdentP{} = Nothing- definedName (C.RawAppP _ (p : _)) = definedName p- definedName (C.ParenP _ p) = definedName p- definedName C.WildP{} = Nothing -- for instance let _ + x = x in ... (not allowed)- definedName C.AbsurdP{} = Nothing- definedName C.AsP{} = Nothing- definedName C.DotP{} = Nothing- definedName C.LitP{} = Nothing- definedName C.QuoteP{} = Nothing- definedName C.HiddenP{} = __IMPOSSIBLE__- definedName C.InstanceP{} = __IMPOSSIBLE__- definedName C.RawAppP{} = __IMPOSSIBLE__- definedName C.AppP{} = __IMPOSSIBLE__- definedName C.OpAppP{} = __IMPOSSIBLE__+ -- irrefutable let binding, like (x , y) = rhs+ NiceFunClause r PublicAccess ConcreteDef termCheck catchall d@(C.FunClause lhs@(C.LHS p [] [] []) (C.RHS rhs) NoWhere ca) -> do+ mp <- setCurrentRange p $+ (Right <$> parsePattern p)+ `catchError`+ (return . Left)+ case mp of+ Right p -> do+ rhs <- toAbstract rhs+ p <- toAbstract p+ checkPatternLinearity [p]+ p <- toAbstract p+ return [ A.LetPatBind (LetRange r) p rhs ]+ -- It's not a record pattern, so it should be a prefix left-hand side+ Left err ->+ case definedName p of+ Nothing -> throwError err+ Just x -> toAbstract $ LetDef $ NiceMutual r termCheck True+ [ C.FunSig r noFixity' PublicAccess NotInstanceDef NotMacroDef defaultArgInfo termCheck x (C.Underscore (getRange x) Nothing)+ , C.FunDef r __IMPOSSIBLE__ __IMPOSSIBLE__ ConcreteDef __IMPOSSIBLE__ __IMPOSSIBLE__+ [C.Clause x (ca || catchall) lhs (C.RHS rhs) NoWhere []]+ ]+ where+ definedName (C.IdentP (C.QName x)) = Just x+ definedName C.IdentP{} = Nothing+ definedName (C.RawAppP _ (p : _)) = definedName p+ definedName (C.ParenP _ p) = definedName p+ definedName C.WildP{} = Nothing -- for instance let _ + x = x in ... (not allowed)+ definedName C.AbsurdP{} = Nothing+ definedName C.AsP{} = Nothing+ definedName C.DotP{} = Nothing+ definedName C.LitP{} = Nothing+ definedName C.RecP{} = Nothing+ definedName C.QuoteP{} = Nothing+ definedName C.HiddenP{} = __IMPOSSIBLE__+ definedName C.InstanceP{} = __IMPOSSIBLE__+ definedName C.RawAppP{} = __IMPOSSIBLE__+ definedName C.AppP{} = __IMPOSSIBLE__+ definedName C.OpAppP{} = __IMPOSSIBLE__ - -- You can't open public in a let- NiceOpen r x dirs | not (C.publicOpen dirs) -> do- m <- toAbstract (OldModuleName x)- openModule_ x dirs- let minfo = ModuleInfo- { minfoRange = r- , minfoAsName = Nothing- , minfoAsTo = renamingRange dirs- , minfoOpenShort = Nothing- , minfoDirective = Just dirs- }- return [A.LetOpen minfo m]+ -- You can't open public in a let+ NiceOpen r x dirs | not (publicOpen dirs) -> do+ m <- toAbstract (OldModuleName x)+ adir <- openModule_ x dirs+ let minfo = ModuleInfo+ { minfoRange = r+ , minfoAsName = Nothing+ , minfoAsTo = renamingRange dirs+ , minfoOpenShort = Nothing+ , minfoDirective = Just dirs+ }+ return [A.LetOpen minfo m adir] - NiceModuleMacro r p x modapp open dir | not (C.publicOpen dir) ->- -- Andreas, 2014-10-09, Issue 1299: module macros in lets need- -- to be private- checkModuleMacro LetApply r PrivateAccess x modapp open dir+ NiceModuleMacro r p x modapp open dir | not (publicOpen dir) ->+ -- Andreas, 2014-10-09, Issue 1299: module macros in lets need+ -- to be private+ checkModuleMacro LetApply r PrivateAccess x modapp open dir - _ -> notAValidLetBinding d- where- letToAbstract (C.Clause top clhs@(C.LHS p [] [] []) (C.RHS rhs) NoWhere []) = do+ _ -> notAValidLetBinding d+ where+ letToAbstract (C.Clause top catchall clhs@(C.LHS p [] [] []) (C.RHS rhs) NoWhere []) = do {-- p <- parseLHS top p- localToAbstract (snd $ lhsArgs p) $ \args ->+ p <- parseLHS top p+ localToAbstract (snd $ lhsArgs p) $ \args -> -}- (x, args) <- do- res <- setCurrentRange p $ parseLHS top p- case res of- C.LHSHead x args -> return (x, args)- C.LHSProj{} -> genericError $ "copatterns not allowed in let bindings"+ (x, args) <- do+ res <- setCurrentRange p $ parseLHS (C.QName top) p+ case res of+ C.LHSHead x args -> return (x, args)+ C.LHSProj{} -> genericError $ "copatterns not allowed in let bindings" - e <- localToAbstract args $ \args ->- do rhs <- toAbstract rhs- foldM lambda rhs (reverse args) -- just reverse because these DomainFree- return (x, e)- letToAbstract _ = notAValidLetBinding d+ e <- localToAbstract args $ \args ->+ do rhs <- toAbstract rhs+ foldM lambda rhs (reverse args) -- just reverse because these DomainFree+ return (x, e)+ letToAbstract _ = notAValidLetBinding d - -- Named patterns not allowed in let definitions- lambda e (Common.Arg info (Named Nothing (A.VarP x))) =- return $ A.Lam i (A.DomainFree info x) e- where- i = ExprRange (fuseRange x e)- lambda e (Common.Arg info (Named Nothing (A.WildP i))) =- do x <- freshNoName (getRange i)- return $ A.Lam i' (A.DomainFree info x) e- where- i' = ExprRange (fuseRange i e)- lambda _ _ = notAValidLetBinding d+ -- Named patterns not allowed in let definitions+ lambda e (Arg info (Named Nothing (A.VarP x))) =+ return $ A.Lam i (A.DomainFree info x) e+ where+ i = ExprRange (fuseRange x e)+ lambda e (Arg info (Named Nothing (A.WildP i))) =+ do x <- freshNoName (getRange i)+ return $ A.Lam i' (A.DomainFree info x) e+ where+ i' = ExprRange (fuseRange i e)+ lambda _ _ = notAValidLetBinding d newtype Blind a = Blind { unBlind :: a } @@ -1147,10 +1257,10 @@ clo <- commandLineOptions when (optSafe clo) (typeError (SafeFlagPostulate x)) -- check the postulate- toAbstractNiceAxiom A.NoFunSig d+ toAbstractNiceAxiom A.NoFunSig NotMacroDef d -- Fields- C.NiceField r f p a x t -> do+ C.NiceField r i f p a x t -> do unless (p == PublicAccess) $ genericError "Record fields can not be private" -- Interaction points for record fields have already been introduced -- when checking the type of the record constructor.@@ -1166,7 +1276,7 @@ -- this ensures that projections out of irrelevant fields cannot occur -- Ulf: unless you turn on --irrelevant-projections bindName p FldName x y- return [ A.Field (mkDefInfo x f p a r) y t' ]+ return [ A.Field (mkDefInfoInstance x f p a i NotMacroDef r) y t' ] -- Primitive function PrimitiveFunction r f p a x t -> do@@ -1176,12 +1286,12 @@ return [ A.Primitive (mkDefInfo x f p a r) y t' ] -- Definitions (possibly mutual)- NiceMutual r termCheck ds -> do+ NiceMutual r termCheck pc ds -> do ds' <- toAbstract ds -- We only termination check blocks that do not have a measure.- return [ A.Mutual (MutualInfo termCheck r) ds' ]+ return [ A.Mutual (MutualInfo termCheck pc r) ds' ] - C.NiceRecSig r f a x ls t -> do+ C.NiceRecSig r f a x ls t _ -> do ensureNoLetStms ls withLocalVars $ do ls' <- toAbstract (map makeDomainFull ls)@@ -1190,7 +1300,7 @@ t' <- toAbstract t return [ A.RecSig (mkDefInfo x f a ConcreteDef r) x' ls' t' ] - C.NiceDataSig r f a x ls t -> withLocalVars $ do+ C.NiceDataSig r f a x ls t _ -> withLocalVars $ do printScope "scope.data.sig" 20 ("checking DataSig for " ++ show x) ensureNoLetStms ls ls' <- toAbstract (map makeDomainFull ls)@@ -1201,7 +1311,7 @@ t' <- toAbstract t return [ A.DataSig (mkDefInfo x f a ConcreteDef r) x' ls' t' ] -- Type signatures- C.FunSig r f p i rel tc x t -> toAbstractNiceAxiom A.FunSig (C.Axiom r f p i rel x t)+ C.FunSig r f p i m rel tc x t -> toAbstractNiceAxiom A.FunSig m (C.Axiom r f p i rel x t) -- Function definitions C.FunDef r ds f a tc x cs -> do printLocals 10 $ "checking def " ++ show x@@ -1211,13 +1321,13 @@ return [ A.FunDef (mkDefInfo x f PublicAccess a r) x' delayed cs ] -- Uncategorized function clauses- C.NiceFunClause r acc abs termCheck (C.FunClause lhs rhs wcls) ->+ C.NiceFunClause r acc abs termCheck catchall (C.FunClause lhs rhs wcls ca) -> genericError $ "Missing type signature for left hand side " ++ show lhs C.NiceFunClause{} -> __IMPOSSIBLE__ -- Data definitions- C.DataDef r f a x pars cons -> withLocalVars $ do+ C.DataDef r f a x pars _ cons -> withLocalVars $ do printScope "scope.data.def" 20 ("checking DataDef for " ++ show x) ensureNoLetStms pars -- Check for duplicate constructors@@ -1246,7 +1356,7 @@ conName _ = __IMPOSSIBLE__ -- Record definitions (mucho interesting)- C.RecDef r f a x ind cm pars fields -> do+ C.RecDef r f a x ind eta cm pars _ fields -> do ensureNoLetStms pars withLocalVars $ do -- Check that the generated module doesn't clash with a previously@@ -1268,9 +1378,10 @@ printScope "rec" 15 "checked fields" return afields bindModule p x m- cm' <- mapM (\(ThingWithFixity c f) -> bindConstructorName m c f a p YesRec) cm+ cm' <- mapM (\(ThingWithFixity c f, _) -> bindConstructorName m c f a p YesRec) cm+ let inst = caseMaybe cm NotInstanceDef snd printScope "rec" 15 "record complete"- return [ A.RecDef (mkDefInfo x f PublicAccess a r) x' ind cm' pars contel afields ]+ return [ A.RecDef (mkDefInfoInstance x f PublicAccess a inst NotMacroDef r) x' ind eta cm' pars contel afields ] NiceModule r p a x@(C.QName name) tel ds -> do reportSDoc "scope.decl" 70 $ vcat $@@ -1301,26 +1412,8 @@ return adecls NiceOpen r x dir -> do- reportSDoc "scope.decl" 70 $ vcat $- [ text $ "scope checking NiceOpen " ++ prettyShow x- ]-- m <- toAbstract (OldModuleName x)- printScope "open" 20 $ "opening " ++ show x- openModule_ x dir- printScope "open" 20 $ "result:"- let minfo = ModuleInfo- { minfoRange = r- , minfoAsName = Nothing- , minfoAsTo = renamingRange dir- , minfoOpenShort = Nothing- , minfoDirective = Just dir- }- let adecls = [A.Open minfo m]- reportSDoc "scope.decl" 70 $ vcat $- [ text $ "scope checked NiceOpen " ++ prettyShow x- ] ++ map (nest 2 . prettyA) adecls- return adecls+ (minfo, m, adir) <- checkOpen r x dir+ return [A.Open minfo m adir] NicePragma r p -> do ps <- toAbstract p@@ -1332,7 +1425,7 @@ -- First scope check the imported module and return its name and -- interface. This is done with that module as the top-level module. -- This is quite subtle. We rely on the fact that when setting the- -- top-level module and generating a fresh module name the generated+ -- top-level module and generating a fresh module name, the generated -- name will be exactly the same as the name generated when checking -- the imported module. (m, i) <- withCurrentModule noModuleName $ withTopLevelModule x $ do@@ -1358,8 +1451,10 @@ let (name, theAsSymbol, theAsName) = case as of Nothing -> (x, noRange, Nothing) Just a -> (C.QName (asName a), asRange a, Just (asName a))- case open of- DoOpen -> void $ toAbstract [ C.Open r name dir ]+ adir <- case open of+ DoOpen -> do+ (_minfo, _m, adir) <- checkOpen r name dir+ return adir -- If not opening, import directives are applied to the original scope. DontOpen -> modifyNamedScopeM m $ applyImportDirectiveM x dir let minfo = ModuleInfo@@ -1369,24 +1464,33 @@ , minfoOpenShort = Just open , minfoDirective = Just dir }- return [ A.Import minfo m ]+ return [ A.Import minfo m adir ] - NiceUnquoteDecl r fx p i a tc x e -> do- y <- freshAbstractQName fx x- bindName p QuotableName x y+ NiceUnquoteDecl r fxs p i a tc xs e -> do+ ys <- zipWithM freshAbstractQName fxs xs+ zipWithM_ (bindName p QuotableName) xs ys e <- toAbstract e- rebindName p DefName x y- let mi = MutualInfo tc r- return [A.UnquoteDecl mi (mkDefInfoInstance x fx p a i r) y e]+ zipWithM_ (rebindName p DefName) xs ys+ let mi = MutualInfo tc True r+ return [ A.Mutual mi [A.UnquoteDecl mi [ mkDefInfoInstance x fx p a i NotMacroDef r | (fx, x) <- zip fxs xs ] ys e] ] + NiceUnquoteDef r fxs p a tc xs e -> do+ ys <- mapM (toAbstract . OldName) xs+ zipWithM_ (rebindName p QuotableName) xs ys+ e <- toAbstract e+ zipWithM_ (rebindName p DefName) xs ys+ return [ A.UnquoteDef [ mkDefInfo x fx PublicAccess a r | (fx, x) <- zip fxs xs ] ys e ]+ NicePatternSyn r fx n as p -> do reportSLn "scope.pat" 10 $ "found nice pattern syn: " ++ show r y <- freshAbstractQName fx n bindName PublicAccess PatternSynName n y defn@(as, p) <- withLocalVars $ do- p <- toAbstract =<< toAbstract =<< parsePatternSyn p+ p <- toAbstract =<< parsePatternSyn p checkPatternLinearity [p]+ let err = "Dot patterns are not allowed in pattern synonyms. Use '_' instead."+ p <- noDotPattern err p as <- (traverse . mapM) (unVarName <=< resolveName . C.QName) as as <- (map . fmap) unBlind <$> toAbstract ((map . fmap) Blind as) return (as, p)@@ -1397,13 +1501,14 @@ where -- checking postulate or type sig. without checking safe flag- toAbstractNiceAxiom funSig (C.Axiom r f p i info x t) = do+ toAbstractNiceAxiom funSig isMacro (C.Axiom r f p i info x t) = do t' <- toAbstractCtx TopCtx t y <- freshAbstractQName f x- info <- toAbstract info- bindName p DefName x y- return [ A.Axiom funSig (mkDefInfoInstance x f p ConcreteDef i r) info y t' ]- toAbstractNiceAxiom _ _ = __IMPOSSIBLE__+ let kind | isMacro == MacroDef = MacroName+ | otherwise = DefName+ bindName p kind x y+ return [ A.Axiom funSig (mkDefInfoInstance x f p ConcreteDef i isMacro r) info y t' ]+ toAbstractNiceAxiom _ _ _ = __IMPOSSIBLE__ data IsRecordCon = YesRec | NoRec@@ -1437,136 +1542,198 @@ -- The abstract name is the qualified one -- Bind it twice, once unqualified and once qualified y <- bindConstructorName m x f a p record- info <- toAbstract info printScope "con" 15 "bound constructor"- return $ A.Axiom NoFunSig (mkDefInfoInstance x f p ConcreteDef i r) info y t'+ return $ A.Axiom NoFunSig (mkDefInfoInstance x f p ConcreteDef i NotMacroDef r) info y t' _ -> typeError . GenericDocError $ P.text "Illegal declaration in data type definition " P.$$ P.nest 2 (pretty (notSoNiceDeclaration d)) instance ToAbstract C.Pragma [A.Pragma] where- toAbstract (C.ImpossiblePragma _) = impossibleTest- toAbstract (C.OptionsPragma _ opts) = return [ A.OptionsPragma opts ]- toAbstract (C.RewritePragma _ x) = do- e <- toAbstract $ OldQName x Nothing- case e of- A.Def x -> return [ A.RewritePragma x ]- A.Proj x -> return [ A.RewritePragma x ]- A.Con (AmbQ [x]) -> return [ A.RewritePragma x ]- A.Con x -> genericError $ "REWRITE used on ambiguous name " ++ show x- A.Var x -> genericError $ "REWRITE used on parameter " ++ show x ++ " instead of on a defined symbol"- _ -> __IMPOSSIBLE__- toAbstract (C.CompiledTypePragma _ x hs) = do- e <- toAbstract $ OldQName x Nothing- case e of- A.Def x -> return [ A.CompiledTypePragma x hs ]- _ -> genericError $ "Bad compiled type: " ++ prettyShow x -- TODO: error message- toAbstract (C.CompiledDataPragma _ x hs hcs) = do- e <- toAbstract $ OldQName x Nothing- case e of- A.Def x -> return [ A.CompiledDataPragma x hs hcs ]- _ -> genericError $ "Not a datatype: " ++ prettyShow x -- TODO: error message- toAbstract (C.CompiledPragma _ x hs) = do- e <- toAbstract $ OldQName x Nothing- y <- case e of- A.Def x -> return x- A.Proj x -> return x -- TODO: do we need to do s.th. special for projections? (Andreas, 2014-10-12)- A.Con _ -> genericError "Use COMPILED_DATA for constructors" -- TODO- _ -> __IMPOSSIBLE__- return [ A.CompiledPragma y hs ]- toAbstract (C.CompiledExportPragma _ x hs) = do+ toAbstract (C.ImpossiblePragma _) = impossibleTest+ toAbstract (C.OptionsPragma _ opts) = return [ A.OptionsPragma opts ]+ toAbstract (C.RewritePragma _ x) = do+ e <- toAbstract $ OldQName x Nothing+ case e of+ A.Def x -> return [ A.RewritePragma x ]+ A.Proj x -> return [ A.RewritePragma x ]+ A.Con (AmbQ [x]) -> return [ A.RewritePragma x ]+ A.Con x -> genericError $ "REWRITE used on ambiguous name " ++ show x+ A.Var x -> genericError $ "REWRITE used on parameter " ++ show x ++ " instead of on a defined symbol"+ _ -> __IMPOSSIBLE__+ toAbstract (C.CompiledDeclareDataPragma _ x hs) = do+ e <- toAbstract $ OldQName x Nothing+ case e of+ A.Def x -> return [ A.CompiledDeclareDataPragma x hs ]+ _ -> fail $ "Bad compiled type: " ++ show x -- TODO: error message+ toAbstract (C.CompiledTypePragma _ x hs) = do+ e <- toAbstract $ OldQName x Nothing+ case e of+ A.Def x -> return [ A.CompiledTypePragma x hs ]+ _ -> genericError $ "Bad compiled type: " ++ prettyShow x -- TODO: error message+ toAbstract (C.CompiledDataPragma _ x hs hcs) = do+ e <- toAbstract $ OldQName x Nothing+ case e of+ A.Def x -> return [ A.CompiledDataPragma x hs hcs ]+ _ -> genericError $ "Not a datatype: " ++ prettyShow x -- TODO: error message+ toAbstract (C.CompiledPragma _ x hs) = do+ e <- toAbstract $ OldQName x Nothing+ y <- case e of+ A.Def x -> return x+ A.Proj x -> return x -- TODO: do we need to do s.th. special for projections? (Andreas, 2014-10-12)+ A.Con _ -> genericError "Use COMPILED_DATA for constructors" -- TODO+ _ -> __IMPOSSIBLE__+ return [ A.CompiledPragma y hs ]+ toAbstract (C.CompiledExportPragma _ x hs) = do+ e <- toAbstract $ OldQName x Nothing+ y <- case e of+ A.Def x -> return x+ _ -> __IMPOSSIBLE__+ return [ A.CompiledExportPragma y hs ]+ toAbstract (C.CompiledEpicPragma _ x ep) = do+ e <- toAbstract $ OldQName x Nothing+ y <- case e of+ A.Def x -> return x+ _ -> __IMPOSSIBLE__+ return [ A.CompiledEpicPragma y ep ]+ toAbstract (C.CompiledJSPragma _ x ep) = do+ e <- toAbstract $ OldQName x Nothing+ y <- case e of+ A.Def x -> return x+ A.Proj x -> return x+ A.Con (AmbQ [x]) -> return x+ A.Con x -> genericError $+ "COMPILED_JS used on ambiguous name " ++ prettyShow x+ _ -> __IMPOSSIBLE__+ return [ A.CompiledJSPragma y ep ]+ toAbstract (C.CompiledUHCPragma _ x cr) = do+ e <- toAbstract $ OldQName x Nothing+ y <- case e of+ A.Def x -> return x+ _ -> __IMPOSSIBLE__+ return [ A.CompiledUHCPragma y cr ]+ toAbstract (C.CompiledDataUHCPragma _ x crd crcs) = do+ e <- toAbstract $ OldQName x Nothing+ case e of+ A.Def x -> return [ A.CompiledDataUHCPragma x crd crcs ]+ _ -> fail $ "Bad compiled type: " ++ show x -- TODO: error message+ toAbstract (C.NoSmashingPragma _ x) = do e <- toAbstract $ OldQName x Nothing y <- case e of- A.Def x -> return x- _ -> __IMPOSSIBLE__- return [ A.CompiledExportPragma y hs ]- toAbstract (C.CompiledEpicPragma _ x ep) = do+ A.Def x -> return x+ A.Proj x -> return x+ _ -> genericError "Target of NO_SMASHING pragma should be a function"+ return [ A.NoSmashingPragma y ]+ toAbstract (C.StaticPragma _ x) = do e <- toAbstract $ OldQName x Nothing y <- case e of- A.Def x -> return x- _ -> __IMPOSSIBLE__- return [ A.CompiledEpicPragma y ep ]- toAbstract (C.CompiledJSPragma _ x ep) = do+ A.Def x -> return x+ A.Proj x -> return x+ _ -> genericError "Target of STATIC pragma should be a function"+ return [ A.StaticPragma y ]+ toAbstract (C.InlinePragma _ x) = do e <- toAbstract $ OldQName x Nothing y <- case e of- A.Def x -> return x- A.Proj x -> return x- A.Con (AmbQ [x]) -> return x- A.Con x -> genericError $- "COMPILED_JS used on ambiguous name " ++ prettyShow x- _ -> __IMPOSSIBLE__- return [ A.CompiledJSPragma y ep ]- toAbstract (C.StaticPragma _ x) = do- e <- toAbstract $ OldQName x Nothing- y <- case e of- A.Def x -> return x- _ -> __IMPOSSIBLE__- return [ A.StaticPragma y ]- toAbstract (C.BuiltinPragma _ b e) = do- -- Andreas, 2015-02-14- -- Some builtins cannot be given a valid Agda type,- -- thus, they do not come with accompanying postulate or definition.- if b `elem` builtinsNoDef then do- case e of- C.Ident q@(C.QName x) -> do- unlessM ((UnknownName ==) <$> resolveName q) $ genericError $- "BUILTIN " ++ b ++ " declares an identifier " ++- "(no longer expects an already defined identifier)"- y <- freshAbstractQName defaultFixity' x- bindName PublicAccess DefName x y- return [ A.BuiltinNoDefPragma b y ]- _ -> genericError $- "Pragma BUILTIN " ++ b ++ ": expected unqualified identifier, " ++- "but found expression " ++ prettyShow e- else do- e <- toAbstract e- return [ A.BuiltinPragma b e ]- toAbstract (C.ImportPragma _ i) = do- addHaskellImport i- return []- toAbstract (C.EtaPragma _ x) = do- e <- toAbstract $ OldQName x Nothing+ A.Def x -> return x+ A.Proj x -> return x+ _ -> genericError "Target of INLINE pragma should be a function"+ return [ A.InlinePragma y ]+ toAbstract (C.BuiltinPragma _ b e) | isUntypedBuiltin b = do+ bindUntypedBuiltin b =<< toAbstract e+ return []+ toAbstract (C.BuiltinPragma _ b e) = do+ -- Andreas, 2015-02-14+ -- Some builtins cannot be given a valid Agda type,+ -- thus, they do not come with accompanying postulate or definition.+ if b `elem` builtinsNoDef then do case e of- A.Def x -> return [ A.EtaPragma x ]- _ -> do- e <- showA e- genericError $ "Pragma ETA: expected identifier, " ++- "but found expression " ++ e- -- Termination checking pragmes are handled by the nicifier- toAbstract C.TerminationCheckPragma{} = __IMPOSSIBLE__+ C.Ident q@(C.QName x) -> do+ unlessM ((UnknownName ==) <$> resolveName q) $ genericError $+ "BUILTIN " ++ b ++ " declares an identifier " +++ "(no longer expects an already defined identifier)"+ y <- freshAbstractQName noFixity' x+ bindName PublicAccess DefName x y+ return [ A.BuiltinNoDefPragma b y ]+ _ -> genericError $+ "Pragma BUILTIN " ++ b ++ ": expected unqualified identifier, " +++ "but found expression " ++ prettyShow e+ else do+ e <- toAbstract e+ return [ A.BuiltinPragma b e ]+ toAbstract (C.ImportPragma _ i) = do+ addHaskellImport i+ return []+ toAbstract (C.ImportUHCPragma _ i) = do+ addHaskellImportUHC i+ return []+ toAbstract (C.HaskellCodePragma _ s) = do+ addInlineHaskell s+ return []+ toAbstract (C.DisplayPragma _ lhs rhs) = withLocalVars $ do+ let err = genericError "DISPLAY pragma left-hand side must have form 'f e1 .. en'"+ getHead (C.IdentP x) = return x+ getHead (C.RawAppP _ (p : _)) = getHead p+ getHead _ = err + top <- getHead lhs++ hd <- do+ qx <- resolveName' allKindsOfNames Nothing top+ case qx of+ VarName x' -> return $ A.qnameFromList [x']+ DefinedName _ d -> return $ anameName d+ FieldName d -> return $ anameName d+ ConstructorName [d] -> return $ anameName d+ ConstructorName ds -> genericError $ "Ambiguous constructor " ++ show top ++ ": " ++ show (map anameName ds)+ UnknownName -> notInScope top+ PatternSynResName d -> return $ anameName d++ lhs <- toAbstract $ LeftHandSide top lhs []+ ps <- case lhs of+ A.LHS _ (A.LHSHead _ ps) [] -> return ps+ _ -> err+ rhs <- toAbstract rhs+ return [A.DisplayPragma hd ps rhs]++ -- Termination checking pragmes are handled by the nicifier+ toAbstract C.TerminationCheckPragma{} = __IMPOSSIBLE__++ toAbstract C.CatchallPragma{} = __IMPOSSIBLE__++ -- No positivity checking pragmas are handled by the nicifier.+ toAbstract C.NoPositivityCheckPragma{} = __IMPOSSIBLE__+ instance ToAbstract C.Clause A.Clause where- toAbstract (C.Clause top C.Ellipsis{} _ _ _) = genericError "bad '...'" -- TODO: error message- toAbstract (C.Clause top lhs@(C.LHS p wps eqs with) rhs wh wcs) = withLocalVars $ do- -- Andreas, 2012-02-14: need to reset local vars before checking subclauses- vars <- getLocalVars- let wcs' = for wcs $ \ c -> setLocalVars vars $> c- lhs' <- toAbstract $ LeftHandSide top p wps- printLocals 10 "after lhs:"- let (whname, whds) = case wh of- NoWhere -> (Nothing, [])- AnyWhere ds -> (Nothing, ds)- SomeWhere m ds -> (Just m, ds)+ toAbstract (C.Clause top _ C.Ellipsis{} _ _ _) = genericError "bad '...'" -- TODO: error message+ toAbstract (C.Clause top catchall lhs@(C.LHS p wps eqs with) rhs wh wcs) = withLocalVars $ do+ -- Andreas, 2012-02-14: need to reset local vars before checking subclauses+ vars <- getLocalVars+ let wcs' = for wcs $ \ c -> setLocalVars vars $> c+ lhs' <- toAbstract $ LeftHandSide (C.QName top) p wps+ printLocals 10 "after lhs:"+ let (whname, whds) = case wh of+ NoWhere -> (Nothing, [])+ AnyWhere ds -> (Nothing, ds)+ SomeWhere m ds -> (Just m, ds) - let isTerminationPragma :: C.Declaration -> Bool- isTerminationPragma (C.Pragma (TerminationCheckPragma _ _)) = True- isTerminationPragma _ = False+ let isTerminationPragma :: C.Declaration -> Bool+ isTerminationPragma (C.Pragma (TerminationCheckPragma _ _)) = True+ isTerminationPragma _ = False - if not (null eqs)- then do- rhs <- toAbstract =<< toAbstractCtx TopCtx (RightHandSide eqs with wcs' rhs whds)- return $ A.Clause lhs' rhs []- else do- -- ASR (16 November 2015) Issue 1137: We ban termination- -- pragmas inside `where` clause.- when (any isTerminationPragma whds) $- genericError "Termination pragmas are not allowed inside where clauses"+ if not (null eqs)+ then do+ rhs <- toAbstract =<< toAbstractCtx TopCtx (RightHandSide eqs with wcs' rhs whds)+ return $ A.Clause lhs' rhs [] catchall+ else do+ -- ASR (16 November 2015) Issue 1137: We ban termination+ -- pragmas inside `where` clause.+ when (any isTerminationPragma whds) $+ genericError "Termination pragmas are not allowed inside where clauses" - -- the right hand side is checked inside the module of the local definitions- (rhs, ds) <- whereToAbstract (getRange wh) whname whds $- toAbstractCtx TopCtx (RightHandSide eqs with wcs' rhs [])- rhs <- toAbstract rhs- return $ A.Clause lhs' rhs ds+ -- the right hand side is checked inside the module of the local definitions+ (rhs, ds) <- whereToAbstract (getRange wh) whname whds $+ toAbstractCtx TopCtx (RightHandSide eqs with wcs' rhs [])+ rhs <- toAbstract rhs+ return $ A.Clause lhs' rhs ds catchall whereToAbstract :: Range -> Maybe C.Name -> [C.Declaration] -> ScopeM a -> ScopeM (a, [A.Declaration]) whereToAbstract _ _ [] inner = (,[]) <$> inner@@ -1587,6 +1754,7 @@ -- Issue 848: if the module was anonymous (module _ where) open it public let anonymous = maybe False isNoName whname when anonymous $+ void $ -- We can ignore the returned default A.ImportDirective. openModule_ (C.QName m) $ defaultImportDir { publicOpen = True } return (x, ds)@@ -1648,7 +1816,7 @@ toAbstract C.AbsurdRHS = return $ AbsurdRHS' toAbstract (C.RHS e) = RHS' <$> toAbstract e -data LeftHandSide = LeftHandSide C.Name C.Pattern [C.Pattern]+data LeftHandSide = LeftHandSide C.QName C.Pattern [C.Pattern] instance ToAbstract LeftHandSide A.LHS where toAbstract (LeftHandSide top lhs wps) =@@ -1696,9 +1864,9 @@ instance ToAbstract c a => ToAbstract (WithHiding c) (WithHiding a) where toAbstract (WithHiding h a) = WithHiding h <$> toAbstractHiding h a -instance ToAbstract c a => ToAbstract (C.Arg c) (A.Arg a) where- toAbstract (Common.Arg info e) =- Common.Arg <$> toAbstract info <*> toAbstractHiding info e+instance ToAbstract c a => ToAbstract (Arg c) (Arg a) where+ toAbstract (Arg info e) =+ Arg info <$> toAbstractHiding info e instance ToAbstract c a => ToAbstract (Named name c) (Named name a) where toAbstract (Named n e) = Named n <$> toAbstract e@@ -1713,13 +1881,6 @@ toAbstract (A.LHSProj d ps lhscore ps') = A.LHSProj d <$> mapM toAbstract ps <*> mapM toAbstract lhscore <*> mapM toAbstract ps' -instance ToAbstract c a => ToAbstract (A.NamedArg c) (A.NamedArg a) where- toAbstract (Common.Arg info c) = liftM2 Common.Arg (return info) (toAbstract c)--instance ToAbstract C.ArgInfo A.ArgInfo where- toAbstract info = do cs <- mapM toAbstract $ argInfoColors info- return $ info { argInfoColors = cs }- -- Patterns are done in two phases. First everything but the dot patterns, and -- then the dot patterns. This is because dot patterns can refer to variables -- bound anywhere in the pattern.@@ -1734,6 +1895,7 @@ toAbstract (A.AbsurdP i) = return $ A.AbsurdP i toAbstract (A.LitP l) = return $ A.LitP l toAbstract (A.PatternSynP i x as) = A.PatternSynP i x <$> mapM toAbstract as+ toAbstract (A.RecP i fs) = A.RecP i <$> mapM (traverse toAbstract) fs resolvePatternIdentifier :: Range -> C.QName -> Maybe (Set A.Name) -> ScopeM (A.Pattern' C.Expr)@@ -1768,7 +1930,7 @@ genericError "quote must be applied to an identifier" toAbstract p0@(AppP p q) = do- (p', q') <- toAbstract (p,q)+ (p', q') <- toAbstract (p, q) case p' of ConP i x as -> return $ ConP (i {patInfo = info}) x (as ++ [q']) DefP _ x as -> return $ DefP info x (as ++ [q'])@@ -1812,11 +1974,24 @@ where info = PatRange r toAbstract p0@(C.AbsurdP r) = return $ A.AbsurdP info where info = PatRange r+ toAbstract (C.RecP r fs) = A.RecP (PatRange r) <$>+ mapM (traverse toAbstract) fs --- | Turn an operator application into abstract syntax. Make sure to record the--- right precedences for the various arguments.-toAbstractOpApp :: C.QName -> Set A.Name -> [C.NamedArg (OpApp C.Expr)] -> ScopeM A.Expr+-- | An argument @OpApp C.Expr@ to an operator can have binders,+-- in case the operator is some @syntax@-notation.+-- For these binders, we have to create lambda-abstractions.+toAbstractOpArg :: Precedence -> OpApp C.Expr -> ScopeM A.Expr+toAbstractOpArg ctx (Ordinary e) = toAbstractCtx ctx e+toAbstractOpArg ctx (SyntaxBindingLambda r bs e) = toAbstractLam r bs e ctx++-- | Turn an operator application into abstract syntax. Make sure to+-- record the right precedences for the various arguments.+toAbstractOpApp :: C.QName -> Set A.Name ->+ [NamedArg (MaybePlaceholder (OpApp C.Expr))] ->+ ScopeM A.Expr toAbstractOpApp op ns es = do+ -- Replace placeholders with bound variables.+ (binders, es) <- replacePlaceholders es -- Get the notation for the operator. nota <- getNotation op ns let parts = notation nota@@ -1828,13 +2003,20 @@ unless (length (filter isAHole nonBindingParts) == length es) __IMPOSSIBLE__ -- Translate operator and its arguments (each in the right context). op <- toAbstract (OldQName op (Just ns))- foldl' app op <$> left (notaFixity nota) nonBindingParts es+ es <- left (notaFixity nota) nonBindingParts es+ -- Prepend the generated section binders (if any).+ let body = foldl' app op es+ return $ foldr (A.Lam (ExprRange (getRange body))) body binders where -- Build an application in the abstract syntax, with correct Range.- app e arg = A.App (ExprRange (fuseRange e arg)) e (setArgColors [] arg)+ app e arg = A.App (ExprRange (fuseRange e arg)) e arg - -- Translate an argument (inside @C.NamedArg . OpApp@).- toAbsOpArg cxt = traverse $ traverse $ toAbstractOpArg cxt+ -- Translate an argument.+ toAbsOpArg :: Precedence ->+ NamedArg (Either A.Expr (OpApp C.Expr)) ->+ ScopeM (NamedArg A.Expr)+ toAbsOpArg cxt =+ traverse $ traverse $ either return (toAbstractOpArg cxt) -- The hole left to the first @IdPart@ is filled with an expression in @LeftOperandCtx@. left f (IdPart _ : xs) es = inside f xs es@@ -1861,3 +2043,21 @@ e <- toAbsOpArg (RightOperandCtx f) e return [e] right _ _ _ = __IMPOSSIBLE__++ replacePlaceholders ::+ [NamedArg (MaybePlaceholder (OpApp e))] ->+ ScopeM ([A.LamBinding], [NamedArg (Either A.Expr (OpApp e))])+ replacePlaceholders [] = return ([], [])+ replacePlaceholders (a : as) = case namedArg a of+ NoPlaceholder x -> mapSnd (set (Right x) a :) <$>+ replacePlaceholders as+ Placeholder p -> do+ x <- freshName noRange "section"+ let i = argInfo a+ (ls, ns) <- replacePlaceholders as+ return ( A.DomainFree i x : ls+ , set (Left (Var x)) a : ns+ )+ where+ set :: a -> NamedArg b -> NamedArg a+ set x arg = fmap (fmap (const x)) arg
src/full/Agda/Syntax/Translation/InternalToAbstract.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TupleSections #-}@@ -26,7 +27,6 @@ import Prelude hiding (mapM_, mapM) import Control.Applicative-import Control.Arrow import Control.Monad.State hiding (mapM_, mapM) import Control.Monad.Reader hiding (mapM_, mapM) @@ -41,14 +41,16 @@ import Agda.Syntax.Literal import Agda.Syntax.Position-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)+import Agda.Syntax.Common import Agda.Syntax.Fixity-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Concrete (FieldAssignment'(..), exprFieldA) import Agda.Syntax.Info as Info import Agda.Syntax.Abstract as A import Agda.Syntax.Internal as I+import Agda.Syntax.Internal.Pattern as I+import Agda.Syntax.Scope.Base (isNameInScope, inverseScopeLookupName) -import Agda.TypeChecking.Monad as M hiding (MetaInfo)+import Agda.TypeChecking.Monad as M hiding (MetaInfo, tick) import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Reduce import {-# SOURCE #-} Agda.TypeChecking.Records@@ -62,6 +64,7 @@ import Agda.TypeChecking.DropArgs import Agda.Utils.Except ( MonadError(catchError) )+import Agda.Utils.Lens import Agda.Utils.List import Agda.Utils.Maybe import Agda.Utils.Monad@@ -74,37 +77,30 @@ -- Composition of reified applications ------------------------------------ -napps :: Expr -> [I.NamedArg Expr] -> TCM Expr+napps :: Expr -> [NamedArg Expr] -> TCM Expr napps e args = do dontShowImp <- not <$> showImplicitArguments let apply1 e arg | notVisible arg && dontShowImp = e | otherwise = App exprInfo e arg foldl' apply1 e <$> reify args -apps :: Expr -> [I.Arg Expr] -> TCM Expr+apps :: Expr -> [Arg Expr] -> TCM Expr apps e args = napps e $ map (fmap unnamed) args -reifyApp :: Expr -> [I.Arg Term] -> TCM Expr+reifyApp :: Expr -> [Arg Term] -> TCM Expr reifyApp e vs = apps e =<< reifyIArgs vs -reifyIArg :: Reify i a => I.Arg i -> TCM (I.Arg a)-reifyIArg i = Common.Arg (argInfo i) <$> reify (unArg i)+reifyIArg :: Reify i a => Arg i -> TCM (Arg a)+reifyIArg i = Arg (argInfo i) <$> reify (unArg i) -reifyIArgs :: Reify i a => [I.Arg i] -> TCM [I.Arg a]+reifyIArgs :: Reify i a => [Arg i] -> TCM [Arg a] reifyIArgs = mapM reifyIArg -reifyIArg' :: I.Arg e -> TCM (A.Arg e)-reifyIArg' e = flip Common.Arg (unArg e) <$> reify (argInfo e)--reifyIArgs' :: [I.Arg e] -> TCM [A.Arg e]-reifyIArgs' = mapM reifyIArg'- -- Composition of reified eliminations ------------------------------------ elims :: Expr -> [I.Elim' Expr] -> TCM Expr elims e [] = return e-elims e (I.Apply arg : es) = do- arg <- reifyIArg' arg+elims e (I.Apply arg : es) = elims (A.App exprInfo e $ fmap unnamed arg) es elims e (I.Proj d : es) = elims (A.App exprInfo (A.Proj d) $ defaultNamedArg e) es @@ -201,8 +197,7 @@ -- But apparently, it has no influence... -- Ulf, can you add an explanation? md <- liftTCM $ -- addContext (replicate (length ps) "x") $- displayForm f vs `catchError` \_ -> return Nothing- -- unquoted extended lambdas use fake names, so catch errors here+ displayForm f vs reportSLn "reify.display" 20 $ "display form of " ++ show f ++ " " ++ show ps ++ " " ++ show wps ++ ":\n " ++ show md case md of@@ -216,32 +211,36 @@ where -- Andreas, 2015-05-03: Ulf, please comment on what -- is the idea behind okDisplayForm.- okDisplayForm (DWithApp d ds []) =- okDisplayForm d && all okDisplayTerm ds+ -- Ulf, 2016-04-15: okDisplayForm should return True if the display form+ -- can serve as a valid left-hand side. That means checking that it is a+ -- defined name applied to valid lhs eliminators (projections or+ -- applications to constructor patterns).+ okDisplayForm (DWithApp d ds []) = okDisplayForm d && all okDisplayTerm ds okDisplayForm (DTerm (I.Def f vs)) = all okElim vs- okDisplayForm (DDef f es) = all okDElim es- okDisplayForm DDot{} = False- okDisplayForm DCon{} = False- okDisplayForm DTerm{} = True -- False?- okDisplayForm DWithApp{} = True -- False?+ okDisplayForm (DDef f es) = all okDElim es+ okDisplayForm DDot{} = False+ okDisplayForm DCon{} = False+ okDisplayForm DTerm{} = False+ okDisplayForm DWithApp{} = False okDisplayTerm (DTerm v) = okTerm v- okDisplayTerm DDot{} = True- okDisplayTerm DCon{} = True- okDisplayTerm DDef{} = False- okDisplayTerm _ = False+ okDisplayTerm DDot{} = True+ okDisplayTerm DCon{} = True+ okDisplayTerm DDef{} = False+ okDisplayTerm _ = False okDElim (I.Apply v) = okDisplayTerm $ unArg v- okDElim I.Proj{} = True -- True, man, or False? No clue what I am implementing here --Andreas, 2015-05-03+ okDElim I.Proj{} = True+ okArg = okTerm . unArg okElim (I.Apply a) = okArg a- okElim (I.Proj{}) = False+ okElim (I.Proj{}) = True okTerm (I.Var _ []) = True okTerm (I.Con c vs) = all okArg vs okTerm (I.Def x []) = isNoName $ qnameToConcrete x -- Handling wildcards in display forms- okTerm _ = True -- False+ okTerm _ = False -- Flatten a dt into (parentName, parentElims, withArgs). flattenWith :: DisplayTerm -> (QName, [I.Elim' DisplayTerm], [DisplayTerm])@@ -256,7 +255,6 @@ (f, vs, ds) -> do ds <- mapM termToPat ds vs <- mapM elimToPat vs- vs <- reifyIArgs' vs return $ SpineLHS i f vs (ds ++ wps) where ci = ConPatInfo ConPCon patNoRange@@ -271,11 +269,11 @@ Nothing -> __IMPOSSIBLE__ Just p -> p - termToPat (DCon c vs) = A.ConP ci (AmbQ [conName c]) <$> do- mapM argToPat =<< reifyIArgs' vs+ termToPat (DCon c vs) = tryRecPFromConP =<< do+ A.ConP ci (AmbQ [conName c]) <$> mapM argToPat vs - termToPat (DTerm (I.Con c vs)) = A.ConP ci (AmbQ [conName c]) <$> do- mapM (argToPat . fmap DTerm) =<< reifyIArgs' vs+ termToPat (DTerm (I.Con c vs)) = tryRecPFromConP =<< do+ A.ConP ci (AmbQ [conName c]) <$> mapM (argToPat . fmap DTerm) vs termToPat (DTerm (I.Def _ [])) = return $ A.WildP patNoRange termToPat (DDef _ []) = return $ A.WildP patNoRange@@ -312,11 +310,7 @@ instance Reify Literal Expr where reifyWhen = reifyWhenE- reify l@(LitInt {}) = return (A.Lit l)- reify l@(LitFloat {}) = return (A.Lit l)- reify l@(LitString {}) = return (A.Lit l)- reify l@(LitChar {}) = return (A.Lit l)- reify l@(LitQName {}) = return (A.Lit l)+ reify l = return (A.Lit l) instance Reify Term Expr where reifyWhen = reifyWhenE@@ -329,7 +323,6 @@ expandAnonDefs <- return expandAnonDefs0 `and2M` displayFormsEnabled v <- unSpine <$> instantiate v case v of- _ | isHackReifyToMeta v -> return $ A.Underscore emptyMetaInfo I.Var n es -> do let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es x <- liftTCM $ nameOfBV n `catchError` \_ -> freshName_ ("@" ++ show n)@@ -347,7 +340,7 @@ r <- getConstructorData x xs <- getRecordFieldNames r vs <- map unArg <$> reifyIArgs vs- return $ A.Rec exprInfo $ map (unArg *** id) $ filter keep $ zip xs vs+ return $ A.Rec exprInfo $ map (Left . uncurry FieldAssignment . mapFst unArg) $ filter keep $ zip xs vs False -> reifyDisplayForm x vs $ do ci <- getConstInfo x let Constructor{conPars = np} = theDef ci@@ -370,10 +363,7 @@ -- (see for example the parameter {i} to Data.Star.Star, which is also -- the first argument to the cons). -- @data Star {i}{I : Set i} ... where cons : {i : I} ...@- -- Ulf, 2014-07-19: Don't do any of this if we're reifying an- -- unquoted term (issue 1237).- unquote <- isReifyingUnquoted- if np == 0 || unquote then apps h es else do+ if np == 0 then apps h es else do -- Get name of first argument from type of constructor. -- Here, we need the reducing version of @telView@ -- because target of constructor could be a definition@@ -383,9 +373,9 @@ -- Andreas, 2012-09-18 -- If the first regular constructor argument is hidden, -- we keep the parameters to avoid confusion.- (Common.Dom info _ : _) | isHidden info -> do+ (Dom info _ : _) | isHidden info -> do let us = genericReplicate (np - n) $- setRelevance Relevant $ Common.Arg info underscore+ setRelevance Relevant $ Arg info underscore apps h $ us ++ es -- otherwise, we drop all parameters _ -> apps h es@@ -403,7 +393,6 @@ -- I.Lam info b | isAbsurdBody b -> return $ A.AbsurdLam exprInfo $ getHiding info I.Lam info b -> do (x,e) <- reify b- info <- reify info return $ A.Lam exprInfo (DomainFree info x) e -- Andreas, 2011-04-07 we do not need relevance information at internal Lambda I.Lit l -> reify l@@ -418,12 +407,12 @@ | otherwise -> mkPi b =<< reify a b -> mkPi b =<< do ifM (domainFree a (absBody b))- {- then -} (Common.Arg <$> reify (domInfo a) <*> pure underscore)+ {- then -} (pure $ Arg (domInfo a) underscore) {- else -} (reify a) where- mkPi b (Common.Arg info a) = do+ mkPi b (Arg info a) = do (x, b) <- reify b- return $ A.Pi exprInfo [TypedBindings noRange $ Common.Arg info (TBind noRange [pure x] a)] b+ return $ A.Pi exprInfo [TypedBindings noRange $ Arg info (TBind noRange [pure x] a)] b -- We can omit the domain type if it doesn't have any free variables -- and it's mentioned in the target type. domainFree a b = do@@ -437,16 +426,14 @@ apps x' =<< reifyIArgs vs I.DontCare v -> A.DontCare <$> reifyTerm expandAnonDefs v I.Shared p -> reifyTerm expandAnonDefs $ derefPtr p- I.ExtLam cls args -> do- x <- freshName_ "extlam"- reifyExtLam (qnameFromList [x]) 0 cls (map (fmap unnamed) args) where- -- Andreas, 2012-10-20 expand a copy in an anonymous module+ -- Andreas, 2012-10-20 expand a copy if not in scope -- to improve error messages. -- Don't do this if we have just expanded into a display form, -- otherwise we loop! reifyDef :: Bool -> QName -> I.Args -> TCM Expr- reifyDef True x@(QName m name) vs | A.isAnonymousModuleName m = do+ reifyDef True x vs =+ ifM (not . null . inverseScopeLookupName x <$> getScope) (reifyDef' x vs) $ do r <- reduceDefCopy x vs case r of YesReduction _ v -> do@@ -480,7 +467,7 @@ apps (A.AbsurdLam exprInfo h) =<< reifyIArgs vs _ -> cont reifyAbsurdLambda $ do- (pad, vs :: [I.NamedArg Term]) <- do+ (pad, vs :: [NamedArg Term]) <- do case mdefn of Nothing -> return ([], map (fmap unnamed) $ genericDrop n vs) Just defn -> do@@ -504,8 +491,7 @@ return (np, map (argFromDom . (fmap $ const whocares)) as, dom) _ -> return (0, [], __IMPOSSIBLE__) -- Now pad' ++ vs' = drop n (pad ++ vs)- pad' <- reifyIArgs' $ genericDrop n pad- let vs' :: [I.Arg Term]+ let pad' = genericDrop n pad vs' = genericDrop (max 0 (n - size pad)) vs -- Andreas, 2012-04-21: get rid of hidden underscores {_} -- Keep non-hidden arguments of the padding@@ -528,21 +514,21 @@ let apps = foldl' (\e a -> A.App exprInfo e (fmap unnamed a)) napps (A.Def x `apps` pad) =<< reifyIArgs vs - reifyExtLam :: QName -> Int -> [I.Clause] -> [I.NamedArg Term] -> TCM Expr+ reifyExtLam :: QName -> Int -> [I.Clause] -> [NamedArg Term] -> TCM Expr reifyExtLam x n cls vs = do reportSLn "reify.def" 10 $ "reifying extended lambda with definition: x = " ++ show x -- drop lambda lifted arguments cls <- mapM (reify . QNamed x . dropArgs n) $ cls let cx = nameConcrete $ qnameName x- dInfo = mkDefInfo cx defaultFixity' PublicAccess ConcreteDef (getRange x)+ dInfo = mkDefInfo cx noFixity' PublicAccess ConcreteDef (getRange x) napps (A.ExtendedLam exprInfo dInfo x cls) =<< reifyIArgs vs -- | @nameFirstIfHidden n (a1->...an->{x:a}->b) ({e} es) = {x = e} es@-nameFirstIfHidden :: [I.Dom (ArgName, t)] -> [I.Arg a] -> [I.NamedArg a]+nameFirstIfHidden :: [Dom (ArgName, t)] -> [Arg a] -> [NamedArg a] nameFirstIfHidden _ [] = [] nameFirstIfHidden [] (_ : _) = __IMPOSSIBLE__-nameFirstIfHidden (dom : _) (Common.Arg info e : es) | isHidden info =- Common.Arg info (Named (Just $ unranged $ fst $ unDom dom) e) :+nameFirstIfHidden (dom : _) (Arg info e : es) | isHidden info =+ Arg info (Named (Just $ unranged $ fst $ unDom dom) e) : map (fmap unnamed) es nameFirstIfHidden _ es = map (fmap unnamed) es @@ -551,21 +537,19 @@ reifyWhen b = traverse (reifyWhen b) -- | Skip reification of implicit and irrelevant args if option is off.-instance (Reify i a) => Reify (I.Arg i) (A.Arg a) where- reify (Common.Arg info i) = liftM2 Common.Arg (reify info)- (flip reifyWhen i =<< condition)+instance (Reify i a) => Reify (Arg i) (Arg a) where+ reify (Arg info i) = Arg info <$> (flip reifyWhen i =<< condition) where condition = (return (argInfoHiding info /= Hidden) `or2M` showImplicitArguments) `and2M` (return (argInfoRelevance info /= Irrelevant) `or2M` showIrrelevantArguments)- reifyWhen b i = do info <- reify $ argInfo i- traverse (reifyWhen b) $ i { argInfo = info }+ reifyWhen b i = traverse (reifyWhen b) i instance Reify Elim Expr where reifyWhen = reifyWhenE reify e = case e of I.Apply v -> appl "apply" <$> reify v- I.Proj f -> appl "proj" <$> reify ((defaultArg $ I.Def f []) :: I.Arg Term)+ I.Proj f -> appl "proj" <$> reify ((defaultArg $ I.Def f []) :: Arg Term) where- appl :: String -> A.Arg Expr -> Expr+ appl :: String -> Arg Expr -> Expr appl s v = A.App exprInfo (A.Lit (LitString noRange s)) $ fmap unnamed v type NamedClause = QNamed I.Clause@@ -591,7 +575,7 @@ -- | Move dots on variables so that each variable is bound at its first -- non-hidden occurrence (if any). If all occurrences are hidden it's bound -- at the first occurrence.-shuffleDots :: ([A.NamedArg A.Pattern], [A.Pattern]) -> TCM ([A.NamedArg A.Pattern], [A.Pattern])+shuffleDots :: ([NamedArg A.Pattern], [A.Pattern]) -> TCM ([NamedArg A.Pattern], [A.Pattern]) shuffleDots (ps, wps) = do return $ (`evalState` xs) $ (`runReaderT` NotHidden)@@ -622,6 +606,7 @@ A.AbsurdP{} -> mempty A.LitP{} -> mempty A.AsP{} -> __IMPOSSIBLE__+ A.RecP _ as -> foldMap (foldMap (patVars h)) as shouldBind x = do xs <- get@@ -652,6 +637,7 @@ A.AbsurdP{} -> pure p A.LitP{} -> pure p A.AsP{} -> __IMPOSSIBLE__+ A.RecP i as -> A.RecP i <$> traverse (traverse redotPat) as redotVar p x = do b <- shouldBind x@@ -662,8 +648,8 @@ -- | Removes implicit arguments that are not needed, that is, that don't bind -- any variables that are actually used and doesn't do pattern matching.-stripImplicits :: ([A.NamedArg A.Pattern], [A.Pattern]) ->- TCM ([A.NamedArg A.Pattern], [A.Pattern])+stripImplicits :: ([NamedArg A.Pattern], [A.Pattern]) ->+ TCM ([NamedArg A.Pattern], [A.Pattern]) stripImplicits (ps, wps) = do -- v if show-implicit we don't need the names ifM showImplicitArguments (return (map (unnamed . namedThing <$>) ps, wps)) $ do let vars = dotVars (ps, wps)@@ -694,6 +680,7 @@ A.LitP _ -> Set.empty A.AsP _ _ p -> patVars p A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- Set.empty+ A.RecP _ as -> foldMap (foldMap patVars) as -- Replace dot variables by ._ if they use implicitly bound variables. This -- is slightly nicer than making the implicts explicit.@@ -744,6 +731,7 @@ A.LitP _ -> p A.AsP i x p -> A.AsP i x $ stripPat p A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- p+ A.RecP i fs -> A.RecP i $ map (fmap stripPat) fs -- TODO Andreas: is this right? noInterestingBindings p = Set.null $ dvs `Set.intersection` patVars p@@ -762,7 +750,7 @@ isConPat :: a -> Bool isConPat _ = False -instance DotVars a => DotVars (A.Arg a) where+instance DotVars a => DotVars (Arg a) where dotVars a = if notVisible a && not (isConPat a) -- Hidden constructor patterns are visible! then Set.empty else dotVars (unArg a)@@ -778,9 +766,12 @@ instance (DotVars a, DotVars b) => DotVars (a, b) where dotVars (x, y) = Set.union (dotVars x) (dotVars y) +instance (DotVars a, DotVars b) => DotVars (Either a b) where+ dotVars = either dotVars dotVars+ instance DotVars A.Clause where- dotVars (A.Clause _ rhs []) = dotVars rhs- dotVars (A.Clause _ rhs (_:_)) = __IMPOSSIBLE__ -- cannot contain where clauses?+ dotVars (A.Clause _ rhs [] _) = dotVars rhs+ dotVars (A.Clause _ rhs (_:_) _) = __IMPOSSIBLE__ -- cannot contain where clauses? instance DotVars A.Pattern where dotVars p = case p of@@ -793,6 +784,8 @@ A.LitP _ -> Set.empty A.AsP _ _ p -> dotVars p A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- Set.empty+ A.RecP _ fs -> dotVars fs+ isConPat A.ConP{} = True isConPat A.LitP{} = True isConPat _ = False@@ -820,17 +813,25 @@ A.Set _ _ -> Set.empty A.Prop _ -> Set.empty A.Let _ _ _ -> __IMPOSSIBLE__- A.Rec _ es -> dotVars $ map snd es- A.RecUpdate _ e es -> dotVars (e, map snd es)+ A.Rec _ es -> dotVars es+ A.RecUpdate _ e es -> dotVars (e, es) A.ETel _ -> __IMPOSSIBLE__ A.QuoteGoal {} -> __IMPOSSIBLE__ A.QuoteContext {} -> __IMPOSSIBLE__ A.Quote {} -> __IMPOSSIBLE__ A.QuoteTerm {} -> __IMPOSSIBLE__ A.Unquote {} -> __IMPOSSIBLE__+ A.Tactic {} -> __IMPOSSIBLE__ A.DontCare v -> dotVars v- A.PatternSyn n -> Set.empty+ A.PatternSyn {} -> Set.empty+ A.Macro {} -> Set.empty +instance DotVars a => DotVars (FieldAssignment' a) where+ dotVars a = dotVars (a ^. exprFieldA)++instance DotVars A.ModuleName where+ dotVars _ = Set.empty+ instance DotVars RHS where dotVars (RHS e) = dotVars e dotVars AbsurdRHS = Set.empty@@ -844,48 +845,89 @@ dotVars (TBind _ _ e) = dotVars e dotVars (TLet _ _) = __IMPOSSIBLE__ -- Since the internal syntax has no let bindings left +class MonadTick m where+ tick :: m Nat +newtype TickT m a = TickT { unTickT :: StateT Nat m a }+ deriving (Functor, Applicative, Monad, MonadReader r, MonadTrans, MonadIO) -- MonadExcept e,++instance Monad m => MonadTick (TickT m) where+ tick = TickT $ do i <- get; put (i + 1); return i++instance MonadState s m => MonadState s (TickT m) where+ state f = lift $ state f -- TickT $ StateT $ \ n -> (,n) <$> state f++instance MonadTCM tcm => MonadTCM (TickT tcm) where+ liftTCM = lift . liftTCM++runTickT :: Monad m => TickT m a -> m a+runTickT m = evalStateT (unTickT m) 0+ -- TODO: implement reifyPatterns on de Bruijn patterns ( numberPatVars )-reifyPatterns :: I.Telescope -> Permutation -> [I.NamedArg I.Pattern] -> TCM [A.NamedArg A.Pattern]-reifyPatterns tel perm ps = evalStateT (reifyArgs ps) 0+reifyPatterns :: I.Telescope -> Permutation -> [NamedArg I.Pattern] -> TCM [NamedArg A.Pattern]+reifyPatterns tel perm ps = runTickT (reifyArgs ps) where- reifyArgs :: [I.NamedArg I.Pattern] -> StateT Nat TCM [A.NamedArg A.Pattern]+ reifyArgs :: [NamedArg I.Pattern] -> TickT TCM [NamedArg A.Pattern] reifyArgs is = mapM reifyArg is - reifyArg :: I.NamedArg I.Pattern -> StateT Nat TCM (A.NamedArg A.Pattern)+ reifyArg :: NamedArg I.Pattern -> TickT TCM (NamedArg A.Pattern) reifyArg i = stripNameFromExplicit <$>- traverse (traverse reifyPat) (setArgColors [] i) -- TODO guilhem+ traverse (traverse reifyPat) i stripNameFromExplicit a | getHiding a == NotHidden = fmap (unnamed . namedThing) a | otherwise = a - tick = do i <- get; put (i + 1); return i- translate n = fromMaybe __IMPOSSIBLE__ $ vars !!! n where vars = permPicks $ invertP __IMPOSSIBLE__ perm - reifyPat :: I.Pattern -> StateT Nat TCM A.Pattern- reifyPat p = case p of+ reifyPat :: I.Pattern -> TickT TCM A.Pattern+ reifyPat p = do+ liftTCM $ reportSLn "reify.pat" 80 $ "reifying pattern " ++ show p+ case p of I.VarP "()" -> A.AbsurdP patNoRange <$ tick -- HACK I.VarP s -> do i <- tick let j = translate i- lift $ A.VarP <$> nameOfBV (size tel - 1 - j)+ liftTCM $ A.VarP <$> nameOfBV (size tel - 1 - j) I.DotP v -> do- t <- lift $ reify v+ t <- liftTCM $ reify v _ <- tick let vars = Set.map show (dotVars t) t' = if Set.member "()" vars then underscore else t return $ A.DotP patNoRange t' I.LitP l -> return $ A.LitP l I.ProjP d -> return $ A.DefP patNoRange d []- I.ConP c cpi ps -> A.ConP ci (AmbQ [conName c]) <$> reifyArgs ps- where ci = flip ConPatInfo patNoRange $ fromMaybe ConPCon $ I.conPRecord cpi+ I.ConP c cpi ps -> do+ liftTCM $ reportSLn "reify.pat" 60 $ "reifying pattern " ++ show p+ tryRecPFromConP =<< do A.ConP ci (AmbQ [conName c]) <$> reifyArgs ps+ where+ origin = fromMaybe ConPCon $ I.conPRecord cpi+ ci = ConPatInfo origin patNoRange +-- | If the record constructor is generated or the user wrote a record pattern,+-- turn constructor pattern into record pattern.+-- Otherwise, keep constructor pattern.+tryRecPFromConP :: MonadTCM tcm => A.Pattern -> tcm A.Pattern+tryRecPFromConP p = do+ let fallback = return p+ case p of+ A.ConP ci (AmbQ [c]) ps -> do+ caseMaybeM (liftTCM $ isRecordConstructor c) fallback $ \ (r, def) -> do+ -- If the record constructor is generated or the user wrote a record pattern,+ -- print record pattern.+ -- Otherwise, print constructor pattern.+ if recNamedCon def && patOrigin ci /= ConPRec then fallback else do+ fs <- liftTCM $ getRecordFieldNames r+ unless (length fs == length ps) __IMPOSSIBLE__+ return $ A.RecP patNoRange $ zipWith mkFA fs ps+ where+ mkFA ax nap = FieldAssignment (unArg ax) (namedArg nap)+ _ -> __IMPOSSIBLE__+ instance Reify NamedClause A.Clause where- reify (QNamed f (I.Clause _ tel perm ps body _)) = addCtxTel tel $ do+ reify (QNamed f (I.Clause _ tel ps' body _ catchall)) = addCtxTel tel $ do ps <- reifyPatterns tel perm ps lhs <- liftTCM $ reifyDisplayFormP $ SpineLHS info f ps [] -- LHS info (LHSHead f ps) [] nfv <- getDefFreeVars f `catchError` \_ -> return 0@@ -893,11 +935,13 @@ reportSLn "reify.clause" 60 $ "reifying NamedClause, lhs = " ++ show lhs rhs <- reify $ renameP (reverseP perm) <$> body reportSLn "reify.clause" 60 $ "reifying NamedClause, rhs = " ++ show rhs- let result = A.Clause (spineToLhs lhs) rhs []+ let result = A.Clause (spineToLhs lhs) rhs [] catchall reportSLn "reify.clause" 60 $ "reified NamedClause, result = " ++ show result return result where info = LHSRange noRange+ ps = unnumberPatVars ps'+ perm = dbPatPerm ps' dropParams n (SpineLHS i f ps wps) = SpineLHS i f (genericDrop n ps) wps stripImps (SpineLHS i f ps wps) = do@@ -949,16 +993,13 @@ instance Reify I.Telescope A.Telescope where reify EmptyTel = return [] reify (ExtendTel arg tel) = do- Common.Arg info e <- reify arg+ Arg info e <- reify arg (x,bs) <- reify tel let r = getRange e- return $ TypedBindings r (Common.Arg info (TBind r [pure x] e)) : bs--instance Reify I.ArgInfo A.ArgInfo where- reify i = flip (mapArgInfoColors.const) i <$> reify (argInfoColors i)+ return $ TypedBindings r (Arg info (TBind r [pure x] e)) : bs -instance Reify i a => Reify (I.Dom i) (A.Arg a) where- reify (Common.Dom info i) = liftM2 Common.Arg (reify info) (reify i)+instance Reify i a => Reify (Dom i) (Arg a) where+ reify (Dom info i) = Arg info <$> reify i instance Reify i a => Reify [i] [a] where reify = traverse reify
+ src/full/Agda/Syntax/Translation/ReflectedToAbstract.hs view
@@ -0,0 +1,163 @@+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UndecidableInstances #-}++{-# OPTIONS_GHC -fwarn-missing-signatures #-}++module Agda.Syntax.Translation.ReflectedToAbstract where++import Control.Applicative+import Control.Monad.Reader++import Data.Traversable as Trav hiding (mapM)++import Agda.Syntax.Fixity+import Agda.Syntax.Literal+import Agda.Syntax.Position+import Agda.Syntax.Info+import Agda.Syntax.Common+import Agda.Syntax.Abstract as A hiding (Apply)+import Agda.Syntax.Reflected as R++import Agda.TypeChecking.Monad as M hiding (MetaInfo)+import Agda.Syntax.Scope.Monad (getCurrentModule)++import Agda.Utils.Maybe+import Agda.Utils.List+import Agda.Utils.Functor++type Names = [Name]++type WithNames a = ReaderT Names TCM a+-- Note: we only need the TCM for fresh names++-- | Adds a new unique name to the current context.+withName :: String -> (Name -> WithNames a) -> WithNames a+withName s f = do+ name <- freshName_ s+ ctx <- asks $ map nameConcrete+ let name' = head $ filter (notTaken ctx) $ iterate nextName name+ local (name:) $ f name'+ where+ notTaken xs x = isNoName x || nameConcrete x `notElem` xs++-- | Returns the name of the variable with the given de Bruijn index.+askName :: Int -> WithNames (Maybe Name)+askName i = reader (!!! i)++class ToAbstract r a | r -> a where+ toAbstract :: r -> WithNames a++-- | Translate reflected syntax to abstract, using the names from the current typechecking context.+toAbstract_ :: ToAbstract r a => r -> TCM a+toAbstract_ = withShowAllArguments . toAbstractWithoutImplicit++-- | Drop implicit arguments unless --show-implicit is on.+toAbstractWithoutImplicit :: ToAbstract r a => r -> TCM a+toAbstractWithoutImplicit x = runReaderT (toAbstract x) =<< getContextNames++instance ToAbstract r a => ToAbstract (Named name r) (Named name a) where+ toAbstract = traverse toAbstract++instance ToAbstract r a => ToAbstract (Arg r) (NamedArg a) where+ toAbstract (Arg i x) = Arg i <$> toAbstract (unnamed x)++instance ToAbstract [Arg Term] [NamedArg Expr] where+ toAbstract = traverse toAbstract++instance ToAbstract r Expr => ToAbstract (Dom r, Name) (A.TypedBindings) where+ toAbstract (Dom i x, name) = do+ dom <- toAbstract x+ return $ TypedBindings noRange $ Arg i $ TBind noRange [pure name] dom++instance ToAbstract (Expr, Elim) Expr where+ toAbstract (f, Apply arg) = do+ arg <- toAbstract arg+ showImp <- lift showImplicitArguments+ return $ if showImp || getHiding arg == NotHidden+ then App (ExprRange noRange) f arg+ else f++instance ToAbstract (Expr, Elims) Expr where+ toAbstract (f, elims) = foldM (curry toAbstract) f elims++instance ToAbstract r a => ToAbstract (R.Abs r) (a, Name) where+ toAbstract (Abs s x) = withName s' $ \name -> (,) <$> toAbstract x <*> return name+ where s' = if (isNoName s) then "z" else s -- TODO: only do this when var is free++instance ToAbstract Literal Expr where+ toAbstract l = return (A.Lit l)++instance ToAbstract Term Expr where+ toAbstract t = case t of+ R.Var i es -> do+ let fallback = withName ("@" ++ show i) return+ name <- fromMaybeM fallback $ askName i+ toAbstract (A.Var name, es)+ R.Con c es -> toAbstract (A.Con (AmbQ [killRange c]), es)+ R.Def f es -> toAbstract (A.Def (killRange f), es)+ R.Lam h t -> do+ (e, name) <- toAbstract t+ let info = setHiding h defaultArgInfo+ return $ A.Lam exprNoRange (DomainFree info name) e+ R.ExtLam cs es -> do+ name <- freshName_ extendedLambdaName+ m <- lift $ getCurrentModule+ let qname = qualify m name+ cname = nameConcrete name+ defInfo = mkDefInfo cname noFixity' PublicAccess ConcreteDef noRange+ cs <- toAbstract $ map (QNamed qname) cs+ toAbstract (A.ExtendedLam exprNoRange defInfo qname cs, es)+ R.Pi a b -> do+ (b, name) <- toAbstract b+ a <- toAbstract (a, name)+ return $ A.Pi exprNoRange [a] b+ R.Sort s -> toAbstract s+ R.Lit l -> toAbstract l+ R.Meta x es -> toAbstract (A.Underscore info, es)+ where info = emptyMetaInfo{ metaNumber = Just x }+ R.Unknown -> return $ Underscore emptyMetaInfo++mkSet :: Expr -> Expr+mkSet e = App exprNoRange (A.Set exprNoRange 0) $ defaultNamedArg e++instance ToAbstract Sort Expr where+ toAbstract (SetS x) = mkSet <$> toAbstract x+ toAbstract (LitS x) = return $ A.Set exprNoRange x+ toAbstract UnknownS = return $ mkSet $ Underscore emptyMetaInfo++instance ToAbstract R.Pattern (Names, A.Pattern) where+ toAbstract pat = case pat of+ R.ConP c args -> do+ (names, args) <- toAbstractPats args+ return (names, A.ConP (ConPatInfo ConPCon patNoRange) (AmbQ [killRange c]) args)+ R.DotP -> return ([], A.DotP patNoRange (Underscore emptyMetaInfo))+ R.VarP s -> withName s' $ \name -> return ([name], A.VarP name)+ where s' = if (isNoName s) then "z" else s --TODO: only do this when var is free+ R.LitP l -> return ([], A.LitP l)+ R.AbsurdP -> return ([], A.AbsurdP patNoRange)+ R.ProjP p -> return ([], A.DefP patNoRange p [])++toAbstractPats :: [Arg R.Pattern] -> WithNames (Names, [NamedArg A.Pattern])+toAbstractPats pats = case pats of+ [] -> return ([], [])+ p:ps -> do+ (names, p) <- (distributeF . fmap distributeF) <$> toAbstract p+ (namess, ps) <- local (names++) $ toAbstractPats ps+ return (namess++names, p:ps)++instance ToAbstract (QNamed R.Clause) A.Clause where+ toAbstract (QNamed name (R.Clause pats rhs)) = do+ (names, pats) <- toAbstractPats pats+ rhs <- local (names++) $ toAbstract rhs+ let lhs = spineToLhs $ SpineLHS (LHSRange noRange) name pats []+ return $ A.Clause lhs (RHS rhs) [] False+ toAbstract (QNamed name (R.AbsurdClause pats)) = do+ (_, pats) <- toAbstractPats pats+ let lhs = spineToLhs $ SpineLHS (LHSRange noRange) name pats []+ return $ A.Clause lhs AbsurdRHS [] False++instance ToAbstract [QNamed R.Clause] [A.Clause] where+ toAbstract = traverse toAbstract
+ src/full/Agda/Syntax/Treeless.hs view
@@ -0,0 +1,150 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE PatternGuards #-}++-- | The treeless syntax is intended to be used as input for the compiler backends.+-- It is more low-level than Internal syntax and is not used for type checking.+--+-- Some of the features of treeless syntax are:+-- - case expressions instead of case trees+-- - no instantiated datatypes / constructors+module Agda.Syntax.Treeless+ ( module Agda.Syntax.Abstract.Name+ , module Agda.Syntax.Treeless+ ) where++import Prelude++import Data.Map (Map)+import Data.Typeable (Typeable)++import Agda.Syntax.Position+import Agda.Syntax.Literal+import Agda.Syntax.Abstract.Name++data Compiled = Compiled+ { cTreeless :: TTerm+ , cArgUsage :: [Bool] }+ deriving (Typeable, Show, Eq, Ord)++type Args = [TTerm]++-- this currently assumes that TApp is translated in a lazy/cbn fashion.+-- The AST should also support strict translation.+--+-- All local variables are using de Bruijn indices.+data TTerm = TVar Int+ | TPrim TPrim+ | TDef QName+ | TApp TTerm Args+ | TLam TTerm+ | TLit Literal+ | TCon QName+ | TLet TTerm TTerm+ -- ^ introduces a new local binding. The bound term+ -- MUST only be evaluated if it is used inside the body.+ -- Sharing may happen, but is optional.+ -- It is also perfectly valid to just inline the bound term in the body.+ | TCase Int CaseType TTerm [TAlt]+ -- ^ Case scrutinee (always variable), case type, default value, alternatives+ -- First, all TACon alternatives are tried; then all TAGuard alternatives+ -- in top to bottom order.+ -- TACon alternatives must not overlap.+ | TUnit -- used for levels right now+ | TSort+ | TErased+ | TError TError+ -- ^ A runtime error, something bad has happened.+ deriving (Typeable, Show, Eq, Ord)++-- | Compiler-related primitives. This are NOT the same thing as primitives+-- in Agda's surface or internal syntax!+data TPrim = PAdd | PSub | PMul | PQuot | PRem | PGeq | PLt | PEq | PIf | PSeq+ deriving (Typeable, Show, Eq, Ord)++mkTApp :: TTerm -> Args -> TTerm+mkTApp x [] = x+mkTApp (TApp x as) bs = TApp x (as ++ bs)+mkTApp x as = TApp x as++tAppView :: TTerm -> [TTerm]+tAppView = view+ where+ view t = case t of+ TApp a bs -> view a ++ bs+ _ -> [t]++-- | Introduces a new binding+mkLet :: TTerm -> TTerm -> TTerm+mkLet x body = TLet x body++tInt :: Integer -> TTerm+tInt = TLit . LitNat noRange++intView :: TTerm -> Maybe Integer+intView (TLit (LitNat _ x)) = Just x+intView _ = Nothing++tPlusK :: Integer -> TTerm -> TTerm+tPlusK 0 n = n+tPlusK k n | k < 0 = tOp PSub n (tInt (-k))+tPlusK k n = tOp PAdd (tInt k) n++-- -(k + n)+tNegPlusK :: Integer -> TTerm -> TTerm+tNegPlusK k n = tOp PSub (tInt (-k)) n++plusKView :: TTerm -> Maybe (Integer, TTerm)+plusKView (TApp (TPrim PAdd) [k, n]) | Just k <- intView k = Just (k, n)+plusKView _ = Nothing++negPlusKView :: TTerm -> Maybe (Integer, TTerm)+negPlusKView (TApp (TPrim PSub) [k, n]) | Just k <- intView k = Just (-k, n)+negPlusKView _ = Nothing++tOp :: TPrim -> TTerm -> TTerm -> TTerm+tOp op a b = TApp (TPrim op) [a, b]++tUnreachable :: TTerm+tUnreachable = TError TUnreachable++data CaseType+ = CTData QName -- case on datatype+ | CTChar+ | CTString+ | CTQName+ deriving (Typeable, Show, Eq, Ord)++data TAlt+ = TACon { aCon :: QName, aArity :: Int, aBody :: TTerm }+ -- ^ Matches on the given constructor. If the match succeeds,+ -- the pattern variables are prepended to the current environment+ -- (pushes all existing variables aArity steps further away)+ | TAGuard { aGuard :: TTerm, aBody :: TTerm }+ -- ^ Binds no variables+ | TALit { aLit :: Literal, aBody:: TTerm }+ deriving (Typeable, Show, Eq, Ord)++data TError+ = TUnreachable+ -- ^ Code which is unreachable. E.g. absurd branches or missing case defaults.+ -- Runtime behaviour of unreachable code is undefined, but preferably+ -- the program will exit with an error message. The compiler is free+ -- to assume that this code is unreachable and to remove it.+ deriving (Typeable, Show, Eq, Ord)+++class Unreachable a where+ -- | Checks if the given expression is unreachable or not.+ isUnreachable :: a -> Bool++instance Unreachable TAlt where+ isUnreachable = isUnreachable . aBody++instance Unreachable TTerm where+ isUnreachable (TError TUnreachable{}) = True+ isUnreachable (TLet _ b) = isUnreachable b+ isUnreachable _ = False++instance KillRange Compiled where+ killRange c = c -- bogus, but not used anyway+
src/full/Agda/Termination/CallGraph.hs view
@@ -1,8 +1,8 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE ImplicitParams #-}-{-# LANGUAGE StandaloneDeriving #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE ImplicitParams #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TupleSections #-} -- | Call graphs and related concepts, more or less as defined in -- \"A Predicative Analysis of Structural Recursion\" by@@ -30,35 +30,21 @@ import Prelude hiding (null) -import Data.Foldable (Foldable)-import qualified Data.Foldable as Fold-import Data.Function import qualified Data.List as List-import Data.Map (Map, (!))-import qualified Data.Map as Map import Data.Monoid import Data.Set (Set)-import qualified Data.Set as Set-import Data.Traversable (Traversable)-import qualified Data.Traversable as Trav import Agda.Termination.CallMatrix (CallMatrix, callMatrix, CallMatrixAug(..), CMSet(..), CallComb(..)) import qualified Agda.Termination.CallMatrix as CMSet import Agda.Termination.CutOff-import Agda.Termination.Order import Agda.Termination.SparseMatrix as Matrix hiding (tests)-import Agda.Termination.Semiring (HasZero(..), Semiring)-import qualified Agda.Termination.Semiring as Semiring -import Agda.Utils.Favorites (Favorites(Favorites))+import Agda.Utils.Favorites (Favorites) import qualified Agda.Utils.Favorites as Fav import Agda.Utils.Graph.AdjacencyMap.Unidirectional (Edge(..),Graph(..)) import qualified Agda.Utils.Graph.AdjacencyMap.Unidirectional as Graph import Agda.Utils.Function-import Agda.Utils.List hiding (tests)-import Agda.Utils.Map-import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Null import Agda.Utils.PartialOrd@@ -68,9 +54,6 @@ import Agda.Utils.TestHelpers import Agda.Utils.Tuple -#include "undefined.h"-import Agda.Utils.Impossible- ------------------------------------------------------------------------ -- Calls @@ -124,7 +107,7 @@ -- | Converts a list of calls with associated meta information to a -- call graph. -fromList :: Monoid cinfo => [Call cinfo] -> CallGraph cinfo+fromList :: [Call cinfo] -> CallGraph cinfo fromList = CallGraph . Graph.fromListWith CMSet.union -- | 'null' checks whether the call graph is completely disconnected.@@ -134,21 +117,19 @@ -- | Takes the union of two call graphs. -union :: Monoid cinfo- => CallGraph cinfo -> CallGraph cinfo -> CallGraph cinfo+union :: CallGraph cinfo -> CallGraph cinfo -> CallGraph cinfo union (CallGraph cs1) (CallGraph cs2) = CallGraph $ Graph.unionWith CMSet.union cs1 cs2 -- | 'CallGraph' is a monoid under 'union'. -instance Monoid cinfo => Monoid (CallGraph cinfo) where+instance Monoid (CallGraph cinfo) where mempty = empty mappend = union -- | Inserts a call into a call graph. -insert :: Monoid cinfo- => Node -> Node -> CallMatrix -> cinfo+insert :: Node -> Node -> CallMatrix -> cinfo -> CallGraph cinfo -> CallGraph cinfo insert s t cm cinfo = CallGraph . Graph.insertEdgeWith CMSet.union e . theCallGraph where e = mkCall s t cm cinfo@@ -265,7 +246,7 @@ -- | Generates a call graph. -callGraph :: (Monoid cinfo, Arbitrary cinfo) => Gen (CallGraph cinfo)+callGraph :: Arbitrary cinfo => Gen (CallGraph cinfo) callGraph = do indices <- fmap List.nub arbitrary n <- natural
src/full/Agda/Termination/CallMatrix.hs view
@@ -17,18 +17,14 @@ -- , tests -- ) where -import Data.List as List hiding (union, insert) import Data.Monoid import Data.Foldable (Foldable)-import qualified Data.Foldable as Fold import Data.Traversable (Traversable)-import qualified Data.Traversable as Trav import Agda.Termination.CutOff import Agda.Termination.Order as Order hiding (tests) import Agda.Termination.SparseMatrix as Matrix hiding (tests)-import Agda.Termination.Semiring (HasZero(..), Semiring)-import qualified Agda.Termination.Semiring as Semiring+import Agda.Termination.Semiring (HasZero(..)) import Agda.Utils.Favorites (Favorites) import qualified Agda.Utils.Favorites as Fav
src/full/Agda/Termination/Inlining.hs view
@@ -52,13 +52,10 @@ import Control.Applicative import Control.Monad.State -import Data.Maybe (fromMaybe)-import Data.Monoid-import Data.Foldable (foldMap) import Data.Traversable (traverse) import Data.List as List -import Agda.Syntax.Common as Common hiding (NamedArg)+import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.Syntax.Internal.Pattern import Agda.TypeChecking.Monad@@ -68,6 +65,7 @@ import Agda.TypeChecking.DisplayForm import Agda.TypeChecking.Telescope +import Agda.Utils.List (downFrom) import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Permutation@@ -191,8 +189,7 @@ applySubst (renamingR perm) . applySubst (renaming $ reverseP $ clausePerm wcl) <$> clauseBody wcl- return wcl { clausePerm = perm- , namedClausePats = pats+ return wcl { namedClausePats = numberPatVars perm pats , clauseBody = body , clauseType = Nothing -- TODO: renaming of original clause type }@@ -264,7 +261,7 @@ -- information right. [a] | null es' -> do let pad = a - length vs- vs' = raise pad vs ++ [defaultArg (Var i []) | i <- reverse [0..pad - 1]]+ vs' = raise pad vs ++ map (defaultArg . var) (downFrom pad) Just disp <- displayForm f vs' return $ foldr (\_ -> Lam defaultArgInfo . Abs "") (dtermToTerm disp) (replicate pad ()) _ -> __IMPOSSIBLE__
src/full/Agda/Termination/Monad.hs view
@@ -1,10 +1,10 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE DeriveFoldable #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses #-} -- | The monad for the termination checker. --@@ -22,13 +22,11 @@ import Control.Monad.State import Data.Foldable (Foldable)-import Data.Functor ((<$>))-import qualified Data.List as List import Data.Traversable (Traversable) import Agda.Interaction.Options -import Agda.Syntax.Abstract (QName, IsProjP(..), AllNames)+import Agda.Syntax.Abstract (IsProjP(..), AllNames) import Agda.Syntax.Common (Delayed(..), Induction(..), Dom(..)) import Agda.Syntax.Internal import Agda.Syntax.Literal
src/full/Agda/Termination/Order.hs view
@@ -1,6 +1,6 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE ImplicitParams #-}+{-# LANGUAGE ImplicitParams #-} -- | An Abstract domain of relative sizes, i.e., differences -- between size of formal function parameter and function argument@@ -19,10 +19,8 @@ , tests ) where -import Data.Foldable (Foldable) import qualified Data.Foldable as Fold import Data.List as List hiding (union, insert)-import Data.Monoid import Agda.Termination.CutOff import Agda.Termination.SparseMatrix as Matrix hiding (tests)
src/full/Agda/Termination/Semiring.hs view
@@ -45,7 +45,7 @@ -- I think it's OK to use the same x, y, z triple for all the -- properties below. -semiringInvariant :: (Arbitrary a, Eq a, Show a)+semiringInvariant :: Eq a => Semiring a -> a -> a -> a -> Bool semiringInvariant (Semiring { add = (+), mul = (*)
src/full/Agda/Termination/SparseMatrix.hs view
@@ -1,13 +1,13 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveFoldable #-}-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE NamedFieldPuns #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-} {- | Sparse matrices. @@ -214,7 +214,7 @@ | otherwise = zero : aux (i + 1) l -- Older implementation without replicate.-blowUpSparseVec' :: (Show i, Ord i, Num i, Enum i) => b -> i -> [(i,b)] -> [b]+blowUpSparseVec' :: (Ord i, Num i, Enum i) => b -> i -> [(i,b)] -> [b] blowUpSparseVec' zero n l = aux 1 l where aux i [] | i > n = [] | otherwise = zero : aux (i+1) []@@ -373,7 +373,7 @@ | i > j = interAssocWith f l m' | otherwise = (i, f a b) : interAssocWith f l' m' -interAssocWith2 :: (Ord i, HasZero a) => (a -> a -> a) -> [(i,a)] -> [(i,a)] -> [(i,a)]+interAssocWith2 :: Ord i => (a -> a -> a) -> [(i,a)] -> [(i,a)] -> [(i,a)] interAssocWith2 f = zipAssocWith (const []) (const []) (const Nothing) (const Nothing) (\ a -> Just . f a) prop_interAssocWith_correct2 :: [(Int,Int)] -> [(Int,Int)] -> Bool@@ -400,7 +400,7 @@ -- patched with zeros to match up for multiplication. -- For sparse matrices, this patching is a no-op. -mul :: (Enum i, Num i, Ix i, Eq a)+mul :: (Ix i, Eq a) => Semiring a -> Matrix i a -> Matrix i a -> Matrix i a mul semiring m1 m2 = Matrix (Size { rows = rows (size m1), cols = cols (size m2) }) $ [ (MIx i j, b)@@ -507,7 +507,7 @@ -- ** Size ------------------------------------------------------------------------ -instance (Arbitrary i, Integral i) => Arbitrary (Size i) where+instance Integral i => Arbitrary (Size i) where arbitrary = do r <- natural c <- natural@@ -530,7 +530,7 @@ -- ** Matrix indices ------------------------------------------------------------------------ -instance (Arbitrary i, Integral i) => Arbitrary (MIx i) where+instance Integral i => Arbitrary (MIx i) where arbitrary = MIx <$> positive <*> positive instance CoArbitrary i => CoArbitrary (MIx i) where@@ -570,7 +570,7 @@ -- | Generates a matrix of the given size, using the given generator -- to generate the rows. -matrixUsingRowGen :: (Arbitrary i, Integral i, Arbitrary b, HasZero b)+matrixUsingRowGen :: (Integral i, HasZero b) => Size i -> (i -> Gen [b]) -- ^ The generator is parameterised on the size of the row.@@ -581,8 +581,8 @@ -- | Generates a matrix of the given size. -matrix :: (Arbitrary i, Integral i, Arbitrary b, HasZero b)- => Size i -> Gen (Matrix i b)+matrix :: (Integral i, Arbitrary b, HasZero b)+ => Size i -> Gen (Matrix i b) matrix sz = matrixUsingRowGen sz (\n -> vectorOf (fromIntegral n) arbitrary) prop_matrix :: Size Int -> Property@@ -590,11 +590,11 @@ -- | Generate a matrix of arbitrary size. -instance (Arbitrary i, Num i, Integral i, Arbitrary b, HasZero b)+instance (Integral i, Arbitrary b, HasZero b) => Arbitrary (Matrix i b) where arbitrary = matrix =<< arbitrary -instance (Show i, Ord i, Integral i, Enum i, Ix i, CoArbitrary b, HasZero b) => CoArbitrary (Matrix i b) where+instance (Integral i, CoArbitrary b, HasZero b) => CoArbitrary (Matrix i b) where coarbitrary m = coarbitrary (toLists m) -- | This matrix type is used for tests.
src/full/Agda/Termination/TermCheck.hs view
@@ -1,11 +1,11 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE ImplicitParams #-}-{-# LANGUAGE NamedFieldPuns #-}-{-# LANGUAGE PatternGuards #-}-{-# LANGUAGE StandaloneDeriving #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE ImplicitParams #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TupleSections #-} {- Checking for Structural recursion Authors: Andreas Abel, Nils Anders Danielsson, Ulf Norell,@@ -27,21 +27,18 @@ import Data.Foldable (toList) import Data.List hiding (null) import qualified Data.List as List-import Data.Maybe (mapMaybe, isJust, fromMaybe) import Data.Monoid-import qualified Data.Map as Map-import Data.Set (Set) import qualified Data.Set as Set import Data.Traversable (traverse) import Agda.Syntax.Abstract (IsProjP(..), AllNames(..)) import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Internal as I+import Agda.Syntax.Internal.Pattern as I import Agda.Syntax.Internal.Generic import qualified Agda.Syntax.Info as Info import Agda.Syntax.Position-import Agda.Syntax.Common as Common-import Agda.Syntax.Literal (Literal(LitString))+import Agda.Syntax.Common import Agda.Termination.CutOff import Agda.Termination.Monad@@ -81,9 +78,7 @@ import Agda.Utils.Monad -- (mapM', forM', ifM, or2M, and2M) import Agda.Utils.Null import Agda.Utils.Permutation-import Agda.Utils.Pretty (render) import Agda.Utils.Singleton-import Agda.Utils.VarSet (VarSet) import qualified Agda.Utils.VarSet as VarSet #include "undefined.h"@@ -100,29 +95,29 @@ -- | Entry point: Termination check a single declaration. -termDecl :: A.Declaration -> TCM Result-termDecl d = inTopContext $ ignoreAbstractMode $ termDecl' d+termDecl :: MutualId -> A.Declaration -> TCM Result+termDecl mid d = inTopContext $ ignoreAbstractMode $ termDecl' mid d -- | Termination check a sequence of declarations. -termDecls :: [A.Declaration] -> TCM Result-termDecls ds = concat <$> mapM termDecl' ds+termDecls :: MutualId -> [A.Declaration] -> TCM Result+termDecls mid ds = concat <$> mapM (termDecl' mid) ds -- | Termination check a single declaration -- (without necessarily ignoring @abstract@). -termDecl' :: A.Declaration -> TCM Result-termDecl' d = case d of+termDecl' :: MutualId -> A.Declaration -> TCM Result+termDecl' mid d = case d of A.Axiom {} -> return mempty A.Field {} -> return mempty A.Primitive {} -> return mempty A.Mutual _ ds- | [A.RecSig{}, A.RecDef _ _ _ _ _ _ rds] <- unscopeDefs ds- -> termDecls rds- A.Mutual i ds -> termMutual i ds- A.Section _ _ _ ds -> termDecls ds+ | [A.RecSig{}, A.RecDef _ _ _ _ _ _ _ rds] <- unscopeDefs ds+ -> termDecls mid rds+ A.Mutual i ds -> termMutual mid i ds+ A.Section _ _ _ ds -> termDecls mid ds -- section structure can be ignored as we are termination checking -- definitions lifted to the top-level A.Apply {} -> return mempty@@ -131,16 +126,16 @@ A.Open {} -> return mempty A.PatternSynDef {} -> return mempty -- open and pattern synonym defs are just artifacts from the concrete syntax- A.ScopedDecl _ ds -> termDecls ds+ A.ScopedDecl _ ds -> termDecls mid ds -- scope is irrelevant as we are termination checking Syntax.Internal A.RecSig{} -> return mempty- A.RecDef _ r _ _ _ _ ds -> termDecls ds+ A.RecDef _ r _ _ _ _ _ ds -> termDecls mid ds -- These should all be wrapped in mutual blocks- A.FunDef{} -> __IMPOSSIBLE__- A.DataSig{} -> __IMPOSSIBLE__- A.DataDef{} -> __IMPOSSIBLE__- -- This should have been expanded to a proper declaration before termination checking+ A.FunDef{} -> __IMPOSSIBLE__+ A.DataSig{} -> __IMPOSSIBLE__+ A.DataDef{} -> __IMPOSSIBLE__ A.UnquoteDecl{} -> __IMPOSSIBLE__+ A.UnquoteDef{} -> __IMPOSSIBLE__ where unscopeDefs = concatMap unscopeDef @@ -150,8 +145,8 @@ -- | Termination check a bunch of mutually inductive recursive definitions. -termMutual :: Info.MutualInfo -> [A.Declaration] -> TCM Result-termMutual i ds = if names == [] then return mempty else+termMutual :: MutualId -> Info.MutualInfo -> [A.Declaration] -> TCM Result+termMutual mid i ds = -- We set the range to avoid panics when printing error messages. setCurrentRange i $ do@@ -159,7 +154,7 @@ -- Get set of mutually defined names from the TCM. -- This includes local and auxiliary functions introduced -- during type-checking.- mutualBlock <- findMutualBlock (head names)+ mutualBlock <- lookupMutualBlock mid let allNames = Set.elems mutualBlock -- Andreas, 2014-03-26 -- Keeping recursion check after experiments on the standard lib.@@ -215,10 +210,12 @@ where getName (A.FunDef i x delayed cs) = [x]- getName (A.RecDef _ _ _ _ _ _ ds) = concatMap getName ds+ getName (A.RecDef _ _ _ _ _ _ _ ds) = concatMap getName ds getName (A.Mutual _ ds) = concatMap getName ds getName (A.Section _ _ _ ds) = concatMap getName ds getName (A.ScopedDecl _ ds) = concatMap getName ds+ getName (A.UnquoteDecl _ _ xs _) = xs+ getName (A.UnquoteDef _ xs _) = xs getName _ = [] -- the mutual names mentioned in the abstract syntax@@ -559,7 +556,7 @@ -- invariant: xs has enough variables for the body unless (permRange perm == genericLength xs) __IMPOSSIBLE__ dbps <- evalStateT (mapM build ps) xs- return . (dbps,) $ case body `apply` map (defaultArg . var) xs of+ return . (dbps,) $ case body `applys` map var xs of NoBody -> Nothing Body v -> Just v _ -> __IMPOSSIBLE__@@ -590,9 +587,9 @@ termClause' :: Clause -> TerM Calls termClause' clause = do cl @ Clause { clauseTel = tel- , clausePerm = perm , clauseBody = body } <- introHiddenLambdas clause let argPats' = clausePats cl+ perm = clausePerm cl liftTCM $ reportSDoc "term.check.clause" 25 $ vcat [ text "termClause" , nest 2 $ text "tel =" <+> prettyTCM tel@@ -602,7 +599,7 @@ ] addCtxTel tel $ do ps <- liftTCM $ normalise $ map unArg argPats'- (dbpats, res) <- openClause perm ps body+ (dbpats, res) <- openClause perm (unnumberPatVars ps) body case res of Nothing -> return empty Just v -> do@@ -642,8 +639,8 @@ introHiddenLambdas :: MonadTCM tcm => Clause -> tcm Clause introHiddenLambdas clause = liftTCM $ do case clause of- Clause range ctel perm ps body Nothing -> return clause- Clause range ctel perm ps body (Just t)-> do+ Clause range ctel ps body Nothing catchall -> return clause+ Clause range ctel ps body (Just t) catchall -> do case removeHiddenLambdas body of -- nobody or no hidden lambdas ([], _) -> return clause@@ -656,16 +653,14 @@ when (size ttel < n) __IMPOSSIBLE__ -- join with lhs telescope let ctel' = telFromList $ telToList ctel ++ telToList ttel- ps' = ps ++ map toPat axs- perm' = liftP n perm- return $ Clause range ctel' perm' ps' body' $ Just (t $> t')+ ps' = raise n ps ++ zipWith toPat (downFrom $ size axs) axs+ return $ Clause range ctel' ps' body' (Just (t $> t')) catchall where- toPat (Common.Arg (Common.ArgInfo h r c) x) =- Common.Arg (Common.ArgInfo h r []) $ namedVarP x- removeHiddenLambdas :: ClauseBody -> ([I.Arg ArgName], ClauseBody)+ toPat i (Arg (ArgInfo h r) x) = Arg (ArgInfo h r) $ namedDBVarP i x+ removeHiddenLambdas :: ClauseBody -> ([Arg ArgName], ClauseBody) removeHiddenLambdas = underBinds $ hlamsToBinds - hlamsToBinds :: Term -> ([I.Arg ArgName], ClauseBody)+ hlamsToBinds :: Term -> ([Arg ArgName], ClauseBody) hlamsToBinds v = case ignoreSharing v of Lam info b | getHiding info == Hidden ->@@ -688,10 +683,10 @@ extract (NoAbs _ a) = extract a extract (Abs x a) = addContext x $ terRaise $ extract a -instance ExtractCalls a => ExtractCalls (I.Arg a) where+instance ExtractCalls a => ExtractCalls (Arg a) where extract = extract . unArg -instance ExtractCalls a => ExtractCalls (I.Dom a) where+instance ExtractCalls a => ExtractCalls (Dom a) where extract = extract . unDom instance ExtractCalls a => ExtractCalls (Elim' a) where@@ -736,7 +731,7 @@ -- ^ Constructor name. , terConsInduction :: Induction -- ^ Should the constructor be treated as inductive or coinductive?- , terConsArgs :: [(I.Arg Term, Bool)]+ , terConsArgs :: [(Arg Term, Bool)] -- ^ All the arguments, -- and for every argument a boolean which is 'True' iff the -- argument should be viewed as preserving guardedness.@@ -759,7 +754,7 @@ -- ^ Constructor name. -> Induction -- ^ Should the constructor be treated as inductive or coinductive?- -> [(I.Arg Term, Bool)]+ -> [(Arg Term, Bool)] -- ^ All the arguments, -- and for every argument a boolean which is 'True' iff the -- argument should be viewed as preserving guardedness.@@ -984,7 +979,6 @@ extract l Shared{} -> __IMPOSSIBLE__- ExtLam{} -> __IMPOSSIBLE__ -- | Extract recursive calls from level expressions. @@ -1001,7 +995,7 @@ extract (UnreducedLevel t) = extract t -- | Rewrite type @tel -> Size< u@ to @tel -> Size@.-maskSizeLt :: MonadTCM tcm => I.Dom Type -> tcm (I.Dom Type)+maskSizeLt :: MonadTCM tcm => Dom Type -> tcm (Dom Type) maskSizeLt dom@(Dom info a) = liftTCM $ do (msize, msizelt) <- getBuiltinSize case (msize, msizelt) of@@ -1180,7 +1174,7 @@ class StripAllProjections a where stripAllProjections :: a -> TCM a -instance StripAllProjections a => StripAllProjections (I.Arg a) where+instance StripAllProjections a => StripAllProjections (Arg a) where stripAllProjections = traverse stripAllProjections -- stripAllProjections (Arg info a) = Arg info <$> stripAllProjections a
src/full/Agda/Termination/Termination.hs view
@@ -28,11 +28,7 @@ import Agda.Utils.TestHelpers hiding (idempotent) import Agda.Utils.QuickCheck -import qualified Data.Array as Array-import Data.Set (Set)-import qualified Data.Set as Set import Data.Monoid-import Data.List (partition) -- | TODO: This comment seems to be partly out of date. --@@ -71,7 +67,7 @@ , m <- CMSet.toList $ callMatrixSet c ] -checkIdems :: (Monoid cinfo, ?cutoff :: CutOff) => [CallMatrixAug cinfo] -> Either cinfo ()+checkIdems :: (?cutoff :: CutOff) => [CallMatrixAug cinfo] -> Either cinfo () checkIdems calls = caseMaybe (headMaybe offending) (Right ()) $ Left . augCallInfo where -- Every idempotent call must have decrease, otherwise it offends us.@@ -89,7 +85,7 @@ idempotent :: (?cutoff :: CutOff) => CallMatrixAug cinfo -> Bool idempotent (CallMatrixAug m _) = (m >*< m) `notWorse` m -hasDecrease :: (?cutoff :: CutOff) => CallMatrixAug cinfo -> Bool+hasDecrease :: CallMatrixAug cinfo -> Bool hasDecrease = any isDecr . diagonal ------------------------------------------------------------------------
src/full/Agda/Tests.hs view
@@ -13,8 +13,6 @@ import Agda.Syntax.Position as SyntPosi (tests) import Agda.Termination.CallGraph as TermCall (tests) import Agda.Termination.CallMatrix as TermCM (tests)--- import Agda.Termination.Lexicographic as TermLex (tests)--- import Agda.Termination.Matrix as TermMatrix (tests) import Agda.Termination.Order as TermOrd (tests) import Agda.Termination.Semiring as TermRing (tests) import Agda.Termination.SparseMatrix as TermSparse (tests)@@ -36,6 +34,7 @@ import Agda.Utils.ListT.Tests as UtilListT (tests) import Agda.Utils.PartialOrd as UtilPOrd (tests) import Agda.Utils.Permutation.Tests as UtilPerm (tests)+import Agda.Utils.Trie as UtilTrie (tests) import Agda.Utils.Warshall as UtilWarsh (tests) testSuite :: IO Bool@@ -57,8 +56,6 @@ , SyntPosi.tests , TermCall.tests , TermCM.tests--- , TermLex.tests--- , TermMatrix.tests , TermOrd.tests , TermRing.tests , TermSparse.tests@@ -73,5 +70,6 @@ , UtilFile.tests , UtilGraphUni.tests , UtilList.tests+ , UtilTrie.tests , UtilWarsh.tests ]
src/full/Agda/TheTypeChecker.hs view
@@ -1,5 +1,5 @@ module Agda.TheTypeChecker- ( checkDecls, checkDecl+ ( checkDecls, checkDecl, checkDeclCached , inferExpr, checkExpr ) where
src/full/Agda/TypeChecking/Abstract.hs view
@@ -1,29 +1,74 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternGuards #-}+{-# LANGUAGE UndecidableInstances #-} -- | Functions for abstracting terms over other terms. module Agda.TypeChecking.Abstract where +import Control.Applicative import Control.Monad+import Control.Monad.State import Data.Function+import Data.Traversable -import Agda.Syntax.Common hiding (Arg, Dom, NamedArg)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Internal +import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin (equalityUnview) import Agda.TypeChecking.Substitute+import Agda.TypeChecking.CheckInternal+import Agda.TypeChecking.Conversion+import Agda.TypeChecking.Constraints+import Agda.TypeChecking.Pretty +import Agda.Utils.Functor import Agda.Utils.List (splitExactlyAt)-import Agda.Utils.Impossible+import Agda.Utils.Size+import Agda.Utils.Except+import qualified Agda.Utils.HashMap as HMap +import Agda.Utils.Impossible #include "undefined.h" -piAbstractTerm :: Term -> Type -> Type -> Type-piAbstractTerm v a b = fun a (abstractTerm v b)+typeOf :: Type -> Type+typeOf = sort . getSort++-- Doesn't abstract in the sort.+abstractType :: Type -> Term -> Type -> TCM Type+abstractType a v (El s b) = El (raise 1 s) <$> abstractTerm a v (sort s) b++-- | @piAbstractTerm v a b[v] = (w : a) -> b[w]@+piAbstractTerm :: Term -> Type -> Type -> TCM Type+piAbstractTerm v a b = do+ fun <- mkPi (defaultDom ("w", a)) <$> abstractType a v b+ reportSDoc "tc.abstract" 50 $+ sep [ text "piAbstract" <+> sep [ prettyTCM v <+> text ":", nest 2 $ prettyTCM a ]+ , nest 2 $ text "from" <+> prettyTCM b+ , nest 2 $ text "-->" <+> prettyTCM fun ]+ return fun++-- | @piAbstract (v, a) b[v] = (w : a) -> b[w]@+--+-- For @rewrite@, it does something special:+--+-- @piAbstract (prf, Eq a v v') b[v,prf] = (w : a) (w' : Eq a w v') -> b[w,w']@++piAbstract :: (Term, EqualityView) -> Type -> TCM Type+piAbstract (v, OtherType a) b = piAbstractTerm v a b+piAbstract (prf, eqt@(EqualityType s _ _ a v _)) b = do+ let prfTy = equalityUnview eqt+ vTy = El s (unArg a)+ b <- abstractType prfTy prf b+ b <- addContext ("w", defaultDom prfTy) $ abstractType (raise 1 vTy) (unArg $ raise 1 v) b+ return . funType vTy . funType eqTy' . swap01 $ b where- fun a b = El s $ Pi (defaultDom a) $ mkAbs "w" b- where s = (sLub `on` getSort) a b+ funType a = mkPi $ defaultDom ("w", a)+ -- Abstract the lhs (@a@) of the equality only.+ eqt1 = raise 1 eqt+ eqTy' = equalityUnview $ eqt1 { eqtLhs = eqtLhs eqt1 $> var 0 } -- | @isPrefixOf u v = Just es@ if @v == u `applyE` es@. class IsPrefixOf a where@@ -50,13 +95,57 @@ (MetaV x us, MetaV y vs) | x == y -> us `isPrefixOf` vs (u, v) -> guard (u == v) >> return [] -class AbstractTerm a where- -- | @subst u . abstractTerm u == id@- abstractTerm :: Term -> a -> a+-- Type-based abstraction. Needed if u is a constructor application (#745).+abstractTerm :: Type -> Term -> Type -> Term -> TCM Term+abstractTerm a u@Con{} b v = do+ reportSDoc "tc.abstract" 50 $+ sep [ text "Abstracting"+ , nest 2 $ sep [ prettyTCM u <+> text ":", nest 2 $ prettyTCM a ]+ , text "over"+ , nest 2 $ sep [ prettyTCM v <+> text ":", nest 2 $ prettyTCM b ] ] -instance AbstractTerm Term where- abstractTerm u v | Just es <- u `isPrefixOf` v = Var 0 $ absT es- | otherwise =+ hole <- qualify <$> currentModule <*> freshName_ "hole"+ noMutualBlock $ addConstant hole $ defaultDefn defaultArgInfo hole a Axiom++ args <- map Apply <$> getContextArgs+ let n = length args++ let abstr b v = do+ m <- size <$> getContext+ let (a', u') = raise (m - n) (a, u)+ case isPrefixOf u' v of+ Nothing -> return v+ Just es -> do -- Check that the types match.+ s <- get+ do disableDestructiveUpdate (noConstraints $ equalType a' b)+ put s+ return $ Def hole (raise (m - n) args ++ es)+ `catchError` \ _ -> do+ reportSDoc "tc.abstract.ill-typed" 50 $+ sep [ text "Skipping ill-typed abstraction"+ , nest 2 $ sep [ prettyTCM v <+> text ":", nest 2 $ prettyTCM b ] ]+ return v++ v <- catchError_ (checkInternal' (defaultAction { preAction = abstr }) v b) $ \ err -> do+ reportSDoc "impossible" 10 $+ vcat [ text "Type error in term to abstract"+ , nest 2 $ (prettyTCM =<< getContextTelescope) <+> text "⊢"+ , nest 2 $ sep [ prettyTCM v <+> text ":", nest 2 $ prettyTCM b ]+ , nest 2 $ prettyTCM err ]+ __IMPOSSIBLE__+ reportSDoc "tc.abstract" 50 $ sep [ text "Resulting abstraction", nest 2 $ prettyTCM v ]+ modifySignature $ updateDefinitions $ HMap.delete hole+ return $ absTerm (Def hole args) v++abstractTerm _ u _ v = return $ absTerm u v -- Non-constructors can use untyped abstraction++class AbsTerm a where+ -- | @subst u . absTerm u == id@+ absTerm :: Term -> a -> a++instance AbsTerm Term where+ absTerm u v | Just es <- u `isPrefixOf` v = Var 0 $ absT es+ | otherwise = case v of -- Andreas, 2013-10-20: the original impl. works only at base types -- v | u == v -> Var 0 [] -- incomplete see succeed/WithOfFunctionType@@ -71,60 +160,60 @@ MetaV m vs -> MetaV m $ absT vs DontCare mv -> DontCare $ absT mv Shared p -> Shared $ absT p- ExtLam{} -> __IMPOSSIBLE__ where- absT x = abstractTerm u x+ absT x = absTerm u x -instance AbstractTerm a => AbstractTerm (Ptr a) where- abstractTerm u = fmap (abstractTerm u)+instance AbsTerm a => AbsTerm (Ptr a) where+ absTerm u = fmap (absTerm u) -instance AbstractTerm Type where- abstractTerm u (El s v) = El (abstractTerm u s) (abstractTerm u v)+instance AbsTerm Type where+ absTerm u (El s v) = El (absTerm u s) (absTerm u v) -instance AbstractTerm Sort where- abstractTerm u s = case s of+instance AbsTerm Sort where+ absTerm u s = case s of Type n -> Type $ absS n Prop -> Prop Inf -> Inf SizeUniv -> SizeUniv DLub s1 s2 -> DLub (absS s1) (absS s2)- where absS x = abstractTerm u x+ where absS x = absTerm u x -instance AbstractTerm Level where- abstractTerm u (Max as) = Max $ abstractTerm u as+instance AbsTerm Level where+ absTerm u (Max as) = Max $ absTerm u as -instance AbstractTerm PlusLevel where- abstractTerm u l@ClosedLevel{} = l- abstractTerm u (Plus n l) = Plus n $ abstractTerm u l+instance AbsTerm PlusLevel where+ absTerm u l@ClosedLevel{} = l+ absTerm u (Plus n l) = Plus n $ absTerm u l -instance AbstractTerm LevelAtom where- abstractTerm u l = case l of- MetaLevel m vs -> MetaLevel m $ abstractTerm u vs- NeutralLevel r v -> NeutralLevel r $ abstractTerm u v- BlockedLevel _ v -> UnreducedLevel $ abstractTerm u v -- abstracting might remove the blockage- UnreducedLevel v -> UnreducedLevel $ abstractTerm u v+instance AbsTerm LevelAtom where+ absTerm u l = case l of+ MetaLevel m vs -> MetaLevel m $ absTerm u vs+ NeutralLevel r v -> NeutralLevel r $ absTerm u v+ BlockedLevel _ v -> UnreducedLevel $ absTerm u v -- abstracting might remove the blockage+ UnreducedLevel v -> UnreducedLevel $ absTerm u v -instance AbstractTerm a => AbstractTerm (Elim' a) where- abstractTerm = fmap . abstractTerm+instance AbsTerm a => AbsTerm (Elim' a) where+ absTerm = fmap . absTerm -instance AbstractTerm a => AbstractTerm (Arg a) where- abstractTerm = fmap . abstractTerm+instance AbsTerm a => AbsTerm (Arg a) where+ absTerm = fmap . absTerm -instance AbstractTerm a => AbstractTerm (Dom a) where- abstractTerm = fmap . abstractTerm+instance AbsTerm a => AbsTerm (Dom a) where+ absTerm = fmap . absTerm -instance AbstractTerm a => AbstractTerm [a] where- abstractTerm = fmap . abstractTerm+instance AbsTerm a => AbsTerm [a] where+ absTerm = fmap . absTerm -instance AbstractTerm a => AbstractTerm (Maybe a) where- abstractTerm = fmap . abstractTerm+instance AbsTerm a => AbsTerm (Maybe a) where+ absTerm = fmap . absTerm -instance (Subst a, AbstractTerm a) => AbstractTerm (Abs a) where- abstractTerm u (NoAbs x v) = NoAbs x $ abstractTerm u v- abstractTerm u (Abs x v) = Abs x $ applySubst swap $ abstractTerm (raise 1 u) v- where- -- This swaps var 0 and var 1 (we hope)- swap = var 1 :# liftS 1 (raiseS 1)+instance (Subst Term a, AbsTerm a) => AbsTerm (Abs a) where+ absTerm u (NoAbs x v) = NoAbs x $ absTerm u v+ absTerm u (Abs x v) = Abs x $ swap01 $ absTerm (raise 1 u) v -instance (AbstractTerm a, AbstractTerm b) => AbstractTerm (a, b) where- abstractTerm u (x, y) = (abstractTerm u x, abstractTerm u y)+instance (AbsTerm a, AbsTerm b) => AbsTerm (a, b) where+ absTerm u (x, y) = (absTerm u x, absTerm u y)++-- | This swaps @var 0@ and @var 1@.+swap01 :: (Subst Term a) => a -> a+swap01 = applySubst $ var 1 :# liftS 1 (raiseS 1)
src/full/Agda/TypeChecking/CheckInternal.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-} -- Initially authored by Andreas, 2013-10-22.@@ -12,13 +12,17 @@ module Agda.TypeChecking.CheckInternal ( checkType , checkInternal+ , checkInternal'+ , defaultAction, Action(..) , infer ) where +import Control.Arrow ((&&&), (***), first, second)+import Control.Applicative import Control.Monad import Agda.Syntax.Common-import Agda.Syntax.Internal as I+import Agda.Syntax.Internal import Agda.TypeChecking.Conversion import Agda.TypeChecking.Datatypes (getConType)@@ -27,6 +31,7 @@ import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Pretty import Agda.TypeChecking.ProjectionLike (elimView)+import Agda.TypeChecking.Records (getDefType) import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope@@ -71,7 +76,7 @@ checkType' $ absBody b return $ dLub s1 s2 Sort s -> do- checkSort s+ _ <- checkSort defaultAction s return $ sSuc s Var i es -> do a <- typeOfBV i@@ -87,34 +92,40 @@ v@Lit{} -> typeError $ InvalidType v v@Level{} -> typeError $ InvalidType v DontCare v -> checkType' $ t $> v- ExtLam{} -> __IMPOSSIBLE__ Shared{} -> __IMPOSSIBLE__ checkTypeSpine :: Type -> Term -> Elims -> TCM Sort-checkTypeSpine a self es = shouldBeSort =<< inferSpine a self es+checkTypeSpine a self es = shouldBeSort =<< do snd <$> inferSpine a self es +data Action = Action { preAction :: Type -> Term -> TCM Term+ , postAction :: Type -> Term -> TCM Term }++defaultAction :: Action+defaultAction = Action (\ _ v -> return v) (\ _ v -> return v)+ -- | Entry point for term checking. checkInternal :: Term -> Type -> TCM ()-checkInternal v t = do+checkInternal v t = void $ checkInternal' defaultAction v t++checkInternal' :: Action -> Term -> Type -> TCM Term+checkInternal' action v t = do reportSDoc "tc.check.internal" 20 $ sep [ text "checking internal "- , prettyTCM v- , text " : "- , prettyTCM t- ]+ , nest 2 $ sep [ prettyTCM v <+> text ":"+ , nest 2 $ prettyTCM t ] ] -- Bring projection-like funs in post-fix form, -- even lone ones (True).- v <- elimView True v- case ignoreSharing v of+ v <- elimView True =<< preAction action t v+ postAction action t =<< case ignoreSharing v of Var i es -> do a <- typeOfBV i- checkSpine a (Var i []) es t+ checkSpine action a (Var i []) es t Def f es -> do -- f is not projection(-like)! a <- defType <$> getConstInfo f- checkSpine a (Def f []) es t+ checkSpine action a (Def f []) es t MetaV x es -> do -- we assume meta instantiations to be well-typed a <- metaType x- checkSpine a (MetaV x []) es t+ checkSpine action a (MetaV x []) es t Con c vs -> do -- we need to fully apply the constructor to make getConType work TelV tel t <- telView t@@ -122,88 +133,58 @@ let failure = typeError $ DoesNotConstructAnElementOf (conName c) t vs' = raise (size tel) vs ++ teleArgs tel a <- maybe failure return =<< getConType c t- checkArgs a (Con c []) vs' t- Lit l -> litType l >>= (`subtype` t)+ Con c vs2 <- checkArgs action a (Con c []) vs' t+ -- Strip away the extra arguments+ return $ applySubst (strengthenS __IMPOSSIBLE__ (size tel))+ $ Con c (take (length vs) vs2)+ Lit l -> Lit l <$ ((`subtype` t) =<< litType l) Lam ai vb -> do (a, b) <- shouldBePi t checkArgInfo ai $ domInfo a addContext (suggest vb b, a) $ do- checkInternal (absBody vb) (absBody b)+ Lam ai . Abs (absName vb) <$> checkInternal' action (absBody vb) (absBody b) Pi a b -> do s <- shouldBeSort t when (s == SizeUniv) $ typeError $ FunctionTypeInSizeUniv v- let st = sort s- checkInternal (unEl $ unDom a) st -- This does not work with SizeUniv- addContext (absName b, a) $ do- checkInternal (unEl $ absBody b) $ raise 1 st+ let st = sort s+ sa = getSort a+ sb = getSort (unAbs b)+ mkDom v = El sa v <$ a+ mkRng v = fmap (v <$) b+ -- Preserve NoAbs+ goInside = case b of Abs{} -> addContext (absName b, a)+ NoAbs{} -> id+ a <- mkDom <$> checkInternal' action (unEl $ unDom a) (sort sa)+ -- TODO: checkPTS sa sb s+ goInside $ Pi a . mkRng <$> checkInternal' action (unEl $ unAbs b) (sort sb) Sort s -> do- checkSort s -- this ensures @s /= Inf@- (sSuc s `leqSort`) =<< shouldBeSort t+ s <- checkSort action s -- this ensures @s /= Inf@+ Sort s <$ ((sSuc s `leqSort`) =<< shouldBeSort t) Level l -> do- checkLevel l- levelType >>= (`subtype` t)- DontCare v -> checkInternal v t+ l <- checkLevel action l+ Level l <$ ((`subtype` t) =<< levelType)+ DontCare v -> DontCare <$> checkInternal' action v t Shared{} -> __IMPOSSIBLE__- ExtLam{} -> __IMPOSSIBLE__ -{- RETIRED, works also when elimView has not been called before.--- | Check function application.-checkDef :: QName -> Elims -> Type -> TCM ()-checkDef f es t = do- def <- getConstInfo f- if isJust $ isProjection_ $ theDef def then do- -- we have to reduce away a projection-like function in head position- -- because we might not be able to infer the type of its principal- -- argument (it could be a Con)- -- TODO: a reduce that reduces ONLY projection-like functions--- (`checkInternal` t) =<< elimView =<< reduceProjectionLike (Def f es)- (`checkInternal` t) =<< elimView (Def f es)- else checkSpine (defType def) (Def f []) es t--}--{---- | Check ordinary function application.-checkDef :: QName -> Elims -> Type -> TCM ()-checkDef f es t = do- a <- defType <$> getConstInfo f- checkSpine a (Def f []) es t---- | Check possibly projection-like function application-checkDef' :: QName -> I.Arg Term -> Elims -> Type -> TCM ()-checkDef' f a es t = do- isProj <- isProjection f- case isProj of- Just Projection{ projIndex = n} | n > 0 -> do- let self = unArg a- b <- infer self- checkSpine b self (Proj f : es) t- _ -> checkDef f (Apply a : es) t--}--checkSpine :: Type -> Term -> Elims -> Type -> TCM ()-checkSpine a self es t = do+checkSpine :: Action -> Type -> Term -> Elims -> Type -> TCM Term+checkSpine action a self es t = do reportSDoc "tc.check.internal" 20 $ sep [ text "checking spine "- , text "("- , prettyTCM self- , text " : "- , prettyTCM a- , text ")"- , prettyTCM es- , text " : "- , prettyTCM t- ]- inferSpine a self es >>= (`subtype` t)+ , nest 2 $ sep [ parens (sep [ prettyTCM self <+> text ":"+ , nest 2 $ prettyTCM a ])+ , nest 4 $ prettyTCM es <+> text ":"+ , nest 2 $ prettyTCM t ] ]+ ((v, v'), t') <- inferSpine' action a self self es+ v' <$ coerceSize subtype v t' t -checkArgs :: Type -> Term -> Args -> Type -> TCM ()-checkArgs a self vs t = checkSpine a self (map Apply vs) t+checkArgs :: Action -> Type -> Term -> Args -> Type -> TCM Term+checkArgs action a self vs t = checkSpine action a self (map Apply vs) t -- | @checkArgInfo actual expected@.-checkArgInfo :: I.ArgInfo -> I.ArgInfo -> TCM ()+checkArgInfo :: ArgInfo -> ArgInfo -> TCM () checkArgInfo ai ai' = do checkHiding (getHiding ai) (getHiding ai') checkRelevance (getRelevance ai) (getRelevance ai')- checkColor (argInfoColors ai) (argInfoColors ai') checkHiding :: Hiding -> Hiding -> TCM () checkHiding h h' = unless (h == h') $ typeError $ HidingMismatch h h'@@ -217,22 +198,18 @@ canon UnusedArg = Relevant canon r = r -checkColor :: [Color] -> [Color] -> TCM ()-checkColor c c' = unless (c == c') $ typeError $ ColorMismatch c c'- -- TODO guilhem- -- | Infer type of a neutral term. infer :: Term -> TCM Type infer v = do case ignoreSharing v of Var i es -> do a <- typeOfBV i- inferSpine a (Var i []) es+ snd <$> inferSpine a (Var i []) es Def f (Apply a : es) -> inferDef' f a es -- possibly proj.like Def f es -> inferDef f es -- not a projection-like fun MetaV x es -> do -- we assume meta instantiations to be well-typed a <- metaType x- inferSpine a (MetaV x []) es+ snd <$> inferSpine a (MetaV x []) es Shared{} -> __IMPOSSIBLE__ _ -> __IMPOSSIBLE__ @@ -240,37 +217,51 @@ inferDef :: QName -> Elims -> TCM Type inferDef f es = do a <- defType <$> getConstInfo f- inferSpine a (Def f []) es+ snd <$> inferSpine a (Def f []) es -- | Infer possibly projection-like function application-inferDef' :: QName -> I.Arg Term -> Elims -> TCM Type+inferDef' :: QName -> Arg Term -> Elims -> TCM Type inferDef' f a es = do isProj <- isProjection f case isProj of Just Projection{ projIndex = n } | n > 0 -> do let self = unArg a b <- infer self- inferSpine b self (Proj f : es)+ snd <$> inferSpine b self (Proj f : es) _ -> inferDef f (Apply a : es) -- | @inferSpine t self es@ checks that spine @es@ eliminates -- value @self@ of type @t@ and returns the remaining type--- (target of elimination).-inferSpine :: Type -> Term -> Elims -> TCM Type-inferSpine t self [] = return t-inferSpine t self (e : es) =+-- (target of elimination) and the final self (has that type).+inferSpine :: Type -> Term -> Elims -> TCM (Term, Type)+inferSpine a v es = first fst <$> inferSpine' defaultAction a v v es++-- | Returns both the real term (first) and the transformed term (second). The+-- transformed term is not necessarily a valid term, so it must not be used+-- in types.+inferSpine' :: Action -> Type -> Term -> Term -> Elims -> TCM ((Term, Term), Type)+inferSpine' action t self self' [] = return ((self, self'), t)+inferSpine' action t self self' (e : es) = do+ reportSDoc "tc.infer.internal" 30 $ sep+ [ text "inferSpine': "+ , text "type t = " <+> prettyTCM t+ , text "self = " <+> prettyTCM self+ , text "self' = " <+> prettyTCM self'+ , text "eliminated by e = " <+> prettyTCM e+ ] case e of Apply (Arg ai v) -> do (a, b) <- shouldBePi t checkArgInfo ai $ domInfo a- checkInternal v $ unDom a- inferSpine (b `absApp` v) (self `applyE` [e]) es+ v' <- checkInternal' action v $ unDom a+ inferSpine' action (b `absApp` v) (self `applyE` [e]) (self' `applyE` [Apply (Arg ai v')]) es -- case: projection or projection-like Proj f -> do (a, b) <- shouldBePi =<< shouldBeProjectible t f- u <- f `applyDef` (argFromDom a $> self)- inferSpine (b `absApp` self) u es+ u <- f `applyDef` (argFromDom a $> self)+ u' <- f `applyDef` (argFromDom a $> self')+ inferSpine' action (b `absApp` self) u u' es -- | Type should either be a record type of a type eligible for -- the principal argument of projection-like functions.@@ -280,7 +271,7 @@ where failure = typeError $ ShouldBeRecordType t -- TODO: more accurate error that makes sense also for proj.-like funs. -shouldBePi :: Type -> TCM (I.Dom Type, Abs Type)+shouldBePi :: Type -> TCM (Dom Type, Abs Type) shouldBePi t = ifPiType t (\ a b -> return (a, b)) $ const $ typeError $ ShouldBePi t -- | Result is in reduced form.@@ -295,34 +286,34 @@ _ -> no -- | Check if sort is well-formed.-checkSort :: Sort -> TCM ()-checkSort s =+checkSort :: Action -> Sort -> TCM Sort+checkSort action s = case s of- Type l -> checkLevel l+ Type l -> Type <$> checkLevel action l Prop -> __IMPOSSIBLE__ -- the dummy Prop should not be part of a term we check Inf -> typeError $ SetOmegaNotValidType -- we cannot have Setω on the lhs of the colon SizeUniv -> typeError $ InvalidTypeSort s DLub a b -> do- checkSort a- addContext (absName b, defaultDom (sort a) :: I.Dom Type) $ do- checkSort (absBody b)+ a <- checkSort action a+ addContext (absName b, defaultDom (sort a) :: Dom Type) $ do+ DLub a . Abs (absName b) <$> checkSort action (absBody b) -- | Check if level is well-formed.-checkLevel :: Level -> TCM ()-checkLevel (Max ls) = mapM_ checkPlusLevel ls+checkLevel :: Action -> Level -> TCM Level+checkLevel action (Max ls) = Max <$> mapM checkPlusLevel ls where- checkPlusLevel ClosedLevel{} = return ()- checkPlusLevel (Plus _ l) = checkLevelAtom l+ checkPlusLevel l@ClosedLevel{} = return l+ checkPlusLevel (Plus k l) = Plus k <$> checkLevelAtom l checkLevelAtom l = do lvl <- levelType- case l of- MetaLevel x es -> checkInternal (MetaV x es) lvl- BlockedLevel _ v -> checkInternal v lvl- NeutralLevel _ v -> checkInternal v lvl- UnreducedLevel v -> checkInternal v lvl+ UnreducedLevel <$> case l of+ MetaLevel x es -> checkInternal' action (MetaV x es) lvl+ BlockedLevel _ v -> checkInternal' action v lvl+ NeutralLevel _ v -> checkInternal' action v lvl+ UnreducedLevel v -> checkInternal' action v lvl -- | Type of a term or sort meta. metaType :: MetaId -> TCM Type
src/full/Agda/TypeChecking/CompiledClause.hs view
@@ -21,11 +21,11 @@ import Data.Foldable (Foldable, foldMap) import Data.Traversable (Traversable) +import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.Syntax.Literal import Agda.Syntax.Position -import Agda.Utils.Maybe import Agda.Utils.Null import Agda.Utils.Pretty @@ -54,7 +54,7 @@ -- | Case tree with bodies. data CompiledClauses- = Case Int (Case CompiledClauses)+ = Case (Arg Int) (Case CompiledClauses) -- ^ @Case n bs@ stands for a match on the @n@-th argument -- (counting from zero) with @bs@ as the case branches. -- If the @n@-th argument is a projection, we have only 'conBranches'
src/full/Agda/TypeChecking/CompiledClause/Compile.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE TupleSections #-} module Agda.TypeChecking.CompiledClause.Compile where@@ -14,7 +14,8 @@ import Debug.Trace import Agda.Syntax.Common-import Agda.Syntax.Internal as I+import Agda.Syntax.Internal+import Agda.Syntax.Internal.Pattern import Agda.TypeChecking.CompiledClause import Agda.TypeChecking.Coverage import Agda.TypeChecking.Coverage.SplitTree@@ -44,9 +45,10 @@ Maybe (QName, Type) -- ^ Translate record patterns and coverage check with given type? -> [Clause] -> TCM CompiledClauses compileClauses mt cs = do- let cls = [ Cl (clausePats c) (clauseBody c) | c <- cs ]+ let cls = [ Cl (unnumberPatVars $ clausePats c) (clauseBody c) | c <- cs ]+ shared <- sharedFun case mt of- Nothing -> return $ compile cls+ Nothing -> return $ compile shared cls Just (q, t) -> do splitTree <- coverageCheck q t cs @@ -57,7 +59,7 @@ sep [ text "clauses before compilation" , (nest 2 . text . show) cs ]- let cc = compileWithSplitTree splitTree cls+ let cc = compileWithSplitTree shared splitTree cls reportSDoc "tc.cc" 12 $ sep [ text "compiled clauses (still containing record splits)" , nest 2 $ text (show cc)@@ -68,7 +70,7 @@ -- | Stripped-down version of 'Agda.Syntax.Internal.Clause' -- used in clause compiler. data Cl = Cl- { clPats :: [I.Arg Pattern]+ { clPats :: [Arg Pattern] , clBody :: ClauseBody } deriving (Show) @@ -77,13 +79,13 @@ type Cls = [Cl] -compileWithSplitTree :: SplitTree -> Cls -> CompiledClauses-compileWithSplitTree t cs = case t of- SplitAt i ts -> Case i $ compiles ts $ splitOn (length ts == 1) i cs+compileWithSplitTree :: (Term -> Term) -> SplitTree -> Cls -> CompiledClauses+compileWithSplitTree shared t cs = case t of+ SplitAt i ts -> Case i $ compiles ts $ splitOn (length ts == 1) (unArg i) cs -- if there is just one case, we force expansion of catch-alls -- this is needed to generate a sound tree on which we can -- collapse record pattern splits- SplittingDone n -> compile cs+ SplittingDone n -> compile shared cs -- after end of split tree, continue with left-to-right strategy where@@ -95,17 +97,17 @@ = Branches { projPatterns = cop , conBranches = updCons cons- , litBranches = compile <$> lits- , catchAllBranch = compile <$> catchAll+ , litBranches = compile shared <$> lits+ , catchAllBranch = compile shared <$> catchAll } where updCons = Map.mapWithKey $ \ c cl ->- caseMaybe (lookup c ts) compile compileWithSplitTree <$> cl+ caseMaybe (lookup c ts) (compile shared) (compileWithSplitTree shared) <$> cl -- When the split tree is finished, we continue with @compile@. -compile :: Cls -> CompiledClauses-compile cs = case nextSplit cs of- Just (isRecP, n)-> Case n $ fmap compile $ splitOn isRecP n cs+compile :: (Term -> Term) -> Cls -> CompiledClauses+compile shared cs = case nextSplit cs of+ Just (isRecP, n)-> Case n $ fmap (compile shared) $ splitOn isRecP (unArg n) cs Nothing -> case map (getBody . clBody) cs of -- It's possible to get more than one clause here due to -- catch-all expansion.@@ -121,10 +123,10 @@ -- | Get the index of the next argument we need to split on. -- This the number of the first pattern that does a match in the first clause.-nextSplit :: Cls -> Maybe (Bool, Int)+nextSplit :: Cls -> Maybe (Bool, Arg Int) nextSplit [] = __IMPOSSIBLE__ nextSplit (Cl ps _ : _) = headMaybe $ catMaybes $- zipWith (\ p n -> (,n) <$> properSplit (unArg p)) ps [0..]+ zipWith (\ (Arg ai p) n -> (, Arg ai n) <$> properSplit p) ps [0..] -- | Is is not a variable pattern? -- And if yes, is it a record pattern?
src/full/Agda/TypeChecking/CompiledClause/Match.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE ScopedTypeVariables #-} #if __GLASGOW_HASKELL__ >= 710@@ -11,11 +11,8 @@ import Control.Monad.Reader (asks) import Data.List-import Data.Monoid import qualified Data.Map as Map -import Debug.Trace (trace)- import Agda.Syntax.Internal import Agda.Syntax.Common @@ -87,6 +84,8 @@ -- traceSLn "reduce.compiled" 95 "CompiledClause.Match.match'" $ do debug $ do + shared <- sharedFun+ case c of -- impossible case@@ -111,7 +110,7 @@ lam x t = Lam (argInfo x) (Abs (unArg x) t) -- splitting on the @n@th elimination- Case n bs -> do+ Case (Arg _ n) bs -> do case genericSplitAt n es of -- if the @n@th elimination is not supplied, no match (_, []) -> no (NotBlocked Underapplied) es@@ -158,7 +157,8 @@ vs = map argFromElim es1 -- Now do the matching on the @n@ths argument:- case fmap ignoreSharing <$> eb of+ traceSLn "reduce.compiled" 100 ("caseing on raw " ++ show eb) $+ case fmap ignoreSharing <$> eb of Blocked x _ -> no (Blocked x) es' NotBlocked _ (Apply (Arg info (MetaV x _))) -> no (Blocked x) es' @@ -168,7 +168,8 @@ let cFrame stack = case ignoreSharing cv of Con c vs -> conFrame c vs stack _ -> stack- match' $ litFrame l $ cFrame $ catchAllFrame stack+ traceSLn "reduce.compiled" 100 ("constructorForm = " ++ show cv) $+ match' $ litFrame l $ cFrame $ catchAllFrame stack -- In case of a constructor, push the conFrame NotBlocked _ (Apply (Arg info (Con c vs))) -> performedSimplification $
src/full/Agda/TypeChecking/CompiledClause/Match.hs-boot view
@@ -4,7 +4,6 @@ -- import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.TypeChecking.Monad.Base-import Agda.TypeChecking.Reduce.Monad import Agda.TypeChecking.CompiledClause matchCompiled :: CompiledClauses -> MaybeReducedArgs -> ReduceM (Reduced (Blocked Args) Term)
src/full/Agda/TypeChecking/Constraints.hs view
@@ -9,7 +9,6 @@ import Agda.Syntax.Internal import Agda.TypeChecking.Monad-import Agda.TypeChecking.Errors import Agda.TypeChecking.InstanceArguments import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce@@ -58,13 +57,19 @@ reportSDoc "tc.constr.add" 20 $ text " simplified:" <+> prettyTCM c' solveConstraint_ c' else addConstraint' c'- -- the added constraint can cause IFS constraints to be solved+ -- the added constraint can cause IFS constraints to be solved (but only+ -- the constraints which aren’t blocked on an uninstantiated meta) unless (isIFSConstraint c) $- wakeConstraints (isIFSConstraint . clValue . theConstraint)+ wakeConstraints (isWakeableIFSConstraint . clValue . theConstraint) where+ isWakeableIFSConstraint :: Constraint -> TCM Bool+ isWakeableIFSConstraint (FindInScope _ b _) = caseMaybe b (return True) (\m -> isInstantiatedMeta m)+ isWakeableIFSConstraint _ = return False+ isIFSConstraint :: Constraint -> Bool isIFSConstraint FindInScope{} = True- isIFSConstraint _ = False+ isIFSConstraint _ = False+ simpl :: Constraint -> TCM Constraint simpl c = do n <- genericLength <$> getContext@@ -121,13 +126,13 @@ -- | Wake up the constraints depending on the given meta. wakeupConstraints :: MetaId -> TCM () wakeupConstraints x = do- wakeConstraints (const True) -- (mentionsMeta x) -- TODO: needs fixing to cope with shared updates+ wakeConstraints (return . const True) -- (mentionsMeta x) -- TODO: needs fixing to cope with shared updates solveAwakeConstraints -- | Wake up all constraints. wakeupConstraints_ :: TCM () wakeupConstraints_ = do- wakeConstraints (const True)+ wakeConstraints (return . const True) solveAwakeConstraints solveAwakeConstraints :: TCM ()@@ -192,10 +197,12 @@ -- Open (whatever that means) Open -> __IMPOSSIBLE__ OpenIFS -> __IMPOSSIBLE__-solveConstraint_ (FindInScope m cands) = findInScope m cands+solveConstraint_ (FindInScope m b cands) = findInScope m cands checkTypeCheckingProblem :: TypeCheckingProblem -> TCM Term checkTypeCheckingProblem p = case p of CheckExpr e t -> checkExpr e t- CheckArgs eh ei r args t0 t1 k -> checkArguments' eh ei r args t0 t1 k+ CheckArgs eh r args t0 t1 k -> checkArguments' eh r args t0 t1 k CheckLambda args body target -> checkPostponedLambda args body target+ UnquoteTactic tac hole t -> unquoteTactic tac hole t $ return hole+
src/full/Agda/TypeChecking/Constraints.hs-boot view
@@ -8,3 +8,4 @@ solveAwakeConstraints' :: Bool -> TCM () noConstraints :: TCM a -> TCM a ifNoConstraints_ :: TCM () -> TCM a -> (ProblemId -> TCM a) -> TCM a+guardConstraint :: Constraint -> TCM () -> TCM ()
src/full/Agda/TypeChecking/Conversion.hs view
@@ -54,6 +54,7 @@ import Agda.Utils.Maybe import Agda.Utils.Size import Agda.Utils.Tuple+import Agda.Utils.Lens #include "undefined.h" import Agda.Utils.Impossible@@ -127,19 +128,20 @@ , nest 2 $ prettyTCM u <+> prettyTCM cmp <+> prettyTCM v , nest 2 $ text ":" <+> prettyTCM a ]- -- Check syntactic equality first. This actually saves us quite a bit of work.- ((u, v), equal) <- SynEq.checkSyntacticEquality u v+ -- Check pointer equality first.+ let checkPointerEquality def | not $ null $ List.intersect (pointerChain u) (pointerChain v) = do+ verboseS "profile.sharing" 10 $ tick "pointer equality"+ return ()+ checkPointerEquality def = def+ checkPointerEquality $ do+ -- Check syntactic equality. This actually saves us quite a bit of work.+ ((u, v), equal) <- runReduceM $ SynEq.checkSyntacticEquality u v -- OLD CODE, traverses the *full* terms u v at each step, even if they -- are different somewhere. Leads to infeasibility in issue 854. -- (u, v) <- instantiateFull (u, v) -- let equal = u == v- if equal then unifyPointers cmp u v $ verboseS "profile.sharing" 20 $ tick "equal terms" else do- verboseS "profile.sharing" 20 $ tick "unequal terms"- let checkPointerEquality def | not $ null $ List.intersect (pointerChain u) (pointerChain v) = do- verboseS "profile.sharing" 10 $ tick "pointer equality"- return ()- checkPointerEquality def = def- checkPointerEquality $ do+ unifyPointers cmp u v $ if equal then verboseS "profile.sharing" 20 $ tick "equal terms" else do+ verboseS "profile.sharing" 20 $ tick "unequal terms" reportSDoc "tc.conv.term" 15 $ sep [ text "compareTerm (not syntactically equal)" , nest 2 $ prettyTCM u <+> prettyTCM cmp <+> prettyTCM v@@ -152,7 +154,7 @@ -- at function types into Size. let fallback = compareTerm' cmp a u v unlessSubtyping cont =- if cmp == CmpEq then cont else do+ if cmp == CmpEq then cont else do -- Andreas, 2014-04-12 do not short cut if type is blocked. ifBlockedType a (\ _ _ -> fallback) {-else-} $ \ a -> do -- do not short circuit size comparison!@@ -191,13 +193,21 @@ unifyPointers _ _ _ action = action -- unifyPointers cmp _ _ action | cmp /= CmpEq = action -- unifyPointers _ u v action = do--- old <- gets stDirty--- modify $ \s -> s { stDirty = False }+-- reportSLn "tc.ptr.unify" 50 $ "Maybe unifying pointers\n u = " ++ show u ++ "\n v = " ++ show v+-- old <- use stDirty+-- stDirty .= False -- action+-- reportSLn "tc.ptr.unify" 50 $ "Finished comparison\n u = " ++ show u ++ "\n v = " ++ show v -- (u, v) <- instantiate (u, v)--- dirty <- gets stDirty--- modify $ \s -> s { stDirty = old }--- when (not dirty) $ forceEqualTerms u v+-- reportSLn "tc.ptr.unify" 50 $ "After instantiation\n u = " ++ show u ++ "\n v = " ++ show v+-- dirty <- use stDirty+-- stDirty .= old+-- if dirty then verboseS "profile.sharing" 20 (tick "unifyPtr: dirty")+-- else do+-- verboseS "profile.sharing" 20 (tick "unifyPtr: clean")+-- reportSLn "tc.ptr.unify" 80 $ "Unifying\n u = " ++ show u ++ "\n v = " ++ show v+-- forceEqualTerms u v+-- reportSLn "tc.ptr.unify" 80 $ "After unification\n u = " ++ show u ++ "\n v = " ++ show v -- | Try to assign meta. If meta is projected, try to eta-expand -- and run conversion check again.@@ -238,6 +248,11 @@ isSize <- isJust <$> isSizeType a' s <- reduce $ getSort a' mlvl <- mlevel+ reportSDoc "tc.conv.level" 60 $ nest 2 $ sep+ [ text $ "a' = " ++ show a'+ , text $ "mlvl = " ++ show mlvl+ , text $ "(Just (ignoreSharing $ unEl a') == mlvl) = " ++ show (Just (ignoreSharing $ unEl a') == mlvl)+ ] case s of Prop | proofIrr -> return () _ | isSize -> compareSizes cmp m n@@ -510,9 +525,16 @@ (_, Apply arg : _) -> arg _ -> __IMPOSSIBLE__ -- Infer its type.+ reportSDoc "tc.conv.infer" 30 $+ text "inferring type of internal arg: " <+> prettyTCM arg targ <- infer $ unArg arg+ reportSDoc "tc.conv.infer" 30 $+ text "inferred type: " <+> prettyTCM targ -- getDefType wants the argument type reduced.- fromMaybeM __IMPOSSIBLE__ $ getDefType f =<< reduce targ+ -- Andreas, 2016-02-09, Issue 1825: The type of arg might be+ -- a meta-variable, e.g. in interactive development.+ -- In this case, we postpone.+ fromMaybeM patternViolation $ getDefType f =<< reduce targ -- The polarity vector of projection-like functions -- does not include the parameters. pol <- getPolarity' cmp f@@ -657,7 +679,7 @@ then (arg1 $>) <$> blockTermOnProblem b (unArg arg1) pid else return arg1 -- continue, possibly with blocked instantiation- compareElims pols (piApply a [arg]) (apply v [arg]) els1 els2+ compareElims pols (codom `lazyAbsApp` unArg arg) (apply v [arg]) els1 els2 -- any left over constraints of arg are associatd to the comparison stealConstraints pid @@ -716,30 +738,6 @@ ] patternViolation -{-- res <- getDefType f a -- get type of projection (like) function- case res of- Just ft -> do- let arg = defaultArg v -- we could get the proper Arg deco from ft- c = ft `piApply` [arg]- u <- applyDef f arg -- correct both for proj.s and non proj.s- (cmp, els1, els2) <- return $- case fst $ nextPolarity pols0 of- Invariant -> (CmpEq , els1, els2)- Covariant -> (CmpLeq, els1, els2)- Contravariant -> (CmpLeq, els2, els1)- Nonvariant -> __IMPOSSIBLE__ -- the polarity should be Invariant- pols' <- getPolarity' cmp f- compareElims pols' c u els1 els2- _ -> do- reportSDoc "impossible" 10 $ sep- [ text $ "projection " ++ show f- , text "applied to value " <+> prettyTCM v- , text "of unexpected type " <+> prettyTCM a- ]- patternViolation- -- __IMPOSSIBLE__--} -- | "Compare" two terms in irrelevant position. This always succeeds. -- However, we can dig for solutions of irrelevant metas in the@@ -877,9 +875,9 @@ if n <= 0 then fallback else do ifBlockedType b2 (\ _ _ -> fallback) $ \ _ -> do (args, t1') <- implicitArgs n (NotHidden /=) t1- coerceSize (v `apply` args) t1' t2+ coerceSize leqType (v `apply` args) t1' t2 where- fallback = coerceSize v t1 t2+ fallback = coerceSize leqType v t1 t2 -- | Account for situations like @k : (Size< j) <= (Size< k + 1)@ --@@ -889,8 +887,8 @@ -- TODO. -- -- For now, we do a cheap heuristics.-coerceSize :: Term -> Type -> Type -> TCM Term-coerceSize v t1 t2 = workOnTypes $ do+coerceSize :: (Type -> Type -> TCM ()) -> Term -> Type -> Type -> TCM Term+coerceSize leqType v t1 t2 = workOnTypes $ do let fallback = v <$ leqType t1 t2 done = caseMaybeM (isSizeType t1) fallback $ \ b1 -> return v -- Andreas, 2015-07-22, Issue 1615:@@ -956,7 +954,7 @@ (SizeUniv, _ ) -> equalSort s1 s2 (_ , SizeUniv) -> equalSort s1 s2 - (Type a , Type b ) -> unlessM typeInType $ leqLevel a b+ (Type a , Type b ) -> leqLevel a b (Prop , Prop ) -> yes (Prop , Type _ ) -> yes@@ -966,9 +964,9 @@ -- (SizeUniv, _ ) -> no -- (_ , SizeUniv) -> no - (Inf , _ ) -> unlessM typeInType $ equalSort s1 s2- (DLub{} , _ ) -> unlessM typeInType $ postpone- (_ , DLub{} ) -> unlessM typeInType $ postpone+ (Inf , _ ) -> equalSort s1 s2+ (DLub{} , _ ) -> postpone+ (_ , DLub{} ) -> postpone leqLevel :: Level -> Level -> TCM () leqLevel a b = liftTCM $ do@@ -976,8 +974,11 @@ text "compareLevel" <+> sep [ prettyTCM a <+> text "=<" , prettyTCM b ]- a <- reduce a- b <- reduce b+ -- Andreas, 2015-12-28 Issue 1757+ -- We normalize both sides to make the syntactic equality check (==) stronger.+ -- See case for `same term` below.+ a <- normalise a+ b <- normalise b catchConstraint (LevelCmp CmpLeq a b) $ leqView a b where leqView a@(Max as) b@(Max bs) = do@@ -994,7 +995,7 @@ ([], _) -> ok -- as ≤ 0- (as, []) -> sequence_ [ equalLevel (Max [a]) (Max []) | a <- as ]+ (as, []) -> sequence_ [ equalLevel' (Max [a]) (Max []) | a <- as ] -- as ≤ [b] (as@(_:_:_), [b]) -> sequence_ [ leqView (Max [a]) (Max [b]) | a <- as ]@@ -1042,7 +1043,7 @@ -- [a] ≤ [neutral] ([a@(Plus n _)], [b@(Plus m NeutralLevel{})])- | m == n -> equalLevel (Max [a]) (Max [b])+ | m == n -> equalLevel' (Max [a]) (Max [b]) -- Andreas, 2014-04-07: This call to equalLevel is ok even if we removed -- subsumed terms from the lhs. @@ -1050,7 +1051,7 @@ _ -> postpone where ok = return ()- notok = typeError $ NotLeqSort (Type a) (Type b)+ notok = unlessM typeInType $ typeError $ NotLeqSort (Type a) (Type b) postpone = patternViolation wrap m = catchError m $ \e ->@@ -1086,6 +1087,11 @@ equalLevel a b = do -- Andreas, 2013-10-31 Use normalization to make syntactic equality stronger (a, b) <- normalise (a, b)+ equalLevel' a b++-- | Precondition: levels are 'normalise'd.+equalLevel' :: Level -> Level -> TCM ()+equalLevel' a b = do reportSLn "tc.conv.level" 50 $ "equalLevel (" ++ show a ++ ") (" ++ show b ++ ")" liftTCM $ catchConstraint (LevelCmp CmpEq a b) $ check a b@@ -1139,8 +1145,8 @@ (_, [ClosedLevel{}]) | any isNeutral as -> notok -- 0 == any- ([ClosedLevel 0], bs@(_:_:_)) -> sequence_ [ equalLevel (Max []) (Max [b]) | b <- bs ]- (as@(_:_:_), [ClosedLevel 0]) -> sequence_ [ equalLevel (Max [a]) (Max []) | a <- as ]+ ([ClosedLevel 0], bs@(_:_:_)) -> sequence_ [ equalLevel' (Max []) (Max [b]) | b <- bs ]+ (as@(_:_:_), [ClosedLevel 0]) -> sequence_ [ equalLevel' (Max [a]) (Max []) | a <- as ] -- Andreas, 2014-04-07 Why should the following be ok? -- X (suc a) could be different from X (suc (suc a)) -- -- Same meta@@ -1175,13 +1181,14 @@ _ -> postpone where- a === b = do+ a === b = unlessM typeInType $ do lvl <- levelType equalAtom lvl a b as =!= bs = levelTm (Max as) === levelTm (Max bs) ok = return ()- notok = typeError $ UnequalSorts (Type a) (Type b)+ notok = unlessM typeInType notOk+ notOk = typeError $ UnequalSorts (Type a) (Type b) postpone = do reportSLn "tc.conv.level" 30 $ "postponing: " ++ show a ++ " == " ++ show b patternViolation@@ -1204,7 +1211,7 @@ subtr n (ClosedLevel m) | m >= n = return $ ClosedLevel (m - n)- | otherwise = notok+ | otherwise = ifM typeInType (return $ ClosedLevel 0) $ notOk subtr n (Plus m a) | m >= n = return $ Plus (m - n) a subtr _ (Plus _ BlockedLevel{}) = postpone@@ -1244,12 +1251,11 @@ -- | Check that the first sort equal to the second. equalSort :: Sort -> Sort -> TCM () equalSort s1 s2 = do- ifM typeInType (return ()) $ catchConstraint (SortCmp CmpEq s1 s2) $ do (s1,s2) <- reduce (s1,s2) let postpone = addConstraint (SortCmp CmpEq s1 s2) yes = return ()- no = typeError $ UnequalSorts s1 s2+ no = unlessM typeInType $ typeError $ UnequalSorts s1 s2 -- Test whether a level is infinity. isInf ClosedLevel{} = no
src/full/Agda/TypeChecking/Coverage.hs view
@@ -1,10 +1,10 @@-{-# OPTIONS_GHC -fwarn-unused-imports #-}--{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE PatternGuards #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE TupleSections #-} +{-# OPTIONS_GHC -fwarn-unused-imports #-}+ {-| Coverage checking, case splitting, and splitting for refine tactics. -}@@ -32,9 +32,8 @@ import qualified Data.Set as Set import qualified Data.Traversable as Trav -import qualified Agda.Syntax.Common as Common-import Agda.Syntax.Common hiding (Arg,Dom)-import Agda.Syntax.Internal as I+import Agda.Syntax.Common+import Agda.Syntax.Internal import Agda.Syntax.Internal.Pattern import Agda.TypeChecking.Monad@@ -42,8 +41,6 @@ import Agda.TypeChecking.Rules.LHS.Problem (flexibleVarFromHiding) import Agda.TypeChecking.Rules.LHS.Unify-import Agda.TypeChecking.Rules.LHS.Instantiate (instantiateTel)-import Agda.TypeChecking.Rules.LHS (instantiatePattern) import Agda.TypeChecking.Coverage.Match import Agda.TypeChecking.Coverage.SplitTree@@ -51,6 +48,7 @@ import Agda.TypeChecking.Datatypes (getConForm) import Agda.TypeChecking.Pretty import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Substitute.Pattern import Agda.TypeChecking.Reduce import Agda.TypeChecking.Records (isRecordType) import Agda.TypeChecking.Telescope@@ -73,12 +71,10 @@ data SplitClause = SClause { scTel :: Telescope -- ^ Type of variables in @scPats@.- , scPerm :: Permutation- -- ^ How to get from the variables in the patterns to the telescope.- , scPats :: [I.NamedArg Pattern]+ , scPats :: [NamedArg DeBruijnPattern] -- ^ The patterns leading to the currently considered branch of -- the split tree.- , scSubst :: Substitution+ , scSubst :: PatternSubstitution -- ^ Substitution from 'scTel' to old context. -- Only needed directly after split on variable: -- * To update 'scTarget'@@ -91,7 +87,7 @@ -- 'splitResult', which does not split on a variable, -- should reset it to the identity 'idS', lest it be -- applied to 'scTarget' again, leading to Issue 1294.- , scTarget :: Maybe (I.Arg Type)+ , scTarget :: Maybe (Arg Type) -- ^ The type of the rhs, living in context 'scTel'. -- This invariant is broken before calls to 'fixTarget'; -- there, 'scTarget' lives in the old context.@@ -101,7 +97,8 @@ -- | A @Covering@ is the result of splitting a 'SplitClause'. data Covering = Covering- { covSplitArg :: Nat -- ^ De Bruijn level of argument we split on.+ { covSplitArg :: Arg Nat+ -- ^ De Bruijn level (counting dot patterns) of argument we split on. , covSplitClauses :: [(QName, SplitClause)] -- ^ Covering clauses, indexed by constructor these clauses share. }@@ -114,7 +111,6 @@ clauseToSplitClause :: Clause -> SplitClause clauseToSplitClause cl = SClause { scTel = clauseTel cl- , scPerm = clausePerm cl , scPats = namedClausePats cl , scSubst = idS -- Andreas, 2014-07-15 TODO: Is this ok? , scTarget = clauseType cl@@ -127,13 +123,11 @@ coverageCheck f t cs = do TelV gamma a <- telView t let -- n = arity- -- lgamma/gamma' = telescope of non-dropped arguments -- xs = variable patterns fitting lgamma n = size gamma- lgamma = telToList gamma- xs = map (argFromDom . fmap (namedVarP . fst)) $ lgamma+ xs = teleNamedArgs gamma -- construct the initial split clause- sc = SClause gamma (idP n) xs idS $ Just $ defaultArg a+ sc = SClause gamma xs idS $ Just $ defaultArg a reportSDoc "tc.cover.top" 10 $ vcat [ text $ "Coverage checking " ++ show f , nest 2 $ vcat $ map (text . show . clausePats) cs@@ -145,11 +139,10 @@ [ text "generated split tree for" <+> prettyTCM f , text $ show splitTree ]- whenM (optCompletenessCheck <$> pragmaOptions) $- -- report an error if there are uncovered cases- unless (null pss) $- setCurrentRange cs $- typeError $ CoverageFailure f (map (map $ fmap namedThing) pss)+ -- report an error if there are uncovered cases+ unless (null pss) $+ setCurrentRange cs $+ typeError $ CoverageFailure f (map (map (fmap namedThing)) pss) -- is = indices of unreachable clauses let is = Set.toList $ Set.difference (Set.fromList [0..genericLength cs - 1]) used -- report an error if there are unreachable clauses@@ -163,23 +156,35 @@ -- | @cover f cs (SClause _ _ ps _) = return (splitTree, used, pss)@. -- checks that the list of clauses @cs@ covers the given split clause. -- Returns the @splitTree@, the @used@ clauses, and missing cases @pss@.-cover :: QName -> [Clause] -> SplitClause -> TCM (SplitTree, Set Nat, [[I.NamedArg Pattern]])-cover f cs sc@(SClause tel perm ps _ target) = do+cover :: QName -> [Clause] -> SplitClause ->+ TCM (SplitTree, Set Nat, [[NamedArg DeBruijnPattern]])+cover f cs sc@(SClause tel ps _ target) = do reportSDoc "tc.cover.cover" 10 $ vcat [ text "checking coverage of pattern:" , nest 2 $ text "tel =" <+> prettyTCM tel- , nest 2 $ text "perm =" <+> text (show perm) , nest 2 $ text "ps =" <+> text (show ps) ] let ups = map (fmap namedThing) ps- case match cs ups perm of- Yes i -> do+ exactSplitEnabled <- optExactSplit <$> pragmaOptions+ case match cs ups of+ Yes (i,mps)+ | not exactSplitEnabled || (clauseCatchall (cs !! i) || all isTrivialMPattern mps)+ -> do reportSLn "tc.cover.cover" 10 $ "pattern covered by clause " ++ show i -- Check if any earlier clauses could match with appropriate literals- let is = [ j | (j, c) <- zip [0..i-1] cs, matchLits c ups perm ]+ let is = [ j | (j, c) <- zip [0..i-1] cs, matchLits c ups ] reportSLn "tc.cover.cover" 10 $ "literal matches: " ++ show is return (SplittingDone (size tel), Set.fromList (i : is), [])- No -> do++ | otherwise -> do+ reportSDoc "tc.cover.cover" 10 $ vcat+ [ text $ "pattern covered by clause " ++ show i ++ " but case splitting was not exact. remaining mpats: "+ , nest 2 $ vcat $ map (text . show) mps+ ]+ setCurrentRange (cs !! i) $+ typeError $ CoverageNoExactSplit f (cs !! i)++ No -> do reportSLn "tc.cover" 20 $ "pattern is not covered" return (SplittingDone (size tel), Set.empty, [ps]) @@ -221,9 +226,61 @@ return (SplittingDone (size tel), Set.empty, []) Right (Covering n scs) -> do (trees, useds, psss) <- unzip3 <$> mapM (cover f cs) (map snd scs)- let tree = SplitAt n $ zipWith (\ (q,_) t -> (q,t)) scs trees+ -- Jesper, 2016-03-10 We need to remember which variables were+ -- eta-expanded by the unifier in order to generate a correct split+ -- tree (see Issue 1872).+ reportSDoc "tc.cover.split.eta" 60 $ vcat+ [ text "etaRecordSplits"+ , nest 2 $ vcat+ [ text "n = " <+> text (show n)+ , text "scs = " <+> prettyTCM scs+ , text "ups = " <+> text (show ups)+ ]+ ]+ let trees' = zipWith (etaRecordSplits (unArg n) ups) scs trees+ tree = SplitAt n trees' return (tree, Set.unions useds, concat psss) + where+ gatherEtaSplits :: Int -> SplitClause+ -> [Arg DeBruijnPattern] -> [Arg DeBruijnPattern]+ gatherEtaSplits n sc []+ | n >= 0 = __IMPOSSIBLE__ -- we should have encountered the main+ -- split by now already+ | otherwise = []+ gatherEtaSplits n sc (p:ps) = case unArg p of+ VarP (i,_)+ | n == 0 -> case lookupS (scSubst sc) i of -- this is the main split+ VarP _ -> __IMPOSSIBLE__+ DotP _ -> __IMPOSSIBLE__+ ConP _ _ qs ->+ map (fmap namedThing) qs ++ gatherEtaSplits (-1) sc ps+ LitP _ -> __IMPOSSIBLE__+ ProjP _ -> __IMPOSSIBLE__+ | otherwise ->+ (p $> lookupS (scSubst sc) i) : gatherEtaSplits (n-1) sc ps+ DotP _ -> p : gatherEtaSplits (n-1) sc ps -- count dot patterns+ ConP _ _ qs -> gatherEtaSplits n sc (map (fmap namedThing) qs ++ ps)+ LitP _ -> gatherEtaSplits n sc ps+ ProjP _ -> gatherEtaSplits n sc ps++ addEtaSplits :: Int -> [Arg DeBruijnPattern] -> SplitTree -> SplitTree+ addEtaSplits k [] t = t+ addEtaSplits k (p:ps) t = case unArg p of+ VarP _ -> addEtaSplits (k+1) ps t+ DotP _ -> addEtaSplits (k+1) ps t+ ConP c cpi nqs ->+ let qs = map (fmap namedThing) nqs+ t' = [(conName c , addEtaSplits k (qs ++ ps) t)]+ in SplitAt (p $> k) t'+ LitP _ -> __IMPOSSIBLE__+ ProjP _ -> __IMPOSSIBLE__++ etaRecordSplits :: Int -> [Arg DeBruijnPattern] -> (QName,SplitClause)+ -> SplitTree -> (QName,SplitTree)+ etaRecordSplits n ps (q , sc) t =+ (q , addEtaSplits 0 (gatherEtaSplits n sc ps) t)+ splitStrategy :: BlockingVars -> Telescope -> TCM BlockingVars splitStrategy bs tel = return $ updateLast clearBlockingVarCons xs -- Make sure we do not insists on precomputed coverage when@@ -278,11 +335,10 @@ -- if target becomes a function type. -- Returns the domains of the function type (if any). fixTarget :: SplitClause -> TCM (Telescope, SplitClause)-fixTarget sc@SClause{ scTel = sctel, scPerm = perm, scPats = ps, scSubst = sigma, scTarget = target } =+fixTarget sc@SClause{ scTel = sctel, scPats = ps, scSubst = sigma, scTarget = target } = caseMaybe target (return (empty, sc)) $ \ a -> do reportSDoc "tc.cover.target" 20 $ sep [ text "split clause telescope: " <+> prettyTCM sctel- , text "old permutation : " <+> prettyTCM perm , text "old patterns : " <+> sep (map (prettyTCM . namedArg) ps) , text "substitution : " <+> text (show sigma) ]@@ -290,7 +346,7 @@ [ text "target type before substitution (variables may be wrong): " <+> do addContext sctel $ prettyTCM a ]- TelV tel b <- telView $ applySubst sigma $ unArg a+ TelV tel b <- telView $ applyPatSubst sigma $ unArg a reportSDoc "tc.cover.target" 10 $ sep [ text "target type telescope (after substitution): " <+> do addContext sctel $ prettyTCM tel@@ -298,19 +354,17 @@ addContext sctel $ addContext tel $ prettyTCM b ] let n = size tel- lgamma = telToList tel- xs = for lgamma $ \ (Common.Dom ai (x, _)) -> Common.Arg ai $ namedVarP "_"+ xs = teleNamedArgs tel -- Compute new split clause- sctel' = telFromList $ telToList (raise n sctel) ++ lgamma- perm' = liftP n $ scPerm sc+ sctel' = telFromList $ telToList (raise n sctel) ++ telToList tel -- Dot patterns in @ps@ need to be raised! (Issue 1298)- ps' = raise n ps ++ xs+ ps' = applySubst (raiseS n) ps ++ xs newTarget = Just $ a $> b sc' = SClause { scTel = sctel'- , scPerm = perm' , scPats = ps'- , scSubst = liftS n $ sigma+ , scSubst = wkS n $ sigma -- Should be wkS instead of liftS since+ -- variables are only added to new tel. , scTarget = newTarget } -- Separate debug printing to find cause of crash (Issue 1374)@@ -318,9 +372,6 @@ [ text "new split clause telescope : " <+> prettyTCM sctel' ] reportSDoc "tc.cover.target" 30 $ sep- [ text "new split clause permutation : " <+> prettyTCM perm'- ]- reportSDoc "tc.cover.target" 30 $ sep [ text "new split clause patterns : " <+> sep (map (prettyTCM . namedArg) ps') ] reportSDoc "tc.cover.target" 30 $ sep@@ -336,7 +387,7 @@ ] return $ if n == 0 then (empty, sc { scTarget = newTarget }) else (tel, sc') --- | @computeNeighbourhood delta1 delta2 perm d pars ixs hix hps con@+-- | @computeNeighbourhood delta1 delta2 d pars ixs hix hps con@ -- -- @ -- delta1 Telescope before split point@@ -346,23 +397,22 @@ -- pars Data type parameters -- ixs Data type indices -- hix Index of split variable--- hps Patterns with hole at split point+-- ps Patterns before doing the split -- con Constructor to fit into hole -- @ -- @dtype == d pars ixs@ computeNeighbourhood- :: Telescope -- ^ Telescope before split point.- -> PatVarName -- ^ Name of pattern variable at split point.- -> Telescope -- ^ Telescope after split point.- -> Permutation -- ^- -> QName -- ^ Name of datatype to split at.- -> Args -- ^ Data type parameters.- -> Args -- ^ Data type indices.- -> Nat -- ^ Index of split variable.- -> OneHolePatterns -- ^ Patterns with hole at split point.- -> QName -- ^ Constructor to fit into hole.- -> CoverM (Maybe SplitClause) -- ^ New split clause if successful.-computeNeighbourhood delta1 n delta2 perm d pars ixs hix hps c = do+ :: Telescope -- ^ Telescope before split point.+ -> PatVarName -- ^ Name of pattern variable at split point.+ -> Telescope -- ^ Telescope after split point.+ -> QName -- ^ Name of datatype to split at.+ -> Args -- ^ Data type parameters.+ -> Args -- ^ Data type indices.+ -> Nat -- ^ Index of split variable.+ -> [NamedArg DeBruijnPattern] -- ^ Patterns before doing the split.+ -> QName -- ^ Constructor to fit into hole.+ -> CoverM (Maybe SplitClause) -- ^ New split clause if successful.+computeNeighbourhood delta1 n delta2 d pars ixs hix ps c = do -- Get the type of the datatype dtype <- liftTCM $ (`piApply` pars) . defType <$> getConstInfo d@@ -395,7 +445,7 @@ gammal = map (fmap preserve) . telToList $ gamma0 gamma = telFromList gammal - debugInit con ctype d pars ixs cixs delta1 delta2 gamma hps hix+ debugInit con ctype d pars ixs cixs delta1 delta2 gamma ps hix -- All variables are flexible -- let flex = [0..size delta1 + size gamma - 1]@@ -407,8 +457,12 @@ let conIxs = drop (size pars) cixs givenIxs = raise (size gamma) ixs - r <- addCtxTel (delta1 `abstract` gamma) $- unifyIndices flex (raise (size gamma) dtype) conIxs givenIxs+ r <- unifyIndices+ (delta1 `abstract` gamma)+ flex+ (raise (size gamma) dtype)+ conIxs+ givenIxs case r of NoUnify {} -> debugNoUnify $> Nothing@@ -416,73 +470,39 @@ DontKnow{} -> do debugCantSplit throwException $ CantSplit (conName con) (delta1 `abstract` gamma) conIxs givenIxs- Unifies sub -> do- debugSubst "sub" sub-- -- Substitute the constructor for x in Δ₂: Δ₂' = Δ₂[conv/x]- let conv = Con con $ teleArgs gamma -- Θ Γ ⊢ conv (for any Θ)- rho0 = consS conv $ raiseS (size gamma)- -- Andreas, 2015-06-13 share substitution rho0- delta2' = applySubst rho0 delta2- -- delta2' = subst 0 conv $ raiseFrom 1 (size gamma) delta2- debugTel "delta2'" delta2'+ Unifies (delta1',rho0) -> do+ debugSubst "rho0" rho0 - -- Compute a substitution ρ : Δ₁ΓΔ₂' → Δ₁(x:D)Δ₂'- let rho = liftS (size delta2') $ rho0- -- [ Var i [] | i <- [0..size delta2' - 1] ]- -- ++ [ raise (size delta2') conv ]- -- ++ [ Var i [] | i <- [size delta2' + size gamma ..] ]+ -- We have Δ₁' ⊢ ρ₀ : Δ₁Γ, so split it into the part for Δ₁ and the part for Γ+ let (rho1,rho2) = splitS (size gamma) rho0 - -- Plug the hole with the constructor and apply ρ -- Andreas, 2015-05-01 I guess it is fine to use @noConPatternInfo@ -- as the result of splitting is never used further down the pipeline. -- After splitting, Agda reloads the file.- let conp = ConP con noConPatternInfo $ map (fmap namedVarP) $ teleArgNames gamma- ps = plugHole conp hps- ps' = applySubst rho ps -- Δ₁ΓΔ₂' ⊢ ps'- debugPlugged ps ps'-- -- Δ₁Γ ⊢ sub, we need something in Δ₁ΓΔ₂'- -- Also needs to be padded with Nothing's to have the right length.- let pad n xs x = xs ++ replicate (max 0 $ n - size xs) x- sub' = replicate (size delta2') Nothing ++- pad (size delta1 + size gamma) (raise (size delta2') sub) Nothing- debugSubst "sub'" sub'-- -- Θ = Δ₁ΓΔ₂'- let theta = delta1 `abstract` gamma `abstract` delta2'- debugTel "theta" theta-- -- Apply the unifying substitution to Θ- -- We get ρ' : Θ' -> Θ- -- π : Θ' -> Θ- (theta', iperm, rho', _) <- liftTCM $ instantiateTel sub' theta- debugTel "theta'" theta'- debugShow "iperm" iperm-- -- Compute final permutation- let perm' = expandP hix (size gamma) perm -- perm' : Θ -> Δ₁(x : D)Δ₂- rperm = iperm `composeP` perm'- debugShow "perm'" perm'- debugShow "rperm" rperm+ let conp = ConP con noConPatternInfo $ applySubst rho2 $ teleNamedArgs gamma - -- Compute the final patterns- let ps'' = instantiatePattern sub' perm' ps'- rps = applySubst rho' ps''+ -- Compute final context and substitution+ let rho3 = consS conp rho1 -- Δ₁' ⊢ ρ₃ : Δ₁(x:D)+ delta2' = applyPatSubst rho3 delta2 -- Δ₂' = Δ₂ρ₃+ delta' = delta1' `abstract` delta2' -- Δ' = Δ₁'Δ₂'+ rho = liftS (size delta2) rho3 -- Δ' ⊢ ρ : Δ₁(x:D)Δ₂ - -- Compute the final substitution- let rsub = applySubst rho' rho+ debugTel "delta'" delta'+ debugSubst "rho" rho - debugFinal theta' rperm rps+ -- Apply the substitution+ let ps' = applySubst rho ps+ debugPlugged ps ps' - return $ Just $ SClause theta' rperm rps rsub Nothing -- target fixed later+ return $ Just $ SClause delta' ps' rho Nothing -- target fixed later where debugInit con ctype d pars ixs cixs delta1 delta2 gamma hps hix = liftTCM $ reportSDoc "tc.cover.split.con" 20 $ vcat [ text "computeNeighbourhood" , nest 2 $ vcat- [ text "con =" <+> prettyTCM con+ [ text "context=" <+> (inTopContext . prettyTCM =<< getContextTelescope)+ , text "con =" <+> prettyTCM con , text "ctype =" <+> prettyTCM ctype , text "hps =" <+> text (show hps) , text "d =" <+> prettyTCM d@@ -504,7 +524,7 @@ debugSubst s sub = liftTCM $ reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat- [ text (s ++ " =") <+> brackets (fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) sub)+ [ text (s ++ " =") <+> prettyTCM sub ] debugTel s tel =@@ -523,10 +543,9 @@ , text "ps' =" <+> text (show ps') ] - debugFinal tel perm ps =+ debugFinal tel ps = liftTCM $ reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat [ text "rtel =" <+> prettyTCM tel- , text "rperm =" <+> text (show perm) , text "rps =" <+> text (show ps) ] @@ -537,9 +556,9 @@ -- | Entry point from @TypeChecking.Empty@ and @Interaction.BasicOps@. -- @splitLast CoInductive@ is used in the @refine@ tactics. -splitLast :: Induction -> Telescope -> [I.NamedArg Pattern] -> TCM (Either SplitError Covering)+splitLast :: Induction -> Telescope -> [NamedArg DeBruijnPattern] -> TCM (Either SplitError Covering) splitLast ind tel ps = split ind sc (BlockingVar 0 Nothing)- where sc = SClause tel (idP $ size tel) ps __IMPOSSIBLE__ Nothing+ where sc = SClause tel ps __IMPOSSIBLE__ Nothing -- | @split ind splitClause x = return res@ -- splits @splitClause@ at pattern var @x@ (de Bruijn index).@@ -559,27 +578,23 @@ -> SplitClause -> BlockingVar -> TCM (Either SplitError Covering)-split ind sc x = fmap (blendInAbsurdClause (splitDbIndexToLevel sc x)) <$>- split' ind sc x+split ind sc x = fmap blendInAbsurdClause <$> split' ind sc x where- blendInAbsurdClause :: Nat -> Either SplitClause Covering -> Covering- blendInAbsurdClause n = fromRight (const $ Covering n [])-- splitDbIndexToLevel :: SplitClause -> BlockingVar -> Nat- splitDbIndexToLevel sc@SClause{ scTel = tel, scPerm = perm } x =- dbIndexToLevel tel perm $ blockingVarNo x+ n = lookupPatternVar sc $ blockingVarNo x+ blendInAbsurdClause :: Either SplitClause Covering -> Covering+ blendInAbsurdClause = fromRight (const $ Covering n []) --- | Convert a de Bruijn index relative to a telescope to a de Buijn level.--- The result should be the argument (counted from left, starting with 0)--- to split at (dot patterns included!).-dbIndexToLevel :: Telescope -> Permutation -> Int -> Nat-dbIndexToLevel tel perm x = if n < 0 then __IMPOSSIBLE__ else n+-- | Convert a de Bruijn index relative to the clause telescope to a de Bruijn+-- level. The result should be the argument position (counted from left,+-- starting with 0) to split at (dot patterns included!).+lookupPatternVar :: SplitClause -> Int -> Arg Nat+lookupPatternVar SClause{ scTel = tel, scPats = pats } x = arg $>+ if n < 0 then __IMPOSSIBLE__ else n where n = if k < 0 then __IMPOSSIBLE__- else case permute perm [0..] !!! k of- Nothing -> __IMPOSSIBLE__- Just n -> n+ else fromMaybe __IMPOSSIBLE__ $ permPicks (dbPatPerm pats) !!! k k = size tel - x - 1+ arg = telVars (size tel) tel !! k -- | @split' ind splitClause x = return res@ -- splits @splitClause@ at pattern var @x@ (de Bruijn index).@@ -601,29 +616,15 @@ -> SplitClause -> BlockingVar -> TCM (Either SplitError (Either SplitClause Covering))-split' ind sc@(SClause tel perm ps _ target) (BlockingVar x mcons) = liftTCM $ runExceptionT $ do+split' ind sc@(SClause tel ps _ target) (BlockingVar x mcons) = liftTCM $ runExceptionT $ do - debugInit tel perm x ps+ debugInit tel x ps -- Split the telescope at the variable -- t = type of the variable, Δ₁ ⊢ t (n, t, delta1, delta2) <- do- let (tel1, Common.Dom info (n, t) : tel2) = genericSplitAt (size tel - x - 1) $ telToList tel- return (n, Common.Dom info t, telFromList tel1, telFromList tel2)-- -- Compute the one hole context of the patterns at the variable- (hps, hix) <- do- let holes = reverse $ permute perm $ zip [0..] $ allHolesWithContents ps- unless (length holes == length (telToList tel)) $- fail "split: bad holes or tel"-- -- There is always a variable at the given hole.- let (hix, (VarP s, hps)) = case holes !!! x of- Nothing -> __IMPOSSIBLE__- Just p -> p- debugHoleAndType delta1 delta2 s hps t-- return (hps, hix)+ let (tel1, Dom info (n, t) : tel2) = genericSplitAt (size tel - x - 1) $ telToList tel+ return (n, Dom info t, telFromList tel1, telFromList tel2) -- Check that t is a datatype or a record -- Andreas, 2010-09-21, isDatatype now directly throws an exception if it fails@@ -634,18 +635,17 @@ ns <- catMaybes <$> do forM cons $ \ con -> fmap (con,) <$> do- msc <- computeNeighbourhood delta1 n delta2 perm d pars ixs hix hps con+ msc <- computeNeighbourhood delta1 n delta2 d pars ixs x ps con Trav.forM msc $ \ sc -> lift $ snd <$> fixTarget sc{ scTarget = target } case ns of [] -> do- let absurd = VarP "()"+ let ps' = (fmap . fmap . fmap . fmap) (\(y,name) -> if (x==y) then (y,"()") else (y,name)) ps return $ Left $ SClause { scTel = telFromList $ telToList delta1 ++ [fmap ((,) "()") t] ++ -- add name "()" telToList delta2- , scPerm = perm- , scPats = plugHole absurd hps+ , scPats = ps , scSubst = idS -- not used anyway , scTarget = Nothing -- not used }@@ -670,12 +670,9 @@ ] throwException (GenericSplitError "precomputed set of constructors does not cover all cases") - _ -> return $ Right $ Covering xDBLevel ns+ _ -> return $ Right $ Covering (lookupPatternVar sc x) ns where- xDBLevel :: Nat- xDBLevel = dbIndexToLevel tel perm x- inContextOfT :: MonadTCM tcm => tcm a -> tcm a inContextOfT = addCtxTel tel . escapeContext (x + 1) @@ -683,21 +680,20 @@ inContextOfDelta2 = addCtxTel tel . escapeContext x -- Debug printing- debugInit tel perm x ps =+ debugInit tel x ps = liftTCM $ reportSDoc "tc.cover.top" 10 $ vcat [ text "TypeChecking.Coverage.split': split" , nest 2 $ vcat [ text "tel =" <+> prettyTCM tel- , text "perm =" <+> text (show perm) , text "x =" <+> text (show x) , text "ps =" <+> text (show ps) ] ] - debugHoleAndType delta1 delta2 s hps t =+ debugHoleAndType delta1 delta2 s ps t = liftTCM $ reportSDoc "tc.cover.top" 10 $ nest 2 $ vcat $ [ text "p =" <+> text (patVarNameToString s)- , text "hps =" <+> text (show hps)+ , text "ps =" <+> text (show ps) , text "delta1 =" <+> prettyTCM delta1 , text "delta2 =" <+> inContextOfDelta2 (prettyTCM delta2) , text "t =" <+> inContextOfT (prettyTCM t)@@ -710,7 +706,7 @@ -- otherwise @res == Nothing@. -- Note that the empty set of split clauses is returned if the record has no fields. splitResult :: QName -> SplitClause -> TCM (Maybe Covering)-splitResult f sc@(SClause tel perm ps _ target) = do+splitResult f sc@(SClause tel ps _ target) = do reportSDoc "tc.cover.split" 10 $ vcat [ text "splitting result:" , nest 2 $ text "f =" <+> text (show f)@@ -728,23 +724,23 @@ , text $ "and have fields fs = " ++ show fs ] fvs <- freeVarsToApply f- let es = patternsToElims perm ps+ let es = patternsToElims ps let self = defaultArg $ Def f (map Apply fvs) `applyE` es pargs = vs ++ [self] reportSDoc "tc.cover" 20 $ sep [ text "we are self = " <+> (addCtxTel tel $ prettyTCM $ unArg self) ]- let -- WRONG: -- n = length ps -- past the last argument, is pos. of proj pat.- -- n = size tel -- past the last variable, is pos. of proj pat. DURING SPLITTING- n = permRange perm -- Andreas & James, 2013-11-19 includes the dot patterns!+ let n = defaultArg $ permRange (dbPatPerm ps)+ -- Andreas & James, 2013-11-19 includes the dot patterns! -- See test/succeed/CopatternsAndDotPatterns.agda for a case with dot patterns -- and copatterns which fails for @n = size tel@ with a broken case tree.+ Just . Covering n <$> do forM fs $ \ proj -> do -- compute the new target dType <- defType <$> do getConstInfo $ unArg proj -- WRONG: typeOfConst $ unArg proj let -- type of projection instantiated at self- target' = Just $ proj $> dType `apply` pargs+ target' = Just $ proj $> dType `piApply` pargs sc' = sc { scPats = scPats sc ++ [fmap (Named Nothing . ProjP) proj] , scSubst = idS , scTarget = target'@@ -756,11 +752,10 @@ -- | For debugging only. instance PrettyTCM SplitClause where- prettyTCM (SClause tel perm pats sigma target) = sep+ prettyTCM (SClause tel pats sigma target) = sep [ text "SplitClause" , nest 2 $ vcat [ text "tel = " <+> prettyTCM tel- , text "perm = " <+> prettyTCM perm , text "pats = " <+> sep (map (prettyTCM . namedArg) pats) , text "subst = " <+> (text . show) sigma , text "target = " <+> do
src/full/Agda/TypeChecking/Coverage/Match.hs view
@@ -13,7 +13,7 @@ import Data.Traversable (traverse) import Agda.Syntax.Abstract (IsProjP(..))-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg)+import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.Syntax.Internal.Pattern () import Agda.Syntax.Literal@@ -28,7 +28,7 @@ {-| Given 1. the function clauses @cs@- 2. the patterns @ps@ and permutation @perm@ of a split clause+ 2. the patterns @ps@ we want to compute a variable index of the split clause to split on next. @@ -40,10 +40,10 @@ -} -- | Match the given patterns against a list of clauses-match :: [Clause] -> [Arg Pattern] -> Permutation -> Match Nat-match cs ps perm = foldr choice No $ zipWith matchIt [0..] cs+match :: [Clause] -> [Arg DeBruijnPattern] -> Match (Nat,[MPat])+match cs ps = foldr choice No $ zipWith matchIt [0..] cs where- mps = buildMPatterns perm ps+ mps = buildMPatterns ps -- If liberal matching on literals fails or blocks we go with that. -- If it succeeds we use the result from conservative literal matching.@@ -66,27 +66,35 @@ -- are blocking a match. data MPat = VarMP Nat -- ^ De Bruijn index (usually, rightmost variable in patterns is 0).- | ConMP ConHead [Arg MPat]+ | ConMP ConHead (Maybe ConPOrigin) [Arg MPat] | LitMP Literal+ | DotMP MPat -- ^ For keeping track of the original dot positions. | WildMP -- ^ For dot patterns that cannot be turned into patterns. | ProjMP QName -- ^ Projection copattern.+ deriving (Show) -buildMPatterns :: Permutation -> [Arg Pattern] -> [Arg MPat]-buildMPatterns perm ps = evalState (mapM (traverse build) ps) xs+buildMPatterns :: [Arg DeBruijnPattern] -> [Arg MPat]+buildMPatterns ps = map (fmap build) ps where- xs = permPicks $ flipP $ invertP __IMPOSSIBLE__ perm- tick = do x : xs <- get; put xs; return x-- build (VarP _) = VarMP <$> tick- build (ConP con _ ps) = ConMP con <$> mapM (traverse build . fmap namedThing) ps- build (DotP t) = tick *> buildT t- build (LitP l) = return $ LitMP l- build (ProjP dest) = return $ ProjMP dest+ build (VarP (i,_)) = VarMP i+ build (ConP con i ps) = ConMP con (conPRecord i) $ buildMPatterns $ map (fmap namedThing) $ ps+ build (DotP t) = DotMP $ buildT t+ build (LitP l) = LitMP l+ build (ProjP dest) = ProjMP dest - buildT (Con c args) = ConMP c <$> mapM (traverse buildT) args- buildT (Var i []) = return (VarMP i)- buildT _ = return WildMP+ buildT (Con c args) = ConMP c Nothing $ map (fmap buildT) args+ buildT (Var i []) = VarMP i+ buildT (Shared p) = buildT (derefPtr p)+ buildT _ = WildMP +isTrivialMPattern :: MPat -> Bool+isTrivialMPattern VarMP{} = True+isTrivialMPattern (ConMP c (Just _) ps) = all isTrivialMPattern $ map unArg ps+isTrivialMPattern (ConMP c Nothing ps) = False+isTrivialMPattern LitMP{} = False+isTrivialMPattern DotMP{} = True+isTrivialMPattern WildMP{} = True+isTrivialMPattern ProjMP{} = False -- or True? -- | If matching is inconclusive (@Block@) we want to know which -- variables are blocking the match.@@ -143,27 +151,27 @@ choice BlockP m = BlockP choice No m = m -type MatchLit = Literal -> MPat -> Match ()+type MatchLit = Literal -> MPat -> Match [MPat] noMatchLit :: MatchLit noMatchLit _ _ = No yesMatchLit :: MatchLit-yesMatchLit _ VarMP{} = Yes ()-yesMatchLit _ WildMP{} = Yes ()+yesMatchLit _ q@VarMP{} = Yes [q]+yesMatchLit _ q@WildMP{} = Yes [q] yesMatchLit _ _ = No -- | Check if a clause could match given generously chosen literals-matchLits :: Clause -> [Arg Pattern] -> Permutation -> Bool-matchLits c ps perm =- case matchClause yesMatchLit (buildMPatterns perm ps) 0 c of+matchLits :: Clause -> [Arg DeBruijnPattern] -> Bool+matchLits c ps =+ case matchClause yesMatchLit (buildMPatterns ps) 0 c of Yes _ -> True _ -> False -- | @matchClause mlit qs i c@ checks whether clause @c@ number @i@ -- covers a split clause with patterns @qs@.-matchClause :: MatchLit -> [Arg MPat] -> Nat -> Clause -> Match Nat-matchClause mlit qs i c = i <$ matchPats mlit (clausePats c) qs+matchClause :: MatchLit -> [Arg MPat] -> Nat -> Clause -> Match (Nat,[MPat])+matchClause mlit qs i c = (\q -> (i,q)) <$> matchPats mlit (clausePats c) qs -- | @matchPats mlit ps qs@ checks whether a function clause with patterns -- @ps@ covers a split clause with patterns @qs@.@@ -178,7 +186,7 @@ -- F true = Set -- F = \ x -> Set -- @-matchPats :: MatchLit -> [Arg Pattern] -> [Arg MPat] -> Match ()+matchPats :: MatchLit -> [Arg (Pattern' a)] -> [Arg MPat] -> Match [MPat] matchPats mlit ps qs = mconcat $ properMatchesLeft : zipWith (matchPat mlit) (map unArg ps) (map unArg qs) ++ [ projPatternsLeft ]@@ -186,11 +194,11 @@ projPatternsLeft = let psrest = map unArg $ drop (length qs) ps in if null $ mapMaybe isProjP psrest -- not $ any properlyMatching psrest- then Yes () -- no proj. patterns left+ then Yes [] -- no proj. patterns left else BlockP -- proj. patterns left properMatchesLeft = if any (properMatch . unArg) $ drop (length ps) qs- then No else Yes ()+ then No else Yes [] properMatch ConMP{} = True properMatch LitMP{} = True properMatch _ = False@@ -229,21 +237,27 @@ -- @No@ means it does not cover. -- @Block [x]@ means @p@ is a proper instance of @q@ and could become -- a cover if @q@ was split on variable @x@.-matchPat :: MatchLit -> Pattern -> MPat -> Match ()-matchPat _ (VarP _) _ = Yes ()-matchPat _ (DotP _) _ = Yes ()+matchPat :: MatchLit -> Pattern' a -> MPat -> Match [MPat]+matchPat _ (VarP _) q = Yes [q]+matchPat _ (DotP _) q = Yes []+-- Jesper, 2014-11-04: putting 'Yes [q]' here triggers issue 1333.+-- Not checking for trivial MPats should be safe here, as dot patterns are+-- guaranteed to match if the rest of the pattern does, so some extra splitting+-- on them doesn't change the reduction behaviour.+matchPat mlit p (DotMP q) = matchPat mlit p q matchPat mlit (LitP l) q = mlit l q-matchPat _ (ProjP d) (ProjMP d') = if d == d' then Yes () else No+matchPat _ (ProjP d) (ProjMP d') = if d == d' then Yes [] else No matchPat _ (ProjP d) _ = __IMPOSSIBLE__ -- matchPat mlit (ConP c (Just _) ps) q | recordPattern ps = Yes () -- Andreas, 2012-07-25 record patterns always match! matchPat mlit (ConP c _ ps) q = case q of VarMP x -> Block [BlockingVar x (Just [c])] WildMP{} -> No -- Andreas, 2013-05-15 this was "Yes()" triggering issue 849- ConMP c' qs+ ConMP c' i qs | c == c' -> matchPats mlit (map (fmap namedThing) ps) qs | otherwise -> No LitMP _ -> __IMPOSSIBLE__ ProjMP _ -> __IMPOSSIBLE__+ DotMP _ -> __IMPOSSIBLE__ {- UNUSED class RecordPattern a where
src/full/Agda/TypeChecking/Coverage/SplitTree.hs view
@@ -17,6 +17,8 @@ import Test.QuickCheck import Agda.Syntax.Abstract.Name+import Agda.Syntax.Common+import Agda.Syntax.Internal as I import Agda.Utils.Monad @@ -35,10 +37,9 @@ } | -- | A split is necessary. SplitAt- { splitArg :: Int -- ^ Arg. no to split at.+ { splitArg :: Arg Int -- ^ Arg. no to split at. , splitTrees :: SplitTrees' a -- ^ Sub split trees. }- deriving (Eq) -- | Split tree branching. A finite map from constructor names to splittrees -- A list representation seems appropriate, since we are expecting not@@ -50,7 +51,7 @@ data SplitTreeLabel a = SplitTreeLabel { lblConstructorName :: Maybe a -- ^ 'Nothing' for root of split tree- , lblSplitArg :: Maybe Int+ , lblSplitArg :: Maybe (Arg Int) , lblBindings :: Maybe Int } instance Show a => Show (SplitTreeLabel a) where@@ -80,7 +81,7 @@ instance Arbitrary a => Arbitrary (SplitTree' a) where arbitrary = frequency [ (5, return $ SplittingDone 0)- , (3, SplitAt <$> choose (1,5) <*> (take 3 <$> listOf1 arbitrary))+ , (3, (SplitAt . defaultArg) <$> choose (1,5) <*> (take 3 <$> listOf1 arbitrary)) ] -- * Testing the printer
src/full/Agda/TypeChecking/Datatypes.hs view
@@ -2,13 +2,10 @@ module Agda.TypeChecking.Datatypes where -import Control.Applicative ((<$>))- import Data.Maybe (fromMaybe) import Agda.Syntax.Common-import Agda.Syntax.Position-import Agda.Syntax.Internal as I+import Agda.Syntax.Internal import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin (constructorForm)@@ -16,6 +13,7 @@ import Agda.TypeChecking.Substitute import Agda.Utils.Size+import Agda.Utils.Functor #include "undefined.h" import Agda.Utils.Impossible@@ -76,31 +74,44 @@ where cont n = do let pars = fromMaybe __IMPOSSIBLE__ $ allApplyElims $ take n es- Just . (`apply` pars) . defType <$> getConInfo c+ Just <$> do (`piApplyM` pars) . defType =<< getConInfo c _ -> return Nothing +data HasEta = NoEta | YesEta+ deriving (Eq)++data ConstructorInfo = DataCon Nat -- arity+ | RecordCon HasEta [Arg QName]+ -- | Return the number of non-parameter arguments to a data constructor, -- or the field names of a record constructor. -- -- For getting just the arity of constructor @c@, -- use @either id size <$> getConstructorArity c@.-getConstructorArity :: QName -> TCM (Either Nat [I.Arg QName])-getConstructorArity c = do+getConstructorInfo :: QName -> TCM ConstructorInfo+getConstructorInfo c = do Defn{ defType = t, theDef = def } <- getConstInfo c case def of Constructor{ conData = d, conPars = n } -> do def <- theDef <$> getConstInfo d case def of- Record{ recFields = fs } ->- return $ Right fs+ r@Record{ recFields = fs } ->+ return $ RecordCon (if recEtaEquality r then YesEta else NoEta) fs Datatype{} -> do -- TODO: I do not want to take the type of constructor apart -- to see its arity! TelV tel _ <- telView t- return $ Left $ size tel - n+ return $ DataCon $ size tel - n _ -> __IMPOSSIBLE__ _ -> __IMPOSSIBLE__ +getConstructorArity :: QName -> TCM Nat+getConstructorArity c =+ for (getConstructorInfo c) $ \i ->+ case i of+ DataCon n -> n+ RecordCon _ fs -> size fs+ --------------------------------------------------------------------------- -- * Data types ---------------------------------------------------------------------------@@ -137,9 +148,10 @@ getNumberOfParameters d = do def <- getConstInfo d case theDef def of- Datatype{ dataPars = n} -> return $ Just n- Record{ recPars = n} -> return $ Just n- _ -> return Nothing+ Datatype{ dataPars = n } -> return $ Just n+ Record{ recPars = n } -> return $ Just n+ Constructor{ conPars = n } -> return $ Just n+ _ -> return Nothing {- UNUSED data DatatypeInfo = DataInfo
+ src/full/Agda/TypeChecking/DeadCode.hs view
@@ -0,0 +1,63 @@+{-# LANGUAGE CPP #-}+module Agda.TypeChecking.DeadCode (eliminateDeadCode) where++import Control.Applicative+import Control.Monad+import Data.Map (Map)+import qualified Data.Map as Map+import Data.Set (Set)+import qualified Data.Set as Set+import Data.Foldable (foldMap, Foldable)+import Data.Traversable (traverse)++import Agda.Syntax.Common+import Agda.Syntax.Literal+import qualified Agda.Syntax.Concrete as C+import qualified Agda.Syntax.Abstract as A++import Agda.Syntax.Internal+import Agda.Syntax.Internal.Names+import Agda.Syntax.Scope.Base+import Agda.Syntax.Scope.Monad++import qualified Agda.Benchmarking as Bench+import qualified Agda.TypeChecking.Monad.Benchmark as Bench++import Agda.TypeChecking.Monad+import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.Reduce++import Agda.Utils.HashMap (HashMap)+import qualified Agda.Utils.HashMap as HMap+import Agda.Utils.Lens++import Agda.Utils.Impossible+#include "undefined.h"++-- | Run before serialisation to remove any definitions that are not reachable+-- from the public interface to the module.+eliminateDeadCode :: DisplayForms -> Signature -> TCM (DisplayForms, Signature)+eliminateDeadCode disp sig = Bench.billTo [Bench.DeadCode] $ do+ patsyn <- getPatternSyns+ public <- Set.map anameName . publicNames <$> getScope+ defs <- traverse instantiateFull $ sig ^. sigDefinitions+ let r = reachableFrom public patsyn defs+ dead = Set.fromList (HMap.keys defs) `Set.difference` r+ valid = Set.null . Set.intersection dead . namesIn+ defs' = HMap.map ( \ d -> d { defDisplay = filter valid (defDisplay d) } )+ $ HMap.filterWithKey (\ x _ -> Set.member x r) defs+ disp' = HMap.filter (not . null) $ HMap.map (filter valid) disp+ reportSLn "tc.dead" 10 $ "Removed " ++ show (HMap.size defs - HMap.size defs') ++ " unused definitions."+ return (disp', set sigDefinitions defs' sig)++reachableFrom :: Set QName -> A.PatternSynDefns -> Definitions -> Set QName+reachableFrom names psyns defs = follow names (Set.toList names)+ where+ follow visited [] = visited+ follow visited (x : xs) = follow (Set.union visited new) (Set.toList new ++ xs)+ where+ new = Set.filter (not . (`Set.member` visited)) $+ case HMap.lookup x defs of+ Nothing -> namesIn (PSyn <$> Map.lookup x psyns)+ Just d -> namesIn d+
src/full/Agda/TypeChecking/DisplayForm.hs view
@@ -5,14 +5,16 @@ module Agda.TypeChecking.DisplayForm where +import Prelude hiding (all) import Control.Applicative import Control.Monad import Control.Monad.Trans.Maybe--import Data.Traversable (traverse)+import Data.Foldable (all)+import qualified Data.Set as Set -import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)+import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Internal.Names import Agda.Syntax.Scope.Base (inverseScopeLookupName) import Agda.TypeChecking.Monad@@ -21,6 +23,7 @@ import Agda.Utils.List import Agda.Utils.Maybe+import Agda.Utils.Except #include "undefined.h" import Agda.Utils.Impossible@@ -36,7 +39,7 @@ -- | Get the arities of all display forms for a name. displayFormArities :: QName -> TCM [Int]-displayFormArities q = map (length . dfPats . openThing) . defDisplay <$> getConstInfo q+displayFormArities q = map (length . dfPats . openThing) <$> getDisplayForms q -- | Find a matching display form for @q vs@. -- In essence this tries to reqwrite @q vs@ with any@@ -45,7 +48,7 @@ displayForm :: QName -> Args -> TCM (Maybe DisplayTerm) displayForm q vs = do -- Get display forms for name q.- odfs <- defDisplay <$> getConstInfo q+ odfs <- getDisplayForms q `catchError` \_ -> return [] -- Display debug info about the @Open@s. unless (null odfs) $ verboseS "tc.display.top" 100 $ do n <- getContextId@@ -58,7 +61,7 @@ -- Keep the display forms that match the application @c vs@. ms <- do ms <- mapM (runMaybeT . (`matchDisplayForm` vs)) dfs- return [ m | Just m <- ms, inScope scope m ]+ return [ m | Just (d, m) <- ms, wellScoped scope d ] -- Not safe when printing non-terminating terms. -- (nfdfs, us) <- normalise (dfs, vs) unless (null odfs) $ reportSLn "tc.display.top" 100 $ unlines@@ -77,31 +80,28 @@ -- `catchError` \_ -> return Nothing where- -- 'hd' is only used in the commented-out code for 'inScope' above.- inScope _ d | isWithDisplay d = True- inScope scope d = case hd d of- Just h -> not . null $ inverseScopeLookupName h scope- Nothing -> __IMPOSSIBLE__ -- TODO: currently all display forms have heads+ -- Look at the original display form, not the instantiated result when+ -- checking if it's well-scoped. Otherwise we might pick up out of scope+ -- identifiers coming from the source term.+ wellScoped scope (Display _ _ d)+ | isWithDisplay d = True+ | otherwise = all (inScope scope) $ namesIn d + inScope scope x = not $ null $ inverseScopeLookupName x scope+ isWithDisplay DWithApp{} = True isWithDisplay _ = False - hd (DTerm (Def x _)) = Just x- hd (DTerm (Con x _)) = Just $ conName x- hd (DTerm (Shared p)) = hd (DTerm $ derefPtr p)- hd (DWithApp d _ _) = hd d- hd _ = Nothing- -- | Match a 'DisplayForm' @q ps = v@ against @q vs@. -- Return the 'DisplayTerm' @v[us]@ if the match was successful, -- i.e., @vs / ps = Just us@.-matchDisplayForm :: DisplayForm -> Args -> MaybeT TCM DisplayTerm-matchDisplayForm (Display _ ps v) vs+matchDisplayForm :: DisplayForm -> Args -> MaybeT TCM (DisplayForm, DisplayTerm)+matchDisplayForm d@(Display _ ps v) vs | length ps > length vs = mzero | otherwise = do let (vs0, vs1) = splitAt (length ps) vs us <- match ps $ raise 1 $ map unArg vs0- return $ applySubst (parallelS $ reverse us) v `apply` vs1+ return (d, applySubst (parallelS $ reverse us) v `apply` vs1) -- | Class @Match@ for matching a term @p@ in the role of a pattern -- against a term @v@.
src/full/Agda/TypeChecking/DropArgs.hs view
@@ -3,13 +3,16 @@ module Agda.TypeChecking.DropArgs where +import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.TypeChecking.Monad import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Substitute.Pattern import Agda.TypeChecking.CompiledClause +import Agda.Utils.Functor import Agda.Utils.Permutation #include "undefined.h"@@ -44,8 +47,7 @@ -- | NOTE: does not work for recursive functions. instance DropArgs Clause where dropArgs n cl =- cl{ clausePerm = dropArgs n $ clausePerm cl- , clauseTel = dropArgs n $ clauseTel cl+ cl{ clauseTel = dropArgs n $ clauseTel cl -- Andreas, 2012-09-25: just dropping the front of telescope -- makes it ill-formed (unbound indices) -- we should let the telescope intact!?@@ -73,8 +75,8 @@ -- are not dropping arguments to recursive calls in bodies. instance DropArgs CompiledClauses where dropArgs n cc = case cc of- Case i br | i < n -> __IMPOSSIBLE__- | otherwise -> Case (i - n) $ fmap (dropArgs n) br+ Case i br | unArg i < n -> __IMPOSSIBLE__+ | otherwise -> Case (i <&> \ j -> j - n) $ fmap (dropArgs n) br Done xs t | length xs < n -> __IMPOSSIBLE__ | otherwise -> Done (drop n xs) t Fail -> Fail
src/full/Agda/TypeChecking/Empty.hs view
@@ -6,6 +6,7 @@ import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Internal.Pattern import Agda.Syntax.Position import Agda.TypeChecking.Monad@@ -13,6 +14,7 @@ import Agda.TypeChecking.Constraints import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope -- | Check whether a type is empty. -- This check may be postponed as emptiness constraint.@@ -26,8 +28,8 @@ -- xs _ : ts t and try to split on _ (the last variable) tel0 <- getContextTelescope let gamma = telToList tel0 ++ [domFromArg $ defaultArg (underscore, t)]- ps = [ Arg info $ namedVarP x | Dom info (x, _) <- gamma ] tel = telFromList gamma+ ps = teleNamedArgs tel dontAssignMetas $ do r <- splitLast Inductive tel ps@@ -37,4 +39,4 @@ Right cov -> do let cs = splitClauses cov unless (null cs) $- typeError $ ShouldBeEmpty t $ map (namedArg . last . scPats) $ cs+ typeError $ ShouldBeEmpty t $ map (namedArg . last . unnumberPatVars . scPats) $ cs
src/full/Agda/TypeChecking/Errors.hs view
@@ -1,6 +1,6 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TupleSections #-} {-# OPTIONS_GHC -fno-warn-orphans #-} @@ -16,33 +16,40 @@ import Control.Monad.State import Data.Function-import Data.List (nub, sortBy, intercalate)+import Data.List (nub, sortBy, intersperse, isInfixOf) import Data.Maybe+import Data.Char (toLower)+import qualified Data.Set as Set+import qualified Data.Map as Map+import qualified Text.PrettyPrint.Boxes as Boxes -import Agda.Syntax.Common hiding (Arg, Dom, NamedArg)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Fixity+import Agda.Syntax.Notation import Agda.Syntax.Position import qualified Agda.Syntax.Info as A import qualified Agda.Syntax.Concrete as C import qualified Agda.Syntax.Concrete.Definitions as D import Agda.Syntax.Abstract as A+import Agda.Syntax.Abstract.Views (deepUnscope) import Agda.Syntax.Internal as I-import qualified Agda.Syntax.Abstract.Pretty as AP import Agda.Syntax.Translation.InternalToAbstract import Agda.Syntax.Translation.AbstractToConcrete import Agda.Syntax.Scope.Monad (isDatatypeModule)+import Agda.Syntax.Scope.Base import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.Closure import Agda.TypeChecking.Monad.Context import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Monad.State import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce (instantiate) import Agda.Utils.Except ( MonadError(catchError) ) import Agda.Utils.FileName import Agda.Utils.Function+import Agda.Utils.List import Agda.Utils.Monad import Agda.Utils.Null import Agda.Utils.Size@@ -145,6 +152,7 @@ CoverageCantSplitOn{} -> "CoverageCantSplitOn" CoverageCantSplitIrrelevantType{} -> "CoverageCantSplitIrrelevantType" CoverageCantSplitType{} -> "CoverageCantSplitType"+ CoverageNoExactSplit{} -> "CoverageNoExactSplit" CyclicModuleDependency{} -> "CyclicModuleDependency" DataMustEndInSort{} -> "DataMustEndInSort" -- UNUSED: DataTooManyParameters{} -> "DataTooManyParameters"@@ -205,15 +213,17 @@ NothingAppliedToHiddenArg{} -> "NothingAppliedToHiddenArg" NothingAppliedToInstanceArg{} -> "NothingAppliedToInstanceArg" OverlappingProjects {} -> "OverlappingProjects"+ OperatorChangeMessage {} -> "OperatorChangeMessage"+ OperatorInformation {} -> "OperatorInformation" PatternShadowsConstructor {} -> "PatternShadowsConstructor" PropMustBeSingleton -> "PropMustBeSingleton" RepeatedVariablesInPattern{} -> "RepeatedVariablesInPattern" SafeFlagPostulate{} -> "SafeFlagPostulate" SafeFlagPragma{} -> "SafeFlagPragma"- SafeFlagNoTerminationCheck{} -> "SafeFlagNoTerminationCheck" SafeFlagNonTerminating{} -> "SafeFlagNonTerminating" SafeFlagTerminating{} -> "SafeFlagTerminating" SafeFlagPrimTrustMe{} -> "SafeFlagPrimTrustMe"+ SafeFlagNoPositivityCheck{} -> "SafeNoPositivityCheck" ShadowedModule{} -> "ShadowedModule" ShouldBeASort{} -> "ShouldBeASort" ShouldBeApplicationOf{} -> "ShouldBeApplicationOf"@@ -239,8 +249,12 @@ UnequalSorts{} -> "UnequalSorts" UnequalTerms{} -> "UnequalTerms" UnequalTypes{} -> "UnequalTypes"+ UnifyConflict{} -> "UnifyConflict"+ UnifyCycle{} -> "UnifyCycle"+ UnifyIndicesNotVars{} -> "UnifyIndicesNotVars"+ UnificationRecursiveEq{} -> "UnificationRecursiveEq"+ UnificationStuck{} -> "UnificationStuck" -- UnequalTelescopes{} -> "UnequalTelescopes" -- UNUSED- UnequalColors{} -> "UnequalTelescopes" HeterogeneousEquality{} -> "HeterogeneousEquality" WithOnFreeVariable{} -> "WithOnFreeVariable" UnexpectedWithPatterns{} -> "UnexpectedWithPatterns"@@ -257,12 +271,12 @@ WrongHidingInApplication{} -> "WrongHidingInApplication" WrongHidingInLHS{} -> "WrongHidingInLHS" WrongHidingInLambda{} -> "WrongHidingInLambda"+ WrongInstanceDeclaration{} -> "WrongInstanceDeclaration" WrongIrrelevanceInLambda{} -> "WrongIrrelevanceInLambda" WrongNamedArgument{} -> "WrongNamedArgument" WrongNumberOfConstructorArguments{} -> "WrongNumberOfConstructorArguments" HidingMismatch{} -> "HidingMismatch" RelevanceMismatch{} -> "RelevanceMismatch"- ColorMismatch{} -> "ColorMismatch" instance PrettyTCM TCErr where prettyTCM err = case err of@@ -363,6 +377,8 @@ WrongHidingInApplication t -> fwords "Found an implicit application where an explicit application was expected" + WrongInstanceDeclaration -> fwords "Terms marked as eligible for instance search should end with a name"+ HidingMismatch h h' -> fwords $ "Expected " ++ verbalize (Indefinite h') ++ " argument, but found " ++ verbalize (Indefinite h) ++ " argument"@@ -371,10 +387,6 @@ "Expected " ++ verbalize (Indefinite r') ++ " argument, but found " ++ verbalize (Indefinite r) ++ " argument" - ColorMismatch c c' -> fsep $ -- TODO guilhem- pwords "Expected argument color to be" ++ [prettyTCM c'] ++- pwords "but found color" ++ [prettyTCM c]- NotInductive t -> fsep $ [prettyTCM t] ++ pwords "is not an inductive data type" @@ -525,8 +537,6 @@ UnequalTypes cmp a b -> prettyUnequal a (notCmp cmp) b -- fsep $ [prettyTCM a, notCmp cmp, prettyTCM b] - UnequalColors a b -> error "TODO guilhem 4"- HeterogeneousEquality u a v b -> fsep $ pwords "Refuse to solve heterogeneous constraint" ++ [prettyTCM u] ++ pwords ":" ++ [prettyTCM a] ++ pwords "=?=" ++@@ -693,20 +703,32 @@ BothWithAndRHS -> fsep $ pwords "Unexpected right hand side" - NotInScope xs ->- fsep (pwords "Not in scope:") $$ nest 2 (vcat $ map name xs)+ NotInScope xs -> do+ inscope <- Set.toList . concreteNamesInScope <$> getScope+ fsep (pwords "Not in scope:") $$ nest 2 (vcat $ map (name inscope) xs) where- name x = fsep [ pretty x- , text "at" <+> prettyTCM (getRange x)- , suggestion (P.prettyShow x)- ]- suggestion s- | elem ':' s = parens $ text "did you forget space around the ':'?"- | elem "->" two = parens $ text "did you forget space around the '->'?"- | otherwise = empty+ name inscope x =+ fsep [ pretty x+ , text "at" <+> prettyTCM (getRange x)+ , suggestion inscope x+ ]+ suggestion inscope x = nest 2 $ par $+ [ text "did you forget space around the ':'?" | elem ':' s ] +++ [ text "did you forget space around the '->'?" | isInfixOf "->" s ] +++ [ sep [ text "did you mean"+ , nest 2 $ vcat (punctuate (text " or") $ map (\ y -> text $ "'" ++ y ++ "'") ys) <> text "?" ]+ | not $ null ys ] where- two = zipWith (\a b -> [a,b]) s (tail s)+ s = P.prettyShow x+ par [] = empty+ par [d] = parens d+ par ds = parens $ vcat ds + strip x = map toLower $ filter (/= '_') $ P.prettyShow $ C.unqualify x+ maxDist n = div n 3+ close a b = editDistance a b <= maxDist (length a)+ ys = map P.prettyShow $ filter (close (strip x) . strip) inscope+ NoSuchModule x -> fsep $ pwords "No such module" ++ [pretty x] AmbiguousName x ys -> vcat@@ -789,8 +811,8 @@ [pretty e] ++ pwords "cannot appear by itself. It needs to be the argument to" ++ pwords "a function expecting an instance argument." - NoParseForApplication es -> fsep $- pwords "Could not parse the application" ++ [pretty $ C.RawApp noRange es]+ NoParseForApplication es -> fsep (+ pwords "Could not parse the application" ++ [pretty $ C.RawApp noRange es]) AmbiguousParseForApplication es es' -> fsep ( pwords "Don't know how to parse" ++ [pretty_es <> (text ".")] ++@@ -804,21 +826,30 @@ pretty' e = do p1 <- pretty_es p2 <- pretty e- pretty $ if show p1 == show p2 then unambiguous e else e+ if show p1 == show p2 then unambiguous e else pretty e - unambiguous :: C.Expr -> C.Expr- unambiguous (C.OpApp r op _ xs) | all (isOrdinary . namedArg) xs- = foldl (C.App r) (C.Ident op) $ (map . fmap . fmap) fromOrdinary xs- unambiguous e = e+ unambiguous :: C.Expr -> TCM Doc+ unambiguous e@(C.OpApp r op _ xs)+ | all (isOrdinary . namedArg) xs =+ pretty $+ foldl (C.App r) (C.Ident op) $+ (map . fmap . fmap) fromOrdinary xs+ | any (isPlaceholder . namedArg) xs =+ pretty e <+> text "(section)"+ unambiguous e = pretty e - isOrdinary :: C.OpApp e -> Bool- isOrdinary (C.Ordinary _) = True- isOrdinary _ = False+ isOrdinary :: MaybePlaceholder (C.OpApp e) -> Bool+ isOrdinary (NoPlaceholder (C.Ordinary _)) = True+ isOrdinary _ = False - fromOrdinary :: C.OpApp e -> e- fromOrdinary (C.Ordinary e) = e- fromOrdinary _ = __IMPOSSIBLE__+ fromOrdinary :: MaybePlaceholder (C.OpApp e) -> e+ fromOrdinary (NoPlaceholder (C.Ordinary e)) = e+ fromOrdinary _ = __IMPOSSIBLE__ + isPlaceholder :: MaybePlaceholder a -> Bool+ isPlaceholder Placeholder{} = True+ isPlaceholder NoPlaceholder{} = False+ BadArgumentsToPatternSynonym x -> fsep $ pwords "Bad arguments to pattern synonym " ++ [prettyTCM x] @@ -828,11 +859,11 @@ UnusedVariableInPatternSynonym -> fsep $ pwords "Unused variable in pattern synonym." - NoParseForLHS IsLHS p -> fsep $- pwords "Could not parse the left-hand side" ++ [pretty p]+ NoParseForLHS IsLHS p -> fsep (+ pwords "Could not parse the left-hand side" ++ [pretty p]) - NoParseForLHS IsPatSyn p -> fsep $- pwords "Could not parse the pattern synonym" ++ [pretty p]+ NoParseForLHS IsPatSyn p -> fsep (+ pwords "Could not parse the pattern synonym" ++ [pretty p]) {- UNUSED NoParseForPatternSynonym p -> fsep $@@ -864,6 +895,100 @@ unambiguousP (C.OpAppP r op _ xs) = foldl C.AppP (C.IdentP op) xs unambiguousP e = e + OperatorInformation sects err ->+ prettyTCM err+ $+$+ fsep (pwords "Operators used in the grammar:")+ $$+ nest 2+ (if null sects then text "None" else+ vcat (map text $+ lines $+ Boxes.render $+ (\(col1, col2, col3) ->+ Boxes.hsep 1 Boxes.top $+ map (Boxes.vcat Boxes.left) [col1, col2, col3]) $+ unzip3 $+ map prettySect $+ sortBy (compare `on` show . notaName . sectNotation) $+ filter (not . closedWithoutHoles) sects))+ where+ trimLeft = dropWhile isNormalHole+ trimRight = reverse . dropWhile isNormalHole . reverse++ closedWithoutHoles sect =+ sectKind sect == NonfixNotation+ &&+ null [ () | NormalHole {} <- trimLeft $ trimRight $+ notation (sectNotation sect) ]++ prettyName n = Boxes.text $+ P.render (P.pretty n) +++ " (" ++ P.render (P.pretty (nameBindingSite n)) ++ ")"++ prettySect sect =+ ( Boxes.text (P.render (P.pretty section))+ Boxes.//+ strut+ , Boxes.text+ ("(" +++ kind ++ " " +++ (if notaIsOperator nota+ then "operator"+ else "notation") +++ (if sectIsSection sect+ then " section"+ else "") +++ (case sectLevel sect of+ Nothing -> ""+ Just Unrelated -> ", unrelated"+ Just (Related n) -> ", level " ++ show n) +++ ")")+ Boxes.//+ strut+ , Boxes.text "["+ Boxes.<>+ Boxes.vcat Boxes.left+ (map (\n -> prettyName n Boxes.<> Boxes.text ",") names +++ [prettyName name Boxes.<> Boxes.text "]"])+ )+ where+ nota = sectNotation sect+ section = trim (notation nota)++ trim = case sectKind sect of+ InfixNotation -> trimLeft . trimRight+ PrefixNotation -> trimRight+ PostfixNotation -> trimLeft+ NonfixNotation -> id+ NoNotation -> __IMPOSSIBLE__++ (names, name) = case Set.toList $ notaNames nota of+ [] -> __IMPOSSIBLE__+ ns -> (init ns, last ns)++ strut = Boxes.emptyBox (length names) 0++ kind = case sectKind sect of+ PrefixNotation -> "prefix"+ PostfixNotation -> "postfix"+ NonfixNotation -> "closed"+ NoNotation -> __IMPOSSIBLE__+ InfixNotation ->+ case fixityAssoc $ notaFixity nota of+ NonAssoc -> "infix"+ LeftAssoc -> "infixl"+ RightAssoc -> "infixr"++ OperatorChangeMessage err@(OperatorInformation [] _) ->+ prettyTCM err+ OperatorChangeMessage err ->+ prettyTCM err+ $+$+ fsep (pwords $+ "(the treatment of operators was changed in Agda 2.5.1, " +++ "so code that used to parse may have to be changed)")+ {- UNUSED AmbiguousParseForPatternSynonym p ps -> fsep ( pwords "Don't know how to parse" ++ [pretty p <> text "."] ++@@ -908,9 +1033,13 @@ CoverageCantSplitIrrelevantType a -> fsep $ pwords "Cannot split on argument of irrelevant datatype" ++ [prettyTCM a] + CoverageCantSplitType a -> fsep $ pwords "Cannot split on argument of non-datatype" ++ [prettyTCM a] + CoverageNoExactSplit f cs -> fsep $+ pwords "Exact splitting is enabled, but not all clauses can be preserved as definitional equalities in the translation to a case tree"+ SplitError e -> prettyTCM e WithoutKError a u v -> fsep $@@ -918,9 +1047,36 @@ pwords "=" ++ [prettyTCM v] ++ pwords "of type" ++ [prettyTCM a] ++ pwords "because K has been disabled." + UnifyConflict c c' -> fsep $+ pwords "There was a conflict between the constructors " +++ [prettyTCM c] ++ pwords " and " ++ [prettyTCM c']++ UnifyCycle i u -> fsep $+ pwords "The variable " ++ [prettyTCM (var i)] +++ pwords "occurs strongly rigid in" ++ [prettyTCM u]++ UnifyIndicesNotVars a u v ixs -> fsep $+ pwords "Cannot apply injectivity to the equation" ++ [prettyTCM u] +++ pwords "=" ++ [prettyTCM v] ++ pwords "of type" ++ [prettyTCM a] +++ pwords "because I cannot generalize over the indices" +++ [prettyList $ map prettyTCM ixs]++ UnificationRecursiveEq a i u -> fsep $+ pwords "Cannot solve variable " ++ [prettyTCM (var i)] +++ pwords " of type " ++ [prettyTCM a] +++ pwords " with solution " ++ [prettyTCM u] +++ pwords " because the variable occurs in the solution," +++ pwords " or in the type one of the variables in the solution"++ UnificationStuck tel us vs -> fsep $+ pwords "I got stuck on unifying" ++ [prettyList (map prettyTCM us)] +++ pwords "with" ++ [prettyList (map prettyTCM vs)] +++ pwords "in the telescope" ++ [prettyTCM tel]+ NotStrictlyPositive d ocs -> fsep $ pwords "The datatype" ++ [prettyTCM d] ++- pwords "is not strictly positive, because" ++ prettyOcc "it" ocs+ pwords "is not strictly positive, because"+ ++ prettyOcc "it" ocs where prettyOcc _ [] = [] prettyOcc it (OccCon d c r : ocs) = concat@@ -948,7 +1104,7 @@ com (_:_) = comma IFSNoCandidateInScope t -> fsep $- pwords "No variable of type" ++ [prettyTCM t] ++ pwords "was found in scope."+ pwords "No instance of type" ++ [prettyTCM t] ++ pwords "was found in scope." UnquoteFailed e -> case e of BadVisibility msg arg -> fsep $@@ -962,24 +1118,12 @@ pwords ("Use " ++ def ++ " instead of " ++ con ++ " for non-constructor") ++ [prettyTCM x] - NotAConstructor kind t ->- fwords "Unable to unquote the term"+ NonCanonical kind t ->+ fwords ("Cannot unquote non-canonical " ++ kind) $$ nest 2 (prettyTCM t)- $$ fwords ("of type " ++ kind ++ ". Reason: not a constructor.") - NotALiteral kind t ->- fwords "Unable to unquote the term"- $$ nest 2 (prettyTCM t)- $$ fwords ("of type " ++ kind ++ ". Reason: not a literal value.")-- RhsUsesDottedVar ixs t ->- fwords "Unable to unquote the term"- $$ nest 2 (prettyTCM t)- $$ fwords "of type Clause. Reason: the right-hand side contains variables that are referring to a dot pattern."- $$ fwords ("Offending De Bruijn indices: "- ++ intercalate ", " (map P.prettyShow ixs) ++ ".")-- BlockedOnMeta m -> __IMPOSSIBLE__+ BlockedOnMeta _ m -> fsep $+ pwords $ "Unquote failed because of unsolved meta variables." UnquotePanic err -> __IMPOSSIBLE__ @@ -992,9 +1136,6 @@ in fsep $ [fwords ("Cannot set OPTION pragma" ++ plural)] ++ map text xs ++ [fwords "with safe flag."] - SafeFlagNoTerminationCheck -> fsep $- pwords "Cannot use NO_TERMINATION_CHECK pragma with safe flag."- SafeFlagNonTerminating -> fsep $ pwords "Cannot use NON_TERMINATING pragma with safe flag." @@ -1003,6 +1144,9 @@ SafeFlagPrimTrustMe -> fsep (pwords "Cannot use primTrustMe with safe flag") + SafeFlagNoPositivityCheck -> fsep $+ pwords "Cannot use NO_POSITIVITY_CHECK pragma with safe flag."+ NeedOptionCopatterns -> fsep $ pwords "Option --copatterns needed to enable destructor patterns" NeedOptionRewriting -> fsep $@@ -1013,13 +1157,13 @@ | n > 0 && not (null args) = parens | otherwise = id - prettyArg :: I.Arg I.Pattern -> TCM Doc- prettyArg (Common.Arg info x) = case getHiding info of+ prettyArg :: Arg (I.Pattern' a) -> TCM Doc+ prettyArg (Arg info x) = case getHiding info of Hidden -> braces $ prettyPat 0 x Instance -> dbraces $ prettyPat 0 x NotHidden -> prettyPat 1 x - prettyPat :: Integer -> I.Pattern -> TCM Doc+ prettyPat :: Integer -> (I.Pattern' a) -> TCM Doc prettyPat _ (I.VarP _) = text "_" prettyPat _ (I.DotP _) = text "._" prettyPat n (I.ConP c _ args) =@@ -1044,7 +1188,7 @@ (v1, v2) <- instantiate (t1, t2) case (ignoreSharing v1, ignoreSharing v2) of (I.Var i1 _, I.Var i2 _)- | i1 == i2 -> __IMPOSSIBLE__ -- if they're actually the same we would get the error on the arguments instead+ | i1 == i2 -> generic -- possible, see issue 1826 | otherwise -> varVar i1 i2 (I.Def{}, I.Con{}) -> __IMPOSSIBLE__ -- ambiguous identifiers (I.Con{}, I.Def{}) -> __IMPOSSIBLE__@@ -1054,10 +1198,11 @@ (I.Con{}, I.Var{}) -> varCon _ -> empty where- varDef, varCon :: TCM Doc+ varDef, varCon, generic :: TCM Doc varDef = parens $ fwords "because one is a variable and one a defined identifier" varCon = parens $ fwords "because one is a variable and one a constructor"-+ generic = parens $ fwords $ "although these terms are looking the same, " +++ "they contain different but identically rendered identifiers somewhere" varVar :: Int -> Int -> TCM Doc varVar i j = parens $ fwords $ "because one has deBruijn index " ++ show i@@ -1099,16 +1244,20 @@ instance PrettyTCM Call where prettyTCM c = case c of- CheckClause t cl -> fsep $- pwords "when checking that the clause"- ++ [AP.prettyA cl] ++ pwords "has type" ++ [prettyTCM t]+ CheckClause t cl -> do+ reportSLn "error.checkclause" 60 $ "prettyTCM CheckClause: cl = " ++ show (deepUnscope cl)+ clc <- abstractToConcrete_ cl+ reportSLn "error.checkclause" 40 $ "cl (Concrete) = " ++ show clc+ fsep $+ pwords "when checking that the clause"+ ++ [prettyA cl] ++ pwords "has type" ++ [prettyTCM t] CheckPattern p tel t -> addCtxTel tel $ fsep $ pwords "when checking that the pattern" ++ [prettyA p] ++ pwords "has type" ++ [prettyTCM t] CheckLetBinding b -> fsep $- pwords "when checking the let binding" ++ [AP.prettyA b]+ pwords "when checking the let binding" ++ [prettyA b] InferExpr e -> fsep $ pwords "when inferring the type of" ++ [prettyA e] @@ -1124,6 +1273,11 @@ pwords "when checking that the expression" ++ [prettyA e] ++ pwords "is a type" + CheckProjection _ x t -> fsep $+ pwords "when checking the projection" +++ [ sep [ prettyTCM x <+> text ":"+ , nest 2 $ prettyTCM t ] ]+ CheckArguments r es t0 t1 -> fsep $ pwords "when checking that" ++ map hPretty es ++@@ -1163,7 +1317,7 @@ pwords "matches the inferred value" ++ [prettyTCM v] CheckPatternShadowing c -> fsep $- pwords "when checking the clause" ++ [AP.prettyA c]+ pwords "when checking the clause" ++ [prettyA c] InferVar x -> fsep $ pwords "when inferring the type of" ++ [prettyTCM x]@@ -1191,16 +1345,15 @@ CheckSectionApplication _ m1 modapp -> fsep $ pwords "when checking the module application" ++- [prettyA $ A.Apply info m1 modapp empty empty]+ [prettyA $ A.Apply info m1 modapp empty empty defaultImportDir] where info = A.ModuleInfo noRange noRange Nothing Nothing Nothing + ModuleContents -> fsep $ pwords "when retrieving the contents of a module"+ where- hPretty :: I.Arg (Named_ Expr) -> TCM Doc- hPretty a = do- info <- reify $ argInfo a- pretty =<< abstractToConcreteCtx (hiddenArgumentCtx (getHiding a))- (Common.Arg info $ unArg a)+ hPretty :: Arg (Named_ Expr) -> TCM Doc+ hPretty a = pretty =<< abstractToConcreteCtx (hiddenArgumentCtx (getHiding a)) a simpleDecl = D.notSoNiceDeclaration
src/full/Agda/TypeChecking/EtaContract.hs view
@@ -7,8 +7,7 @@ import Control.Monad.Reader -import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.Syntax.Internal.Generic import Agda.TypeChecking.Substitute@@ -45,7 +44,6 @@ Sort _ -> noApp MetaV _ _ -> noApp DontCare _ -> noApp- ExtLam _ _ -> __IMPOSSIBLE__ Shared p -> binAppView (derefPtr p) -- destroys sharing where noApp = NoApp t@@ -59,35 +57,38 @@ -- | Contracts all eta-redexes it sees without reducing. {-# SPECIALIZE etaContract :: TermLike a => a -> TCM a #-} {-# SPECIALIZE etaContract :: TermLike a => a -> ReduceM a #-}-etaContract :: (MonadReader TCEnv m, HasConstInfo m, TermLike a) => a -> m a+etaContract :: (MonadReader TCEnv m, HasConstInfo m, HasOptions m, TermLike a) => a -> m a etaContract = traverseTermM etaOnce {-# SPECIALIZE etaOnce :: Term -> TCM Term #-} {-# SPECIALIZE etaOnce :: Term -> ReduceM Term #-}-etaOnce :: (MonadReader TCEnv m, HasConstInfo m) => Term -> m Term+etaOnce :: (MonadReader TCEnv m, HasConstInfo m, HasOptions m) => Term -> m Term etaOnce v = case v of -- Andreas, 2012-11-18: this call to reportSDoc seems to cost me 2% -- performance on the std-lib -- reportSDoc "tc.eta" 70 $ text "eta-contracting" <+> prettyTCM v- Shared{} -> __IMPOSSIBLE__ -- updateSharedTerm eta v+ Shared{} -> updateSharedTerm etaOnce v Lam i (Abs _ b) -> do -- NoAbs can't be eta'd imp <- shouldEtaContractImplicit+ tyty <- typeInType case binAppView b of- App u (Common.Arg info v)- | (isIrrelevant info || isVar0 v)+ App u (Arg info v)+ | (isIrrelevant info || isVar0 tyty v) && allowed imp info && not (freeIn 0 u) -> return $ strengthen __IMPOSSIBLE__ u _ -> return v where- isVar0 (Shared p) = __IMPOSSIBLE__ -- isVar0 (derefPtr p)- isVar0 (Var 0 []) = True- isVar0 (Level (Max [Plus 0 l])) = case l of- NeutralLevel _ v -> isVar0 v- UnreducedLevel v -> isVar0 v+ isVar0 tyty (Shared p) = isVar0 tyty (derefPtr p)+ isVar0 _ (Var 0 []) = True+ -- Andreas, 2016-01-08 If --type-in-type, all levels are equal.+ isVar0 True Level{} = True+ isVar0 tyty (Level (Max [Plus 0 l])) = case l of+ NeutralLevel _ v -> isVar0 tyty v+ UnreducedLevel v -> isVar0 tyty v BlockedLevel{} -> False MetaLevel{} -> False- isVar0 _ = False+ isVar0 _ _ = False allowed imp i' = getHiding i == getHiding i' && (imp || notHidden i) -- Andreas, 2012-12-18: Abstract definitions could contain@@ -101,4 +102,3 @@ etaContractRecord r c args) (return v) v -> return v-
src/full/Agda/TypeChecking/Forcing.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-} {-| A constructor argument is forced if it appears as pattern variable
src/full/Agda/TypeChecking/Free.hs view
@@ -1,8 +1,8 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternGuards #-} -- | Computing the free variables of a term. --@@ -23,8 +23,9 @@ module Agda.TypeChecking.Free ( FreeVars(..)- , Free, FreeV, FreeVS+ , Free, Free', FreeV, FreeVS , IgnoreSorts(..)+ , runFree , rigidVars, relevantVars, allVars , allFreeVars, allRelevantVars, allRelevantVarsIgnoring , freeIn, freeInIgnoringSorts, isBinderUsed , relevantIn, relevantInIgnoringSortAnn@@ -34,13 +35,16 @@ , freeVars -- only for testing ) where -import Control.Applicative hiding (empty)+import Prelude hiding (null)+ import Control.Monad.Reader -import Data.Foldable (foldMap)+import Data.Maybe import Data.Monoid import Data.IntSet (IntSet) import qualified Data.IntSet as Set+import Data.IntMap (IntMap)+import qualified Data.IntMap as Map import qualified Agda.Benchmarking as Bench @@ -53,14 +57,9 @@ ) import qualified Agda.TypeChecking.Free.Lazy as Free -import Agda.Utils.Function-import Agda.Utils.Functor-import Agda.Utils.Monad+import Agda.Utils.Null import Agda.Utils.Singleton -#include "undefined.h"-import Agda.Utils.Impossible- type VarSet = IntSet -- | Free variables of a term, (disjointly) partitioned into strongly and@@ -76,7 +75,7 @@ -- whereas weakly rigid ones stay weakly rigid. , weaklyRigidVars :: VarSet -- ^ Ordinary rigid variables, e.g., in arguments of variables.- , flexibleVars :: VarSet+ , flexibleVars :: IntMap [MetaId] -- ^ Variables occuring in arguments of metas. -- These are only potentially free, depending how the meta variable is instantiated. , irrelevantVars :: VarSet@@ -86,15 +85,17 @@ -- ^ Variables in 'UnusedArg'uments. } deriving (Eq, Show) -mapSRV, mapUGV, mapWRV, mapFXV, mapIRV, mapUUV+mapSRV, mapUGV, mapWRV, mapIRV, mapUUV :: (VarSet -> VarSet) -> FreeVars -> FreeVars mapSRV f fv = fv { stronglyRigidVars = f $ stronglyRigidVars fv } mapUGV f fv = fv { unguardedVars = f $ unguardedVars fv } mapWRV f fv = fv { weaklyRigidVars = f $ weaklyRigidVars fv }-mapFXV f fv = fv { flexibleVars = f $ flexibleVars fv } mapIRV f fv = fv { irrelevantVars = f $ irrelevantVars fv } mapUUV f fv = fv { unusedVars = f $ unusedVars fv } +mapFXV :: (IntMap [MetaId] -> IntMap [MetaId]) -> FreeVars -> FreeVars+mapFXV f fv = fv { flexibleVars = f $ flexibleVars fv }+ -- | Rigid variables: either strongly rigid, unguarded, or weakly rigid. rigidVars :: FreeVars -> VarSet rigidVars fv = Set.unions@@ -105,7 +106,7 @@ -- | All but the irrelevant variables. relevantVars :: FreeVars -> VarSet-relevantVars fv = Set.unions [rigidVars fv, flexibleVars fv]+relevantVars fv = Set.unions [rigidVars fv, Map.keysSet (flexibleVars fv)] -- | @allVars fv@ includes irrelevant variables. allVars :: FreeVars -> VarSet@@ -114,10 +115,10 @@ data Occurrence = NoOccurrence | Irrelevantly- | StronglyRigid -- ^ Under at least one and only inductive constructors.- | Unguarded -- ^ In top position, or only under inductive record constructors.- | WeaklyRigid -- ^ In arguments to variables and definitions.- | Flexible -- ^ In arguments of metas.+ | StronglyRigid -- ^ Under at least one and only inductive constructors.+ | Unguarded -- ^ In top position, or only under inductive record constructors.+ | WeaklyRigid -- ^ In arguments to variables and definitions.+ | Flexible [MetaId] -- ^ In arguments of metas. | Unused deriving (Eq,Show) @@ -131,18 +132,20 @@ | x `Set.member` stronglyRigidVars fv = StronglyRigid | x `Set.member` unguardedVars fv = Unguarded | x `Set.member` weaklyRigidVars fv = WeaklyRigid- | x `Set.member` flexibleVars fv = Flexible+ | Just ms <- Map.lookup x (flexibleVars fv) = Flexible ms | x `Set.member` irrelevantVars fv = Irrelevantly | x `Set.member` unusedVars fv = Unused | otherwise = NoOccurrence -- | Mark variables as flexible. Useful when traversing arguments of metas.-flexible :: FreeVars -> FreeVars-flexible fv =+flexible :: [MetaId] -> FreeVars -> FreeVars+flexible ms fv = fv { stronglyRigidVars = Set.empty , unguardedVars = Set.empty , weaklyRigidVars = Set.empty- , flexibleVars = relevantVars fv+ , flexibleVars = Map.unionsWith mappend+ [ Map.fromSet (const ms) (rigidVars fv)+ , fmap (ms++) (flexibleVars fv) ] } -- | Mark rigid variables as non-strongly. Useful when traversing arguments of variables.@@ -181,19 +184,20 @@ unused :: FreeVars -> FreeVars unused fv = empty { irrelevantVars = irrelevantVars fv- , unusedVars = Set.unions [ rigidVars fv, flexibleVars fv, unusedVars fv ]+ , unusedVars = Set.unions [ rigidVars fv, Map.keysSet (flexibleVars fv), unusedVars fv ] } -- | Pointwise union. union :: FreeVars -> FreeVars -> FreeVars union (FV sv1 gv1 rv1 fv1 iv1 uv1) (FV sv2 gv2 rv2 fv2 iv2 uv2) =- FV (Set.union sv1 sv2) (Set.union gv1 gv2) (Set.union rv1 rv2) (Set.union fv1 fv2) (Set.union iv1 iv2) (Set.union uv1 uv2)+ FV (Set.union sv1 sv2) (Set.union gv1 gv2) (Set.union rv1 rv2) (Map.unionWith mappend fv1 fv2) (Set.union iv1 iv2) (Set.union uv1 uv2) unions :: [FreeVars] -> FreeVars unions = foldr union empty -empty :: FreeVars-empty = FV Set.empty Set.empty Set.empty Set.empty Set.empty Set.empty+instance Null FreeVars where+ empty = FV Set.empty Set.empty Set.empty Map.empty Set.empty Set.empty+ null (FV a b c d e f) = null a && null b && null c && null d && null e && null f -- | Free variable sets form a monoid under 'union'. instance Monoid FreeVars where@@ -203,18 +207,18 @@ -- | @delete x fv@ deletes variable @x@ from variable set @fv@. delete :: Nat -> FreeVars -> FreeVars-delete n (FV sv gv rv fv iv uv) = FV (Set.delete n sv) (Set.delete n gv) (Set.delete n rv) (Set.delete n fv) (Set.delete n iv) (Set.delete n uv)+delete n (FV sv gv rv fv iv uv) = FV (Set.delete n sv) (Set.delete n gv) (Set.delete n rv) (Map.delete n fv) (Set.delete n iv) (Set.delete n uv) instance Singleton Variable FreeVars where- singleton (i, VarOcc o r) = mod (Set.insert i) empty where- mod :: (VarSet -> VarSet) -> FreeVars -> FreeVars+ singleton (i, VarOcc o r) = mod empty where+ mod :: FreeVars -> FreeVars mod = case (o, r) of- (_, Irrelevant) -> mapIRV- (_, UnusedArg ) -> mapUUV- (Free.StronglyRigid, _) -> mapSRV- (Free.Unguarded , _) -> mapUGV- (Free.WeaklyRigid , _) -> mapWRV- (Free.Flexible , _) -> mapFXV+ (_, Irrelevant) -> mapIRV (Set.insert i)+ (_, UnusedArg ) -> mapUUV (Set.insert i)+ (Free.StronglyRigid, _) -> mapSRV (Set.insert i)+ (Free.Unguarded , _) -> mapUGV (Set.insert i)+ (Free.WeaklyRigid , _) -> mapWRV (Set.insert i)+ (Free.Flexible ms , _) -> mapFXV (Map.insert i ms) -- * Collecting free variables. @@ -368,7 +372,6 @@ MetaV _ ts -> flexible <$> freeVars' ts DontCare mt -> irrelevantly <$> freeVars' mt Shared p -> freeVars' (derefPtr p)- ExtLam cs ts -> freeVars' (cs, ts) instance Free Type where freeVars' (El s t) =
src/full/Agda/TypeChecking/Free/Lazy.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}@@ -41,33 +40,26 @@ import Test.QuickCheck -import qualified Agda.Benchmarking as Bench--import Agda.Syntax.Common hiding (Arg, Dom, NamedArg)+import Agda.Syntax.Common import Agda.Syntax.Internal -- import Agda.TypeChecking.Irrelevance -import Agda.Utils.Function import Agda.Utils.Functor import Agda.Utils.Monad import Agda.Utils.Singleton-import Agda.Utils.VarSet (VarSet) -#include "undefined.h"-import Agda.Utils.Impossible- -- | Depending on the surrounding context of a variable, -- it's occurrence can be classified as flexible or rigid, -- with finer distinctions. -- -- The constructors are listed in increasing order (wrt. information content). data FlexRig- = Flexible -- ^ In arguments of metas.- | WeaklyRigid -- ^ In arguments to variables and definitions.- | Unguarded -- ^ In top position, or only under inductive record constructors.- | StronglyRigid -- ^ Under at least one and only inductive constructors.- deriving (Eq, Ord, Show, Enum, Bounded)+ = Flexible [MetaId] -- ^ In arguments of metas.+ | WeaklyRigid -- ^ In arguments to variables and definitions.+ | Unguarded -- ^ In top position, or only under inductive record constructors.+ | StronglyRigid -- ^ Under at least one and only inductive constructors.+ deriving (Eq, Ord, Show) -- | 'FlexRig' composition. For accumulating the context of a variable. --@@ -82,8 +74,9 @@ composeFlexRig :: FlexRig -> FlexRig -> FlexRig composeFlexRig o o' = case (o, o') of- (Flexible, _) -> Flexible- (_, Flexible) -> Flexible+ (Flexible ms1, Flexible ms2) -> Flexible $ ms1 ++ ms2+ (Flexible ms1, _) -> Flexible ms1+ (_, Flexible ms2) -> Flexible ms2 (WeaklyRigid, _) -> WeaklyRigid (_, WeaklyRigid) -> WeaklyRigid (StronglyRigid, _) -> StronglyRigid@@ -114,7 +107,7 @@ topVarOcc = VarOcc StronglyRigid Relevant botVarOcc :: VarOcc-botVarOcc = VarOcc Flexible Irrelevant+botVarOcc = VarOcc (Flexible []) Irrelevant type VarMap = IntMap VarOcc @@ -234,10 +227,9 @@ Pi a b -> freeVars' (a,b) Sort s -> freeVars' s Level l -> freeVars' l- MetaV _ ts -> go Flexible $ freeVars' ts+ MetaV m ts -> go (Flexible $ singleton m) $ freeVars' ts DontCare mt -> goRel Irrelevant $ freeVars' mt Shared p -> freeVars' (derefPtr p)- ExtLam cs ts -> freeVars' (cs, ts) instance Free' Type c where -- {-# SPECIALIZE instance Free' Type All #-}@@ -289,7 +281,7 @@ -- {-# SPECIALIZE freeVars' :: LevelAtom -> FreeM VarSet #-} -- {-# SPECIALIZE freeVars' :: LevelAtom -> FreeM VarMap #-} freeVars' l = case l of- MetaLevel _ vs -> go Flexible $ freeVars' vs+ MetaLevel m vs -> go (Flexible $ singleton m) $ freeVars' vs NeutralLevel _ v -> freeVars' v BlockedLevel _ v -> freeVars' v UnreducedLevel v -> freeVars' v@@ -379,10 +371,19 @@ -- {-# SPECIALIZE freeVars' :: Clause -> FreeM VarMap #-} freeVars' = freeVars' . clauseBody +instance Free' EqualityView c where+ freeVars' (OtherType t) = freeVars' t+ freeVars' (EqualityType s _eq l t a b) = freeVars' s `mappend` freeVars' [l, t, a, b]+ -- Generators instance Arbitrary FlexRig where- arbitrary = arbitraryBoundedEnum+ arbitrary = oneof+ [ pure $ Flexible [] -- TODO+ , pure WeaklyRigid+ , pure Unguarded+ , pure StronglyRigid+ ] instance Arbitrary VarOcc where arbitrary = VarOcc <$> arbitrary <*> arbitrary
src/full/Agda/TypeChecking/Free/Old.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-} -- | Computing the free variables of a term.@@ -44,18 +43,14 @@ import Data.Foldable (foldMap) import Data.Monoid -import Agda.Syntax.Common hiding (Arg, Dom, NamedArg)+import Agda.Syntax.Common import Agda.Syntax.Internal -import Agda.Utils.Function import Agda.Utils.Functor import Agda.Utils.Monad import Agda.Utils.VarSet (VarSet) import qualified Agda.Utils.VarSet as Set -#include "undefined.h"-import Agda.Utils.Impossible- -- | Free variables of a term, (disjointly) partitioned into strongly and -- and weakly rigid variables, flexible variables and irrelevant variables. data FreeVars = FV@@ -268,7 +263,6 @@ MetaV _ ts -> flexible <$> freeVars' ts DontCare mt -> irrelevantly <$> freeVars' mt Shared p -> freeVars' (derefPtr p)- ExtLam cs ts -> freeVars' (cs, ts) instance Free Type where freeVars' (El s t) =
src/full/Agda/TypeChecking/Free/Tests.hs view
@@ -17,21 +17,14 @@ module Agda.TypeChecking.Free.Tests (tests) where -import Control.Applicative ((<*>))--import Data.Functor-import Data.List as List-import Data.Maybe-import Data.Monoid+import qualified Data.IntMap as Map import Test.QuickCheck-import Test.QuickCheck.All import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.TypeChecking.Free.Lazy hiding (FlexRig(..))-import Agda.TypeChecking.Free.Lazy (FlexRig) import qualified Agda.TypeChecking.Free.Lazy as Free import qualified Agda.TypeChecking.Free.Old as Old@@ -46,10 +39,10 @@ -- | Ensure the correct linear order is derived. -prop_FlexRig_min = minBound == Free.Flexible+--prop_FlexRig_min = minBound == Free.Flexible prop_FlexRig_order = strictlyAscending- [ Free.Flexible, Free.WeaklyRigid, Free.Unguarded, Free.StronglyRigid ]+ [ Free.Flexible [], Free.WeaklyRigid, Free.Unguarded, Free.StronglyRigid ] strictlyAscending l = and $ zipWith (<) l $ tail l @@ -59,8 +52,8 @@ prop_composeFlexRig_associative = associative composeFlexRig prop_composeFlexRig_commutative = commutative composeFlexRig prop_composeFlexRig_idempotent = idempotent composeFlexRig-prop_composeFlexRig_zero = isZero Free.Flexible composeFlexRig-prop_composeFlexRig_unit = identity Free.Unguarded composeFlexRig+prop_composeFlexRig_zero = isZero (Free.Flexible []) composeFlexRig+prop_composeFlexRig_unit = identity Free.Unguarded composeFlexRig prop_FlexRig_distributive = distributive composeFlexRig max @@ -86,8 +79,8 @@ same_freeVars t = new_to_old_FV (New.freeVars t) == Old.freeVars t -old_to_new_FV (Old.FV a b c d e f) = New.FV a b c d e f-new_to_old_FV (New.FV a b c d e f) = Old.FV a b c d e f+old_to_new_FV (Old.FV a b c d e f) = New.FV a b c (Map.fromSet (const []) d) e f+new_to_old_FV (New.FV a b c d e f) = Old.FV a b c (Map.keysSet d) e f ty = Pi (defaultDom ab) $ Abs "x" $ El (Type $ Max []) $ var 5 where
src/full/Agda/TypeChecking/Implicit.hs view
@@ -10,7 +10,6 @@ import Agda.Syntax.Common import Agda.Syntax.Internal as I-import qualified Agda.Syntax.Abstract as A (NamedArg) import Agda.TypeChecking.Irrelevance import {-# SOURCE #-} Agda.TypeChecking.MetaVars@@ -25,23 +24,28 @@ #include "undefined.h" import Agda.Utils.Impossible --- | @implicitArgs n expand t@ generates up to @n@ implicit arguments+-- | @implicitArgs n expand eti t@ generates up to @n@ implicit arguments -- metas (unbounded if @n<0@), as long as @t@ is a function type--- and @expand@ holds on the hiding info of its domain.+-- and @expand@ holds on the hiding info of its domain. If @eti@ is+-- @ExplicitToInstance@, then explicit arguments are considered as instance+-- arguments. implicitArgs :: Int -> (Hiding -> Bool) -> Type -> TCM (Args, Type) implicitArgs n expand t = mapFst (map (fmap namedThing)) <$> do implicitNamedArgs n (\ h x -> expand h) t --- | @implicitNamedArgs n expand t@ generates up to @n@ named implicit arguments+-- | @implicitNamedArgs n expand eti t@ generates up to @n@ named implicit arguments -- metas (unbounded if @n<0@), as long as @t@ is a function type--- and @expand@ holds on the hiding and name info of its domain.+-- and @expand@ holds on the hiding and name info of its domain. If @eti@ is+-- @ExplicitToInstance@, then explicit arguments are considered as instance+-- arguments. implicitNamedArgs :: Int -> (Hiding -> ArgName -> Bool) -> Type -> TCM (NamedArgs, Type) implicitNamedArgs 0 expand t0 = return ([], t0) implicitNamedArgs n expand t0 = do t0' <- reduce t0 case ignoreSharing $ unEl t0' of Pi (Dom info a) b | let x = absName b, expand (getHiding info) x -> do- when (getHiding info == Instance) $ reportSDoc "tc.term.args.ifs" 15 $+ when (getHiding info /= Hidden) $+ reportSDoc "tc.term.args.ifs" 15 $ text "inserting instance meta for type" <+> prettyTCM a v <- applyRelevanceToContext (getRelevance info) $ newMeta (getHiding info) (argNameToString x) a@@ -51,7 +55,7 @@ where newMeta Hidden = newNamedValueMeta RunMetaOccursCheck newMeta Instance = initializeIFSMeta- newMeta _ = __IMPOSSIBLE__+ newMeta NotHidden = initializeIFSMeta --------------------------------------------------------------------------- @@ -67,11 +71,11 @@ impInsert hs = ImpInsert hs -- | The list should be non-empty.-insertImplicit :: A.NamedArg e -> [I.Arg ArgName] -> ImplicitInsertion+insertImplicit :: NamedArg e -> [Arg ArgName] -> ImplicitInsertion insertImplicit _ [] = __IMPOSSIBLE__ insertImplicit a ts | notHidden a = impInsert $ nofHidden ts where- nofHidden :: [I.Arg a] -> [Hiding]+ nofHidden :: [Arg a] -> [Hiding] nofHidden = takeWhile (NotHidden /=) . map getHiding insertImplicit a ts = case nameOf (unArg a) of@@ -82,7 +86,7 @@ upto h (NotHidden:_) = Nothing upto h (h':_) | h == h' = Just [] upto h (h':hs) = (h':) <$> upto h hs- find :: [Hiding] -> ArgName -> Hiding -> [I.Arg ArgName] -> ImplicitInsertion+ find :: [Hiding] -> ArgName -> Hiding -> [Arg ArgName] -> ImplicitInsertion find _ x _ (a@(Arg{}) : _) | notHidden a = NoSuchName x find hs x hidingx (a@(Arg _ y) : ts) | x == y && hidingx == getHiding a = impInsert $ reverse hs
src/full/Agda/TypeChecking/Injectivity.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE TupleSections #-} module Agda.TypeChecking.Injectivity where@@ -18,6 +18,7 @@ import qualified Agda.Syntax.Abstract.Name as A import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Internal.Pattern import Agda.TypeChecking.Monad import Agda.TypeChecking.Substitute@@ -74,7 +75,6 @@ MetaV{} -> return Nothing DontCare{} -> return Nothing Shared{} -> __IMPOSSIBLE__- ExtLam{} -> __IMPOSSIBLE__ checkInjectivity :: QName -> [Clause] -> TCM FunctionInverse checkInjectivity f cs@@ -181,9 +181,9 @@ invert _ _ a inv args Nothing = fallBack invert org f ftype inv args (Just h) = case Map.lookup h inv of Nothing -> typeError $ UnequalTerms cmp u v a- Just cl@Clause{ clauseTel = tel- , clausePerm = perm } -> maybeAbort $ do- let ps = clausePats cl+ Just cl@Clause{ clauseTel = tel } -> maybeAbort $ do+ let ps = clausePats cl+ perm = clausePerm cl -- These are what dot patterns should be instantiated at ms <- map unArg <$> newTelMeta tel reportSDoc "tc.inj.invert" 20 $ vcat
src/full/Agda/TypeChecking/InstanceArguments.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-} #if __GLASGOW_HASKELL__ >= 710 {-# LANGUAGE FlexibleContexts #-}@@ -10,72 +11,72 @@ import Control.Monad.Reader import Control.Monad.State import qualified Data.Map as Map+import qualified Data.Set as Set import Data.List as List import Agda.Syntax.Common-import Agda.Syntax.Position-import Agda.Syntax.Scope.Base import Agda.Syntax.Internal as I+import Agda.Syntax.Scope.Base (isNameInScope) import Agda.TypeChecking.Errors () import Agda.TypeChecking.Implicit (implicitArgs)-import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Free import {-# SOURCE #-} Agda.TypeChecking.Constraints-import {-# SOURCE #-} Agda.TypeChecking.Rules.Term (checkArguments) import {-# SOURCE #-} Agda.TypeChecking.MetaVars import {-# SOURCE #-} Agda.TypeChecking.Conversion -import Agda.Utils.Except ( MonadError(catchError, throwError), runExceptT )+import Agda.Utils.Except ( MonadError(catchError, throwError) ) import Agda.Utils.Lens import Agda.Utils.Maybe import Agda.Utils.Monad+import Agda.Utils.Functor import Agda.Utils.Pretty (prettyShow) #include "undefined.h" import Agda.Utils.Impossible --- | A candidate solution for an instance meta is a term with its type.-type Candidate = (Term, Type)-type Candidates = [Candidate]- -- | Compute a list of instance candidates. -- 'Nothing' if type is a meta, error if type is not eligible -- for instance search.-initialIFSCandidates :: Type -> TCM (Maybe Candidates)+initialIFSCandidates :: Type -> TCM (Maybe [Candidate]) initialIFSCandidates t = do cands1 <- getContextVars otn <- getOutputTypeName t case otn of NoOutputTypeName -> typeError $ GenericError $ "Instance search can only be used to find elements in a named type" OutputTypeNameNotYetKnown -> return Nothing+ OutputTypeVar -> return $ Just cands1 OutputTypeName n -> do cands2 <- getScopeDefs n return $ Just $ cands1 ++ cands2 where -- get a list of variables with their type, relative to current context- getContextVars :: TCM Candidates+ getContextVars :: TCM [Candidate] getContextVars = do ctx <- getContext- let vars = [ (var i, raise (i + 1) t)+ let vars = [ Candidate (var i) (raise (i + 1) t) ExplicitStayExplicit | (Dom info (x, t), i) <- zip ctx [0..]+ , getHiding info == Instance , not (unusableRelevance $ argInfoRelevance info) ] -- get let bindings env <- asks envLetBindings env <- mapM (getOpen . snd) $ Map.toList env- let lets = [ (v,t)+ let lets = [ Candidate v t ExplicitStayExplicit | (v, Dom info t) <- env+ , getHiding info == Instance , not (unusableRelevance $ argInfoRelevance info) ] return $ vars ++ lets - getScopeDefs :: QName -> TCM Candidates+ getScopeDefs :: QName -> TCM [Candidate] getScopeDefs n = do instanceDefs <- getInstanceDefs rel <- asks envRelevance@@ -103,14 +104,15 @@ -- Ulf, 2014-08-20: constructors are always instances. Constructor{ conSrcCon = c } -> Con c [] _ -> Def q $ map Apply args- return $ Just (v, t)+ inScope <- isNameInScope q <$> getScope+ return $ Candidate v t ExplicitToInstance <$ guard inScope where -- unbound constant throws an internal error handle (TypeError _ (Closure {clValue = InternalError _})) = return Nothing handle err = throwError err -- | @initializeIFSMeta s t@ generates an instance meta of type @t@--- with suggested name @s@.+-- with suggested name @s@, possibly with leading lambdas. initializeIFSMeta :: String -> Type -> TCM Term initializeIFSMeta s t = do t <- reduce t -- see Issue 1321@@ -125,7 +127,7 @@ -- The list of candidates is equal to @Nothing@ when the type of the meta -- wasn't known when the constraint was generated. In that case, try to find -- its type again.-findInScope :: MetaId -> Maybe Candidates -> TCM ()+findInScope :: MetaId -> Maybe [Candidate] -> TCM () findInScope m Nothing = do -- Andreas, 2015-02-07: New metas should be created with range of the -- current instance meta, thus, we set the range.@@ -133,16 +135,28 @@ setCurrentRange mv $ do reportSLn "tc.instance" 20 $ "The type of the FindInScope constraint isn't known, trying to find it again." t <- getMetaType m++-- -- We create a new meta (which can have additional leading lambdas, if the+-- -- type @t@ now happens to be a function type) and the associated constraint+-- newM <- initializeIFSMeta (miNameSuggestion $ mvInfo mv) t++-- -- ... and we assign it to the previous one+-- ctxElims <- map Apply <$> getContextArgs+-- solveConstraint $ ValueCmp CmpEq t (MetaV m ctxElims) newM++-- {- cands <- initialIFSCandidates t case cands of- Nothing -> addConstraint $ FindInScope m Nothing+ Nothing -> addConstraint $ FindInScope m Nothing Nothing Just {} -> findInScope m cands-findInScope m (Just cands) = whenJustM (findInScope' m cands) $ addConstraint . FindInScope m . Just+-- -}+findInScope m (Just cands) =+ whenJustM (findInScope' m cands) $ (\ (cands, b) -> addConstraint $ FindInScope m b $ Just cands) -- | Result says whether we need to add constraint, and if so, the set of--- remaining candidates.-findInScope' :: MetaId -> Candidates -> TCM (Maybe Candidates)-findInScope' m cands = ifM (isFrozen m) (return (Just cands)) $ do+-- remaining candidates and an eventual blocking metavariable.+findInScope' :: MetaId -> [Candidate] -> TCM (Maybe ([Candidate], Maybe MetaId))+findInScope' m cands = ifM (isFrozen m) (return (Just (cands, Nothing))) $ do -- Andreas, 2013-12-28 issue 1003: -- If instance meta is already solved, simply discard the constraint. ifM (isInstantiatedMeta m) (return Nothing) $ do@@ -152,68 +166,41 @@ setCurrentRange mv $ do reportSLn "tc.instance" 15 $ "findInScope 2: constraint: " ++ prettyShow m ++ "; candidates left: " ++ show (length cands)+ reportSDoc "tc.instance" 70 $ nest 2 $ vcat+ [ sep [ prettyTCM v <+> text ":", nest 2 $ prettyTCM t ] | Candidate v t _ <- cands ] t <- normalise =<< getMetaTypeInContext m reportSDoc "tc.instance" 15 $ text "findInScope 3: t =" <+> prettyTCM t reportSLn "tc.instance" 70 $ "findInScope 3: t: " ++ show t- -- If there are recursive instances, it's not safe to instantiate- -- metavariables in the goal, so we freeze them before checking candidates.- -- Metas that are rigidly constrained need not be frozen.- isRec <- orM $ map (isRecursive . unEl . snd) cands- let shouldFreeze rigid m- | elem m rigid = return False- | otherwise = not <$> isFrozen m- metas <- if not isRec then return [] else do- rigid <- rigidlyConstrainedMetas- filterM (shouldFreeze rigid) (allMetas t)- forM_ metas $ \ m -> updateMetaVar m $ \ mv -> mv { mvFrozen = Frozen }- cands <- checkCandidates m t cands- reportSLn "tc.instance" 15 $- "findInScope 4: cands left: " ++ show (length cands)- unfreezeMeta metas- case cands of - [] -> do- reportSDoc "tc.instance" 15 $- text "findInScope 5: not a single candidate found..."- typeError $ IFSNoCandidateInScope t+ -- If one of the arguments of the typeclass is a meta which is not rigidly+ -- constrained, then don’t do anything because it may loop.+ ifJustM (areThereNonRigidMetaArguments (unEl t)) (\ m -> return (Just (cands, Just m))) $ do - [(term, t')] -> do- reportSDoc "tc.instance" 15 $ vcat- [ text "findInScope 5: found one candidate"- , nest 2 $ prettyTCM term- , text "of type " <+> prettyTCM t'- , text "for type" <+> prettyTCM t- ]+ mcands <- checkCandidates m t cands+ case mcands of - -- If t' takes initial hidden and instance arguments, apply them.- -- Taking also instance arguments facilitates recursive instance search.- (args, t'') <- implicitArgs (-1) notVisible t'- leqType t'' t- ctxArgs <- getContextArgs- v <- (`applyDroppingParameters` args) =<< reduce term- assignV DirEq m ctxArgs v- reportSDoc "tc.instance" 10 $ vcat- [ text "solved by instance search:"- , prettyTCM m <+> text ":=" <+> prettyTCM v- ]- return Nothing+ Just [] -> do+ reportSDoc "tc.instance" 15 $+ text "findInScope 5: not a single candidate found..."+ typeError $ IFSNoCandidateInScope t - cs -> do- reportSDoc "tc.instance" 15 $- text ("findInScope 5: more than one candidate found: ") <+>- prettyTCM (List.map fst cs)- return (Just cs)- where- -- | Check whether a type is a function type with an instance domain.- isRecursive :: Term -> TCM Bool- isRecursive v = do- v <- reduce v- case ignoreSharing v of- Pi (Dom info _) t ->- if getHiding info == Instance then return True else- isRecursive $ unEl $ unAbs t- _ -> return False+ Just [Candidate term t' _] -> do+ reportSDoc "tc.instance" 15 $ vcat+ [ text "findInScope 5: solved by instance search using the only candidate"+ , nest 2 $ prettyTCM term+ , text "of type " <+> prettyTCM t'+ , text "for type" <+> prettyTCM t+ ] + return Nothing -- We’re done++ _ -> do+ let cs = fromMaybe cands mcands -- keep the current candidates if Nothing+ reportSDoc "tc.instance" 15 $+ text ("findInScope 5: refined candidates: ") <+>+ prettyTCM (List.map candidateTerm cs)+ return (Just (cs, Nothing))+ -- | A meta _M is rigidly constrained if there is a constraint _M us == D vs, -- for inert D. Such metas can safely be instantiated by recursive instance -- search, since the constraint limits the solution space.@@ -222,25 +209,28 @@ cs <- (++) <$> use stSleepingConstraints <*> use stAwakeConstraints catMaybes <$> mapM rigidMetas cs where- isRigid v =- case v of- Def f _ -> return True- -- def <- getConstInfo f- -- case theDef def of- -- Record{} -> return True- -- Datatype{} -> return True- -- Axiom{} -> return True- -- _- Con{} -> return True- Lit{} -> return True- Var{} -> return True- _ -> return False+ isRigid v = do+ bv <- reduceB v+ case ignoreSharing <$> bv of+ Blocked{} -> return False+ NotBlocked _ v -> case v of+ MetaV{} -> return False+ Def f _ -> return True+ Con{} -> return True+ Lit{} -> return True+ Var{} -> return True+ Sort{} -> return True+ Pi{} -> return True+ Level{} -> return False+ DontCare{} -> return False+ Lam{} -> __IMPOSSIBLE__+ Shared{} -> __IMPOSSIBLE__ rigidMetas c = case clValue $ theConstraint c of ValueCmp _ _ u v ->- case (u, v) of- (MetaV m _, _) -> ifM (isRigid v) (return $ Just m) (return Nothing)- (_, MetaV m _) -> ifM (isRigid u) (return $ Just m) (return Nothing)+ case (ignoreSharing u, ignoreSharing v) of+ (MetaV m us, _) | isJust (allApplyElims us) -> ifM (isRigid v) (return $ Just m) (return Nothing)+ (_, MetaV m vs) | isJust (allApplyElims vs) -> ifM (isRigid u) (return $ Just m) (return Nothing) _ -> return Nothing ElimCmp{} -> return Nothing TypeCmp{} -> return Nothing@@ -253,19 +243,144 @@ CheckSizeLtSat{} -> return Nothing FindInScope{} -> return Nothing +isRigid :: MetaId -> TCM Bool+isRigid i = do+ rigid <- rigidlyConstrainedMetas+ return (elem i rigid)++-- | Returns True if one of the arguments of @t@ is a meta which isn’t rigidly+-- constrained. Note that level metas are never considered rigidly constrained+-- (#1865).+areThereNonRigidMetaArguments :: Term -> TCM (Maybe MetaId)+areThereNonRigidMetaArguments t = case ignoreSharing t of+ Def n args -> do+ TelV tel _ <- telView . defType =<< getConstInfo n+ let varOccs EmptyTel = []+ varOccs (ExtendTel _ btel) = occurrence 0 tel : varOccs tel+ where tel = unAbs btel+ rigid StronglyRigid = True+ rigid Unguarded = True+ rigid WeaklyRigid = True+ rigid _ = False+ reportSDoc "tc.instance.rigid" 70 $ text "class args:" <+> prettyTCM tel $$+ nest 2 (text $ "used: " ++ show (varOccs tel))+ areThereNonRigidMetaArgs [ arg | (o, arg) <- zip (varOccs tel) args, not $ rigid o ]+ Var n args -> return Nothing -- TODO check what’s the right thing to do, doing the same+ -- thing as above makes some examples fail+ Sort{} -> __IMPOSSIBLE__+ Con{} -> __IMPOSSIBLE__+ Lam{} -> __IMPOSSIBLE__+ Lit{} -> __IMPOSSIBLE__+ Level{} -> __IMPOSSIBLE__+ MetaV{} -> __IMPOSSIBLE__+ Pi{} -> __IMPOSSIBLE__+ Shared{} -> __IMPOSSIBLE__+ DontCare{} -> __IMPOSSIBLE__+ where+ areThereNonRigidMetaArgs :: Elims -> TCM (Maybe MetaId)+ areThereNonRigidMetaArgs [] = return Nothing+ areThereNonRigidMetaArgs (Proj _ : xs) = areThereNonRigidMetaArgs xs+ areThereNonRigidMetaArgs (Apply x : xs) = do+ ifJustM (isNonRigidMeta $ unArg x) (return . Just) (areThereNonRigidMetaArgs xs)++ isNonRigidMeta :: Term -> TCM (Maybe MetaId)+ isNonRigidMeta v =+ case ignoreSharing v of+ Def _ es -> areThereNonRigidMetaArgs es+ Var _ es -> areThereNonRigidMetaArgs es+ Con _ vs -> areThereNonRigidMetaArgs (map Apply vs)+ MetaV i _ -> ifM (isRigid i) (return Nothing) $ do+ -- Ignore unconstrained level and size metas (#1865)+ Def lvl [] <- ignoreSharing <$> primLevel+ sz <- for (fmap ignoreSharing <$> getBuiltin' builtinSize) $ \case+ Just (Def sz []) -> [sz]+ Nothing -> []+ _ -> __IMPOSSIBLE__+ o <- getOutputTypeName . jMetaType . mvJudgement =<< lookupMeta i+ case o of+ OutputTypeName l | elem l (lvl : sz) -> return Nothing+ _ -> return (Just i)+ Lam _ t -> isNonRigidMeta (unAbs t)+ _ -> return Nothing++-- | Apply the computation to every argument in turn by reseting the state every+-- time. Return the list of the arguments giving the result True.+--+-- If the resulting list contains exactly one element, then the state is the+-- same as the one obtained after running the corresponding computation. In+-- all the other cases, the state is reseted.+filterResetingState :: MetaId -> [Candidate] -> (Candidate -> TCM Bool) -> TCM [Candidate]+filterResetingState m cands f = disableDestructiveUpdate $ do+ ctxArgs <- getContextArgs+ let ctxElims = map Apply ctxArgs+ tryC c = do+ ok <- f c+ v <- instantiateFull (MetaV m ctxElims)+ a <- instantiateFull =<< (`piApply` ctxArgs) <$> getMetaType m+ return (ok, v, a)+ result <- mapM (\c -> do bs <- localTCStateSaving (tryC c); return (c, bs)) cands+ let result' = [ (c, v, a, s) | (c, ((True, v, a), s)) <- result ]+ result <- dropSameCandidates m result'+ case result of+ [(c, _, _, s)] -> [c] <$ put s+ _ -> return [ c | (c, _, _, _) <- result ]++-- Drop all candidates which are judgmentally equal to the first one.+-- This is sufficient to reduce the list to a singleton should all be equal.+dropSameCandidates :: MetaId -> [(Candidate, Term, Type, a)] -> TCM [(Candidate, Term, Type, a)]+dropSameCandidates m cands = do+ metas <- Set.fromList . Map.keys <$> getMetaStore+ let freshMetas x = not $ Set.null $ Set.difference (Set.fromList $ allMetas x) metas+ reportSDoc "tc.instance" 50 $ vcat+ [ text "valid candidates:"+ , nest 2 $ vcat [ if freshMetas (v, a) then text "(redacted)" else+ sep [ prettyTCM v <+> text ":", nest 2 $ prettyTCM a ]+ | (_, v, a, _) <- cands ] ]+ rel <- getMetaRelevance <$> lookupMeta m+ case cands of+ [] -> return cands+ cvd@(_, v, a, _) : vas -> do+ if freshMetas (v, a)+ then return (cvd : vas)+ else (cvd :) <$> dropWhileM equal vas+ where+ equal _ | isIrrelevant rel = return True+ equal (_, v', a', _)+ | freshMetas (v', a') = return False -- If there are fresh metas we can't compare+ | otherwise =+ verboseBracket "tc.instance" 30 "checkEqualCandidates" $ do+ reportSDoc "tc.instance" 30 $ sep [ prettyTCM v <+> text "==", nest 2 $ prettyTCM v' ]+ localTCState $ dontAssignMetas $ ifNoConstraints_ (equalType a a' >> equalTerm a v v')+ {- then -} (return True)+ {- else -} (\ _ -> return False)+ `catchError` (\ _ -> return False)+ -- | Given a meta @m@ of type @t@ and a list of candidates @cands@, -- @checkCandidates m t cands@ returns a refined list of valid candidates.-checkCandidates :: MetaId -> Type -> Candidates -> TCM Candidates-checkCandidates m t cands = localTCState $ disableDestructiveUpdate $ do- -- for candidate checking, we don't take into account other IFS- -- constraints- dropConstraints (isIFSConstraint . clValue . theConstraint)- cands <- filterM (uncurry $ checkCandidateForMeta m t) cands- -- Drop all candidates which are equal to the first one- dropSameCandidates cands+checkCandidates :: MetaId -> Type -> [Candidate] -> TCM (Maybe [Candidate])+checkCandidates m t cands = disableDestructiveUpdate $+ verboseBracket "tc.instance.candidates" 20 ("checkCandidates " ++ prettyShow m) $+ ifM (anyMetaTypes cands) (return Nothing) $ Just <$> do+ reportSDoc "tc.instance.candidates" 20 $ nest 2 $ text "target:" <+> prettyTCM t+ reportSDoc "tc.instance.candidates" 20 $ nest 2 $ vcat+ [ text "candidates"+ , vcat [ text "-" <+> prettyTCM v <+> text ":" <+> prettyTCM t | Candidate v t _ <- cands ] ]+ cands' <- filterResetingState m cands (checkCandidateForMeta m t)+ reportSDoc "tc.instance.candidates" 20 $ nest 2 $ vcat+ [ text "valid candidates"+ , vcat [ text "-" <+> prettyTCM v <+> text ":" <+> prettyTCM t | Candidate v t _ <- cands' ] ]+ return cands' where- checkCandidateForMeta :: MetaId -> Type -> Term -> Type -> TCM Bool- checkCandidateForMeta m t term t' = do+ anyMetaTypes :: [Candidate] -> TCM Bool+ anyMetaTypes [] = return False+ anyMetaTypes (Candidate _ a _ : cands) = do+ a <- instantiate a+ case ignoreSharing $ unEl a of+ MetaV{} -> return True+ _ -> anyMetaTypes cands++ checkCandidateForMeta :: MetaId -> Type -> Candidate -> TCM Bool+ checkCandidateForMeta m t (Candidate term t' eti) = do -- Andreas, 2015-02-07: New metas should be created with range of the -- current instance meta, thus, we set the range. mv <- lookupMeta m@@ -279,56 +394,45 @@ , text "t' =" <+> prettyTCM t' , text "term =" <+> prettyTCM term ]- -- domi: we assume that nothing below performs direct IO- -- (except for logging and such, I guess)- localTCState $ do - -- Apply hidden and instance arguments (recursive inst. search!).- (args, t'') <- implicitArgs (-1) notVisible t'+ -- Apply hidden and instance arguments (recursive inst. search!).+ (args, t'') <- implicitArgs (-1) (\h -> h /= NotHidden || eti == ExplicitToInstance) t' - reportSDoc "tc.instance" 20 $- text "instance search: checking" <+> prettyTCM t''- <+> text "<=" <+> prettyTCM t- -- if constraints remain, we abort, but keep the candidate- flip (ifNoConstraints_ $ leqType t'' t) (const $ return True) $ do- ctxArgs <- getContextArgs- v <- (`applyDroppingParameters` args) =<< reduce term- reportSDoc "tc.instance" 15 $ vcat- [ text "instance search: attempting"- , nest 2 $ prettyTCM m <+> text ":=" <+> prettyTCM v- ]- assign DirEq m ctxArgs v- -- assign m ctxArgs (term `apply` args)- -- make a pass over constraints, to detect cases where some are made- -- unsolvable by the assignment, but don't do this for FindInScope's- -- to prevent loops. We currently also ignore UnBlock constraints- -- to be on the safe side.- solveAwakeConstraints' True- return True- where- handle :: TCErr -> TCM Bool- handle err = do- reportSDoc "tc.instance" 50 $- text "assignment failed:" <+> prettyTCM err- return False+ reportSDoc "tc.instance" 20 $+ text "instance search: checking" <+> prettyTCM t''+ <+> text "<=" <+> prettyTCM t+ ctxElims <- map Apply <$> getContextArgs+ v <- (`applyDroppingParameters` args) =<< reduce term+ reportSDoc "tc.instance" 15 $ vcat+ [ text "instance search: attempting"+ , nest 2 $ prettyTCM m <+> text ":=" <+> prettyTCM v+ ]+ -- if constraints remain, we abort, but keep the candidate+ -- Jesper, 05-12-2014: When we abort, we should add a constraint to+ -- instantiate the meta at a later time (see issue 1377).+ guardConstraint (ValueCmp CmpEq t'' (MetaV m ctxElims) v) $ leqType t'' t+ -- make a pass over constraints, to detect cases where some are made+ -- unsolvable by the assignment, but don't do this for FindInScope's+ -- to prevent loops. We currently also ignore UnBlock constraints+ -- to be on the safe side.+ solveAwakeConstraints' True+ verboseS "tc.instance" 15 $ do+ sol <- instantiateFull (MetaV m ctxElims)+ reportSDoc "tc.instance" 15 $+ sep [ text "instance search: found solution for" <+> prettyTCM m <> text ":"+ , nest 2 $ prettyTCM sol ]+ return True+ where+ handle :: TCErr -> TCM Bool+ handle err = do+ reportSDoc "tc.instance" 50 $+ text "assignment failed:" <+> prettyTCM err+ return False isIFSConstraint :: Constraint -> Bool isIFSConstraint FindInScope{} = True isIFSConstraint UnBlock{} = True -- otherwise test/fail/Issue723 loops isIFSConstraint _ = False-- -- Drop all candidates which are judgmentally equal to the first one.- -- This is sufficient to reduce the list to a singleton should all be equal.- dropSameCandidates :: Candidates -> TCM Candidates- dropSameCandidates cands = do- case cands of- [] -> return cands- c@(v,a) : vas -> (c:) <$> dropWhileM equal vas- where- equal (v',a') = dontAssignMetas $ ifNoConstraints_ (equalType a a' >> equalTerm a v v')- {- then -} (return True)- {- else -} (\ _ -> return False)- `catchError` (\ _ -> return False) -- | To preserve the invariant that a constructor is not applied to its -- parameter arguments, we explicitly check whether function term
src/full/Agda/TypeChecking/Irrelevance.hs view
@@ -11,8 +11,8 @@ import Agda.Interaction.Options hiding (tests) -import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)-import Agda.Syntax.Internal (Dom)+import Agda.Syntax.Common+import Agda.Syntax.Internal import Agda.TypeChecking.Monad @@ -27,7 +27,7 @@ -- | Prepare parts of a parameter telescope for abstraction in constructors -- and projections. hideAndRelParams :: Dom a -> Dom a-hideAndRelParams = setHiding Hidden . mapRelevance nonStrictToIrr+hideAndRelParams = hideOrKeepInstance . mapRelevance nonStrictToIrr -- | Used to modify context when going into a @rel@ argument. inverseApplyRelevance :: Relevance -> Dom a -> Dom a
src/full/Agda/TypeChecking/Level.hs view
@@ -38,9 +38,7 @@ levelType = El (mkType 0) <$> primLevel levelSucFunction :: TCM (Term -> Term)-levelSucFunction = do- suc <- primLevelSuc- return $ \a -> suc `apply` [defaultArg a]+levelSucFunction = apply1 <$> primLevelSuc builtinLevelKit :: TCM (Maybe LevelKit) builtinLevelKit = liftTCM $ do@@ -48,11 +46,10 @@ zero@(Def z []) <- ignoreSharing <$> primLevelZero suc@(Def s []) <- ignoreSharing <$> primLevelSuc max@(Def m []) <- ignoreSharing <$> primLevelMax- let a @@ b = a `apply` [defaultArg b] return $ Just $ LevelKit { lvlType = level- , lvlSuc = \a -> suc @@ a- , lvlMax = \a b -> max @@ a @@ b+ , lvlSuc = \ a -> suc `apply1` a+ , lvlMax = \ a b -> max `applys` [a, b] , lvlZero = zero , typeName = l , sucName = s@@ -84,7 +81,7 @@ Max [a] -> do zer <- primLevelZero suc <- primLevelSuc- return $ unPlusV zer (\n -> suc `apply` [defaultArg n]) a+ return $ unPlusV zer (apply1 suc) a _ -> (`unlevelWithKit` nv) <$> requireLevels unlevelWithKit :: LevelKit -> Level -> Term
src/full/Agda/TypeChecking/LevelConstraints.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE CPP #-}+ module Agda.TypeChecking.LevelConstraints ( simplifyLevelConstraint ) where import Agda.Syntax.Common (Nat)
src/full/Agda/TypeChecking/MetaVars.hs view
@@ -1,8 +1,9 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE PatternGuards #-}-{-# LANGUAGE RelaxedPolyRec #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE RelaxedPolyRec #-}+{-# LANGUAGE TupleSections #-} module Agda.TypeChecking.MetaVars where @@ -13,13 +14,10 @@ import qualified Data.List as List import qualified Data.Map as Map import qualified Data.Foldable as Fold-import qualified Data.Traversable as Trav import Agda.Syntax.Common-import Agda.Syntax.Internal as I+import Agda.Syntax.Internal import Agda.Syntax.Internal.Generic-import Agda.Syntax.Position-import qualified Agda.Syntax.Abstract as A import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin@@ -27,7 +25,6 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope import Agda.TypeChecking.Constraints-import Agda.TypeChecking.Errors import Agda.TypeChecking.Free import Agda.TypeChecking.Level import Agda.TypeChecking.Records@@ -35,6 +32,7 @@ import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.EtaContract import Agda.TypeChecking.SizedTypes (boundedSizeMetaHook, isSizeProblem)+import {-# SOURCE #-} Agda.TypeChecking.CheckInternal -- import Agda.TypeChecking.CheckInternal -- import {-# SOURCE #-} Agda.TypeChecking.CheckInternal (checkInternal)@@ -85,12 +83,12 @@ if r then " yes, because " ++ show i else " no" return r -isEtaExpandable :: MetaId -> TCM Bool-isEtaExpandable x = do+isEtaExpandable :: [MetaKind] -> MetaId -> TCM Bool+isEtaExpandable kinds x = do i <- mvInstantiation <$> lookupMeta x return $ case i of Open{} -> True- OpenIFS{} -> False+ OpenIFS{} -> notElem Records kinds InstV{} -> False InstS{} -> False BlockedConst{} -> False@@ -103,14 +101,14 @@ -- The instantiation should not be an 'InstV' or 'InstS' and the 'MetaId' -- should point to something 'Open' or a 'BlockedConst'. -- Further, the meta variable may not be 'Frozen'.-assignTerm :: MetaId -> [I.Arg ArgName] -> Term -> TCM ()+assignTerm :: MetaId -> [Arg ArgName] -> Term -> TCM () assignTerm x tel v = do -- verify (new) invariants whenM (isFrozen x) __IMPOSSIBLE__ assignTerm' x tel v -- | Skip frozen check. Used for eta expanding frozen metas.-assignTerm' :: MetaId -> [I.Arg ArgName] -> Term -> TCM ()+assignTerm' :: MetaId -> [Arg ArgName] -> Term -> TCM () assignTerm' x tel v = do reportSLn "tc.meta.assign" 70 $ prettyShow x ++ " := " ++ show v ++ "\n in " ++ show tel -- verify (new) invariants@@ -182,7 +180,7 @@ -- of type the output type of @t@ with name suggestion @s@ and initial -- solution candidates @cands@. If @t@ is a function type, then insert enough -- lambdas in front of it.-newIFSMeta :: MetaNameSuggestion -> Type -> Maybe [(Term, Type)] -> TCM Term+newIFSMeta :: MetaNameSuggestion -> Type -> Maybe [Candidate] -> TCM Term newIFSMeta s t cands = do TelV tel t' <- telView t addCtxTel tel $ do@@ -191,7 +189,7 @@ teleLam tel <$> newIFSMetaCtx s (telePi_ ctx t') vs (raise (size tel) cands) -- | Create a new value meta with specific dependencies.-newIFSMetaCtx :: MetaNameSuggestion -> Type -> Args -> Maybe [(Term, Type)] -> TCM Term+newIFSMetaCtx :: MetaNameSuggestion -> Type -> Args -> Maybe [Candidate] -> TCM Term newIFSMetaCtx s t vs cands = do reportSDoc "tc.meta.new" 50 $ fsep [ text "new ifs meta:"@@ -205,7 +203,8 @@ reportSDoc "tc.meta.new" 50 $ fsep [ nest 2 $ pretty x <+> text ":" <+> prettyTCM t ]- addConstraint $ FindInScope x cands+ addConstraint $ FindInScope x Nothing cands+ etaExpandMetaSafe x return $ MetaV x $ map Apply vs @@ -220,25 +219,24 @@ newValueMeta b t = do vs <- getContextArgs tel <- getContextTelescope- newValueMetaCtx b (telePi_ tel t) vs+ newValueMetaCtx b t tel (idP $ size tel) vs -newValueMetaCtx :: RunMetaOccursCheck -> Type -> Args -> TCM Term-newValueMetaCtx b t ctx =- instantiateFull =<< newValueMetaCtx' b t ctx+newValueMetaCtx :: RunMetaOccursCheck -> Type -> Telescope -> Permutation -> Args -> TCM Term+newValueMetaCtx b t tel perm ctx =+ instantiateFull =<< newValueMetaCtx' b t tel perm ctx -- | Create a new value meta without η-expanding. newValueMeta' :: RunMetaOccursCheck -> Type -> TCM Term newValueMeta' b t = do vs <- getContextArgs tel <- getContextTelescope- newValueMetaCtx' b (telePi_ tel t) vs+ newValueMetaCtx' b t tel (idP $ size tel) vs -- | Create a new value meta with specific dependencies.-newValueMetaCtx' :: RunMetaOccursCheck -> Type -> Args -> TCM Term-newValueMetaCtx' b t vs = do+newValueMetaCtx' :: RunMetaOccursCheck -> Type -> Telescope -> Permutation -> Args -> TCM Term+newValueMetaCtx' b a tel perm vs = do i <- createMetaInfo' b- TelV tel a <- telView t- let perm = idP (size tel)+ let t = telePi_ tel a x <- newMeta i normalMetaPriority perm (HasType () t) reportSDoc "tc.meta.new" 50 $ fsep [ text "new meta:"@@ -247,14 +245,14 @@ ] etaExpandMetaSafe x -- Andreas, 2012-09-24: for Metas X : Size< u add constraint X+1 <= u- let u = shared $ MetaV x $ map Apply vs+ u <- shared $ MetaV x $ map Apply vs boundedSizeMetaHook u tel a return u newTelMeta :: Telescope -> TCM Args newTelMeta tel = newArgsMeta (abstract tel $ typeDontCare) -type Condition = I.Dom Type -> Abs Type -> Bool+type Condition = Dom Type -> Abs Type -> Bool trueCondition :: Condition trueCondition _ _ = True@@ -266,26 +264,25 @@ newArgsMeta' condition t = do args <- getContextArgs tel <- getContextTelescope- newArgsMetaCtx' condition t tel args+ newArgsMetaCtx' condition t tel (idP $ size tel) args -newArgsMetaCtx :: Type -> Telescope -> Args -> TCM Args+newArgsMetaCtx :: Type -> Telescope -> Permutation -> Args -> TCM Args newArgsMetaCtx = newArgsMetaCtx' trueCondition -newArgsMetaCtx' :: Condition -> Type -> Telescope -> Args -> TCM Args-newArgsMetaCtx' condition (El s tm) tel ctx = do+newArgsMetaCtx' :: Condition -> Type -> Telescope -> Permutation -> Args -> TCM Args+newArgsMetaCtx' condition (El s tm) tel perm ctx = do tm <- reduce tm case ignoreSharing tm of Pi dom@(Dom info a) codom | condition dom codom -> do- arg <- Arg info <$> do- applyRelevanceToContext (getRelevance info) $+ u <- applyRelevanceToContext (getRelevance info) $ {- -- Andreas, 2010-09-24 skip irrelevant record fields when eta-expanding a meta var -- Andreas, 2010-10-11 this is WRONG, see Issue 347 if r == Irrelevant then return DontCare else -}- newValueMetaCtx RunMetaOccursCheck (telePi_ tel a) ctx- args <- newArgsMetaCtx' condition (El s tm `piApply` [arg]) tel ctx- return $ arg : args+ newValueMetaCtx RunMetaOccursCheck a tel perm ctx+ args <- newArgsMetaCtx' condition (codom `absApp` u) tel perm ctx+ return $ Arg info u : args _ -> return [] -- | Create a metavariable of record type. This is actually one metavariable@@ -294,12 +291,12 @@ newRecordMeta r pars = do args <- getContextArgs tel <- getContextTelescope- newRecordMetaCtx r pars tel args+ newRecordMetaCtx r pars tel (idP $ size tel) args -newRecordMetaCtx :: QName -> Args -> Telescope -> Args -> TCM Term-newRecordMetaCtx r pars tel ctx = do+newRecordMetaCtx :: QName -> Args -> Telescope -> Permutation -> Args -> TCM Term+newRecordMetaCtx r pars tel perm ctx = do ftel <- flip apply pars <$> getRecordFieldTypes r- fields <- newArgsMetaCtx (telePi_ ftel $ sort Prop) tel ctx+ fields <- newArgsMetaCtx (telePi_ ftel $ sort Prop) tel perm ctx con <- getRecordConstructor r return $ Con con fields @@ -308,7 +305,7 @@ -- Do not run check for recursive occurrence of meta in definitions, -- because we want to give the recursive solution interactively (Issue 589) m <- newValueMeta' DontRunMetaOccursCheck t- let MetaV x _ = ignoreSharing m+ MetaV x _ <- return $ ignoreSharing m -- needs to be strict! connectInteractionPoint ii x return m @@ -365,8 +362,9 @@ postponeTypeCheckingProblem p (unblock p) where unblock (CheckExpr _ t) = unblockedTester t- unblock (CheckArgs _ _ _ _ t _ _) = unblockedTester t -- The type of the head of the application.+ unblock (CheckArgs _ _ _ t _ _) = unblockedTester t -- The type of the head of the application. unblock (CheckLambda _ _ t) = unblockedTester t+ unblock (UnquoteTactic _ _ _) = __IMPOSSIBLE__ -- unquote problems must be supply their own tester -- | Create a postponed type checking problem @e : t@ that waits for conditon -- @unblock@. A new meta is created in the current context that has as@@ -377,7 +375,7 @@ i <- createMetaInfo' DontRunMetaOccursCheck tel <- getContextTelescope cl <- buildClosure p- let t = problemType p+ t <- problemType p m <- newMeta' (PostponedTypeCheckingProblem cl unblock) i normalMetaPriority (idP (size tel)) $ HasType () $ telePi_ tel t@@ -398,10 +396,11 @@ return v -- | Type of the term that is produced by solving the 'TypeCheckingProblem'.-problemType :: TypeCheckingProblem -> Type-problemType (CheckExpr _ t ) = t-problemType (CheckArgs _ _ _ _ _ t _ ) = t -- The target type of the application.-problemType (CheckLambda _ _ t ) = t+problemType :: TypeCheckingProblem -> TCM Type+problemType (CheckExpr _ t ) = return t+problemType (CheckArgs _ _ _ _ t _ ) = return t -- The target type of the application.+problemType (CheckLambda _ _ t ) = return t+problemType (UnquoteTactic tac hole t) = return t -- | Eta expand metavariables listening on the current meta. etaExpandListeners :: MetaId -> TCM ()@@ -442,7 +441,7 @@ -- | Eta expand a metavariable, if it is of the specified kind. -- Don't do anything if the metavariable is a blocked term. etaExpandMeta :: [MetaKind] -> MetaId -> TCM ()-etaExpandMeta kinds m = whenM (isEtaExpandable m) $ do+etaExpandMeta kinds m = whenM (isEtaExpandable kinds m) $ do verboseBracket "tc.meta.eta" 20 ("etaExpandMeta " ++ prettyShow m) $ do let waitFor x = do reportSDoc "tc.meta.eta" 20 $ do@@ -468,7 +467,7 @@ ifM (isEtaRecord r) {- then -} (do let ps = fromMaybe __IMPOSSIBLE__ $ allApplyElims es let expand = do- u <- withMetaInfo' meta $ newRecordMetaCtx r ps tel $ teleArgs tel+ u <- withMetaInfo' meta $ newRecordMetaCtx r ps tel (idP $ size tel) $ teleArgs tel inTopContext $ do verboseS "tc.meta.eta" 15 $ do du <- prettyTCM u@@ -780,7 +779,6 @@ Level{} -> notInert MetaV{} -> notInert DontCare{} -> notInert- ExtLam{} -> __IMPOSSIBLE__ Shared{} -> __IMPOSSIBLE__ ensureNeutral :: Term -> Term -> TCM ()@@ -808,7 +806,6 @@ MetaV{} -> notNeutral v Con{} -> notNeutral v Lam{} -> notNeutral v- ExtLam{} -> __IMPOSSIBLE__ Shared{} -> __IMPOSSIBLE__ -- END UNUSED -} @@ -921,7 +918,8 @@ _ -> fallback -- | Eta-expand bound variables like @z@ in @X (fst z)@.-expandProjectedVars :: (Normalise a, TermLike a, Show a, PrettyTCM a, NoProjectedVar a, Subst a, PrettyTCM b, Subst b) =>+expandProjectedVars :: (Normalise a, TermLike a, Show a, PrettyTCM a, NoProjectedVar a,+ Subst Term a, PrettyTCM b, Subst Term b) => a -> b -> (a -> b -> TCM c) -> TCM c expandProjectedVars args v ret = loop (args, v) where loop (args, v) = do@@ -938,7 +936,7 @@ Left (ProjVarExc i _) -> etaExpandProjectedVar i (args, v) done loop -- | Eta-expand a de Bruijn index of record type in context and passed term(s).-etaExpandProjectedVar :: (PrettyTCM a, Subst a) => Int -> a -> TCM c -> (a -> TCM c) -> TCM c+etaExpandProjectedVar :: (PrettyTCM a, Subst Term a) => Int -> a -> TCM c -> (a -> TCM c) -> TCM c etaExpandProjectedVar i v fail succeed = do reportSDoc "tc.meta.assign.proj" 40 $ text "trying to expand projected variable" <+> prettyTCM (var i)@@ -969,7 +967,7 @@ Con (ConHead _ Inductive (_:_)) vs -> noProjectedVar vs _ -> return () -instance NoProjectedVar a => NoProjectedVar (I.Arg a) where+instance NoProjectedVar a => NoProjectedVar (Arg a) where noProjectedVar = Fold.mapM_ noProjectedVar instance NoProjectedVar a => NoProjectedVar [a] where@@ -1050,7 +1048,7 @@ (throwError ()) -- Intermediate result in the following function-type Res = [(I.Arg Nat, Term)]+type Res = [(Arg Nat, Term)] -- | Exceptions raised when substitution cannot be inverted. data InvertExcept@@ -1086,7 +1084,7 @@ throwError CantInvert neutralArg = throwError NeutralArg - isVarOrIrrelevant :: Res -> (I.Arg Term, Term) -> ExceptT InvertExcept TCM Res+ isVarOrIrrelevant :: Res -> (Arg Term, Term) -> ExceptT InvertExcept TCM Res isVarOrIrrelevant vars (arg, t) = case ignoreSharing <$> arg of -- i := x@@ -1108,8 +1106,7 @@ | length fs == length vs -> do let aux (Arg _ v) (Arg info' f) = (Arg ai v,) $ t `applyE` [Proj f] where ai = ArgInfo- { argInfoColors = argInfoColors info -- TODO guilhem- , argInfoHiding = min (getHiding info) (getHiding info')+ { argInfoHiding = min (getHiding info) (getHiding info') , argInfoRelevance = max (getRelevance info) (getRelevance info') } res <- loop $ zipWith aux vs fs@@ -1135,7 +1132,6 @@ Arg _ Pi{} -> neutralArg Arg _ Sort{} -> neutralArg Arg _ Level{} -> neutralArg- Arg _ ExtLam{} -> __IMPOSSIBLE__ Arg info (Shared p) -> isVarOrIrrelevant vars (Arg info $ derefPtr p, t) @@ -1144,8 +1140,8 @@ append res vars = foldr cons vars res -- adding an irrelevant entry only if not present- cons :: (I.Arg Nat, Term) -> Res -> Res- cons a@(Arg (ArgInfo _ Irrelevant _) i, t) vars -- TODO? UnusedArg?!+ cons :: (Arg Nat, Term) -> Res -> Res+ cons a@(Arg (ArgInfo _ Irrelevant) i, t) vars -- TODO? UnusedArg?! | any ((i==) . unArg . fst) vars = vars | otherwise = a : vars -- adding a relevant entry:
src/full/Agda/TypeChecking/MetaVars.hs-boot view
@@ -1,8 +1,9 @@ module Agda.TypeChecking.MetaVars where -import Agda.Syntax.Internal ( MetaId, Term, Type, Arg, Args, Abs, Dom, Telescope )+import Agda.Syntax.Common ( Arg, Dom )+import Agda.Syntax.Internal ( MetaId, Term, Type, Args, Abs, Telescope ) import Agda.Syntax.Internal.Generic ( TermLike )-import Agda.TypeChecking.Monad.Base ( TCM, RunMetaOccursCheck(..), CompareDirection(..) )+import Agda.TypeChecking.Monad.Base ( TCM, RunMetaOccursCheck(..), CompareDirection(..), Candidate ) type Condition = Dom Type -> Abs Type -> Bool newArgsMeta' :: Condition -> Type -> TCM Args@@ -10,8 +11,8 @@ assignTerm :: MetaId -> [Arg String] -> Term -> TCM () etaExpandMetaSafe :: MetaId -> TCM () assignV :: CompareDirection -> MetaId -> Args -> Term -> TCM ()-assign :: CompareDirection -> MetaId -> Args -> Term -> TCM ()-newIFSMeta :: String -> Type -> Maybe [(Term, Type)] -> TCM Term+assign :: CompareDirection -> MetaId -> Args -> Term -> TCM ()+newIFSMeta :: String -> Type -> Maybe [Candidate] -> TCM Term newValueMeta :: RunMetaOccursCheck -> Type -> TCM Term newNamedValueMeta :: RunMetaOccursCheck -> String -> Type -> TCM Term newTelMeta :: Telescope -> TCM Args
src/full/Agda/TypeChecking/MetaVars/Mention.hs view
@@ -1,15 +1,11 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-} module Agda.TypeChecking.MetaVars.Mention where import Agda.Syntax.Common-import Agda.Syntax.Internal as I+import Agda.Syntax.Internal import Agda.TypeChecking.Monad -import Agda.Utils.Impossible-#include "undefined.h"- class MentionsMeta t where mentionsMeta :: MetaId -> t -> Bool @@ -26,7 +22,6 @@ DontCare v -> False -- we don't have to look inside don't cares when deciding to wake constraints MetaV y args -> x == y || mm args -- TODO: we really only have to look one level deep at meta args Shared p -> mm $ derefPtr p- ExtLam{} -> __IMPOSSIBLE__ where mm v = mentionsMeta x v @@ -58,12 +53,12 @@ instance MentionsMeta t => MentionsMeta (Abs t) where mentionsMeta x = mentionsMeta x . unAbs -instance MentionsMeta t => MentionsMeta (I.Arg t) where+instance MentionsMeta t => MentionsMeta (Arg t) where mentionsMeta x a | isIrrelevant a = False -- ^ we don't have to look inside irrelevant arguments when deciding to wake constraints mentionsMeta x a = mentionsMeta x (unArg a) -instance MentionsMeta t => MentionsMeta (I.Dom t) where+instance MentionsMeta t => MentionsMeta (Dom t) where mentionsMeta x = mentionsMeta x . unDom instance MentionsMeta t => MentionsMeta [t] where
src/full/Agda/TypeChecking/MetaVars/Occurs.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE NoMonomorphismRestriction #-}+{-# LANGUAGE UndecidableInstances #-} {- | The occurs check for unification. Does pruning on the fly. @@ -19,11 +20,8 @@ import Control.Applicative import Control.Monad import Control.Monad.Reader-import Control.Monad.State import Data.Foldable (foldMap)-import Data.List-import Data.Maybe import Data.Monoid import Data.Set (Set) import qualified Data.Set as Set@@ -31,7 +29,7 @@ import qualified Agda.Benchmarking as Bench import Agda.Syntax.Common-import Agda.Syntax.Internal as I+import Agda.Syntax.Internal import Agda.TypeChecking.Monad import qualified Agda.TypeChecking.Monad.Benchmark as Bench@@ -52,13 +50,12 @@ ) import Agda.Utils.Lens-import Agda.Utils.List (takeWhileJust)+import Agda.Utils.List (downFrom) import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Permutation import Agda.Utils.Pretty (prettyShow) import Agda.Utils.Size-import qualified Agda.Utils.VarSet as VarSet #include "undefined.h" import Agda.Utils.Impossible@@ -203,7 +200,7 @@ occursCheck :: (Occurs a, InstantiateFull a, PrettyTCM a) => MetaId -> Vars -> a -> TCM a-occursCheck m xs v = Bench.billTo [ Bench.Typing, Bench.OccursCheck ] $ do+occursCheck m xs v = disableDestructiveUpdate $ Bench.billTo [ Bench.Typing, Bench.OccursCheck ] $ do mv <- lookupMeta m initOccursCheck mv -- TODO: Can we do this in a better way?@@ -276,7 +273,6 @@ Pi a b -> uncurry Pi <$> occ (leaveTop ctx) (a,b) Sort s -> Sort <$> occ (leaveTop ctx) s v@Shared{} -> updateSharedTerm (occ ctx) v- ExtLam{} -> __IMPOSSIBLE__ MetaV m' es -> do -- Check for loop -- don't fail hard on this, since we might still be on the top-level@@ -340,7 +336,6 @@ Pi a b -> metaOccurs m (a,b) Sort s -> metaOccurs m s Shared p -> metaOccurs m $ derefPtr p- ExtLam{} -> __IMPOSSIBLE__ MetaV m' vs | m == m' -> patternViolation' 50 $ "Found occurrence of " ++ prettyShow m | otherwise -> metaOccurs m vs @@ -441,14 +436,14 @@ metaOccurs m (Proj{} ) = return () metaOccurs m (Apply a) = metaOccurs m a -instance (Occurs a, Subst a) => Occurs (Abs a) where+instance (Occurs a, Subst t a) => Occurs (Abs a) where occurs red ctx m xs b@(Abs s x) = Abs s <$> underAbstraction_ b (occurs red ctx m (liftUnderAbs xs)) occurs red ctx m xs b@(NoAbs s x) = NoAbs s <$> occurs red ctx m xs x metaOccurs m (Abs s x) = metaOccurs m x metaOccurs m (NoAbs s x) = metaOccurs m x -instance Occurs a => Occurs (I.Arg a) where+instance Occurs a => Occurs (Arg a) where occurs red ctx m xs (Arg info x) | isIrrelevant info = Arg info <$> occurs red Irrel m (goIrrelevant xs) x occurs red ctx m xs (Arg info x) = Arg info <$>@@ -456,7 +451,7 @@ metaOccurs m a = metaOccurs m (unArg a) -instance Occurs a => Occurs (I.Dom a) where+instance Occurs a => Occurs (Dom a) where occurs red ctx m xs (Dom info x) = Dom info <$> occurs red ctx m xs x metaOccurs m = metaOccurs m . unDom @@ -539,7 +534,6 @@ Lit{} -> failure -- matchable MetaV{} -> failure -- potentially matchable Shared p -> __IMPOSSIBLE__- ExtLam{} -> __IMPOSSIBLE__ -- | Check whether a term @Def f es@ is finally stuck. -- Currently, we give only a crude approximation.@@ -579,23 +573,23 @@ reportSLn "tc.meta.kill" 20 $ "found forbidden de Bruijn level " ++ show l return $ Any forbidden- getAny <$> foldRigid id test v+ getAny <$> foldRigid test v -- | Collect the *definitely* rigid variables in a monoid. -- We need to successively reduce the expression to do this. class FoldRigid a where--- foldRigid :: (MonadTCM tcm, Monoid (tcm m)) => (tcm m -> tcm m) -> (Nat -> tcm m) -> a -> tcm m- foldRigid :: (Monoid (TCM m)) => (TCM m -> TCM m) -> (Nat -> TCM m) -> a -> TCM m+-- foldRigid :: (MonadTCM tcm, Monoid (tcm m)) => (Nat -> tcm m) -> a -> tcm m+ foldRigid :: (Monoid (TCM m)) => (Nat -> TCM m) -> a -> TCM m instance FoldRigid Term where- foldRigid abs f t = do+ foldRigid f t = do b <- liftTCM $ reduceB t case ignoreSharing $ ignoreBlocking b of Var i es -> f i `mappend` fold es Lam _ t -> fold t Lit{} -> mempty- Def f es -> case b of+ Def _ es -> case b of Blocked{} -> mempty NotBlocked MissingClauses _ -> mempty _ -> fold es@@ -606,61 +600,60 @@ MetaV{} -> mempty DontCare{} -> mempty Shared{} -> __IMPOSSIBLE__- ExtLam{} -> __IMPOSSIBLE__- where fold = foldRigid abs f+ where fold = foldRigid f instance FoldRigid Type where- foldRigid abs f (El s t) = foldRigid abs f (s,t)+ foldRigid f (El s t) = foldRigid f (s,t) instance FoldRigid Sort where- foldRigid abs f s =+ foldRigid f s = case s of Type l -> fold l Prop -> mempty Inf -> mempty SizeUniv -> mempty DLub s1 s2 -> fold (s1, s2)- where fold = foldRigid abs f+ where fold = foldRigid f instance FoldRigid Level where- foldRigid abs f (Max ls) = foldRigid abs f ls+ foldRigid f (Max ls) = foldRigid f ls instance FoldRigid PlusLevel where- foldRigid abs f ClosedLevel{} = mempty- foldRigid abs f (Plus _ l) = foldRigid abs f l+ foldRigid f ClosedLevel{} = mempty+ foldRigid f (Plus _ l) = foldRigid f l instance FoldRigid LevelAtom where- foldRigid abs f l =+ foldRigid f l = case l of MetaLevel{} -> mempty NeutralLevel MissingClauses _ -> mempty NeutralLevel _ l -> fold l BlockedLevel _ l -> fold l UnreducedLevel l -> fold l- where fold = foldRigid abs f+ where fold = foldRigid f -instance (Subst a, FoldRigid a) => FoldRigid (Abs a) where- foldRigid abs f b = underAbstraction_ b $ foldRigid abs f+instance (Subst t a, FoldRigid a) => FoldRigid (Abs a) where+ foldRigid f b = underAbstraction_ b $ foldRigid f -instance FoldRigid a => FoldRigid (I.Arg a) where- foldRigid abs f a =+instance FoldRigid a => FoldRigid (Arg a) where+ foldRigid f a = case getRelevance a of Irrelevant -> mempty UnusedArg -> mempty- _ -> foldRigid abs f $ unArg a+ _ -> foldRigid f $ unArg a -instance FoldRigid a => FoldRigid (I.Dom a) where- foldRigid abs f dom = foldRigid abs f $ unDom dom+instance FoldRigid a => FoldRigid (Dom a) where+ foldRigid f dom = foldRigid f $ unDom dom instance FoldRigid a => FoldRigid (Elim' a) where- foldRigid abs f (Apply a) = foldRigid abs f a- foldRigid abs f Proj{} = mempty+ foldRigid f (Apply a) = foldRigid f a+ foldRigid f Proj{} = mempty instance FoldRigid a => FoldRigid [a] where- foldRigid abs f = foldMap $ foldRigid abs f+ foldRigid f = foldMap $ foldRigid f instance (FoldRigid a, FoldRigid b) => FoldRigid (a,b) where- foldRigid abs f (a,b) = foldRigid abs f a `mappend` foldRigid abs f b+ foldRigid f (a,b) = foldRigid f a `mappend` foldRigid f b data PruneResult@@ -672,7 +665,6 @@ -- | @killArgs [k1,...,kn] X@ prunes argument @i@ from metavar @X@ if @ki==True@. -- Pruning is carried out whenever > 0 arguments can be pruned.--- @True@ is only returned if all arguments could be pruned. killArgs :: [Bool] -> MetaId -> TCM PruneResult killArgs kills _ | not (or kills) = return NothingToPrune -- nothing to kill@@ -688,7 +680,7 @@ dbg kills' a a' -- If there is any prunable argument, perform the pruning if not (any unArg kills') then return PrunedNothing else do- performKill (reverse kills') m a'+ performKill kills' m a' -- Only successful if all occurrences were killed -- Andreas, 2011-05-09 more precisely, check that at least -- the in 'kills' prescribed kills were carried out@@ -716,7 +708,7 @@ -- Invariant: @k'i == True@ iff @ki == True@ and pruning the @i@th argument from -- type @b@ is possible without creating unbound variables. -- @t'@ is type @t@ after pruning all @k'i==True@.-killedType :: [(I.Dom (ArgName, Type), Bool)] -> Type -> ([I.Arg Bool], Type)+killedType :: [(Dom (ArgName, Type), Bool)] -> Type -> ([Arg Bool], Type) killedType [] b = ([], b) killedType ((arg@(Dom info _), kill) : kills) b | dontKill = (Arg info False : args, mkPi arg b')@@ -725,23 +717,38 @@ (args, b') = killedType kills b dontKill = not kill || 0 `freeIn` b' --- The list starts with the last argument-performKill :: [I.Arg Bool] -> MetaId -> Type -> TCM ()+-- | Instantiate a meta variable with a new one that only takes+-- the arguments which are not pruneable.+performKill+ :: [Arg Bool] -- ^ Arguments to old meta var in left to right order+ -- with @Bool@ indicating whether they can be pruned.+ -> MetaId -- ^ The old meta var to receive pruning.+ -> Type -- ^ The pruned type of the new meta var.+ -> TCM () performKill kills m a = do mv <- lookupMeta m when (mvFrozen mv == Frozen) __IMPOSSIBLE__- let perm = Perm (size kills)- [ i | (i, Arg _ False) <- zip [0..] (reverse kills) ]+ -- Arity of the old meta.+ let n = size kills+ -- The permutation of the new meta picks the arguments+ -- which are not pruned in left to right order+ -- (de Bruijn level order).+ let perm = Perm n+ [ i | (i, Arg _ False) <- zip [0..] kills ] m' <- newMeta (mvInfo mv) (mvPriority mv) perm (HasType __IMPOSSIBLE__ a) -- Andreas, 2010-10-15 eta expand new meta variable if necessary etaExpandMetaSafe m'- let vars = reverse [ Arg info (var i) | (i, Arg info False) <- zip [0..] kills ]- lam b a = Lam (argInfo a) (Abs "v" b)- tel = map ("v" <$) (reverse kills)+ let -- Arguments to new meta (de Bruijn indices)+ -- in left to right order.+ vars = [ Arg info (var i)+ | (i, Arg info False) <- zip (downFrom n) kills ] u = MetaV m' $ map Apply vars+ -- Arguments to the old meta (just arg infos and name hints)+ -- in left to right order.+ tel = map ("v" <$) kills dbg m' u- assignTerm m tel u+ assignTerm m tel u -- m tel := u where dbg m' u = reportSDoc "tc.meta.kill" 10 $ vcat [ text "actual killing"
src/full/Agda/TypeChecking/Monad.hs view
@@ -15,6 +15,7 @@ , module Agda.TypeChecking.Monad.State , module Agda.TypeChecking.Monad.Statistics , module Agda.TypeChecking.Monad.Trace+ , module Agda.TypeChecking.Monad.Caching ) where import Agda.TypeChecking.Monad.Base@@ -33,3 +34,4 @@ import Agda.TypeChecking.Monad.State import Agda.TypeChecking.Monad.Statistics import Agda.TypeChecking.Monad.Trace+import Agda.TypeChecking.Monad.Caching
src/full/Agda/TypeChecking/Monad/Base.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE BangPatterns #-} {-# LANGUAGE CPP #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveFoldable #-}@@ -17,9 +18,8 @@ import Prelude hiding (null) -import Control.Arrow ((***), first, second) import qualified Control.Concurrent as C-import Control.Exception as E+import qualified Control.Exception as E import Control.Monad.State import Control.Monad.Reader import Control.Monad.Writer@@ -46,17 +46,18 @@ import Agda.Benchmarking (Benchmark, Phase) import Agda.Syntax.Concrete (TopLevelModuleName)-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import qualified Agda.Syntax.Concrete as C import qualified Agda.Syntax.Concrete.Definitions as D import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Abstract (AllNames) import Agda.Syntax.Internal as I import Agda.Syntax.Internal.Pattern ()+import Agda.Syntax.Treeless (Compiled) import Agda.Syntax.Fixity import Agda.Syntax.Position import Agda.Syntax.Scope.Base+import qualified Agda.Syntax.Info as Info import Agda.TypeChecking.CompiledClause import Agda.TypeChecking.Positivity.Occurrence@@ -65,14 +66,15 @@ -- import {-# SOURCE #-} Agda.Interaction.FindFile import Agda.Interaction.Options import Agda.Interaction.Response- (InteractionOutputCallback, defaultInteractionOutputCallback, Response)+ (InteractionOutputCallback, defaultInteractionOutputCallback) import Agda.Interaction.Highlighting.Precise (CompressedFile, HighlightingInfo) import qualified Agda.Compiler.JS.Syntax as JS+import qualified Agda.Compiler.UHC.Pragmas.Base as CR import Agda.Utils.Except- ( Error(noMsg, strMsg)+ ( Error(strMsg) , ExceptT , MonadError(catchError, throwError) )@@ -89,7 +91,6 @@ import Agda.Utils.Permutation import Agda.Utils.Pretty import Agda.Utils.Singleton-import Agda.Utils.Time #include "undefined.h" import Agda.Utils.Impossible@@ -107,11 +108,16 @@ -- ^ State which is forever, like a diamond. } +class Monad m => ReadTCState m where+ getTCState :: m TCState++instance Show TCState where+ show _ = "TCSt{}"+ data PreScopeState = PreScopeState { stPreTokens :: CompressedFile -- from lexer -- ^ Highlighting info for tokens (but not those tokens for -- which highlighting exists in 'stSyntaxInfo').- , stPreInteractionPoints :: InteractionPoints -- scope checker first , stPreImports :: Signature -- XX populated by scopec hecker -- ^ Imported declared identifiers. -- Those most not be serialized!@@ -129,10 +135,14 @@ -- pragmas only affect this field. , stPreImportedBuiltins :: BuiltinThings PrimFun , stPreHaskellImports :: Set String- -- ^ Imports that should be generated by the compiler (this- -- includes imports from imported modules).- , stPreFreshInteractionId :: InteractionId- , stPreFreshNameId :: NameId+ -- ^ Imports that should be generated by the compiler / MAlonzo+ -- (this includes imports from imported modules).+ , stPreHaskellImportsUHC :: Set String+ -- ^ Imports that should be generated by the compiler / UHC backend+ -- (this includes imports from imported modules).+ , stPreHaskellCode :: [String]+ -- ^ Inline Haskell code that should be inserted by the GHC backend+ , stPreFreshInteractionId :: !InteractionId } type DisambiguatedNames = IntMap A.QName@@ -159,6 +169,10 @@ , stPostSignature :: Signature -- ^ Declared identifiers of the current file. -- These will be serialized after successful type checking.+ , stPostImportsDisplayForms :: !DisplayForms+ -- ^ Display forms we add for imported identifiers+ , stPostImportedDisplayForms :: !DisplayForms+ -- ^ Display forms added by someone else to imported identifiers , stPostCurrentModule :: Maybe ModuleName -- ^ The current module is available after it has been type -- checked.@@ -173,6 +187,7 @@ , stPostFreshCtxId :: CtxId , stPostFreshProblemId :: ProblemId , stPostFreshInt :: Int+ , stPostFreshNameId :: NameId } -- | A part of the state which is not reverted when an error is thrown@@ -189,8 +204,42 @@ -- Needs to be a strict field to avoid space leaks! , stAccumStatistics :: !Statistics -- ^ Should be strict field.+ , stLoadedFileCache :: !(Maybe LoadedFileCache)+ -- ^ Cached typechecking state from the last loaded file.+ -- Should be Nothing when checking imports. } +data LoadedFileCache = LoadedFileCache+ { lfcCached :: !CachedTypeCheckLog+ , lfcCurrent :: !CurrentTypeCheckLog+ }++-- | A log of what the type checker does and states after the action is+-- completed. The cached version is stored first executed action first.+type CachedTypeCheckLog = [(TypeCheckAction, PostScopeState)]++-- | Like 'CachedTypeCheckLog', but storing the log for an ongoing type+-- checking of a module. Stored in reverse order (last performed action+-- first).+type CurrentTypeCheckLog = [(TypeCheckAction, PostScopeState)]++-- | A complete log for a module will look like this:+--+-- * 'Pragmas'+--+-- * 'EnterSection', entering the main module.+--+-- * 'Decl'/'EnterSection'/'LeaveSection', for declarations and nested+-- modules+--+-- * 'LeaveSection', leaving the main module.+data TypeCheckAction+ = EnterSection !Info.ModuleInfo !ModuleName ![A.TypedBindings]+ | LeaveSection !ModuleName+ | Decl !A.Declaration+ -- ^ Never a Section or ScopeDecl+ | Pragmas !PragmaOptions+ -- | Empty persistent state. initPersistentState :: PersistentTCState@@ -200,6 +249,7 @@ , stInteractionOutputCallback = defaultInteractionOutputCallback , stBenchmark = empty , stAccumStatistics = Map.empty+ , stLoadedFileCache = Nothing } -- | Empty state of type checker.@@ -207,7 +257,6 @@ initPreScopeState :: PreScopeState initPreScopeState = PreScopeState { stPreTokens = mempty- , stPreInteractionPoints = Map.empty , stPreImports = emptySignature , stPreImportedModules = Set.empty , stPreModuleToSource = Map.empty@@ -218,8 +267,9 @@ , stPrePragmaOptions = defaultInteractionOptions , stPreImportedBuiltins = Map.empty , stPreHaskellImports = Set.empty+ , stPreHaskellImportsUHC = Set.empty+ , stPreHaskellCode = [] , stPreFreshInteractionId = 0- , stPreFreshNameId = NameId 0 0 } initPostScopeState :: PostScopeState@@ -233,6 +283,8 @@ , stPostDirty = False , stPostOccursCheckDefs = Set.empty , stPostSignature = emptySignature+ , stPostImportsDisplayForms = HMap.empty+ , stPostImportedDisplayForms = HMap.empty , stPostCurrentModule = Nothing , stPostInstanceDefs = (Map.empty , []) , stPostStatistics = Map.empty@@ -243,6 +295,7 @@ , stPostFreshCtxId = 0 , stPostFreshProblemId = 1 , stPostFreshInt = 0+ , stPostFreshNameId = NameId 0 0 } initState :: TCState@@ -310,6 +363,16 @@ f (stPreHaskellImports (stPreScopeState s)) <&> \x -> s {stPreScopeState = (stPreScopeState s) {stPreHaskellImports = x}} +stHaskellImportsUHC :: Lens' (Set String) TCState+stHaskellImportsUHC f s =+ f (stPreHaskellImportsUHC (stPreScopeState s)) <&>+ \x -> s {stPreScopeState = (stPreScopeState s) {stPreHaskellImportsUHC = x}}++stHaskellCode :: Lens' [String] TCState+stHaskellCode f s =+ f (stPreHaskellCode (stPreScopeState s)) <&>+ \x -> s {stPreScopeState = (stPreScopeState s) {stPreHaskellCode = x}}+ stFreshInteractionId :: Lens' InteractionId TCState stFreshInteractionId f s = f (stPreFreshInteractionId (stPreScopeState s)) <&>@@ -317,8 +380,8 @@ stFreshNameId :: Lens' NameId TCState stFreshNameId f s =- f (stPreFreshNameId (stPreScopeState s)) <&>- \x -> s {stPreScopeState = (stPreScopeState s) {stPreFreshNameId = x}}+ f (stPostFreshNameId (stPostScopeState s)) <&>+ \x -> s {stPostScopeState = (stPostScopeState s) {stPostFreshNameId = x}} stSyntaxInfo :: Lens' CompressedFile TCState stSyntaxInfo f s =@@ -365,6 +428,16 @@ f (stPostSignature (stPostScopeState s)) <&> \x -> s {stPostScopeState = (stPostScopeState s) {stPostSignature = x}} +stImportsDisplayForms :: Lens' DisplayForms TCState+stImportsDisplayForms f s =+ f (stPostImportsDisplayForms (stPostScopeState s)) <&>+ \x -> s {stPostScopeState = (stPostScopeState s) {stPostImportsDisplayForms = x}}++stImportedDisplayForms :: Lens' DisplayForms TCState+stImportedDisplayForms f s =+ f (stPostImportedDisplayForms (stPostScopeState s)) <&>+ \x -> s {stPostScopeState = (stPostScopeState s) {stPostImportedDisplayForms = x}}+ stCurrentModule :: Lens' (Maybe ModuleName) TCState stCurrentModule f s = f (stPostCurrentModule (stPostScopeState s)) <&>@@ -423,16 +496,19 @@ class Enum i => HasFresh i where freshLens :: Lens' i TCState+ nextFresh' :: i -> i+ nextFresh' = succ nextFresh :: HasFresh i => TCState -> (i, TCState) nextFresh s =- let c = s^.freshLens- in (c, set freshLens (succ c) s)+ let !c = s^.freshLens+ in (c, set freshLens (nextFresh' c) s) fresh :: (HasFresh i, MonadState TCState m) => m i fresh =- do c <- use freshLens- freshLens .= succ c+ do !s <- get+ let (!c , !s') = nextFresh s+ put s' return c instance HasFresh MetaId where@@ -446,6 +522,9 @@ instance HasFresh NameId where freshLens = stFreshNameId+ -- nextFresh increments the current fresh name by 2 so @NameId@s used+ -- before caching starts do not overlap with the ones used after.+ nextFresh' = succ . succ instance HasFresh CtxId where freshLens = stFreshCtxId@@ -480,7 +559,7 @@ freshNoName :: (MonadState TCState m, HasFresh NameId) => Range -> m Name freshNoName r = do i <- fresh- return $ Name i (C.NoName noRange i) r defaultFixity'+ return $ Name i (C.NoName noRange i) r noFixity' freshNoName_ :: (MonadState TCState m, HasFresh NameId) => m Name freshNoName_ = freshNoName noRange@@ -560,11 +639,18 @@ -- not serialized, so if you deserialize an interface, @iInsideScope@ -- will be empty. You need to type-check the file to get @iInsideScope@. , iSignature :: Signature+ , iDisplayForms :: DisplayForms+ -- ^ Display forms added for imported identifiers. , iBuiltin :: BuiltinThings (String, QName) , iHaskellImports :: Set String -- ^ Haskell imports listed in -- (transitively) imported modules are -- not included here.+ , iHaskellImportsUHC :: Set String+ -- ^ Haskell imports listed in+ -- (transitively) imported modules are+ -- not included here.+ , iHaskellCode :: [String] -- ^ Inline Haskell code , iHighlighting :: HighlightingInfo , iPragmaOptions :: [OptionsPragma] -- ^ Pragma options set in the file.@@ -573,20 +659,23 @@ deriving (Typeable, Show) instance Pretty Interface where- pretty (Interface sourceH importedM moduleN scope insideS signature builtin- haskellI highlighting pragmaO patternS) =+ pretty (Interface sourceH importedM moduleN scope insideS signature display builtin+ haskellI haskellIUHC haskellCode highlighting pragmaO patternS) = hang (text "Interface") 2 $ vcat- [ text "source hash:" <+> (pretty . show) sourceH- , text "imported modules:" <+> (pretty . show) importedM- , text "module name:" <+> pretty moduleN- , text "scope:" <+> (pretty . show) scope- , text "inside scope:" <+> (pretty . show) insideS- , text "signature:" <+> (pretty . show) signature- , text "builtin:" <+> (pretty . show) builtin- , text "Haskell imports:" <+> (pretty . show) haskellI- , text "highlighting:" <+> (pretty . show) highlighting- , text "pragma options:" <+> (pretty . show) pragmaO- , text "pattern syns:" <+> (pretty . show) patternS+ [ text "source hash:" <+> (pretty . show) sourceH+ , text "imported modules:" <+> (pretty . show) importedM+ , text "module name:" <+> pretty moduleN+ , text "scope:" <+> (pretty . show) scope+ , text "inside scope:" <+> (pretty . show) insideS+ , text "signature:" <+> (pretty . show) signature+ , text "display:" <+> (pretty . show) display+ , text "builtin:" <+> (pretty . show) builtin+ , text "Haskell imports:" <+> (pretty . show) haskellI+ , text "Haskell imports UHC:" <+> (pretty . show) haskellIUHC+ , text "Haskell code:" <+> (vcat $ map (vcat . map text . lines) $ reverse haskellCode)+ , text "highlighting:" <+> (pretty . show) highlighting+ , text "pragma options:" <+> (pretty . show) pragmaO+ , text "pattern syns:" <+> (pretty . show) patternS ] -- | Combines the source hash and the (full) hashes of the imported modules.@@ -645,9 +734,13 @@ | Guarded Constraint ProblemId | IsEmpty Range Type -- ^ The range is the one of the absurd pattern.- | CheckSizeLtSat Type- -- ^ Check that the 'Type' is either not a SIZELT or a non-empty SIZELT.- | FindInScope MetaId (Maybe [(Term, Type)])+ | CheckSizeLtSat Term+ -- ^ Check that the 'Term' is either not a SIZELT or a non-empty SIZELT.+ | FindInScope MetaId (Maybe MetaId) (Maybe [Candidate])+ -- ^ the first argument is the instance argument, the second one is the meta+ -- on which the constraint may be blocked on and the third one is the list+ -- of candidates (or Nothing if we haven’t determined the list of+ -- candidates yet) deriving (Typeable, Show) instance HasRange Constraint where@@ -787,7 +880,7 @@ data TypeCheckingProblem = CheckExpr A.Expr Type- | CheckArgs ExpandHidden ExpandInstances Range [I.NamedArg A.Expr] Type Type (Args -> Type -> TCM Term)+ | CheckArgs ExpandHidden Range [NamedArg A.Expr] Type Type (Args -> Type -> TCM Term) | CheckLambda (Arg ([WithHiding Name], Maybe Type)) A.Expr Type -- ^ @(λ (xs : t₀) → e) : t@ -- This is not an instance of 'CheckExpr' as the domain type@@ -796,6 +889,7 @@ -- @(λ (x y : Fin _) → e) : (x : Fin n) → ?@ -- we want to postpone @(λ (y : Fin n) → e) : ?@ where @Fin n@ -- is a 'Type' rather than an 'A.Expr'.+ | UnquoteTactic Term Term Type -- ^ First argument is computation and the others are hole and goal type deriving (Typeable) instance Show MetaInstantiation where@@ -880,9 +974,6 @@ getMetaRelevance :: MetaVariable -> Relevance getMetaRelevance = envRelevance . getMetaEnv -getMetaColors :: MetaVariable -> [Color]-getMetaColors = envColors . getMetaEnv- --------------------------------------------------------------------------- -- ** Interaction meta variables ---------------------------------------------------------------------------@@ -929,6 +1020,7 @@ type Sections = Map ModuleName Section type Definitions = HashMap QName Definition type RewriteRuleMap = HashMap QName RewriteRules+type DisplayForms = HashMap QName [Open DisplayForm] data Section = Section { _secTelescope :: Telescope } deriving (Typeable, Show)@@ -992,12 +1084,9 @@ defRelevance :: Definition -> Relevance defRelevance = argInfoRelevance . defArgInfo -defColors :: Definition -> [Color]-defColors = argInfoColors . defArgInfo- -- | Non-linear (non-constructor) first-order pattern. data NLPat- = PVar {-# UNPACK #-} !Int+ = PVar (Maybe CtxId) !Int -- ^ Matches anything (modulo non-linearity). | PWild -- ^ Matches anything (e.g. irrelevant terms).@@ -1039,11 +1128,52 @@ -- ^ Positivity information on arguments of the definition. -- Does not include info for dropped parameters to -- projection(-like) functions and constructors.++ -- Sometimes Agda looks up 'Occurrence's in these lists based on+ -- their position, so one might consider replacing the list+ -- with, say, an 'IntMap'. However, presumably these lists tend+ -- to be short, in which case 'IntMap's could be slower than+ -- lists. For instance, at one point the longest list+ -- encountered for the standard library (in serialised+ -- interfaces) had length 27. Distribution:+ --+ -- Length, number of lists+ -- -----------------------+ --+ -- 0, 2444+ -- 1, 721+ -- 2, 433+ -- 3, 668+ -- 4, 602+ -- 5, 624+ -- 6, 626+ -- 7, 484+ -- 8, 375+ -- 9, 264+ -- 10, 305+ -- 11, 188+ -- 12, 171+ -- 13, 108+ -- 14, 84+ -- 15, 80+ -- 16, 38+ -- 17, 23+ -- 18, 16+ -- 19, 8+ -- 20, 7+ -- 21, 5+ -- 22, 2+ -- 23, 3+ -- 27, 1+ , defDisplay :: [Open DisplayForm] , defMutual :: MutualId , defCompiledRep :: CompiledRepresentation , defInstance :: Maybe QName -- ^ @Just q@ when this definition is an instance of class q+ , defCopy :: Bool+ -- ^ Has this function been created by a module+ -- instantiation? , theDef :: Defn } deriving (Typeable, Show)@@ -1060,6 +1190,7 @@ , defMutual = 0 , defCompiledRep = noCompiledRep , defInstance = Nothing+ , defCopy = False , theDef = def } @@ -1075,6 +1206,12 @@ data HaskellExport = HsExport HaskellType String deriving (Show, Typeable) +data CoreRepresentation+ = CrDefn CR.CoreExpr -- ^ Core code for functions.+ | CrType CR.CoreType -- ^ Core type for agda type.+ | CrConstr CR.CoreConstr -- ^ Core constructor for agda constructor.+ deriving (Typeable, Show)+ -- | Polarity for equality and subtype checking. data Polarity = Covariant -- ^ monotone@@ -1088,11 +1225,12 @@ , exportHaskell :: Maybe HaskellExport , compiledEpic :: Maybe EpicCode , compiledJS :: Maybe JSCode+ , compiledCore :: Maybe CoreRepresentation } deriving (Typeable, Show) noCompiledRep :: CompiledRepresentation-noCompiledRep = CompiledRep Nothing Nothing Nothing Nothing+noCompiledRep = CompiledRep Nothing Nothing Nothing Nothing Nothing -- | Additional information for extended lambdas. data ExtLamInfo = ExtLamInfo@@ -1122,10 +1260,20 @@ -- (Invariant: the number of abstractions equals 'projIndex'.) -- In case of a projection-like function, just the function symbol -- is returned as 'Def': @t = \ pars -> f@.- , projArgInfo :: I.ArgInfo+ , projArgInfo :: ArgInfo -- ^ The info of the principal (record) argument. } deriving (Typeable, Show) +data EtaEquality = Specified !Bool | Inferred !Bool deriving (Typeable,Show)++etaEqualityToBool :: EtaEquality -> Bool+etaEqualityToBool (Specified b) = b+etaEqualityToBool (Inferred b) = b++setEtaEquality :: EtaEquality -> Bool -> EtaEquality+setEtaEquality e@Specified{} _ = e+setEtaEquality _ b = Inferred b+ data Defn = Axiom -- ^ Postulate. | Function@@ -1134,6 +1282,8 @@ -- ^ 'Nothing' while function is still type-checked. -- @Just cc@ after type and coverage checking and -- translation to case trees.+ , funTreeless :: Maybe Compiled+ -- ^ Intermediate representation for compiler backends. , funInv :: FunctionInverse , funMutual :: [QName] -- ^ Mutually recursive functions, @data@s and @record@s.@@ -1150,9 +1300,10 @@ -- checker. , funStatic :: Bool -- ^ Should calls to this function be normalised at compile-time?- , funCopy :: Bool- -- ^ Has this function been created by a module- -- instantiation?+ , funInline :: Bool+ -- ^ Should calls to this function be inlined by the compiler?+ , funSmashable :: Bool+ -- ^ Are we allowed to smash this function? , funTerminates :: Maybe Bool -- ^ Has this function been termination checked? Did it pass? , funExtLam :: Maybe ExtLamInfo@@ -1187,12 +1338,12 @@ -- Note: @TelV recTel _ == telView' recConType@. -- Thus, @recTel@ is redundant. , recMutual :: [QName] -- ^ Mutually recursive functions, @data@s and @record@s. Does not include this record.- , recEtaEquality :: Bool -- ^ Eta-expand at this record type. @False@ for unguarded recursive records and coinductive records.+ , recEtaEquality' :: EtaEquality -- ^ Eta-expand at this record type. @False@ for unguarded recursive records and coinductive records unless the user specifies otherwise. , recInduction :: Maybe Induction -- ^ 'Inductive' or 'CoInductive'? Matters only for recursive records. -- 'Nothing' means that the user did not specify it, which is an error -- for recursive records.- , recRecursive :: Bool -- ^ Recursive record. Implies @recEtaEquality = False@. Projections are not size-preserving.+ , recRecursive :: Bool -- ^ Recursive record. Infers @recEtaEquality = False@. Projections are not size-preserving. , recAbstr :: IsAbstract } | Constructor@@ -1214,18 +1365,23 @@ -- ^ Primitive or builtin functions. deriving (Typeable, Show) +recEtaEquality :: Defn -> Bool+recEtaEquality = etaEqualityToBool . recEtaEquality'+ -- | A template for creating 'Function' definitions, with sensible defaults. emptyFunction :: Defn emptyFunction = Function { funClauses = [] , funCompiled = Nothing+ , funTreeless = Nothing , funInv = NotInjective , funMutual = [] , funAbstr = ConcreteDef , funDelayed = NotDelayed , funProjection = Nothing , funStatic = False- , funCopy = False+ , funInline = False+ , funSmashable = True , funTerminates = Nothing , funExtLam = Nothing , funWith = Nothing@@ -1302,14 +1458,16 @@ reduced :: Blocked (Arg Term) -> MaybeReduced (Arg Term) reduced b = case fmap ignoreSharing <$> b of- NotBlocked _ (Common.Arg _ (MetaV x _)) -> MaybeRed (Reduced $ Blocked x ()) v- _ -> MaybeRed (Reduced $ () <$ b) v+ NotBlocked _ (Arg _ (MetaV x _)) -> MaybeRed (Reduced $ Blocked x ()) v+ _ -> MaybeRed (Reduced $ () <$ b) v where v = ignoreBlocking b -- | Controlling 'reduce'. data AllowedReduction = ProjectionReductions -- ^ (Projection and) projection-like functions may be reduced.+ | InlineReductions -- ^ Functions marked INLINE may be reduced.+ | CopatternReductions -- ^ Copattern definitions may be reduced. | FunctionReductions -- ^ Functions which are not projections may be reduced. | LevelReductions -- ^ Reduce @'Level'@ terms. | NonTerminatingReductions -- ^ Functions that have not passed termination checking.@@ -1340,12 +1498,20 @@ defCompiled Defn{theDef = Primitive{primCompiled = mcc}} = mcc defCompiled _ = Nothing +defParameters :: Definition -> Maybe Nat+defParameters Defn{theDef = Datatype{dataPars = n}} = Just n+defParameters Defn{theDef = Record {recPars = n}} = Just n+defParameters _ = Nothing+ defJSDef :: Definition -> Maybe JSCode defJSDef = compiledJS . defCompiledRep defEpicDef :: Definition -> Maybe EpicCode defEpicDef = compiledEpic . defCompiledRep +defCoreDef :: Definition -> Maybe CoreRepresentation+defCoreDef = compiledCore . defCompiledRep+ -- | Are the clauses of this definition delayed? defDelayed :: Definition -> Delayed defDelayed Defn{theDef = Function{funDelayed = d}} = d@@ -1356,11 +1522,6 @@ defNonterminating Defn{theDef = Function{funTerminates = Just False}} = True defNonterminating _ = False --- | Is the definition just a copy created by a module instantiation?-defCopy :: Definition -> Bool-defCopy Defn{theDef = Function{funCopy = b}} = b-defCopy _ = False- -- | Beware when using this function on a @def@ obtained with @getConstInfo q@! -- If the identifier @q@ is abstract, 'getConstInfo' will turn its @def@ into -- an 'Axiom' and you always get 'ConcreteDef', paradoxically.@@ -1417,6 +1578,7 @@ | CheckExprCall A.Expr Type | CheckDotPattern A.Expr Term | CheckPatternShadowing A.SpineClause+ | CheckProjection Range QName Type | IsTypeCall A.Expr Sort | IsType_ A.Expr | InferVar Name@@ -1433,8 +1595,9 @@ | CheckSectionApplication Range ModuleName A.ModuleApplication | ScopeCheckExpr C.Expr | ScopeCheckDeclaration D.NiceDeclaration- | ScopeCheckLHS C.Name C.Pattern+ | ScopeCheckLHS C.QName C.Pattern | NoHighlighting+ | ModuleContents -- ^ Interaction command: show module contents. | SetRange Range -- ^ used by 'setCurrentRange' deriving (Typeable) @@ -1444,6 +1607,7 @@ pretty InferExpr{} = text "InferExpr" pretty CheckExprCall{} = text "CheckExprCall" pretty CheckLetBinding{} = text "CheckLetBinding"+ pretty CheckProjection{} = text "CheckProjection" pretty IsTypeCall{} = text "IsTypeCall" pretty IsType_{} = text "IsType_" pretty InferVar{} = text "InferVar"@@ -1465,6 +1629,7 @@ pretty CheckSectionApplication{} = text "CheckSectionApplication" pretty CheckIsEmpty{} = text "CheckIsEmpty" pretty NoHighlighting{} = text "NoHighlighting"+ pretty ModuleContents{} = text "ModuleContents" instance HasRange Call where getRange (CheckClause _ c) = getRange c@@ -1472,6 +1637,7 @@ getRange (InferExpr e) = getRange e getRange (CheckExprCall e _) = getRange e getRange (CheckLetBinding b) = getRange b+ getRange (CheckProjection r _ _) = r getRange (IsTypeCall e s) = getRange e getRange (IsType_ e) = getRange e getRange (InferVar x) = getRange x@@ -1493,6 +1659,7 @@ getRange (CheckSectionApplication r _ _) = r getRange (CheckIsEmpty r _) = r getRange NoHighlighting = noRange+ getRange ModuleContents = noRange --------------------------------------------------------------------------- -- ** Instance table@@ -1591,6 +1758,9 @@ , envTerminationCheck :: TerminationCheck () -- ^ are we inside the scope of a termination pragma , envSolvingConstraints :: Bool -- ^ Are we currently in the process of solving active constraints?+ , envCheckingWhere :: Bool+ -- ^ Have we stepped into the where-declarations of a clause?+ -- Everything under a @where@ will be checked with this flag on. , envAssignMetas :: Bool -- ^ Are we allowed to assign metas? , envActiveProblems :: [ProblemId]@@ -1603,7 +1773,6 @@ -- ^ Are we checking an irrelevant argument? (=@Irrelevant@) -- Then top-level irrelevant declarations are enabled. -- Other value: @Relevant@, then only relevant decls. are avail.- , envColors :: [Color] , envDisplayFormsEnabled :: Bool -- ^ Sometimes we want to disable display forms. , envReifyInteractionPoints :: Bool@@ -1659,10 +1828,6 @@ -- ^ Used by the scope checker to make sure that certain forms -- of expressions are not used inside dot patterns: extended -- lambdas and let-expressions.- , envReifyUnquoted :: Bool- -- ^ The rules for translating internal to abstract syntax are- -- slightly different when the internal term comes from an- -- unquote. } deriving (Typeable) @@ -1676,6 +1841,7 @@ , envMutualBlock = Nothing , envTerminationCheck = TerminationCheck , envSolvingConstraints = False+ , envCheckingWhere = False , envActiveProblems = [0] , envAssignMetas = True , envAbstractMode = ConcreteMode@@ -1688,7 +1854,6 @@ -- can only look into abstract things in an abstract -- definition (which sets 'AbstractMode'). , envRelevance = Relevant- , envColors = [] , envDisplayFormsEnabled = True , envReifyInteractionPoints = True , envEtaContractImplicit = True@@ -1706,9 +1871,11 @@ , envCompareBlocked = False , envPrintDomainFreePi = False , envInsideDotPattern = False- , envReifyUnquoted = False } +disableDestructiveUpdate :: TCM a -> TCM a+disableDestructiveUpdate = local $ \e -> e { envAllowDestructiveUpdate = False }+ --------------------------------------------------------------------------- -- ** Context ---------------------------------------------------------------------------@@ -1748,11 +1915,21 @@ | DontExpandLast -- ^ Do not append implicit arguments. deriving (Eq) -data ExpandInstances- = ExpandInstanceArguments- | DontExpandInstanceArguments- deriving (Eq)+data ExplicitToInstance+ = ExplicitToInstance -- ^ Explicit arguments are considered as instance arguments+ | ExplicitStayExplicit+ deriving (Eq, Show) +-- | A candidate solution for an instance meta is a term with its type.+-- It may be the case that the candidate is not fully applied yet or+-- of the wrong type, hence the need for the type.+data Candidate = Candidate { candidateTerm :: Term+ , candidateType :: Type+ , candidateEti :: ExplicitToInstance+ }+ deriving (Show)++ --------------------------------------------------------------------------- -- * Type checking errors ---------------------------------------------------------------------------@@ -1836,13 +2013,11 @@ strMsg = GenericSplitError data UnquoteError- = BadVisibility String (I.Arg I.Term)+ = BadVisibility String (Arg I.Term) | ConInsteadOfDef QName String String | DefInsteadOfCon QName String String- | NotAConstructor String I.Term -- ^ @NotAConstructor kind term@- | NotALiteral String I.Term- | RhsUsesDottedVar [Int] I.Term- | BlockedOnMeta MetaId+ | NonCanonical String I.Term+ | BlockedOnMeta TCState MetaId | UnquotePanic String deriving (Show) @@ -1890,22 +2065,22 @@ -- ^ Expected a non-hidden function and found a hidden lambda. | WrongHidingInApplication Type -- ^ A function is applied to a hidden argument where a non-hidden was expected.- | WrongNamedArgument (I.NamedArg A.Expr)+ | WrongNamedArgument (NamedArg A.Expr) -- ^ A function is applied to a hidden named argument it does not have. | WrongIrrelevanceInLambda Type -- ^ Expected a relevant function and found an irrelevant lambda.+ | WrongInstanceDeclaration+ -- ^ A term is declared as an instance but it’s not allowed | HidingMismatch Hiding Hiding -- ^ The given hiding does not correspond to the expected hiding. | RelevanceMismatch Relevance Relevance -- ^ The given relevance does not correspond to the expected relevane.- | ColorMismatch [Color] [Color]- -- ^ The given color does not correspond to the expected color. | NotInductive Term -- ^ The term does not correspond to an inductive data type. | UninstantiatedDotPattern A.Expr | IlltypedPattern A.Pattern Type | IllformedProjectionPattern A.Pattern- | CannotEliminateWithPattern (A.NamedArg A.Pattern) Type+ | CannotEliminateWithPattern (NamedArg A.Pattern) Type | TooManyArgumentsInLHS Type | WrongNumberOfConstructorArguments QName Nat Nat | ShouldBeEmpty Type [Pattern]@@ -1915,7 +2090,7 @@ -- ^ The given type should have been a pi. | ShouldBeRecordType Type | ShouldBeRecordPattern Pattern- | NotAProjectionPattern (A.NamedArg A.Pattern)+ | NotAProjectionPattern (NamedArg A.Pattern) | NotAProperTerm | SetOmegaNotValidType | InvalidTypeSort Sort@@ -1936,8 +2111,6 @@ -- ^ The two function types have different relevance. | UnequalHiding Term Term -- ^ The two function types have different hiding.- | UnequalColors Term Term- -- ^ The two function types have different color. | UnequalSorts Sort Sort | UnequalBecauseOfUniverseConflict Comparison Term Term | HeterogeneousEquality Term Type Term Type@@ -1973,12 +2146,18 @@ -- TODO: Remove some of the constructors in this section, now that -- the SplitError constructor has been added? | IncompletePatternMatching Term [Elim] -- can only happen if coverage checking is switched off- | CoverageFailure QName [[Arg Pattern]]- | UnreachableClauses QName [[Arg Pattern]]+ | CoverageFailure QName [[Arg DeBruijnPattern]]+ | UnreachableClauses QName [[Arg DeBruijnPattern]] | CoverageCantSplitOn QName Telescope Args Args | CoverageCantSplitIrrelevantType Type | CoverageCantSplitType Type+ | CoverageNoExactSplit QName Clause | WithoutKError Type Term Term+ | UnifyConflict ConHead ConHead+ | UnifyCycle Int Term+ | UnifyIndicesNotVars Type Term Term Args+ | UnificationRecursiveEq Type Int Term+ | UnificationStuck Telescope [Term] [Term] | SplitError SplitError -- Positivity errors | NotStrictlyPositive QName [Occ]@@ -2033,6 +2212,8 @@ | AmbiguousParseForApplication [C.Expr] [C.Expr] | NoParseForLHS LHSOrPatSyn C.Pattern | AmbiguousParseForLHS LHSOrPatSyn C.Pattern [C.Pattern]+ | OperatorInformation [NotationSection] TypeError+ | OperatorChangeMessage TypeError {- UNUSED | NoParseForPatternSynonym C.Pattern | AmbiguousParseForPatternSynonym C.Pattern [C.Pattern]@@ -2045,10 +2226,10 @@ -- Safe flag errors | SafeFlagPostulate C.Name | SafeFlagPragma [String]- | SafeFlagNoTerminationCheck | SafeFlagNonTerminating | SafeFlagTerminating | SafeFlagPrimTrustMe+ | SafeFlagNoPositivityCheck -- Language option errors | NeedOptionCopatterns | NeedOptionRewriting@@ -2091,7 +2272,7 @@ getRange PatternErr{} = noRange {- getRange (AbortAssign s) = noRange -- UNUSED -} -instance Exception TCErr+instance E.Exception TCErr ----------------------------------------------------------------------------- -- * The reduce monad@@ -2113,24 +2294,38 @@ -> ReduceEnv mapRedEnvSt f g (ReduceEnv e s) = ReduceEnv (f e) (g s) -newtype ReduceM a = ReduceM { unReduceM :: Reader ReduceEnv a }- deriving (Functor, Applicative, Monad)+newtype ReduceM a = ReduceM { unReduceM :: ReduceEnv -> a }+-- deriving (Functor, Applicative, Monad) +instance Functor ReduceM where+ fmap f (ReduceM m) = ReduceM $ \ e -> f $! m e++instance Applicative ReduceM where+ pure x = ReduceM (const x)+ ReduceM f <*> ReduceM x = ReduceM $ \ e -> f e $! x e++instance Monad ReduceM where+ return = pure+ ReduceM m >>= f = ReduceM $ \ e -> unReduceM (f $! m e) e++instance ReadTCState ReduceM where+ getTCState = ReduceM redSt+ runReduceM :: ReduceM a -> TCM a runReduceM m = do e <- ask s <- get- return $ runReader (unReduceM m) (ReduceEnv e s)+ return $! unReduceM m (ReduceEnv e s) runReduceF :: (a -> ReduceM b) -> TCM (a -> b) runReduceF f = do e <- ask s <- get- return $ \x -> runReader (unReduceM (f x)) (ReduceEnv e s)+ return $ \x -> unReduceM (f x) (ReduceEnv e s) instance MonadReader TCEnv ReduceM where- ask = redEnv <$> ReduceM ask- local f = ReduceM . local (mapRedEnv f) . unReduceM+ ask = ReduceM redEnv+ local f (ReduceM m) = ReduceM (m . mapRedEnv f) --------------------------------------------------------------------------- -- * Type checking monad transformer@@ -2156,8 +2351,11 @@ ) => MonadTCM tcm where liftTCM :: TCM a -> tcm a +instance MonadIO m => ReadTCState (TCMT m) where+ getTCState = get+ instance MonadError TCErr (TCMT IO) where- throwError = liftIO . throwIO+ throwError = liftIO . E.throwIO catchError m h = TCM $ \r e -> do oldState <- liftIO (readIORef r) unTCM m r e `E.catch` \err -> do@@ -2179,7 +2377,7 @@ runIM = mapTCMT (Haskeline.runInputT Haskeline.defaultSettings) instance MonadError TCErr IM where- throwError = liftIO . throwIO+ throwError = liftIO . E.throwIO catchError m h = mapTCMT liftIO $ runIM m `catchError` (runIM . h) -- | Preserve the state of the failing computation.@@ -2217,7 +2415,13 @@ instance MonadTCM tcm => MonadTCM (ListT tcm) where liftTCM = lift . liftTCM -instance (Error err, MonadTCM tcm) => MonadTCM (ExceptT err tcm) where+instance+#if !MIN_VERSION_transformers(0,4,1)+ (Error err, MonadTCM tcm)+#else+ MonadTCM tcm+#endif+ => MonadTCM (ExceptT err tcm) where liftTCM = lift . liftTCM instance (Monoid w, MonadTCM tcm) => MonadTCM (WriterT w tcm) where@@ -2238,9 +2442,9 @@ -- We want a special monad implementation of fail. instance MonadIO m => Monad (TCMT m) where- return = returnTCMT+ return = pure (>>=) = bindTCMT- (>>) = thenTCMT+ (>>) = (*>) fail = internalError -- One goal of the definitions and pragmas below is to inline the@@ -2290,8 +2494,8 @@ wrap r m = failOnException handleException $ E.catch m (handleIOException r) - handleIOException r e = throwIO $ IOException r e- handleException r s = throwIO $ Exception r s+ handleIOException r e = E.throwIO $ IOException r e+ handleException r s = E.throwIO $ Exception r s -- | We store benchmark statistics in an IORef. -- This enables benchmarking pure computation, see@@ -2410,12 +2614,15 @@ killRange (Section tel) = killRange1 Section tel instance KillRange Definition where- killRange (Defn ai name t pols occs displ mut compiled inst def) =- killRange10 Defn ai name t pols occs displ mut compiled inst def+ killRange (Defn ai name t pols occs displ mut compiled inst copy def) =+ killRange11 Defn ai name t pols occs displ mut compiled inst copy def -- TODO clarify: Keep the range in the defName field? +instance KillRange CtxId where+ killRange (CtxId x) = killRange1 CtxId x+ instance KillRange NLPat where- killRange (PVar x) = killRange1 PVar x+ killRange (PVar x y) = killRange1 PVar x y killRange (PWild) = PWild killRange (PDef x y) = killRange2 PDef x y killRange (PLam x y) = killRange2 PLam x y@@ -2430,6 +2637,10 @@ instance KillRange CompiledRepresentation where killRange = id ++instance KillRange EtaEquality where+ killRange = id+ instance KillRange ExtLamInfo where killRange = id @@ -2437,8 +2648,8 @@ killRange def = case def of Axiom -> Axiom- Function cls comp inv mut isAbs delayed proj static copy term extlam with cop ->- killRange13 Function cls comp inv mut isAbs delayed proj static copy term extlam with cop+ Function cls comp tt inv mut isAbs delayed proj static inline smash term extlam with cop ->+ killRange15 Function cls comp tt inv mut isAbs delayed proj static inline smash term extlam with cop Datatype a b c d e f g h i j -> killRange10 Datatype a b c d e f g h i j Record a b c d e f g h i j k l -> killRange12 Record a b c d e f g h i j k l Constructor a b c d e -> killRange5 Constructor a b c d e
src/full/Agda/TypeChecking/Monad/Benchmark.hs view
@@ -1,43 +1,27 @@-{-# LANGUAGE CPP #-}--#if __GLASGOW_HASKELL__ <= 708-{-# LANGUAGE OverlappingInstances #-}-#endif- -- | Measure CPU time for individual phases of the Agda pipeline. module Agda.TypeChecking.Monad.Benchmark ( module Agda.Benchmarking- , MonadBench- , getBenchmark+ , B.MonadBench+ , B.getBenchmark , updateBenchmarkingStatus- , billTo, billPureTo+ , B.billTo, B.billPureTo+ , B.reset , print ) where import Prelude hiding (print) -import qualified Control.Exception as E (evaluate)-import Control.Monad.State--import Data.List--import qualified Text.PrettyPrint.Boxes as Boxes- import Agda.Benchmarking import Agda.TypeChecking.Monad.Base import{-# SOURCE #-} Agda.TypeChecking.Monad.Options -import Agda.Utils.Benchmark (MonadBench(..), billTo, billPureTo) import qualified Agda.Utils.Benchmark as B import Agda.Utils.Monad import Agda.Utils.Pretty (prettyShow) -#include "undefined.h"-import Agda.Utils.Impossible- benchmarkKey :: String benchmarkKey = "profile" @@ -60,7 +44,7 @@ -- profiling is not activated at level 7. print :: MonadTCM tcm => tcm () print = liftTCM $ whenM benchmarking $ do- b <- getBenchmark+ b <- B.getBenchmark reportSLn benchmarkKey benchmarkLevel $ prettyShow b -- -- | Bill a computation to a specific account.
src/full/Agda/TypeChecking/Monad/Builtin.hs view
@@ -5,17 +5,16 @@ import Control.Applicative import Control.Monad.State -import Data.Functor import qualified Data.Map as Map import Agda.Syntax.Common import Agda.Syntax.Position import Agda.Syntax.Literal-import Agda.Syntax.Internal+import Agda.Syntax.Internal as I import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Substitute -import Agda.Utils.Except ( Error, MonadError(catchError) )+import Agda.Utils.Except ( MonadError(catchError) ) import Agda.Utils.Lens import Agda.Utils.Monad (when_) import Agda.Utils.Maybe@@ -29,7 +28,7 @@ litType :: Literal -> TCM Type litType l = case l of- LitInt _ n -> do+ LitNat _ n -> do _ <- primZero when_ (n > 0) $ primSuc el <$> primNat@@ -37,6 +36,7 @@ LitChar _ _ -> el <$> primChar LitString _ _ -> el <$> primString LitQName _ _ -> el <$> primQName+ LitMeta _ _ _ -> el <$> primAgdaMeta where el t = El (mkType 0) t @@ -67,8 +67,8 @@ getBuiltin' :: HasBuiltins m => String -> m (Maybe Term) getBuiltin' x = do builtin <- getBuiltinThing x- case builtin of- Just (Builtin t) -> return $ Just (killRange t)+ case builtin of -- ignore sharing to make sure zero isn't reduced to Lit 0+ Just (Builtin t) -> return $ Just $ ignoreSharing $ killRange t _ -> return Nothing getPrimitive' :: HasBuiltins m => String -> m (Maybe PrimFun)@@ -88,9 +88,9 @@ constructorForm' :: Applicative m => m Term -> m Term -> Term -> m Term constructorForm' pZero pSuc v = case ignoreSharing v of- Lit (LitInt r n)+ Lit (LitNat r n) | n == 0 -> pZero- | n > 0 -> (`apply` [defaultArg $ Lit $ LitInt r $ n - 1]) <$> pSuc+ | n > 0 -> (`apply1` Lit (LitNat r $ n - 1)) <$> pSuc | otherwise -> pure v _ -> pure v @@ -98,7 +98,8 @@ -- * The names of built-in things --------------------------------------------------------------------------- -primInteger, primFloat, primChar, primString, primBool, primTrue, primFalse,+primInteger, primIntegerPos, primIntegerNegSuc,+ primFloat, primChar, primString, primUnit, primUnitUnit, primBool, primTrue, primFalse, primList, primNil, primCons, primIO, primNat, primSuc, primZero, primNatPlus, primNatMinus, primNatTimes, primNatDivSucAux, primNatModSucAux, primNatEquality, primNatLess,@@ -107,29 +108,41 @@ primEquality, primRefl, primRewrite, -- Name of rewrite relation primLevel, primLevelZero, primLevelSuc, primLevelMax,- primIrrAxiom,+ primFromNat, primFromNeg, primFromString, -- builtins for reflection:- primQName, primArgInfo, primArgArgInfo, primArg, primArgArg, primAgdaTerm, primAgdaTermVar,+ primQName, primArgInfo, primArgArgInfo, primArg, primArgArg, primAbs, primAbsAbs, primAgdaTerm, primAgdaTermVar, primAgdaTermLam, primAgdaTermExtLam, primAgdaTermDef, primAgdaTermCon, primAgdaTermPi,- primAgdaTermSort, primAgdaTermLit, primAgdaTermUnsupported,- primAgdaType, primAgdaTypeEl,+ primAgdaTermSort, primAgdaTermLit, primAgdaTermUnsupported, primAgdaTermMeta,+ primAgdaErrorPart, primAgdaErrorPartString, primAgdaErrorPartTerm, primAgdaErrorPartName, primHiding, primHidden, primInstance, primVisible, primRelevance, primRelevant, primIrrelevant,- primAgdaLiteral, primAgdaLitNat, primAgdaLitFloat, primAgdaLitString, primAgdaLitChar, primAgdaLitQName,+ primAgdaLiteral, primAgdaLitNat, primAgdaLitFloat, primAgdaLitString, primAgdaLitChar, primAgdaLitQName, primAgdaLitMeta, primAgdaSort, primAgdaSortSet, primAgdaSortLit, primAgdaSortUnsupported, primAgdaDefinition, primAgdaDefinitionFunDef, primAgdaDefinitionDataDef, primAgdaDefinitionRecordDef, primAgdaDefinitionPostulate, primAgdaDefinitionPrimitive, primAgdaDefinitionDataConstructor,- primAgdaFunDef, primAgdaFunDefCon, primAgdaClause, primAgdaClauseClause, primAgdaClauseAbsurd,+ primAgdaClause, primAgdaClauseClause, primAgdaClauseAbsurd, primAgdaPattern, primAgdaPatCon, primAgdaPatVar, primAgdaPatDot,- primAgdaDataDef, primAgdaRecordDef, primAgdaPatLit, primAgdaPatProj,- primAgdaPatAbsurd+ primAgdaPatLit, primAgdaPatProj,+ primAgdaPatAbsurd,+ primAgdaMeta,+ primAgdaTCM, primAgdaTCMReturn, primAgdaTCMBind, primAgdaTCMUnify,+ primAgdaTCMTypeError, primAgdaTCMInferType, primAgdaTCMCheckType,+ primAgdaTCMNormalise, primAgdaTCMCatchError, primAgdaTCMGetContext, primAgdaTCMExtendContext, primAgdaTCMInContext,+ primAgdaTCMFreshName, primAgdaTCMDeclareDef, primAgdaTCMDefineFun,+ primAgdaTCMGetType, primAgdaTCMGetDefinition,+ primAgdaTCMQuoteTerm, primAgdaTCMUnquoteTerm,+ primAgdaTCMBlockOnMeta, primAgdaTCMCommit :: TCM Term primInteger = getBuiltin builtinInteger+primIntegerPos = getBuiltin builtinIntegerPos+primIntegerNegSuc = getBuiltin builtinIntegerNegSuc primFloat = getBuiltin builtinFloat primChar = getBuiltin builtinChar primString = getBuiltin builtinString primBool = getBuiltin builtinBool+primUnit = getBuiltin builtinUnit+primUnitUnit = getBuiltin builtinUnitUnit primTrue = getBuiltin builtinTrue primFalse = getBuiltin builtinFalse primList = getBuiltin builtinList@@ -162,13 +175,15 @@ primLevelZero = getBuiltin builtinLevelZero primLevelSuc = getBuiltin builtinLevelSuc primLevelMax = getBuiltin builtinLevelMax-primIrrAxiom = getBuiltin builtinIrrAxiom+primFromNat = getBuiltin builtinFromNat+primFromNeg = getBuiltin builtinFromNeg+primFromString = getBuiltin builtinFromString primQName = getBuiltin builtinQName primArg = getBuiltin builtinArg primArgArg = getBuiltin builtinArgArg+primAbs = getBuiltin builtinAbs+primAbsAbs = getBuiltin builtinAbsAbs primAgdaSort = getBuiltin builtinAgdaSort-primAgdaType = getBuiltin builtinAgdaType-primAgdaTypeEl = getBuiltin builtinAgdaTypeEl primHiding = getBuiltin builtinHiding primHidden = getBuiltin builtinHidden primInstance = getBuiltin builtinInstance@@ -191,16 +206,18 @@ primAgdaTermSort = getBuiltin builtinAgdaTermSort primAgdaTermLit = getBuiltin builtinAgdaTermLit primAgdaTermUnsupported = getBuiltin builtinAgdaTermUnsupported+primAgdaTermMeta = getBuiltin builtinAgdaTermMeta+primAgdaErrorPart = getBuiltin builtinAgdaErrorPart+primAgdaErrorPartString = getBuiltin builtinAgdaErrorPartString+primAgdaErrorPartTerm = getBuiltin builtinAgdaErrorPartTerm+primAgdaErrorPartName = getBuiltin builtinAgdaErrorPartName primAgdaLiteral = getBuiltin builtinAgdaLiteral primAgdaLitNat = getBuiltin builtinAgdaLitNat primAgdaLitFloat = getBuiltin builtinAgdaLitFloat primAgdaLitChar = getBuiltin builtinAgdaLitChar primAgdaLitString = getBuiltin builtinAgdaLitString primAgdaLitQName = getBuiltin builtinAgdaLitQName-primAgdaFunDef = getBuiltin builtinAgdaFunDef-primAgdaFunDefCon = getBuiltin builtinAgdaFunDefCon-primAgdaDataDef = getBuiltin builtinAgdaDataDef-primAgdaRecordDef = getBuiltin builtinAgdaRecordDef+primAgdaLitMeta = getBuiltin builtinAgdaLitMeta primAgdaPattern = getBuiltin builtinAgdaPattern primAgdaPatCon = getBuiltin builtinAgdaPatCon primAgdaPatVar = getBuiltin builtinAgdaPatVar@@ -218,35 +235,69 @@ primAgdaDefinitionPostulate = getBuiltin builtinAgdaDefinitionPostulate primAgdaDefinitionPrimitive = getBuiltin builtinAgdaDefinitionPrimitive primAgdaDefinition = getBuiltin builtinAgdaDefinition+primAgdaMeta = getBuiltin builtinAgdaMeta+primAgdaTCM = getBuiltin builtinAgdaTCM+primAgdaTCMReturn = getBuiltin builtinAgdaTCMReturn+primAgdaTCMBind = getBuiltin builtinAgdaTCMBind+primAgdaTCMUnify = getBuiltin builtinAgdaTCMUnify+primAgdaTCMTypeError = getBuiltin builtinAgdaTCMTypeError+primAgdaTCMInferType = getBuiltin builtinAgdaTCMInferType+primAgdaTCMCheckType = getBuiltin builtinAgdaTCMCheckType+primAgdaTCMNormalise = getBuiltin builtinAgdaTCMNormalise+primAgdaTCMCatchError = getBuiltin builtinAgdaTCMCatchError+primAgdaTCMGetContext = getBuiltin builtinAgdaTCMGetContext+primAgdaTCMExtendContext = getBuiltin builtinAgdaTCMExtendContext+primAgdaTCMInContext = getBuiltin builtinAgdaTCMInContext+primAgdaTCMFreshName = getBuiltin builtinAgdaTCMFreshName+primAgdaTCMDeclareDef = getBuiltin builtinAgdaTCMDeclareDef+primAgdaTCMDefineFun = getBuiltin builtinAgdaTCMDefineFun+primAgdaTCMGetType = getBuiltin builtinAgdaTCMGetType+primAgdaTCMGetDefinition = getBuiltin builtinAgdaTCMGetDefinition+primAgdaTCMQuoteTerm = getBuiltin builtinAgdaTCMQuoteTerm+primAgdaTCMUnquoteTerm = getBuiltin builtinAgdaTCMUnquoteTerm+primAgdaTCMBlockOnMeta = getBuiltin builtinAgdaTCMBlockOnMeta+primAgdaTCMCommit = getBuiltin builtinAgdaTCMCommit builtinNat, builtinSuc, builtinZero, builtinNatPlus, builtinNatMinus, builtinNatTimes, builtinNatDivSucAux, builtinNatModSucAux, builtinNatEquals,- builtinNatLess, builtinInteger, builtinFloat, builtinChar, builtinString,+ builtinNatLess, builtinInteger, builtinIntegerPos, builtinIntegerNegSuc,+ builtinFloat, builtinChar, builtinString, builtinUnit, builtinUnitUnit, builtinBool, builtinTrue, builtinFalse, builtinList, builtinNil, builtinCons, builtinIO, builtinSizeUniv, builtinSize, builtinSizeLt, builtinSizeSuc, builtinSizeInf, builtinSizeMax, builtinInf, builtinSharp, builtinFlat, builtinEquality, builtinRefl, builtinRewrite, builtinLevelMax,- builtinLevel, builtinLevelZero, builtinLevelSuc, builtinIrrAxiom,+ builtinLevel, builtinLevelZero, builtinLevelSuc,+ builtinFromNat, builtinFromNeg, builtinFromString, builtinQName, builtinAgdaSort, builtinAgdaSortSet, builtinAgdaSortLit,- builtinAgdaSortUnsupported, builtinAgdaType, builtinAgdaTypeEl,+ builtinAgdaSortUnsupported, builtinHiding, builtinHidden, builtinInstance, builtinVisible, builtinRelevance, builtinRelevant, builtinIrrelevant, builtinArg,- builtinArgInfo, builtinArgArgInfo, builtinArgArg, builtinAgdaTerm,+ builtinArgInfo, builtinArgArgInfo, builtinArgArg,+ builtinAbs, builtinAbsAbs, builtinAgdaTerm, builtinAgdaTermVar, builtinAgdaTermLam, builtinAgdaTermExtLam, builtinAgdaTermDef, builtinAgdaTermCon, builtinAgdaTermPi,- builtinAgdaTermSort, builtinAgdaTermLit, builtinAgdaTermUnsupported,+ builtinAgdaTermSort, builtinAgdaTermLit, builtinAgdaTermUnsupported, builtinAgdaTermMeta,+ builtinAgdaErrorPart, builtinAgdaErrorPartString, builtinAgdaErrorPartTerm, builtinAgdaErrorPartName, builtinAgdaLiteral, builtinAgdaLitNat, builtinAgdaLitFloat,- builtinAgdaLitChar, builtinAgdaLitString, builtinAgdaLitQName,- builtinAgdaFunDef, builtinAgdaFunDefCon, builtinAgdaClause,- builtinAgdaClauseClause, builtinAgdaClauseAbsurd, builtinAgdaPattern,+ builtinAgdaLitChar, builtinAgdaLitString, builtinAgdaLitQName, builtinAgdaLitMeta,+ builtinAgdaClause, builtinAgdaClauseClause, builtinAgdaClauseAbsurd, builtinAgdaPattern, builtinAgdaPatVar, builtinAgdaPatCon, builtinAgdaPatDot, builtinAgdaPatLit,- builtinAgdaPatProj, builtinAgdaPatAbsurd, builtinAgdaDataDef,- builtinAgdaRecordDef, builtinAgdaDefinitionFunDef,+ builtinAgdaPatProj, builtinAgdaPatAbsurd,+ builtinAgdaDefinitionFunDef, builtinAgdaDefinitionDataDef, builtinAgdaDefinitionRecordDef, builtinAgdaDefinitionDataConstructor, builtinAgdaDefinitionPostulate,- builtinAgdaDefinitionPrimitive, builtinAgdaDefinition+ builtinAgdaDefinitionPrimitive, builtinAgdaDefinition,+ builtinAgdaMeta,+ builtinAgdaTCM, builtinAgdaTCMReturn, builtinAgdaTCMBind, builtinAgdaTCMUnify,+ builtinAgdaTCMTypeError, builtinAgdaTCMInferType,+ builtinAgdaTCMCheckType, builtinAgdaTCMNormalise, builtinAgdaTCMCatchError,+ builtinAgdaTCMGetContext, builtinAgdaTCMExtendContext, builtinAgdaTCMInContext,+ builtinAgdaTCMFreshName, builtinAgdaTCMDeclareDef, builtinAgdaTCMDefineFun,+ builtinAgdaTCMGetType, builtinAgdaTCMGetDefinition,+ builtinAgdaTCMQuoteTerm, builtinAgdaTCMUnquoteTerm,+ builtinAgdaTCMBlockOnMeta, builtinAgdaTCMCommit :: String builtinNat = "NATURAL"@@ -260,9 +311,13 @@ builtinNatEquals = "NATEQUALS" builtinNatLess = "NATLESS" builtinInteger = "INTEGER"+builtinIntegerPos = "INTEGERPOS"+builtinIntegerNegSuc = "INTEGERNEGSUC" builtinFloat = "FLOAT" builtinChar = "CHAR" builtinString = "STRING"+builtinUnit = "UNIT"+builtinUnitUnit = "UNITUNIT" builtinBool = "BOOL" builtinTrue = "TRUE" builtinFalse = "FALSE"@@ -286,14 +341,14 @@ builtinLevel = "LEVEL" builtinLevelZero = "LEVELZERO" builtinLevelSuc = "LEVELSUC"-builtinIrrAxiom = "IRRAXIOM"+builtinFromNat = "FROMNAT"+builtinFromNeg = "FROMNEG"+builtinFromString = "FROMSTRING" builtinQName = "QNAME" builtinAgdaSort = "AGDASORT" builtinAgdaSortSet = "AGDASORTSET" builtinAgdaSortLit = "AGDASORTLIT" builtinAgdaSortUnsupported = "AGDASORTUNSUPPORTED"-builtinAgdaType = "AGDATYPE"-builtinAgdaTypeEl = "AGDATYPEEL" builtinHiding = "HIDING" builtinHidden = "HIDDEN" builtinInstance = "INSTANCE"@@ -305,6 +360,8 @@ builtinArgInfo = "ARGINFO" builtinArgArgInfo = "ARGARGINFO" builtinArgArg = "ARGARG"+builtinAbs = "ABS"+builtinAbsAbs = "ABSABS" builtinAgdaTerm = "AGDATERM" builtinAgdaTermVar = "AGDATERMVAR" builtinAgdaTermLam = "AGDATERMLAM"@@ -315,14 +372,18 @@ builtinAgdaTermSort = "AGDATERMSORT" builtinAgdaTermLit = "AGDATERMLIT" builtinAgdaTermUnsupported = "AGDATERMUNSUPPORTED"+builtinAgdaTermMeta = "AGDATERMMETA"+builtinAgdaErrorPart = "AGDAERRORPART"+builtinAgdaErrorPartString = "AGDAERRORPARTSTRING"+builtinAgdaErrorPartTerm = "AGDAERRORPARTTERM"+builtinAgdaErrorPartName = "AGDAERRORPARTNAME" builtinAgdaLiteral = "AGDALITERAL" builtinAgdaLitNat = "AGDALITNAT" builtinAgdaLitFloat = "AGDALITFLOAT" builtinAgdaLitChar = "AGDALITCHAR" builtinAgdaLitString = "AGDALITSTRING" builtinAgdaLitQName = "AGDALITQNAME"-builtinAgdaFunDef = "AGDAFUNDEF"-builtinAgdaFunDefCon = "AGDAFUNDEFCON"+builtinAgdaLitMeta = "AGDALITMETA" builtinAgdaClause = "AGDACLAUSE" builtinAgdaClauseClause = "AGDACLAUSECLAUSE" builtinAgdaClauseAbsurd = "AGDACLAUSEABSURD"@@ -333,8 +394,6 @@ builtinAgdaPatLit = "AGDAPATLIT" builtinAgdaPatProj = "AGDAPATPROJ" builtinAgdaPatAbsurd = "AGDAPATABSURD"-builtinAgdaDataDef = "AGDADATADEF"-builtinAgdaRecordDef = "AGDARECORDDEF" builtinAgdaDefinitionFunDef = "AGDADEFINITIONFUNDEF" builtinAgdaDefinitionDataDef = "AGDADEFINITIONDATADEF" builtinAgdaDefinitionRecordDef = "AGDADEFINITIONRECORDDEF"@@ -342,6 +401,28 @@ builtinAgdaDefinitionPostulate = "AGDADEFINITIONPOSTULATE" builtinAgdaDefinitionPrimitive = "AGDADEFINITIONPRIMITIVE" builtinAgdaDefinition = "AGDADEFINITION"+builtinAgdaMeta = "AGDAMETA"+builtinAgdaTCM = "AGDATCM"+builtinAgdaTCMReturn = "AGDATCMRETURN"+builtinAgdaTCMBind = "AGDATCMBIND"+builtinAgdaTCMUnify = "AGDATCMUNIFY"+builtinAgdaTCMTypeError = "AGDATCMTYPEERROR"+builtinAgdaTCMInferType = "AGDATCMINFERTYPE"+builtinAgdaTCMCheckType = "AGDATCMCHECKTYPE"+builtinAgdaTCMNormalise = "AGDATCMNORMALISE"+builtinAgdaTCMCatchError = "AGDATCMCATCHERROR"+builtinAgdaTCMGetContext = "AGDATCMGETCONTEXT"+builtinAgdaTCMExtendContext = "AGDATCMEXTENDCONTEXT"+builtinAgdaTCMInContext = "AGDATCMINCONTEXT"+builtinAgdaTCMFreshName = "AGDATCMFRESHNAME"+builtinAgdaTCMDeclareDef = "AGDATCMDECLAREDEF"+builtinAgdaTCMDefineFun = "AGDATCMDEFINEFUN"+builtinAgdaTCMGetType = "AGDATCMGETTYPE"+builtinAgdaTCMGetDefinition = "AGDATCMGETDEFINITION"+builtinAgdaTCMBlockOnMeta = "AGDATCMBLOCKONMETA"+builtinAgdaTCMCommit = "AGDATCMCOMMIT"+builtinAgdaTCMQuoteTerm = "AGDATCMQUOTETERM"+builtinAgdaTCMUnquoteTerm = "AGDATCMUNQUOTETERM" -- | Builtins that come without a definition in Agda syntax. -- These are giving names to Agda internal concepts which@@ -415,3 +496,24 @@ ([], Def equality _) -> equality _ -> __IMPOSSIBLE__ +-- | Check whether the type is actually an equality (lhs ≡ rhs)+-- and extract lhs, rhs, and their type.+--+-- Precondition: type is reduced.++equalityView :: Type -> TCM EqualityView+equalityView t0@(El s t) = do+ equality <- primEqualityName+ case ignoreSharing t of+ Def equality' [ Apply level , Apply typ , Apply lhs , Apply rhs ]+ | equality' == equality -> return $ EqualityType s equality level typ lhs rhs+ _ -> return $ OtherType t0++-- | Revert the 'EqualityView'.+--+-- Postcondition: type is reduced.++equalityUnview :: EqualityView -> Type+equalityUnview (OtherType t) = t+equalityUnview (EqualityType s equality l t lhs rhs) =+ El s $ Def equality $ map Apply [l, t, lhs, rhs]
+ src/full/Agda/TypeChecking/Monad/Caching.hs view
@@ -0,0 +1,113 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE PatternGuards #-}++module Agda.TypeChecking.Monad.Caching+ ( -- * Log reading/writing operations+ writeToCurrentLog+ , readFromCachedLog+ , cleanCachedLog+ , cacheCurrentLog++ -- * Activating+ , activateLoadedFileCache+ , cachingStarts++ -- * Restoring the 'PostScopeState'+ , restorePostScopeState+ ) where++import Control.Monad.State+import qualified Data.Map as Map++import Agda.Syntax.Common++import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Options++import Agda.Utils.Lens++#include "undefined.h"+import Agda.Utils.Impossible++-- | To be called before any write or restore calls.+cachingStarts :: TCM ()+cachingStarts = do+ NameId _ m <- use stFreshNameId+ stFreshNameId .= NameId 1 m++-- | Writes a 'TypeCheckAction' to the current log, using the current+-- 'PostScopeState'+writeToCurrentLog :: TypeCheckAction -> TCM ()+writeToCurrentLog !d = do+ reportSLn "cache" 10 $ "cachePostScopeState"+ !l <- gets stPostScopeState+ modifyCache $ fmap $ \lfc -> lfc{ lfcCurrent = (d, l) : lfcCurrent lfc}++restorePostScopeState :: PostScopeState -> TCM ()+restorePostScopeState pss = do+ reportSLn "cache" 10 $ "restorePostScopeState"+ modify $ \s ->+ let ipoints = s^.stInteractionPoints+ pss' = pss{stPostInteractionPoints = stPostInteractionPoints pss `mergeIPMap` ipoints}+ in s{stPostScopeState = pss'}+ where+ mergeIPMap lm sm = Map.mapWithKey (\k v -> maybe v (`mergeIP` v) (Map.lookup k lm)) sm+ mergeIP li si = si {ipMeta = ipMeta li}++modifyCache+ :: (Maybe LoadedFileCache -> Maybe LoadedFileCache)+ -> TCM ()+modifyCache f = do+ modify $ \s -> let !p = stPersistentState s in s+ { stPersistentState =+ p { stLoadedFileCache = f (stLoadedFileCache p)}+ }++getCache :: TCM (Maybe LoadedFileCache)+getCache = do+ gets (stLoadedFileCache . stPersistentState)++putCache :: Maybe LoadedFileCache -> TCM ()+putCache cs = modifyCache $ const cs++-- | Reads the next entry in the cached type check log, if present.+readFromCachedLog :: TCM (Maybe (TypeCheckAction, PostScopeState))+readFromCachedLog = do+ reportSLn "cache" 10 $ "getCachedTypeCheckAction"+ mbCache <- getCache+ case mbCache of+ Just lfc | (entry : entries) <- lfcCached lfc -> do+ putCache $ Just lfc{lfcCached = entries}+ return (Just entry)+ _ -> do+ return Nothing++-- | Empties the "to read" CachedState. To be used when it gets invalid.+cleanCachedLog :: TCM ()+cleanCachedLog = do+ reportSLn "cache" 10 $ "cleanCachedLog"+ modifyCache $ fmap $ \lfc -> lfc{lfcCached = []}++-- | Makes sure that the 'stLoadedFileCache' is 'Just', with a clean+-- current log. Crashes is 'stLoadedFileCache' is already active with a+-- dirty log. Should be called when we start typechecking the current+-- file.+activateLoadedFileCache :: TCM ()+activateLoadedFileCache = do+ reportSLn "cache" 10 $ "activateLoadedFileCache"+ b <- enableCaching+ if not b then return ()+ else do+ modifyCache $ \mbLfc -> case mbLfc of+ Nothing -> Just $ LoadedFileCache [] []+ Just lfc | null (lfcCurrent lfc) -> Just lfc+ _ -> __IMPOSSIBLE__++-- | Caches the current type check log. Discardes the old cache. Does+-- nothing if caching is inactive.+cacheCurrentLog :: TCM ()+cacheCurrentLog = do+ reportSLn "cache" 10 $ "cacheCurrentTypeCheckLog"+ modifyCache $ fmap $ \lfc ->+ lfc{lfcCached = reverse (lfcCurrent lfc), lfcCurrent = []}
src/full/Agda/TypeChecking/Monad/Constraints.hs view
@@ -8,7 +8,6 @@ import Control.Monad.Reader import Data.List as List-import Data.Maybe import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.Closure@@ -45,7 +44,7 @@ (reportSLn "tc.constr.solve" 50 $ "problem " ++ show pid ++ " was not solved.") $ {- else -} do reportSLn "tc.constr.solve" 50 $ "problem " ++ show pid ++ " was solved!"- wakeConstraints (blockedOn pid . clValue . theConstraint)+ wakeConstraints (return . blockedOn pid . clValue . theConstraint) return x where blockedOn pid (Guarded _ pid') = pid == pid'@@ -63,14 +62,22 @@ getAwakeConstraints :: TCM Constraints getAwakeConstraints = use stAwakeConstraints -wakeConstraints :: (ProblemConstraint -> Bool) -> TCM ()+wakeConstraints :: (ProblemConstraint-> TCM Bool) -> TCM () wakeConstraints wake = do- (wakeup, sleepin) <- List.partition wake <$> use stSleepingConstraints+ c <- use stSleepingConstraints+ (wakeup, sleepin) <- partitionM wake c reportSLn "tc.constr.wake" 50 $ "waking up " ++ show (List.map constraintProblem wakeup) ++ "\n" ++ " still sleeping: " ++ show (List.map constraintProblem sleepin) modifySleepingConstraints $ const sleepin modifyAwakeConstraints (++ wakeup)++partitionM :: (a -> TCM Bool) -> [a] -> TCM ([a], [a])+partitionM f [] = return ([], [])+partitionM f (x:xs) = do+ b <- f x+ (l, r) <- partitionM f xs+ if b then return (x:l, r) else return (l, x:r) -- danger... dropConstraints :: (ProblemConstraint -> Bool) -> TCM ()
src/full/Agda/TypeChecking/Monad/Context.hs view
@@ -1,6 +1,7 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TupleSections #-} #if __GLASGOW_HASKELL__ <= 708 {-# LANGUAGE OverlappingInstances #-}@@ -8,6 +9,7 @@ module Agda.TypeChecking.Monad.Context where +import Control.Applicative import Control.Monad.Reader import Data.List hiding (sort)@@ -15,8 +17,7 @@ import Data.Monoid import Agda.Syntax.Abstract.Name-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.Syntax.Scope.Monad (getLocalVars, setLocalVars) @@ -24,9 +25,9 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Monad.Open +import Agda.Utils.Except ( MonadError(catchError) ) import Agda.Utils.Functor import Agda.Utils.List ((!!!), downFrom)-import Agda.Utils.Monad -- * Modifying the context @@ -177,8 +178,8 @@ dummyDom = defaultDom typeDontCare -- | Go under an abstraction.-{-# SPECIALIZE underAbstraction :: Subst a => Dom Type -> Abs a -> (a -> TCM b) -> TCM b #-}-underAbstraction :: (Subst a, MonadTCM tcm) => Dom Type -> Abs a -> (a -> tcm b) -> tcm b+{-# SPECIALIZE underAbstraction :: Subst t a => Dom Type -> Abs a -> (a -> TCM b) -> TCM b #-}+underAbstraction :: (Subst t a, MonadTCM tcm) => Dom Type -> Abs a -> (a -> tcm b) -> tcm b underAbstraction _ (NoAbs _ v) k = k v underAbstraction t a k = do x <- freshName_ $ realName $ absName a@@ -187,8 +188,8 @@ realName s = if isNoName s then "x" else argNameToString s -- | Go under an abstract without worrying about the type to add to the context.-{-# SPECIALIZE underAbstraction_ :: Subst a => Abs a -> (a -> TCM b) -> TCM b #-}-underAbstraction_ :: (Subst a, MonadTCM tcm) => Abs a -> (a -> tcm b) -> tcm b+{-# SPECIALIZE underAbstraction_ :: Subst t a => Abs a -> (a -> TCM b) -> TCM b #-}+underAbstraction_ :: (Subst t a, MonadTCM tcm) => Abs a -> (a -> tcm b) -> tcm b underAbstraction_ = underAbstraction dummyDom -- | Add a telescope to the context.@@ -202,7 +203,7 @@ {-# SPECIALIZE addLetBinding :: ArgInfo -> Name -> Term -> Type -> TCM a -> TCM a #-} addLetBinding :: MonadTCM tcm => ArgInfo -> Name -> Term -> Type -> tcm a -> tcm a addLetBinding info x v t0 ret = do- let t = Common.Dom (setHiding NotHidden info) t0+ let t = Dom info t0 vt <- liftTCM $ makeOpen (v, t) flip local ret $ \e -> e { envLetBindings = Map.insert x vt $ envLetBindings e } @@ -211,39 +212,44 @@ -- | Get the current context. {-# SPECIALIZE getContext :: TCM [Dom (Name, Type)] #-}-getContext :: MonadTCM tcm => tcm [Dom (Name, Type)]+getContext :: MonadReader TCEnv m => m [Dom (Name, Type)] getContext = asks $ map ctxEntry . envContext -- | Get the size of the current context. {-# SPECIALIZE getContextSize :: TCM Nat #-}-getContextSize :: MonadTCM tcm => tcm Nat+getContextSize :: (Applicative m, MonadReader TCEnv m) => m Nat getContextSize = genericLength <$> asks envContext -- | Generate @[var (n - 1), ..., var 0]@ for all declarations in the context. {-# SPECIALIZE getContextArgs :: TCM Args #-}-getContextArgs :: MonadTCM tcm => tcm Args+getContextArgs :: (Applicative m, MonadReader TCEnv m) => m Args getContextArgs = reverse . zipWith mkArg [0..] <$> getContext- where mkArg i (Common.Dom info _) = Common.Arg info $ var i+ where mkArg i (Dom info _) = Arg info $ var i -- | Generate @[var (n - 1), ..., var 0]@ for all declarations in the context. {-# SPECIALIZE getContextTerms :: TCM [Term] #-}-getContextTerms :: MonadTCM tcm => tcm [Term]+getContextTerms :: (Applicative m, MonadReader TCEnv m) => m [Term] getContextTerms = map var . downFrom <$> getContextSize -- | Get the current context as a 'Telescope'. {-# SPECIALIZE getContextTelescope :: TCM Telescope #-}-getContextTelescope :: MonadTCM tcm => tcm Telescope+getContextTelescope :: (Applicative m, MonadReader TCEnv m) => m Telescope getContextTelescope = telFromList' nameToArgName . reverse <$> getContext -- | Check if we are in a compatible context, i.e. an extension of the given context. {-# SPECIALIZE getContextId :: TCM [CtxId] #-}-getContextId :: MonadTCM tcm => tcm [CtxId]+getContextId :: MonadReader TCEnv m => m [CtxId] getContextId = asks $ map ctxId . envContext +-- | Get the names of all declarations in the context.+{-# SPECIALIZE getContextNames :: TCM [Name] #-}+getContextNames :: (Applicative m, MonadReader TCEnv m) => m [Name]+getContextNames = map (fst . unDom) <$> getContext+ -- | get type of bound variable (i.e. deBruijn index) -- {-# SPECIALIZE lookupBV :: Nat -> TCM (Dom (Name, Type)) #-}-lookupBV :: MonadTCM tcm => Nat -> tcm (Dom (Name, Type))+lookupBV :: MonadReader TCEnv m => Nat -> m (Dom (Name, Type)) lookupBV n = do ctx <- getContext let failure = fail $ "deBruijn index out of scope: " ++ show n ++@@ -251,22 +257,28 @@ maybe failure (return . fmap (raise $ n + 1)) $ ctx !!! n {-# SPECIALIZE typeOfBV' :: Nat -> TCM (Dom Type) #-}-typeOfBV' :: MonadTCM tcm => Nat -> tcm (Dom Type)+typeOfBV' :: (Applicative m, MonadReader TCEnv m) => Nat -> m (Dom Type) typeOfBV' n = fmap snd <$> lookupBV n {-# SPECIALIZE typeOfBV :: Nat -> TCM Type #-}-typeOfBV :: MonadTCM tcm => Nat -> tcm Type+typeOfBV :: (Applicative m, MonadReader TCEnv m) => Nat -> m Type typeOfBV i = unDom <$> typeOfBV' i {-# SPECIALIZE nameOfBV :: Nat -> TCM Name #-}-nameOfBV :: MonadTCM tcm => Nat -> tcm Name+nameOfBV :: (Applicative m, MonadReader TCEnv m) => Nat -> m Name nameOfBV n = fst . unDom <$> lookupBV n -- | Get the term corresponding to a named variable. If it is a lambda bound -- variable the deBruijn index is returned and if it is a let bound variable -- its definition is returned. {-# SPECIALIZE getVarInfo :: Name -> TCM (Term, Dom Type) #-}-getVarInfo :: MonadTCM tcm => Name -> tcm (Term, Dom Type)+getVarInfo+#if __GLASGOW_HASKELL__ <= 708+ :: (Applicative m, MonadReader TCEnv m)+#else+ :: MonadReader TCEnv m+#endif+ => Name -> m (Term, Dom Type) getVarInfo x = do ctx <- getContext def <- asks envLetBindings@@ -276,5 +288,5 @@ return (var n, t) _ -> case Map.lookup x def of- Just vt -> liftTCM $ getOpen vt+ Just vt -> getOpen vt _ -> fail $ "unbound variable " ++ show (nameConcrete x)
src/full/Agda/TypeChecking/Monad/Context.hs-boot view
@@ -1,8 +1,12 @@+{-# LANGUAGE FlexibleContexts #-} module Agda.TypeChecking.Monad.Context where +import Control.Monad.Reader++import Agda.Syntax.Common (Dom) import Agda.Syntax.Internal import Agda.TypeChecking.Monad.Base -getContext :: MonadTCM tcm => tcm [Dom (Name, Type)]-getContextId :: MonadTCM tcm => tcm [CtxId]+getContext :: MonadReader TCEnv m => m [Dom (Name, Type)]+getContextId :: MonadReader TCEnv m => m [CtxId]
src/full/Agda/TypeChecking/Monad/Env.hs view
@@ -12,7 +12,9 @@ import Agda.TypeChecking.Monad.Base -- | Get the name of the current module, if any.-currentModule :: TCM ModuleName+{-# SPECIALIZE currentModule :: TCM ModuleName #-}+{-# SPECIALIZE currentModule :: ReduceM ModuleName #-}+currentModule :: MonadReader TCEnv m => m ModuleName currentModule = asks envCurrentModule -- | Set the name of the current module.@@ -21,7 +23,9 @@ local $ \e -> e { envCurrentModule = m } -- | Get the number of variables bound by anonymous modules.-getAnonymousVariables :: ModuleName -> TCM Nat+{-# SPECIALIZE getAnonymousVariables :: ModuleName -> TCM Nat #-}+{-# SPECIALIZE getAnonymousVariables :: ModuleName -> ReduceM Nat #-}+getAnonymousVariables :: MonadReader TCEnv m => ModuleName -> m Nat getAnonymousVariables m = do ms <- asks envAnonymousModules return $ sum [ n | (m', n) <- ms, mnameToList m' `isPrefixOf` mnameToList m ]@@ -100,10 +104,3 @@ isInsideDotPattern :: TCM Bool isInsideDotPattern = asks envInsideDotPattern--isReifyingUnquoted :: TCM Bool-isReifyingUnquoted = asks envReifyUnquoted--nowReifyingUnquoted :: TCM a -> TCM a-nowReifyingUnquoted = local $ \e -> e { envReifyUnquoted = True }-
src/full/Agda/TypeChecking/Monad/Exception.hs view
@@ -1,7 +1,8 @@-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE UndecidableInstances #-} -- | Basically a copy of the ErrorT monad transformer. It's handy to slap -- onto TCM and still be a MonadTCM (which isn't possible with ErrorT).@@ -26,8 +27,14 @@ throwException :: err -> m a catchException :: m a -> (err -> m a) -> m a -instance (Monad m, Error err) => Monad (ExceptionT err m) where- return = ExceptionT . return . Right+instance+#if __GLASGOW_HASKELL__ <= 708+ (Applicative m, Monad m, Error err)+#else+ (Monad m, Error err)+#endif+ => Monad (ExceptionT err m) where+ return = pure ExceptionT m >>= k = ExceptionT $ do r <- m case r of@@ -53,29 +60,58 @@ catchException m h = WriterT $ catchException (runWriterT m) (\ err -> runWriterT $ h err) +instance (Monad m, MonadException err m) => MonadException err (StateT s m) where+ throwException = lift . throwException+ catchException m h = StateT $ \ s ->+ catchException (runStateT m s) (\ err -> runStateT (h err) s)+ instance MonadTrans (ExceptionT err) where lift = ExceptionT . liftM Right instance Functor f => Functor (ExceptionT err f) where- fmap f = ExceptionT . fmap (either Left (Right . f)) . runExceptionT+ fmap f = ExceptionT . fmap (fmap f) . runExceptionT instance (Error err, Applicative m, Monad m) => Applicative (ExceptionT err m) where- pure = return+ pure = ExceptionT . return . Right (<*>) = ap -instance (Error err, MonadState s m) => MonadState s (ExceptionT err m) where+instance+#if __GLASGOW_HASKELL__ <= 708+ (Error err, Applicative m, MonadState s m)+#else+ (Error err, MonadState s m)+#endif+ => MonadState s (ExceptionT err m) where get = ExceptionT $ Right `liftM` get put x = ExceptionT $ Right `liftM` put x -instance (Error err, MonadReader r m) => MonadReader r (ExceptionT err m) where+instance+#if __GLASGOW_HASKELL__ <= 708+ (Error err, Applicative m, MonadReader r m)+#else+ (Error err, MonadReader r m)+#endif+ => MonadReader r (ExceptionT err m) where ask = ExceptionT $ Right `liftM` ask local f = ExceptionT . local f . runExceptionT -instance (Error err, MonadError err' m) => MonadError err' (ExceptionT err m) where+instance+#if __GLASGOW_HASKELL__ <= 708+ (Error err, Applicative m, MonadError err' m)+#else+ (Error err, MonadError err' m)+#endif+ => MonadError err' (ExceptionT err m) where throwError err = ExceptionT $ Right `liftM` throwError err catchError m h = ExceptionT $ runExceptionT m `catchError` (runExceptionT . h) -instance (Error err, MonadIO m) => MonadIO (ExceptionT err m) where+instance+#if __GLASGOW_HASKELL__ <= 708+ (Error err, Applicative m, MonadIO m)+#else+ (Error err, MonadIO m)+#endif+ => MonadIO (ExceptionT err m) where liftIO m = ExceptionT $ Right `liftM` liftIO m instance (Error err, MonadTCM tcm) => MonadTCM (ExceptionT err tcm) where
src/full/Agda/TypeChecking/Monad/Imports.hs view
@@ -12,8 +12,6 @@ import Agda.TypeChecking.Monad.Base import Agda.Utils.Lens import Agda.Utils.Monad-import Agda.Utils.Time-import Agda.Utils.Hash addImport :: ModuleName -> TCM () addImport m =
src/full/Agda/TypeChecking/Monad/MetaVars.hs view
@@ -12,9 +12,8 @@ import qualified Data.Map as Map import qualified Data.Set as Set import qualified Data.Foldable as Fold-import qualified Data.Traversable as Trav -import Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.Syntax.Position import Agda.Syntax.Scope.Base@@ -25,6 +24,7 @@ import Agda.TypeChecking.Monad.Options (reportSLn) import Agda.TypeChecking.Monad.Context import Agda.TypeChecking.Substitute+import {-# SOURCE #-} Agda.TypeChecking.Telescope import Agda.Utils.Functor ((<.>)) import Agda.Utils.Lens@@ -87,7 +87,7 @@ case j of HasType{ jMetaType = t } -> do vs <- getContextArgs- return $ piApply t $ permute (takeP (size vs) p) vs+ piApplyM t $ permute (takeP (size vs) p) vs IsSort{} -> __IMPOSSIBLE__ -- | Check whether all metas are instantiated.@@ -126,7 +126,7 @@ instance IsInstantiatedMeta a => IsInstantiatedMeta (Maybe a) where isInstantiatedMeta = isInstantiatedMeta . maybeToList -instance IsInstantiatedMeta a => IsInstantiatedMeta (Common.Arg c a) where+instance IsInstantiatedMeta a => IsInstantiatedMeta (Arg a) where isInstantiatedMeta = isInstantiatedMeta . unArg -- | Does not worry about raising.
src/full/Agda/TypeChecking/Monad/Mutual.hs view
@@ -3,7 +3,6 @@ module Agda.TypeChecking.Monad.Mutual where import Control.Monad.Reader-import Control.Monad.State import qualified Data.Map as Map import Data.Set (Set)@@ -14,7 +13,6 @@ import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.State -import qualified Agda.Utils.HashMap as HMap import Agda.Utils.Lens noMutualBlock :: TCM a -> TCM a@@ -51,6 +49,13 @@ case Map.lookup mi mb of Just qs -> return qs Nothing -> return Set.empty -- can end up here if we ask for the current mutual block and there is none++mutualBlockOf :: QName -> TCM MutualId+mutualBlockOf x = do+ mb <- Map.toList <$> use stMutualBlocks+ case filter (Set.member x . snd) mb of+ (i, _) : _ -> return i+ _ -> fail $ "No mutual block for " ++ show x findMutualBlock :: QName -> TCM (Set QName) findMutualBlock f = do
src/full/Agda/TypeChecking/Monad/Open.hs view
@@ -1,14 +1,16 @@ -- {-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleContexts #-} module Agda.TypeChecking.Monad.Open ( makeOpen- , makeClosed+ , makeClosed, isClosed , getOpen , tryOpen ) where import Control.Applicative import Control.Monad+import Control.Monad.Reader import Data.List import Agda.TypeChecking.Substitute@@ -28,9 +30,13 @@ makeClosed :: a -> Open a makeClosed = OpenThing [] +-- | Check if an 'Open' is closed.+isClosed :: Open a -> Bool+isClosed (OpenThing cxt _) = null cxt+ -- | Extract the value from an open term. Must be done in an extension of the -- context in which the term was created.-getOpen :: Subst a => Open a -> TCM a+getOpen :: (Subst t a, MonadReader TCEnv m) => Open a -> m a getOpen (OpenThing [] x) = return x getOpen (OpenThing ctx x) = do ctx' <- getContextId@@ -40,7 +46,10 @@ -- | Try to use an 'Open' the current context. -- Returns 'Nothing' if current context is not an extension of the -- context in which the 'Open' was created.-tryOpen :: Subst a => Open a -> TCM (Maybe a)-tryOpen o =- (Just <$> getOpen o)- `catchError` \_ -> return Nothing+tryOpen :: (Subst t a, MonadReader TCEnv m) => Open a -> m (Maybe a)+tryOpen (OpenThing [] x) = return $ Just x+tryOpen (OpenThing ctx x) = do+ ctx' <- getContextId+ if (ctx `isSuffixOf` ctx')+ then return $ Just $ raise (genericLength ctx' - genericLength ctx) x+ else return Nothing
src/full/Agda/TypeChecking/Monad/Options.hs view
@@ -16,6 +16,7 @@ import System.Directory import System.FilePath +import Agda.Syntax.Internal import Agda.Syntax.Concrete import {-# SOURCE #-} Agda.TypeChecking.Errors import Agda.TypeChecking.Monad.Base@@ -25,6 +26,7 @@ import Agda.Interaction.Options import qualified Agda.Interaction.Options.Lenses as Lens import Agda.Interaction.Response+import Agda.Interaction.Library import Agda.Utils.Except ( MonadError(catchError) ) import Agda.Utils.FileName@@ -34,6 +36,8 @@ import Agda.Utils.List import Agda.Utils.Trie (Trie) import qualified Agda.Utils.Trie as Trie+import Agda.Utils.Except+import Agda.Utils.Either #include "undefined.h" import Agda.Utils.Impossible@@ -45,7 +49,8 @@ clo <- commandLineOptions let unsafe = unsafePragmaOptions opts when (optSafe clo && not (null unsafe)) $ typeError (SafeFlagPragma unsafe)- case checkOpts (clo { optPragmaOptions = opts }) of+ ok <- liftIO $ runOptM $ checkOpts (clo { optPragmaOptions = opts })+ case ok of Left err -> __IMPOSSIBLE__ Right opts -> do stPragmaOptions .= optPragmaOptions opts@@ -61,23 +66,53 @@ -- -- An empty list of relative include directories (@'Left' []@) is -- interpreted as @["."]@.- setCommandLineOptions :: CommandLineOptions -> TCM ()-setCommandLineOptions opts =- case checkOpts opts of+setCommandLineOptions = setCommandLineOptions' CurrentDir++setCommandLineOptions' :: RelativeTo -> CommandLineOptions -> TCM ()+setCommandLineOptions' relativeTo opts = do+ z <- liftIO $ runOptM $ checkOpts opts+ case z of Left err -> __IMPOSSIBLE__ Right opts -> do- incs <- case optIncludeDirs opts of- Right absolutePathes -> return absolutePathes- Left relativePathes -> do- -- setIncludeDirs makes pathes (relative to CurrentDir) absolute- -- and possible adds the current directory (if no pathes given)- setIncludeDirs relativePathes CurrentDir+ incs <- case optAbsoluteIncludePaths opts of+ [] -> do+ opts' <- setLibraryPaths relativeTo opts+ let incs = optIncludePaths opts'+ setIncludeDirs incs relativeTo getIncludeDirs- modify $ Lens.setCommandLineOptions opts{ optIncludeDirs = Right incs }+ incs -> return incs+ modify $ Lens.setCommandLineOptions opts{ optAbsoluteIncludePaths = incs } . Lens.setPragmaOptions (optPragmaOptions opts) updateBenchmarkingStatus +libToTCM :: LibM a -> TCM a+libToTCM m = do+ z <- liftIO $ runExceptT m+ case z of+ Left s -> typeError $ GenericDocError s+ Right x -> return x++setLibraryPaths :: RelativeTo -> CommandLineOptions -> TCM CommandLineOptions+setLibraryPaths rel o = setLibraryIncludes =<< addDefaultLibraries rel o++setLibraryIncludes :: CommandLineOptions -> TCM CommandLineOptions+setLibraryIncludes o = do+ let libs = optLibraries o+ installed <- libToTCM $ getInstalledLibraries (optOverrideLibrariesFile o)+ paths <- libToTCM $ libraryIncludePaths (optOverrideLibrariesFile o) installed libs+ return o{ optIncludePaths = paths ++ optIncludePaths o }++addDefaultLibraries :: RelativeTo -> CommandLineOptions -> TCM CommandLineOptions+addDefaultLibraries rel o+ | or [ not $ null $ optLibraries o+ , not $ optDefaultLibs o+ , optShowVersion o ] = pure o+ | otherwise = do+ root <- getProjectRoot rel+ (libs, incs) <- libToTCM $ getDefaultLibraries (filePath root)+ return o{ optIncludePaths = incs ++ optIncludePaths o, optLibraries = libs }+ class (Functor m, Applicative m, Monad m) => HasOptions m where -- | Returns the pragma options which are currently in effect. pragmaOptions :: m PragmaOptions@@ -95,9 +130,10 @@ setOptionsFromPragma :: OptionsPragma -> TCM () setOptionsFromPragma ps = do opts <- commandLineOptions- case parsePragmaOptions ps opts of- Left err -> typeError $ GenericError err- Right opts' -> setPragmaOptions opts'+ z <- liftIO $ runOptM (parsePragmaOptions ps opts)+ case z of+ Left err -> typeError $ GenericError err+ Right opts' -> setPragmaOptions opts' -- | Disable display forms. enableDisplayForms :: TCM a -> TCM a@@ -136,14 +172,15 @@ -- | Gets the include directories. ----- Precondition: 'optIncludeDirs' must be @'Right' something@.+-- Precondition: 'optAbsoluteIncludePaths' must be nonempty (i.e.+-- 'setCommandLineOptions' must have run). getIncludeDirs :: TCM [AbsolutePath] getIncludeDirs = do- incs <- optIncludeDirs <$> commandLineOptions+ incs <- optAbsoluteIncludePaths <$> commandLineOptions case incs of- Left _ -> __IMPOSSIBLE__- Right incs -> return incs+ [] -> __IMPOSSIBLE__+ _ -> return incs -- | Which directory should form the base of relative include paths? @@ -155,36 +192,37 @@ | CurrentDir -- ^ The current working directory. +getProjectRoot :: RelativeTo -> TCM AbsolutePath+getProjectRoot CurrentDir = liftIO (absolute =<< getCurrentDirectory)+getProjectRoot (ProjectRoot f) = do+ m <- moduleName' f+ return (projectRoot f m)+ -- | Makes the given directories absolute and stores them as include -- directories. ----- If the include directories change (and they were previously--- @'Right' something@), then the state is reset (completely, except--- for the include directories and 'stInteractionOutputCallback').+-- If the include directories change, then the state is reset (completely,+-- except for the include directories and 'stInteractionOutputCallback'). -- -- An empty list is interpreted as @["."]@. -setIncludeDirs- :: [FilePath]- -- ^ New include directories.- -> RelativeTo- -- ^ How should relative paths be interpreted?- -> TCM ()+setIncludeDirs :: [FilePath] -- ^ New include directories.+ -> RelativeTo -- ^ How should relative paths be interpreted?+ -> TCM () setIncludeDirs incs relativeTo = do -- save the previous include dirs- oldIncs <- gets Lens.getIncludeDirs+ oldIncs <- gets Lens.getAbsoluteIncludePaths - (root, check) <- case relativeTo of- CurrentDir -> do- root <- liftIO (absolute =<< getCurrentDirectory)- return (root, return ())+ root <- getProjectRoot relativeTo+ check <- case relativeTo of+ CurrentDir -> return (return ()) ProjectRoot f -> do m <- moduleName' f- return (projectRoot f m, checkModuleName m f)+ return (checkModuleName m f) -- Add the current dir if no include path is given incs <- return $ if null incs then ["."] else incs- -- Make pathes absolute+ -- Make paths absolute incs <- return $ map (mkAbsolute . (filePath root </>)) incs -- Andreas, 2013-10-30 Add default include dir@@ -196,7 +234,6 @@ -- printed last in error messages. -- Might also be useful to overwrite default imports... incs <- return $ incs ++ [primdir]- Lens.putIncludeDirs $ Right $ incs -- Check whether the include dirs have changed. If yes, reset state. -- Andreas, 2013-10-30 comments:@@ -204,14 +241,12 @@ -- for the interaction, qualifies for a code-obfuscation contest. -- I guess one Boolean more in the state cost 10.000 EUR at the time -- of this implementation...- case oldIncs of- Right incs' | incs' /= incs -> do- ho <- getInteractionOutputCallback- resetAllState- setInteractionOutputCallback ho- Lens.putIncludeDirs $ Right incs- _ -> return ()+ when (oldIncs /= incs) $ do+ ho <- getInteractionOutputCallback+ resetAllState+ setInteractionOutputCallback ho + Lens.putAbsoluteIncludePaths incs check setInputFile :: FilePath -> TCM ()@@ -240,6 +275,23 @@ hasUniversePolymorphism :: HasOptions m => m Bool hasUniversePolymorphism = optUniversePolymorphism <$> pragmaOptions +{-# SPECIALIZE sharedFun :: TCM (Term -> Term) #-}+sharedFun :: HasOptions m => m (Term -> Term)+sharedFun = do+ sharing <- optSharing <$> commandLineOptions+ return $ if sharing then shared_ else id++{-# SPECIALIZE shared :: Term -> TCM Term #-}+shared :: HasOptions m => Term -> m Term+shared v = ($ v) <$> sharedFun++{-# SPECIALIZE sharedType :: Type -> TCM Type #-}+sharedType :: HasOptions m => Type -> m Type+sharedType (El s v) = El s <$> shared v++enableCaching :: TCM Bool+enableCaching = optCaching <$> commandLineOptions+ showImplicitArguments :: TCM Bool showImplicitArguments = optShowImplicit <$> pragmaOptions @@ -277,8 +329,12 @@ positivityCheckEnabled :: TCM Bool positivityCheckEnabled = not . optDisablePositivity <$> pragmaOptions -typeInType :: TCM Bool+{-# SPECIALIZE typeInType :: TCM Bool #-}+typeInType :: HasOptions m => m Bool typeInType = not . optUniverseCheck <$> pragmaOptions++etaEnabled :: TCM Bool+etaEnabled = optEta <$> pragmaOptions ------------------------------------------------------------------------ -- Verbosity
src/full/Agda/TypeChecking/Monad/Sharing.hs view
@@ -1,7 +1,9 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleContexts #-} module Agda.TypeChecking.Monad.Sharing where +import Control.Applicative import Control.Monad.Reader import Data.List import Data.Function@@ -15,15 +17,21 @@ #include "undefined.h" import Agda.Utils.Impossible -updateSharedTerm :: MonadTCM tcm => (Term -> tcm Term) -> Term -> tcm Term+updateSharedTerm :: MonadReader TCEnv m => (Term -> m Term) -> Term -> m Term updateSharedTerm f v =- ifM (liftTCM $ asks envAllowDestructiveUpdate)+ ifM (asks envAllowDestructiveUpdate) (updateSharedM f v) (f $ ignoreSharing v) -updateSharedTermF :: (MonadTCM tcm, Traversable f) => (Term -> tcm (f Term)) -> Term -> tcm (f Term)+updateSharedTermF+#if __GLASGOW_HASKELL__ <= 708+ :: (Applicative m, MonadReader TCEnv m, Traversable f)+#else+ :: (MonadReader TCEnv m, Traversable f)+#endif+ => (Term -> m (f Term)) -> Term -> m (f Term) updateSharedTermF f v =- ifM (liftTCM $ asks envAllowDestructiveUpdate)+ ifM (asks envAllowDestructiveUpdate) (updateSharedFM f v) (f $ ignoreSharing v) @@ -51,5 +59,3 @@ update _ _ = __IMPOSSIBLE__ report x y = reportSLn "tc.ptr" 50 $ "setting " ++ show x ++ "\n to " ++ show y -disableDestructiveUpdate :: TCM a -> TCM a-disableDestructiveUpdate = local $ \e -> e { envAllowDestructiveUpdate = False }
src/full/Agda/TypeChecking/Monad/Signature.hs view
@@ -1,8 +1,9 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DoAndIfThenElse #-}-{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DoAndIfThenElse #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE PatternGuards #-} module Agda.TypeChecking.Monad.Signature where @@ -14,6 +15,8 @@ import Control.Monad.Reader import Data.List hiding (null)+import Data.Set (Set)+import qualified Data.Set as Set import Data.Map (Map) import qualified Data.Map as Map import Data.Maybe@@ -23,9 +26,12 @@ import Agda.Syntax.Abstract (Ren) import Agda.Syntax.Common import Agda.Syntax.Internal as I+import Agda.Syntax.Internal.Names import Agda.Syntax.Position+import Agda.Syntax.Treeless (Compiled(..), TTerm) import qualified Agda.Compiler.JS.Parser as JS+import qualified Agda.Compiler.UHC.Pragmas.Base as CR import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.Context@@ -37,6 +43,7 @@ import Agda.TypeChecking.Monad.State import Agda.TypeChecking.Positivity.Occurrence import Agda.TypeChecking.Substitute+import {-# SOURCE #-} Agda.TypeChecking.Telescope import {-# SOURCE #-} Agda.TypeChecking.CompiledClause.Compile import {-# SOURCE #-} Agda.TypeChecking.Polarity import {-# SOURCE #-} Agda.TypeChecking.ProjectionLike@@ -92,21 +99,31 @@ tel <- getContextTelescope modifyFunClauses q (++ abstract tel cls) +ensureNoCompiledHaskell :: QName -> TCM ()+ensureNoCompiledHaskell q =+ whenM (isJust . compiledHaskell . defCompiledRep <$> getConstInfo q) $+ typeError $ GenericError $ "Multiple Haskell bindings for " ++ show q ++ ". " +++ "Note that builtin numbers, booleans, chars and strings don't need " +++ "COMPILED pragmas."+ addHaskellCode :: QName -> HaskellType -> HaskellCode -> TCM ()-addHaskellCode q hsTy hsDef = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addHs- -- TODO: sanity checking+addHaskellCode q hsTy hsDef = do+ ensureNoCompiledHaskell q+ modifySignature $ updateDefinition q $ updateDefCompiledRep $ addHs where addHs crep = crep { compiledHaskell = Just $ HsDefn hsTy hsDef } addHaskellExport :: QName -> HaskellType -> String -> TCM ()-addHaskellExport q hsTy hsName = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addHs- -- TODO: sanity checking+addHaskellExport q hsTy hsName = do+ ensureNoCompiledHaskell q+ modifySignature $ updateDefinition q $ updateDefCompiledRep $ addHs where addHs crep = crep { exportHaskell = Just (HsExport hsTy hsName)} addHaskellType :: QName -> HaskellType -> TCM ()-addHaskellType q hsTy = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addHs- -- TODO: sanity checking+addHaskellType q hsTy = do+ ensureNoCompiledHaskell q+ modifySignature $ updateDefinition q $ updateDefCompiledRep $ addHs where addHs crep = crep { compiledHaskell = Just $ HsType hsTy } @@ -126,6 +143,29 @@ where addJS e crep = crep { compiledJS = e } +addCoreCode :: QName -> CR.CoreExpr -> TCM ()+addCoreCode q crDef = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addCore crDef+ where+ addCore e crep = crep { compiledCore = Just $ CrDefn e }++addCoreConstr :: QName -> CR.CoreConstr -> TCM ()+addCoreConstr q con = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addCore+ where+ addCore crep = crep {compiledCore = Just $ CrConstr con }++addCoreType :: QName -> CR.CoreType -> TCM ()+addCoreType q crTy = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addCr+ -- TODO: sanity checking+ where+ addCr crep = crep { compiledCore = Just $ CrType crTy }++markNoSmashing :: QName -> TCM ()+markNoSmashing q = modifySignature $ updateDefinition q $ mark+ where+ mark def@Defn{theDef = fun@Function{}} =+ def{theDef = fun{funSmashable = False}}+ mark def = def+ markStatic :: QName -> TCM () markStatic q = modifySignature $ updateDefinition q $ mark where@@ -133,6 +173,13 @@ def{theDef = fun{funStatic = True}} mark def = def +markInline :: QName -> TCM ()+markInline q = modifySignature $ updateDefinition q $ mark+ where+ mark def@Defn{theDef = fun@Function{}} =+ def{theDef = fun{funInline = True}}+ mark def = def+ unionSignatures :: [Signature] -> Signature unionSignatures ss = foldr unionSignature emptySignature ss where@@ -167,10 +214,12 @@ -- | Lookup a section. If it doesn't exist that just means that the module -- wasn't parameterised.-lookupSection :: ModuleName -> TCM Telescope+{-# SPECIALIZE lookupSection :: ModuleName -> TCM Telescope #-}+{-# SPECIALIZE lookupSection :: ModuleName -> ReduceM Telescope #-}+lookupSection :: (Functor m, ReadTCState m) => ModuleName -> m Telescope lookupSection m = do- sig <- use $ stSignature . sigSections- isig <- use $ stImports . sigSections+ sig <- (^. stSignature . sigSections) <$> getTCState+ isig <- (^. stImports . sigSections) <$> getTCState return $ maybe EmptyTel (^. secTelescope) $ Map.lookup m sig `mplus` Map.lookup m isig -- Add display forms to all names @xn@ such that @x = x1 es1@, ... @xn-1 = xn esn@.@@ -196,6 +245,12 @@ ++ "\n " ++ show df addDisplayForm y df add args top y vs+ [] | Constructor{ conSrcCon = h } <- theDef def -> do+ let y = conName h+ df = Display 0 [] $ DTerm $ Con (h {conName = top }) []+ reportSLn "tc.display.section" 20 $ "adding display form " ++ show y ++ " --> " ++ show top+ ++ "\n " ++ show df+ addDisplayForm y df _ -> do let reason = if not isCopy then "not a copy" else case cs of@@ -207,7 +262,7 @@ | m < length args -> "too few args" | m > length args -> "too many args" | otherwise -> "args=" ++ show args ++ " es=" ++ show es- Just (m, v) -> "not a def body"+ Just (m, v) -> "not a def body, but " ++ show v reportSLn "tc.display.section" 30 $ "no display form from " ++ show x ++ " because " ++ reason @@ -230,8 +285,37 @@ -> Ren ModuleName -- ^ Imported modules (given as renaming). -> TCM () applySection new ptel old ts rd rm = do+ rd <- closeConstructors rd applySection' new ptel old ts rd rm+ where+ -- If a datatype is being copied, all its constructors need to be copied,+ -- and if a constructor is copied its datatype needs to be.+ closeConstructors rd = do+ ds <- nub . concat <$> mapM (constructorData . fst) rd+ cs <- nub . concat <$> mapM (dataConstructors . fst) rd+ new <- concat <$> mapM rename (ds ++ cs)+ reportSLn "tc.mod.apply.complete" 30 $+ "also copying: " ++ show new+ return $ new ++ rd+ where+ rename x =+ case lookup x rd of+ Nothing -> do y <- freshName_ (show x)+ return [(x, qnameFromList [y])]+ Just{} -> return [] + constructorData x = do+ def <- theDef <$> getConstInfo x+ return $ case def of+ Constructor{ conData = d } -> [d]+ _ -> []+ dataConstructors x = do+ def <- theDef <$> getConstInfo x+ return $ case def of+ Datatype{ dataCons = cs } -> cs+ Record{ recConHead = h } -> [conName h]+ _ -> []+ applySection' :: ModuleName -> Telescope -> ModuleName -> Args -> Ren QName -> Ren ModuleName -> TCM () applySection' new ptel old ts rd rm = do reportSLn "tc.mod.apply" 10 $ render $ vcat@@ -290,18 +374,29 @@ -- -- Andreas, 2015-09-09 Issue 1643: -- -- Do not add a display form for a bare module alias. -- when (not isCon && size ptel == 0 && not (null ts)) $ do- when (not isCon && size ptel == 0) $ do+ when (size ptel == 0) $ do addDisplayForms y where ts' = take np ts- t = defType d `apply` ts'+ t = defType d `piApply` ts' pol = defPolarity d `apply` ts' occ = defArgOccurrences d `apply` ts' inst = defInstance d abstr = defAbstract d -- the name is set by the addConstant function nd :: QName -> TCM Definition- nd y = Defn (defArgInfo d) y t pol occ [] (-1) noCompiledRep inst <$> def -- TODO: mutual block?+ nd y = for def $ \ df -> Defn+ { defArgInfo = defArgInfo d+ , defName = y+ , defType = t+ , defPolarity = pol+ , defArgOccurrences = occ+ , defDisplay = []+ , defMutual = -1 -- TODO: mutual block?+ , defCompiledRep = noCompiledRep+ , defInstance = inst+ , defCopy = True+ , theDef = df } oldDef = theDef d isCon = case oldDef of { Constructor{} -> True ; _ -> False } mutual = case oldDef of { Function{funMutual = m} -> m ; _ -> [] }@@ -333,7 +428,7 @@ Record{ recPars = np, recConType = t, recTel = tel } -> return $ oldDef { recPars = np - size ts' , recClause = Just cl- , recConType = apply t ts'+ , recConType = piApply t ts' , recTel = apply tel ts' } _ -> do@@ -341,13 +436,15 @@ let newDef = Function { funClauses = [cl] , funCompiled = Just $ cc+ , funTreeless = Nothing , funDelayed = NotDelayed , funInv = NotInjective , funMutual = mutual , funAbstr = ConcreteDef -- OR: abstr -- ?! , funProjection = proj , funStatic = False- , funCopy = True+ , funInline = False+ , funSmashable = True , funTerminates = Just True , funExtLam = extlam , funWith = with@@ -362,10 +459,10 @@ _ -> Def x [] cl = Clause { clauseRange = getRange $ defClauses d , clauseTel = EmptyTel- , clausePerm = idP 0 , namedClausePats = [] , clauseBody = Body $ head `apply` ts' , clauseType = Just $ defaultArg t+ , clauseCatchall = False } {- Example@@ -415,9 +512,35 @@ addDisplayForm x df = do d <- makeOpen df let add = updateDefinition x $ \ def -> def{ defDisplay = d : defDisplay def }- modifyImportedSignature add- modifySignature add+ inCurrentSig <- isJust . HMap.lookup x <$> use (stSignature . sigDefinitions)+ if inCurrentSig+ then modifySignature add+ else stImportsDisplayForms %= HMap.insertWith (++) x [d]+ whenM (hasLoopingDisplayForm x) $+ typeError . GenericDocError $ text "Cannot add recursive display form for" <+> pretty x +getDisplayForms :: QName -> TCM [Open DisplayForm]+getDisplayForms q = do+ ds <- defDisplay <$> getConstInfo q+ ds1 <- maybe [] id . HMap.lookup q <$> use stImportsDisplayForms+ ds2 <- maybe [] id . HMap.lookup q <$> use stImportedDisplayForms+ return $ ds ++ ds1 ++ ds2++-- | Find all names used (recursively) by display forms of a given name.+chaseDisplayForms :: QName -> TCM (Set QName)+chaseDisplayForms q = go Set.empty [q]+ where+ go used [] = pure used+ go used (q : qs) = do+ let rhs (Display _ _ e) = e -- Only look at names in the right-hand side (#1870)+ ds <- (`Set.difference` used) . Set.unions . map (namesIn . rhs . openThing)+ <$> (getDisplayForms q `catchError_` \ _ -> pure []) -- might be a pattern synonym+ go (Set.union ds used) (Set.toList ds ++ qs)++-- | Check if a display form is looping.+hasLoopingDisplayForm :: QName -> TCM Bool+hasLoopingDisplayForm q = Set.member q <$> chaseDisplayForms q+ canonicalName :: QName -> TCM QName canonicalName x = do def <- theDef <$> getConstInfo x@@ -538,7 +661,7 @@ getArgOccurrence :: QName -> Nat -> TCM Occurrence getArgOccurrence d i = do def <- getConstInfo d- return $ case theDef def of+ return $! case theDef def of Constructor{} -> StrictPos _ -> fromMaybe Mixed $ defArgOccurrences def !!! i @@ -549,6 +672,33 @@ modifyArgOccurrences d f = modifySignature $ updateDefinition d $ updateDefArgOccurrences f +setTreeless :: QName -> TTerm -> TCM ()+setTreeless q t = modifyGlobalDefinition q $ setTT+ where+ setTT def@Defn{theDef = fun@Function{}} =+ def{theDef = fun{funTreeless = Just (Compiled t [])}}+ setTT def = __IMPOSSIBLE__++setCompiledArgUse :: QName -> [Bool] -> TCM ()+setCompiledArgUse q use = modifyGlobalDefinition q $ setTT+ where+ setTT def@Defn{theDef = fun@Function{}} =+ def{theDef = fun{funTreeless = for (funTreeless fun) $ \ c -> c { cArgUsage = use }}}+ setTT def = __IMPOSSIBLE__++getCompiled :: QName -> TCM (Maybe Compiled)+getCompiled q = do+ def <- theDef <$> getConstInfo q+ return $ case def of+ Function{ funTreeless = t } -> t+ _ -> Nothing++getTreeless :: QName -> TCM (Maybe TTerm)+getTreeless q = fmap cTreeless <$> getCompiled q++getCompiledArgUse :: QName -> TCM [Bool]+getCompiledArgUse q = maybe [] cArgUsage <$> getCompiled q+ -- | Get the mutually recursive identifiers. getMutual :: QName -> TCM [QName] getMutual d = do@@ -588,16 +738,67 @@ -- | Compute the number of free variables of a defined name. This is the sum of -- number of parameters shared with the current module and the number of -- anonymous variables (if the name comes from a let-bound module).-getDefFreeVars :: QName -> TCM Nat+{-# SPECIALIZE getDefFreeVars :: QName -> TCM Nat #-}+{-# SPECIALIZE getDefFreeVars :: QName -> ReduceM Nat #-}+getDefFreeVars :: (Functor m, Applicative m, ReadTCState m, MonadReader TCEnv m) => QName -> m Nat getDefFreeVars q = do let m = qnameModule q m0 <- commonParentModule m <$> currentModule (+) <$> getAnonymousVariables m <*> (size <$> lookupSection m0) -- | Compute the context variables to apply a definition to.+--+-- We have to insert the module telescope of the common prefix+-- of the current module and the module where the definition comes from.+-- (Properly raised to the current context.)+--+-- Example:+-- @+-- module M₁ Γ where+-- module M₁ Δ where+-- f = ...+-- module M₃ Θ where+-- ... M₁.M₂.f [insert Γ raised by Θ]+-- @ freeVarsToApply :: QName -> TCM Args-freeVarsToApply x = genericTake <$> getDefFreeVars x <*> getContextArgs+freeVarsToApply x = do+ -- Get the correct number of free variables (correctly raised) of @x@. + args <- take <$> getDefFreeVars x <*> getContextArgs++ -- Apply the original ArgInfo, as the hiding information in the current+ -- context might be different from the hiding information expected by @x@.++ getSection (qnameModule x) >>= \case+ Nothing -> do+ -- We have no section for @x@.+ -- This should only happen for toplevel definitions, and then there+ -- are no free vars to apply, or?+ -- unless (null args) __IMPOSSIBLE__+ -- No, this invariant is violated by private modules, see Issue1701a.+ return args+ Just (Section tel) -> do+ -- The section telescope of the home of @x@ should be as least+ -- as long as the number of free vars @x@ is applied to.+ -- We still check here as in no case, we want @zipWith@ to silently+ -- drop some @args@.+ -- And there are also anonymous modules, thus, the invariant is not trivial.+ when (size tel < size args) __IMPOSSIBLE__+ return $ zipWith (\ (Dom ai _) (Arg _ v) -> Arg ai v) (telToList tel) args++-- | Unless all variables in the context are module parameters, create a fresh+-- module to capture the non-module parameters. Used when unquoting to make+-- sure generated definitions work properly.+inFreshModuleIfFreeParams :: TCM a -> TCM a+inFreshModuleIfFreeParams k = do+ a <- getCurrentModuleFreeVars+ b <- size <$> getContext+ if a == b then k else do+ m <- currentModule+ m' <- qualifyM m . mnameFromList . (:[]) <$> freshName_ "_"+ addSection m'+ withCurrentModule m' k+ -- | Instantiate a closed definition with the correct part of the current -- context. instantiateDef :: Definition -> TCM Definition@@ -608,7 +809,7 @@ m <- currentModule reportSLn "tc.sig.inst" 30 $ "instDef in " ++ show m ++ ": " ++ show (defName d) ++ " " ++- unwords (map show . take (size vs) . reverse . map (fst . unDom) $ ctx)+ unwords (map show $ zipWith (<$) (reverse $ map (fst . unDom) ctx) vs) return $ d `apply` vs -- | Give the abstract view of a definition.@@ -695,10 +896,6 @@ relOfConst :: QName -> TCM Relevance relOfConst q = defRelevance <$> getConstInfo q --- | Get colors of a constant.-colOfConst :: QName -> TCM [Color]-colOfConst q = defColors <$> getConstInfo q- -- | The name must be a datatype. sortOfConst :: QName -> TCM Sort sortOfConst q =@@ -739,6 +936,16 @@ Function { funProjection = result } -> result _ -> Nothing +-- | Is it a function marked STATIC?+isStaticFun :: Defn -> Bool+isStaticFun Function{ funStatic = b } = b+isStaticFun _ = False++-- | Is it a function marked INLINE?+isInlineFun :: Defn -> Bool+isInlineFun Function{ funInline = b } = b+isInlineFun _ = False+ -- | Returns @True@ if we are dealing with a proper projection, -- i.e., not a projection-like function nor a record field value -- (projection applied to argument).@@ -760,7 +967,7 @@ -- | Apply a function @f@ to its first argument, producing the proper -- postfix projection if @f@ is a projection.-applyDef :: QName -> I.Arg Term -> TCM Term+applyDef :: QName -> Arg Term -> TCM Term applyDef f a = do let fallback = return $ Def f [Apply a] caseMaybeM (isProjection f) fallback $ \ isP -> do@@ -768,38 +975,3 @@ -- Get the original projection, if existing. caseMaybe (projProper isP) fallback $ \ f' -> do return $ unArg a `applyE` [Proj f']---- | @getDefType f t@ computes the type of (possibly projection-(like))--- function @t@ whose first argument has type @t@.--- The `parameters' for @f@ are extracted from @t@.--- @Nothing@ if @f@ is projection(like) but--- @t@ is not a data/record/axiom type.------ Precondition: @t@ is reduced.------ See also: 'Agda.TypeChecking.Datatypes.getConType'-getDefType :: QName -> Type -> TCM (Maybe Type)-getDefType f t = do- def <- getConstInfo f- let a = defType def- -- if @f@ is not a projection (like) function, @a@ is the correct type- fallback = return $ Just a- caseMaybe (isProjection_ $ theDef def) fallback $- \ (Projection{ projIndex = n }) -> if n <= 0 then fallback else do- -- otherwise, we have to instantiate @a@ to the "parameters" of @f@- let npars | n == 0 = __IMPOSSIBLE__- | otherwise = n - 1- -- we get the parameters from type @t@- case ignoreSharing $ unEl t of- Def d es -> do- -- Andreas, 2013-10-22- -- we need to check this @Def@ is fully reduced.- -- If it is stuck due to disabled reductions- -- (because of failed termination check),- -- we will produce garbage parameters.- flip (ifM $ eligibleForProjectionLike d) (return Nothing) $ do- -- now we know it is reduced, we can safely take the parameters- let pars = fromMaybe __IMPOSSIBLE__ $ allApplyElims $ take npars es- -- pars <- maybe (return Nothing) return $ allApplyElims $ take npars es- return $ Just $ a `apply` pars- _ -> return Nothing
src/full/Agda/TypeChecking/Monad/SizedTypes.hs view
@@ -18,7 +18,6 @@ import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.Monad.Signature import Agda.TypeChecking.Monad.State import Agda.TypeChecking.Positivity.Occurrence import Agda.TypeChecking.Substitute ()@@ -42,17 +41,23 @@ deriving (Eq, Show) -- | Check if a type is the 'primSize' type. The argument should be 'reduce'd.-isSizeType :: Type -> TCM (Maybe BoundedSize)-isSizeType v = isSizeTypeTest <*> pure v+class IsSizeType a where+ isSizeType :: a -> TCM (Maybe BoundedSize) -isSizeTypeTest :: TCM (Type -> Maybe BoundedSize)+instance IsSizeType a => IsSizeType (Type' a) where+ isSizeType = isSizeType . unEl++instance IsSizeType Term where+ isSizeType v = isSizeTypeTest <*> pure v++isSizeTypeTest :: TCM (Term -> Maybe BoundedSize) isSizeTypeTest = flip (ifM (optSizedTypes <$> pragmaOptions)) (return $ const Nothing) $ do (size, sizelt) <- getBuiltinSize let testType (Def d []) | Just d == size = Just BoundedNo testType (Def d [Apply v]) | Just d == sizelt = Just $ BoundedLt $ unArg v testType _ = Nothing- return $ testType . ignoreSharing . unEl+ return $ testType . ignoreSharing getBuiltinDefName :: String -> TCM (Maybe QName) getBuiltinDefName s = fromDef . fmap ignoreSharing <$> getBuiltin' s
src/full/Agda/TypeChecking/Monad/State.hs view
@@ -4,10 +4,11 @@ module Agda.TypeChecking.Monad.State where -import Control.Arrow ((***), first, second)+import Control.Arrow (first) import Control.Applicative import qualified Control.Exception as E-import Control.Monad.State+import Control.Monad.State (put, get, gets, modify)+import Control.Monad.Trans (liftIO) import Data.Map as Map import Data.Monoid@@ -63,21 +64,21 @@ -- In contrast to 'Agda.Utils.Monad.localState', the 'Benchmark' -- info from the subcomputation is saved. localTCState :: TCM a -> TCM a-localTCState = bracket_ get $ \ s -> do+localTCState = disableDestructiveUpdate . bracket_ get (\ s -> do b <- getBenchmark put s- modifyBenchmark $ const b+ modifyBenchmark $ const b) -- | Same as 'localTCState' but also returns the state in which we were just -- before reverting it. localTCStateSaving :: TCM a -> TCM (a, TCState) localTCStateSaving compute = do- state <- get+ oldState <- get result <- compute newState <- get do b <- getBenchmark- put state+ put oldState modifyBenchmark $ const b return (result, newState) @@ -118,9 +119,13 @@ setScope :: ScopeInfo -> TCM () setScope scope = modifyScope (const scope) +-- | Modify the current scope without updating the inverse maps.+modifyScope_ :: (ScopeInfo -> ScopeInfo) -> TCM ()+modifyScope_ f = stScope %= f+ -- | Modify the current scope. modifyScope :: (ScopeInfo -> ScopeInfo) -> TCM ()-modifyScope f = stScope %= f+modifyScope f = modifyScope_ (recomputeInverseScopeMaps . f) -- | Run a computation in a local scope. withScope :: ScopeInfo -> TCM a -> TCM (a, ScopeInfo)@@ -174,6 +179,14 @@ getImportedSignature :: TCM Signature getImportedSignature = use stImports +-- | Update a possibly imported definition. Warning: changes made to imported+-- definitions (during type checking) will not persist outside the current+-- module. This function is currently used to update the compiled+-- representation of a function during compilation.+modifyGlobalDefinition :: QName -> (Definition -> Definition) -> TCM ()+modifyGlobalDefinition q f = modifySignature (updateDefinition q f) >>+ modifyImportedSignature (updateDefinition q f)+ setSignature :: Signature -> TCM () setSignature sig = modifySignature $ const sig @@ -191,7 +204,12 @@ -- ** Modifiers for rewrite rules addRewriteRulesFor :: QName -> RewriteRules -> Signature -> Signature-addRewriteRulesFor f rews = over sigRewriteRules $ HMap.insertWith mappend f rews+addRewriteRulesFor f rews =+ (over sigRewriteRules $ HMap.insertWith mappend f rews)+ . (updateDefinition f $ updateTheDef setNotInjective)+ where+ setNotInjective def@Function{} = def { funInv = NotInjective }+ setNotInjective def = def -- ** Modifiers for parts of the signature @@ -257,6 +275,17 @@ -- | Get the Haskell imports. getHaskellImports :: TCM (Set String) getHaskellImports = use stHaskellImports++-- | Tell the compiler to import the given Haskell module.+addHaskellImportUHC :: String -> TCM ()+addHaskellImportUHC i = stHaskellImportsUHC %= Set.insert i++-- | Get the Haskell imports.+getHaskellImportsUHC :: TCM (Set String)+getHaskellImportsUHC = use stHaskellImportsUHC++addInlineHaskell :: String -> TCM ()+addInlineHaskell s = stHaskellCode %= (s :) --------------------------------------------------------------------------- -- * Interaction output callback
src/full/Agda/TypeChecking/Monad/Statistics.hs view
@@ -4,8 +4,6 @@ ( tick, tickN, tickMax, getStatistics, modifyStatistics, printStatistics ) where -import Control.Monad.State-import Data.Map (Map) import qualified Data.Map as Map import qualified Text.PrettyPrint.Boxes as Boxes@@ -14,7 +12,6 @@ import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.Options-import Agda.TypeChecking.Monad.State import Agda.Utils.Lens import Agda.Utils.Maybe
src/full/Agda/TypeChecking/Monad/Trace.hs view
@@ -14,8 +14,8 @@ import Agda.TypeChecking.Monad.Options import Agda.Utils.Function-import Agda.Utils.List import Agda.Utils.Maybe+import qualified Agda.Utils.Maybe.Strict as Strict import Agda.Utils.Monad import Agda.Utils.Null import Agda.Utils.Pretty (prettyShow)@@ -47,15 +47,15 @@ callRange = getRange call -- Andreas, 2015-02-09 Make sure we do not set a range -- outside the current file- unlessNull callRange $ \ (Range is) ->- unlessNull (mapMaybe srcFile $ map iStart is ++ map iEnd is) $ \ files -> do- whenJustM (asks envCurrentPath) $ \ currentFile -> do- unlessNull (filter (/= currentFile) files) $ \ wrongFiles -> do- reportSLn "impossible" 10 $- prettyShow call ++- " is trying to set the current range to " ++ show callRange ++- " which is outside of the current file " ++ show currentFile- __IMPOSSIBLE__+ verboseS "check.ranges" 10 $+ Strict.whenJust (rangeFile callRange) $ \f -> do+ currentFile <- asks envCurrentPath+ when (currentFile /= Just f) $ do+ reportSLn "impossible" 10 $+ prettyShow call +++ " is trying to set the current range to " ++ show callRange +++ " which is outside of the current file " ++ show currentFile+ __IMPOSSIBLE__ cl <- liftTCM $ buildClosure call let trace = local $ foldr (.) id $ [ \e -> e { envCall = Just cl } | interestingCall cl ] ++@@ -96,7 +96,9 @@ ScopeCheckDeclaration{} -> False ScopeCheckLHS{} -> False NoHighlighting{} -> True+ CheckProjection{} -> False SetRange{} -> False+ ModuleContents{} -> False isNoHighlighting NoHighlighting{} = True isNoHighlighting _ = False
src/full/Agda/TypeChecking/Patterns/Abstract.hs view
@@ -1,5 +1,5 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE ScopedTypeVariables #-} -- | Tools to manipulate patterns in abstract syntax@@ -9,10 +9,12 @@ import Data.List import Data.Traversable hiding (mapM, sequence)+import Data.Void import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Abstract.Views-import Agda.Syntax.Common as Common+import Agda.Syntax.Concrete (FieldAssignment')+import Agda.Syntax.Common import Agda.Syntax.Info as A import Agda.Syntax.Internal as I import Agda.Syntax.Literal@@ -28,11 +30,11 @@ -- | Expand literal integer pattern into suc/zero constructor patterns. ---expandLitPattern :: A.NamedArg A.Pattern -> TCM (A.NamedArg A.Pattern)+expandLitPattern :: NamedArg A.Pattern -> TCM (NamedArg A.Pattern) expandLitPattern p = traverse (traverse expand) p where expand p = case asView p of- (xs, A.LitP (LitInt r n))+ (xs, A.LitP (LitNat r n)) | n < 0 -> __IMPOSSIBLE__ | n > 20 -> tooBig | otherwise -> do@@ -61,12 +63,15 @@ instance ExpandPatternSynonyms a => ExpandPatternSynonyms [a] where expandPatternSynonyms = traverse expandPatternSynonyms -instance ExpandPatternSynonyms a => ExpandPatternSynonyms (Common.Arg c a) where+instance ExpandPatternSynonyms a => ExpandPatternSynonyms (Arg a) where expandPatternSynonyms = traverse expandPatternSynonyms instance ExpandPatternSynonyms a => ExpandPatternSynonyms (Named n a) where expandPatternSynonyms = traverse expandPatternSynonyms +instance ExpandPatternSynonyms a => ExpandPatternSynonyms (FieldAssignment' a) where+ expandPatternSynonyms = traverse expandPatternSynonyms+ instance ExpandPatternSynonyms A.Pattern where expandPatternSynonyms p = case p of@@ -78,6 +83,7 @@ A.ConP i ds as -> A.ConP i ds <$> expandPatternSynonyms as A.DefP i q as -> A.DefP i q <$> expandPatternSynonyms as A.AsP i x p -> A.AsP i x <$> expandPatternSynonyms p+ A.RecP i as -> A.RecP i <$> expandPatternSynonyms as A.PatternSynP i x as -> setCurrentRange i $ do p <- killRange <$> lookupPatternSyn x -- Must expand arguments before instantiating otherwise pattern@@ -85,9 +91,9 @@ instPatternSyn p =<< expandPatternSynonyms as where- instPatternSyn :: A.PatternSynDefn -> [A.NamedArg A.Pattern] -> TCM A.Pattern+ instPatternSyn :: A.PatternSynDefn -> [NamedArg A.Pattern] -> TCM A.Pattern instPatternSyn (ns, p) as = do- p <- expandPatternSynonyms p+ p <- expandPatternSynonyms (vacuous p) case A.insertImplicitPatSynArgs (A.WildP . PatRange) (getRange x) ns as of Nothing -> typeError $ BadArgumentsToPatternSynonym x Just (_, _:_) -> typeError $ TooFewArgumentsToPatternSynonym x
src/full/Agda/TypeChecking/Patterns/Match.hs view
@@ -13,7 +13,7 @@ import Data.Traversable (traverse) import Agda.Syntax.Common-import Agda.Syntax.Internal as I+import Agda.Syntax.Internal import Agda.TypeChecking.Reduce import Agda.TypeChecking.Reduce.Monad@@ -114,7 +114,7 @@ -- In any case, also returns spine @es@ in reduced form -- (with all the weak head reductions performed that were necessary -- to come to a decision).-matchCopatterns :: [I.NamedArg Pattern] -> [Elim] -> ReduceM (Match Term, [Elim])+matchCopatterns :: [NamedArg Pattern] -> [Elim] -> ReduceM (Match Term, [Elim]) matchCopatterns ps vs = do traceSDoc "tc.match" 50 (vcat [ text "matchCopatterns"@@ -134,7 +134,7 @@ matchCopattern _ Proj{} = __IMPOSSIBLE__ matchCopattern p (Apply v) = mapSnd Apply <$> matchPattern p v -matchPatterns :: [I.NamedArg Pattern] -> [I.Arg Term] -> ReduceM (Match Term, [I.Arg Term])+matchPatterns :: [NamedArg Pattern] -> [Arg Term] -> ReduceM (Match Term, [Arg Term]) matchPatterns ps vs = do traceSDoc "tc.match" 50 (vcat [ text "matchPatterns"@@ -147,7 +147,7 @@ foldMatch (matchPattern . namedArg) ps vs -- | Match a single pattern.-matchPattern :: Pattern -> I.Arg Term -> ReduceM (Match Term, I.Arg Term)+matchPattern :: Pattern -> Arg Term -> ReduceM (Match Term, Arg Term) matchPattern p u = case (p, u) of (ProjP{}, _ ) -> __IMPOSSIBLE__ (VarP _ , arg@(Arg _ v)) -> return (Yes NoSimplification [v], arg)@@ -209,7 +209,7 @@ where r' = stuckOn (Apply arg) r -- ASR (08 November 2014). The type of the function could be ----- @(Match Term, [I.Arg Term]) -> (Match Term, [I.Arg Term])@.+-- @(Match Term, [Arg Term]) -> (Match Term, [Arg Term])@. yesSimplification :: (Match a, b) -> (Match a, b) yesSimplification (Yes _ vs, us) = (Yes YesSimplification vs, us) yesSimplification r = r
src/full/Agda/TypeChecking/Patterns/Match.hs-boot view
@@ -1,9 +1,9 @@ module Agda.TypeChecking.Patterns.Match where +import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.TypeChecking.Monad-import Agda.TypeChecking.Reduce.Monad data Match a = Yes Simplification [a] | No | DontKnow (Blocked ())
src/full/Agda/TypeChecking/Polarity.hs view
@@ -1,6 +1,6 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE PatternGuards #-} module Agda.TypeChecking.Polarity where @@ -13,7 +13,8 @@ import Agda.Syntax.Abstract.Name import Agda.Syntax.Common-import Agda.Syntax.Internal as I+import Agda.Syntax.Internal+import Agda.Syntax.Internal.Pattern import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty@@ -246,7 +247,7 @@ _ -> def nonvariantToUnusedArgInClause :: [Polarity] -> Clause -> Clause-nonvariantToUnusedArgInClause pol cl@Clause{clauseTel = tel, clausePerm = perm, namedClausePats = ps} =+nonvariantToUnusedArgInClause pol cl@Clause{clauseTel = tel, namedClausePats = ps} = let adjPat p Nonvariant | properlyMatching (namedArg p) = __IMPOSSIBLE__ -- if we match, we cannot be Nonvariant (sanity check) | otherwise = mapRelevance mkUnused p@@ -257,6 +258,7 @@ -- get a list of 'Relevance's for the variables bound in the pattern rels0 = getRelevance <$> (concatMap (patternVars . fmap namedThing) ps') -- this is the order the variables appear in the telescope+ perm = clausePerm cl rels = permute perm rels0 -- now improve 'Relevance' in 'Telescope' by pattern relevance updateDom UnusedArg = mapRelevance mkUnused@@ -292,7 +294,6 @@ let check c = do t <- defType <$> getConstInfo c addCtxTel (telFromList parTel) $ do- --OLD: let pars = reverse [ defaultArg $ var i | i <- [0..np - 1] ] let pars = map (defaultArg . var) $ downFrom np TelV conTel target <- telView =<< (t `piApplyM` pars) case conTel of@@ -366,10 +367,10 @@ [] -> return Nonvariant ps -> return $ foldr1 (/\) ps -instance HasPolarity a => HasPolarity (I.Arg a) where+instance HasPolarity a => HasPolarity (Arg a) where polarities i = polarities i . unArg -instance HasPolarity a => HasPolarity (I.Dom a) where+instance HasPolarity a => HasPolarity (Dom a) where polarities i = polarities i . unDom instance HasPolarity a => HasPolarity (Abs a) where@@ -410,7 +411,6 @@ MetaV _ ts -> map (const Invariant) <$> polarities i ts Shared p -> polarities i $ derefPtr p DontCare t -> polarities i t -- return []- ExtLam{} -> __IMPOSSIBLE__ instance HasPolarity Level where polarities i (Max as) = polarities i as
src/full/Agda/TypeChecking/Positivity.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE BangPatterns #-} {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}@@ -14,11 +15,13 @@ import Control.Monad.Reader import Data.Either+import qualified Data.Foldable as Fold+import Data.Function import Data.Graph (SCC(..), flattenSCC) import Data.List as List hiding (null)-import Data.Maybe (mapMaybe, fromMaybe) import Data.Map (Map) import qualified Data.Map as Map+import qualified Data.Sequence as DS import Data.Set (Set) import qualified Data.Set as Set @@ -26,9 +29,10 @@ import Test.QuickCheck -import Agda.Syntax.Position import Agda.Syntax.Common-import Agda.Syntax.Internal as I+import qualified Agda.Syntax.Info as Info+import Agda.Syntax.Internal+import Agda.Syntax.Internal.Pattern import Agda.TypeChecking.Datatypes (isDataOrRecordType, DataOrRecord(..)) import Agda.TypeChecking.Records (unguardedRecord, recursiveRecord) import Agda.TypeChecking.Monad@@ -59,14 +63,14 @@ -- -- Also add information about positivity and recursivity of records -- to the signature.-checkStrictlyPositive :: Set QName -> TCM ()-checkStrictlyPositive qset = disableDestructiveUpdate $ do+checkStrictlyPositive :: Info.MutualInfo -> Set QName -> TCM ()+checkStrictlyPositive mi qset = disableDestructiveUpdate $ do -- compute the occurrence graph for qs let qs = Set.toList qset reportSDoc "tc.pos.tick" 100 $ text "positivity of" <+> prettyTCM qs- -- remove @Unused@ edges- g <- Graph.clean <$> buildOccurrenceGraph qset- let gstar = Graph.gaussJordanFloydWarshallMcNaughtonYamada $ fmap occ g+ g <- buildOccurrenceGraph qset+ let (gstar, sccs') =+ Graph.gaussJordanFloydWarshallMcNaughtonYamada $ fmap occ g reportSDoc "tc.pos.tick" 100 $ text "constructed graph" reportSLn "tc.pos.graph" 5 $ "Positivity graph: N=" ++ show (size $ Graph.nodes g) ++ " E=" ++ show (length $ Graph.edges g)@@ -87,8 +91,7 @@ reportSDoc "tc.pos.tick" 100 $ text "set args" -- check positivity for all strongly connected components of the graph for qs- let sccs' = Graph.sccs' gstar- sccs = map flattenSCC sccs'+ let sccs = map flattenSCC sccs' reportSDoc "tc.pos.graph.sccs" 10 $ do let (triv, others) = partitionEithers $ for sccs' $ \ scc -> case scc of AcyclicSCC v -> Left v@@ -111,64 +114,69 @@ whenJustM (isDatatype q) $ \ dr -> do reportSDoc "tc.pos.check" 10 $ text "Checking positivity of" <+> prettyTCM q - let loop = Graph.lookup (DefNode q) (DefNode q) gstar- how msg p =- fsep $ [prettyTCM q] ++ pwords "is" ++- case filter (p . occ) $- -- Graph.allTrails (DefNode q) (DefNode q) g of -- exponential, see Issue 1612- Graph.allPaths (p . occ) (DefNode q) (DefNode q) g of- Edge _ how : _ -> pwords (msg ++ ", because it occurs") ++- [prettyTCM how]- _ -> pwords $ msg ++ "."+ let loop :: Maybe Occurrence+ loop = Graph.lookup (DefNode q) (DefNode q) gstar - -- For an example of code that exercises the latter,- -- uninformative clause above, see- -- test/fail/BadInductionRecursion5.agda.+ -- Note the property+ -- Agda.Utils.Graph.AdjacencyMap.Unidirectional.Tests.prop_productOfEdgesInBoundedWalk,+ -- which relates productOfEdgesInBoundedWalk to+ -- gaussJordanFloydWarshallMcNaughtonYamada. - -- If a suitable StarSemiRing instance can be- -- defined for Edge, then- -- gaussJordanFloydWarshallMcNaughtonYamada can be- -- used instead of allTrails, thus avoiding the- -- uninformative clause.+ how :: String -> Occurrence -> TCM Doc+ how msg bound =+ case productOfEdgesInBoundedWalk+ occ g (DefNode q) (DefNode q) bound of+ Just (Edge _ how) -> fsep $+ [prettyTCM q] ++ pwords "is" +++ pwords (msg ++ ", because it occurs") +++ [prettyTCM how]+ Nothing -> __IMPOSSIBLE__ -- if we have a negative loop, raise error- whenM positivityCheckEnabled $- case loop of- Just o | p o -> do- err <- how "not strictly positive" p++ -- ASR (23 December 2015). We don't raise a strictly positive+ -- error if the NO_POSITIVITY_CHECK pragma was set on in the+ -- mutual block. See Issue 1614.+ when (Info.mutualPositivityCheck mi) $+ whenM positivityCheckEnabled $+ case loop of+ Just o | o <= JustPos -> do+ err <- how "not strictly positive" JustPos setCurrentRange q $ typeError $ GenericDocError err- where p = (<= JustPos) _ -> return () -- if we find an unguarded record, mark it as such when (dr == IsRecord) $ case loop of- Just o | p o -> do- reportSDoc "tc.pos.record" 5 $ how "not guarded" p+ Just o | o <= StrictPos -> do+ reportSDoc "tc.pos.record" 5 $ how "not guarded" StrictPos unguardedRecord q checkInduction q- where p = (<= StrictPos)- _ ->- -- otherwise, if the record is recursive, mark it as well- case loop of- Just o | p o -> do- reportSDoc "tc.pos.record" 5 $ how "recursive" p- recursiveRecord q- checkInduction q- where p = (== GuardPos)- _ -> return ()+ -- otherwise, if the record is recursive, mark it as well+ Just o | o <= GuardPos -> do+ reportSDoc "tc.pos.record" 5 $ how "recursive" GuardPos+ recursiveRecord q+ checkInduction q+ _ -> return () - checkInduction q = whenM positivityCheckEnabled $ do- -- Check whether the recursive record has been declared as- -- 'Inductive' or 'Coinductive'. Otherwise, error.- unlessM (isJust . recInduction . theDef <$> getConstInfo q) $- setCurrentRange (nameBindingSite $ qnameName q) $- typeError . GenericDocError =<<- text "Recursive record" <+> prettyTCM q <+>- text "needs to be declared as either inductive or coinductive"+ checkInduction :: QName -> TCM ()+ checkInduction q =+ -- ASR (01 January 2016). We don't raise this error if the+ -- NO_POSITIVITY_CHECK pragma was set on in the record. See+ -- Issue 1760.+ when (Info.mutualPositivityCheck mi) $+ whenM positivityCheckEnabled $ do+ -- Check whether the recursive record has been declared as+ -- 'Inductive' or 'Coinductive'. Otherwise, error.+ unlessM (isJust . recInduction . theDef <$> getConstInfo q) $+ setCurrentRange (nameBindingSite $ qnameName q) $+ typeError . GenericDocError =<<+ text "Recursive record" <+> prettyTCM q <+>+ text "needs to be declared as either inductive or coinductive" occ (Edge o _) = o + isDatatype :: QName -> TCM (Maybe DataOrRecord) isDatatype q = do def <- theDef <$> getConstInfo q return $ case def of@@ -177,9 +185,16 @@ _ -> Nothing -- Set the mutually recursive identifiers for a SCC.+ setMut :: [QName] -> TCM () setMut [] = return () -- nothing to do setMut [q] = return () -- no mutual recursion setMut qs = forM_ qs $ \ q -> setMutual q (delete q qs)+ -- TODO: The previous line is at least quadratic in the length+ -- of qs (assuming that the expression "delete q qs" is always+ -- forced, for instance due to serialisation). Presumably qs is+ -- usually short, but in some cases (for instance for generated+ -- code) it may be long. Wouldn't it be better to assign a+ -- unique identifier to each SCC, and avoid storing lists? -- Set the polarity of the arguments to a couple of definitions setArgOccs :: Set QName -> [QName] -> Graph Node Occurrence -> TCM ()@@ -208,6 +223,9 @@ getDefArity def = case theDef def of defn@Function{} -> do let dropped = projectionArgs defn+ -- TODO: instantiateFull followed by arity could perhaps be+ -- optimised, presumably the instantiation can be performed+ -- lazily. subtract dropped . arity <$> instantiateFull (defType def) Datatype{ dataPars = n } -> return n Record{ recPars = n } -> return n@@ -219,33 +237,31 @@ -- | Description of an occurrence. data OccursWhere- = LeftOfArrow OccursWhere- | DefArg QName Nat OccursWhere -- ^ in the nth argument of a define constant- | UnderInf OccursWhere -- ^ in the principal argument of built-in ∞- | VarArg OccursWhere -- ^ as an argument to a bound variable- | MetaArg OccursWhere -- ^ as an argument of a metavariable- | ConArgType QName OccursWhere -- ^ in the type of a constructor- | IndArgType QName OccursWhere -- ^ in a datatype index of a constructor- | InClause Nat OccursWhere -- ^ in the nth clause of a defined function- | Matched OccursWhere -- ^ matched against in a clause of a defined function- | InDefOf QName OccursWhere -- ^ in the definition of a constant- | Here- | Unknown -- ^ an unknown position (treated as negative)+ = Unknown+ -- ^ an unknown position (treated as negative)+ | Known (DS.Seq Where)+ -- ^ The elements of the sequence, from left to right, explain how+ -- to get to the occurrence. deriving (Show, Eq, Ord) +-- | One part of the description of an occurrence.+data Where+ = LeftOfArrow+ | DefArg QName Nat -- ^ in the nth argument of a define constant+ | UnderInf -- ^ in the principal argument of built-in ∞+ | VarArg -- ^ as an argument to a bound variable+ | MetaArg -- ^ as an argument of a metavariable+ | ConArgType QName -- ^ in the type of a constructor+ | IndArgType QName -- ^ in a datatype index of a constructor+ | InClause Nat -- ^ in the nth clause of a defined function+ | Matched -- ^ matched against in a clause of a defined function+ | InDefOf QName -- ^ in the definition of a constant+ deriving (Show, Eq, Ord)+ (>*<) :: OccursWhere -> OccursWhere -> OccursWhere-Here >*< o = o-Unknown >*< o = Unknown-LeftOfArrow o1 >*< o2 = LeftOfArrow (o1 >*< o2)-DefArg d i o1 >*< o2 = DefArg d i (o1 >*< o2)-UnderInf o1 >*< o2 = UnderInf (o1 >*< o2)-VarArg o1 >*< o2 = VarArg (o1 >*< o2)-MetaArg o1 >*< o2 = MetaArg (o1 >*< o2)-ConArgType c o1 >*< o2 = ConArgType c (o1 >*< o2)-IndArgType c o1 >*< o2 = IndArgType c (o1 >*< o2)-InClause i o1 >*< o2 = InClause i (o1 >*< o2)-Matched o1 >*< o2 = Matched (o1 >*< o2)-InDefOf d o1 >*< o2 = InDefOf d (o1 >*< o2)+Unknown >*< _ = Unknown+Known _ >*< Unknown = Unknown+Known os1 >*< Known os2 = Known (os1 DS.>< os2) instance PrettyTCM OccursWhere where prettyTCM o = prettyOs $ map maxOneLeftOfArrow $ uniq $ splitOnDef o@@ -262,72 +278,54 @@ prettyOs [o] = prettyO o <> text "." prettyOs (o:os) = prettyO o <> text ", which occurs" $$ prettyOs os - prettyO o = case o of- Here -> empty- Unknown -> empty- LeftOfArrow o -> explain o $ pwords "to the left of an arrow"- DefArg q i o -> explain o $ pwords "in the" ++ nth i ++ pwords "argument to" ++- [prettyTCM q]- UnderInf o -> do- Def inf _ <- ignoreSharing <$> primInf -- this cannot fail if an 'UnderInf' has been generated- explain o $ pwords "under" ++ [prettyTCM inf]- VarArg o -> explain o $ pwords "in an argument to a bound variable"- MetaArg o -> explain o $ pwords "in an argument to a metavariable"- ConArgType c o -> explain o $ pwords "in the type of the constructor" ++ [prettyTCM c]- IndArgType c o -> explain o $ pwords "in an index of the target type of the constructor" ++ [prettyTCM c]- InClause i o -> explain o $ pwords "in the" ++ nth i ++ pwords "clause"- Matched o -> explain o $ pwords "as matched against"- InDefOf d o -> explain o $ pwords "in the definition of" ++ [prettyTCM d]+ prettyO Unknown = empty+ prettyO (Known ws) =+ Fold.foldrM (\w d -> return d $$ fsep (prettyW w)) empty ws - explain o ds = prettyO o $$ fsep ds+ prettyW w = case w of+ LeftOfArrow -> pwords "to the left of an arrow"+ DefArg q i -> pwords "in the" ++ nth i ++ pwords "argument to" +++ [prettyTCM q]+ UnderInf -> pwords "under" +++ [do -- this cannot fail if an 'UnderInf' has been generated+ Def inf _ <- ignoreSharing <$> primInf+ prettyTCM inf]+ VarArg -> pwords "in an argument to a bound variable"+ MetaArg -> pwords "in an argument to a metavariable"+ ConArgType c -> pwords "in the type of the constructor" ++ [prettyTCM c]+ IndArgType c -> pwords "in an index of the target type of the constructor" ++ [prettyTCM c]+ InClause i -> pwords "in the" ++ nth i ++ pwords "clause"+ Matched -> pwords "as matched against"+ InDefOf d -> pwords "in the definition of" ++ [prettyTCM d] - maxOneLeftOfArrow o = case o of- LeftOfArrow o -> LeftOfArrow $ purgeArrows o- Here -> Here- Unknown -> Unknown- DefArg q i o -> DefArg q i $ maxOneLeftOfArrow o- UnderInf o -> UnderInf $ maxOneLeftOfArrow o- InDefOf d o -> InDefOf d $ maxOneLeftOfArrow o- VarArg o -> VarArg $ maxOneLeftOfArrow o- MetaArg o -> MetaArg $ maxOneLeftOfArrow o- ConArgType c o -> ConArgType c $ maxOneLeftOfArrow o- IndArgType c o -> IndArgType c $ maxOneLeftOfArrow o- InClause i o -> InClause i $ maxOneLeftOfArrow o- Matched o -> Matched $ maxOneLeftOfArrow o+ maxOneLeftOfArrow Unknown = Unknown+ maxOneLeftOfArrow (Known ws) = Known $+ noArrows+ DS.><+ case DS.viewl startsWithArrow of+ DS.EmptyL -> DS.empty+ w DS.:< ws -> w DS.<| DS.filter (not . isArrow) ws+ where+ (noArrows, startsWithArrow) = DS.breakl isArrow ws - purgeArrows o = case o of- LeftOfArrow o -> purgeArrows o- Here -> Here- Unknown -> Unknown- DefArg q i o -> DefArg q i $ purgeArrows o- UnderInf o -> UnderInf $ purgeArrows o- InDefOf d o -> InDefOf d $ purgeArrows o- VarArg o -> VarArg $ purgeArrows o- MetaArg o -> MetaArg $ purgeArrows o- ConArgType c o -> ConArgType c $ purgeArrows o- IndArgType c o -> IndArgType c $ purgeArrows o- InClause i o -> InClause i $ purgeArrows o- Matched o -> Matched $ purgeArrows o+ isArrow LeftOfArrow{} = True+ isArrow _ = False - splitOnDef o = case o of- Here -> [Here]- Unknown -> [Unknown]- InDefOf d o -> sp (InDefOf d) o- LeftOfArrow o -> sp LeftOfArrow o- DefArg q i o -> sp (DefArg q i) o- UnderInf o -> sp UnderInf o- VarArg o -> sp VarArg o- MetaArg o -> sp MetaArg o- ConArgType c o -> sp (ConArgType c) o- IndArgType c o -> sp (IndArgType c) o- InClause i o -> sp (InClause i) o- Matched o -> sp Matched o+ splitOnDef Unknown = [Unknown]+ splitOnDef (Known ws) = split ws DS.empty where- sp f o = case splitOnDef o of- os@(InDefOf _ _:_) -> f Here : os- o:os -> f o : os- [] -> __IMPOSSIBLE__+ split ws acc = case DS.viewl ws of+ w@InDefOf{} DS.:< ws -> let rest = split ws (DS.singleton w) in+ if DS.null acc+ then rest+ else Known acc : rest+ w DS.:< ws -> split ws (acc DS.|> w)+ DS.EmptyL -> [Known acc] +instance Sized OccursWhere where+ size Unknown = 1+ size (Known ws) = 1 + size ws+ -- Computing occurrences -------------------------------------------------- data Item = AnArg Nat@@ -336,28 +334,93 @@ type Occurrences = Map Item [OccursWhere] -(>+<) :: Occurrences -> Occurrences -> Occurrences-(>+<) = Map.unionWith (++)+-- | Used to build 'Occurrences' and occurrence graphs.+data OccurrencesBuilder+ = Concat [OccurrencesBuilder]+ | OccursAs Where OccurrencesBuilder+ | OccursHere Item+ | OnlyVarsUpTo Nat OccurrencesBuilder+ -- ^ @OnlyVarsUpTo n occs@ discards occurrences of de Bruijn index+ -- @>= n@. -concatOccurs :: [Occurrences] -> Occurrences-concatOccurs = Map.unionsWith (++)+-- | Used to build 'Occurrences' and occurrence graphs.+data OccurrencesBuilder'+ = Concat' [OccurrencesBuilder']+ | OccursAs' Where OccurrencesBuilder'+ | OccursHere' Item OccursWhere -occursAs :: (OccursWhere -> OccursWhere) -> Occurrences -> Occurrences-occursAs f = Map.map (map f)+emptyOB :: OccurrencesBuilder+emptyOB = Concat [] -here :: Item -> Occurrences-here i = Map.singleton i [Here]+(>+<) :: OccurrencesBuilder -> OccurrencesBuilder -> OccurrencesBuilder+occs1 >+< occs2 = Concat [occs1, occs2] --- | @onlyVarsUpTo n occs@ discards occurrences of de Bruijn index @>= n@.-onlyVarsUpTo :: Nat -> Occurrences -> Occurrences-onlyVarsUpTo n = Map.filterWithKey p- where p (AnArg i) v = i < n- p (ADef q) v = True+-- | Removes 'OnlyVarsUpTo' entries and adds 'OccursWhere' entries.+--+-- WARNING: There can be lots of sharing between the generated+-- 'OccursWhere' entries. Traversing all of these entries could be+-- expensive. (See 'computeEdges' for an example.)+preprocess :: OccurrencesBuilder -> OccurrencesBuilder'+preprocess ob = case pp Nothing DS.empty ob of+ Nothing -> Concat' []+ Just ob -> ob+ where+ pp :: Maybe Nat+ -- ^ Variables larger than or equal to this number, if any,+ -- are not retained.+ -> DS.Seq Where+ -> OccurrencesBuilder+ -> Maybe OccurrencesBuilder'+ pp !m ws (Concat obs) = case catMaybes $ map (pp m ws) obs of+ [] -> Nothing+ obs -> return (Concat' obs)+ pp m ws (OccursAs w ob) = OccursAs' w <$> pp m (ws DS.|> w) ob+ pp m ws (OnlyVarsUpTo n ob) = pp (Just $! maybe n (min n) m) ws ob+ pp m ws (OccursHere i) = do guard keep+ return (OccursHere' i (Known ws))+ where+ keep = case (m, i) of+ (Nothing, _) -> True+ (_, ADef _) -> True+ (Just m, AnArg i) -> i < m +-- | A type used locally in 'flatten'.+data OccursWheres+ = OccursWheres :++ OccursWheres+ | Occurs OccursWhere++-- | An interpreter for 'OccurrencesBuilder'.+--+-- WARNING: There can be lots of sharing between the generated+-- 'OccursWhere' entries. Traversing all of these entries could be+-- expensive. (See 'computeEdges' for an example.)+flatten :: OccurrencesBuilder -> Occurrences+flatten =+ fmap (flip flatten'' []) .+ Map.fromListWith (:++) .+ flip flatten' [] .+ preprocess+ where+ flatten' :: OccurrencesBuilder'+ -> [(Item, OccursWheres)] -> [(Item, OccursWheres)]+ flatten' (Concat' obs) = foldr (\occs f -> flatten' occs . f) id obs+ flatten' (OccursAs' _ ob) = flatten' ob+ flatten' (OccursHere' i o) = ((i, Occurs o) :)++ flatten'' (os1 :++ os2) = flatten'' os1 . flatten'' os2+ flatten'' (Occurs o) = (o :)+ -- | Context for computing occurrences. data OccEnv = OccEnv- { vars :: [Maybe Item] -- ^ Items corresponding to the free variables.- , inf :: Maybe QName -- ^ Name for ∞ builtin.+ { vars :: [Maybe Item]+ -- ^ Items corresponding to the free variables.+ --+ -- Potential invariant: It seems as if the list has the form+ -- @'genericReplicate' n 'Nothing' ++ 'map' ('Just' . 'AnArg') is@,+ -- for some @n@ and @is@, where @is@ is decreasing+ -- (non-strictly).+ , inf :: Maybe QName+ -- ^ Name for ∞ builtin. } -- | Monad for computing occurrences.@@ -369,7 +432,7 @@ -- | Running the monad getOccurrences :: (Show a, PrettyTCM a, ComputeOccurrences a)- => [Maybe Item] -> a -> TCM Occurrences+ => [Maybe Item] -> a -> TCM OccurrencesBuilder getOccurrences vars a = do reportSDoc "tc.pos.occ" 70 $ text "computing occurrences in " <+> text (show a) reportSDoc "tc.pos.occ" 20 $ text "computing occurrences in " <+> prettyTCM a@@ -377,19 +440,20 @@ return $ runReader (occurrences a) $ OccEnv vars $ fmap nameOfInf kit class ComputeOccurrences a where- occurrences :: a -> OccM Occurrences+ occurrences :: a -> OccM OccurrencesBuilder instance ComputeOccurrences Clause where occurrences cl = do- let ps = clausePats cl- (concatOccurs (mapMaybe matching (zip [0..] ps)) >+<) <$>+ let ps = unnumberPatVars $ clausePats cl+ (Concat (mapMaybe matching (zip [0..] ps)) >+<) <$> walk (patItems ps) (clauseBody cl) where matching (i, p)- | properlyMatching (unArg p) = Just $ occursAs Matched $ here $ AnArg i+ | properlyMatching (unArg p) = Just $ OccursAs Matched $+ OccursHere $ AnArg i | otherwise = Nothing - walk _ NoBody = return empty+ walk _ NoBody = return emptyOB walk [] (Body v) = occurrences v walk (i : pis) (Bind b) = withExtendedOccEnv i $ walk pis $ absBody b walk [] Bind{} = __IMPOSSIBLE__@@ -402,7 +466,7 @@ -- @patItem i p@ replicates index @i@ as often as there are -- pattern variables in @p@ (dot patterns count as variable)- patItem :: Int -> I.Arg Pattern -> [Maybe Item]+ patItem :: Int -> Arg Pattern -> [Maybe Item] patItem i p = map (const $ Just $ AnArg i) $ patternVars p instance ComputeOccurrences Term where@@ -416,40 +480,39 @@ | otherwise = flip trace __IMPOSSIBLE__ $ "impossible: occurrence of de Bruijn index " ++ show i ++ " in vars " ++ show vars ++ " is unbound"- return $ maybe empty here mi >+< occursAs VarArg occs+ return $ maybe emptyOB OccursHere mi >+< OccursAs VarArg occs Def d args -> do inf <- asks inf- let occsAs = if Just d /= inf then occursAs . DefArg d else \ n ->+ let occsAs = if Just d /= inf then OccursAs . DefArg d else \ n -> -- the principal argument of builtin INF (∞) is the second (n==1) -- the first is a level argument (n==0, counting from 0!)- if n == 1 then occursAs UnderInf else occursAs (DefArg d n)+ if n == 1 then OccursAs UnderInf else OccursAs (DefArg d n) occs <- mapM occurrences args- return $ here (ADef d) >+< concatOccurs (zipWith occsAs [0..] occs)+ return $ OccursHere (ADef d) >+< Concat (zipWith occsAs [0..] occs) Con c args -> occurrences args- MetaV _ args -> occursAs MetaArg <$> occurrences args+ MetaV _ args -> OccursAs MetaArg <$> occurrences args Pi a b -> do oa <- occurrences a ob <- occurrences b- return $ occursAs LeftOfArrow oa >+< ob+ return $ OccursAs LeftOfArrow oa >+< ob Lam _ b -> occurrences b Level l -> occurrences l- Lit{} -> return empty- Sort{} -> return empty- DontCare _ -> return empty -- Andreas, 2011-09-09: do we need to check for negative occurrences in irrelevant positions?+ Lit{} -> return emptyOB+ Sort{} -> return emptyOB+ DontCare _ -> return emptyOB -- Andreas, 2011-09-09: do we need to check for negative occurrences in irrelevant positions? Shared p -> occurrences $ derefPtr p- ExtLam{} -> __IMPOSSIBLE__ instance ComputeOccurrences Level where occurrences (Max as) = occurrences as instance ComputeOccurrences PlusLevel where- occurrences ClosedLevel{} = return empty+ occurrences ClosedLevel{} = return emptyOB occurrences (Plus _ l) = occurrences l instance ComputeOccurrences LevelAtom where occurrences l = case l of- MetaLevel _ vs -> occursAs MetaArg <$> occurrences vs+ MetaLevel _ vs -> OccursAs MetaArg <$> occurrences vs BlockedLevel _ v -> occurrences v NeutralLevel _ v -> occurrences v UnreducedLevel v -> occurrences v@@ -458,7 +521,7 @@ occurrences (El _ v) = occurrences v instance ComputeOccurrences a => ComputeOccurrences (Tele a) where- occurrences EmptyTel = return empty+ occurrences EmptyTel = return emptyOB occurrences (ExtendTel a b) = occurrences (a, b) instance ComputeOccurrences a => ComputeOccurrences (Abs a) where@@ -469,14 +532,14 @@ occurrences Proj{} = __IMPOSSIBLE__ occurrences (Apply a) = occurrences a -instance ComputeOccurrences a => ComputeOccurrences (I.Arg a) where+instance ComputeOccurrences a => ComputeOccurrences (Arg a) where occurrences = occurrences . unArg -instance ComputeOccurrences a => ComputeOccurrences (I.Dom a) where+instance ComputeOccurrences a => ComputeOccurrences (Dom a) where occurrences = occurrences . unDom instance ComputeOccurrences a => ComputeOccurrences [a] where- occurrences vs = concatOccurs <$> mapM occurrences vs+ occurrences vs = Concat <$> mapM occurrences vs instance (ComputeOccurrences a, ComputeOccurrences b) => ComputeOccurrences (a, b) where occurrences (x, y) = do@@ -484,26 +547,34 @@ oy <- occurrences y return $ ox >+< oy --- | Compute the occurrences in a given definition.+-- | Computes the occurrences in the given definition.+--+-- WARNING: There can be lots of sharing between the 'OccursWhere'+-- entries. Traversing all of these entries could be expensive. (See+-- 'computeEdges' for an example.) computeOccurrences :: QName -> TCM Occurrences-computeOccurrences q = inConcreteOrAbstractMode q $ do+computeOccurrences q = flatten <$> computeOccurrences' q++-- | Computes the occurrences in the given definition.+computeOccurrences' :: QName -> TCM OccurrencesBuilder+computeOccurrences' q = inConcreteOrAbstractMode q $ do reportSDoc "tc.pos" 25 $ do a <- defAbstract <$> getConstInfo q m <- asks envAbstractMode text "computeOccurrences" <+> prettyTCM q <+> text (show a) <+> text (show m) def <- getConstInfo q- occursAs (InDefOf q) <$> case theDef def of+ OccursAs (InDefOf q) <$> case theDef def of Function{funClauses = cs} -> do n <- getDefArity def cs <- map (etaExpandClause n) <$> instantiateFull cs- concatOccurs . zipWith (occursAs . InClause) [0..] <$>+ Concat . zipWith (OccursAs . InClause) [0..] <$> mapM (getOccurrences []) cs Datatype{dataClause = Just c} -> getOccurrences [] =<< instantiateFull c Datatype{dataPars = np, dataCons = cs} -> do -- Andreas, 2013-02-27: first, each data index occurs as matched on. TelV tel t <- telView $ defType def let xs = [np .. size tel - 1] -- argument positions corresponding to indices- ioccs = concatOccurs $ map (occursAs Matched . here . AnArg) xs+ ioccs = Concat $ map (OccursAs Matched . OccursHere . AnArg) xs -- Then, we compute the occurrences in the constructor types. let conOcc c = do a <- defType <$> getConstInfo c@@ -513,9 +584,9 @@ _ -> __IMPOSSIBLE__ let tel' = telFromList $ genericDrop np $ telToList tel vars np = map (Just . AnArg) $ downFrom np- (>+<) <$> (occursAs (ConArgType c) <$> getOccurrences (vars np) tel')- <*> (occursAs (IndArgType c) . onlyVarsUpTo np <$> getOccurrences (vars $ size tel) indices)- (>+<) ioccs <$> (concatOccurs <$> mapM conOcc cs)+ (>+<) <$> (OccursAs (ConArgType c) <$> getOccurrences (vars np) tel')+ <*> (OccursAs (IndArgType c) . OnlyVarsUpTo np <$> getOccurrences (vars $ size tel) indices)+ (>+<) ioccs <$> (Concat <$> mapM conOcc cs) Record{recClause = Just c} -> getOccurrences [] =<< instantiateFull c Record{recPars = np, recTel = tel} -> do let tel' = telFromList $ genericDrop np $ telToList tel@@ -523,24 +594,23 @@ getOccurrences vars =<< instantiateFull tel' -- Arguments to other kinds of definitions are hard-wired.- Constructor{} -> return empty- Axiom{} -> return empty- Primitive{} -> return empty+ Constructor{} -> return emptyOB+ Axiom{} -> return emptyOB+ Primitive{} -> return emptyOB -- | Eta expand a clause to have the given number of variables. -- Warning: doesn't put correct types in telescope! -- This is used instead of special treatment of lambdas -- (which was unsound: issue 121) etaExpandClause :: Nat -> Clause -> Clause-etaExpandClause n c@Clause{ clauseTel = tel, clausePerm = perm, namedClausePats = ps, clauseBody = b }+etaExpandClause n c@Clause{ clauseTel = tel, namedClausePats = ps, clauseBody = b } | m <= 0 = c | otherwise = c- { namedClausePats = ps ++ genericReplicate m (defaultArg $ unnamed $ VarP underscore)+ { namedClausePats = raise m ps ++ map (defaultArg . unnamed . VarP . (,underscore)) (downFrom m) , clauseBody = liftBody m b , clauseTel = telFromList $ telToList tel ++ (replicate m $ (underscore,) <$> dummyDom) -- dummyDom, not __IMPOSSIBLE__, because of debug printing.- , clausePerm = Perm.liftP m perm -- Andreas, 2015-06-28 this is probably correct. } where m = n - genericLength ps@@ -557,8 +627,8 @@ -- Building the occurrence graph ------------------------------------------ -data Node = DefNode QName- | ArgNode QName Nat+data Node = DefNode !QName+ | ArgNode !QName !Nat deriving (Eq, Ord) instance Show Node where@@ -574,7 +644,7 @@ prettyTCM o <+> prettyTCM n <+> fsep (pwords $ show w) -- | Edge labels for the positivity graph.-data Edge = Edge Occurrence OccursWhere+data Edge = Edge !Occurrence OccursWhere deriving (Eq, Ord, Show) instance Null Edge where@@ -611,124 +681,165 @@ instance StarSemiRing Edge where ostar (Edge o w) = Edge (ostar o) w +-- | WARNING: There can be lots of sharing between the 'OccursWhere'+-- entries in the edges. Traversing all of these entries could be+-- expensive. (See 'computeEdges' for an example.) buildOccurrenceGraph :: Set QName -> TCM (Graph Node Edge)-buildOccurrenceGraph qs = Graph.unionsWith oplus <$> mapM defGraph (Set.toList qs)+buildOccurrenceGraph qs =+ Graph.fromListWith oplus . concat <$>+ mapM defGraph (Set.toList qs) where- defGraph :: QName -> TCM (Graph Node Edge)+ defGraph :: QName -> TCM [Graph.Edge Node Node Edge] defGraph q = do- occs <- computeOccurrences q- Graph.unionsWith oplus <$> do- forM (Map.assocs occs) $ \ (item, occs) -> do- let src = itemToNode item- es <- mapM (computeEdge qs) occs- return $ Graph.unionsWith oplus $- for es $ \ (tgt, w) -> Graph.singleton src tgt w- where- itemToNode (AnArg i) = ArgNode q i- itemToNode (ADef q) = DefNode q+ occs <- computeOccurrences' q+ es <- computeEdges qs q occs --- | Given an 'OccursWhere' computes the target node and an 'Edge'. The first--- argument is the set of names in the current mutual block.-computeEdge :: Set QName -> OccursWhere -> TCM (Node, Edge)-computeEdge muts o = do- (to, occ) <- mkEdge __IMPOSSIBLE__ StrictPos o- return (to, Edge occ o)+ reportSDoc "tc.pos.occs" 40 $+ (text "Occurrences in" <+> prettyTCM q <> text ":")+ $+$+ (nest 2 $ vcat $+ map (\(i, (n, s)) ->+ text (show i) <> text ":" <+> text (show n) <+>+ text "occurrences, of total size" <+>+ text (show s)) $+ sortBy (compare `on` fst . snd) $+ map (\(i, os) -> (i, (length os, sum $ map size os))) $+ Map.toList (flatten occs))+ reportSDoc "tc.pos.occs" 50 $+ (nest 2 $ vcat $+ map (\(i, os) ->+ (text (show i) <> text ":")+ $+$+ (nest 2 $ vcat $ map (text . show) os))+ (Map.toList (flatten occs)))+ reportSDoc "tc.pos.occs.edges" 60 $+ text "Edges:"+ $+$+ (nest 2 $ vcat $+ map (\e ->+ let Edge o w = Graph.label e in+ prettyTCM (Graph.source e) <+>+ text "-[" <+> text (show o) <> text "," <+>+ text (show w) <+> text "]->" <+>+ prettyTCM (Graph.target e))+ es)++ return es++-- | Computes all non-'ozero' occurrence graph edges represented by+-- the given 'OccurrencesBuilder'.+--+-- WARNING: There can be lots of sharing between the 'OccursWhere'+-- entries in the edges. Traversing all of these entries could be+-- expensive. For instance, for the function @F@ in+-- @benchmark/misc/SlowOccurrences.agda@ a large number of edges from+-- the argument @X@ to the function @F@ are computed. These edges have+-- polarity 'StrictPos', 'JustNeg' or 'JustPos', and contain the+-- following 'OccursWhere' elements:+--+-- * @'Known' ('DS.fromList' ['InDefOf' "F", 'InClause' 0])@,+--+-- * @'Known' ('DS.fromList' ['InDefOf' "F", 'InClause' 0, 'LeftOfArrow'])@,+--+-- * @'Known' ('DS.fromList' ['InDefOf' "F", 'InClause' 0, 'LeftOfArrow', 'LeftOfArrow'])@,+--+-- * @'Known' ('DS.fromList' ['InDefOf' "F", 'InClause' 0, 'LeftOfArrow', 'LeftOfArrow', 'LeftOfArrow'])@,+--+-- * and so on.+computeEdges+ :: Set QName+ -- ^ The names in the current mutual block.+ -> QName+ -- ^ The current name.+ -> OccurrencesBuilder+ -> TCM [Graph.Edge Node Node Edge]+computeEdges muts q ob =+ ($ []) <$> mkEdge __IMPOSSIBLE__ StrictPos (preprocess ob) where- mkEdge to pol o = case o of- Here -> return (to, pol)- Unknown -> return (to, Mixed)- VarArg o -> mixed o- MetaArg o -> mixed o- LeftOfArrow o -> negative o- DefArg d i o -> do- isDR <- isDataOrRecordType d- let pol' | isDR == Just IsData = GuardPos -- a datatype is guarding- | otherwise = StrictPos- if Set.member d muts then mkEdge (ArgNode d i) pol' o- else addPol o =<< otimes pol' <$> getArgOccurrence d i-{-- DefArg d i o- | Set.member d muts -> inArg d i o- | otherwise -> addPol o =<< getArgOccurrence d i--}- UnderInf o -> addPol o GuardPos -- Andreas, 2012-06-09: ∞ is guarding- ConArgType _ o -> keepGoing o- IndArgType _ o -> mixed o- InClause _ o -> keepGoing o- Matched o -> mixed o -- consider arguments matched against as used- InDefOf d o -> do- isDR <- isDataOrRecordType d- let pol' | isDR == Just IsData = GuardPos -- a datatype is guarding- | otherwise = StrictPos- mkEdge (DefNode d) pol' o- where- keepGoing = mkEdge to pol- mixed = mkEdge to Mixed- negative o = mkEdge to (otimes pol JustNeg) o- addPol o pol' = mkEdge to (otimes pol pol') o+ mkEdge to !pol ob = case ob of+ Concat' obs -> foldr (liftM2 (.)) (return id)+ [ mkEdge to pol ob | ob <- obs ]+ OccursAs' w ob -> do (to, pol) <- mkEdge' to pol w+ mkEdge to pol ob+ OccursHere' i o -> return $+ if null pol+ then id+ else (Graph.Edge+ { Graph.source = case i of+ AnArg i -> ArgNode q i+ ADef q -> DefNode q+ , Graph.target = to+ , Graph.label = Edge pol o+ } :) - -- Reset polarity when changing the target node- -- D: (A B -> C) generates a positive edge B --> A.1- -- even though the context is negative.- inArg d i = mkEdge (ArgNode d i) StrictPos+ mkEdge' to !pol w = case w of+ VarArg -> mixed+ MetaArg -> mixed+ LeftOfArrow -> negative+ DefArg d i -> do+ pol' <- isGuarding d+ if Set.member d muts+ then return (ArgNode d i, pol')+ else addPol =<< otimes pol' <$> getArgOccurrence d i+ UnderInf -> addPol GuardPos -- Andreas, 2012-06-09: ∞ is guarding+ ConArgType _ -> keepGoing+ IndArgType _ -> mixed+ InClause _ -> keepGoing+ Matched -> mixed -- consider arguments matched against as used+ InDefOf d -> do+ pol' <- isGuarding d+ return (DefNode d, pol')+ where+ keepGoing = return (to, pol)+ mixed = return (to, Mixed)+ negative = return (to, otimes pol JustNeg)+ addPol pol' = return (to, otimes pol pol') + isGuarding d = do+ isDR <- isDataOrRecordType d+ return $ case isDR of+ Just IsData -> GuardPos -- a datatype is guarding+ _ -> StrictPos+ ------------------------------------------------------------------------ -- * Generators and tests ------------------------------------------------------------------------ instance Arbitrary OccursWhere where- arbitrary = sized arbitraryS- where- arbitraryS n = oneof $- [ return Here- , return Unknown- ] ++- if n <= 0 then [] else- [ LeftOfArrow <$> arb- , DefArg <$> arbitrary <*> arbitrary <*> arb- , UnderInf <$> arb- , VarArg <$> arb- , MetaArg <$> arb- , ConArgType <$> arbitrary <*> arb- , IndArgType <$> arbitrary <*> arb- , InClause <$> arbitrary <*> arb- , Matched <$> arb- , InDefOf <$> arbitrary <*> arb- ]- where arb = arbitraryS (n - 1)+ arbitrary = oneof [return Unknown, Known <$> arbitrary] - shrink x = replaceConstructor x ++ genericShrink x- where- replaceConstructor Here = []- replaceConstructor Unknown = []- replaceConstructor _ = [Here, Unknown]+ shrink Unknown = []+ shrink (Known ws) = Unknown : [ Known ws | ws <- shrink ws ] - genericShrink (LeftOfArrow a) = a : [ LeftOfArrow a | a <- shrink a ]- genericShrink (DefArg a b c) = c : [ DefArg a b c | c <- shrink c ]- genericShrink (UnderInf a) = a : [ UnderInf a | a <- shrink a ]- genericShrink (VarArg a) = a : [ VarArg a | a <- shrink a ]- genericShrink (MetaArg a) = a : [ MetaArg a | a <- shrink a ]- genericShrink (ConArgType a b) = b : [ ConArgType a b | b <- shrink b ]- genericShrink (IndArgType a b) = b : [ IndArgType a b | b <- shrink b ]- genericShrink (InClause a b) = b : [ InClause a b | b <- shrink b ]- genericShrink (Matched a) = a : [ Matched a | a <- shrink a ]- genericShrink (InDefOf a b) = b : [ InDefOf a b | b <- shrink b ]- genericShrink Here = []- genericShrink Unknown = []+instance Arbitrary Where where+ arbitrary = oneof+ [ return LeftOfArrow+ , DefArg <$> arbitrary <*> arbitrary+ , return UnderInf+ , return VarArg+ , return MetaArg+ , ConArgType <$> arbitrary+ , IndArgType <$> arbitrary+ , InClause <$> arbitrary+ , return Matched+ , InDefOf <$> arbitrary+ ] instance CoArbitrary OccursWhere where- coarbitrary (LeftOfArrow a) = variant 0 . coarbitrary a- coarbitrary (DefArg a b c) = variant 1 . coarbitrary (a, b, c)- coarbitrary (UnderInf a) = variant 2 . coarbitrary a- coarbitrary (VarArg a) = variant 3 . coarbitrary a- coarbitrary (MetaArg a) = variant 4 . coarbitrary a- coarbitrary (ConArgType a b) = variant 5 . coarbitrary (a, b)- coarbitrary (IndArgType a b) = variant 6 . coarbitrary (a, b)- coarbitrary (InClause a b) = variant 7 . coarbitrary (a, b)- coarbitrary (Matched a) = variant 8 . coarbitrary a- coarbitrary (InDefOf a b) = variant 9 . coarbitrary (a, b)- coarbitrary Here = variant 10- coarbitrary Unknown = variant 11+ coarbitrary (Known ws) = variant 0 . coarbitrary ws+ coarbitrary Unknown = variant 1++instance CoArbitrary Where where+ coarbitrary LeftOfArrow = variant 0+ coarbitrary (DefArg a b) = variant 1 . coarbitrary (a, b)+ coarbitrary UnderInf = variant 2+ coarbitrary VarArg = variant 3+ coarbitrary MetaArg = variant 4+ coarbitrary (ConArgType a) = variant 5 . coarbitrary a+ coarbitrary (IndArgType a) = variant 6 . coarbitrary a+ coarbitrary (InClause a) = variant 7 . coarbitrary a+ coarbitrary Matched = variant 8+ coarbitrary (InDefOf a) = variant 9 . coarbitrary a instance Arbitrary Edge where arbitrary = Edge <$> arbitrary <*> arbitrary
src/full/Agda/TypeChecking/Positivity/Occurrence.hs view
@@ -1,18 +1,36 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE TemplateHaskell #-} -- | Occurrences. -module Agda.TypeChecking.Positivity.Occurrence where+module Agda.TypeChecking.Positivity.Occurrence+ ( Occurrence(..)+ , boundToEverySome+ , productOfEdgesInBoundedWalk+ , Agda.TypeChecking.Positivity.Occurrence.tests+ ) where +import Control.Applicative import Control.DeepSeq+import Control.Monad+import Data.Either+import Data.Maybe import Data.Typeable (Typeable)+import Data.Map.Strict (Map)+import qualified Data.Map.Strict as Map import Test.QuickCheck import Agda.Syntax.Position+import Agda.Utils.Graph.AdjacencyMap.Unidirectional (Graph)+import qualified Agda.Utils.Graph.AdjacencyMap.Unidirectional as Graph+import Agda.Utils.List import Agda.Utils.Null import Agda.Utils.SemiRing +#include "undefined.h"+import Agda.Utils.Impossible+ -- | Subterm occurrences for positivity checking. -- The constructors are listed in increasing information they provide: -- @Mixed <= JustPos <= StrictPos <= GuardPos <= Unused@@@ -90,6 +108,53 @@ instance Null Occurrence where empty = Unused +-- | The map contains bindings of the form @bound |-> es@, satisfying+-- the following property: for every non-empty list @w@,+-- @'foldr1' 'otimes' w '<=' bound@ iff+-- @'or' [ 'all' every w '&&' 'any' some w | (every, some) <- ess ]@.++boundToEverySome ::+ Map Occurrence [(Occurrence -> Bool, Occurrence -> Bool)]+boundToEverySome = Map.fromList+ [ ( JustPos+ , [((/= Unused), (`elem` [Mixed, JustNeg, JustPos]))]+ )+ , ( StrictPos+ , [ ((/= Unused), (`elem` [Mixed, JustNeg, JustPos]))+ , ((not . (`elem` [Unused, GuardPos])), const True)+ ]+ )+ , ( GuardPos+ , [((/= Unused), const True)]+ )+ ]++-- | @productOfEdgesInBoundedWalk occ g u v bound@ returns @'Just' e@+-- iff there is a walk @c@ (a list of edges) in @g@, from @u@ to @v@,+-- for which the product @'foldr1' 'otimes' ('map' occ c) '<=' bound@.+-- In this case the returned value @e@ is the product @'foldr1'+-- 'otimes' c@ for one such walk.+--+-- Preconditions: @u@ and @v@ must belong to @g@, and @bound@ must+-- belong to the domain of @boundToEverySome@.++-- There is a property for this function in+-- Agda.Utils.Graph.AdjacencyMap.Unidirectional.Tests.++productOfEdgesInBoundedWalk ::+ (SemiRing e, Ord n) =>+ (e -> Occurrence) -> Graph n n e -> n -> n -> Occurrence -> Maybe e+productOfEdgesInBoundedWalk occ g u v bound =+ case Map.lookup bound boundToEverySome of+ Nothing -> __IMPOSSIBLE__+ Just ess ->+ case msum [ Graph.walkSatisfying (every . occ) (some . occ) g u v+ | (every, some) <- ess+ ] of+ Just es@(_ : _) -> Just (foldr1 otimes (map Graph.label es))+ Just [] -> __IMPOSSIBLE__+ Nothing -> Nothing+ ------------------------------------------------------------------------ -- Tests @@ -135,6 +200,74 @@ ostar x == oplus oone (otimes x (ostar x)) && ostar x == oplus oone (otimes (ostar x) x)++-- | Is the given predicate satisfiable?++satisfiable :: (Occurrence -> Bool) -> Bool+satisfiable p = or [ p o | o <- [minBound .. maxBound] ]++-- Some properties that are used in the implementation of+-- prop_boundToEverySome2.++prop_boundToEverySome0 :: Bool+prop_boundToEverySome0 = and+ [ length ess >= 1+ &&+ all satisfiable ps+ &&+ and [ p minBound | p <- ps ]+ &&+ all (\p -> satisfiable (not . p)) [ e | (e, _) <- ess ]+ &&+ and [ not (p maxBound) | p <- ps, satisfiable (not . p) ]+ | (_, ess) <- Map.toList boundToEverySome+ , let ps = concat [ [e, s] | (e, s) <- ess ]+ ]++-- A simple property that does not always generate enough interesting+-- test cases.++prop_boundToEverySome1 :: NonEmptyList Occurrence -> Property+prop_boundToEverySome1 (NonEmpty w) =+ forAll (elements $ Map.toList boundToEverySome) $ \(bound, ess) ->+ (foldr1 otimes w <= bound)+ ==+ or [ all every w && any some w | (every, some) <- ess ]++-- A more complicated property that does not always generate enough+-- interesting test cases.++prop_boundToEverySome2 :: Property+prop_boundToEverySome2 =+ forAll (elements $ Map.toList boundToEverySome) $ \(bound, ess) ->+ (forAll (oneof [ do os1 <- listOf (arbitrary `suchThat` every)+ o <- arbitrary+ `suchThat` (\o -> every o && some o)+ os2 <- listOf (arbitrary `suchThat` every)+ return (os1 ++ [o] ++ os2)+ | (every, some) <- ess+ ]) $ \w ->+ foldr1 otimes w <= bound)+ .&&.+ (forAll (do+ ess <- mapM (\(e, s) ->+ elements+ (Left e :+ [ Right s | satisfiable (not . s) ])) ess+ let (es, ss) = partitionEithers ess+ every = \o -> and [ not (s o) | s <- ss ]+ some e = \o -> every o && not (e o)+ everyG = arbitrary `suchThat` every+ segment = listOf everyG+ os <- uniqOn id <$> mapM (\e -> arbitrary `suchThat` some e) es+ if Prelude.null os+ then listOf1 everyG+ else (++) <$> listOf everyG+ <*> (concat <$>+ mapM (\o -> (o :) <$> listOf everyG) os))+ (\w -> not (foldr1 otimes w <= bound)))++------------------------------------------------------------------------ -- Template Haskell hack to make the following $quickCheckAll work -- under GHC 7.8.
src/full/Agda/TypeChecking/Pretty.hs view
@@ -1,7 +1,7 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE TupleSections #-} {-# LANGUAGE UndecidableInstances #-} module Agda.TypeChecking.Pretty where@@ -9,23 +9,32 @@ import Prelude hiding (null) import Control.Applicative hiding (empty)+import Control.Monad+ import qualified Data.Map as Map import Data.Maybe import Agda.Syntax.Position-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.Syntax.Literal import Agda.Syntax.Translation.InternalToAbstract+import Agda.Syntax.Translation.ReflectedToAbstract import Agda.Syntax.Translation.AbstractToConcrete+import qualified Agda.Syntax.Translation.ReflectedToAbstract as R+import qualified Agda.Syntax.Reflected as R import qualified Agda.Syntax.Abstract as A import qualified Agda.Syntax.Concrete as C+import qualified Agda.Syntax.Reflected as R import qualified Agda.Syntax.Abstract.Pretty as AP+import Agda.Syntax.Concrete.Pretty (bracesAndSemicolons) import qualified Agda.Syntax.Concrete.Pretty as CP+import qualified Agda.Syntax.Info as A import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin (equalityUnview) import Agda.TypeChecking.Positivity.Occurrence+import Agda.TypeChecking.Substitute import Agda.Utils.Graph.AdjacencyMap.Unidirectional (Graph) import qualified Agda.Utils.Graph.AdjacencyMap.Unidirectional as Graph@@ -133,15 +142,25 @@ prettyTCM (a, b, c) = parens $ prettyTCM a <> comma <> prettyTCM b <> comma <> prettyTCM c -instance PrettyTCM Term where prettyTCM x = prettyA =<< reify x-instance PrettyTCM Type where prettyTCM x = prettyA =<< reify x-instance PrettyTCM Sort where prettyTCM x = prettyA =<< reify x-instance PrettyTCM DisplayTerm where prettyTCM x = prettyA =<< reify x-instance PrettyTCM NamedClause where prettyTCM x = prettyA =<< reify x-instance PrettyTCM Level where prettyTCM x = prettyA =<< reify (Level x)-instance PrettyTCM Permutation where prettyTCM = text . show-instance PrettyTCM Polarity where prettyTCM = text . show+instance PrettyTCM Term where prettyTCM = prettyA <=< reify+instance PrettyTCM Type where prettyTCM = prettyA <=< reify+instance PrettyTCM Sort where prettyTCM = prettyA <=< reify+instance PrettyTCM DisplayTerm where prettyTCM = prettyA <=< reify+instance PrettyTCM NamedClause where prettyTCM = prettyA <=< reify+instance PrettyTCM Level where prettyTCM = prettyA <=< reify . Level+instance PrettyTCM Permutation where prettyTCM = text . show+instance PrettyTCM Polarity where prettyTCM = text . show+instance PrettyTCM R.Term where prettyTCM = prettyA <=< toAbstractWithoutImplicit +instance (Show a, PrettyTCM a, Subst a a) => PrettyTCM (Substitution' a) where+ prettyTCM IdS = text "idS"+ prettyTCM (Wk m IdS) = text "wkS" <+> pretty m+ prettyTCM EmptyS = text "emptyS"+ prettyTCM rho = prettyTCM u <+> comma <+> prettyTCM rho1+ where+ (rho1, rho2) = splitS 1 rho+ u = lookupS rho2 0+ instance PrettyTCM Clause where prettyTCM cl = do x <- qualify_ <$> freshName_ "<unnamedclause>"@@ -188,6 +207,9 @@ instance PrettyTCM a => PrettyTCM (MaybeReduced a) where prettyTCM = prettyTCM . ignoreReduced +instance PrettyTCM EqualityView where+ prettyTCM v = prettyTCM $ equalityUnview v+ instance PrettyTCM A.Expr where prettyTCM = prettyA @@ -249,18 +271,20 @@ OpenIFS{} -> __IMPOSSIBLE__ InstS{} -> __IMPOSSIBLE__ InstV{} -> __IMPOSSIBLE__- FindInScope m Nothing -> do+ FindInScope m mb Nothing -> do t <- getMetaType m- sep [ text "Find in scope" <+> pretty m <+> text ":"+ sep [ text "Find in scope" <+> pretty m+ <+> maybe (text ":") (\ b -> text "blocked on" <+> pretty b <+> text ":") mb , prettyTCM t , text " (no candidate for now)" ]- FindInScope m (Just cands) -> do+ FindInScope m mb (Just cands) -> do t <- getMetaType m- sep [ text "Find in scope" <+> pretty m <+> text ":"+ sep [ text "Find in scope" <+> pretty m+ <+> maybe (text ":") (\ b -> text "blocked on" <+> pretty b <+> text ":") mb , nest 2 $ prettyTCM t- , sep $ flip map cands $ \(t,ty) ->- prettyTCM t <+> text ": " <+> prettyTCM ty+ , sep $ flip map cands $ \cand ->+ prettyTCM (candidateTerm cand) <+> text ": " <+> prettyTCM (candidateType cand) ] IsEmpty r t -> sep [ text "Is empty:", nest 2 $ prettyTCM t ]@@ -270,11 +294,11 @@ instance PrettyTCM TypeCheckingProblem where prettyTCM (CheckExpr e a) = sep [ prettyA e <+> text ":?", prettyTCM a ]- prettyTCM (CheckArgs _ _ _ es t0 t1 _) =+ prettyTCM (CheckArgs _ _ es t0 t1 _) = sep [ parens $ text "_ :" <+> prettyTCM t0 , nest 2 $ prettyList $ map prettyA es , nest 2 $ text ":?" <+> prettyTCM t1 ]- prettyTCM (CheckLambda (Common.Arg ai (xs, mt)) e t) =+ prettyTCM (CheckLambda (Arg ai (xs, mt)) e t) = sep [ return CP.lambda <+> (CP.prettyRelevance ai . CP.prettyHiding ai (if isNothing mt && length xs == 1 then id@@ -287,6 +311,10 @@ text ":?" , prettyTCM t ]+ prettyTCM (UnquoteTactic v _ _) = do+ e <- reify v+ let noInfo = A.exprNoRange+ prettyTCM (A.App noInfo (A.Unquote noInfo) (defaultNamedArg e)) instance PrettyTCM a => PrettyTCM (WithHiding a) where prettyTCM (WithHiding h a) = CP.prettyHiding h id <$> prettyTCM a@@ -316,7 +344,7 @@ where pr :: [Dom (Name, Type)] -> TCM [P.Doc] pr [] = return []- pr (Common.Dom info (x,t) : ctx) = escapeContext 1 $ do+ pr (Dom info (x,t) : ctx) = escapeContext 1 $ do -- TODO guilhem: show colors d <- CP.prettyRelevance info . CP.prettyHiding info P.parens <$> do prettyTCM x <+> text ":" <+> prettyTCM t@@ -325,23 +353,34 @@ instance PrettyTCM Context where prettyTCM = prettyTCM . PrettyContext +instance PrettyTCM CtxId where+ prettyTCM (CtxId x) = prettyTCM x+ instance PrettyTCM Pattern where prettyTCM = showPat' (text . patVarNameToString) instance PrettyTCM DeBruijnPattern where- prettyTCM = showPat' $ \ (i, x) -> text $ patVarNameToString x ++ "@" ++ show i+ prettyTCM = showPat' $ \ (i, x) -> prettyTCM $ var i -- | Show a pattern, given a method how to show pattern variables. showPat' :: (a -> TCM Doc) -> Pattern' a -> TCM Doc showPat' showVar = showPat where showPat (VarP x) = showVar x- showPat (DotP t) = text $ ".(" ++ P.prettyShow t ++ ")"+ showPat (DotP t) = text ".(" <> prettyTCM t <> text ")" showPat (ConP c i ps) = (if b then braces else parens) $ prTy $ prettyTCM c <+> fsep (map (showPat . namedArg) ps) where- b = maybe False (== ConPImplicit) $ conPRecord i- prTy d = caseMaybe (conPType i) d $ \ t -> d <+> text ":" <+> prettyTCM t+ b = maybe False (/= ConPCon) $ conPRecord i+ showRec :: TCM Doc+ showRec = sep+ [ text "record"+ , bracesAndSemicolons <$> zipWithM showField (conFields c) ps+ ]+ showField x p =+ sep [ prettyTCM (A.qnameName x) <+> text "=" , nest 2 $ showPat $ namedArg p ]+ showCon = parens $ prTy $ prettyTCM c <+> fsep (map (showPat . namedArg) ps)+ prTy d = d -- caseMaybe (conPType i) d $ \ t -> d <+> text ":" <+> prettyTCM t showPat (LitP l) = text (show l) showPat (ProjP q) = text (show q) @@ -350,21 +389,22 @@ prettyTCM (Proj f) = text "." <> prettyTCM f raisePatVars :: Int -> NLPat -> NLPat-raisePatVars k (PVar x) = PVar (k+x)+raisePatVars k (PVar id x) = PVar id (k+x) raisePatVars k (PWild) = PWild raisePatVars k (PDef f es) = PDef f $ (fmap . fmap) (raisePatVars k) es raisePatVars k (PLam i u) = PLam i $ fmap (raisePatVars k) u raisePatVars k (PPi a b) = PPi ((fmap . fmap) (raisePatVars k) a) ((fmap . fmap) (raisePatVars k) b)-raisePatVars k (PBoundVar i es) = PBoundVar k $ (fmap . fmap) (raisePatVars k) es+raisePatVars k (PBoundVar i es) = PBoundVar i $ (fmap . fmap) (raisePatVars k) es raisePatVars k (PTerm t) = PTerm t instance PrettyTCM NLPat where- prettyTCM (PVar x) = prettyTCM (var x)+ prettyTCM (PVar id x) = prettyTCM (var x) prettyTCM (PWild) = text $ "_" prettyTCM (PDef f es) = parens $ prettyTCM f <+> fsep (map prettyTCM es)- prettyTCM (PLam i u) = text "λ" <+> (addContext (absName u) $ prettyTCM (raisePatVars 1 $ unAbs u))- prettyTCM (PPi a b) = text "Π" <+> prettyTCM (Common.unDom a) <+>+ prettyTCM (PLam i u) = text ("λ " ++ absName u ++ " →") <+>+ (addContext (absName u) $ prettyTCM (raisePatVars 1 $ absBody u))+ prettyTCM (PPi a b) = text "Π" <+> prettyTCM (unDom a) <+> (addContext (absName b) $ prettyTCM (fmap (raisePatVars 1) $ unAbs b)) prettyTCM (PBoundVar i es) = parens $ prettyTCM (var i) <+> fsep (map prettyTCM es) prettyTCM (PTerm t) = text "." <> parens (prettyTCM t)@@ -377,13 +417,17 @@ prettyTCM = prettyTCM . unEl instance PrettyTCM RewriteRule where- prettyTCM (RewriteRule q gamma lhs rhs b) = inTopContext $ do- prettyTCM q <+> text " rule " <+> do- prettyTCM gamma <+> text " |- " <+> do- addContext gamma $ do- prettyTCM lhs <+> text " --> " <+> do- prettyTCM rhs <+> text " : " <+> do- prettyTCM b+ prettyTCM (RewriteRule q gamma lhs rhs b) = sep+ [ prettyTCM q <+> text " rule "+ , prettyTCM gamma <+> text " |- "+ , addContext gamma $ hsep+ [ prettyTCM lhs+ , text " --> "+ , prettyTCM rhs+ , text " : "+ , prettyTCM b+ ]+ ] instance PrettyTCM Occurrence where prettyTCM GuardPos = text "-[g+]->"
src/full/Agda/TypeChecking/Primitive.hs view
@@ -1,8 +1,8 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UndecidableInstances #-} {-| Primitive functions, such as addition on builtin integers. -}@@ -10,18 +10,21 @@ import Control.Monad import Control.Applicative+import Control.Monad.Reader (asks) import Data.Char import Data.Map (Map) import qualified Data.Map as Map import Data.Maybe+import Data.Traversable (traverse)+import Data.Monoid (mempty) import Agda.Interaction.Options import Agda.Syntax.Position import Agda.Syntax.Common hiding (Nat)-import Agda.Syntax.Internal as I-import Agda.Syntax.Internal.Generic (TermLike)+import Agda.Syntax.Internal+import Agda.Syntax.Internal.Generic (TermLike(..)) import Agda.Syntax.Literal import Agda.Syntax.Concrete.Pretty () @@ -40,6 +43,7 @@ import Agda.Utils.Monad import Agda.Utils.Pretty (pretty) import Agda.Utils.String ( Str(Str), unStr )+import Agda.Utils.Maybe #include "undefined.h" import Agda.Utils.Impossible@@ -63,6 +67,11 @@ quotRem (Nat a) (Nat b) = (Nat q, Nat r) where (q, r) = quotRem a b +instance TermLike Nat where+ traverseTerm _ = id+ traverseTermM _ = pure+ foldTerm _ = mempty+ instance Show Nat where show = show . toInteger @@ -90,7 +99,8 @@ instance PrimTerm Nat where primTerm _ = primNat instance PrimTerm Lvl where primTerm _ = primLevel instance PrimTerm QName where primTerm _ = primQName-instance PrimTerm Type where primTerm _ = primAgdaType+instance PrimTerm MetaId where primTerm _ = primAgdaMeta+instance PrimTerm Type where primTerm _ = primAgdaTerm instance PrimTerm a => PrimTerm [a] where primTerm _ = list (primTerm (undefined :: a))@@ -106,14 +116,27 @@ toTermR = (pure .) <$> toTerm -instance ToTerm Integer where toTerm = return $ Lit . LitInt noRange-instance ToTerm Nat where toTerm = return $ Lit . LitInt noRange . toInteger+instance ToTerm Nat where toTerm = return $ Lit . LitNat noRange . toInteger instance ToTerm Lvl where toTerm = return $ Level . Max . (:[]) . ClosedLevel . unLvl instance ToTerm Double where toTerm = return $ Lit . LitFloat noRange instance ToTerm Char where toTerm = return $ Lit . LitChar noRange instance ToTerm Str where toTerm = return $ Lit . LitString noRange . unStr instance ToTerm QName where toTerm = return $ Lit . LitQName noRange+instance ToTerm MetaId where+ toTerm = do+ file <- fromMaybe __IMPOSSIBLE__ <$> asks TCM.envCurrentPath+ return $ Lit . LitMeta noRange file +instance ToTerm Integer where+ toTerm = do+ pos <- primIntegerPos+ negsuc <- primIntegerNegSuc+ fromNat <- toTerm :: TCM (Nat -> Term)+ let intToTerm = fromNat . fromIntegral :: Integer -> Term+ let fromInt n | n >= 0 = apply pos [defaultArg $ intToTerm n]+ | otherwise = apply negsuc [defaultArg $ intToTerm (-n - 1)]+ return fromInt+ instance ToTerm Bool where toTerm = do true <- primTrue@@ -128,7 +151,7 @@ toTerm = do kit <- quotingKit; runReduceF (quoteTypeWithKit kit) toTermR = do kit <- quotingKit; return (quoteTypeWithKit kit) -instance ToTerm I.ArgInfo where+instance ToTerm ArgInfo where toTerm = do info <- primArgArgInfo vis <- primVisible@@ -136,8 +159,7 @@ ins <- primInstance rel <- primRelevant irr <- primIrrelevant- return $ \(ArgInfo h r _) ->- apply info $ map defaultArg+ return $ \ (ArgInfo h r) -> info `applys` [ case h of NotHidden -> vis Hidden -> hid@@ -157,10 +179,10 @@ nil' <- primNil cons' <- primCons let nil = nil'- cons x xs = cons' `apply` [defaultArg x, defaultArg xs]+ cons x xs = cons' `applys` [x, xs] return $ foldr cons nil -instance (PrimTerm a, ToTerm a) => ToTerm [a] where+instance ToTerm a => ToTerm [a] where toTerm = do mkList <- buildList fromA <- toTerm@@ -168,20 +190,36 @@ -- From Haskell value to Agda term -type FromTermFunction a = I.Arg Term ->- ReduceM (Reduced (MaybeReduced (I.Arg Term)) a)+type FromTermFunction a = Arg Term ->+ ReduceM (Reduced (MaybeReduced (Arg Term)) a) class FromTerm a where fromTerm :: TCM (FromTermFunction a) instance FromTerm Integer where- fromTerm = fromLiteral $ \l -> case l of- LitInt _ n -> Just n- _ -> Nothing+ fromTerm = do+ Con pos [] <- ignoreSharing <$> primIntegerPos+ Con negsuc [] <- ignoreSharing <$> primIntegerNegSuc+ toNat <- fromTerm :: TCM (FromTermFunction Nat)+ return $ \ v -> do+ b <- reduceB' v+ let v' = ignoreBlocking b+ arg = (<$ v')+ case ignoreSharing $ unArg (ignoreBlocking b) of+ Con c [u]+ | c == pos ->+ redBind (toNat u)+ (\ u' -> notReduced $ arg $ Con c [ignoreReduced u']) $ \ n ->+ redReturn $ fromIntegral n+ | c == negsuc ->+ redBind (toNat u)+ (\ u' -> notReduced $ arg $ Con c [ignoreReduced u']) $ \ n ->+ redReturn $ fromIntegral $ -n - 1+ _ -> return $ NoReduction (reduced b) instance FromTerm Nat where fromTerm = fromLiteral $ \l -> case l of- LitInt _ n -> Just $ fromInteger n+ LitNat _ n -> Just $ fromInteger n _ -> Nothing instance FromTerm Lvl where@@ -209,15 +247,21 @@ LitQName _ x -> Just x _ -> Nothing +instance FromTerm MetaId where+ fromTerm = fromLiteral $ \l -> case l of+ LitMeta _ _ x -> Just x+ _ -> Nothing+ instance FromTerm Bool where fromTerm = do true <- primTrue false <- primFalse fromReducedTerm $ \t -> case t of- _ | t === true -> Just True- | t === false -> Just False+ _ | t =?= true -> Just True+ | t =?= false -> Just False | otherwise -> Nothing where+ a =?= b = ignoreSharing a === ignoreSharing b Def x [] === Def y [] = x == y Con x [] === Con y [] = x == y Var n [] === Var m [] = n == m@@ -235,17 +279,14 @@ where isCon (Lam _ b) = isCon $ absBody b isCon (Con c _) = return c- isCon (Shared p) = __IMPOSSIBLE__ -- isCon (derefPtr p)+ isCon (Shared p) = isCon (derefPtr p) isCon v = __IMPOSSIBLE__ mkList nil cons toA fromA t = do b <- reduceB' t let t = ignoreBlocking b- let arg = Arg (ArgInfo { argInfoHiding = getHiding t- , argInfoRelevance = getRelevance t- , argInfoColors = argColors t- })- case unArg t of+ let arg = (<$ t)+ case ignoreSharing $ unArg t of Con c [] | c == nil -> return $ YesReduction NoSimplification [] Con c [x,xs]@@ -322,55 +363,69 @@ -} _ -> __IMPOSSIBLE__ -primQNameType :: TCM PrimitiveImpl-primQNameType = mkPrimFun1TCM (el primQName --> el primAgdaType)- (\q -> normalise' . defType =<< getConstInfo q)- -- Note: gets the top-level type! All bounds variables have been lifted.--primQNameDefinition :: TCM PrimitiveImpl-primQNameDefinition = do- kit <- quotingKit- agdaFunDef <- primAgdaFunDef- agdaFunDefCon <- primAgdaFunDefCon- agdaDefinitionFunDef <- primAgdaDefinitionFunDef- agdaDefinitionDataDef <- primAgdaDefinitionDataDef- agdaDefinitionRecordDef <- primAgdaDefinitionRecordDef- agdaDefinitionPostulate <- primAgdaDefinitionPostulate- agdaDefinitionPrimitive <- primAgdaDefinitionPrimitive- agdaDefinitionDataConstructor <- primAgdaDefinitionDataConstructor- list <- buildList-- let qType = quoteTypeWithKit kit- qClause = quoteClauseWithKit kit- defapp f xs = apply f . map defaultArg <$> sequence xs- qFunDef t cs = defapp agdaFunDefCon [qType t, list <$> mapM qClause cs]- qQName = Lit . LitQName noRange- con qn = do- def <- getConstInfo qn- case theDef def of- Function{funClauses = cs}- -> defapp agdaDefinitionFunDef [qFunDef (defType def) cs]- Datatype{} -> defapp agdaDefinitionDataDef [pure $ qQName qn]- Record{} -> defapp agdaDefinitionRecordDef [pure $ qQName qn]- Axiom{} -> defapp agdaDefinitionPostulate []- Primitive{} -> defapp agdaDefinitionPrimitive []- Constructor{} -> defapp agdaDefinitionDataConstructor []-- unquoteQName <- fromTerm- t <- el primQName --> el primAgdaDefinition- return $ PrimImpl t $ PrimFun __IMPOSSIBLE__ 1 $ \ts ->+-- Used for both primForce and primForceLemma.+genPrimForce :: TCM Type -> (Term -> Arg Term -> Term) -> TCM PrimitiveImpl+genPrimForce b ret = do+ let varEl s a = El (varSort s) <$> a+ varT s a = varEl s (varM a)+ varS s = pure $ sort $ varSort s+ t <- hPi "a" (el primLevel) $+ hPi "b" (el primLevel) $+ hPi "A" (varS 1) $+ hPi "B" (varT 2 0 --> varS 1) b+ return $ PrimImpl t $ PrimFun __IMPOSSIBLE__ 6 $ \ ts -> case ts of- [v] ->- redBind (unquoteQName v)- (\v' -> [v']) $ \x ->- redReturn =<< con x+ [a, b, s, t, u, f] -> do+ u <- reduceB' u+ let isWHNF Blocked{} = return False+ isWHNF (NotBlocked _ u) =+ case ignoreSharing $ unArg u of+ Lit{} -> return True+ Con{} -> return True+ Lam{} -> return True+ Pi{} -> return True+ Sort{} -> return True -- sorts and levels are considered whnf+ Level{} -> return True+ DontCare{} -> return True+ Def q _ -> do+ def <- theDef <$> getConstInfo q+ return $ case def of+ Datatype{} -> True+ Record{} -> True+ _ -> False+ MetaV{} -> return False+ Var{} -> return False+ Shared{} -> __IMPOSSIBLE__++ ifM (isWHNF u)+ (redReturn $ ret (unArg f) (ignoreBlocking u))+ (return $ NoReduction $ map notReduced [a, b, s, t] ++ [reduced u, notReduced f]) _ -> __IMPOSSIBLE__ -primDataConstructors :: TCM PrimitiveImpl-primDataConstructors =- mkPrimFun1TCM (el primAgdaDataDef --> el (list primQName))- (fmap (dataCons . theDef) . getConstInfo)+primForce :: TCM PrimitiveImpl+primForce = do+ let varEl s a = El (varSort s) <$> a+ varT s a = varEl s (varM a)+ varS s = pure $ sort $ varSort s+ genPrimForce (nPi "x" (varT 3 1) $+ (nPi "y" (varT 4 2) $ varEl 4 $ varM 2 <@> varM 0) -->+ varEl 3 (varM 1 <@> varM 0)) $+ \ f u -> apply f [u] +primForceLemma :: TCM PrimitiveImpl+primForceLemma = do+ let varEl s a = El (varSort s) <$> a+ varT s a = varEl s (varM a)+ varS s = pure $ sort $ varSort s+ refl <- primRefl+ force <- primFunName <$> getPrimitive "primForce"+ genPrimForce (nPi "x" (varT 3 1) $+ nPi "f" (nPi "y" (varT 4 2) $ varEl 4 $ varM 2 <@> varM 0) $+ varEl 4 $ primEquality <#> varM 4 <#> (varM 2 <@> varM 1)+ <@> (pure (Def force []) <#> varM 5 <#> varM 4 <#> varM 3 <#> varM 2 <@> varM 1 <@> varM 0)+ <@> (varM 0 <@> varM 1)+ ) $ \ _ _ -> refl+ mkPrimLevelZero :: TCM PrimitiveImpl mkPrimLevelZero = do t <- primType (undefined :: Lvl)@@ -496,7 +551,7 @@ return $ El (getSort a' `sLub` getSort b') $ Pi (Dom (mapRelevance f defaultArgInfo) a') (NoAbs "_" b') -gpi :: I.ArgInfo -> String -> TCM Type -> TCM Type -> TCM Type+gpi :: ArgInfo -> String -> TCM Type -> TCM Type -> TCM Type gpi info name a b = do a <- a b <- addContext (name, Dom info a) b@@ -538,8 +593,15 @@ tSetOmega :: TCM Type tSetOmega = return $ sort Inf +sSizeUniv :: Sort+sSizeUniv = mkType 0+-- Andreas, 2016-04-14 switching off SizeUniv, unfixing issue #1428+-- sSizeUniv = SizeUniv+ tSizeUniv :: TCM Type-tSizeUniv = return $ El SizeUniv $ Sort SizeUniv+tSizeUniv = tset+-- Andreas, 2016-04-14 switching off SizeUniv, unfixing issue #1428+-- tSizeUniv = return $ El sSizeUniv $ Sort sSizeUniv -- Andreas, 2015-03-16 Since equality checking for types -- includes equality checking for sorts, we cannot put -- SizeUniv in Setω. (SizeUniv : Setω) == (_0 : suc _0)@@ -547,17 +609,17 @@ -- tSizeUniv = return $ El Inf $ Sort SizeUniv -- | Abbreviation: @argN = 'Arg' 'defaultArgInfo'@.-argN :: e -> I.Arg e+argN :: e -> Arg e argN = Arg defaultArgInfo -domN :: e -> I.Dom e+domN :: e -> Dom e domN = Dom defaultArgInfo -- | Abbreviation: @argH = 'hide' 'Arg' 'defaultArgInfo'@.-argH :: e -> I.Arg e+argH :: e -> Arg e argH = Arg $ setHiding Hidden defaultArgInfo -domH :: e -> I.Dom e+domH :: e -> Dom e domH = Dom $ setHiding Hidden defaultArgInfo ---------------------------------------------------------------------------@@ -572,17 +634,22 @@ primitiveFunctions :: Map String (TCM PrimitiveImpl) primitiveFunctions = Map.fromList - -- Integer functions- [ "primIntegerPlus" |-> mkPrimFun2 ((+) :: Op Integer)- , "primIntegerMinus" |-> mkPrimFun2 ((-) :: Op Integer)- , "primIntegerTimes" |-> mkPrimFun2 ((*) :: Op Integer)- , "primIntegerDiv" |-> mkPrimFun2 (div :: Op Integer) -- partial- , "primIntegerMod" |-> mkPrimFun2 (mod :: Op Integer) -- partial- , "primIntegerEquality" |-> mkPrimFun2 ((==) :: Rel Integer)- , "primIntegerLess" |-> mkPrimFun2 ((<) :: Rel Integer)- , "primIntegerAbs" |-> mkPrimFun1 (Nat . abs :: Integer -> Nat)- , "primNatToInteger" |-> mkPrimFun1 (toInteger :: Nat -> Integer)- , "primShowInteger" |-> mkPrimFun1 (Str . show :: Integer -> Str)+ -- Ulf, 2015-10-28: Builtin integers now map to a datatype, and since you+ -- can define these functions (reasonably) efficiently using the primitive+ -- functions on natural numbers there's no need for them anymore. Keeping the+ -- show function around for convenience, and as a test case for a primitive+ -- function taking an integer.+ -- -- Integer functions+ -- [ "primIntegerPlus" |-> mkPrimFun2 ((+) :: Op Integer)+ -- , "primIntegerMinus" |-> mkPrimFun2 ((-) :: Op Integer)+ -- , "primIntegerTimes" |-> mkPrimFun2 ((*) :: Op Integer)+ -- , "primIntegerDiv" |-> mkPrimFun2 (div :: Op Integer) -- partial+ -- , "primIntegerMod" |-> mkPrimFun2 (mod :: Op Integer) -- partial+ -- , "primIntegerEquality" |-> mkPrimFun2 ((==) :: Rel Integer)+ -- , "primIntegerLess" |-> mkPrimFun2 ((<) :: Rel Integer)+ -- , "primIntegerAbs" |-> mkPrimFun1 (Nat . abs :: Integer -> Nat)+ -- , "primNatToInteger" |-> mkPrimFun1 (toInteger :: Nat -> Integer)+ [ "primShowInteger" |-> mkPrimFun1 (Str . show :: Integer -> Str) -- Natural number functions , "primNatPlus" |-> mkPrimFun2 ((+) :: Op Nat)@@ -603,20 +670,21 @@ , "primLevelMax" |-> mkPrimLevelMax -- Floating point functions- , "primIntegerToFloat" |-> mkPrimFun1 (fromIntegral :: Integer -> Double)+ , "primNatToFloat" |-> mkPrimFun1 (fromIntegral :: Nat -> Double) , "primFloatPlus" |-> mkPrimFun2 ((+) :: Op Double) , "primFloatMinus" |-> mkPrimFun2 ((-) :: Op Double) , "primFloatTimes" |-> mkPrimFun2 ((*) :: Op Double) , "primFloatDiv" |-> mkPrimFun2 ((/) :: Op Double)- , "primFloatEquality" |-> mkPrimFun2 ((==) :: Rel Double)- , "primFloatLess" |-> mkPrimFun2 ((<) :: Rel Double)+ , "primFloatEquality" |-> mkPrimFun2 (floatEq :: Rel Double)+ , "primFloatLess" |-> mkPrimFun2 (floatLt :: Rel Double)+ , "primFloatSqrt" |-> mkPrimFun1 (sqrt :: Double -> Double) , "primRound" |-> mkPrimFun1 (round :: Double -> Integer) , "primFloor" |-> mkPrimFun1 (floor :: Double -> Integer) , "primCeiling" |-> mkPrimFun1 (ceiling :: Double -> Integer) , "primExp" |-> mkPrimFun1 (exp :: Fun Double)- , "primLog" |-> mkPrimFun1 (log :: Fun Double) -- partial+ , "primLog" |-> mkPrimFun1 (log :: Fun Double) , "primSin" |-> mkPrimFun1 (sin :: Fun Double)- , "primShowFloat" |-> mkPrimFun1 (Str . show :: Double -> Str)+ , "primShowFloat" |-> mkPrimFun1 (Str . floatShow :: Double -> Str) -- Character functions , "primCharEquality" |-> mkPrimFun2 ((==) :: Rel Char)@@ -631,7 +699,7 @@ , "primToUpper" |-> mkPrimFun1 toUpper , "primToLower" |-> mkPrimFun1 toLower , "primCharToNat" |-> mkPrimFun1 (fromIntegral . fromEnum :: Char -> Nat)- , "primNatToChar" |-> mkPrimFun1 (toEnum . fromIntegral :: Nat -> Char)+ , "primNatToChar" |-> mkPrimFun1 (toEnum . fromIntegral . (`mod` 0x110000) :: Nat -> Char) , "primShowChar" |-> mkPrimFun1 (Str . show . pretty . LitChar noRange) -- String functions@@ -641,19 +709,38 @@ , "primStringEquality" |-> mkPrimFun2 ((==) :: Rel Str) , "primShowString" |-> mkPrimFun1 (Str . show . pretty . LitString noRange . unStr) - -- Reflection- , "primQNameType" |-> primQNameType- , "primQNameDefinition" |-> primQNameDefinition- , "primDataConstructors"|-> primDataConstructors- -- Other stuff , "primTrustMe" |-> primTrustMe+ -- This needs to be force : A → ((x : A) → B x) → B x rather than seq because of call-by-name.+ , "primForce" |-> primForce+ , "primForceLemma" |-> primForceLemma , "primQNameEquality" |-> mkPrimFun2 ((==) :: Rel QName)+ , "primQNameLess" |-> mkPrimFun2 ((<) :: Rel QName) , "primShowQName" |-> mkPrimFun1 (Str . show :: QName -> Str)+ , "primMetaEquality" |-> mkPrimFun2 ((==) :: Rel MetaId)+ , "primMetaLess" |-> mkPrimFun2 ((<) :: Rel MetaId)+ , "primShowMeta" |-> mkPrimFun1 (Str . show . pretty :: MetaId -> Str) ] where (|->) = (,) +floatEq :: Double -> Double -> Bool+floatEq x y | isNaN x && isNaN y = True+ | otherwise = x == y++floatLt :: Double -> Double -> Bool+floatLt x y+ | isNegInf y = False+ | isNegInf x = True+ | isNaN x = True+ | otherwise = x < y+ where+ isNegInf z = z < 0 && isInfinite z++floatShow :: Double -> String+floatShow x | isNegativeZero x = "0.0"+ | otherwise = show x+ lookupPrimitiveFunction :: String -> TCM PrimitiveImpl lookupPrimitiveFunction x = fromMaybe (typeError $ NoSuchPrimitiveFunction x)@@ -665,3 +752,16 @@ Name _ x _ _ -> show x PrimImpl t pf <- lookupPrimitiveFunction s return (s, PrimImpl t $ pf { primFunName = q })++getBuiltinName :: String -> TCM (Maybe QName)+getBuiltinName b = do+ caseMaybeM (getBuiltin' b) (return Nothing) $ \v -> do+ v <- normalise v+ let getName (Def x _) = x+ getName (Con x _) = conName x+ getName (Lam _ b) = getName $ ignoreSharing $ unAbs b+ getName _ = __IMPOSSIBLE__+ return $ Just $ getName (ignoreSharing v)++isBuiltin :: QName -> String -> TCM Bool+isBuiltin q b = (Just q ==) <$> getBuiltinName b
src/full/Agda/TypeChecking/ProjectionLike.hs view
@@ -14,7 +14,8 @@ import Agda.Syntax.Abstract.Name import Agda.Syntax.Common-import Agda.Syntax.Internal as I+import Agda.Syntax.Internal+import Agda.Syntax.Internal.Pattern import Agda.TypeChecking.Monad import Agda.TypeChecking.Free (isBinderUsed)@@ -38,12 +39,12 @@ data ProjectionView = ProjectionView { projViewProj :: QName- , projViewSelf :: I.Arg Term+ , projViewSelf :: Arg Term , projViewSpine :: Elims } -- ^ A projection or projection-like function, applied to its -- principal argument- | LoneProjectionLike QName I.ArgInfo+ | LoneProjectionLike QName ArgInfo -- ^ Just a lone projection-like function, missing its principal -- argument (from which we could infer the parameters). | NoProjection Term@@ -213,6 +214,9 @@ validProj (_, 0) = return False validProj (d, _) = eligibleForProjectionLike d + -- NOTE: If the following definition turns out to be slow, then+ -- one could perhaps reuse information computed by the termination+ -- and/or positivity checkers. recursive = do occs <- computeOccurrences x let xocc = Map.lookup (ADef x) occs
src/full/Agda/TypeChecking/Quote.hs view
@@ -1,11 +1,13 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE PatternGuards #-}+{-# LANGUAGE RankNTypes #-} module Agda.TypeChecking.Quote where import Control.Applicative-import Control.Monad.State (evalState, get, put)+import Control.Monad.State (runState, get, put)+import Control.Monad.Reader (asks) import Control.Monad.Writer (execWriterT, tell) import Control.Monad.Trans (lift) @@ -31,14 +33,16 @@ import Agda.TypeChecking.Reduce import Agda.TypeChecking.Reduce.Monad import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope import Agda.Utils.Except import Agda.Utils.Impossible import Agda.Utils.Monad ( ifM )-import Agda.Utils.Permutation ( Permutation(Perm) )+import Agda.Utils.Permutation ( Permutation(Perm), compactP ) import Agda.Utils.String ( Str(Str), unStr ) import Agda.Utils.VarSet (VarSet) import qualified Agda.Utils.VarSet as Set+import Agda.Utils.FileName #include "undefined.h" @@ -46,11 +50,14 @@ { quoteTermWithKit :: Term -> ReduceM Term , quoteTypeWithKit :: Type -> ReduceM Term , quoteClauseWithKit :: Clause -> ReduceM Term- , quoteDomWithKit :: I.Dom Type -> ReduceM Term+ , quoteDomWithKit :: Dom Type -> ReduceM Term+ , quoteDefnWithKit :: Definition -> ReduceM Term+ , quoteListWithKit :: forall a. (a -> ReduceM Term) -> [a] -> ReduceM Term } quotingKit :: TCM QuotingKit quotingKit = do+ currentFile <- fromMaybe __IMPOSSIBLE__ <$> asks envCurrentPath hidden <- primHidden instanceH <- primInstance visible <- primVisible@@ -58,6 +65,7 @@ irrelevant <- primIrrelevant nil <- primNil cons <- primCons+ abs <- primAbsAbs arg <- primArgArg arginfo <- primArgArgInfo var <- primAgdaTermVar@@ -67,12 +75,14 @@ con <- primAgdaTermCon pi <- primAgdaTermPi sort <- primAgdaTermSort+ meta <- primAgdaTermMeta lit <- primAgdaTermLit litNat <- primAgdaLitNat litFloat <- primAgdaLitFloat litChar <- primAgdaLitChar litString <- primAgdaLitString litQName <- primAgdaLitQName+ litMeta <- primAgdaLitMeta normalClause <- primAgdaClauseClause absurdClause <- primAgdaClauseAbsurd varP <- primAgdaPatVar@@ -87,11 +97,17 @@ sucLevel <- primLevelSuc lub <- primLevelMax lkit <- requireLevels- el <- primAgdaTypeEl Con z _ <- ignoreSharing <$> primZero Con s _ <- ignoreSharing <$> primSuc unsupported <- primAgdaTermUnsupported + agdaDefinitionFunDef <- primAgdaDefinitionFunDef+ agdaDefinitionDataDef <- primAgdaDefinitionDataDef+ agdaDefinitionRecordDef <- primAgdaDefinitionRecordDef+ agdaDefinitionPostulate <- primAgdaDefinitionPostulate+ agdaDefinitionPrimitive <- primAgdaDefinitionPrimitive+ agdaDefinitionDataConstructor <- primAgdaDefinitionDataConstructor+ let (@@) :: Apply a => ReduceM a -> ReduceM Term -> ReduceM a t @@ u = apply <$> t <*> ((:[]) . defaultArg <$> u) @@ -113,25 +129,23 @@ quoteRelevance Forced{} = pure relevant quoteRelevance UnusedArg = pure relevant --- quoteColors _ = nil -- TODO guilhem-- quoteArgInfo :: I.ArgInfo -> ReduceM Term- quoteArgInfo (ArgInfo h r cs) = arginfo !@ quoteHiding h- @@ quoteRelevance r- -- @@ quoteColors cs+ quoteArgInfo :: ArgInfo -> ReduceM Term+ quoteArgInfo (ArgInfo h r) = arginfo !@ quoteHiding h+ @@ quoteRelevance r quoteLit :: Literal -> ReduceM Term- quoteLit l@LitInt{} = lit !@ (litNat !@! Lit l)+ quoteLit l@LitNat{} = lit !@ (litNat !@! Lit l) quoteLit l@LitFloat{} = lit !@ (litFloat !@! Lit l) quoteLit l@LitChar{} = lit !@ (litChar !@! Lit l) quoteLit l@LitString{} = lit !@ (litString !@! Lit l) quoteLit l@LitQName{} = lit !@ (litQName !@! Lit l)+ quoteLit l@LitMeta {} = lit !@ (litMeta !@! Lit l) -- We keep no ranges in the quoted term, so the equality on terms -- is only on the structure. quoteSortLevelTerm :: Level -> ReduceM Term- quoteSortLevelTerm (Max []) = setLit !@! Lit (LitInt noRange 0)- quoteSortLevelTerm (Max [ClosedLevel n]) = setLit !@! Lit (LitInt noRange n)+ quoteSortLevelTerm (Max []) = setLit !@! Lit (LitNat noRange 0)+ quoteSortLevelTerm (Max [ClosedLevel n]) = setLit !@! Lit (LitNat noRange n) quoteSortLevelTerm l = set !@ quoteTerm (unlevelWithKit lkit l) quoteSort :: Sort -> ReduceM Term@@ -142,21 +156,21 @@ quoteSort DLub{} = pure unsupportedSort quoteType :: Type -> ReduceM Term- quoteType (El s t) = el !@ quoteSort s @@ quoteTerm t+ quoteType (El _ t) = quoteTerm t quoteQName :: QName -> ReduceM Term quoteQName x = pure $ Lit $ LitQName noRange x - quotePats :: [I.NamedArg Pattern] -> ReduceM Term+ quotePats :: [NamedArg DeBruijnPattern] -> ReduceM Term quotePats ps = list $ map (quoteArg quotePat . fmap namedThing) ps - quotePat :: Pattern -> ReduceM Term- quotePat (VarP "()") = pure absurdP- quotePat (VarP _) = pure varP- quotePat (DotP _) = pure dotP- quotePat (ConP c _ ps) = conP !@ quoteQName (conName c) @@ quotePats ps- quotePat (LitP l) = litP !@! Lit l- quotePat (ProjP x) = projP !@ quoteQName x+ quotePat :: DeBruijnPattern -> ReduceM Term+ quotePat (VarP (_,"()")) = pure absurdP+ quotePat (VarP (_,x)) = varP !@! quoteString x+ quotePat (DotP _) = pure dotP+ quotePat (ConP c _ ps) = conP !@ quoteQName (conName c) @@ quotePats ps+ quotePat (LitP l) = litP !@! Lit l+ quotePat (ProjP x) = projP !@ quoteQName x quoteBody :: I.ClauseBody -> Maybe (ReduceM Term) quoteBody (Body a) = Just (quoteTerm a)@@ -173,13 +187,20 @@ list [] = pure nil list (a : as) = cons !@ a @@ list as - quoteDom :: (Type -> ReduceM Term) -> I.Dom Type -> ReduceM Term+ quoteList :: (a -> ReduceM Term) -> [a] -> ReduceM Term+ quoteList q xs = list (map q xs)++ quoteDom :: (Type -> ReduceM Term) -> Dom Type -> ReduceM Term quoteDom q (Dom info t) = arg !@ quoteArgInfo info @@ q t - quoteArg :: (a -> ReduceM Term) -> I.Arg a -> ReduceM Term+ quoteAbs :: Subst t a => (a -> ReduceM Term) -> Abs a -> ReduceM Term+ quoteAbs q (Abs s t) = abs !@! quoteString s @@ q t+ quoteAbs q (NoAbs s t) = abs !@! quoteString s @@ q (raise 1 t)++ quoteArg :: (a -> ReduceM Term) -> Arg a -> ReduceM Term quoteArg q (Arg info t) = arg !@ quoteArgInfo info @@ q t - quoteArgs :: I.Args -> ReduceM Term+ quoteArgs :: Args -> ReduceM Term quoteArgs ts = list (map (quoteArg quoteTerm) ts) quoteTerm :: Term -> ReduceM Term@@ -187,11 +208,12 @@ case unSpine v of Var n es -> let ts = fromMaybe __IMPOSSIBLE__ $ allApplyElims es- in var !@! Lit (LitInt noRange $ fromIntegral n) @@ quoteArgs ts- Lam info t -> lam !@ quoteHiding (getHiding info) @@ quoteTerm (absBody t)+ in var !@! Lit (LitNat noRange $ fromIntegral n) @@ quoteArgs ts+ Lam info t -> lam !@ quoteHiding (getHiding info) @@ quoteAbs quoteTerm t Def x es -> do d <- theDef <$> getConstInfo x- qx d @@ quoteArgs ts+ n <- getDefFreeVars x+ qx d @@ quoteArgs (drop n ts) where ts = fromMaybe __IMPOSSIBLE__ $ allApplyElims es qx Function{ funExtLam = Just (ExtLamInfo h nh), funClauses = cs } =@@ -199,25 +221,57 @@ qx Function{ funCompiled = Just Fail, funClauses = [cl] } = extlam !@ list [quoteClause $ dropArgs (length (clausePats cl) - 1) cl] qx _ = def !@! quoteName x- Con x ts -> con !@! quoteConName x @@ quoteArgs ts- Pi t u -> pi !@ quoteDom quoteType t- @@ quoteType (absBody u)+ Con x ts -> do+ Constructor{conPars = np} <- theDef <$> getConstInfo (conName x)+ let par = arg !@ (arginfo !@ pure hidden @@ pure relevant) @@ pure unsupported+ pars = replicate np $ par+ args = list $ pars ++ map (quoteArg quoteTerm) ts+ con !@! quoteConName x @@ args+ Pi t u -> pi !@ quoteDom quoteType t+ @@ quoteAbs quoteType u Level l -> quoteTerm (unlevelWithKit lkit l) Lit lit -> quoteLit lit Sort s -> sort !@ quoteSort s Shared p -> quoteTerm $ derefPtr p- MetaV{} -> pure unsupported+ MetaV x es -> meta !@! quoteMeta currentFile x @@ quoteArgs vs+ where vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es DontCare{} -> pure unsupported -- could be exposed at some point but we have to take care- ExtLam{} -> __IMPOSSIBLE__ - return $ QuotingKit quoteTerm quoteType quoteClause (quoteDom quoteType)+ quoteDefn :: Definition -> ReduceM Term+ quoteDefn def =+ case theDef def of+ Function{funClauses = cs} ->+ agdaDefinitionFunDef !@ quoteList quoteClause cs+ Datatype{dataPars = np, dataCons = cs} ->+ agdaDefinitionDataDef !@! quoteNat (fromIntegral np) @@ quoteList (pure . quoteName) cs+ Record{recConHead = c} ->+ agdaDefinitionRecordDef !@! quoteName (conName c)+ Axiom{} -> pure agdaDefinitionPostulate+ Primitive{primClauses = cs} | not $ null cs ->+ agdaDefinitionFunDef !@ quoteList quoteClause cs+ Primitive{} -> pure agdaDefinitionPrimitive+ Constructor{conData = d} ->+ agdaDefinitionDataConstructor !@! quoteName d + return $ QuotingKit quoteTerm quoteType quoteClause (quoteDom quoteType) quoteDefn quoteList++quoteString :: String -> Term+quoteString = Lit . LitString noRange+ quoteName :: QName -> Term quoteName x = Lit (LitQName noRange x) +quoteNat :: Integer -> Term+quoteNat n+ | n >= 0 = Lit (LitNat noRange n)+ | otherwise = __IMPOSSIBLE__+ quoteConName :: ConHead -> Term quoteConName = quoteName . conName +quoteMeta :: AbsolutePath -> MetaId -> Term+quoteMeta file = Lit . LitMeta noRange file+ quoteTerm :: Term -> TCM Term quoteTerm v = do kit <- quotingKit@@ -227,3 +281,19 @@ quoteType v = do kit <- quotingKit runReduceM (quoteTypeWithKit kit v)++quoteDom :: Dom Type -> TCM Term+quoteDom v = do+ kit <- quotingKit+ runReduceM (quoteDomWithKit kit v)++quoteDefn :: Definition -> TCM Term+quoteDefn def = do+ kit <- quotingKit+ runReduceM (quoteDefnWithKit kit def)++quoteList :: [Term] -> TCM Term+quoteList xs = do+ kit <- quotingKit+ runReduceM (quoteListWithKit kit pure xs)+
+ src/full/Agda/TypeChecking/ReconstructParameters.hs view
@@ -0,0 +1,83 @@+{-# LANGUAGE CPP #-}+-- | Reconstruct dropped parameters from constructors. Used by+-- with-abstraction to avoid ill-typed abstractions (#745). Note that the+-- term in invalid after parameter reconstruction. Parameters need to be+-- dropped again before using it.+module Agda.TypeChecking.ReconstructParameters where++import Control.Applicative+import Data.Traversable++import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.Syntax.Internal.Generic++import Agda.TypeChecking.Monad+import Agda.TypeChecking.CheckInternal+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Pretty++import Agda.Utils.Size++import Agda.Utils.Impossible+#include "undefined.h"++reconstructParametersInType :: Type -> TCM Type+reconstructParametersInType a =+ traverse (reconstructParameters (sort $ getSort a)) a++reconstructParametersInTel :: Telescope -> TCM Telescope+reconstructParametersInTel EmptyTel = return EmptyTel+reconstructParametersInTel (ExtendTel a tel) = do+ ar <- reconstructParametersInType (unDom a)+ addContext (absName tel, a) $+ ExtendTel (ar <$ a) <$> traverse reconstructParametersInTel tel++reconstructParametersInEqView :: EqualityView -> TCM EqualityView+reconstructParametersInEqView (EqualityType s eq l a u v) =+ EqualityType s eq l <$> traverse (reconstructParameters $ sort s) a+ <*> traverse (reconstructParameters $ El s $ unArg a) u+ <*> traverse (reconstructParameters $ El s $ unArg a) v+reconstructParametersInEqView (OtherType a) = OtherType <$> reconstructParametersInType a++reconstructParameters :: Type -> Term -> TCM Term+reconstructParameters a v = do+ reportSDoc "tc.with.reconstruct" 30 $+ sep [ text "reconstructing parameters in"+ , nest 2 $ sep [ prettyTCM v <+> text ":", nest 2 $ prettyTCM a ] ]+ v <- checkInternal' (defaultAction{ postAction = reconstruct }) v a+ reportSDoc "tc.with.reconstruct" 30 $+ nest 2 $ text "-->" <+> prettyTCM v+ return v+ where+ reconstruct a v = do+ case ignoreSharing v of+ Con h vs -> do+ TelV tel a <- telView a+ let under = size tel -- under-applied when under > 0+ reportSDoc "tc.with.reconstruct" 50 $+ sep [ text "reconstructing"+ , nest 2 $ sep [ prettyTCM v <+> text ":"+ , nest 2 $ prettyTCM a ] ]+ case ignoreSharing (unEl a) of+ Def d es -> do+ Just n <- defParameters <$> getConstInfo d+ let Just ps = applySubst (strengthenS __IMPOSSIBLE__ under) . take n <$> allApplyElims es+ reportSLn "tc.with.reconstruct" 50 $ show n ++ " parameters"+ -- TODO: the reconstructed parameters are not reconstructed recursively!+ return $ Con h (ps ++ vs)+ _ -> __IMPOSSIBLE__+ _ -> return v++dropParameters :: TermLike a => a -> TCM a+dropParameters = traverseTermM dropPars+ where+ dropPars v =+ case ignoreSharing v of+ Con c vs -> do+ Constructor{ conData = d } <- theDef <$> getConstInfo (conName c)+ Just n <- defParameters <$> getConstInfo d+ return $ Con c $ drop n vs+ _ -> return v
src/full/Agda/TypeChecking/RecordPatterns.hs view
@@ -27,10 +27,10 @@ import Agda.Syntax.Common import Agda.Syntax.Internal as I+import Agda.Syntax.Internal.Pattern as I import Agda.TypeChecking.CompiledClause import Agda.TypeChecking.Coverage.SplitTree import Agda.TypeChecking.Datatypes-import Agda.TypeChecking.Errors import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty hiding (pretty) import Agda.TypeChecking.Records@@ -39,6 +39,7 @@ import Agda.TypeChecking.Telescope import Agda.Utils.Either+import Agda.Utils.Functor import Agda.Utils.List import qualified Agda.Utils.Map as Map import Agda.Utils.Maybe@@ -75,7 +76,6 @@ ProjP{} -> __IMPOSSIBLE__ -- copattern cannot appear here where proj p = (`applyE` [Proj $ unArg p])--- proj p = \ x -> Def (unArg p) [defaultArg x] comb :: (Term -> Term) -> Pattern -> TCM [Term -> Term] comb prj p = map (\ f -> f . prj) <$> recordPatternToProjections p @@ -115,6 +115,12 @@ (mid , last) = splitAt n rest in (init, mid, last) +getEtaAndArity :: QName -> TCM (Bool, Nat)+getEtaAndArity c =+ for (getConstructorInfo c) $ \i ->+ case i of+ DataCon n -> (False, n)+ RecordCon eta fs -> (eta == YesEta, size fs) translateCompiledClauses :: CompiledClauses -> TCM CompiledClauses translateCompiledClauses cc = snd <$> loop cc@@ -126,8 +132,8 @@ Done xs t -> return (map (const True) xs, cc) Case i cs -> loops i cs - loops :: Int -- split variable- -> Case CompiledClauses -- original split tree+ loops :: Arg Int -- ^ split variable+ -> Case CompiledClauses -- ^ original split tree -> TCM ([Bool], CompiledClauses) loops i cs@Branches{ projPatterns = cop , conBranches = conMap@@ -140,20 +146,24 @@ -- recurse on compute variable status of literal clauses (xssl, litMap) <- Map.unzip <$> Trav.mapM loop litMap- let xsl = conjColumns (xsa : insertColumn i False (Map.elems xssl))+ let xsl = conjColumns (xsa : insertColumn (unArg i) False (Map.elems xssl)) -- recurse on constructor clauses (ccs, xssc, conMap) <- Map.unzip3 <$> do Trav.forM (Map.mapWithKey (,) conMap) $ \ (c, WithArity ar cc) -> do (xs, cc) <- loop cc--- dataOrRecCon <- getConstructorArity c -- TODO: c could be a projection dataOrRecCon <- do isProj <- isProjection c case isProj of- Nothing -> getConstructorArity c- Just{} -> return $ Left 0+ Nothing -> do+ i <- getConstructorInfo c+ case i of+ DataCon n -> return $ Left n+ RecordCon NoEta fs -> return $ Left (size fs)+ RecordCon YesEta fs -> return $ Right fs+ Just{} -> return $ Left 0 let (isRC, n) = either (False,) ((True,) . size) dataOrRecCon- (xs0, rest) = genericSplitAt i xs+ (xs0, rest) = genericSplitAt (unArg i) xs (xs1, xs2 ) = genericSplitAt n rest -- if all dropped variables (xs1) are virgins and we are record cons. -- then new variable x is also virgin@@ -216,8 +226,8 @@ -- positions greater or equal to @i@ by one. -- Otherwise, we have to lower ---replaceByProjections :: Int -> [QName] -> CompiledClauses -> CompiledClauses-replaceByProjections i projs cc =+replaceByProjections :: Arg Int -> [QName] -> CompiledClauses -> CompiledClauses+replaceByProjections (Arg ai i) projs cc = let n = length projs loop :: Int -> CompiledClauses -> CompiledClauses@@ -226,10 +236,10 @@ -- if j < i, we leave j untouched, but we increase i by the number -- of variables replacing j in the branches- | j < i -> Case j $ loops i cs+ | unArg j < i -> Case j $ loops i cs -- if j >= i then we shrink j by (n-1)- | otherwise -> Case (j - (n-1)) $ fmap (loop i) cs+ | otherwise -> Case (j <&> \ k -> k - (n-1)) $ fmap (loop i) cs Done xs v -> -- we have to delete (n-1) variables from xs@@ -237,10 +247,9 @@ let (xs0,xs1,xs2) = cutSublist i n xs names | null xs1 = ["r"] | otherwise = map unArg xs1- x = defaultArg $ foldr1 appendArgNames names+ x = Arg ai $ foldr1 appendArgNames names xs' = xs0 ++ x : xs2 us = map (\ p -> Var 0 [Proj p]) (reverse projs)--- us = map (\ p -> Def p [defaultArg $ var 0]) (reverse projs) -- go from level (i + n - 1) to index (subtract from |xs|-1) index = length xs - (i + n) in Done xs' $ applySubst (liftS (length xs2) $ us ++# raiseS 1) v@@ -302,7 +311,7 @@ loop t = case t of SplittingDone n -> return (replicate n True, SplittingDone n) SplitAt i ts -> do- (xs, ts) <- loops i ts+ (xs, ts) <- loops (unArg i) ts return (xs, SplitAt i ts) loops :: Int -> SplitTrees -> TCM ([Bool], RecordSplitTrees)@@ -310,7 +319,7 @@ (xss, ts) <- unzip <$> do forM ts $ \ (c, t) -> do (xs, t) <- loop t- (isRC, n) <- either (False,) ((True,) . size) <$> getConstructorArity c+ (isRC, n) <- getEtaAndArity c let (xs0, rest) = genericSplitAt i xs (xs1, xs2) = genericSplitAt n rest x = isRC && and xs1@@ -333,7 +342,7 @@ -- start with n virgin variables return (replicate n True, SplittingDone n) SplitAt i ts -> do- (x, xs, ts) <- loops i ts+ (x, xs, ts) <- loops (unArg i) ts -- if we case on record constructor, drop case let t' = if x then case ts of@@ -352,7 +361,7 @@ (rs, xss, ts) <- unzip3 <$> do forM ts $ \ (c, t) -> do (xs, t) <- loop t- (isRC, n) <- either (False,) ((True,) . size) <$> getConstructorArity c+ (isRC, n) <- getEtaAndArity c -- now drop variables from i to i+n-1 let (xs0, rest) = genericSplitAt i xs (xs1, xs2) = genericSplitAt n rest@@ -381,9 +390,9 @@ instance DropFrom (SplitTree' c) where dropFrom i n t = case t of SplittingDone m -> SplittingDone (m - n)- SplitAt j ts- | j >= i + n -> SplitAt (j - n) $ dropFrom i n ts- | j < i -> SplitAt j $ dropFrom i n ts+ SplitAt x@(Arg ai j) ts+ | j >= i + n -> SplitAt (Arg ai $ j - n) $ dropFrom i n ts+ | j < i -> SplitAt x $ dropFrom i n ts | otherwise -> __IMPOSSIBLE__ instance DropFrom (c, SplitTree' c) where@@ -432,7 +441,7 @@ -- cs: List of changes, with types in the context of the old -- telescope. - (ps, s, cs) <- runRecPatM $ translatePatterns $ namedClausePats clause+ (ps, s, cs) <- runRecPatM $ translatePatterns $ unnumberPatVars $ namedClausePats clause let -- Number of variables + dot patterns in new clause. noNewPatternVars = size cs@@ -503,8 +512,7 @@ -- New clause. c = clause { clauseTel = newTel- , clausePerm = newPerm- , namedClausePats = applySubst lhsSubst ps+ , namedClausePats = numberPatVars newPerm $ applySubst lhsSubst ps , clauseBody = translateBody cs rhsSubst $ clauseBody clause } @@ -512,7 +520,6 @@ [ text "Original clause:" , nest 2 $ inTopContext $ vcat [ text "delta =" <+> prettyTCM (clauseTel clause)- , text "perm =" <+> prettyTCM (clausePerm clause) , text "pats =" <+> text (show $ clausePats clause) ] , text "Intermediate results:"@@ -537,7 +544,6 @@ [ text "Translated clause:" , nest 2 $ vcat [ text "delta =" <+> prettyTCM (clauseTel c)- , text "perm =" <+> text (show $ clausePerm c) , text "ps =" <+> text (show $ clausePats c) , text "body =" <+> text (show $ clauseBody c) , text "body =" <+> prettyTCM (clauseBody c)@@ -595,7 +601,7 @@ -- patterns, should be removed, and a new variable, with the name @x@, -- inserted instead. The type of the new variable is @t@. -type Change = Either Pattern (Kind -> Nat, ArgName, I.Dom Type)+type Change = Either Pattern (Kind -> Nat, ArgName, Dom Type) type Changes = [Change] instance Pretty (Kind -> Nat) where@@ -616,7 +622,7 @@ = Leaf Pattern -- ^ Corresponds to variable and dot patterns; contains the -- original pattern.- | RecCon (I.Arg Type) [(Term -> Term, RecordTree)]+ | RecCon (Arg Type) [(Term -> Term, RecordTree)] -- ^ @RecCon t args@ stands for a record constructor application: -- @t@ is the type of the application, and the list contains a -- projection function and a tree for every argument.@@ -696,7 +702,7 @@ translatePattern p@LitP{} = return (p, [], []) translatePattern p@ProjP{}= return (p, [], []) -translatePatterns :: [I.NamedArg Pattern] -> RecPatM ([I.NamedArg Pattern], [Term], Changes)+translatePatterns :: [NamedArg Pattern] -> RecPatM ([NamedArg Pattern], [Term], Changes) translatePatterns ps = do (ps', ss, cs) <- unzip3 <$> mapM (translatePattern . namedArg) ps return (zipWith (\p -> fmap (p <$)) ps' ps, concat ss, concat cs)@@ -749,10 +755,10 @@ :: Changes -- ^ Explanation of how the telescope should be changed. Types -- should be in the context of the old telescope.- -> [(ArgName, I.Dom Type)]+ -> [(ArgName, Dom Type)] -- ^ Old telescope, flattened, in textual left-to-right -- order.- -> [Maybe (ArgName, I.Dom Type)]+ -> [Maybe (ArgName, Dom Type)] -- ^ New telescope, flattened, in textual left-to-right order. -- 'Nothing' is used to indicate the locations of dot patterns. translateTel (Left (DotP{}) : rest) tel = Nothing : translateTel rest tel
src/full/Agda/TypeChecking/Records.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE PatternGuards #-} {-# LANGUAGE TupleSections #-} @@ -14,6 +14,7 @@ import Agda.Syntax.Common import qualified Agda.Syntax.Concrete.Name as C+import Agda.Syntax.Concrete (FieldAssignment'(..), nameFieldA) import Agda.Syntax.Abstract.Name import Agda.Syntax.Internal as I import Agda.Syntax.Position@@ -25,6 +26,8 @@ import Agda.TypeChecking.Reduce.Monad () import Agda.TypeChecking.Telescope +import {-# SOURCE #-} Agda.TypeChecking.ProjectionLike (eligibleForProjectionLike)+ import Agda.Utils.Either import Agda.Utils.Functor (for, ($>)) import Agda.Utils.Lens@@ -59,6 +62,41 @@ assocHoles xs = [ (x, (v, xs')) | ((x, v), xs') <- holes xs ] +-- | A record field assignment @record{xs = es}@ might not mention all+-- visible fields. @insertMissingFields@ inserts placeholders for+-- the missing visible fields and returns the values in order+-- of the fields in the record declaration.+insertMissingFields+ :: QName -- ^ Name of record type (for error reporting).+ -> (C.Name -> a) -- ^ Function to generate a placeholder for missing visible field.+ -> [FieldAssignment' a] -- ^ Given fields.+ -> [Arg C.Name] -- ^ All record field names with 'ArgInfo'.+ -> TCM [NamedArg a] -- ^ Given fields enriched by placeholders for missing explicit fields.+insertMissingFields r placeholder fs axs = do+ let -- Just field names.+ xs = map unArg axs+ -- Compute the list of given fields, decorated with the ArgInfo from the record def.+ let arg x e =+ case [ a | a <- axs, unArg a == x ] of+ [a] -> unnamed e <$ a+ _ -> defaultNamedArg e -- we only end up here if the field names are bad+ givenFields = [ (x, Just $ arg x e) | FieldAssignment x e <- fs ]+ -- Compute a list of p[aceholders for the missing visible fields.+ let missingExplicits =+ [ (x, Just $ unnamed . placeholder <$> a)+ | a <- filter notHidden axs+ , let x = unArg a+ , x `notElem` map (view nameFieldA) fs+ ]+ -- In es omitted explicit fields are replaced by placeholders+ -- (from missingExplicits). Omitted implicit or instance fields+ -- are still left out and inserted later by checkArguments_.+ catMaybes <$> do+ -- Default value @Nothing@ will only be used for missing hidden fields.+ -- These can be ignored as they will be inserted by @checkArguments_@.+ orderFields r Nothing xs $ givenFields ++ missingExplicits++ -- | The name of the module corresponding to a record. recordModule :: QName -> ModuleName recordModule = mnameFromList . qnameToList@@ -75,10 +113,10 @@ where fromP Projection{ projProper = mp, projFromType = r} = mp $> r -- | Get the field names of a record.-getRecordFieldNames :: QName -> TCM [I.Arg C.Name]+getRecordFieldNames :: QName -> TCM [Arg C.Name] getRecordFieldNames r = recordFieldNames <$> getRecordDef r -recordFieldNames :: Defn -> [I.Arg C.Name]+recordFieldNames :: Defn -> [Arg C.Name] recordFieldNames = map (fmap (nameConcrete . qnameName)) . recFields -- | Find all records with at least the given fields.@@ -98,7 +136,7 @@ getRecordFieldTypes r = recTel <$> getRecordDef r -- | Get the field names belonging to a record type.-getRecordTypeFields :: Type -> TCM [I.Arg QName]+getRecordTypeFields :: Type -> TCM [Arg QName] getRecordTypeFields t = case ignoreSharing $ unEl t of Def r _ -> do@@ -154,6 +192,51 @@ caseMaybeM (isRecord r) no $ \ def -> return $ Right (r,vs,def) _ -> no +-- | @getDefType f t@ computes the type of (possibly projection-(like))+-- function @f@ whose first argument has type @t@.+-- The `parameters' for @f@ are extracted from @t@.+-- @Nothing@ if @f@ is projection(like) but+-- @t@ is not a data/record/axiom type.+--+-- Precondition: @t@ is reduced.+--+-- See also: 'Agda.TypeChecking.Datatypes.getConType'+getDefType :: QName -> Type -> TCM (Maybe Type)+getDefType f t = do+ def <- getConstInfo f+ let a = defType def+ -- if @f@ is not a projection (like) function, @a@ is the correct type+ fallback = return $ Just a+ caseMaybe (isProjection_ $ theDef def) fallback $+ \ (Projection{ projIndex = n }) -> if n <= 0 then fallback else do+ -- otherwise, we have to instantiate @a@ to the "parameters" of @f@+ let npars | n == 0 = __IMPOSSIBLE__+ | otherwise = n - 1+ -- we get the parameters from type @t@+ case ignoreSharing $ unEl t of+ Def d es -> do+ -- Andreas, 2013-10-22+ -- we need to check this @Def@ is fully reduced.+ -- If it is stuck due to disabled reductions+ -- (because of failed termination check),+ -- we will produce garbage parameters.+ ifNotM (eligibleForProjectionLike d) failNotElig $ {- else -} do+ -- now we know it is reduced, we can safely take the parameters+ let pars = fromMaybe __IMPOSSIBLE__ $ allApplyElims $ take npars es+ Just <$> a `piApplyM` pars+ _ -> failNotDef+ where+ failNotElig = failure "is not eligible for projection-likeness"+ failNotDef = failure "is not a Def."+ failure reason = do+ reportSDoc "tc.deftype" 25 $ sep+ [ text "Def. " <+> prettyTCM f <+> text " is projection(like)"+ , text "but the type "+ , prettyTCM t+ , text $ "of its argument " ++ reason+ ]+ return Nothing+ -- | The analogue of 'piApply'. If @v@ is a value of record type @t@ -- with field @f@, then @projectTyped v t f@ returns the type of @f v@. --@@ -216,7 +299,7 @@ -- No eta-expansion. Projections do not preserve guardedness. unguardedRecord :: QName -> TCM () unguardedRecord q = modifySignature $ updateDefinition q $ updateTheDef $ updateRecord- where updateRecord r@Record{} = r { recEtaEquality = False, recRecursive = True }+ where updateRecord r@Record{} = r { recEtaEquality' = setEtaEquality (recEtaEquality' r) False, recRecursive = True } updateRecord _ = __IMPOSSIBLE__ -- | Mark record type as recursive.@@ -382,8 +465,8 @@ let Record{ recConHead = con , recFields = xs , recTel = tel- , recEtaEquality = eta } = def+ eta = recEtaEquality def tel' = apply tel pars unless eta __IMPOSSIBLE__ -- make sure we do not expand non-eta records case ignoreSharing u of@@ -393,11 +476,9 @@ return (tel', con, args) -- Not yet expanded. _ -> do+ -- Andreas, < 2016-01-18: Note: recFields are always the original projections,+ -- thus, we can use them in Proj directly. let xs' = for xs $ fmap $ \ x -> u `applyE` [Proj x]-{- recFields are always the original projections- -- Andreas, 2013-10-22 call applyDef to make sure we get the original proj.- -- xs' <- mapM (traverse (`applyDef` defaultArg u)) xs--} reportSDoc "tc.record.eta" 20 $ vcat [ text "eta expanding" <+> prettyTCM u <+> text ":" <+> prettyTCM r , nest 2 $ vcat@@ -426,7 +507,7 @@ etaContractRecord :: HasConstInfo m => QName -> ConHead -> Args -> m Term etaContractRecord r c args = do Just Record{ recFields = xs } <- isRecord r- let check :: I.Arg Term -> I.Arg QName -> Maybe (Maybe Term)+ let check :: Arg Term -> Arg QName -> Maybe (Maybe Term) check a ax = do -- @a@ is the constructor argument, @ax@ the corr. record field name -- skip irrelevant record fields by returning DontCare@@ -472,7 +553,7 @@ def <- getRecordDef r emap (Con $ recConHead def) <$> check (recTel def `apply` ps) where- check :: Telescope -> TCM (Either MetaId (Maybe [I.Arg Term]))+ check :: Telescope -> TCM (Either MetaId (Maybe [Arg Term])) check tel = do reportSDoc "tc.meta.eta" 30 $ text "isSingletonRecord' checking telescope " <+> prettyTCM tel
src/full/Agda/TypeChecking/Records.hs-boot view
@@ -1,8 +1,8 @@ module Agda.TypeChecking.Records where +import Agda.Syntax.Common import Agda.Syntax.Internal--- import Agda.Syntax.Abstract.Name import qualified Agda.Syntax.Concrete.Name as C import Agda.TypeChecking.Monad @@ -11,3 +11,4 @@ getRecordFieldNames :: QName -> TCM [Arg C.Name] etaContractRecord :: HasConstInfo m => QName -> ConHead -> Args -> m Term isGeneratedRecordConstructor :: QName -> TCM Bool+isRecordConstructor :: MonadTCM tcm => QName -> tcm (Maybe (QName, Defn))
src/full/Agda/TypeChecking/Reduce.hs view
@@ -1,7 +1,8 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE PatternGuards #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE UndecidableInstances #-} #if __GLASGOW_HASKELL__ >= 710 {-# LANGUAGE FlexibleContexts #-}@@ -20,14 +21,14 @@ import Data.Hashable import Agda.Syntax.Position-import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Internal.Pattern import Agda.Syntax.Scope.Base (Scope) import Agda.Syntax.Literal import Agda.TypeChecking.Monad hiding ( underAbstraction_, enterClosure, isInstantiatedMeta- , reportSDoc, reportSLn, getConstInfo+ , getConstInfo , lookupMeta ) import qualified Agda.TypeChecking.Monad as TCM import Agda.TypeChecking.Monad.Builtin hiding (getPrimitive, constructorForm)@@ -42,13 +43,10 @@ import {-# SOURCE #-} Agda.TypeChecking.Pretty import {-# SOURCE #-} Agda.TypeChecking.Rewriting -import Agda.Utils.Either import Agda.Utils.Function import Agda.Utils.Functor import Agda.Utils.Monad import Agda.Utils.HashMap (HashMap)-import Agda.Utils.Maybe-import Agda.Utils.Monad import Agda.Utils.Tuple #include "undefined.h"@@ -104,7 +102,7 @@ instantiate' (Level l) = levelTm <$> instantiate' l instantiate' (Sort s) = sortTm <$> instantiate' s instantiate' v@Shared{} =- __IMPOSSIBLE__ -- updateSharedTerm instantiate' v+ updateSharedTerm instantiate' v instantiate' t = return t instance Instantiate Level where@@ -173,7 +171,9 @@ return $ cl { clValue = x } instance Instantiate Telescope where- instantiate' tel = return tel+ instantiate' EmptyTel = return EmptyTel+ instantiate' (ExtendTel a tel) = ExtendTel <$> instantiate' a <*> instantiate' tel+--instantiate' tel = return tel instance Instantiate Constraint where instantiate' (ValueCmp cmp t u v) = do@@ -187,14 +187,27 @@ instantiate' (SortCmp cmp a b) = uncurry (SortCmp cmp) <$> instantiate' (a,b) instantiate' (Guarded c pid) = Guarded <$> instantiate' c <*> pure pid instantiate' (UnBlock m) = return $ UnBlock m- instantiate' (FindInScope m args) = FindInScope m <$> mapM instantiate' args+ instantiate' (FindInScope m b args) = FindInScope m b <$> mapM instantiate' args instantiate' (IsEmpty r t) = IsEmpty r <$> instantiate' t instantiate' (CheckSizeLtSat t) = CheckSizeLtSat <$> instantiate' t -instance (Ord k, Instantiate e) => Instantiate (Map k e) where+instance Instantiate e => Instantiate (Map k e) where instantiate' = traverse instantiate' +instance Instantiate Candidate where+ instantiate' (Candidate u t eti) = Candidate <$> instantiate' u <*> instantiate' t <*> return eti +instance Instantiate EqualityView where+ instantiate' (OtherType t) = OtherType+ <$> instantiate' t+ instantiate' (EqualityType s eq l t a b) = EqualityType+ <$> instantiate' s+ <*> return eq+ <*> instantiate' l+ <*> instantiate' t+ <*> instantiate' a+ <*> instantiate' b+ --------------------------------------------------------------------------- -- * Reduction to weak head normal form. ---------------------------------------------------------------------------@@ -271,7 +284,7 @@ NotBlocked r _ -> return $ NotBlocked r $ NeutralLevel r v -instance (Subst t, Reduce t) => Reduce (Abs t) where+instance (Subst t a, Reduce a) => Reduce (Abs a) where reduce' b@(Abs x _) = Abs x <$> underAbstraction_ b reduce' reduce' (NoAbs x v) = NoAbs x <$> reduce' v @@ -321,15 +334,14 @@ Var _ _ -> done Lam _ _ -> done DontCare _ -> done- ExtLam{} -> __IMPOSSIBLE__- Shared{} -> __IMPOSSIBLE__ -- updateSharedTermF reduceB' v+ Shared{} -> updateSharedTermF reduceB' v where -- NOTE: reduceNat can traverse the entire term.- reduceNat v@Shared{} = __IMPOSSIBLE__ -- updateSharedTerm reduceNat v+ reduceNat v@Shared{} = updateSharedTerm reduceNat v reduceNat v@(Con c []) = do mz <- getBuiltin' builtinZero case v of- _ | Just v == mz -> return $ Lit $ LitInt (getRange c) 0+ _ | Just v == mz -> return $ Lit $ LitNat (getRange c) 0 _ -> return v reduceNat v@(Con c [a]) | notHidden a && isRelevant a = do ms <- fmap ignoreSharing <$> getBuiltin' builtinSuc@@ -338,7 +350,7 @@ _ -> return v where inc w = case ignoreSharing w of- Lit (LitInt r n) -> Lit (LitInt (fuseRange c r) $ n + 1)+ Lit (LitNat r n) -> Lit (LitNat (fuseRange c r) $ n + 1) _ -> Con c [defaultArg w] reduceNat v = return v @@ -349,16 +361,19 @@ -- need also to instantiate metas, see Issue 826. unfoldCorecursionE :: Elim -> ReduceM (Blocked Elim) unfoldCorecursionE e@(Proj f) = return $ notBlocked e-unfoldCorecursionE (Apply (Common.Arg info v)) = fmap (Apply . Common.Arg info) <$>+unfoldCorecursionE (Apply (Arg info v)) = fmap (Apply . Arg info) <$> unfoldCorecursion v unfoldCorecursion :: Term -> ReduceM (Blocked Term) unfoldCorecursion = rewriteAfter $ \ v -> do v <- instantiate' v- case v of+ case compressPointerChain v of Def f es -> unfoldDefinitionE True unfoldCorecursion (Def f []) f es- Shared{} -> fmap shared <$> unfoldCorecursion (ignoreSharing v) -- don't update when unfolding corecursion!- _ -> reduceB' v+ v@(Shared p) ->+ case derefPtr p of+ Def{} -> updateSharedFM unfoldCorecursion v+ _ -> reduceB' v+ _ -> reduceB' v -- | If the first argument is 'True', then a single delayed clause may -- be unfolded.@@ -391,16 +406,24 @@ dontUnfold = (defNonterminating info && notElem NonTerminatingReductions allowed) || (defDelayed info == Delayed && not unfoldDelayed)+ copatterns =+ case def of+ Function{funCopatternLHS = b} -> b+ _ -> False case def of Constructor{conSrcCon = c} -> retSimpl $ notBlocked $ Con (c `withRangeOf` f) [] `applyE` es Primitive{primAbstr = ConcreteDef, primName = x, primClauses = cls} -> do pf <- fromMaybe __IMPOSSIBLE__ <$> getPrimitive' x- reducePrimitive x v0 f es pf dontUnfold- cls (defCompiled info)+ if FunctionReductions `elem` allowed+ then reducePrimitive x v0 f es pf dontUnfold+ cls (defCompiled info)+ else retSimpl $ notBlocked v _ -> do if FunctionReductions `elem` allowed ||- (isJust (isProjection_ def) && ProjectionReductions `elem` allowed) -- includes projection-like+ (isJust (isProjection_ def) && ProjectionReductions `elem` allowed) || -- includes projection-like+ (isInlineFun def && InlineReductions `elem` allowed) ||+ (copatterns && CopatternReductions `elem` allowed) then reduceNormalE keepGoing v0 f (map notReduced es) dontUnfold@@ -490,16 +513,16 @@ -- first, possibly rewrite literal v to constructor form v <- constructorForm v- reportSDoc "tc.inj.reduce" 30 $ text "reduceHead" <+> prettyTCM v+ traceSDoc "tc.inj.reduce" 30 (text "reduceHead" <+> prettyTCM v) $ do case ignoreSharing v of Def f es -> do abstractMode <- envAbstractMode <$> ask isAbstract <- treatAbstractly f- reportSLn "tc.inj.reduce" 50 $+ traceSLn "tc.inj.reduce" 50 ( "reduceHead: we are in " ++ show abstractMode++ "; " ++ show f ++ " is treated " ++ if isAbstract then "abstractly" else "concretely"-+ ) $ do let v0 = Def f [] red = unfoldDefinitionE False reduceHead' v0 f es def <- theDef <$> getConstInfo f@@ -510,7 +533,7 @@ -- type checker loop here on non-terminating functions. -- see test/fail/TerminationInfiniteRecord Function{ funClauses = [ _ ], funDelayed = NotDelayed, funTerminates = Just True } -> do- reportSLn "tc.inj.reduce" 50 $ "reduceHead: head " ++ show f ++ " is Function"+ traceSLn "tc.inj.reduce" 50 ("reduceHead: head " ++ show f ++ " is Function") $ do red Datatype{ dataClause = Just _ } -> red Record{ recClause = Just _ } -> red@@ -550,7 +573,7 @@ where goCls :: [Clause] -> [Elim] -> ReduceM (Reduced (Blocked Term) Term) goCls cl es = do- reportSLn "tc.reduce'" 95 $ "Reduce.goCls tries reduction, #clauses = " ++ show (length cl)+ traceSLn "tc.reduce'" 95 ("Reduce.goCls tries reduction, #clauses = " ++ show (length cl)) $ do case cl of -- Andreas, 2013-10-26 In case of an incomplete match, -- we just do not reduce. This allows adding single function@@ -564,7 +587,7 @@ -- if clause is underapplied, skip to next clause if length es < n then goCls cls es else do let (es0, es1) = splitAt n es- (m, es0) <- matchCopatterns pats es0+ (m, es0) <- matchCopatterns (unnumberPatVars pats) es0 es <- return $ es0 ++ es1 case m of No -> goCls cls es@@ -602,7 +625,8 @@ return $ cl { clValue = x } instance Reduce Telescope where- reduce' tel = return tel+ reduce' EmptyTel = return EmptyTel+ reduce' (ExtendTel a tel) = ExtendTel <$> reduce' a <*> reduce' tel instance Reduce Constraint where reduce' (ValueCmp cmp t u v) = do@@ -616,13 +640,27 @@ reduce' (SortCmp cmp a b) = uncurry (SortCmp cmp) <$> reduce' (a,b) reduce' (Guarded c pid) = Guarded <$> reduce' c <*> pure pid reduce' (UnBlock m) = return $ UnBlock m- reduce' (FindInScope m cands) = FindInScope m <$> mapM reduce' cands+ reduce' (FindInScope m b cands) = FindInScope m b <$> mapM reduce' cands reduce' (IsEmpty r t) = IsEmpty r <$> reduce' t reduce' (CheckSizeLtSat t) = CheckSizeLtSat <$> reduce' t -instance (Ord k, Reduce e) => Reduce (Map k e) where+instance Reduce e => Reduce (Map k e) where reduce' = traverse reduce' +instance Reduce Candidate where+ reduce' (Candidate u t eti) = Candidate <$> reduce' u <*> reduce' t <*> return eti++instance Reduce EqualityView where+ reduce' (OtherType t) = OtherType+ <$> reduce' t+ reduce' (EqualityType s eq l t a b) = EqualityType+ <$> reduce' s+ <*> return eq+ <*> reduce' l+ <*> reduce' t+ <*> reduce' a+ <*> reduce' b+ --------------------------------------------------------------------------- -- * Simplification ---------------------------------------------------------------------------@@ -639,9 +677,9 @@ Def f vs -> do let keepGoing v = (,notBlocked v) <$> getSimplification -- Andrea(s), 2014-12-05 OK? (simpl, v) <- unfoldDefinition' False keepGoing (Def f []) f vs- reportSDoc "tc.simplify'" 20 $+ traceSDoc "tc.simplify'" 20 ( text ("simplify': unfolding definition returns " ++ show simpl)- <+> prettyTCM (ignoreBlocking v)+ <+> prettyTCM (ignoreBlocking v)) $ do case simpl of YesSimplification -> simplifyBlocked' v -- Dangerous, but if @simpl@ then @v /= Def f vs@ NoSimplification -> Def f <$> simplify' vs@@ -654,8 +692,7 @@ Var i vs -> Var i <$> simplify' vs Lam h v -> Lam h <$> simplify' v DontCare v -> dontCare <$> simplify' v- ExtLam{} -> __IMPOSSIBLE__- Shared{} -> __IMPOSSIBLE__ -- updateSharedTerm simplify' v+ Shared{} -> updateSharedTerm simplify' v simplifyBlocked' :: Simplify t => Blocked t -> ReduceM t simplifyBlocked' (Blocked _ t) = return t@@ -693,7 +730,7 @@ NeutralLevel r v -> NeutralLevel r <$> simplify' v -- ?? UnreducedLevel v -> UnreducedLevel <$> simplify' v -- ?? -instance (Subst t, Simplify t) => Simplify (Abs t) where+instance (Subst t a, Simplify a) => Simplify (Abs a) where simplify' a@(Abs x _) = Abs x <$> underAbstraction_ a simplify' simplify' (NoAbs x v) = NoAbs x <$> simplify' v @@ -709,7 +746,7 @@ instance Simplify t => Simplify [t] where simplify' = traverse simplify' -instance (Ord k, Simplify e) => Simplify (Map k e) where+instance Simplify e => Simplify (Map k e) where simplify' = traverse simplify' instance Simplify a => Simplify (Maybe a) where@@ -728,7 +765,7 @@ x <- enterClosure cl simplify' return $ cl { clValue = x } -instance (Subst a, Simplify a) => Simplify (Tele a) where+instance (Subst t a, Simplify a) => Simplify (Tele a) where simplify' EmptyTel = return EmptyTel simplify' (ExtendTel a b) = uncurry ExtendTel <$> simplify' (a, b) @@ -747,7 +784,7 @@ simplify' (SortCmp cmp a b) = uncurry (SortCmp cmp) <$> simplify' (a,b) simplify' (Guarded c pid) = Guarded <$> simplify' c <*> pure pid simplify' (UnBlock m) = return $ UnBlock m- simplify' (FindInScope m cands) = FindInScope m <$> mapM simplify' cands+ simplify' (FindInScope m b cands) = FindInScope m b <$> mapM simplify' cands simplify' (IsEmpty r t) = IsEmpty r <$> simplify' t simplify' (CheckSizeLtSat t) = CheckSizeLtSat <$> simplify' t @@ -775,7 +812,20 @@ instance Simplify DisplayForm where simplify' (Display n ps v) = Display n <$> simplify' ps <*> return v +instance Simplify Candidate where+ simplify' (Candidate u t eti) = Candidate <$> simplify' u <*> simplify' t <*> return eti +instance Simplify EqualityView where+ simplify' (OtherType t) = OtherType+ <$> simplify' t+ simplify' (EqualityType s eq l t a b) = EqualityType+ <$> simplify' s+ <*> return eq+ <*> simplify' l+ <*> simplify' t+ <*> simplify' a+ <*> simplify' b+ --------------------------------------------------------------------------- -- * Normalisation ---------------------------------------------------------------------------@@ -797,9 +847,10 @@ normalise' (El s t) = El <$> normalise' s <*> normalise' t instance Normalise Term where- normalise' v =- do v <- reduce' v- case v of+ normalise' = ignoreBlocking <.> rewriteAfter (reduceB' >=> traverse normaliseArgs)+ where+ normaliseArgs :: Term -> ReduceM Term+ normaliseArgs v = case v of Var n vs -> Var n <$> normalise' vs Con c vs -> Con c <$> normalise' vs Def f vs -> Def f <$> normalise' vs@@ -809,8 +860,7 @@ Lam h b -> Lam h <$> normalise' b Sort s -> sortTm <$> normalise' s Pi a b -> uncurry Pi <$> normalise' (a,b)- Shared{} -> __IMPOSSIBLE__ -- updateSharedTerm normalise' v- ExtLam{} -> __IMPOSSIBLE__+ Shared{} -> updateSharedTerm normalise' v DontCare _ -> return v instance Normalise Elim where@@ -838,7 +888,7 @@ normalise' (Bind b) = Bind <$> normalise' b normalise' NoBody = return NoBody -instance (Subst t, Normalise t) => Normalise (Abs t) where+instance (Subst t a, Normalise a) => Normalise (Abs a) where normalise' a@(Abs x _) = Abs x <$> underAbstraction_ a normalise' normalise' (NoAbs x v) = NoAbs x <$> normalise' v @@ -868,7 +918,7 @@ x <- enterClosure cl normalise' return $ cl { clValue = x } -instance (Subst a, Normalise a) => Normalise (Tele a) where+instance (Subst t a, Normalise a) => Normalise (Tele a) where normalise' EmptyTel = return EmptyTel normalise' (ExtendTel a b) = uncurry ExtendTel <$> normalise' (a, b) @@ -887,19 +937,25 @@ normalise' (SortCmp cmp a b) = uncurry (SortCmp cmp) <$> normalise' (a,b) normalise' (Guarded c pid) = Guarded <$> normalise' c <*> pure pid normalise' (UnBlock m) = return $ UnBlock m- normalise' (FindInScope m cands) = FindInScope m <$> mapM normalise' cands+ normalise' (FindInScope m b cands) = FindInScope m b <$> mapM normalise' cands normalise' (IsEmpty r t) = IsEmpty r <$> normalise' t normalise' (CheckSizeLtSat t) = CheckSizeLtSat <$> normalise' t instance Normalise Bool where normalise' = return +instance Normalise Int where+ normalise' = return++instance Normalise Char where+ normalise' = return+ instance Normalise ConPatternInfo where normalise' (ConPatternInfo mr mt) = ConPatternInfo mr <$> normalise' mt -instance Normalise Pattern where+instance Normalise a => Normalise (Pattern' a) where normalise' p = case p of- VarP _ -> return p+ VarP x -> VarP <$> normalise' x LitP _ -> return p ConP c mt ps -> ConP c <$> normalise' mt <*> normalise' ps DotP v -> DotP <$> normalise' v@@ -908,12 +964,26 @@ instance Normalise DisplayForm where normalise' (Display n ps v) = Display n <$> normalise' ps <*> return v -instance (Ord k, Normalise e) => Normalise (Map k e) where+instance Normalise e => Normalise (Map k e) where normalise' = traverse normalise' instance Normalise a => Normalise (Maybe a) where normalise' = traverse normalise' +instance Normalise Candidate where+ normalise' (Candidate u t eti) = Candidate <$> normalise' u <*> normalise' t <*> return eti++instance Normalise EqualityView where+ normalise' (OtherType t) = OtherType+ <$> normalise' t+ normalise' (EqualityType s eq l t a b) = EqualityType+ <$> normalise' s+ <*> return eq+ <*> normalise' l+ <*> normalise' t+ <*> normalise' a+ <*> normalise' b+ --------------------------------------------------------------------------- -- * Full instantiation ---------------------------------------------------------------------------@@ -957,8 +1027,7 @@ Lam h b -> Lam h <$> instantiateFull' b Sort s -> sortTm <$> instantiateFull' s Pi a b -> uncurry Pi <$> instantiateFull' (a,b)- Shared{} -> __IMPOSSIBLE__ -- updateSharedTerm instantiateFull' v- ExtLam{} -> __IMPOSSIBLE__+ Shared{} -> updateSharedTerm instantiateFull' v DontCare v -> dontCare <$> instantiateFull' v instance InstantiateFull Level where@@ -996,11 +1065,14 @@ instance InstantiateFull Bool where instantiateFull' = return +instance InstantiateFull Int where+ instantiateFull' = return+ instance InstantiateFull ConPatternInfo where instantiateFull' (ConPatternInfo mr mt) = ConPatternInfo mr <$> instantiateFull' mt -instance InstantiateFull Pattern where- instantiateFull' v@VarP{} = return v+instance InstantiateFull a => InstantiateFull (Pattern' a) where+ instantiateFull' (VarP x) = VarP <$> instantiateFull' x instantiateFull' (DotP t) = DotP <$> instantiateFull' t instantiateFull' (ConP n mt ps) = ConP n <$> instantiateFull' mt <*> instantiateFull' ps instantiateFull' l@LitP{} = return l@@ -1011,7 +1083,7 @@ instantiateFull' (Bind b) = Bind <$> instantiateFull' b instantiateFull' NoBody = return NoBody -instance (Subst t, InstantiateFull t) => InstantiateFull (Abs t) where+instance (Subst t a, InstantiateFull a) => InstantiateFull (Abs a) where instantiateFull' a@(Abs x _) = Abs x <$> underAbstraction_ a instantiateFull' instantiateFull' (NoAbs x a) = NoAbs x <$> instantiateFull' a @@ -1056,7 +1128,7 @@ SortCmp cmp a b -> uncurry (SortCmp cmp) <$> instantiateFull' (a,b) Guarded c pid -> Guarded <$> instantiateFull' c <*> pure pid UnBlock m -> return $ UnBlock m- FindInScope m cands -> FindInScope m <$> mapM instantiateFull' cands+ FindInScope m b cands -> FindInScope m b <$> mapM instantiateFull' cands IsEmpty r t -> IsEmpty r <$> instantiateFull' t CheckSizeLtSat t -> CheckSizeLtSat <$> instantiateFull' t @@ -1064,10 +1136,10 @@ instantiateFull' (Apply v) = Apply <$> instantiateFull' v instantiateFull' (Proj f) = pure $ Proj f -instance (Ord k, InstantiateFull e) => InstantiateFull (Map k e) where+instance InstantiateFull e => InstantiateFull (Map k e) where instantiateFull' = traverse instantiateFull' -instance (Eq k, Hashable k, InstantiateFull e) => InstantiateFull (HashMap k e) where+instance InstantiateFull e => InstantiateFull (HashMap k e) where instantiateFull' = traverse instantiateFull' instance InstantiateFull ModuleName where@@ -1082,7 +1154,7 @@ instance InstantiateFull Section where instantiateFull' (Section tel) = Section <$> instantiateFull' tel -instance (Subst a, InstantiateFull a) => InstantiateFull (Tele a) where+instance (Subst t a, InstantiateFull a) => InstantiateFull (Tele a) where instantiateFull' EmptyTel = return EmptyTel instantiateFull' (ExtendTel a b) = uncurry ExtendTel <$> instantiateFull' (a, b) @@ -1090,12 +1162,12 @@ instantiateFull' = return instance InstantiateFull Definition where- instantiateFull' (Defn rel x t pol occ df i c inst d) = do+ instantiateFull' (Defn rel x t pol occ df i c inst copy d) = do (t, df, d) <- instantiateFull' (t, df, d)- return $ Defn rel x t pol occ df i c inst d+ return $ Defn rel x t pol occ df i c inst copy d instance InstantiateFull NLPat where- instantiateFull' (PVar x) = return $ PVar x+ instantiateFull' (PVar x y) = return $ PVar x y instantiateFull' (PWild) = return PWild instantiateFull' (PDef x y) = PDef <$> instantiateFull' x <*> instantiateFull' y instantiateFull' (PLam x y) = PLam x <$> instantiateFull' y@@ -1164,20 +1236,23 @@ instantiateFull' (Case n bs) = Case n <$> instantiateFull' bs instance InstantiateFull Clause where- instantiateFull' (Clause r tel perm ps b t) =+ instantiateFull' (Clause r tel ps b t catchall) = Clause r <$> instantiateFull' tel- <*> return perm <*> instantiateFull' ps <*> instantiateFull' b <*> instantiateFull' t+ <*> return catchall instance InstantiateFull Interface where instantiateFull' (Interface h ms mod scope inside- sig b hsImports highlighting pragmas patsyns) =+ sig display b hsImports hsImportsUHC hsCode highlighting pragmas patsyns) = Interface h ms mod scope inside <$> instantiateFull' sig+ <*> instantiateFull' display <*> instantiateFull' b <*> return hsImports+ <*> return hsImportsUHC+ <*> return hsCode <*> return highlighting <*> return pragmas <*> return patsyns@@ -1191,3 +1266,17 @@ instance InstantiateFull a => InstantiateFull (Maybe a) where instantiateFull' = mapM instantiateFull'++instance InstantiateFull Candidate where+ instantiateFull' (Candidate u t eti) = Candidate <$> instantiateFull' u <*> instantiateFull' t <*> return eti++instance InstantiateFull EqualityView where+ instantiateFull' (OtherType t) = OtherType+ <$> instantiateFull' t+ instantiateFull' (EqualityType s eq l t a b) = EqualityType+ <$> instantiateFull' s+ <*> return eq+ <*> instantiateFull' l+ <*> instantiateFull' t+ <*> instantiateFull' a+ <*> instantiateFull' b
src/full/Agda/TypeChecking/Reduce/Monad.hs view
@@ -1,7 +1,7 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE TupleSections #-}-{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE TupleSections #-} {-# OPTIONS_GHC -fno-warn-orphans #-} @@ -22,7 +22,6 @@ import Control.Arrow ((***), first, second) import Control.Applicative hiding (empty) import Control.Monad.Reader-import Control.Monad.Identity import qualified Data.Map as Map import Data.Maybe@@ -31,7 +30,7 @@ import Debug.Trace import System.IO.Unsafe -import Agda.Syntax.Common (unDom)+import Agda.Syntax.Common import Agda.Syntax.Position import Agda.Syntax.Internal import Agda.TypeChecking.Monad hiding@@ -110,14 +109,14 @@ where notTaken xs x = isNoName x || nameConcrete x `notElem` xs -underAbstraction :: Subst a => Dom Type -> Abs a -> (a -> ReduceM b) -> ReduceM b+underAbstraction :: Subst t a => Dom Type -> Abs a -> (a -> ReduceM b) -> ReduceM b underAbstraction _ (NoAbs _ v) f = f v underAbstraction t a f = withFreshName_ (realName $ absName a) $ \x -> addCtx x t $ f (absBody a) where realName s = if isNoName s then "x" else s -underAbstraction_ :: Subst a => Abs a -> (a -> ReduceM b) -> ReduceM b+underAbstraction_ :: Subst t a => Abs a -> (a -> ReduceM b) -> ReduceM b underAbstraction_ = underAbstraction dummyDom lookupMeta :: MetaId -> ReduceM MetaVariable@@ -168,7 +167,7 @@ instance HasConstInfo ReduceM where getRewriteRulesFor = defaultGetRewriteRulesFor (gets id)- getConstInfo q = ReduceM $ ReaderT $ \(ReduceEnv env st) -> Identity $+ getConstInfo q = ReduceM $ \(ReduceEnv env st) -> let defs = st^.(stSignature . sigDefinitions) idefs = st^.(stImports . sigDefinitions) in case catMaybes [HMap.lookup q defs, HMap.lookup q idefs] of
src/full/Agda/TypeChecking/Rewriting.hs view
@@ -1,6 +1,6 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE PatternGuards #-} -- | Rewriting with arbitrary rules. --@@ -63,6 +63,7 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.EtaContract+import Agda.TypeChecking.Free import Agda.TypeChecking.MetaVars import Agda.TypeChecking.Conversion import Agda.TypeChecking.Pretty@@ -70,7 +71,6 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope import Agda.TypeChecking.Rewriting.NonLinMatch- import qualified Agda.TypeChecking.Reduce.Monad as Red import Agda.Utils.Functor@@ -143,13 +143,11 @@ -- to the signature where @B = A[us/Δ]@. -- Remember that @rel : Δ → A → A → Set i@, so -- @rel us : (lhs rhs : A[us/Δ]) → Set i@.------ Makes only sense in empty context. addRewriteRule :: QName -> TCM ()-addRewriteRule q = inTopContext $ do+addRewriteRule q = do requireOptionRewriting Def rel _ <- primRewrite- def <- getConstInfo q+ def <- instantiateDef =<< getConstInfo q -- Issue 1651: Check that we are not adding a rewrite rule -- for a type signature whose body has not been type-checked yet. when (isEmptyFunction $ theDef def) $@@ -159,30 +157,28 @@ , text " cannot be added before the function definition" ] -- We know that the type of rel is that of a relation.- Just (RelView _tel delta a _a' _core) <- relView =<< do- defType <$> getConstInfo rel+ relV <- relView =<< do defType <$> getConstInfo rel+ let RelView _tel delta a _a' _core = -- line break for CPP+ fromMaybe __IMPOSSIBLE__ relV reportSDoc "rewriting" 30 $ do text "rewrite relation at type " <+> do inTopContext $ prettyTCM (telFromList delta) <+> text " |- " <+> do addContext delta $ prettyTCM a -- Get rewrite rule (type of q).- TelV gamma core <- telView $ defType def+ TelV gamma1 core <- telView $ defType def reportSDoc "rewriting" 30 $ do text "attempting to add rewrite rule of type " <+> do- inTopContext $ prettyTCM gamma <+> text " |- " <+> do- addContext gamma $ prettyTCM core-+ prettyTCM gamma1 <+> text " |- " <+> do+ addContext gamma1 $ prettyTCM core let failureWrongTarget = typeError . GenericDocError =<< hsep [ prettyTCM q , text " does not target rewrite relation" ] let failureMetas = typeError . GenericDocError =<< hsep [ prettyTCM q , text " is not a legal rewrite rule, since it contains unsolved meta variables" ] let failureNotDefOrCon = typeError . GenericDocError =<< hsep [ prettyTCM q , text " is not a legal rewrite rule, since the left-hand side is neither a defined symbol nor a constructor" ]- let failureFreeVars xs = typeError . GenericDocError =<< do- addContext gamma $ hsep $- [ prettyTCM q , text " is not a legal rewrite rule, since the following variables are not bound by the left hand side: " , prettyList_ (map (prettyTCM . var) xs) ]- let failureLhsReduction lhs = typeError . GenericDocError =<< do- addContext gamma $ hsep $+ let failureFreeVars xs = typeError . GenericDocError =<< hsep+ [ prettyTCM q , text " is not a legal rewrite rule, since the following variables are not bound by the left hand side: " , prettyList_ (map (prettyTCM . var) $ IntSet.toList xs) ]+ let failureLhsReduction lhs = typeError . GenericDocError =<< hsep [ prettyTCM q , text " is not a legal rewrite rule, since the left-hand side " , prettyTCM lhs , text " has top-level reductions" ] let failureIllegalRule = typeError . GenericDocError =<< hsep [ prettyTCM q , text " is not a legal rewrite rule" ]@@ -197,33 +193,39 @@ (us, [lhs, rhs]) = splitAt (n - 2) vs unless (size delta == size us) __IMPOSSIBLE__ b <- instantiateFull $ applySubst (parallelS $ reverse us) a- gamma <- instantiateFull gamma + gamma0 <- getContextTelescope+ gamma1 <- instantiateFull gamma1+ let gamma = gamma0 `abstract` gamma1++ unless (null $ allMetas (telToList gamma1)) failureMetas+ -- Find head symbol f of the lhs. f <- case ignoreSharing lhs of Def f es -> return f Con c vs -> return $ conName c _ -> failureNotDefOrCon - -- Normalize lhs: we do not want to match redexes.- lhs <- normaliseArgs lhs- unlessM (isNormal lhs) $ failureLhsReduction lhs+ rew <- addContext gamma1 $ do+ -- Normalize lhs: we do not want to match redexes.+ lhs <- normaliseArgs lhs+ unlessM (isNormal lhs) $ failureLhsReduction lhs - -- Normalize rhs: might be more efficient.- rhs <- etaContract =<< normalise rhs- unless (null $ allMetas (telToList gamma, lhs, rhs, b)) failureMetas- pat <- patternFrom 0 lhs- let rew = RewriteRule q gamma pat rhs b- reportSDoc "rewriting" 10 $ addContext gamma $- text "considering rewrite rule " <+> prettyTCM rew+ -- Normalize rhs: might be more efficient.+ rhs <- etaContract =<< normalise rhs+ unless (null $ allMetas (lhs, rhs, b)) failureMetas+ pat <- patternFrom 0 lhs - -- Check that all variables of Γ are pattern variables in the lhs.- unlessNull ([0 .. size gamma - 1] List.\\ IntSet.toList (nlPatVars pat)) failureFreeVars+ -- check that FV(rhs) ⊆ nlPatVars(lhs)+ unlessNull (allFreeVars rhs IntSet.\\ nlPatVars pat) failureFreeVars - -- -- check that FV(rhs) ⊆ nlPatVars(lhs)- -- unless (allVars (freeVars rhs) `IntSet.isSubsetOf` nlPatVars pat) $- -- failureFreeVars+ return $ RewriteRule q gamma pat rhs b + reportSDoc "rewriting" 10 $+ text "considering rewrite rule " <+> prettyTCM rew+ reportSDoc "rewriting" 60 $+ text "considering rewrite rule" <+> text (show rew)+ -- NO LONGER WORKS: -- -- Check whether lhs can be rewritten with itself. -- -- Otherwise, there are unbound variables in either gamma or rhs.@@ -252,26 +254,26 @@ addRewriteRules f rews = do reportSDoc "rewriting" 10 $ text "rewrite rule ok, adding it to the definition of " <+> prettyTCM f modifySignature $ addRewriteRulesFor f rews- rules <- getRewriteRulesFor f- reportSDoc "rewriting" 20 $ vcat- [ text "rewrite rules for " <+> prettyTCM f <+> text ":"- , vcat (map prettyTCM rules)- ]+ --rules <- getRewriteRulesFor f+ --reportSDoc "rewriting" 20 $ vcat+ -- [ text "rewrite rules for " <+> prettyTCM f <+> text ":"+ -- , vcat (map prettyTCM rules)+ -- ] -- | @rewriteWith t v rew@ -- tries to rewrite @v : t@ with @rew@, returning the reduct if successful. rewriteWith :: Maybe Type -> Term -> RewriteRule -> ReduceM (Either (Blocked Term) Term)-rewriteWith mt v (RewriteRule q gamma lhs rhs b) = do- Red.traceSDoc "rewriting" 95 (sep+rewriteWith mt v rew@(RewriteRule q gamma lhs rhs b) = do+ Red.traceSDoc "rewriting" 75 (sep [ text "attempting to rewrite term " <+> prettyTCM v- , text " with rule " <+> prettyTCM q+ , text " with rule " <+> prettyTCM rew ]) $ do- result <- nonLinMatch lhs v+ result <- nonLinMatch gamma lhs v case result of Left block -> return $ Left $ const v <$> block Right sub -> do let v' = applySubst sub rhs- Red.traceSDoc "rewriting" 90 (sep+ Red.traceSDoc "rewriting" 70 (sep [ text "rewrote " <+> prettyTCM v , text " to " <+> prettyTCM v' ]) $ return $ Right v'@@ -320,19 +322,19 @@ case rules of [] -> return $ Left $ bv $> hd es _ -> do- es <- etaContract =<< instantiateFull' es+ es <- instantiateFull' es loop (void bv) es rules where- loop :: Blocked_ -> Elims -> [RewriteRule] -> ReduceM (Either (Blocked Term) Term)+ loop :: Blocked_ -> Elims -> RewriteRules -> ReduceM (Either (Blocked Term) Term) loop block es [] = return $ Left $ block $> hd es loop block es (rew:rews) | let n = rewArity rew, length es >= n = do- let (es1, es2) = List.genericSplitAt n es- result <- rewriteWith Nothing (hd es1) rew- case result of- Left (Blocked m u) -> loop (block `mappend` Blocked m ()) es rews- Left (NotBlocked _ _) -> loop block es rews- Right w -> return $ Right $ w `applyE` es2+ let (es1, es2) = List.genericSplitAt n es+ result <- rewriteWith Nothing (hd es1) rew+ case result of+ Left (Blocked m u) -> loop (block `mappend` Blocked m ()) es rews+ Left (NotBlocked _ _) -> loop block es rews+ Right w -> return $ Right $ w `applyE` es2 | otherwise = loop (block `mappend` NotBlocked Underapplied ()) es rews ------------------------------------------------------------------------@@ -348,7 +350,7 @@ instance NLPatVars NLPat where nlPatVars p = case p of- PVar i -> singleton i+ PVar _ i -> singleton i PDef _ es -> nlPatVars es PWild -> empty PLam _ p' -> nlPatVars $ unAbs p'@@ -360,3 +362,23 @@ rewArity rew = case rewLHS rew of PDef _f es -> length es _ -> __IMPOSSIBLE__++-- | Erase the CtxId's of rewrite rules+class KillCtxId a where+ killCtxId :: a -> a++instance (Functor f, KillCtxId a) => KillCtxId (f a) where+ killCtxId = fmap killCtxId++instance KillCtxId RewriteRule where+ killCtxId rule@RewriteRule{ rewLHS = lhs } = rule{ rewLHS = killCtxId lhs }++instance KillCtxId NLPat where+ killCtxId p = case p of+ PVar _ i -> PVar Nothing i+ PWild -> p+ PDef f es -> PDef f $ killCtxId es+ PLam i x -> PLam i $ killCtxId x+ PPi a b -> PPi (killCtxId a) (killCtxId b)+ PBoundVar i es -> PBoundVar i $ killCtxId es+ PTerm _ -> p
src/full/Agda/TypeChecking/Rewriting/NonLinMatch.hs view
@@ -2,6 +2,8 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE UndecidableInstances #-} {- | Non-linear matching of the lhs of a rewrite rule against a neutral term.@@ -26,12 +28,15 @@ import Prelude hiding (null, sequence) import Control.Arrow (first, second)-import Control.Monad.Trans.Maybe import Control.Monad.State import Debug.Trace import System.IO.Unsafe +#if __GLASGOW_HASKELL__ <= 708+import Data.Foldable ( foldMap )+#endif+ import Data.Maybe import Data.Functor import Data.Traversable hiding (for)@@ -39,8 +44,9 @@ import qualified Data.IntMap as IntMap import Data.IntSet (IntSet) import qualified Data.IntSet as IntSet+import Data.List (elemIndex) -import Agda.Syntax.Common (unArg)+import Agda.Syntax.Common import qualified Agda.Syntax.Common as C import Agda.Syntax.Internal @@ -59,13 +65,14 @@ import Agda.Utils.Monad import Agda.Utils.Null import Agda.Utils.Singleton+import Agda.Utils.Size #include "undefined.h" import Agda.Utils.Impossible -- | Turn a term into a non-linear pattern, treating the -- free variables as pattern variables.--- The first argument is the number of bound variables.+-- The first argument is the number of bound variables (from pattern lambdas). class PatternFrom a b where patternFrom :: Int -> a -> TCM b@@ -87,14 +94,19 @@ instance PatternFrom Term NLPat where patternFrom k v = do- v <- etaContract =<< reduce v+ v <- reduce v let done = return $ PTerm v case ignoreSharing v of Var i es | i < k -> PBoundVar i <$> patternFrom k es- | otherwise -> if null es- then return $ PVar (i-k)- else done+ | null es -> do+ let i' = i-k+ -- Pattern variables are labeled with their context id, because they+ -- can only be instantiated once they're no longer bound by the+ -- context (see Issue 1652).+ id <- (!! i') <$> getContextId+ return $ PVar (Just id) i'+ | otherwise -> done Lam i t -> PLam i <$> patternFrom k t Lit{} -> done Def f es -> PDef f <$> patternFrom k es@@ -105,11 +117,10 @@ DontCare{} -> return PWild MetaV{} -> __IMPOSSIBLE__ Shared{} -> __IMPOSSIBLE__- ExtLam{} -> __IMPOSSIBLE__ instance (PatternFrom a b) => PatternFrom (Abs a) (Abs b) where- patternFrom k (Abs n x) = Abs n <$> patternFrom (k+1) x- patternFrom k (NoAbs n x) = NoAbs n <$> patternFrom k x+ patternFrom k (Abs name x) = Abs name <$> patternFrom (k+1) x+ patternFrom k (NoAbs name x) = NoAbs name <$> patternFrom k x -- | Monad for non-linear matching. type NLM = ExceptT Blocked_ (StateT NLMState ReduceM)@@ -144,12 +155,11 @@ caseMaybeM (IntMap.lookup i <$> gets fst) (modify $ first $ IntMap.insert i v) $ \v' -> do unlessM (liftRed $ equal v v') $ matchingBlocked $ NotBlocked ReallyNotBlocked () -- lies! -tellEq :: Int -> Term -> Term -> NLM ()-tellEq k u v =+tellEq :: Telescope -> Telescope -> Term -> Term -> NLM ()+tellEq gamma k u v = traceSDocNLM "rewriting" 60 (sep- [ text "adding equality between" <+> prettyTCM u- , text " and " <+> prettyTCM v- , text ("(with " ++ show k ++ " free variables)") ]) $ do+ [ text "adding equality between" <+> addContext (gamma `abstract` k) (prettyTCM u)+ , text " and " <+> addContext k (prettyTCM v) ]) $ do modify $ second $ (PostponedEquation k u v:) type Sub = IntMap Term@@ -158,7 +168,7 @@ -- which we have to verify after applying -- the substitution computed by matching. data PostponedEquation = PostponedEquation- { eqFreeVars :: Int -- ^ Number of free variables in the equation+ { eqFreeVars :: Telescope -- ^ Telescope of free variables in the equation , eqLhs :: Term -- ^ Term from pattern, living in pattern context. , eqRhs :: Term -- ^ Term from scrutinee, living in context where matching was invoked. }@@ -168,102 +178,128 @@ -- returning a substitution. class Match a b where- match :: Int -> a -> b -> NLM ()+ match :: Telescope -- ^ The telescope of pattern variables+ -> Telescope -- ^ The telescope of lambda-bound variables+ -> a -- ^ The pattern to match+ -> b -- ^ The term to be matched against the pattern+ -> NLM () instance Match a b => Match [a] [b] where- match k ps vs- | length ps == length vs = zipWithM_ (match k) ps vs+ match gamma k ps vs+ | length ps == length vs = zipWithM_ (match gamma k) ps vs | otherwise = matchingBlocked $ NotBlocked ReallyNotBlocked () instance Match a b => Match (Arg a) (Arg b) where- match k p v = match k (unArg p) (unArg v)+ match gamma k p v = match gamma k (unArg p) (unArg v) instance Match a b => Match (Elim' a) (Elim' b) where- match k p v =+ match gamma k p v = case (p, v) of- (Apply p, Apply v) -> match k p v+ (Apply p, Apply v) -> match gamma k p v (Proj x , Proj y ) -> if x == y then return () else- traceSDocNLM "rewriting" 100 (sep+ traceSDocNLM "rewriting" 80 (sep [ text "mismatch between projections " <+> prettyTCM x , text " and " <+> prettyTCM y ]) mzero (Apply{}, Proj{} ) -> __IMPOSSIBLE__ (Proj{} , Apply{}) -> __IMPOSSIBLE__ instance Match a b => Match (Dom a) (Dom b) where- match k p v = match k (C.unDom p) (C.unDom v)+ match gamma k p v = match gamma k (C.unDom p) (C.unDom v) instance Match a b => Match (Type' a) (Type' b) where- match k p v = match k (unEl p) (unEl v)+ match gamma k p v = match gamma k (unEl p) (unEl v) -instance (Match a b, Subst b, Free b, PrettyTCM a, PrettyTCM b) => Match (Abs a) (Abs b) where- match k (Abs _ p) (Abs _ v) = match (k+1) p v- match k (Abs _ p) (NoAbs _ v) = match (k+1) p (raise 1 v)- match k (NoAbs _ p) (Abs _ v) = if (0 `freeIn` v) then no else match k p (raise (-1) v)- where- no = traceSDocNLM "rewriting" 100 (sep- [ text "mismatch between" <+> prettyTCM p- , text " and " <+> prettyTCM v ]) mzero- match k (NoAbs _ p) (NoAbs _ v) = match k p v+instance (Match a b, Subst t1 a, Subst t2 b) => Match (Abs a) (Abs b) where+ match gamma k (Abs n p) (Abs _ v) = match gamma (ExtendTel dummyDom (Abs n k)) p v+ match gamma k (Abs n p) (NoAbs _ v) = match gamma (ExtendTel dummyDom (Abs n k)) p (raise 1 v)+ match gamma k (NoAbs n p) (Abs _ v) = match gamma (ExtendTel dummyDom (Abs n k)) (raise 1 p) v+ match gamma k (NoAbs _ p) (NoAbs _ v) = match gamma k p v instance Match NLPat Term where- match k p v = do+ match gamma k p v = do+ let n = size k+ traceSDocNLM "rewriting" 100 (sep+ [ text "matching" <+> addContext (gamma `abstract` k) (prettyTCM (raisePatVars n p))+ , text "with" <+> addContext k (prettyTCM v)]) $ do let yes = return ()- no =- traceSDocNLM "rewriting" 100 (sep- [ text "mismatch between" <+> prettyTCM p- , text " and " <+> prettyTCM v]) mzero+ no msg =+ traceSDocNLM "rewriting" 80 (sep+ [ text "mismatch between" <+> addContext (gamma `abstract` k) (prettyTCM (raisePatVars n p))+ , text " and " <+> addContext k (prettyTCM v)+ , msg ]) mzero case p of PWild -> yes- PVar i -> if null (allFreeVars v `IntSet.intersection` IntSet.fromList [0..(k-1)])- then tellSub i (raise (-k) v)- else no+ PVar id i -> do+ -- If the variable is still bound by the current context, we cannot+ -- instantiate it so it has to match on the nose (see Issue 1652).+ ctx <- zip <$> getContextNames <*> getContextId+ traceSDocNLM "rewriting" 90 (text "Current context:" <+> (prettyTCM ctx)) $ do+ cid <- getContextId+ case (maybe Nothing (\i -> elemIndex i cid) id) of+ Just j -> if v == var (j+n)+ then tellSub i (var j)+ else no (text $ "(CtxId = " ++ show id ++ ")")+ Nothing -> do+ let boundVarOccs :: FreeVars+ boundVarOccs = runFree (\var@(i,_) -> if i < n then singleton var else empty) IgnoreNot v+ if null (rigidVars boundVarOccs)+ then if null (flexibleVars boundVarOccs)+ then tellSub i (raise (-n) v)+ else matchingBlocked $ foldMap (foldMap $ \m -> Blocked m ()) $ flexibleVars boundVarOccs+ else no (text "") PDef f ps -> do v <- liftRed $ constructorForm v case ignoreSharing v of Def f' es- | f == f' -> matchArgs k ps es- | otherwise -> no+ | f == f' -> matchArgs gamma k ps es+ | otherwise -> no (text "") Con c vs- | f == conName c -> matchArgs k ps (Apply <$> vs)- | otherwise -> no+ | f == conName c -> matchArgs gamma k ps (Apply <$> vs)+ | otherwise -> no (text "")+ Lam i u -> do+ let pbody = PDef f (raiseNLP 1 ps ++ [Apply $ Arg i $ PBoundVar 0 []])+ body <- liftRed $ reduce' $ absBody u+ match gamma (ExtendTel dummyDom (Abs (absName u) k)) pbody body MetaV m es -> do matchingBlocked $ Blocked m ()- _ -> no+ _ -> no (text "") PLam i p' -> do- let body = Abs (absName p') $ raise 1 v `apply` [C.Arg i (var 0)]- body <- liftRed (etaContract =<< reduce' body)- match k p' body+ let body = Abs (absName p') $ raise 1 v `apply` [Arg i (var 0)]+ body <- liftRed $ reduce' body+ match gamma k p' body PPi pa pb -> case ignoreSharing v of- Pi a b -> match k pa a >> match k pb b- _ -> no+ Pi a b -> do+ (a,b) <- liftRed $ reduce' (a,b)+ match gamma k pa a >> match gamma k pb b+ MetaV m es -> matchingBlocked $ Blocked m ()+ _ -> no (text "") PBoundVar i ps -> case ignoreSharing v of- Var i' es | i == i' -> matchArgs k ps es- _ -> no- PTerm u -> tellEq k u v+ Var i' es | i == i' -> matchArgs gamma k ps es+ MetaV m es -> matchingBlocked $ Blocked m ()+ _ -> no (text "")+ PTerm u -> tellEq gamma k u v where- matchArgs :: Int -> [Elim' NLPat] -> Elims -> NLM ()- matchArgs k ps es = match k ps =<< liftRed (etaContract =<< reduce' es)+ matchArgs :: Telescope -> Telescope -> [Elim' NLPat] -> Elims -> NLM ()+ matchArgs gamma k ps es = match gamma k ps =<< liftRed (reduce' es) -makeSubstitution :: Sub -> Substitution-makeSubstitution sub- | IntMap.null sub = idS- | otherwise = map val [0 .. highestIndex] ++# raiseS (highestIndex + 1)- where- highestIndex = fst $ IntMap.findMax sub -- find highest key- val i = fromMaybe (var i) $ IntMap.lookup i sub+makeSubstitution :: Telescope -> Sub -> Substitution+makeSubstitution gamma sub =+ prependS __IMPOSSIBLE__ (map val [0 .. size gamma-1]) EmptyS+ where+ val i = IntMap.lookup i sub checkPostponedEquations :: Substitution -> PostponedEquations -> ReduceM Bool checkPostponedEquations sub eqs = andM $ for eqs $- \ (PostponedEquation k lhs rhs) -> equal (applySubst (liftS k sub) lhs) rhs+ \ (PostponedEquation k lhs rhs) -> equal (applySubst (liftS (size k) sub) lhs) rhs -- main function-nonLinMatch :: (Match a b) => a -> b -> ReduceM (Either Blocked_ Substitution)-nonLinMatch p v = do- let no msg b = traceSDoc "rewriting" 100 (sep+nonLinMatch :: (Match a b) => Telescope -> a -> b -> ReduceM (Either Blocked_ Substitution)+nonLinMatch gamma p v = do+ let no msg b = traceSDoc "rewriting" 80 (sep [ text "matching failed during" <+> text msg , text "blocking: " <+> text (show b) ]) $ return (Left b)- caseEitherM (runNLM $ match 0 p v) (no "matching") $ \ (s, eqs) -> do- let sub = makeSubstitution s+ caseEitherM (runNLM $ match gamma EmptyTel p v) (no "matching") $ \ (s, eqs) -> do+ let sub = makeSubstitution gamma s traceSDoc "rewriting" 90 (text $ "sub = " ++ show sub) $ do ifM (checkPostponedEquations sub eqs) (return $ Right sub)@@ -275,7 +311,46 @@ (u, v) <- etaContract =<< normalise' (u, v) let ok = u == v if ok then return True else- traceSDoc "rewriting" 100 (sep+ traceSDoc "rewriting" 80 (sep [ text "mismatch between " <+> prettyTCM u , text " and " <+> prettyTCM v ]) $ return False++-- | Raise (bound) variables in a NLPat++class RaiseNLP a where+ raiseNLPFrom :: Int -> Int -> a -> a++ raiseNLP :: Int -> a -> a+ raiseNLP = raiseNLPFrom 0++instance RaiseNLP a => RaiseNLP [a] where+ raiseNLPFrom c k = fmap $ raiseNLPFrom c k++instance RaiseNLP a => RaiseNLP (Arg a) where+ raiseNLPFrom c k = fmap $ raiseNLPFrom c k++instance RaiseNLP a => RaiseNLP (Elim' a) where+ raiseNLPFrom c k = fmap $ raiseNLPFrom c k++instance RaiseNLP a => RaiseNLP (Dom a) where+ raiseNLPFrom c k = fmap $ raiseNLPFrom c k++instance RaiseNLP a => RaiseNLP (Type' a) where+ raiseNLPFrom c k = fmap $ raiseNLPFrom c k++instance RaiseNLP a => RaiseNLP (Abs a) where+ raiseNLPFrom c k (Abs i p) = Abs i $ raiseNLPFrom (c+1) k p+ raiseNLPFrom c k (NoAbs i p) = NoAbs i $ raiseNLPFrom c k p++instance RaiseNLP NLPat where+ raiseNLPFrom c k p = case p of+ PVar _ _ -> p+ PWild -> p+ PDef f ps -> PDef f $ raiseNLPFrom c k ps+ PLam i q -> PLam i $ raiseNLPFrom c k q+ PPi a b -> PPi (raiseNLPFrom c k a) (raiseNLPFrom c k b)+ PBoundVar i ps -> let j = if i < c then i else i + k+ in PBoundVar j $ raiseNLPFrom c k ps+ PTerm u -> PTerm $ raiseFrom c k u+
src/full/Agda/TypeChecking/Rules/Builtin.hs view
@@ -1,12 +1,14 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE PatternGuards #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TupleSections #-} module Agda.TypeChecking.Rules.Builtin ( bindBuiltin , bindBuiltinNoDef , bindPostulatedName+ , isUntypedBuiltin+ , bindUntypedBuiltin ) where import Control.Applicative hiding (empty)@@ -14,6 +16,7 @@ import Data.List (find) import qualified Agda.Syntax.Abstract as A+import qualified Agda.Syntax.Abstract.Views as A import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.Syntax.Position@@ -22,6 +25,7 @@ import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Monad.SizedTypes ( builtinSizeHook ) +import qualified Agda.TypeChecking.CompiledClause as CC import Agda.TypeChecking.Conversion import Agda.TypeChecking.Constraints import Agda.TypeChecking.EtaContract@@ -54,34 +58,43 @@ coreBuiltins = map (\ (x, z) -> BuiltinInfo x z) [ (builtinList |-> BuiltinData (tset --> tset) [builtinNil, builtinCons]) , (builtinArg |-> BuiltinData (tset --> tset) [builtinArgArg])+ , (builtinAbs |-> BuiltinData (tset --> tset) [builtinAbsAbs]) , (builtinArgInfo |-> BuiltinData tset [builtinArgArgInfo]) , (builtinBool |-> BuiltinData tset [builtinTrue, builtinFalse]) , (builtinNat |-> BuiltinData tset [builtinZero, builtinSuc])+ , (builtinUnit |-> BuiltinData tset [builtinUnitUnit]) -- actually record, but they are treated the same , (builtinAgdaLiteral |-> BuiltinData tset [builtinAgdaLitNat, builtinAgdaLitFloat, builtinAgdaLitChar, builtinAgdaLitString,- builtinAgdaLitQName])+ builtinAgdaLitQName, builtinAgdaLitMeta]) , (builtinAgdaPattern |-> BuiltinData tset [builtinAgdaPatVar, builtinAgdaPatCon, builtinAgdaPatDot, builtinAgdaPatLit, builtinAgdaPatProj, builtinAgdaPatAbsurd])- , (builtinAgdaPatVar |-> BuiltinDataCons tpat)+ , (builtinAgdaPatVar |-> BuiltinDataCons (tstring --> tpat)) , (builtinAgdaPatCon |-> BuiltinDataCons (tqname --> tlist (targ tpat) --> tpat)) , (builtinAgdaPatDot |-> BuiltinDataCons tpat) , (builtinAgdaPatLit |-> BuiltinDataCons (tliteral --> tpat)) , (builtinAgdaPatProj |-> BuiltinDataCons (tqname --> tpat)) , (builtinAgdaPatAbsurd |-> BuiltinDataCons tpat) , (builtinLevel |-> builtinPostulate tset)- , (builtinInteger |-> builtinPostulate tset)+ , (builtinInteger |-> BuiltinData tset [builtinIntegerPos, builtinIntegerNegSuc])+ , (builtinIntegerPos |-> BuiltinDataCons (tnat --> tinteger))+ , (builtinIntegerNegSuc |-> BuiltinDataCons (tnat --> tinteger)) , (builtinFloat |-> builtinPostulate tset) , (builtinChar |-> builtinPostulate tset) , (builtinString |-> builtinPostulate tset) , (builtinQName |-> builtinPostulate tset)+ , (builtinAgdaMeta |-> builtinPostulate tset) , (builtinIO |-> builtinPostulate (tset --> tset)) , (builtinAgdaSort |-> BuiltinData tset [builtinAgdaSortSet, builtinAgdaSortLit, builtinAgdaSortUnsupported])- , (builtinAgdaType |-> BuiltinData tset [builtinAgdaTypeEl]) , (builtinAgdaTerm |-> BuiltinData tset [ builtinAgdaTermVar, builtinAgdaTermLam, builtinAgdaTermExtLam , builtinAgdaTermDef, builtinAgdaTermCon , builtinAgdaTermPi, builtinAgdaTermSort- , builtinAgdaTermLit, builtinAgdaTermUnsupported])+ , builtinAgdaTermLit, builtinAgdaTermMeta+ , builtinAgdaTermUnsupported])+ , builtinAgdaErrorPart |-> BuiltinData tset [ builtinAgdaErrorPartString, builtinAgdaErrorPartTerm, builtinAgdaErrorPartName ]+ , builtinAgdaErrorPartString |-> BuiltinDataCons (tstring --> terrorpart)+ , builtinAgdaErrorPartTerm |-> BuiltinDataCons (tterm --> terrorpart)+ , builtinAgdaErrorPartName |-> BuiltinDataCons (tqname --> terrorpart) , (builtinEquality |-> BuiltinData (hPi "a" (el primLevel) $ hPi "A" (return $ sort $ varSort 0) $ (El (varSort 1) <$> varM 0) -->@@ -102,22 +115,24 @@ , (builtinTrue |-> BuiltinDataCons tbool) , (builtinFalse |-> BuiltinDataCons tbool) , (builtinArgArg |-> BuiltinDataCons (hPi "A" tset (targinfo --> tv0 --> targ tv0)))+ , (builtinAbsAbs |-> BuiltinDataCons (hPi "A" tset (tstring --> tv0 --> tabs tv0))) , (builtinArgArgInfo |-> BuiltinDataCons (thiding --> trelevance --> targinfo))- , (builtinAgdaTypeEl |-> BuiltinDataCons (tsort --> tterm --> ttype)) , (builtinAgdaTermVar |-> BuiltinDataCons (tnat --> targs --> tterm))- , (builtinAgdaTermLam |-> BuiltinDataCons (thiding --> tterm --> tterm))+ , (builtinAgdaTermLam |-> BuiltinDataCons (thiding --> tabs tterm --> tterm)) , (builtinAgdaTermExtLam |-> BuiltinDataCons (tlist tclause --> targs --> tterm)) , (builtinAgdaTermDef |-> BuiltinDataCons (tqname --> targs --> tterm)) , (builtinAgdaTermCon |-> BuiltinDataCons (tqname --> targs --> tterm))- , (builtinAgdaTermPi |-> BuiltinDataCons (targ ttype --> ttype --> tterm))+ , (builtinAgdaTermPi |-> BuiltinDataCons (targ ttype --> tabs ttype --> tterm)) , (builtinAgdaTermSort |-> BuiltinDataCons (tsort --> tterm)) , (builtinAgdaTermLit |-> BuiltinDataCons (tliteral --> tterm))+ , (builtinAgdaTermMeta |-> BuiltinDataCons (tmeta --> targs --> tterm)) , (builtinAgdaTermUnsupported|-> BuiltinDataCons tterm) , (builtinAgdaLitNat |-> BuiltinDataCons (tnat --> tliteral)) , (builtinAgdaLitFloat |-> BuiltinDataCons (tfloat --> tliteral)) , (builtinAgdaLitChar |-> BuiltinDataCons (tchar --> tliteral)) , (builtinAgdaLitString |-> BuiltinDataCons (tstring --> tliteral)) , (builtinAgdaLitQName |-> BuiltinDataCons (tqname --> tliteral))+ , (builtinAgdaLitMeta |-> BuiltinDataCons (tmeta --> tliteral)) , (builtinHidden |-> BuiltinDataCons thiding) , (builtinInstance |-> BuiltinDataCons thiding) , (builtinVisible |-> BuiltinDataCons thiding)@@ -133,10 +148,6 @@ -- postulate max : {i : Size} -> Size< i -> Size< i -> Size< i , (builtinSizeMax |-> builtinPostulate (tsize --> tsize --> tsize)) -- (hPi "i" tsize $ let a = el $ primSizeLt <@> v0 in (a --> a --> a)))- -- postulate .irrelevant : {a : Level}{A : Set a} -> .A -> A- , (builtinIrrAxiom |-> BuiltinPostulate Irrelevant- (hPi "a" (el primLevel) $ hPi "A" (return $ sort $ varSort 0) $- (El (varSort 1) <$> varM 0) .--> (El (varSort 1) <$> varM 0))) , (builtinAgdaSortSet |-> BuiltinDataCons (tterm --> tsort)) , (builtinAgdaSortLit |-> BuiltinDataCons (tnat --> tsort)) , (builtinAgdaSortUnsupported|-> BuiltinDataCons tsort)@@ -150,63 +161,96 @@ , (builtinLevelZero |-> BuiltinPrim "primLevelZero" (const $ return ())) , (builtinLevelSuc |-> BuiltinPrim "primLevelSuc" (const $ return ())) , (builtinLevelMax |-> BuiltinPrim "primLevelMax" verifyMax)- , (builtinAgdaFunDef |-> BuiltinData tset [builtinAgdaFunDefCon])- , (builtinAgdaFunDefCon |-> BuiltinDataCons (ttype --> tlist tclause --> tfun)) , (builtinAgdaClause |-> BuiltinData tset [builtinAgdaClauseClause, builtinAgdaClauseAbsurd]) , (builtinAgdaClauseClause |-> BuiltinDataCons (tlist (targ tpat) --> tterm --> tclause)) , (builtinAgdaClauseAbsurd |-> BuiltinDataCons (tlist (targ tpat) --> tclause))- , (builtinAgdaDataDef |-> builtinPostulate tset) -- internally this is QName- , (builtinAgdaRecordDef |-> builtinPostulate tset) -- internally this is QName , (builtinAgdaDefinition |-> BuiltinData tset [builtinAgdaDefinitionFunDef ,builtinAgdaDefinitionDataDef ,builtinAgdaDefinitionDataConstructor ,builtinAgdaDefinitionRecordDef ,builtinAgdaDefinitionPostulate ,builtinAgdaDefinitionPrimitive])- , (builtinAgdaDefinitionFunDef |-> BuiltinDataCons (tfun --> tdefn))- , (builtinAgdaDefinitionDataDef |-> BuiltinDataCons (tdtype --> tdefn))- , (builtinAgdaDefinitionDataConstructor |-> BuiltinDataCons tdefn)- , (builtinAgdaDefinitionRecordDef |-> BuiltinDataCons (trec --> tdefn))+ , (builtinAgdaDefinitionFunDef |-> BuiltinDataCons (tlist tclause --> tdefn))+ , (builtinAgdaDefinitionDataDef |-> BuiltinDataCons (tnat --> tlist tqname --> tdefn))+ , (builtinAgdaDefinitionDataConstructor |-> BuiltinDataCons (tqname --> tdefn))+ , (builtinAgdaDefinitionRecordDef |-> BuiltinDataCons (tqname --> tdefn)) , (builtinAgdaDefinitionPostulate |-> BuiltinDataCons tdefn) , (builtinAgdaDefinitionPrimitive |-> BuiltinDataCons tdefn)+ , builtinAgdaTCM |-> builtinPostulate (hPi "a" tlevel $ tsetL 0 --> tsetL 0)+ , builtinAgdaTCMReturn |-> builtinPostulate (hPi "a" tlevel $+ hPi "A" (tsetL 0) $+ elV 1 (varM 0) --> tTCM 1 (varM 0))+ , builtinAgdaTCMBind |-> builtinPostulate (hPi "a" tlevel $ hPi "b" tlevel $+ hPi "A" (tsetL 1) $ hPi "B" (tsetL 1) $+ tTCM 3 (varM 1) --> (elV 3 (varM 1) --> tTCM 2 (varM 0)) --> tTCM 2 (varM 0))+ , builtinAgdaTCMUnify |-> builtinPostulate (tterm --> tterm --> tTCM_ primUnit)+ , builtinAgdaTCMTypeError |-> builtinPostulate (hPi "a" tlevel $ hPi "A" (tsetL 0) $ tlist terrorpart --> tTCM 1 (varM 0))+ , builtinAgdaTCMInferType |-> builtinPostulate (tterm --> tTCM_ primAgdaTerm)+ , builtinAgdaTCMCheckType |-> builtinPostulate (tterm --> ttype --> tTCM_ primAgdaTerm)+ , builtinAgdaTCMNormalise |-> builtinPostulate (tterm --> tTCM_ primAgdaTerm)+ , builtinAgdaTCMCatchError |-> builtinPostulate (hPi "a" tlevel $ hPi "A" (tsetL 0) $ tTCM 1 (varM 0) --> tTCM 1 (varM 0) --> tTCM 1 (varM 0))+ , builtinAgdaTCMGetContext |-> builtinPostulate (tTCM_ (unEl <$> tlist (targ ttype)))+ , builtinAgdaTCMExtendContext |-> builtinPostulate (hPi "a" tlevel $ hPi "A" (tsetL 0) $ targ ttype --> tTCM 1 (varM 0) --> tTCM 1 (varM 0))+ , builtinAgdaTCMInContext |-> builtinPostulate (hPi "a" tlevel $ hPi "A" (tsetL 0) $ tlist (targ ttype) --> tTCM 1 (varM 0) --> tTCM 1 (varM 0))+ , builtinAgdaTCMFreshName |-> builtinPostulate (tstring --> tTCM_ primQName)+ , builtinAgdaTCMDeclareDef |-> builtinPostulate (targ tqname --> ttype --> tTCM_ primUnit)+ , builtinAgdaTCMDefineFun |-> builtinPostulate (tqname --> tlist tclause --> tTCM_ primUnit)+ , builtinAgdaTCMGetType |-> builtinPostulate (tqname --> tTCM_ primAgdaTerm)+ , builtinAgdaTCMGetDefinition |-> builtinPostulate (tqname --> tTCM_ primAgdaDefinition)+ , builtinAgdaTCMQuoteTerm |-> builtinPostulate (hPi "a" tlevel $ hPi "A" (tsetL 0) $ elV 1 (varM 0) --> tTCM_ primAgdaTerm)+ , builtinAgdaTCMUnquoteTerm |-> builtinPostulate (hPi "a" tlevel $ hPi "A" (tsetL 0) $ tterm --> tTCM 1 (varM 0))+ , builtinAgdaTCMBlockOnMeta |-> builtinPostulate (hPi "a" tlevel $ hPi "A" (tsetL 0) $ tmeta --> tTCM 1 (varM 0))+ , builtinAgdaTCMCommit |-> builtinPostulate (tTCM_ primUnit) ] where (|->) = (,) v0 = varM 0 v1 = varM 1+ v2 = varM 2+ v3 = varM 3 tv0,tv1 :: TCM Type tv0 = el v0 tv1 = el v1+ tv2 = el v2+ tv3 = el v3 arg :: TCM Term -> TCM Term arg t = primArg <@> t + elV x a = El (varSort x) <$> a++ tsetL l = return $ sort (varSort l)+ tlevel = el primLevel tlist x = el $ list (fmap unEl x) targ x = el (arg (fmap unEl x))+ tabs x = el (primAbs <@> fmap unEl x) targs = el (list (arg primAgdaTerm)) tterm = el primAgdaTerm+ terrorpart = el primAgdaErrorPart tnat = el primNat+ tunit = el primUnit+ tinteger = el primInteger tfloat = el primFloat tchar = el primChar tstring = el primString tqname = el primQName- tsize = El SizeUniv <$> primSize+ tmeta = el primAgdaMeta+ tsize = El sSizeUniv <$> primSize tbool = el primBool thiding = el primHiding trelevance = el primRelevance -- tcolors = el (list primAgdaTerm) -- TODO guilhem targinfo = el primArgInfo- ttype = el primAgdaType+ ttype = el primAgdaTerm tsort = el primAgdaSort tdefn = el primAgdaDefinition- tfun = el primAgdaFunDef- tdtype = el primAgdaDataDef- trec = el primAgdaRecordDef tliteral = el primAgdaLiteral tpat = el primAgdaPattern tclause = el primAgdaClause+ tTCM l a = elV l (primAgdaTCM <#> varM l <@> a)+ tTCM_ a = el (primAgdaTCM <#> primLevelZero <@> a) verifyPlus plus = verify ["n","m"] $ \(@@) zero suc (==) (===) choice -> do@@ -313,16 +357,15 @@ nat <- El (mkType 0) <$> pNat zero <- pZero s <- pSuc- let x @@ y = x `apply` [defaultArg y]- x == y = noConstraints $ equalTerm nat x y+ let x == y = noConstraints $ equalTerm nat x y -- Andreas: 2013-10-21 I put primBool here on the inside -- since some Nat-builtins do not require Bool-builtins x === y = do bool <- El (mkType 0) <$> primBool noConstraints $ equalTerm bool x y- suc n = s @@ n+ suc n = s `apply1` n choice = foldr1 (\x y -> x `catchError` \_ -> y) xs <- mapM freshName_ xs- addCtxs xs (domFromArg $ defaultArg nat) $ f (@@) zero suc (==) (===) choice+ addCtxs xs (domFromArg $ defaultArg nat) $ f apply1 zero suc (==) (===) choice inductiveCheck :: String -> Int -> Term -> TCM ()@@ -342,6 +385,7 @@ [ "The builtin", b , "must be a datatype with", show n , "constructors" ]+ Record { recInduction = ind } | n == 1 && ind /= Just CoInductive -> return () _ -> err _ -> err @@ -366,28 +410,55 @@ getName (A.ScopedExpr _ e) = getName e getName _ = err +getDef :: Term -> TCM QName+getDef t = do+ t <- etaContract =<< normalise t+ case ignoreSharing t of+ Def d _ -> return d+ _ -> __IMPOSSIBLE__++bindAndSetHaskellType :: String -> String -> Term -> TCM ()+bindAndSetHaskellType b hs t = do+ d <- getDef t+ addHaskellType d hs+ bindBuiltinName b t++bindBuiltinBool :: Term -> TCM ()+bindBuiltinBool = bindAndSetHaskellType builtinBool "Bool"++bindBuiltinInt :: Term -> TCM ()+bindBuiltinInt = bindAndSetHaskellType builtinInteger "Integer"+ bindBuiltinNat :: Term -> TCM () bindBuiltinNat t = do- t' <- etaContract =<< normalise t- case ignoreSharing t' of- Def nat _ -> do- def <- theDef <$> getConstInfo nat- case def of- Datatype { dataCons = [c1, c2] } -> do- bindBuiltinName builtinNat t- let getArity c = arity <$> (normalise . defType =<< getConstInfo c)- [a1, a2] <- mapM getArity [c1, c2]- let (zero, suc) | a2 > a1 = (c1, c2)- | otherwise = (c2, c1)- tnat = el primNat- rerange = setRange (getRange nat)- bindBuiltinInfo (BuiltinInfo builtinZero $ BuiltinDataCons tnat)- (A.Con $ AmbQ [rerange zero])- bindBuiltinInfo (BuiltinInfo builtinSuc $ BuiltinDataCons (tnat --> tnat))- (A.Con $ AmbQ [rerange suc])- _ -> __IMPOSSIBLE__+ nat <- getDef t+ def <- theDef <$> getConstInfo nat+ case def of+ Datatype { dataCons = [c1, c2] } -> do+ bindBuiltinName builtinNat t+ let getArity c = arity <$> (normalise . defType =<< getConstInfo c)+ [a1, a2] <- mapM getArity [c1, c2]+ let (zero, suc) | a2 > a1 = (c1, c2)+ | otherwise = (c2, c1)+ tnat = el primNat+ rerange = setRange (getRange nat)+ addHaskellType nat "Integer"+ bindBuiltinInfo (BuiltinInfo builtinZero $ BuiltinDataCons tnat)+ (A.Con $ AmbQ [rerange zero])+ bindBuiltinInfo (BuiltinInfo builtinSuc $ BuiltinDataCons (tnat --> tnat))+ (A.Con $ AmbQ [rerange suc]) _ -> __IMPOSSIBLE__ +bindBuiltinUnit :: Term -> TCM ()+bindBuiltinUnit t = do+ unit <- getDef t+ def <- theDef <$> getConstInfo unit+ case def of+ Record { recFields = [], recConHead = con } -> do+ bindBuiltinName builtinUnit t+ bindBuiltinName builtinUnitUnit (Con con [])+ _ -> genericError "Builtin UNIT must be a singleton record type"+ bindBuiltinInfo :: BuiltinInfo -> A.Expr -> TCM () bindBuiltinInfo i (A.ScopedExpr scope e) = setScope scope >> bindBuiltinInfo i e bindBuiltinInfo (BuiltinInfo s d) e = do@@ -396,7 +467,12 @@ e' <- checkExpr e =<< t let n = length cs inductiveCheck s n e'- if s == builtinNat then bindBuiltinNat e' else bindBuiltinName s e'+ case () of+ _ | s == builtinBool -> bindBuiltinBool e'+ | s == builtinNat -> bindBuiltinNat e'+ | s == builtinInteger -> bindBuiltinInt e'+ | s == builtinUnit -> bindBuiltinUnit e'+ | otherwise -> bindBuiltinName s e' BuiltinDataCons t -> do @@ -411,7 +487,11 @@ A.Con _ -> return () _ -> typeError $ BuiltinMustBeConstructor s e - bindBuiltinName s (name e')+ let v@(Con h []) = name e'+ c = conName h+ when (s == builtinTrue) $ addHaskellCode c "Bool" "True"+ when (s == builtinFalse) $ addHaskellCode c "Bool" "False"+ bindBuiltinName s v BuiltinPrim pfname axioms -> do case e of@@ -445,6 +525,9 @@ case theDef def of Axiom {} -> do builtinSizeHook s q t'+ when (s == builtinChar) $ addHaskellType q "Char"+ when (s == builtinString) $ addHaskellType q "Data.Text.Text"+ when (s == builtinFloat) $ addHaskellType q "Double" bindBuiltinName s e' _ -> err _ -> err@@ -473,7 +556,16 @@ "Builtin " ++ b ++ " does no longer exist. " ++ "It is now bound by BUILTIN " ++ builtinNat +isUntypedBuiltin :: String -> Bool+isUntypedBuiltin b = elem b [builtinFromNat, builtinFromNeg, builtinFromString] +bindUntypedBuiltin :: String -> A.Expr -> TCM ()+bindUntypedBuiltin b e =+ case A.unScope e of+ A.Def q -> bindBuiltinName b (Def q [])+ A.Proj q -> bindBuiltinName b (Def q [])+ e -> genericError $ "The argument to BUILTIN " ++ b ++ " must be a defined name"+ -- | Bind a builtin thing to a new name. bindBuiltinNoDef :: String -> A.QName -> TCM () bindBuiltinNoDef b q = do@@ -488,7 +580,8 @@ -- Andreas, 2015-02-14 -- Special treatment of SizeUniv, should maybe be a primitive. def | b == builtinSizeUniv = emptyFunction- { funClauses = [ (empty :: Clause) { clauseBody = Body $ Sort SizeUniv } ]+ { funClauses = [ (empty :: Clause) { clauseBody = Body $ Sort sSizeUniv } ]+ , funCompiled = Just (CC.Done [] $ Sort sSizeUniv) , funTerminates = Just True } | otherwise = Axiom
src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs view
@@ -87,7 +87,7 @@ , recFields = [] -- flat is added later , recTel = fieldTel , recRecursive = False- , recEtaEquality = False+ , recEtaEquality' = Inferred False , recMutual = [] , recAbstr = ConcreteDef }@@ -129,13 +129,13 @@ let clause = Clause { clauseRange = noRange , clauseTel = tel- , clausePerm = idP 1 , namedClausePats = [ argN $ Named Nothing $- ConP sharpCon cpi [ argN $ Named Nothing $ VarP "x" ] ]+ ConP sharpCon cpi [ argN $ Named Nothing $ VarP (0,"x") ] ] , clauseBody = Bind $ Abs "x" $ Body $ var 0 , clauseType = Just $ defaultArg $ El (varSort 2) $ var 1+ , clauseCatchall = False }- cc = Case 0 $ Branches False+ cc = Case (defaultArg 0) $ Branches False (Map.singleton sharp $ WithArity 1 $ Done [defaultArg "x"] $ var 0) Map.empty@@ -153,13 +153,15 @@ , theDef = Function { funClauses = [clause] , funCompiled = Just $ cc+ , funTreeless = Nothing , funInv = NotInjective , funMutual = [] , funAbstr = ConcreteDef , funDelayed = NotDelayed , funProjection = Just projection+ , funSmashable = False , funStatic = False- , funCopy = False+ , funInline = False , funTerminates = Just True , funExtLam = Nothing , funWith = Nothing
src/full/Agda/TypeChecking/Rules/Data.hs view
@@ -33,6 +33,8 @@ import {-# SOURCE #-} Agda.TypeChecking.Rules.Term ( isType_ ) +import Agda.Interaction.Options+ import Agda.Utils.List import Agda.Utils.Monad import Agda.Utils.Permutation@@ -207,15 +209,20 @@ checkConstructor d tel nofIxs s (A.ScopedDecl scope [con]) = do setScope scope checkConstructor d tel nofIxs s con-checkConstructor d tel nofIxs s con@(A.Axiom _ i _ c e) =+checkConstructor d tel nofIxs s con@(A.Axiom _ i ai c e) = traceCall (CheckConstructor d tel s con) $ do {- WRONG -- Andreas, 2011-04-26: the following happens to the right of ':' -- we may use irrelevant arguments in a non-strict way in types t' <- workOnTypes $ do -}- -- check that the type of the constructor is well-formed debugEnter c e+ -- check that we are relevant+ case getRelevance ai of+ Relevant -> return ()+ Irrelevant -> typeError $ GenericError $ "Irrelevant constructors are not supported"+ _ -> __IMPOSSIBLE__+ -- check that the type of the constructor is well-formed t <- isType_ e -- check that the type of the constructor ends in the data type n <- getContextSize@@ -223,13 +230,13 @@ debugEndsIn t d n nonLinPars <- constructs n t d debugNonLinPars nonLinPars+ -- check which constructor arguments are determined by the type ('forcing')+ t' <- addForcingAnnotations t -- check that the sort (universe level) of the constructor type -- is contained in the sort of the data type -- (to avoid impredicative existential types) debugFitsIn s- t `fitsIn` s- -- check which constructor arguments are determined by the type ('forcing')- t' <- addForcingAnnotations t+ t' `fitsIn` s debugAdd c t' -- add parameters to constructor type and put into signature@@ -239,8 +246,9 @@ defaultDefn defaultArgInfo c (telePi tel t') $ Constructor (size tel) con d (Info.defAbstract i) Inductive - -- declare the constructor as eligible for instance search- addNamedInstance c d+ -- Add the constructor to the instance table, if needed+ when (Info.defInstance i == InstanceDef) $ do+ addNamedInstance c d return nonLinPars where@@ -308,10 +316,16 @@ t <- reduce t case ignoreSharing $ unEl t of Pi dom b -> do- sa <- reduce $ getSort dom- unless (sa == SizeUniv) $ sa `leqSort` s+ withoutK <- optWithoutK <$> pragmaOptions+ -- Forced constructor arguments are ignored in size-checking.+ when (withoutK || notForced (getRelevance dom)) $ do+ sa <- reduce $ getSort dom+ unless (sa == SizeUniv) $ sa `leqSort` s addContext (absName b, dom) $ fitsIn (absBody b) (raise 1 s) _ -> return () -- getSort t `leqSort` s -- Andreas, 2013-04-13 not necessary since constructor type ends in data type+ where+ notForced Forced{} = False+ notForced _ = True -- | Return the parameters that share variables with the indices -- nonLinearParameters :: Int -> Type -> TCM [Int]@@ -437,4 +451,3 @@ MetaV {} -> return Nothing Shared{} -> __IMPOSSIBLE__ DontCare{} -> __IMPOSSIBLE__- ExtLam{} -> __IMPOSSIBLE__
src/full/Agda/TypeChecking/Rules/Decl.hs view
@@ -1,5 +1,5 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE TupleSections #-} #if __GLASGOW_HASKELL__ >= 710@@ -10,26 +10,30 @@ import Control.Monad import Control.Monad.Reader-import Control.Monad.State (modify)+import Control.Monad.State (modify, gets)+import Control.Monad.Writer (tell) import qualified Data.Foldable as Fold import Data.Maybe import Data.Map (Map) import qualified Data.Set as Set import Data.Set (Set)-import Data.Sequence ((|>)) import Agda.Compiler.HaskellTypes-+import Agda.Compiler.UHC.Pragmas.Parse import Agda.Interaction.Options import Agda.Interaction.Highlighting.Generate import qualified Agda.Syntax.Abstract as A-import Agda.Syntax.Internal as I+import Agda.Syntax.Abstract.Views (deepUnscopeDecl, deepUnscopeDecls)+import Agda.Syntax.Internal+import qualified Agda.Syntax.Reflected as R import qualified Agda.Syntax.Info as Info import Agda.Syntax.Position import Agda.Syntax.Common+import Agda.Syntax.Literal import Agda.Syntax.Translation.InternalToAbstract+import Agda.Syntax.Translation.ReflectedToAbstract import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin@@ -46,6 +50,7 @@ import Agda.TypeChecking.Primitive import Agda.TypeChecking.ProjectionLike import Agda.TypeChecking.Quote+import Agda.TypeChecking.Unquote import Agda.TypeChecking.Records import Agda.TypeChecking.Reduce import Agda.TypeChecking.Rewriting@@ -59,6 +64,7 @@ import Agda.TypeChecking.Rules.Record ( checkRecDef ) import Agda.TypeChecking.Rules.Def ( checkFunDef, useTerPragma ) import Agda.TypeChecking.Rules.Builtin+import Agda.TypeChecking.Rules.Display ( checkDisplayPragma ) import Agda.Termination.TermCheck @@ -67,10 +73,62 @@ import Agda.Utils.Monad import Agda.Utils.Pretty (prettyShow) import Agda.Utils.Size+import Agda.Utils.Except #include "undefined.h" import Agda.Utils.Impossible +-- | Cached checkDecl+checkDeclCached :: A.Declaration -> TCM ()+checkDeclCached d@A.ScopedDecl{} = checkDecl d+checkDeclCached d@(A.Section minfo mname tbinds _) = do+ e <- readFromCachedLog+ reportSLn "cache.decl" 10 $ "checkDeclCached: " ++ show (isJust e)+ case e of+ Just (EnterSection minfo' mname' tbinds', _)+ | killRange minfo == killRange minfo' && mname == mname' && tbinds == tbinds' -> do+ return ()+ _ -> do+ cleanCachedLog+ writeToCurrentLog $ EnterSection minfo mname tbinds+ checkDecl d+ e' <- readFromCachedLog+ case e' of+ Just (LeaveSection mname', _) | mname == mname' -> do+ return ()+ _ -> do+ cleanCachedLog+ writeToCurrentLog $ LeaveSection mname++checkDeclCached d = do+ e <- readFromCachedLog++ reportSLn "cache.decl" 10 $ "checkDeclCached: " ++ show (isJust e)++ case e of+ (Just (Decl d',s)) | compareDecl d d' -> do+ restorePostScopeState s+ reportSLn "cache.decl" 50 $ "range: " ++ show (getRange d)+ printSyntaxInfo (getRange d)+ _ -> do+ cleanCachedLog+ checkDeclWrap d+ writeToCurrentLog $ Decl d+ where+ compareDecl A.Section{} A.Section{} = __IMPOSSIBLE__+ compareDecl A.ScopedDecl{} A.ScopedDecl{} = __IMPOSSIBLE__+ compareDecl x y = x == y+ -- changes to CS inside a RecDef or Mutual ought not happen,+ -- but they do happen, so we discard them.+ ignoreChanges m = do+ cs <- gets $ stLoadedFileCache . stPersistentState+ cleanCachedLog+ _ <- m+ modifyPersistentState $ \st -> st{stLoadedFileCache = cs}+ checkDeclWrap d@A.RecDef{} = ignoreChanges $ checkDecl d+ checkDeclWrap d@A.Mutual{} = ignoreChanges $ checkDecl d+ checkDeclWrap d = checkDecl d+ -- | Type check a sequence of declarations. checkDecls :: [A.Declaration] -> TCM () checkDecls ds = do@@ -85,7 +143,7 @@ checkDecl d = setCurrentRange d $ do reportSDoc "tc.decl" 10 $ text "checking declaration" debugPrintDecl d- reportSDoc "tc.decl" 90 $ (text . show) d+ reportSDoc "tc.decl" 90 $ (text . show) (deepUnscopeDecl d) reportSDoc "tc.decl" 10 $ prettyA d -- Might loop, see e.g. Issue 1597 -- Issue 418 fix: freeze metas before checking an abstract thing@@ -95,11 +153,11 @@ -- if we're not inside a mutual block? none m = m >> return Nothing meta m = m >> return (Just (return ()))- mutual i ds m = m >>= return . Just . mutualChecks i d ds+ mutual i ds m = m >>= return . Just . uncurry (mutualChecks i d ds) impossible m = m >> return __IMPOSSIBLE__ -- We're definitely inside a mutual block. - let mi = Info.MutualInfo TerminationCheck noRange+ let mi = Info.MutualInfo TerminationCheck True noRange finalChecks <- case d of A.Axiom{} -> meta $ checkTypeSignature d@@ -107,15 +165,16 @@ A.Primitive i x e -> meta $ checkPrimitive i x e A.Mutual i ds -> mutual i ds $ checkMutual i ds A.Section i x tel ds -> meta $ checkSection i x tel ds- A.Apply i x modapp rd rm -> meta $ checkSectionApplication i x modapp rd rm- A.Import i x -> none $ checkImport i x+ A.Apply i x modapp rd rm _adir -> meta $ checkSectionApplication i x modapp rd rm+ A.Import i x _adir -> none $ checkImport i x A.Pragma i p -> none $ checkPragma i p- A.ScopedDecl scope ds -> none $ setScope scope >> checkDecls ds+ A.ScopedDecl scope ds -> none $ setScope scope >> mapM_ checkDeclCached ds A.FunDef i x delayed cs -> impossible $ check x i $ checkFunDef delayed i x cs A.DataDef i x ps cs -> impossible $ check x i $ checkDataDef i x ps cs- A.RecDef i x ind c ps tel cs -> mutual mi [d] $ check x i $ do- checkRecDef i x ind c ps tel cs- return (Set.singleton x)+ A.RecDef i x ind eta c ps tel cs -> mutual mi [d] $ check x i $ do+ checkRecDef i x ind eta c ps tel cs+ blockId <- mutualBlockOf x+ return (blockId, Set.singleton x) A.DataSig i x ps t -> impossible $ checkSig i x ps t A.RecSig i x ps t -> none $ checkSig i x ps t -- A record signature is always followed by a@@ -131,6 +190,7 @@ -- from the concrete syntax, retained for -- highlighting purposes. A.UnquoteDecl mi i x e -> checkUnquoteDecl mi i x e+ A.UnquoteDef i x e -> impossible $ checkUnquoteDef i x e whenNothingM (asks envMutualBlock) $ do @@ -139,14 +199,13 @@ -- Post-typing checks. whenJust finalChecks $ \ theMutualChecks -> do- solveSizeConstraints+ checkingWhere <- asks envCheckingWhere+ solveSizeConstraints $ if checkingWhere then DontDefaultToInfty else DefaultToInfty wakeupConstraints_ -- solve emptiness constraints _ <- freezeMetas theMutualChecks where- unScope (A.ScopedDecl scope ds) = setScope scope >> unScope d- unScope d = return d -- check record or data type signature checkSig i x ps t = checkTypeSignature $@@ -168,14 +227,14 @@ -- Some checks that should be run at the end of a mutual -- block (or non-mutual record declaration). The set names -- contains the names defined in the mutual block.-mutualChecks :: Info.MutualInfo -> A.Declaration -> [A.Declaration] -> Set QName -> TCM ()-mutualChecks i d ds names = do+mutualChecks :: Info.MutualInfo -> A.Declaration -> [A.Declaration] -> MutualId -> Set QName -> TCM ()+mutualChecks mi d ds mid names = do -- Andreas, 2014-04-11: instantiate metas in definition types mapM_ instantiateDefinitionType $ Set.toList names -- Andreas, 2013-02-27: check termination before injectivity, -- to avoid making the injectivity checker loop.- checkTermination_ d- checkPositivity_ names+ checkTermination_ mid d+ checkPositivity_ mi names -- Andreas, 2015-03-26 Issue 1470: -- Restricting coinduction to recursive does not solve the -- actual problem, and prevents interesting sound applications@@ -194,38 +253,36 @@ type FinalChecks = Maybe (TCM ()) -checkUnquoteDecl :: Info.MutualInfo -> Info.DefInfo -> QName -> A.Expr -> TCM FinalChecks-checkUnquoteDecl mi i x e = do- reportSDoc "tc.unquote.decl" 20 $ text "Checking unquoteDecl" <+> prettyTCM x- fundef <- primAgdaFunDef- v <- checkExpr e $ El (mkType 0) fundef- reportSDoc "tc.unquote.decl" 20 $ text "unquoteDecl: Checked term"- uv <- runUnquoteM $ unquote v- case uv of- Left err -> typeError $ UnquoteFailed err- Right (UnQFun a cs) -> do- reportSDoc "tc.unquote.decl" 20 $- vcat $ text "unquoteDecl: Unquoted term"- : [ nest 2 $ text (show c) | c <- cs ]- -- Add x to signature, otherwise reification gets unhappy.- addConstant x =<< do- useTerPragma $ defaultDefn defaultArgInfo x a emptyFunction- a <- reifyUnquoted $ killRange a- reportSDoc "tc.unquote.decl" 10 $- vcat [ text "unquoteDecl" <+> prettyTCM x <+> text "-->"- , prettyTCM x <+> text ":" <+> prettyA a ]- tel <- getContextTelescope- let tel' = replaceEmptyName "r" $ killRange tel- cs <- mapM (reifyUnquoted . QNamed x . killRange . abstract tel) cs- reportSDoc "tc.unquote.decl" 10 $ vcat $ map prettyA cs- let ds = [ A.Axiom A.FunSig i defaultArgInfo x a -- TODO other than defaultArg- , A.FunDef i x NotDelayed cs ]- xs <- checkMutual mi ds- return $ Just $ mutualChecks mi (A.Mutual mi ds) ds xs+checkUnquoteDecl :: Info.MutualInfo -> [Info.DefInfo] -> [QName] -> A.Expr -> TCM FinalChecks+checkUnquoteDecl mi is xs e = do+ reportSDoc "tc.unquote.decl" 20 $ text "Checking unquoteDecl" <+> sep (map prettyTCM xs)+ Nothing <$ unquoteTop xs e --- | Instantiate all metas in 'Definition' associated to 'QName'. -- Makes sense after freezing metas.--- Some checks, like free variable analysis, are not in 'TCM', -- so they will be more precise (see issue 1099) after meta instantiation.--- -- Precondition: name has been added to signature already.+checkUnquoteDef :: [Info.DefInfo] -> [QName] -> A.Expr -> TCM ()+checkUnquoteDef _ xs e = do+ reportSDoc "tc.unquote.decl" 20 $ text "Checking unquoteDef" <+> sep (map prettyTCM xs)+ () <$ unquoteTop xs e++-- | Run a reflected TCM computatation expected to define a given list of+-- names.+unquoteTop :: [QName] -> A.Expr -> TCM [QName]+unquoteTop xs e = do+ tcm <- primAgdaTCM+ unit <- primUnit+ lzero <- primLevelZero+ let vArg = defaultArg+ hArg = setHiding Hidden . vArg+ m <- checkExpr e $ El (mkType 0) $ apply tcm [hArg lzero, vArg unit]+ res <- runUnquoteM $ tell xs >> evalTCM m+ case res of+ Left err -> typeError $ UnquoteFailed err+ Right (_, xs) -> return xs++-- | Instantiate all metas in 'Definition' associated to 'QName'.+-- Makes sense after freezing metas. Some checks, like free variable+-- analysis, are not in 'TCM', so they will be more precise (see issue 1099)+-- after meta instantiation.+-- Precondition: name has been added to signature already. instantiateDefinitionType :: QName -> TCM () instantiateDefinitionType q = do reportSLn "tc.decl.inst" 20 $ "instantiating type of " ++ show q@@ -258,23 +315,24 @@ A.Axiom{} -> highlight d A.Field{} -> __IMPOSSIBLE__ A.Primitive{} -> highlight d- A.Mutual{} -> highlight d+ A.Mutual i ds -> mapM_ highlight_ $ deepUnscopeDecls ds A.Apply{} -> highlight d A.Import{} -> highlight d A.Pragma{} -> highlight d A.ScopedDecl{} -> return ()- A.FunDef{} -> __IMPOSSIBLE__- A.DataDef{} -> __IMPOSSIBLE__- A.DataSig{} -> __IMPOSSIBLE__+ A.FunDef{} -> highlight d+ A.DataDef{} -> highlight d+ A.DataSig{} -> highlight d A.Open{} -> highlight d A.PatternSynDef{} -> highlight d A.UnquoteDecl{} -> highlight d+ A.UnquoteDef{} -> highlight d A.Section i x tel _ -> highlight (A.Section i x tel []) -- Each block in the section has already been highlighted, -- all that remains is the module declaration. A.RecSig{} -> highlight d- A.RecDef i x ind c ps tel cs ->- highlight (A.RecDef i x ind c [] tel (fields cs))+ A.RecDef i x ind eta c ps tel cs ->+ highlight (A.RecDef i x ind eta c [] dummy (fields cs)) -- The telescope and all record module declarations except -- for the fields have already been highlighted. where@@ -282,26 +340,37 @@ fields (d@A.Field{} : ds) = d : fields ds fields (_ : ds) = fields ds fields [] = []+ -- Andreas, 2016-01-22, issue 1791+ -- The expression denoting the record constructor type+ -- is replace by a dummy expression in order to /not/+ -- generate highlighting from it.+ -- Simply because all the highlighting info is wrong+ -- in the record constructor type:+ -- * fields become bound variables,+ -- * declarations become let-bound variables.+ -- We do not need that crap.+ dummy = A.Lit $ LitString noRange $+ "do not highlight construct(ed/or) type" -- | Termination check a declaration.-checkTermination_ :: A.Declaration -> TCM ()-checkTermination_ d = Bench.billTo [Bench.Termination] $ do+checkTermination_ :: MutualId -> A.Declaration -> TCM ()+checkTermination_ mid d = Bench.billTo [Bench.Termination] $ do reportSLn "tc.decl" 20 $ "checkDecl: checking termination..." whenM (optTerminationCheck <$> pragmaOptions) $ do case d of -- Record module definitions should not be termination-checked twice. A.RecDef {} -> return () _ -> disableDestructiveUpdate $ do- termErrs <- termDecl d+ termErrs <- termDecl mid d unless (null termErrs) $ typeError $ TerminationCheckFailed termErrs -- | Check a set of mutual names for positivity.-checkPositivity_ :: Set QName -> TCM ()-checkPositivity_ names = Bench.billTo [Bench.Positivity] $ do+checkPositivity_ :: Info.MutualInfo -> Set QName -> TCM ()+checkPositivity_ mi names = Bench.billTo [Bench.Positivity] $ do -- Positivity checking. reportSLn "tc.decl" 20 $ "checkDecl: checking positivity..."- checkStrictlyPositive names+ checkStrictlyPositive mi names -- Andreas, 2012-02-13: Polarity computation uses info from -- positivity check, so it needs happen after positivity@@ -313,7 +382,7 @@ -- for the old coinduction.) checkCoinductiveRecords :: [A.Declaration] -> TCM () checkCoinductiveRecords ds = forM_ ds $ \ d -> case d of- A.RecDef _ q (Just (Ranged r CoInductive)) _ _ _ _ -> setCurrentRange r $ do+ A.RecDef _ q (Just (Ranged r CoInductive)) _ _ _ _ _ -> setCurrentRange r $ do unlessM (isRecursiveRecord q) $ typeError $ GenericError $ "Only recursive records can be coinductive" _ -> return ()@@ -379,12 +448,12 @@ "mutual definitions are not considered for projection-likeness" -- | Type check an axiom.-checkAxiom :: A.Axiom -> Info.DefInfo -> A.ArgInfo -> QName -> A.Expr -> TCM ()+checkAxiom :: A.Axiom -> Info.DefInfo -> ArgInfo -> QName -> A.Expr -> TCM () checkAxiom funSig i info0 x e = do -- Andreas, 2012-04-18 if we are in irrelevant context, axioms is irrelevant -- even if not declared as such (Issue 610). rel <- max (getRelevance info0) <$> asks envRelevance- let info = setRelevance rel $ convColor info0+ let info = setRelevance rel info0 -- rel <- ifM ((Irrelevant ==) <$> asks envRelevance) (return Irrelevant) (return rel0) t <- workOnTypes $ isType_ e reportSDoc "tc.decl.ax" 10 $ sep@@ -392,6 +461,19 @@ , nest 2 $ prettyTCM rel <> prettyTCM x <+> text ":" <+> prettyTCM t , nest 2 $ text "of sort " <+> prettyTCM (getSort t) ]++ -- check macro type if necessary+ when (Info.defMacro i == MacroDef) $ do+ t' <- normalise t+ TelV tel tr <- telView t'++ let telList = telToList tel+ resType = abstract (telFromList (drop (length telList - 1) telList)) tr+ expectedType <- el primAgdaTerm --> el (primAgdaTCM <#> primLevelZero <@> primUnit)+ equalType resType expectedType+ `catchError` \ _ -> typeError . GenericDocError =<< sep [ text "Result type of a macro must be"+ , nest 2 $ prettyTCM expectedType ]+ -- Andreas, 2015-03-17 Issue 1428: Do not postulate sizes in parametrized -- modules! when (funSig == A.NoFunSig) $ do@@ -410,7 +492,7 @@ when (Info.defInstance i == InstanceDef) $ do addTypedInstance x t - traceCall (IsType_ e) $ solveSizeConstraints -- need Range for error message+ traceCall (IsType_ e) $ solveSizeConstraints DefaultToInfty -- need Range for error message -- Andreas, 2011-05-31, that freezing below is probably wrong: -- when_ (Info.defAbstract i == AbstractDef) $ freezeMetas@@ -419,7 +501,13 @@ checkPrimitive :: Info.DefInfo -> QName -> A.Expr -> TCM () checkPrimitive i x e = traceCall (CheckPrimitive (getRange i) (qnameName x) e) $ do -- TODO!! (qnameName)- (_, PrimImpl t' pf) <- lookupPrimitiveFunctionQ x+ (name, PrimImpl t' pf) <- lookupPrimitiveFunctionQ x+ -- Primitive functions on nats are BUILTIN not 'primitive'+ let builtinPrimitives =+ [ "primNatPlus", "primNatMinus" , "primNatTimes"+ , "primNatDivSucAux", "primNatModSucAux"+ , "primNatEquality", "primNatLess" ]+ when (elem name builtinPrimitives) $ typeError $ NoSuchPrimitiveFunction name t <- isType_ e noConstraints $ equalType t t' let s = prettyShow $ qnameName x@@ -428,6 +516,13 @@ defaultDefn defaultArgInfo x t $ Primitive (Info.defAbstract i) s [] Nothing +assertCurrentModule :: QName -> String -> TCM ()+assertCurrentModule x err =+ do def <- getConstInfo x+ m <- currentModule+ let m' = qnameModule $ defName def+ unless (m == m') $ typeError $ GenericError err+ -- | Check a pragma. checkPragma :: Range -> A.Pragma -> TCM () checkPragma r p =@@ -435,6 +530,17 @@ A.BuiltinPragma x e -> bindBuiltin x e A.BuiltinNoDefPragma b x -> bindBuiltinNoDef b x A.RewritePragma q -> addRewriteRule q+ A.CompiledDeclareDataPragma x hs -> do+ def <- getConstInfo x+ assertCurrentModule x $+ "COMPILED_DECLARE_DATA directives must appear in the same module " +++ "as their corresponding datatype definition,"+ case theDef def of+ Datatype{} -> addHaskellType x hs+ Axiom{} -> -- possible when the data type has only been declared yet+ addHaskellType x hs+ _ -> typeError $ GenericError+ "COMPILED_DECLARE_DATA directive only works on data types" A.CompiledTypePragma x hs -> do def <- getConstInfo x case theDef def of@@ -445,9 +551,7 @@ def <- getConstInfo x -- Check that the pragma appears in the same module -- as the datatype.- do m <- currentModule- let m' = qnameModule $ defName def- unless (m == m') $ typeError $ GenericError $+ assertCurrentModule x $ "COMPILED_DATA directives must appear in the same module " ++ "as their corresponding datatype definition," let addCompiledData cs = do@@ -521,30 +625,70 @@ _ -> typeError $ GenericError "COMPILED_EPIC directive only works on postulates" A.CompiledJSPragma x ep -> addJSCode x ep+ A.CompiledUHCPragma x cr -> do+ def <- getConstInfo x+ case theDef def of+ Axiom{} -> case parseCoreExpr cr of+ Left msg -> typeError $ GenericError $ "Could not parse COMPILED_UHC pragma: " ++ msg+ Right cr -> addCoreCode x cr+ _ -> typeError $ GenericError "COMPILED_UHC directive only works on postulates" -- only allow postulates for the time being+ A.CompiledDataUHCPragma x crd crcs -> do+ -- TODO mostly copy-paste from the CompiledDataPragma, should be refactored into a seperate function+ def <- getConstInfo x+ -- Check that the pragma appears in the same module+ -- as the datatype.+ m <- currentModule+ let m' = qnameModule $ defName def+ unless (m == m') $ typeError $ GenericError $+ "COMPILED_DATA_UHC directives must appear in the same module " +++ "as their corresponding datatype definition,"+ case theDef def of+ Datatype{dataCons = cs}+ | length cs /= length crcs -> do+ let n_forms_are = case length crcs of+ 1 -> "1 compiled form is"+ n -> show n ++ " compiled forms are"+ only | null crcs = ""+ | length crcs < length cs = "only "+ | otherwise = ""++ err <- fsep $ [prettyTCM x] ++ pwords ("has " ++ show (length cs) +++ " constructors, but " ++ only ++ n_forms_are ++ " given [" ++ unwords crcs ++ "]")+ typeError $ GenericError $ show err+ | otherwise -> do+ -- Remark: core pragmas are not type-checked+ dt' <- parseCoreData crd+ cons' <- parseCoreConstrs dt' crcs+ addCoreType x dt'+ sequence_ $ zipWith addCoreConstr cs cons'+ _ -> typeError $ GenericError "COMPILED_DATA_UHC on non datatype"+ A.NoSmashingPragma x -> do+ def <- getConstInfo x+ case theDef def of+ Function{} -> markNoSmashing x+ _ -> typeError $ GenericError "NO_SMASHING directive only works on functions" A.StaticPragma x -> do def <- getConstInfo x case theDef def of Function{} -> markStatic x _ -> typeError $ GenericError "STATIC directive only works on functions"+ A.InlinePragma x -> do+ def <- getConstInfo x+ case theDef def of+ Function{} -> markInline x+ _ -> typeError $ GenericError "INLINE directive only works on functions" A.OptionsPragma{} -> typeError $ GenericError $ "OPTIONS pragma only allowed at beginning of file, before top module declaration"- A.EtaPragma r -> do- whenNothingM (isRecord r) $- typeError $ GenericError $ "ETA pragma is only applicable to records"- modifySignature $ updateDefinition r $ updateTheDef $ setEta- where- setEta d = case d of- Record{} -> d { recEtaEquality = True }- _ -> __IMPOSSIBLE__+ A.DisplayPragma f ps e -> checkDisplayPragma f ps e -- | Type check a bunch of mutual inductive recursive definitions. -- -- All definitions which have so far been assigned to the given mutual -- block are returned.-checkMutual :: Info.MutualInfo -> [A.Declaration] -> TCM (Set QName)+checkMutual :: Info.MutualInfo -> [A.Declaration] -> TCM (MutualId, Set QName) checkMutual i ds = inMutualBlock $ do + blockId <- currentOrFreshMutualBlock verboseS "tc.decl.mutual" 20 $ do- blockId <- currentOrFreshMutualBlock reportSDoc "tc.decl.mutual" 20 $ vcat $ (text "Checking mutual block" <+> text (show blockId) <> text ":") : map (nest 2 . prettyA) ds@@ -552,7 +696,7 @@ local (\e -> e { envTerminationCheck = () <$ Info.mutualTermCheck i }) $ mapM_ checkDecl ds - lookupMutualBlock =<< currentOrFreshMutualBlock+ (blockId, ) <$> lookupMutualBlock blockId -- | Type check the type signature of an inductive or recursive definition. checkTypeSignature :: A.TypeSignature -> TCM ()@@ -577,7 +721,7 @@ dtel' <- prettyTCM =<< lookupSection x reportSLn "tc.mod.check" 10 $ "checking section " ++ show dx ++ " " ++ show dtel reportSLn "tc.mod.check" 10 $ " actual tele: " ++ show dtel'- withCurrentModule x $ checkDecls ds+ withCurrentModule x $ mapM_ checkDeclCached ds -- | Helper for 'checkSectionApplication'. --@@ -590,7 +734,7 @@ checkModuleArity :: ModuleName -- ^ Name of applied module. -> Telescope -- ^ The module parameters.- -> [I.NamedArg A.Expr] -- ^ The arguments this module is applied to.+ -> [NamedArg A.Expr] -- ^ The arguments this module is applied to. -> TCM Telescope -- ^ The remaining module parameters (has free de Bruijn indices!). checkModuleArity m tel args = check tel args where@@ -654,12 +798,11 @@ tel <- lookupSection m2 vs <- freeVarsToApply $ mnameToQName m2 let tel' = apply tel vs- args' = convColor args -- Compute the remaining parameter telescope after stripping of -- the initial parameters that are determined by the @args@. -- Warning: @etaTel@ is not well-formed in @ptel@, since -- the actual application has not happened.- etaTel <- checkModuleArity m2 tel' args'+ etaTel <- checkModuleArity m2 tel' args -- Take the module parameters that will be instantiated by @args@. let tel'' = telFromList $ take (size tel' - size etaTel) $ telToList tel' reportSDoc "tc.mod.apply" 15 $ vcat@@ -672,7 +815,7 @@ , nest 2 $ text "eta =" <+> escapeContext (size ptel) (addContext tel'' $ prettyTCM etaTel) ] -- Now, type check arguments.- ts <- (noConstraints $ checkArguments_ DontExpandLast (getRange i) args' tel') >>= \case+ ts <- (noConstraints $ checkArguments_ DontExpandLast (getRange i) args tel') >>= \case (ts, etaTel') | (size etaTel == size etaTel') -> return ts _ -> __IMPOSSIBLE__ -- Perform the application of the module parameters.@@ -776,6 +919,7 @@ A.PatternSynDef{} -> "PatternSynDef" A.UnquoteDecl {} -> "UnquoteDecl" A.ScopedDecl {} -> "ScopedDecl"+ A.UnquoteDef {} -> "UnquoteDef" debugPrintDecl :: A.Declaration -> TCM () debugPrintDecl d = do
src/full/Agda/TypeChecking/Rules/Decl.hs-boot view
@@ -1,7 +1,6 @@ module Agda.TypeChecking.Rules.Decl where -import Data.Map (Map) import Agda.Syntax.Info (ModuleInfo) import Agda.Syntax.Abstract (QName, Declaration, ModuleName, ModuleApplication, Ren) import Agda.TypeChecking.Monad (TCM)
src/full/Agda/TypeChecking/Rules/Def.hs view
@@ -1,5 +1,7 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE NondecreasingIndentation #-} module Agda.TypeChecking.Rules.Def where @@ -15,16 +17,18 @@ import Data.Traversable import Agda.Syntax.Common+import Agda.Syntax.Concrete (exprFieldA) import Agda.Syntax.Position import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Internal as I+import Agda.Syntax.Internal.Pattern as I import qualified Agda.Syntax.Info as Info import Agda.Syntax.Fixity import Agda.Syntax.Translation.InternalToAbstract import Agda.Syntax.Info import Agda.TypeChecking.Monad-import Agda.TypeChecking.Monad.Builtin (primRefl, primEqualityName)+import Agda.TypeChecking.Monad.Builtin import qualified Agda.TypeChecking.Monad.Benchmark as Bench import Agda.TypeChecking.Constraints@@ -45,7 +49,7 @@ import Agda.TypeChecking.CompiledClause (CompiledClauses(..)) import Agda.TypeChecking.CompiledClause.Compile -import Agda.TypeChecking.Rules.Term ( checkExpr, inferExpr, inferExprForWith, checkDontExpandLast, checkTelescope, ConvColor(..) )+import Agda.TypeChecking.Rules.Term ( checkExpr, inferExpr, inferExprForWith, checkDontExpandLast, checkTelescope ) import Agda.TypeChecking.Rules.LHS ( checkLeftHandSide, LHSResult(..) ) import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl ( checkDecls ) @@ -90,11 +94,11 @@ where isMeta (MetaV x _) = Just x isMeta _ = Nothing- trivialClause [A.Clause (A.LHS i (A.LHSHead f []) []) (A.RHS e) []] = Just e+ trivialClause [A.Clause (A.LHS i (A.LHSHead f []) []) (A.RHS e) [] _] = Just e trivialClause _ = Nothing -- | Check a trivial definition of the form @f = e@-checkAlias :: Type -> I.ArgInfo -> Delayed -> Info.DefInfo -> QName -> A.Expr -> TCM ()+checkAlias :: Type -> ArgInfo -> Delayed -> Info.DefInfo -> QName -> A.Expr -> TCM () checkAlias t' ai delayed i name e = do reportSDoc "tc.def.alias" 10 $ text "checkAlias" <+> vcat [ text (show name) <+> colon <+> prettyTCM t'@@ -114,32 +118,39 @@ reportSDoc "tc.def.alias" 20 $ text "checkAlias: finished checking" - solveSizeConstraints+ solveSizeConstraints DontDefaultToInfty v <- instantiateFull v -- if we omit this, we loop (stdlib: Relation.Binary.Sum) -- or the termination checker might stumble over levels in sorts -- that cannot be converted to expressions without the level built-ins -- (test/succeed/Issue655.agda) + -- compute body modification for irrelevant definitions, see issue 610+ let bodyMod = case getRelevance ai of+ Irrelevant -> dontCare+ _ -> id+ -- Add the definition addConstant name $ defaultDefn ai name t $ Function { funClauses = [ Clause -- trivial clause @name = v@ { clauseRange = getRange i , clauseTel = EmptyTel- , clausePerm = idP 0 , namedClausePats = []- , clauseBody = Body v+ , clauseBody = Body $ bodyMod v , clauseType = Just $ Arg ai t+ , clauseCatchall = False } ]- , funCompiled = Just $ Done [] v+ , funCompiled = Just $ Done [] $ bodyMod v+ , funTreeless = Nothing , funDelayed = delayed , funInv = NotInjective , funAbstr = Info.defAbstract i , funMutual = [] , funProjection = Nothing+ , funSmashable = True , funStatic = False- , funCopy = False+ , funInline = False , funTerminates = Nothing , funExtLam = Nothing , funWith = Nothing@@ -150,7 +161,7 @@ -- | Type check a definition by pattern matching. checkFunDef' :: Type -- ^ the type we expect the function to have- -> I.ArgInfo -- ^ is it irrelevant (for instance)+ -> ArgInfo -- ^ is it irrelevant (for instance) -> Delayed -- ^ are the clauses delayed (not unfolded willy-nilly) -> Maybe ExtLamInfo -- ^ does the definition come from an extended lambda -- (if so, we need to know some stuff about lambda-lifted args)@@ -187,7 +198,7 @@ -- 2014-04-24: The size solver requires each clause to be -- checked individually, since otherwise we get constraints -- in typing contexts which are not prefixes of each other.- whenNothing extlam solveSizeConstraints+ whenNothing extlam $ solveSizeConstraints DontDefaultToInfty -- Andreas, 2013-10-27 add clause as soon it is type-checked -- TODO: instantiateFull? addClauses name [c]@@ -251,13 +262,15 @@ Function { funClauses = cs , funCompiled = Just cc+ , funTreeless = Nothing , funDelayed = delayed , funInv = inv , funAbstr = Info.defAbstract i , funMutual = [] , funProjection = Nothing+ , funSmashable = True , funStatic = False- , funCopy = False+ , funInline = False , funTerminates = Nothing , funExtLam = extlam , funWith = with@@ -294,8 +307,8 @@ -- | Insert some patterns in the in with-clauses LHS of the given RHS insertPatterns :: [A.Pattern] -> A.RHS -> A.RHS insertPatterns pats (A.WithRHS aux es cs) = A.WithRHS aux es (map insertToClause cs)- where insertToClause (A.Clause (A.LHS i lhscore ps) rhs ds)- = A.Clause (A.LHS i lhscore (pats ++ ps)) (insertPatterns pats rhs) ds+ where insertToClause (A.Clause (A.LHS i lhscore ps) rhs ds catchall)+ = A.Clause (A.LHS i lhscore (pats ++ ps)) (insertPatterns pats rhs) ds catchall insertPatterns pats (A.RewriteRHS qes rhs wh) = A.RewriteRHS qes (insertPatterns pats rhs) wh insertPatterns pats rhs = rhs @@ -308,10 +321,10 @@ , wfParentType :: Type -- ^ Type of the parent function. , wfBeforeTel :: Telescope -- ^ Types of arguments to the with function before the with expressions (needed vars). , wfAfterTel :: Telescope -- ^ Types of arguments to the with function after the with expressions (unneeded vars).- , wfExprs :: [Term] -- ^ With expressions.- , wfExprTypes :: [Type] -- ^ Types of the with expressions.+ , wfExprs :: [Term] -- ^ With and rewrite expressions.+ , wfExprTypes :: [EqualityView] -- ^ Types of the with and rewrite expressions. , wfRHSType :: Type -- ^ Type of the right hand side.- , wfParentPats :: [I.NamedArg Pattern] -- ^ Parent patterns.+ , wfParentPats :: [NamedArg Pattern] -- ^ Parent patterns. , wfPermSplit :: Permutation -- ^ Permutation resulting from splitting the telescope into needed and unneeded vars. , wfPermParent :: Permutation -- ^ Permutation reordering the variables in the parent pattern. , wfPermFinal :: Permutation -- ^ Final permutation (including permutation for the parent clause).@@ -338,8 +351,8 @@ -> A.SpineClause -- ^ Clause. -> TCM Clause -- ^ Type-checked clause. -checkClause t c@(A.Clause (A.SpineLHS i x aps withPats) rhs0 wh) = do- reportSDoc "tc.with.top" 30 $ text "Checking clause" $$ prettyA c+checkClause t c@(A.Clause (A.SpineLHS i x aps withPats) rhs0 wh catchall) = do+ reportSDoc "tc.lhs.top" 30 $ text "Checking clause" $$ prettyA c unless (null withPats) $ typeError $ UnexpectedWithPatterns withPats traceCall (CheckClause t c) $ do@@ -361,13 +374,19 @@ ] ] + -- compute body modification for irrelevant definitions, see issue 610+ rel <- asks envRelevance+ let bodyMod body = case rel of+ Irrelevant -> dontCare <$> body+ _ -> body+ return $ Clause { clauseRange = getRange i , clauseTel = killRange delta- , clausePerm = perm- , namedClausePats = ps- , clauseBody = body+ , namedClausePats = numberPatVars perm ps+ , clauseBody = bodyMod body , clauseType = Just trhs+ , clauseCatchall = catchall } -- | Type check the @with@ and @rewrite@ lhss and/or the rhs.@@ -375,28 +394,27 @@ checkRHS :: LHSInfo -- ^ Range of lhs. -> QName -- ^ Name of function.- -> [A.NamedArg A.Pattern] -- ^ Patterns in lhs.+ -> [NamedArg A.Pattern] -- ^ Patterns in lhs. -> Type -- ^ Type of function. -> LHSResult -- ^ Result of type-checking patterns -> A.RHS -- ^ Rhs to check. -> TCM (ClauseBody, WithFunctionProblem) -checkRHS i x aps t (LHSResult delta ps trhs perm) rhs0 = handleRHS rhs0+checkRHS i x aps t lhsResult@(LHSResult delta ps trhs perm) rhs0 = handleRHS rhs0 where- aps' = convColor aps absurdPat = any (containsAbsurdPattern . namedArg) aps handleRHS rhs = case rhs of -- Case: ordinary RHS A.RHS e -> do- when absurdPat $ typeError $ AbsurdPatternRequiresNoRHS aps'+ when absurdPat $ typeError $ AbsurdPatternRequiresNoRHS aps v <- checkExpr e $ unArg trhs return (mkBody perm v, NoWithFunction) -- Case: no RHS A.AbsurdRHS -> do- unless absurdPat $ typeError $ NoRHSRequiresAbsurdPattern aps'+ unless absurdPat $ typeError $ NoRHSRequiresAbsurdPattern aps return (NoBody, NoWithFunction) -- Case: @rewrite@@@ -426,72 +444,64 @@ -- Get value and type of rewrite-expression. - (proof,t) <- inferExpr eq-- -- Get the names of builtins EQUALITY and REFL.+ (proof, eqt) <- inferExpr eq - equality <- primEqualityName- Con reflCon [] <- ignoreSharing <$> primRefl+ -- Andreas, 2016-04-14, see also Issue #1796+ -- Run the size constraint solver to improve with-abstraction+ -- in case the with-expression contains size metas.+ solveSizeConstraints DefaultToInfty -- Check that the type is actually an equality (lhs ≡ rhs) -- and extract lhs, rhs, and their type. - t' <- reduce =<< instantiateFull t- (rewriteType,rewriteFrom,rewriteTo) <- do- case ignoreSharing $ unEl t' of- Def equality'- [ _level- , Apply (Arg (ArgInfo Hidden Relevant _) rewriteType)- , Apply (Arg (ArgInfo NotHidden Relevant _) rewriteFrom)- , Apply (Arg (ArgInfo NotHidden Relevant _) rewriteTo)- ] | equality' == equality ->- return (El (getSort t') rewriteType, rewriteFrom, rewriteTo)- _ -> do- err <- text "Cannot rewrite by equation of type" <+> prettyTCM t'- typeError $ GenericDocError err+ t' <- reduce =<< instantiateFull eqt+ (eqt,rewriteType,rewriteFrom,rewriteTo) <- equalityView t' >>= \case+ eqt@(EqualityType s _eq _level dom a b) -> return (eqt, El s (unArg dom), unArg a, unArg b)+ OtherType{} -> typeError . GenericDocError =<< do+ text "Cannot rewrite by equation of type" <+> prettyTCM t' + -- Get the name of builtin REFL.++ Con reflCon [] <- ignoreSharing <$> primRefl+ -- Andreas, 2014-05-17 Issue 1110:- -- Rewriting with a reflexive equation has no effect, but gives an+ -- Rewriting with @refl@ has no effect, but gives an -- incomprehensible error message about the generated -- with clause. Thus, we rather do simply nothing if- -- rewriting with @a ≡ a@ is attempted.+ -- rewriting with @refl@ is attempted. + let isReflProof = do+ v <- reduce proof+ case ignoreSharing v of+ Con c [] | c == reflCon -> return True+ _ -> return False++ ifM isReflProof recurse $ {- else -} do++ -- Process 'rewrite' clause like a suitable 'with' clause.++ let reflPat = A.ConP (ConPatInfo ConPCon patNoRange) (AmbQ [conName reflCon]) []++ -- Andreas, 2015-12-25 Issue #1740:+ -- After the fix of #520, rewriting with a reflexive equation+ -- has to be desugared as matching against refl. let isReflexive = tryConversion $ dontAssignMetas $ equalTerm rewriteType rewriteFrom rewriteTo - ifM isReflexive recurse $ {- else -} do+ (pats, withExpr, withType) <- do+ ifM isReflexive+ {-then-} (return ([ reflPat ], proof, OtherType t'))+ {-else-} (return ([ A.WildP patNoRange, reflPat ], proof, eqt)) - -- Transform 'rewrite' clause into a 'with' clause,- -- going back to abstract syntax.+ let rhs' = insertPatterns pats rhs+ (rhs'', outerWhere) -- the where clauses should go on the inner-most with+ | null qes = (rhs', wh)+ | otherwise = (A.RewriteRHS qes rhs' wh, [])+ -- Andreas, 2014-03-05 kill range of copied patterns+ -- since they really do not have a source location.+ cs = [A.Clause (A.LHS i (A.LHSHead x (killRange aps)) pats) rhs'' outerWhere False] - -- Andreas, 2015-02-09 Issue 1421: kill ranges- -- as reify puts in ranges that may point to other files.- (rewriteFromExpr,rewriteToExpr,rewriteTypeExpr, proofExpr) <- killRange <$> do- disableDisplayForms $ withShowAllArguments $ reify- (rewriteFrom, rewriteTo, rewriteType , proof)- let (inner, outer) -- the where clauses should go on the inner-most with- | null qes = ([], wh)- | otherwise = (wh, [])- -- Andreas, 2014-03-05 kill range of copied patterns- -- since they really do not have a source location.- newRhs = A.WithRHS qname [rewriteFromExpr, proofExpr]- [A.Clause (A.LHS i (A.LHSHead x (killRange aps)) pats)- -- Note: handleRHS (A.RewriteRHS _ eqs _ _)- -- is defined by induction on eqs.- (A.RewriteRHS qes (insertPatterns pats rhs) inner)- outer]- cinfo = ConPatInfo ConPCon patNoRange- pats = [ A.WildP patNoRange- , A.ConP cinfo (AmbQ [conName reflCon]) []]- reportSDoc "tc.rewrite.top" 25 $ vcat- [ text "rewrite"- , text " from = " <+> prettyTCM rewriteFromExpr- , text " to = " <+> prettyTCM rewriteToExpr- , text " typ = " <+> prettyTCM rewriteType- , text " proof = " <+> prettyTCM proofExpr- , text " equ = " <+> prettyTCM t'- ]- handleRHS newRhs+ checkWithRHS x qname t lhsResult [withExpr] [withType] cs -- Case: @with@ A.WithRHS aux es cs -> do@@ -509,6 +519,26 @@ -- Infer the types of the with expressions (vs0, as) <- unzip <$> mapM inferExprForWith es++ -- Andreas, 2016-01-23, Issue #1796+ -- Run the size constraint solver to improve with-abstraction+ -- in case the with-expression contains size metas.+ solveSizeConstraints DefaultToInfty++ checkWithRHS x aux t lhsResult vs0 (map OtherType as) cs++checkWithRHS+ :: QName -- ^ Name of function.+ -> QName -- ^ Name of the with-function.+ -> Type -- ^ Type of function.+ -> LHSResult -- ^ Result of type-checking patterns+ -> [Term] -- ^ With-expressions.+ -> [EqualityView] -- ^ Types of with-expressions.+ -> [A.Clause] -- ^ With-clauses to check.+ -> TCM (ClauseBody, WithFunctionProblem)++checkWithRHS x aux t (LHSResult delta ps trhs perm) vs0 as cs = do+ let withArgs = withArguments vs0 as (vs, as) <- normalise (vs0, as) -- Andreas, 2012-09-17: for printing delta,@@ -552,15 +582,15 @@ -- Then permute the rest and grab those needed to for the with arguments (us1, us2) = genericSplitAt (size delta1) $ permute perm' us1' -- Now stuff the with arguments in between and finish with the remaining variables- v = Def aux $ map Apply $ us0 ++ us1 ++ (map defaultArg vs0) ++ us2+ v = Def aux $ map Apply $ us0 ++ us1 ++ map defaultArg withArgs ++ us2 body = mkBody perm v -- Andreas, 2013-02-26 add with-name to signature for printing purposes addConstant aux =<< do- useTerPragma $ Defn defaultArgInfo aux typeDontCare [] [] [] 0 noCompiledRep Nothing emptyFunction+ useTerPragma $ defaultDefn defaultArgInfo aux typeDontCare emptyFunction -- Andreas, 2013-02-26 separate msgs to see which goes wrong reportSDoc "tc.with.top" 20 $- text " with arguments" <+> do escapeContext (size delta) $ addContext delta1 $ addContext delta2 $ prettyList (map prettyTCM vs)+ text " with arguments" <+> do escapeContext (size delta) $ addContext delta1 $ prettyList (map prettyTCM vs) reportSDoc "tc.with.top" 20 $ text " types" <+> do escapeContext (size delta) $ addContext delta1 $ prettyList (map prettyTCM as) reportSDoc "tc.with.top" 20 $@@ -585,7 +615,7 @@ , text "delta2 =" <+> addCtxTel delta1 (prettyTCM delta2) , text "t =" <+> prettyTCM t , text "as =" <+> addCtxTel delta1 (prettyTCM as)- , text "vs =" <+> do addCtxTel delta1 $ addCtxTel delta2 $ prettyTCM vs+ , text "vs =" <+> do addCtxTel delta1 $ prettyTCM vs , text "b =" <+> do addCtxTel delta1 $ addCtxTel delta2 $ prettyTCM b , text "qs =" <+> text (show qs) , text "perm' =" <+> text (show perm')@@ -596,56 +626,35 @@ -- Add the type of the auxiliary function to the signature - -- With display forms are closed- df <- makeClosed <$> withDisplayForm f aux delta1 delta2 (size as) qs perm' perm-- reportSLn "tc.with.top" 20 "created with display form"- -- Generate the type of the with function delta1 <- normalise delta1 -- Issue 1332: checkInternal is picky about argInfo -- but module application is sloppy. -- We normalise to get rid of Def's coming -- from module applications.- candidateType <- withFunctionType delta1 vs as delta2 b- reportSDoc "tc.with.type" 10 $ sep [ text "candidate type:", nest 2 $ prettyTCM candidateType ]- reportSDoc "tc.with.type" 50 $ sep [ text "candidate type:", nest 2 $ text $ show candidateType ]--{- OLD, going through abstract syntax+ (withFunType, n) <- withFunctionType delta1 vs as delta2 b+ reportSDoc "tc.with.type" 10 $ sep [ text "with-function type:", nest 2 $ prettyTCM withFunType ]+ reportSDoc "tc.with.type" 50 $ sep [ text "with-function type:", nest 2 $ text $ show withFunType ] - absAuxType <- withShowAllArguments- $ disableDisplayForms- $ dontReifyInteractionPoints- $ reify candidateType- reportSDoc "tc.with.type" 15 $- vcat [ text "type of with function:"- , nest 2 $ prettyTCM absAuxType- ]- reportSDoc "tc.with.type" 50 $- vcat [ text "type of with function:"- , nest 2 $ text $ show absAuxType- ]- -- The ranges in the generated type are completely bogus, so we kill them.- auxType <- setCurrentRange cs- (traceCall NoHighlighting $ -- To avoid flicker.- isType_ $ killRange absAuxType)- `catchError` \err -> case err of- TypeError s e -> put s >> enterClosure e (traceCall (CheckWithFunctionType absAuxType) . typeError)- _ -> throwError err--} -- Andreas, 2013-10-21 -- Check generated type directly in internal syntax.- absAuxType <- reify candidateType- let auxType = candidateType setCurrentRange cs (traceCall NoHighlighting $ -- To avoid flicker.- checkType auxType)+ checkType withFunType) `catchError` \err -> case err of TypeError s e -> do put s+ wt <- reify withFunType enterClosure e $ do- traceCall (CheckWithFunctionType absAuxType) . typeError+ traceCall (CheckWithFunctionType wt) . typeError err -> throwError err ++ -- With display forms are closed++ df <- makeClosed <$> withDisplayForm f aux delta1 delta2 n qs perm' perm++ reportSLn "tc.with.top" 20 "created with display form"+ case df of OpenThing _ (Display n ts dt) -> reportSDoc "tc.with.top" 20 $ text "Display" <+> fsep [ text (show n)@@ -653,34 +662,35 @@ , prettyTCM dt ] addConstant aux =<< do- useTerPragma $ Defn defaultArgInfo aux auxType [] [] [df] 0 noCompiledRep Nothing emptyFunction+ useTerPragma $ (defaultDefn defaultArgInfo aux withFunType emptyFunction)+ { defDisplay = [df] } -- solveSizeConstraints -- Andreas, 2012-10-16 does not seem necessary reportSDoc "tc.with.top" 10 $ sep [ text "added with function" <+> (prettyTCM aux) <+> text "of type"- , nest 2 $ prettyTCM auxType+ , nest 2 $ prettyTCM withFunType , nest 2 $ text "-|" <+> (prettyTCM =<< getContextTelescope) ] -- Construct the body for the with function cs <- return $ map (A.lhsToSpine) cs- cs <- buildWithFunction f aux t qs finalPerm (size delta1) (size as) cs+ cs <- buildWithFunction f aux t qs finalPerm (size delta1) n cs cs <- return $ map (A.spineToLhs) cs -- Check the with function- checkFunDef' auxType defaultArgInfo NotDelayed Nothing (Just f) info aux cs+ checkFunDef' withFunType defaultArgInfo NotDelayed Nothing (Just f) info aux cs where- info = Info.mkDefInfo (nameConcrete $ qnameName aux) defaultFixity' PublicAccess ConcreteDef (getRange cs)+ info = Info.mkDefInfo (nameConcrete $ qnameName aux) noFixity' PublicAccess ConcreteDef (getRange cs) -- | Type check a where clause. checkWhere :: Type -- ^ Type of rhs. -> [A.Declaration] -- ^ Where-declarations to check.- -> TCM a -- ^ Continutation.+ -> TCM a -- ^ Continuation. -> TCM a checkWhere trhs ds ret0 = do- -- Temporarily add trailing hidden arguments to check where-declarartions.+ -- Temporarily add trailing hidden arguments to check where-declarations. TelV htel _ <- telViewUpTo' (-1) (not . visible) trhs let -- Remove htel after checking ds.@@ -699,7 +709,9 @@ dtel' <- prettyTCM =<< lookupSection m reportSLn "tc.def.where" 10 $ "checking where section " ++ show dx ++ " " ++ show dtel reportSLn "tc.def.where" 10 $ " actual tele: " ++ show dtel'- withCurrentModule m $ checkDecls ds >> ret+ withCurrentModule m $ local (\ e -> e { envCheckingWhere = True }) $ do+ checkDecls ds+ ret _ -> __IMPOSSIBLE__ -- Add htel to check ds. addCtxTel htel $ loop ds@@ -714,5 +726,6 @@ A.LitP _ -> False A.AsP _ _ p -> containsAbsurdPattern p A.ConP _ _ ps -> any (containsAbsurdPattern . namedArg) ps+ A.RecP _ fs -> any (containsAbsurdPattern . (^. exprFieldA)) fs A.DefP _ _ _ -> False -- projection pattern A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- False
src/full/Agda/TypeChecking/Rules/Def.hs-boot view
@@ -8,6 +8,6 @@ checkFunDef :: Delayed -> DefInfo -> QName -> [Clause] -> TCM () -checkFunDef' :: I.Type -> I.ArgInfo -> Delayed -> Maybe ExtLamInfo -> Maybe QName -> DefInfo -> QName -> [Clause] -> TCM ()+checkFunDef' :: I.Type -> ArgInfo -> Delayed -> Maybe ExtLamInfo -> Maybe QName -> DefInfo -> QName -> [Clause] -> TCM () useTerPragma :: Definition -> TCM Definition
+ src/full/Agda/TypeChecking/Rules/Display.hs view
@@ -0,0 +1,108 @@++module Agda.TypeChecking.Rules.Display (checkDisplayPragma) where++import Control.Applicative+import Data.Maybe+import Data.List++import qualified Agda.Syntax.Abstract as A+import Agda.Syntax.Abstract.Views+import Agda.Syntax.Internal as I+import Agda.Syntax.Common++import Agda.TypeChecking.Monad+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Pretty++checkDisplayPragma :: QName -> [NamedArg A.Pattern] -> A.Expr -> TCM ()+checkDisplayPragma f ps e = inTopContext $ do+ pappToTerm f id ps $ \n args -> do+ let lhs = map unArg args+ v <- exprToTerm e+ let df = Display n lhs (DTerm v)+ reportSLn "tc.display.pragma" 20 $ "Adding display form for " ++ show f ++ "\n " ++ show df+ escapeContext n $ addDisplayForm f df++-- Compute a left-hand side for a display form. Inserts implicits, but no type+-- checking so does the wrong thing if implicitness is computed. Binds variables.+displayLHS :: Telescope -> [NamedArg A.Pattern] -> (Int -> [Term] -> TCM a) -> TCM a+displayLHS tel ps ret = patternsToTerms tel ps $ \n vs -> ret n (map unArg vs)++patternsToTerms :: Telescope -> [NamedArg A.Pattern] -> (Int -> Args -> TCM a) -> TCM a+patternsToTerms _ [] ret = ret 0 []+patternsToTerms EmptyTel (p : ps) ret =+ patternToTerm (namedArg p) $ \n v ->+ patternsToTerms EmptyTel ps $ \m vs -> ret (n + m) (inheritHiding p v : vs)+patternsToTerms (ExtendTel a tel) (p : ps) ret = do+ let isMatch = getHiding p == getHiding a &&+ (notHidden p || isNothing (nameOf (unArg p)) ||+ Just (absName tel) == (rangedThing <$> nameOf (unArg p)))+ case isMatch of+ True ->+ patternToTerm (namedArg p) $ \n v ->+ patternsToTerms (unAbs tel) ps $ \m vs -> ret (n + m) (inheritHiding p v : vs)+ False ->+ bindWild $ patternsToTerms (unAbs tel) (p : ps) $ \n vs -> ret (1 + n) (inheritHiding a (Var 0 []) : vs)++inheritHiding :: LensHiding a => a -> b -> Arg b+inheritHiding a b = setHiding (getHiding a) (defaultArg b)++pappToTerm :: QName -> (Args -> b) -> [NamedArg A.Pattern] -> (Int -> b -> TCM a) -> TCM a+pappToTerm x f ps ret = do+ def <- getConstInfo x+ TelV tel _ <- telView $ defType def+ let dropTel n = telFromList . drop n . telToList+ pars =+ case theDef def of+ Constructor { conPars = p } -> p+ Function { funProjection = Just Projection{projIndex = i} }+ | i > 0 -> i - 1+ _ -> 0++ patternsToTerms (dropTel pars tel) ps $ \n vs -> ret n (f vs)++patternToTerm :: A.Pattern -> (Nat -> Term -> TCM a) -> TCM a+patternToTerm p ret =+ case p of+ A.VarP x -> bindVar x $ ret 1 (Var 0 [])+ A.ConP _ (AmbQ [c]) ps -> pappToTerm c (Con (ConHead c Inductive [])) ps ret+ A.ConP _ (AmbQ cs) _ -> genericError $ "Ambiguous constructor: " ++ intercalate ", " (map show cs)+ A.DefP _ f ps -> pappToTerm f (Def f . map Apply) ps ret+ A.LitP l -> ret 0 (Lit l)+ A.WildP _ -> bindWild $ ret 1 (Var 0 [])+ _ -> do+ doc <- prettyA p+ typeError $ GenericError $ "Pattern not allowed in DISPLAY pragma:\n" ++ show doc++bindWild :: TCM a -> TCM a+bindWild ret = do+ x <- freshNoName_+ bindVar x ret++bindVar :: Name -> TCM a -> TCM a+bindVar x ret = do+ addCtx x (defaultDom typeDontCare) ret++exprToTerm :: A.Expr -> TCM Term+exprToTerm e =+ case unScope e of+ A.Var x -> fst <$> getVarInfo x+ A.Def f -> pure $ Def f []+ A.Con (AmbQ (c:_)) -> pure $ Con (ConHead c Inductive []) [] -- Don't care too much about ambiguity here+ A.Lit l -> pure $ Lit l+ A.App _ e arg -> apply <$> exprToTerm e <*> ((:[]) . inheritHiding arg <$> exprToTerm (namedArg arg))++ A.Proj f -> pure $ Def f [] -- only for printing so we don't have to worry too much here+ A.PatternSyn f -> pure $ Def f []+ A.Macro f -> pure $ Def f []++ A.WithApp{} -> notAllowed "with application"+ A.QuestionMark{} -> notAllowed "holes"+ A.Underscore{} -> notAllowed "metavariables"+ A.Lam{} -> notAllowed "lambdas"+ A.AbsurdLam{} -> notAllowed "lambdas"+ A.ExtendedLam{} -> notAllowed "lambdas"+ _ -> typeError $ GenericError $ "TODO: exprToTerm " ++ show e+ where+ notAllowed s = typeError $ GenericError $ "Not allowed in DISPLAY pragma right-hand side: " ++ s
src/full/Agda/TypeChecking/Rules/LHS.hs view
@@ -1,35 +1,45 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE TupleSections #-} {-# LANGUAGE TypeSynonymInstances #-} module Agda.TypeChecking.Rules.LHS where -import Prelude hiding (mapM)+import Prelude hiding (mapM, sequence) import Data.Maybe import Control.Applicative-import Control.Monad hiding (mapM)-import Control.Monad.State hiding (mapM)+import Control.Arrow (first, second, (***))+import Control.Monad hiding (mapM, forM, sequence)+import Control.Monad.State hiding (mapM, forM, sequence) import Control.Monad.Trans.Maybe +import Data.Function (on)+import Data.IntMap (IntMap)+import qualified Data.IntMap as IntMap+import Data.List (delete, sortBy, stripPrefix)+import Data.Monoid import Data.Traversable import Agda.Interaction.Options import Agda.Interaction.Options.Lenses -import Agda.Syntax.Internal as I hiding (Substitution)+import Agda.Syntax.Internal as I import Agda.Syntax.Internal.Pattern import Agda.Syntax.Abstract (IsProjP(..)) import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Abstract.Views (asView) import Agda.Syntax.Common as Common-import Agda.Syntax.Info+import Agda.Syntax.Info as A import Agda.Syntax.Position+import Agda.Syntax.Scope.Base (ScopeInfo, emptyScopeInfo) + import Agda.TypeChecking.Monad +import qualified Agda.TypeChecking.Monad.Benchmark as Bench import Agda.TypeChecking.Conversion import Agda.TypeChecking.Constraints import Agda.TypeChecking.Datatypes@@ -39,8 +49,8 @@ import Agda.TypeChecking.Pretty import Agda.TypeChecking.Records import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Substitute hiding (Substitution)-import qualified Agda.TypeChecking.Substitute as S (Substitution)+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Substitute.Pattern import Agda.TypeChecking.Telescope import {-# SOURCE #-} Agda.TypeChecking.Rules.Term (checkExpr)@@ -56,6 +66,7 @@ import Agda.Utils.Functor import Agda.Utils.List import Agda.Utils.ListT+import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Permutation import Agda.Utils.Size@@ -65,7 +76,7 @@ -- | Compute the set of flexible patterns in a list of patterns. The result is -- the deBruijn indices of the flexible patterns.-flexiblePatterns :: [A.NamedArg A.Pattern] -> TCM FlexibleVars+flexiblePatterns :: [NamedArg A.Pattern] -> TCM FlexibleVars flexiblePatterns nps = do forMaybeM (zip (downFrom $ length nps) nps) $ \ (i, Arg ai p) -> do runMaybeT $ (\ f -> FlexibleVar (getHiding ai) f i) <$> maybeFlexiblePattern p@@ -106,30 +117,46 @@ instance IsFlexiblePattern a => IsFlexiblePattern [a] where maybeFlexiblePattern ps = RecordFlex <$> mapM maybeFlexiblePattern ps -instance IsFlexiblePattern a => IsFlexiblePattern (Common.Arg c a) where+instance IsFlexiblePattern a => IsFlexiblePattern (Arg a) where maybeFlexiblePattern = maybeFlexiblePattern . unArg instance IsFlexiblePattern a => IsFlexiblePattern (Common.Named name a) where maybeFlexiblePattern = maybeFlexiblePattern . namedThing --- | Compute the dot pattern instantiations.-dotPatternInsts :: [A.NamedArg A.Pattern] -> Substitution -> [I.Dom Type] -> TCM [DotPatternInst]-dotPatternInsts ps s as = dpi (map namedArg ps) (reverse s) as+-- | Update the in patterns according to the given substitution, collecting+-- new dot pattern instantiations in the process.+updateInPatterns+ :: [Dom Type] -- ^ the types of the old pattern variables,+ -- relative to the new telescope+ -> [NamedArg A.Pattern] -- ^ old in patterns+ -> [Arg DeBruijnPattern] -- ^ patterns to be substituted, living in the+ -- new telescope+ -> TCM ([NamedArg A.Pattern] -- new in patterns+ ,[DotPatternInst]) -- new dot pattern instantiations+updateInPatterns as ps qs = do+ reportSDoc "tc.lhs.top" 20 $ text "updateInPatterns" <+> nest 2 (vcat+ [ text "as =" <+> prettyList (map prettyTCM as)+ , text "ps =" <+> prettyList (map prettyA ps)+ , text "qs =" <+> prettyList (map (text . show) qs)+ ])+ first (map snd . IntMap.toDescList) <$> updates as ps qs where- dpi (_ : _) [] _ = __IMPOSSIBLE__- dpi (_ : _) (Just _ : _) [] = __IMPOSSIBLE__- -- the substitution also contains entries for module parameters, so it can- -- be longer than the pattern- dpi [] _ _ = return []- dpi (_ : ps) (Nothing : s) as = dpi ps s as- dpi (p : ps) (Just u : s) (a : as) =- case p of- A.DotP _ e -> (DPI e u a :) <$> dpi ps s as- A.WildP _ -> dpi ps s as- -- record pattern+ updates :: [Dom Type] -> [NamedArg A.Pattern] -> [Arg DeBruijnPattern]+ -> TCM (IntMap (NamedArg A.Pattern), [DotPatternInst])+ updates as ps qs = mconcat <$> sequence (zipWith3 update as ps qs)++ update :: Dom Type -> NamedArg A.Pattern -> Arg DeBruijnPattern+ -> TCM (IntMap (NamedArg A.Pattern), [DotPatternInst])+ update a p q = case unArg q of+ -- Case: the unifier did not instantiate the variable+ VarP (i,_) -> return (IntMap.singleton i p, [])+ -- Case: the unifier did instantiate the variable+ DotP u -> case namedThing (unArg p) of+ A.DotP _ e -> return (IntMap.empty,[DPI (Just e) u a])+ A.WildP _ -> return (IntMap.empty,[DPI Nothing u a]) A.ConP _ (A.AmbQ [c]) qs -> do- Def r es <- ignoreSharing <$> reduce (unEl $ unDom a)- let Just vs = allApplyElims es+ Def r es <- ignoreSharing <$> reduce (unEl $ unDom a)+ let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es (ftel, us) <- etaExpandRecord r vs u qs <- insertImplicitPatterns ExpandLast qs ftel let instTel EmptyTel _ = []@@ -138,129 +165,61 @@ bs0 = instTel ftel (map unArg us) -- Andreas, 2012-09-19 propagate relevance info to dot patterns bs = map (mapRelevance (composeRelevance (getRelevance a))) bs0- dpi (map namedArg qs ++ ps) (map (Just . unArg) us ++ s) (bs ++ as)-- _ -> __IMPOSSIBLE__----- | In an internal pattern, replace some pattern variables--- by dot patterns, according to the given substitution.-instantiatePattern- :: Substitution- -- ^ Partial substitution for the pattern variables,- -- given in order of the clause telescope,- -- (not in the order of occurrence in the patterns).- -> Permutation- -- ^ Map from the pattern variables to the telescope variables.- -> [I.NamedArg Pattern]- -- ^ Input patterns.- -> [I.NamedArg Pattern]- -- ^ Output patterns, with some @VarP@ replaced by @DotP@- -- according to the @Substitution@.-instantiatePattern sub perm ps- | length sub /= length hps = error $ unlines- [ "instantiatePattern:"- , " sub = " ++ show sub- , " perm = " ++ show perm- , " ps = " ++ show ps- ]- | otherwise = foldr merge ps $ zipWith inst (reverse sub) hps- where- -- For each pattern variable get a copy of the patterns- -- focusing on this variable.- -- Order them in the dependency (telescope) order.- hps = permute perm $ allHoles ps- -- If we do not want to substitute a variable, we- -- throw away the corresponding one-hole pattern.- inst Nothing hps = Nothing- -- If we want to substitute, we replace the variable- -- by the dot pattern.- inst (Just t) hps = Just $ plugHole (DotP t) hps+ updates bs qs (map (DotP . unArg) us `withArgsFrom` teleArgNames ftel)+ A.VarP _ -> __IMPOSSIBLE__+ A.ConP _ _ _ -> __IMPOSSIBLE__+ A.RecP _ _ -> __IMPOSSIBLE__+ A.DefP _ _ _ -> __IMPOSSIBLE__+ A.AsP _ _ _ -> __IMPOSSIBLE__+ A.AbsurdP _ -> __IMPOSSIBLE__+ A.LitP _ -> __IMPOSSIBLE__+ A.PatternSynP _ _ _ -> __IMPOSSIBLE__+ -- Case: the unifier eta-expanded the variable+ ConP c cpi qs -> do+ Def r es <- ignoreSharing <$> reduce (unEl $ unDom a)+ def <- theDef <$> getConstInfo r+ let pars = fromMaybe __IMPOSSIBLE__ $ allApplyElims es+ fs = killRange $ recFields def+ tel = recTel def `apply` pars+ as = applyPatSubst (parallelS $ map (namedThing . unArg) qs) $ flattenTel tel+ -- If the user wrote a dot pattern but the unifier eta-expanded the+ -- corresponding variable, add the corresponding instantiation+ dpi :: [DotPatternInst]+ dpi = maybe [] (\e -> [DPI (Just e) (patternToTerm $ unArg q) a]) (isDotP (namedThing $ unArg p))+ second (dpi++) <$>+ updates as (projectInPat p fs) (map (fmap namedThing) qs)+ LitP _ -> __IMPOSSIBLE__+ ProjP f -> __IMPOSSIBLE__ - -- If we did not instantiate a variable, we can keep the original- -- patterns in this iteration.- merge Nothing ps = ps- -- Otherwise, we merge the changes in @qs@ into @ps@.- -- This means we walk simultaneously through @qs@ and @ps@- -- and expect them to be the same everywhere except that- -- a @q@ can be a @DotP@ and the corresponding @p@ a @VarP@.- -- In this case, we take the @DotP@.- -- Apparently, the other way round can also happen (why?).- merge (Just qs) ps = zipWith mergeA qs ps+ projectInPat :: NamedArg A.Pattern -> [Arg QName] -> [NamedArg A.Pattern]+ projectInPat p fs = case namedThing (unArg p) of+ A.VarP x -> map makeVarField fs+ A.ConP cpi _ nps -> nps+ A.WildP pi -> map (makeWildField pi) fs+ A.DotP pi e -> map (makeDotField pi) fs+ A.DefP _ _ _ -> __IMPOSSIBLE__+ A.AsP _ _ _ -> __IMPOSSIBLE__+ A.AbsurdP _ -> __IMPOSSIBLE__+ A.LitP _ -> __IMPOSSIBLE__+ A.PatternSynP _ _ _ -> __IMPOSSIBLE__+ A.RecP _ _ -> __IMPOSSIBLE__ where- mergeA a1 a2 = fmap (mergeP (namedArg a1) (namedArg a2) <$) a1-- mergeP (DotP s) (DotP t)- | s == t = DotP s- | otherwise = __IMPOSSIBLE__- -- interesting cases:- mergeP (DotP t) (VarP _) = DotP t- mergeP (VarP _) (DotP t) = DotP t- -- the rest is homomorphical- mergeP (DotP _) _ = __IMPOSSIBLE__- mergeP _ (DotP _) = __IMPOSSIBLE__- mergeP (ConP c1 i1 ps) (ConP c2 i2 qs)- | c1 == c2 = ConP (c1 `withRangeOf` c2) (mergeCPI i1 i2) $- zipWith mergeA ps qs- | otherwise = __IMPOSSIBLE__- mergeP (LitP l1) (LitP l2)- | l1 == l2 = LitP (l1 `withRangeOf` l2)- | otherwise = __IMPOSSIBLE__- mergeP (VarP x) (VarP y)- | x == y = VarP x- | otherwise = __IMPOSSIBLE__- mergeP (ConP _ _ _) (VarP _) = __IMPOSSIBLE__- mergeP (ConP _ _ _) (LitP _) = __IMPOSSIBLE__- mergeP (VarP _) (ConP _ _ _) = __IMPOSSIBLE__- mergeP (VarP _) (LitP _) = __IMPOSSIBLE__- mergeP (LitP _) (ConP _ _ _) = __IMPOSSIBLE__- mergeP (LitP _) (VarP _) = __IMPOSSIBLE__- mergeP (ProjP x) (ProjP y)- | x == y = ProjP x- | otherwise = __IMPOSSIBLE__- mergeP ProjP{} _ = __IMPOSSIBLE__- mergeP _ ProjP{} = __IMPOSSIBLE__-- mergeCPI (ConPatternInfo mr1 mt1) (ConPatternInfo mr2 mt2) =- ConPatternInfo (mplus mr1 mr2) (mplus mt1 mt2)----- | In an internal pattern, replace some pattern variables--- by dot patterns, according to the given substitution.-instantiatePattern'- :: Substitution- -- ^ Partial substitution for the pattern variables,- -- given in order of the clause telescope,- -- (not in the order of occurrence in the patterns).- -> Permutation- -- ^ Map from the pattern variables to the telescope variables.- -> [I.NamedArg Pattern]- -- ^ Input patterns.- -> [I.NamedArg Pattern]- -- ^ Output patterns, with some @VarP@ replaced by @DotP@- -- according to the @Substitution@.-instantiatePattern' sub perm ps = evalState (mapM goArg ps) 0- where- -- get a partial substitution from pattern variables to terms- sub' = inversePermute perm sub- -- get next pattern variable- next = do n <- get; put (n+1); return n- goArg = traverse goNamed- goNamed = traverse goPat- goPat p = case p of- VarP x -> replace p- DotP t -> replace p- ConP c mt ps -> ConP c mt <$> mapM goArg ps- LitP{} -> return p- ProjP{} -> return p- replace p = do- i <- next- let s = case sub' !!! i of- Nothing -> __IMPOSSIBLE__- Just s -> s- return $ fromMaybe p $ DotP <$> s+ makeVarField (Arg fi f) = Arg fi $ unnamed $ A.VarP $ qnameName f+ makeWildField pi (Arg fi f) = Arg fi $ unnamed $ A.WildP pi+ makeDotField pi (Arg fi f) = Arg fi $ unnamed $+ A.DotP pi $ A.Underscore underscoreInfo+ where+ underscoreInfo = A.MetaInfo+ { A.metaRange = getRange pi+ , A.metaScope = emptyScopeInfo+ , A.metaNumber = Nothing+ , A.metaNameSuggestion = show $ A.nameConcrete $ qnameName f+ } + isDotP :: A.Pattern -> Maybe A.Expr+ isDotP (A.DotP _ e) = Just e+ isDotP _ = Nothing -- | Check if a problem is solved. That is, if the patterns are all variables. isSolvedProblem :: Problem -> Bool@@ -269,12 +228,13 @@ where -- need further splitting: isSolved A.ConP{} = False- isSolved A.DotP{} = False isSolved A.LitP{} = False isSolved A.DefP{} = False -- projection pattern+ isSolved A.RecP{} = False -- record pattern -- solved: isSolved A.VarP{} = True isSolved A.WildP{} = True+ isSolved A.DotP{} = True isSolved A.AbsurdP{} = True -- impossible: isSolved A.AsP{} = __IMPOSSIBLE__ -- removed by asView@@ -301,9 +261,10 @@ noShadowing (A.WildP {}) t = return () noShadowing (A.AbsurdP {}) t = return () noShadowing (A.ConP {}) t = return () -- only happens for eta expanded record patterns+ noShadowing (A.RecP {}) t = return () -- record pattern noShadowing (A.DefP {}) t = return () -- projection pattern+ noShadowing (A.DotP {}) t = return () noShadowing (A.AsP {}) t = __IMPOSSIBLE__- noShadowing (A.DotP {}) t = __IMPOSSIBLE__ noShadowing (A.LitP {}) t = __IMPOSSIBLE__ noShadowing (A.PatternSynP {}) t = __IMPOSSIBLE__ noShadowing (A.VarP x) t = do@@ -342,11 +303,10 @@ Level {} -> __IMPOSSIBLE__ Con {} -> __IMPOSSIBLE__ DontCare{} -> __IMPOSSIBLE__- ExtLam{} -> __IMPOSSIBLE__ -- | Check that a dot pattern matches it's instantiation. checkDotPattern :: DotPatternInst -> TCM ()-checkDotPattern (DPI e v (Dom info a)) =+checkDotPattern (DPI (Just e) v (Dom info a)) = traceCall (CheckDotPattern e v) $ do reportSDoc "tc.lhs.dot" 15 $ sep [ text "checking dot pattern"@@ -356,9 +316,115 @@ ] applyRelevanceToContext (argInfoRelevance info) $ do u <- checkExpr e a+ reportSDoc "tc.lhs.dot" 30 $+ sep [ text "equalTerm"+ , nest 2 $ text $ show a+ , nest 2 $ text $ show u+ , nest 2 $ text $ show v+ ] -- Should be ok to do noConstraints here noConstraints $ equalTerm a u v+checkDotPattern (DPI Nothing _ _) = return () +-- | Checks whether the dot patterns left over after splitting can be covered+-- by shuffling around the dots from implicit positions. Returns the updated+-- user patterns (without dot patterns).+checkLeftoverDotPatterns+ :: [NamedArg A.Pattern] -- ^ Leftover patterns after splitting is completed+ -> [Int] -- ^ De Bruijn indices of leftover variable patterns+ -- computed by splitting+ -> [Dom Type] -- ^ Types of leftover patterns+ -> [DotPatternInst] -- ^ Instantiations computed by unifier+ -> TCM ()+checkLeftoverDotPatterns ps vs as dpi = do+ reportSDoc "tc.lhs.dot" 15 $ text "checking leftover dot patterns..."+ idv <- sortBy (compare `on` length . snd) . concat <$>+ traverse gatherImplicitDotVars dpi+ reportSDoc "tc.lhs.dot" 30 $ nest 2 $+ text "implicit dotted variables:" <+>+ prettyList (map (\(i,fs) -> prettyTCM $ Var i (map Proj fs)) idv)+ checkUserDots ps vs as idv+ reportSDoc "tc.lhs.dot" 15 $ text "all leftover dot patterns ok!"++ where+ checkUserDots :: [NamedArg A.Pattern] -> [Int] -> [Dom Type]+ -> [(Int,[QName])]+ -> TCM ()+ checkUserDots [] [] [] idv = return ()+ checkUserDots [] (_:_) _ idv = __IMPOSSIBLE__+ checkUserDots [] _ (_:_) idv = __IMPOSSIBLE__+ checkUserDots (_:_) [] _ idv = __IMPOSSIBLE__+ checkUserDots (_:_) _ [] idv = __IMPOSSIBLE__+ checkUserDots (p:ps) (v:vs) (a:as) idv = do+ idv' <- checkUserDot p v a idv+ checkUserDots ps vs as idv'++ checkUserDot :: NamedArg A.Pattern -> Int -> Dom Type+ -> [(Int,[QName])]+ -> TCM [(Int,[QName])]+ checkUserDot p v a idv = case namedArg p of+ A.DotP i e -> do+ reportSDoc "tc.lhs.dot" 30 $ nest 2 $+ text "checking user dot pattern: " <+> prettyA e+ caseMaybeM (undotImplicitVar (v,[],unDom a) idv)+ (traceCall (CheckPattern (namedArg p) EmptyTel (unDom a)) $+ typeError $ UninstantiatedDotPattern e)+ (\idv' -> do+ u <- checkExpr e (unDom a)+ reportSDoc "tc.lhs.dot" 30 $ nest 2 $+ text "checked expression: " <+> prettyTCM u+ noConstraints $ equalTerm (unDom a) u (var v)+ return idv')+ A.VarP _ -> return idv+ A.WildP _ -> return idv+ A.AbsurdP _ -> return idv+ A.ConP _ _ _ -> __IMPOSSIBLE__+ A.LitP _ -> __IMPOSSIBLE__+ A.DefP _ _ _ -> __IMPOSSIBLE__+ A.RecP _ _ -> __IMPOSSIBLE__+ A.AsP _ _ _ -> __IMPOSSIBLE__+ A.PatternSynP _ _ _ -> __IMPOSSIBLE__++ gatherImplicitDotVars :: DotPatternInst -> TCM [(Int,[QName])]+ gatherImplicitDotVars (DPI (Just _) _ _) = return [] -- Not implicit+ gatherImplicitDotVars (DPI Nothing u _) = gatherVars u+ where+ gatherVars :: Term -> TCM [(Int,[QName])]+ gatherVars u = case ignoreSharing u of+ Var i es -> return $ (i,) <$> maybeToList (allProjElims es)+ Con c us -> ifM (isEtaCon $ conName c)+ {-then-} (concat <$> traverse (gatherVars . unArg) us)+ {-else-} (return [])+ _ -> return []++ lookupImplicitDotVar :: (Int,[QName]) -> [(Int,[QName])] -> Maybe [QName]+ lookupImplicitDotVar (i,fs) [] = Nothing+ lookupImplicitDotVar (i,fs) ((j,gs):js)+ | i == j , Just hs <- stripPrefix fs gs = Just hs+ | otherwise = lookupImplicitDotVar (i,fs) js++ undotImplicitVar :: (Int,[QName],Type) -> [(Int,[QName])]+ -> TCM (Maybe [(Int,[QName])])+ undotImplicitVar (i,fs,a) idv = case lookupImplicitDotVar (i,fs) idv of+ Nothing -> return Nothing+ Just [] -> return $ Just $ delete (i,fs) idv+ Just rs -> caseMaybeM (isEtaRecordType a) (return Nothing) $ \(d,pars) -> do+ gs <- recFields . theDef <$> getConstInfo d+ let u = Var i (map Proj fs)+ is <- forM gs $ \(Arg _ g) -> do+ (_,b) <- fromMaybe __IMPOSSIBLE__ <$> projectTyped u a g+ return (i,fs++[g],b)+ undotImplicitVars is idv++ undotImplicitVars :: [(Int,[QName],Type)] -> [(Int,[QName])]+ -> TCM (Maybe [(Int,[QName])])+ undotImplicitVars [] idv = return $ Just idv+ undotImplicitVars (i:is) idv =+ caseMaybeM (undotImplicitVar i idv)+ (return Nothing)+ (\idv' -> undotImplicitVars is idv')++ -- | Bind the variables in a left hand side and check that 'Hiding' of -- the patterns matches the hiding info in the type. --@@ -367,7 +433,7 @@ -- telescope should have the same size as the pattern list. -- There could also be 'A.ConP's resulting from eta expanded implicit record -- patterns.-bindLHSVars :: [A.NamedArg A.Pattern] -> Telescope -> TCM a -> TCM a+bindLHSVars :: [NamedArg A.Pattern] -> Telescope -> TCM a -> TCM a bindLHSVars [] tel@ExtendTel{} _ = do reportSDoc "impossible" 10 $ text "bindLHSVars: no patterns left, but tel =" <+> prettyTCM tel@@ -382,24 +448,16 @@ -- @bindDummy underscore@ does not fix issue 819, but -- introduces unwanted underscores in error messages -- (Andreas, 2015-05-28)+ A.DotP _ _ -> bindDummy (absName tel) A.AbsurdP pi -> do -- Andreas, 2012-03-15: allow postponement of emptyness check isEmptyType (getRange pi) $ unDom a -- OLD CODE: isReallyEmptyType $ unArg a bindDummy (absName tel)- A.ConP _ (A.AmbQ [c]) qs -> do -- eta expanded record pattern- Def r es <- reduce (unEl $ unDom a)- let Just vs = allApplyElims es- ftel <- (`apply` vs) <$> getRecordFieldTypes r- con <- getConHead c- let n = size ftel- eta = Con con [ var i <$ (namedThing <$> setArgColors [] q) | (q, i) <- zip qs [n - 1, n - 2..0] ]- -- ^ TODO guilhem- bindLHSVars (qs ++ ps) (ftel `abstract` absApp (raise (size ftel) tel) eta) ret A.ConP{} -> __IMPOSSIBLE__+ A.RecP{} -> __IMPOSSIBLE__ A.DefP{} -> __IMPOSSIBLE__ A.AsP{} -> __IMPOSSIBLE__- A.DotP{} -> __IMPOSSIBLE__ A.LitP{} -> __IMPOSSIBLE__ A.PatternSynP{} -> __IMPOSSIBLE__ where@@ -422,9 +480,9 @@ { lhsVarTele :: Telescope -- ^ Δ : The types of the pattern variables, in internal dependency order. -- Corresponds to 'clauseTel'.- , lhsPatterns :: [I.NamedArg Pattern]+ , lhsPatterns :: [NamedArg Pattern] -- ^ The patterns in internal syntax.- , lhsBodyType :: I.Arg Type+ , lhsBodyType :: Arg Type -- ^ The type of the body. Is @bσ@ if @Γ@ is defined. -- 'Irrelevant' to indicate the rhs must be checked in irrelevant mode. , lhsPermutation :: Permutation@@ -450,37 +508,36 @@ -- ^ Trace, e.g. @CheckPatternShadowing clause@ -> Maybe QName -- ^ The name of the definition we are checking.- -> [A.NamedArg A.Pattern]+ -> [NamedArg A.Pattern] -- ^ The patterns. -> Type -- ^ The expected type @a = Γ → b@. -> (LHSResult -> TCM a) -- ^ Continuation. -> TCM a-checkLeftHandSide c f ps a ret = do+checkLeftHandSide c f ps a ret = Bench.billTo [Bench.Typing, Bench.CheckLHS] $ do problem0 <- problemFromPats ps a -- Andreas, 2013-03-15 deactivating the following test allows -- flexible arity -- unless (noProblemRest problem) $ typeError $ TooManyArgumentsInLHS a -- doing the splits:- LHSState problem@(Problem ps (perm, qs) delta rest) sigma dpi asb+ LHSState problem@(Problem ps qs delta rest) sigma dpi asb <- checkLHS f $ LHSState problem0 idS [] [] unless (null $ restPats rest) $ typeError $ TooManyArgumentsInLHS a - noShadowingOfConstructors c problem-- noPatternMatchingOnCodata qs+ addCtxTel delta $ do+ noShadowingOfConstructors c problem+ noPatternMatchingOnCodata qs reportSDoc "tc.lhs.top" 10 $ vcat [ text "checked lhs:" , nest 2 $ vcat [ text "ps = " <+> fsep (map prettyA ps)- , text "perm = " <+> text (show perm) , text "delta = " <+> prettyTCM delta- , text "dpi = " <+> brackets (fsep $ punctuate comma $ map prettyTCM dpi)- , text "asb = " <+> brackets (fsep $ punctuate comma $ map prettyTCM asb)+ , text "dpi = " <+> addCtxTel delta (brackets $ fsep $ punctuate comma $ map prettyTCM dpi)+ , text "asb = " <+> addCtxTel delta (brackets $ fsep $ punctuate comma $ map prettyTCM asb) , text "qs = " <+> text (show qs) ] ]@@ -488,12 +545,18 @@ let b' = restType rest bindLHSVars (filter (isNothing . isProjP) ps) delta $ bindAsPatterns asb $ do reportSDoc "tc.lhs.top" 10 $ text "bound pattern variables"+ reportSDoc "tc.lhs.top" 60 $ nest 2 $ text "context = " <+> ((text . show) =<< getContext) reportSDoc "tc.lhs.top" 10 $ nest 2 $ text "type = " <+> prettyTCM b'+ reportSDoc "tc.lhs.top" 60 $ nest 2 $ text "type = " <+> text (show b') -- Check dot patterns mapM_ checkDotPattern dpi+ checkLeftoverDotPatterns ps (downFrom $ size delta) (flattenTel delta) dpi - lhsResult <- return $ LHSResult delta qs b' perm+ let qs' = unnumberPatVars qs+ perm = dbPatPerm qs+ lhsResult = LHSResult delta qs' b' perm+ reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "perm = " <+> text (show perm) applyRelevanceToContext (getRelevance b') $ ret lhsResult -- | The loop (tail-recursive): split at a variable in the problem until problem is solved@@ -523,12 +586,12 @@ trySplit (SplitRest projPat projType) _ = do -- Compute the new problem- let Problem ps1 (iperm, ip) delta (ProblemRest (p:ps2) b) = problem+ let Problem ps1 ip delta (ProblemRest (p:ps2) b) = problem -- ps' = ps1 ++ [p] ps' = ps1 -- drop the projection pattern (already splitted) rest = ProblemRest ps2 (projPat $> projType) ip' = ip ++ [fmap (Named Nothing . ProjP) projPat]- problem' = Problem ps' (iperm, ip') delta rest+ problem' = Problem ps' ip' delta rest -- Jump the trampolin st' <- updateProblemRest (LHSState problem' sigma dpi asb) -- If the field is irrelevant, we need to continue in irr. cxt.@@ -538,31 +601,27 @@ -- Split on literal pattern (does not fail as there is no call to unifier) - trySplit (Split p0 xs (Arg _ (LitFocus lit iph hix a)) p1) _ = do-- -- plug the hole with a lit pattern- let ip = plugHole (LitP lit) iph- iperm = expandP hix 0 $ fst (problemOutPat problem)+ trySplit (Split p0 xs (Arg _ (LitFocus lit ip a)) p1) _ = do -- substitute the literal in p1 and sigma and dpi and asb let delta1 = problemTel p0 delta2 = absApp (fmap problemTel p1) (Lit lit)- rho = singletonS (size delta2) (Lit lit)+ rho = singletonS (size delta2) (LitP lit) -- Andreas, 2015-06-13 Literals are closed, so need to raise them! -- rho = liftS (size delta2) $ singletonS 0 (Lit lit) -- rho = [ var i | i <- [0..size delta2 - 1] ] -- ++ [ raise (size delta2) $ Lit lit ] -- ++ [ var i | i <- [size delta2 ..] ] sigma' = applySubst rho sigma- dpi' = applySubst rho dpi- asb0 = applySubst rho asb+ dpi' = applyPatSubst rho dpi+ asb0 = applyPatSubst rho asb ip' = applySubst rho ip- rest' = applySubst rho (problemRest problem)+ rest' = applyPatSubst rho (problemRest problem) -- Compute the new problem let ps' = problemInPat p0 ++ problemInPat (absBody p1) delta' = abstract delta1 delta2- problem' = Problem ps' (iperm, ip') delta' rest'+ problem' = Problem ps' ip' delta' rest' asb' = raise (size delta2) (map (\x -> AsB x (Lit lit) a) xs) ++ asb0 st' <- updateProblemRest (LHSState problem' sigma' dpi' asb') checkLHS f st'@@ -598,8 +657,7 @@ , focusPatOrigin= porigin , focusConArgs = qs , focusRange = r- , focusOutPat = iph- , focusHoleIx = hix+ , focusOutPat = ip , focusDatatype = d , focusParams = vs , focusIndices = ws@@ -611,6 +669,7 @@ (El Prop $ Def d $ map Apply $ vs ++ ws)) $ do let delta1 = problemTel p0+ delta2 = problemTel $ absBody p1 let typeOfSplitVar = Arg info a reportSDoc "tc.lhs.split" 10 $ sep@@ -623,9 +682,9 @@ [ text "split problem" , nest 2 $ vcat [ text "delta1 = " <+> prettyTCM delta1- , text "typeOfSplitVar =" <+> prettyTCM typeOfSplitVar- , text "focusOutPat =" <+> (text . show) iph- , text "delta2 = " <+> prettyTCM (problemTel $ absBody p1)+ , text "typeOfSplitVar =" <+> addCtxTel delta1 (prettyTCM typeOfSplitVar)+ , text "focusOutPat =" <+> (text . show) ip+ , text "delta2 = " <+> addCtxTel delta1 (addContext ("x",domFromArg typeOfSplitVar) (prettyTCM delta2)) ] ] @@ -661,7 +720,7 @@ -- Insert implicit patterns qs' <- insertImplicitPatterns ExpandLast qs gamma' - unless (size qs' == size gamma') $+ unless ((size qs' :: Int) == size gamma') $ typeError $ WrongNumberOfConstructorArguments (conName c) (size gamma') (size qs') let gamma = useNamesFromPattern qs' gamma'@@ -679,173 +738,159 @@ sep [ text "preparing to unify" , nest 2 $ vcat [ text "c =" <+> prettyTCM c <+> text ":" <+> prettyTCM a- , text "d =" <+> prettyTCM d <+> text ":" <+> prettyTCM da+ , text "d =" <+> prettyTCM (Def d (map Apply $ vs++ws)) <+> text ":" <+> prettyTCM da , text "gamma =" <+> prettyTCM gamma , text "gamma' =" <+> prettyTCM gamma' , text "vs =" <+> brackets (fsep $ punctuate comma $ map prettyTCM vs)- , text "us' =" <+> brackets (fsep $ punctuate comma $ map prettyTCM us')+ , text "us' =" <+> addCtxTel gamma (brackets (fsep $ punctuate comma $ map prettyTCM us')) , text "ws =" <+> brackets (fsep $ punctuate comma $ map prettyTCM ws) ] ] -- Unify constructor target and given type (in Δ₁Γ)- res <- addCtxTel (delta1 `abstract` gamma) $- unifyIndices flex (raise (size gamma) da) us' (raise (size gamma) ws)- whenUnifies res $ \ sub0 -> do+ -- Given: Δ₁ ⊢ D vs : Φ → Setᵢ+ -- Δ₁ ⊢ c : Γ → D vs' us'+ -- Δ₁ ⊢ ws : Φ+ -- Δ₁Γ ⊢ ws' : Φ+ -- (where vs' = raise Γ vs and ws' = raise Γ ws)+ -- unification of us' and ws' in context Δ₁Γ gives us a telescope Δ₁'+ -- and a substitution ρ₀ such that+ -- Δ₁' ⊢ ρ₀ : Δ₁Γ+ -- Δ₁' ⊢ (us')ρ₀ ≡ (ws')ρ₀ : Φρ₀+ -- We can split ρ₀ into two parts ρ₁ and ρ₂, giving+ -- Δ₁' ⊢ ρ₁ : Δ₁+ -- Δ₁' ⊢ ρ₂ : Γρ₁+ -- Application of the constructor c gives+ -- Δ₁' ⊢ c ρ₂ : (D vs' us')(ρ₁;ρ₂)+ -- We have+ -- us'(ρ₁;ρ₂)+ -- ≡ us'ρ₀ (since ρ₀=ρ₁;ρ₂)+ -- ≡ ws'ρ₀ (by unification)+ -- ≡ ws ρ₁ (since ws doesn't actually depend on Γ)+ -- so Δ₁' ⊢ c ρ₂ : D (vs)ρ₁ (ws)ρ₁+ -- Putting this together with ρ₁ gives ρ₃ = ρ₁;c ρ₂+ -- Δ₁' ⊢ ρ₁;c ρ₂ : Δ₁(x : D vs ws)+ -- and lifting over Δ₂ gives the final substitution ρ = ρ₃;Δ₂+ -- from Δ' = Δ₁';Δ₂ρ₃+ -- Δ' ⊢ ρ : Δ₁(x : D vs ws)Δ₂ + res <- unifyIndices+ (delta1 `abstract` gamma)+ flex+ (raise (size gamma) da)+ us'+ (raise (size gamma) ws)+ whenUnifies res $ \ (delta1',rho0) -> do++ reportSDoc "tc.lhs.top" 15 $ text "unification successful"+ reportSDoc "tc.lhs.top" 20 $ nest 2 $ vcat+ [ text "delta1' =" <+> prettyTCM delta1'+ , text "rho0 =" <+> addCtxTel delta1' (prettyTCM rho0)+ ]+ -- Andreas 2014-11-25 clear 'Forced' and 'Unused' -- Andreas 2015-01-19 ... only after unification- gamma <- return $ mapRelevance ignoreForced <$> gamma+ delta1' <- return $ mapRelevance ignoreForced <$> delta1' - -- We should substitute c ys for x in Δ₂ and sigma- let ys = teleArgs gamma- delta2 = absApp (raise (size gamma) $ fmap problemTel p1) (Con c ys)- rho0 = liftS (size delta2) $ consS (Con c ys) $ raiseS (size gamma)- -- rho0 = [ var i | i <- [0..size delta2 - 1] ]- -- ++ [ raise (size delta2) $ Con c ys ]- -- ++ [ var i | i <- [size delta2 + size gamma ..] ]- sigma0 = applySubst rho0 sigma- dpi0 = applySubst rho0 dpi- asb0 = applySubst rho0 asb- rest0 = applySubst rho0 (problemRest problem)+ -- compute in patterns for delta1'+ let newPats = applySubst rho0 $ teleArgs $ delta1 `abstract` gamma+ -- oldTypes are the types of the old pattern variables, but relative+ -- to the *new* telescope delta1'. These are needed to compute the+ -- correct types of new dot pattern instantiations.+ oldTypes = applyPatSubst rho0 $ flattenTel $ delta1 `abstract` gamma+ (p0',newDpi) <- addCtxTel delta1' $ updateInPatterns+ oldTypes+ (problemInPat p0 ++ qs')+ newPats - reportSDoc "tc.lhs.top" 15 $ addCtxTel (delta1 `abstract` gamma) $ nest 2 $ vcat- [ text "delta2 =" <+> prettyTCM delta2- , text "sub0 =" <+> brackets (fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) sub0)+ reportSDoc "tc.lhs.top" 20 $ addCtxTel delta1' $ nest 2 $ vcat+ [ text "p0' =" <+> text (show p0')+ , text "newDpi =" <+> brackets (fsep $ punctuate comma $ map prettyTCM newDpi) ]- reportSDoc "tc.lhs.top" 15 $ addCtxTel (delta1 `abstract` gamma `abstract` delta2) $- nest 2 $ vcat- [ text "dpi0 = " <+> brackets (fsep $ punctuate comma $ map prettyTCM dpi0)- , text "asb0 = " <+> brackets (fsep $ punctuate comma $ map prettyTCM asb0)- ] + -- split substitution into part for Δ₁ and part for Γ+ let (rho1,rho2) = splitS (size gamma) rho0++ reportSDoc "tc.lhs.top" 20 $ addCtxTel delta1' $ nest 2 $ vcat+ [ text "rho1 =" <+> prettyTCM rho1+ , text "rho2 =" <+> prettyTCM rho2+ ]+ -- Andreas, 2010-09-09, save the type.- -- It is relative to delta1, but it should be relative to- -- all variables which will be bound by patterns.- -- Thus, it has to be raised by 1 (the "hole" variable)- -- plus the length of delta2 (the variables coming after the hole).- let storedPatternType = raise (1 + size delta2) typeOfSplitVar+ -- It is relative to Δ₁, but it should be relative to Δ₁'+ let storedPatternType = applyPatSubst rho1 typeOfSplitVar -- Also remember if we are a record pattern and from an implicit pattern. isRec <- isRecord d let cpi = ConPatternInfo (isRec $> porigin) (Just storedPatternType) - -- Plug the hole in the out pattern with c ys- let ysp = map (argFromDom . fmap (namedVarP . fst)) $ telToList gamma- ip = plugHole (ConP c cpi ysp) iph- ip0 = applySubst rho0 ip-- -- Δ₁Γ ⊢ sub0, we need something in Δ₁ΓΔ₂- -- Also needs to be padded with Nothing's to have the right length.- let pad n xs x = xs ++ replicate (max 0 $ n - size xs) x- newTel = problemTel p0 `abstract` (gamma `abstract` delta2)- sub = replicate (size delta2) Nothing ++- pad (size delta1 + size gamma) (raise (size delta2) sub0) Nothing+ -- compute final context and permutation+ let crho2 = ConP c cpi $ applySubst rho2 $ teleNamedArgs gamma+ rho3 = consS crho2 rho1+ delta2' = applyPatSubst rho3 delta2+ delta' = delta1' `abstract` delta2'+ rho = liftS (size delta2) rho3 - reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat- [ text "newTel =" <+> prettyTCM newTel- , addCtxTel newTel $ text "sub =" <+> brackets (fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) sub)- , text "ip =" <+> do prettyList $ map (prettyTCM . namedArg) ip- , text "ip0 =" <+> do prettyList $ map (prettyTCM . namedArg) ip0- ]- reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat- [ text "rho0 =" <+> text (show rho0)+ reportSDoc "tc.lhs.top" 20 $ addCtxTel delta1' $ nest 2 $ vcat+ [ text "crho2 =" <+> prettyTCM crho2+ , text "rho3 =" <+> prettyTCM rho3+ , text "delta2' =" <+> prettyTCM delta2' ] - -- Instantiate the new telescope with the given substitution- (delta', perm, rho, instTypes) <- instantiateTel sub newTel--- reportSDoc "tc.lhs.inst" 12 $- vcat [ sep [ text "instantiateTel"- , nest 4 $ brackets $ fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) sub- , nest 4 $ prettyTCM newTel- ]- , nest 2 $ text "delta' =" <+> prettyTCM delta'- , nest 2 $ text "perm =" <+> text (show perm)- , nest 2 $ text "itypes =" <+> fsep (punctuate comma $ map prettyTCM instTypes)- ]-- {- -- Andreas, 2010-09-09- -- temporary error message to find non-id perms- let sorted (Perm _ xs) = xs == List.sort xs- unless (sorted (perm)) $ typeError $ GenericError $ "detected proper permutation " ++ show perm- -}- -- Compute the new dot pattern instantiations- let ps0' = problemInPat p0 ++ qs' ++ problemInPat (absBody p1)-- reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat- [ text "subst rho sub =" <+> brackets (fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) (applySubst rho sub))- , text "ps0' =" <+> brackets (fsep $ punctuate comma $ map prettyA ps0')+ reportSDoc "tc.lhs.top" 70 $ addCtxTel delta1' $ nest 2 $ vcat+ [ text "crho2 =" <+> text (show crho2)+ , text "rho3 =" <+> text (show rho3)+ , text "delta2' =" <+> text (show delta2') ] - newDpi <- dotPatternInsts ps0' (applySubst rho sub) instTypes-- -- The final dpis and asbs are the new ones plus the old ones substituted by ρ- let dpi' = applySubst rho dpi0 ++ newDpi- asb' = applySubst rho $ asb0 ++ raise (size delta2) (map (\x -> AsB x (Con c ys) ca) xs)- reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat- [ text "dpi' = " <+> brackets (fsep $ punctuate comma $ map prettyTCM dpi')- , text "asb' = " <+> brackets (fsep $ punctuate comma $ map prettyTCM asb')+ [ text "delta' =" <+> prettyTCM delta'+ , text "rho =" <+> addCtxTel delta' (prettyTCM rho) ] - -- Apply the substitution to the type- let sigma' = applySubst rho sigma0- rest' = applySubst rho rest0-- reportSDoc "tc.lhs.inst" 15 $- nest 2 $ text "ps0 = " <+> brackets (fsep $ punctuate comma $ map prettyA ps0')+ -- compute new in patterns+ let ps' = p0' ++ problemInPat (absBody p1) - -- Permute the in patterns- let ps' = permute perm ps0'+ reportSDoc "tc.lhs.top" 15 $ addCtxTel delta' $+ nest 2 $ vcat+ [ text "ps' =" <+> brackets (fsep $ punctuate comma $ map prettyA ps')+ ] - -- Compute the new permutation of the out patterns. This is the composition of- -- the new permutation with the expansion of the old permutation to- -- reflect the split.- let perm' = expandP hix (size gamma) $ fst (problemOutPat problem)- iperm' = perm `composeP` perm'+ -- The final dpis and asbs are the new ones plus the old ones substituted by ρ+ let dpi' = applyPatSubst rho dpi ++ raise (size delta2') newDpi+ asb' = applyPatSubst rho asb ++ raise (size delta2') (map (\x -> AsB x (patternToTerm crho2) ca) xs) - -- Instantiate the out patterns- let ip' = instantiatePattern sub perm' ip0- newip = applySubst rho ip'+ reportSDoc "tc.lhs.top" 15 $ addCtxTel delta' $+ nest 2 $ vcat+ [ text "dpi' =" <+> brackets (fsep $ punctuate comma $ map prettyTCM dpi')+ , text "asb' =" <+> brackets (fsep $ punctuate comma $ map prettyTCM asb')+ ] - -- Construct the new problem- let problem' = Problem ps' (iperm', newip) delta' rest'+ -- Apply the substitution+ let sigma' = applySubst rho sigma+ ip' = applySubst rho ip+ rest' = applyPatSubst rho (problemRest problem) - reportSDoc "tc.lhs.top" 12 $ sep- [ text "new problem"- , nest 2 $ vcat- [ text "ps' = " <+> fsep (map prettyA ps')- , text "delta' = " <+> prettyTCM delta'+ reportSDoc "tc.lhs.top" 15 $ addCtxTel delta' $+ nest 2 $ vcat+ [ text "sigma' =" <+> prettyTCM sigma'+ , text "ip' =" <+> text (show ip) ]- ] - reportSDoc "tc.lhs.top" 14 $ nest 2 $ vcat- [ text "perm' =" <+> text (show perm')- , text "iperm' =" <+> text (show iperm')- ]- reportSDoc "tc.lhs.top" 14 $ nest 2 $ vcat- [ text "ip' =" <+> prettyList (map (prettyTCM . namedArg) ip')- , text "newip =" <+> prettyList (map (prettyTCM . namedArg) newip)- ]- reportSDoc "tc.lhs.top" 60 $ nest 2 $ vcat- [ text "ip' =" <+> text (show ip')- , text "newip =" <+> text (show newip)- ]+ -- Construct the new problem+ let problem' = Problem ps' ip' delta' rest' -- if rest type reduces, -- extend the split problem by previously not considered patterns- st'@(LHSState problem'@(Problem ps' (iperm', ip') delta' rest')+ st'@(LHSState problem'@(Problem ps' ip' delta' rest') sigma' dpi' asb') <- updateProblemRest $ LHSState problem' sigma' dpi' asb' reportSDoc "tc.lhs.top" 12 $ sep [ text "new problem from rest" , nest 2 $ vcat- [ text "ps' = " <+> fsep (map prettyA ps')- , text "delta' = " <+> prettyTCM delta'- , text "ip' = " <+> prettyList (map (prettyTCM . namedArg) ip')- , text "iperm' = " <+> text (show iperm')+ [ text "ps' =" <+> fsep (map prettyA ps')+ , text "delta' =" <+> prettyTCM delta'+ , text "ip' =" <+> text (show ip') ] ] return $ Unifies st'@@ -853,7 +898,7 @@ -- | Ensures that we are not performing pattern matching on codata. -noPatternMatchingOnCodata :: [I.NamedArg Pattern] -> TCM ()+noPatternMatchingOnCodata :: [NamedArg DeBruijnPattern] -> TCM () noPatternMatchingOnCodata = mapM_ (check . namedArg) where check (VarP {}) = return ()
src/full/Agda/TypeChecking/Rules/LHS/Implicit.hs view
@@ -30,7 +30,6 @@ import Agda.Utils.Functor import Agda.Utils.Maybe import Agda.Utils.Monad-import Agda.Utils.Null #include "undefined.h" import Agda.Utils.Impossible@@ -51,14 +50,14 @@ return $ Problem ps' qs tel pr -- | Eta-expand implicit pattern if of record type.-expandImplicitPattern :: Type -> A.NamedArg A.Pattern -> TCM (A.NamedArg A.Pattern)+expandImplicitPattern :: Type -> NamedArg A.Pattern -> TCM (NamedArg A.Pattern) expandImplicitPattern a p = maybe (return p) return =<< expandImplicitPattern' a p -- | Try to eta-expand implicit pattern. -- Returns 'Nothing' unless dealing with a record type that has eta-expansion -- and a constructor @c@. In this case, it returns 'Just' @c _ _ ... _@ -- (record constructor applied to as many implicit patterns as there are fields).-expandImplicitPattern' :: Type -> A.NamedArg A.Pattern -> TCM (Maybe (A.NamedArg A.Pattern))+expandImplicitPattern' :: Type -> NamedArg A.Pattern -> TCM (Maybe (NamedArg A.Pattern)) expandImplicitPattern' a p | A.WildP{} <- namedArg p, getHiding p /= Instance = do -- Eta expand implicit patterns of record type (issue 473),@@ -68,10 +67,13 @@ -- Andreas, 2012-06-10: only expand guarded records, -- otherwise we might run into an infinite loop def <- getRecordDef d- -- Andreas, 2013-03-21: only expand records that have a constructor:- if not (recNamedCon def) then return Nothing else do+ -- Andreas, 2015-07-20 Since we have record patterns now, we can expand+ -- even records that do not have a constructor.+ -- -- Andreas, 2013-03-21: only expand records that have a constructor:+ -- if not (recNamedCon def) then return Nothing else do+ do -- generate one implicit pattern for each field- qs <- forM (recFields def) $ \ f -> flip Arg implicitP <$> reify (argInfo f)+ let qs = for (recFields def) $ \ f -> Arg (argInfo f) implicitP -- generate the pattern (c _ _ ... _) let q = A.ConP (ConPatInfo ConPImplicit patNoRange) (A.AmbQ [recCon def]) qs -- equip it with the name/arginfo of the original implicit pattern@@ -84,32 +86,32 @@ -- | Insert implicit patterns in a list of patterns. -- Even if 'DontExpandLast', trailing SIZELT patterns are inserted.-insertImplicitPatterns :: ExpandHidden -> [A.NamedArg A.Pattern] ->- Telescope -> TCM [A.NamedArg A.Pattern]+insertImplicitPatterns :: ExpandHidden -> [NamedArg A.Pattern] ->+ Telescope -> TCM [NamedArg A.Pattern] insertImplicitPatterns exh ps tel = insertImplicitPatternsT exh ps (telePi tel typeDontCare) -- | Insert trailing SizeLt patterns, if any.-insertImplicitSizeLtPatterns :: Type -> TCM [A.NamedArg A.Pattern]+insertImplicitSizeLtPatterns :: Type -> TCM [NamedArg A.Pattern] insertImplicitSizeLtPatterns t = do -- Testing for SizeLt. In case of blocked type, we return no. -- We assume that on the LHS, we know the type. (TODO: Sufficient?) isSize <- isSizeTypeTest let isBounded BoundedNo = False isBounded BoundedLt{} = True- isSizeLt t = maybe False isBounded . isSize <$> reduce t+ isSizeLt t = maybe False isBounded . isSize . unEl <$> reduce t -- Search for the last SizeLt type among the hidden arguments. TelV tel _ <- telView t let ts = reverse $ takeWhile (not . visible) $ telToList tel keep <- reverse <$> dropWhileM (not <.> isSizeLt . snd . unDom) ts -- Insert implicit patterns upto (including) the last SizeLt type.- forM keep $ \ (Dom ai _) -> flip Arg implicitP <$> reify ai+ return [ Arg ai implicitP | Dom ai _ <- keep ] -- | Insert implicit patterns in a list of patterns. -- Even if 'DontExpandLast', trailing SIZELT patterns are inserted.-insertImplicitPatternsT :: ExpandHidden -> [A.NamedArg A.Pattern] -> Type ->- TCM [A.NamedArg A.Pattern]+insertImplicitPatternsT :: ExpandHidden -> [NamedArg A.Pattern] -> Type ->+ TCM [NamedArg A.Pattern] insertImplicitPatternsT DontExpandLast [] a = insertImplicitSizeLtPatterns a insertImplicitPatternsT exh ps a = do TelV tel b <- telViewUpTo' (-1) (not . visible) a@@ -118,7 +120,7 @@ , nest 2 $ text "ps = " <+> do brackets $ fsep $ punctuate comma $ map prettyA ps , nest 2 $ text "tel = " <+> prettyTCM tel- , nest 2 $ text "b = " <+> prettyTCM b+ , nest 2 $ text "b = " <+> addCtxTel tel (prettyTCM b) ] case ps of [] -> insImp dummy tel@@ -133,7 +135,6 @@ a <- reduce a case ignoreSharing $ unEl a of Pi arg b -> do- p <- expandImplicitPattern (unDom arg) p (p :) <$> insertImplicitPatternsT exh ps (absBody b) _ -> return (p : ps) hs -> insertImplicitPatternsT exh (hs ++ p : ps) (telePi tel b)
src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs view
@@ -26,7 +26,7 @@ -- | Instantiate a telescope with a substitution. Might reorder the telescope. -- @instantiateTel (Γ : Tel)(σ : Γ --> Γ) = Γσ~@ -- Monadic only for debugging purposes.-instantiateTel :: Substitution -> Telescope -> TCM (Telescope, Permutation, S.Substitution, [I.Dom Type])+instantiateTel :: Substitution -> Telescope -> TCM (Telescope, Permutation, S.Substitution, [Dom Type]) instantiateTel s tel = liftTCM $ do reportSDoc "tc.lhs.inst" 10 $ vcat@@ -169,14 +169,19 @@ splitError (_:_) EmptyTel = __IMPOSSIBLE__ splitError [] ExtendTel{} = __IMPOSSIBLE__ splitError (p : ps) (ExtendTel a tel)- | isBad p = traceCall (CheckPattern (strip p) EmptyTel (unDom a)) $ case strip p of- A.DotP _ e -> typeError $ UninstantiatedDotPattern e- p -> typeError $ IlltypedPattern p (unDom a)+ | isBad p = traceCall (CheckPattern (strip p) EmptyTel (unDom a)) $+ typeError $ IlltypedPattern (strip p) (unDom a) | otherwise = underAbstraction a tel $ \tel -> splitError ps tel where strip = snd . asView . namedArg isBad p = case strip p of- A.DotP _ _ -> True- A.ConP _ _ _ -> True- A.LitP _ -> True- _ -> False+ A.DotP{} -> True+ A.ConP{} -> True+ A.LitP{} -> True+ A.RecP{} -> True+ A.VarP{} -> False+ A.WildP{} -> False+ A.AbsurdP{} -> False+ A.DefP{} -> __IMPOSSIBLE__ -- Projection pattern gives CannotEliminateWithPattern+ A.AsP{} -> __IMPOSSIBLE__+ A.PatternSynP{} -> __IMPOSSIBLE__
src/full/Agda/TypeChecking/Rules/LHS/Problem.hs view
@@ -3,25 +3,28 @@ {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-} module Agda.TypeChecking.Rules.LHS.Problem where import Prelude hiding (null) import Data.Foldable ( Foldable )+import Data.Maybe ( fromMaybe )+import Data.Monoid (Monoid, mempty, mappend, mconcat) import Data.Traversable import Agda.Syntax.Common import Agda.Syntax.Literal import Agda.Syntax.Position-import Agda.Syntax.Internal as I+import Agda.Syntax.Internal import Agda.Syntax.Internal.Pattern import qualified Agda.Syntax.Abstract as A -import Agda.TypeChecking.Substitute as S+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Substitute.Pattern import Agda.TypeChecking.Pretty -import Agda.Utils.Except ( Error(noMsg, strMsg) ) import Agda.Utils.Null import Agda.Utils.Permutation @@ -37,7 +40,7 @@ -- Saves the 'FlexibleVarKind' of its subpatterns. | ImplicitFlex -- ^ From a hidden formal argument or underscore ('WildP'). | DotFlex -- ^ From a dot pattern ('DotP').- deriving (Eq, Ord, Show)+ deriving (Eq, Show) -- | Flexible variables are equipped with information where they come from, -- in order to make a choice which one to assign when two flexibles are unified.@@ -57,16 +60,61 @@ flexibleVarFromHiding :: Hiding -> a -> FlexibleVar a flexibleVarFromHiding h a = FlexibleVar h ImplicitFlex a -instance Ord (FlexibleVar Nat) where- (FlexibleVar h2 f2 i2) <= (FlexibleVar h1 f1 i1) =- f1 > f2 || (f1 == f2 && (hgt h1 h2 || (h1 == h2 && i1 <= i2)))- where- hgt x y | x == y = False- hgt Hidden _ = True- hgt _ Hidden = False- hgt Instance _ = True- hgt _ _ = False+data FlexChoice = ChooseLeft | ChooseRight | ChooseEither | ExpandBoth+ deriving (Eq, Show) +instance Monoid FlexChoice where+ mempty = ChooseEither++ ExpandBoth `mappend` _ = ExpandBoth+ _ `mappend` ExpandBoth = ExpandBoth+ ChooseEither `mappend` y = y+ x `mappend` ChooseEither = x+ ChooseLeft `mappend` ChooseRight = ExpandBoth -- If there's dot patterns on both sides,+ ChooseRight `mappend` ChooseLeft = ExpandBoth -- we need to eta-expand+ ChooseLeft `mappend` ChooseLeft = ChooseLeft+ ChooseRight `mappend` ChooseRight = ChooseRight++class ChooseFlex a where+ chooseFlex :: a -> a -> FlexChoice++instance ChooseFlex FlexibleVarKind where+ chooseFlex DotFlex DotFlex = ChooseEither+ chooseFlex DotFlex _ = ChooseLeft+ chooseFlex _ DotFlex = ChooseRight+ chooseFlex (RecordFlex xs) (RecordFlex ys) = chooseFlex xs ys+ chooseFlex (RecordFlex xs) y = chooseFlex xs (repeat y)+ chooseFlex x (RecordFlex ys) = chooseFlex (repeat x) ys+ chooseFlex ImplicitFlex ImplicitFlex = ChooseEither++instance ChooseFlex a => ChooseFlex [a] where+ chooseFlex xs ys = mconcat $ zipWith chooseFlex xs ys++instance ChooseFlex Hiding where+ chooseFlex Hidden Hidden = ChooseEither+ chooseFlex Hidden _ = ChooseLeft+ chooseFlex _ Hidden = ChooseRight+ chooseFlex Instance Instance = ChooseEither+ chooseFlex Instance _ = ChooseLeft+ chooseFlex _ Instance = ChooseRight+ chooseFlex _ _ = ChooseEither++instance ChooseFlex Int where+ chooseFlex x y = case compare x y of+ LT -> ChooseLeft+ EQ -> ChooseEither+ GT -> ChooseRight++instance (ChooseFlex a) => ChooseFlex (FlexibleVar a) where+ chooseFlex (FlexibleVar h1 f1 i1) (FlexibleVar h2 f2 i2) =+ firstChoice [chooseFlex f1 f2, chooseFlex h1 h2, chooseFlex i1 i2]+ where+ firstChoice :: [FlexChoice] -> FlexChoice+ firstChoice [] = ChooseEither+ firstChoice (ChooseEither : xs) = firstChoice xs+ firstChoice (x : _ ) = x++ -- | State of typechecking a LHS; input to 'split'. -- [Ulf Norell's PhD, page. 35] --@@ -74,16 +122,17 @@ -- @ps@ are the user patterns of supposed type @delta@. -- @p@ is the pattern resulting from the splitting. data Problem' p = Problem- { problemInPat :: [A.NamedArg A.Pattern] -- ^ User patterns.+ { problemInPat :: [NamedArg A.Pattern] -- ^ User patterns. , problemOutPat :: p -- ^ Patterns after splitting.- , problemTel :: Telescope -- ^ Type of patterns.+ , problemTel :: Telescope -- ^ Type of in patterns. , problemRest :: ProblemRest -- ^ Patterns that cannot be typed yet. } deriving Show --- | The permutation should permute @allHoles@ of the patterns to correspond to--- the abstract patterns in the problem.-type Problem = Problem' (Permutation, [I.NamedArg Pattern])+-- | The de Bruijn indices in the pattern refer to positions+-- in the list of abstract patterns in the problem, counted+-- from the back.+type Problem = Problem' [NamedArg DeBruijnPattern] type ProblemPart = Problem' () -- | User patterns that could not be given a type yet.@@ -106,9 +155,9 @@ -- @Nat -> Nat@ and we can move pattern @zero@ over to @problemInPat@. data ProblemRest = ProblemRest- { restPats :: [A.NamedArg A.Pattern]+ { restPats :: [NamedArg A.Pattern] -- ^ List of user patterns which could not yet be typed.- , restType :: I.Arg Type+ , restType :: Arg Type -- ^ Type eliminated by 'restPats'. -- Can be 'Irrelevant' to indicate that we came by -- an irrelevant projection and, hence, the rhs must@@ -120,16 +169,15 @@ = Focus { focusCon :: QName , focusPatOrigin:: ConPOrigin -- ^ Do we come from an implicit or record pattern?- , focusConArgs :: [A.NamedArg A.Pattern]+ , focusConArgs :: [NamedArg A.Pattern] , focusRange :: Range- , focusOutPat :: OneHolePatterns- , focusHoleIx :: Int -- ^ Index of focused variable in the out patterns.+ , focusOutPat :: [NamedArg DeBruijnPattern] , focusDatatype :: QName- , focusParams :: [I.Arg Term]- , focusIndices :: [I.Arg Term]+ , focusParams :: [Arg Term]+ , focusIndices :: [Arg Term] , focusType :: Type -- ^ Type of variable we are splitting, kept for record patterns. }- | LitFocus Literal OneHolePatterns Int Type+ | LitFocus Literal [NamedArg DeBruijnPattern] Type -- | Result of 'splitProblem': Determines position for the next split. data SplitProblem@@ -141,7 +189,7 @@ -- Invariant: @'problemRest' == empty@. , splitAsNames :: [Name] -- ^ The as-bindings for the focus.- , splitFocus :: I.Arg Focus+ , splitFocus :: Arg Focus -- ^ How to split the variable at the split position. , splitRPats :: Abs ProblemPart -- ^ The typed user patterns right of the split position.@@ -149,16 +197,16 @@ | -- | Split on projection pattern. SplitRest- { splitProjection :: I.Arg QName+ { splitProjection :: Arg QName -- ^ The projection could be belonging to an irrelevant record field. , splitRestType :: Type } -- | Put a typed pattern on the very left of a @SplitProblem@. consSplitProblem- :: A.NamedArg A.Pattern -- ^ @p@ A pattern.+ :: NamedArg A.Pattern -- ^ @p@ A pattern. -> ArgName -- ^ @x@ The name of the argument (from its type).- -> I.Dom Type -- ^ @t@ Its type.+ -> Dom Type -- ^ @t@ Its type. -> SplitProblem -- ^ The split problem, containing 'splitLPats' @ps;xs:ts@. -> SplitProblem -- ^ The result, now containing 'splitLPats' @(p,ps);(x,xs):(t,ts)@. consSplitProblem p x dom s@SplitRest{} = s@@ -167,36 +215,44 @@ consProblem' (Problem ps () tel pr) = Problem (p:ps) () (ExtendTel dom $ Abs x tel) pr -data DotPatternInst = DPI A.Expr Term (I.Dom Type)+-- | Instantiations of a dot pattern with a term.+-- `Maybe e` if the user wrote a dot pattern .e+-- `Nothing` if this is an instantiation of an implicit argument or an underscore _+data DotPatternInst = DPI+ { dotPatternUserExpr :: Maybe A.Expr+ , dotPatternInst :: Term+ , dotPatternType :: Dom Type+ } data AsBinding = AsB Name Term Type -- | State worked on during the main loop of checking a lhs. data LHSState = LHSState { lhsProblem :: Problem- , lhsSubst :: S.Substitution+ , lhsSubst :: PatternSubstitution , lhsDPI :: [DotPatternInst] , lhsAsB :: [AsBinding] } -instance Subst ProblemRest where+instance Subst Term ProblemRest where applySubst rho p = p { restType = applySubst rho $ restType p } -instance Subst (Problem' p) where+instance Subst Term (Problem' p) where applySubst rho p = p { problemTel = applySubst rho $ problemTel p , problemRest = applySubst rho $ problemRest p } -instance Subst DotPatternInst where+instance Subst Term DotPatternInst where applySubst rho (DPI e v a) = uncurry (DPI e) $ applySubst rho (v,a) -instance Subst AsBinding where+instance Subst Term AsBinding where applySubst rho (AsB x v a) = uncurry (AsB x) $ applySubst rho (v, a) instance PrettyTCM DotPatternInst where- prettyTCM (DPI e v a) = sep+ prettyTCM (DPI me v a) = sep [ prettyA e <+> text "=" , nest 2 $ prettyTCM v <+> text ":" , nest 2 $ prettyTCM a ]+ where e = fromMaybe underscore me instance PrettyTCM AsBinding where prettyTCM (AsB x v a) =
src/full/Agda/TypeChecking/Rules/LHS/ProblemRest.hs view
@@ -4,13 +4,14 @@ module Agda.TypeChecking.Rules.LHS.ProblemRest where import Agda.Syntax.Common-import Agda.Syntax.Internal as I+import Agda.Syntax.Internal import qualified Agda.Syntax.Abstract as A import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty import Agda.TypeChecking.Telescope import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Substitute.Pattern import Agda.TypeChecking.Rules.LHS.Problem import Agda.TypeChecking.Rules.LHS.Implicit@@ -24,7 +25,7 @@ -- MOVED from LHS: -- | Rename the variables in a telescope using the names from a given pattern-useNamesFromPattern :: [A.NamedArg A.Pattern] -> Telescope -> Telescope+useNamesFromPattern :: [NamedArg A.Pattern] -> Telescope -> Telescope useNamesFromPattern ps = telFromList . zipWith ren (toPats ps ++ repeat dummy) . telToList where dummy = A.WildP __IMPOSSIBLE__@@ -59,14 +60,14 @@ -- with patterns @just a, just b@ would be: -- @ -- problemInPat = ["_", "just a"]--- problemOutPat = [identity-permutation, ["A", "m"]]+-- problemOutPat = ["A", "m"] -- problemTel = [A : Set, m : Maybe A] -- problemRest = -- restPats = ["just b"] -- restType = "Case m Bool (Maybe A -> Bool)" -- @ -problemFromPats :: [A.NamedArg A.Pattern] -- ^ The user patterns.+problemFromPats :: [NamedArg A.Pattern] -- ^ The user patterns. -> Type -- ^ The type the user patterns eliminate. -> TCM Problem -- ^ The initial problem constructed from the user patterns. problemFromPats ps a = do@@ -86,10 +87,10 @@ pr = ProblemRest ps2 $ defaultArg b -- internal patterns start as all variables- let ips = map (argFromDom . fmap (namedVarP . fst)) as+ let ips = teleNamedArgs gamma -- the initial problem for starting the splitting- let problem = Problem ps1 (idP $ size ps1, ips) gamma pr :: Problem+ problem = Problem ps1 ips gamma pr :: Problem reportSDoc "tc.lhs.problem" 10 $ vcat [ text "checking lhs -- generated an initial split problem:" , nest 2 $ vcat@@ -108,7 +109,7 @@ -- | Try to move patterns from the problem rest into the problem. -- Possible if type of problem rest has been updated to a function type. updateProblemRest_ :: Problem -> TCM (Nat, Problem)-updateProblemRest_ p@(Problem ps0 (perm0@(Perm n0 is0), qs0) tel0 (ProblemRest ps a)) = do+updateProblemRest_ p@(Problem ps0 qs0 tel0 (ProblemRest ps a)) = do ps <- insertImplicitPatternsT DontExpandLast ps $ unArg a -- (Issue 734: Do only the necessary telView to preserve clause types as much as possible.) TelV tel b <- telViewUpTo (length ps) $ unArg a@@ -117,9 +118,8 @@ (ps1,ps2) = splitAt (size as) ps tel1 = telFromList $ telToList tel0 ++ as pr = ProblemRest ps2 (a $> b)- qs1 = map (argFromDom . fmap (namedVarP . fst)) as+ qs1 = teleNamedArgs gamma n = size as- perm1 = liftP n perm0 -- IS: Perm (n0 + n) $ is0 ++ [n0..n0+n-1] reportSDoc "tc.lhs.problem" 10 $ addCtxTel tel0 $ vcat [ text "checking lhs -- updated split problem:" , nest 2 $ vcat@@ -132,7 +132,7 @@ , text "b =" <+> addCtxTel gamma (prettyTCM b) ] ]- return $ (n,) $ Problem (ps0 ++ ps1) (perm1, raise n qs0 ++ qs1) tel1 pr+ return $ (n,) $ Problem (ps0 ++ ps1) (applySubst (raiseS n) qs0 ++ qs1) tel1 pr updateProblemRest :: LHSState -> TCM LHSState updateProblemRest st@LHSState { lhsProblem = p } = do@@ -142,6 +142,6 @@ return $ LHSState { lhsProblem = p' , lhsSubst = applySubst tau (lhsSubst st)- , lhsDPI = applySubst tau (lhsDPI st)- , lhsAsB = applySubst tau (lhsAsB st)+ , lhsDPI = applyPatSubst tau (lhsDPI st)+ , lhsAsB = applyPatSubst tau (lhsAsB st) }
src/full/Agda/TypeChecking/Rules/LHS/Split.hs view
@@ -1,5 +1,5 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE PatternGuards #-} {-# LANGUAGE ScopedTypeVariables #-} module Agda.TypeChecking.Rules.LHS.Split@@ -20,6 +20,7 @@ import Agda.Interaction.Highlighting.Generate (storeDisambiguatedName) import Agda.Syntax.Common+import Agda.Syntax.Concrete (FieldAssignment'(..), nameFieldA) import Agda.Syntax.Literal import Agda.Syntax.Position import Agda.Syntax.Internal as I@@ -43,10 +44,12 @@ import Agda.TypeChecking.Records import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope import Agda.TypeChecking.Rules.LHS.Problem import Agda.Utils.Functor ((<.>))+import Agda.Utils.Lens import Agda.Utils.List import Agda.Utils.ListT import Agda.Utils.Maybe@@ -72,17 +75,16 @@ Maybe QName -- ^ The definition we are checking at the moment. -> Problem -- ^ The current state of the lhs patterns. -> ListT TCM SplitProblem-splitProblem mf (Problem ps (perm, qs) tel pr) = do+splitProblem mf (Problem ps qs tel pr) = do lift $ do reportSLn "tc.lhs.split" 20 $ "initiating splitting" ++ maybe "" ((" for definition " ++) . show) mf reportSDoc "tc.lhs.split" 30 $ sep [ nest 2 $ text "ps =" <+> sep (map (P.parens <.> prettyA) ps) , nest 2 $ text "qs =" <+> sep (map (P.parens <.> prettyTCM . namedArg) qs)- , nest 2 $ text "perm =" <+> prettyTCM perm , nest 2 $ text "tel =" <+> prettyTCM tel ]- splitP ps (permute perm $ zip [0..] $ allHoles qs) tel+ splitP ps tel where -- Result splitting splitRest :: ProblemRest -> ListT TCM SplitProblem@@ -125,7 +127,7 @@ -- Get the field decoration. -- If the projection pattern @d@ is not a field name, that's an error. argd <- maybe failure return $ find ((d ==) . unArg) fs- let es = patternsToElims perm qs+ let es = patternsToElims qs -- the record "self" is the definition f applied to the patterns fvs <- lift $ freeVarsToApply f let self = defaultArg $ Def f (map Apply fvs) `applyE` es@@ -136,7 +138,7 @@ [ text "we are self = " <+> prettyTCM (unArg self) , text "being projected by dType = " <+> prettyTCM dType ]- return $ SplitRest argd $ dType `apply` (vs ++ [self])+ lift $ SplitRest argd <$> dType `piApplyM` (vs ++ [self]) _ -> __IMPOSSIBLE__ -- if there are no more patterns left in the problem rest, there is nothing to split: splitRest _ = mzero@@ -146,23 +148,19 @@ -- @ips@ are the one-hole patterns of the current split state (outPats) -- in one-to-one correspondence with the pattern variables -- recorded in @tel@.- splitP :: [A.NamedArg A.Pattern]- -> [(Int, OneHolePatterns)]+ splitP :: [NamedArg A.Pattern] -> Telescope -> ListT TCM SplitProblem - -- the next two cases violate the one-to-one correspondence of qs and tel- splitP _ [] (ExtendTel _ _) = __IMPOSSIBLE__- splitP _ (_:_) EmptyTel = __IMPOSSIBLE__ -- no more patterns? pull them from the rest- splitP [] _ _ = splitRest pr- -- patterns but no types for them? Impossible.- splitP ps [] EmptyTel = __IMPOSSIBLE__+ splitP [] _ = splitRest pr+ -- patterns but no more types? that's an error+ splitP (_:_) EmptyTel = __IMPOSSIBLE__ -- (we can never have an ExtendTel without Abs)- splitP _ _ (ExtendTel _ NoAbs{}) = __IMPOSSIBLE__+ splitP _ (ExtendTel _ NoAbs{}) = __IMPOSSIBLE__ -- pattern with type? Let's get to work:- splitP ps0@(p : ps) qs0@((i, q) : qs) tel0@(ExtendTel dom@(Dom ai a) xtel@(Abs x tel)) = do+ splitP ps0@(p : ps) tel0@(ExtendTel dom@(Dom ai a) xtel@(Abs x tel)) = do liftTCM $ reportSDoc "tc.lhs.split" 30 $ sep [ text "splitP looking at pattern"@@ -172,10 +170,10 @@ -- Possible reinvokations: let -- 1. Redo this argument (after meta instantiation).- tryAgain = splitP ps0 qs0 tel0+ tryAgain = splitP ps0 tel0 -- 2. Try to split on next argument. keepGoing = consSplitProblem p x dom <$> do- underAbstraction dom xtel $ \ tel -> splitP ps qs tel+ underAbstraction dom xtel $ \ tel -> splitP ps tel p <- lift $ expandLitPattern p case asView $ namedArg p of@@ -202,11 +200,49 @@ {- else -} return Split { splitLPats = empty , splitAsNames = xs- , splitFocus = Arg ai $ LitFocus lit q i a+ , splitFocus = Arg ai $ LitFocus lit qs a , splitRPats = Abs x $ Problem ps () tel __IMPOSSIBLE__ } `mplus` keepGoing + -- Case: record pattern+ (xs, p@(A.RecP _patInfo fs)) -> do+ res <- lift $ tryRecordType a+ case res of+ -- Subcase: blocked+ Left Nothing -> keepGoing++ -- Subcase: not a record type or blocked on variable.+ Left (Just a') -> keepGoing -- If not record type, error will be given later.+ -- typeError . GenericDocError =<< do+ -- lift $ text "Record pattern at non-record type " <+> prettyTCM a'++ -- Subcase: a record type (d vs)+ Right (d, vs, def) -> do+ let np = recPars def+ let (pars, ixs) = genericSplitAt np vs+ lift $ reportSDoc "tc.lhs.split" 10 $ vcat+ [ sep [ text "splitting on"+ , nest 2 $ fsep [ prettyA p, text ":", prettyTCM dom ]+ ]+ , nest 2 $ text "pars =" <+> fsep (punctuate comma $ map prettyTCM pars)+ , nest 2 $ text "ixs =" <+> fsep (punctuate comma $ map prettyTCM ixs)+ ]+ let c = killRange $ conName $ recConHead def+ let -- Field names with ArgInfo.+ axs = recordFieldNames def++ -- In es omitted explicit fields are replaced by underscores+ -- (from missingExplicits). Omitted implicit or instance fields+ -- are still left out and inserted later by computeNeighborhood.+ args <- lift $ insertMissingFields d (const $ A.WildP A.patNoRange) fs axs+ (return Split+ { splitLPats = empty+ , splitAsNames = xs+ , splitFocus = Arg ai $ Focus c ConPRec args (getRange p) qs d pars ixs a+ , splitRPats = Abs x $ Problem ps () tel __IMPOSSIBLE__+ }) `mplus` keepGoing+ -- Case: constructor pattern. (xs, p@(A.ConP ci (A.AmbQ cs) args)) -> do let tryInstantiate a'@@ -217,7 +253,7 @@ Constructor{ conData = d } <- theDef <$> getConstInfo c dt <- defType <$> getConstInfo d vs <- newArgsMeta dt- Sort s <- ignoreSharing . unEl <$> reduce (apply dt vs)+ Sort s <- ignoreSharing . unEl <$> reduce (piApply dt vs) tryConversion $ equalType a' (El s $ Def d $ map Apply vs) if ok then tryAgain else keepGoing | otherwise = keepGoing@@ -291,7 +327,7 @@ (return Split { splitLPats = empty , splitAsNames = xs- , splitFocus = Arg ai $ Focus c (A.patOrigin ci) args (getRange p) q i d pars ixs a+ , splitFocus = Arg ai $ Focus c (A.patOrigin ci) args (getRange p) qs d pars ixs a , splitRPats = Abs x $ Problem ps () tel __IMPOSSIBLE__ }) `mplus` keepGoing -- Subcase: split type is not a Def.
src/full/Agda/TypeChecking/Rules/LHS/Unify.hs view
@@ -3,1090 +3,993 @@ {-# LANGUAGE DeriveFoldable #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE PatternGuards #-}-{-# LANGUAGE TupleSections #-}--module Agda.TypeChecking.Rules.LHS.Unify where--import Prelude hiding (null)--import Control.Arrow ((***))-import Control.Applicative hiding (empty)-import Control.Monad.State-import Control.Monad.Reader-import Control.Monad.Writer (WriterT(..), MonadWriter(..), Monoid(..))--import Data.IntMap (IntMap)-import qualified Data.IntMap as IntMap-import Data.Map (Map)-import qualified Data.Map as Map-import Data.List hiding (null, sort)--import Data.Typeable (Typeable)-import Data.Foldable (Foldable)-import Data.Traversable (Traversable,traverse)--import Agda.Interaction.Options (optInjectiveTypeConstructors)--import Agda.Syntax.Common-import Agda.Syntax.Internal as I hiding (Substitution)-import Agda.Syntax.Literal-import Agda.Syntax.Position--import Agda.TypeChecking.Monad-import Agda.TypeChecking.Monad.Exception-import Agda.TypeChecking.Monad.Builtin (constructorForm)-import Agda.TypeChecking.Conversion -- equalTerm-import Agda.TypeChecking.Constraints-import Agda.TypeChecking.Datatypes-import Agda.TypeChecking.DropArgs-import Agda.TypeChecking.Level (reallyUnLevelView)-import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Pretty-import Agda.TypeChecking.Substitute hiding (Substitution)-import qualified Agda.TypeChecking.Substitute as S-import Agda.TypeChecking.Telescope-import Agda.TypeChecking.Free-import Agda.TypeChecking.Records-import Agda.TypeChecking.MetaVars (assignV, newArgsMetaCtx)-import Agda.TypeChecking.EtaContract-import Agda.Interaction.Options (optInjectiveTypeConstructors, optWithoutK)--import Agda.TypeChecking.Rules.LHS.Problem--- import Agda.TypeChecking.SyntacticEquality--import Agda.Utils.Except- ( Error(noMsg, strMsg)- , MonadError(catchError, throwError)- )-import Agda.Utils.Either-import Agda.Utils.List-import Agda.Utils.Maybe-import Agda.Utils.Monad-import Agda.Utils.Null-import Agda.Utils.Size--#include "undefined.h"-import Agda.Utils.Impossible---- | Result of 'unifyIndices'.-type UnificationResult = UnificationResult' Substitution--data UnificationResult' a- = Unifies a -- ^ Unification succeeded.- | NoUnify TCErr -- ^ Terms are not unifiable.- | DontKnow TCErr -- ^ Some other error happened, unification got stuck.- deriving (Typeable, Show, Functor, Foldable, Traversable)---- | Monad for unification.-newtype Unify a = U { unUnify ::- ReaderT UnifyEnv (- WriterT UnifyOutput (- ExceptionT UnifyException (- StateT UnifyState TCM))) a- } deriving ( Monad, MonadIO, Functor, Applicative- , MonadException UnifyException, MonadWriter UnifyOutput)--instance MonadTCM Unify where- liftTCM = U . lift . lift . lift . lift--instance MonadState TCState Unify where- get = liftTCM $ get- put = liftTCM . put--instance MonadReader TCEnv Unify where- ask = U $ ReaderT $ \ _ -> ask- local cont (U (ReaderT f)) = U $ ReaderT $ \ a -> local cont (f a)--instance HasConstInfo Unify where- getConstInfo = U . lift . lift . lift . lift . getConstInfo- getRewriteRulesFor = U . lift . lift . lift . lift . getRewriteRulesFor---- UnifyEnv---------------------------------------------------------------------------data UnifyMayPostpone = MayPostpone | MayNotPostpone--type UnifyEnv = UnifyMayPostpone--emptyUEnv :: UnifyEnv-emptyUEnv = MayPostpone--noPostponing :: Unify a -> Unify a-noPostponing = U . local (const MayNotPostpone) . unUnify--askPostpone :: Unify UnifyMayPostpone-askPostpone = U $ ask---- | Output the result of unification (success or maybe).-type UnifyOutput = Unifiable---- | Were two terms unifiable or did we have to postpone some equation such that we are not sure?-data Unifiable- = Definitely -- ^ Unification succeeded.- | Possibly -- ^ Unification did not fail, but we had to postpone a part.---- | Conjunctive monoid.-instance Monoid Unifiable where- mempty = Definitely- mappend Definitely Definitely = Definitely- mappend _ _ = Possibly---- | Tell that something could not be unified right now,--- so the unification succeeds only 'Possibly'.-reportPostponing :: Unify ()-reportPostponing = tell Possibly---- | Check whether unification proceeded without postponement.-ifClean :: Unify () -> Unify a -> Unify a -> Unify a-ifClean m t e = do- ok <- snd <$> listen m- case ok of- Definitely -> t- Possibly -> e--data Equality = Equal TypeHH Term Term-type Sub = IntMap Term--data UnifyException- = ConstructorMismatch Type Term Term- | StronglyRigidOccurrence Type Term Term- | UnclearOccurrence Type Term Term- | WithoutKException Type Term Term- | GenericUnifyException String--instance Error UnifyException where- strMsg = GenericUnifyException--data UnifyState = USt- { uniSub :: Sub- , uniConstr :: [Equality]- }--emptyUState :: UnifyState-emptyUState = USt IntMap.empty []---- | Throw-away error message.-projectionMismatch :: QName -> QName -> Unify a-projectionMismatch f f' = throwException $ GenericUnifyException $- "projections " ++ show f ++ " and " ++ show f' ++ " do not match"--constructorMismatch :: Type -> Term -> Term -> Unify a-constructorMismatch a u v = throwException $ ConstructorMismatch a u v--constructorMismatchHH :: TypeHH -> Term -> Term -> Unify a-constructorMismatchHH aHH u v = do- ifM (liftTCM fullyApplied `and2M` canCompare aHH)- {- then -} (constructorMismatch (leftHH aHH) u v) -- do not report heterogenity- {- else -} (throwException (UnclearOccurrence (leftHH aHH) u v))- where- -- Comparing constructors at different types is incompatible with univalence- canCompare (Het s t) = ifM (liftTCM $ optWithoutK <$> pragmaOptions)- (liftTCM $ tryConversion $ equalType s t) -- no constraints left- (return True)- canCompare Hom{} = return True- -- Issue 1497: only fully applied constructors can mismatch- fullyApplied = case (ignoreSharing u, ignoreSharing v) of- (Con c us, Con d vs) -> do- when (c == d) __IMPOSSIBLE__- car <- fromLeft length <$> getConstructorArity (conName c)- dar <- fromLeft length <$> getConstructorArity (conName d)- return $ length us == car && length vs == dar- _ -> return True -- could be literals--instance Subst Equality where- applySubst rho (Equal a s t) =- Equal (applySubst rho a) (applySubst rho s) (applySubst rho t)--getSub :: Unify Sub-getSub = U $ gets uniSub--modSub :: (Sub -> Sub) -> Unify ()-modSub f = U $ modify $ \s -> s { uniSub = f $ uniSub s }--checkEqualities :: [Equality] -> TCM ()-checkEqualities eqs = noConstraints $ mapM_ checkEq eqs- where- checkEq (Equal (Hom a) s t) = equalTerm a s t- checkEq (Equal (Het a1 a2) s t) = typeError $ HeterogeneousEquality s a1 t a2- -- Andreas, 2014-03-03: Alternatively, one could try to get back- -- to a homogeneous situation. Unless there is a case where this- -- actually helps, I leave it deactivated.- -- KEEP:- --- -- checkEq (Equal (Het a1 a2) s t) = do- -- noConstraints $ do- -- equalType a1 a2- -- equalTerm a1 s t- -- `catchError` \ _ -> typeError $ HeterogeneousEquality s a1 t a2---- | Force equality now instead of postponing it using 'addEquality'.-checkEquality :: Type -> Term -> Term -> TCM ()-checkEquality a u v = noConstraints $ equalTerm a u v---- | Try equality. If constraints remain, postpone (enter unsafe mode).--- Heterogeneous equalities cannot be tried nor reawakened,--- so we can throw them away and flag "dirty".-checkEqualityHH :: TypeHH -> Term -> Term -> Unify ()-checkEqualityHH (Hom a) u v = do- ok <- liftTCM $ tryConversion $ equalTerm a u v -- no constraints left- -- Jesper, 2013-11-21: Refuse to solve reflexive equations when --without-K is enabled- if ok- then (whenM (liftTCM $ optWithoutK <$> pragmaOptions)- (throwException $ WithoutKException a u v))- else (addEquality a u v)-checkEqualityHH aHH@(Het a1 a2) u v = -- reportPostponing -- enter "dirty" mode- addEqualityHH aHH u v -- postpone, enter "dirty" mode---- | Check whether heterogeneous situation is really homogeneous.--- If not, give up.-forceHom :: TypeHH -> TCM Type-forceHom (Hom a) = return a-forceHom (Het a1 a2) = a1 <$ do noConstraints $ equalType a1 a2---- | Check whether heterogeneous situation is really homogeneous.--- If not, return Nothing.-makeHom :: TypeHH -> TCM (Maybe Type)-makeHom aHH = (Just <$> forceHom aHH) `catchError` \ err -> return Nothing---- | Try to make a possibly heterogeneous term situation homogeneous.-tryHom :: TypeHH -> Term -> Term -> TCM TermHH-tryHom aHH u v = do- a <- forceHom aHH- Hom u <$ checkEquality a u v- `catchError` \ err -> return $ Het u v--addEquality :: Type -> Term -> Term -> Unify ()-addEquality a = addEqualityHH (Hom a)--addEqualityHH :: TypeHH -> Term -> Term -> Unify ()-addEqualityHH aHH u v = do- reportPostponing- U $ modify $ \s -> s { uniConstr = Equal aHH u v : uniConstr s }--takeEqualities :: Unify [Equality]-takeEqualities = U $ do- s <- get- put $ s { uniConstr = [] }- return $ uniConstr s---- | Includes flexible occurrences, metas need to be solved. TODO: relax?--- TODO: later solutions may remove flexible occurences-occursCheck :: Nat -> Term -> Type -> Unify ()-occursCheck i u a = do- let v = var i- case occurrence i u of- -- Andreas, 2011-04-14- -- a strongly rigid recursive occurrences signals unsolvability- StronglyRigid -> do- liftTCM $ reportSDoc "tc.lhs.unify" 20 $ prettyTCM v <+> text "occurs strongly rigidly in" <+> prettyTCM u- throwException $ StronglyRigidOccurrence a v u-- NoOccurrence -> return () -- this includes irrelevant occurrences!-- -- any other recursive occurrence leads to unclear situation- _ -> do- liftTCM $ reportSDoc "tc.lhs.unify" 20 $ prettyTCM v <+> text "occurs in" <+> prettyTCM u- throwException $ UnclearOccurrence a v u---- | Assignment with preceding occurs check.-(|->) :: Nat -> (Term, Type) -> Unify ()-i |-> (u, a) = do- occursCheck i u a- liftTCM $ reportSDoc "tc.lhs.unify.assign" 10 $ prettyTCM (var i) <+> text ":=" <+> prettyTCM u- modSub $ IntMap.insert i (killRange u)- -- Apply substitution to itself (issue 552)- rho <- getSub- rho' <- traverse ureduce rho- modSub $ const rho'--makeSubstitution :: Sub -> S.Substitution-makeSubstitution sub- | null sub = idS- | otherwise = map val [0 .. highestIndex] ++# raiseS (highestIndex + 1)- where- highestIndex = fst $ IntMap.findMax sub- val i = fromMaybe (var i) $ IntMap.lookup i sub---- | Apply the current substitution on a term and reduce to weak head normal form.-class UReduce t where- ureduce :: t -> Unify t--instance UReduce Term where- ureduce u = doEtaContractImplicit $ do- rho <- makeSubstitution <$> getSub--- Andreas, 2013-10-24 the following call to 'normalise' is problematic--- (see issue 924). Instead, we only normalize if unifyAtomHH is undecided.--- liftTCM $ etaContract =<< normalise (applySubst rho u)--- Andreas, 2011-06-22, fix related to issue 423--- To make eta contraction work better, I switched reduce to normalise.--- I hope the performance penalty is not big (since we are dealing with--- l.h.s. terms only).--- A systematic solution would make unification type-directed and--- eta-insensitive...- liftTCM $ etaContract =<< reduce (applySubst rho u)--instance UReduce Type where- ureduce (El s t) = El s <$> ureduce t--instance UReduce t => UReduce (HomHet t) where- ureduce (Hom t) = Hom <$> ureduce t- ureduce (Het t1 t2) = Het <$> ureduce t1 <*> ureduce t2---- Andreas, 2014-03-03 A variant of ureduce that tries to get back--- to a homogeneous situation by checking syntactic equality.--- Did not solve issue 1071, so I am reverting to the old ureduce.--- However, KEEP THIS as an alternative to reconsider.--- Remember to import TypeChecking.SyntacticEquality!------ instance (SynEq t, UReduce t) => UReduce (HomHet t) where--- ureduce (Hom t) = Hom <$> ureduce t--- ureduce (Het t1 t2) = do--- t1 <- ureduce t1--- t2 <- ureduce t2--- ((t1,t2),equal) <- liftTCM $ checkSyntacticEquality t1 t2--- -- BRITTLE: syntactic equality only--- return $ if equal then Hom t1 else Het t1 t2--instance UReduce t => UReduce (Maybe t) where- ureduce Nothing = return Nothing- ureduce (Just t) = Just <$> ureduce t--instance (UReduce a, UReduce b) => UReduce (a, b) where- ureduce (a, b) = (,) <$> ureduce a <*> ureduce b--instance (UReduce a, UReduce b, UReduce c) => UReduce (a, b, c) where- ureduce (a, b, c) = (\x y z -> (x, y, z)) <$> ureduce a <*> ureduce b <*> ureduce c--instance (UReduce a) => UReduce (I.Arg a) where- ureduce (Arg c e) = Arg c <$> ureduce e--instance (UReduce a) => UReduce [ a ] where- ureduce = sequence . (map ureduce)----- | Take a substitution σ and ensure that no variables from the domain appear--- in the targets. The context of the targets is not changed.--- TODO: can this be expressed using makeSubstitution and applySubst?-flattenSubstitution :: Substitution -> Substitution-flattenSubstitution s = foldr instantiate s is- where- -- instantiated variables- is = [ i | (i, Just _) <- zip [0..] s ]-- instantiate :: Nat -> Substitution -> Substitution- instantiate i s = map (fmap $ inst i u) s- where- u = case s !!! i of- Just (Just u) -> u- _ -> __IMPOSSIBLE__-- -- @inst i u v@ replaces index @i@ in @v@ by @u@, without removing the index.- inst :: Nat -> Term -> Term -> Term- inst i u v = applySubst us v- where us = [ var j | j <- [0..i - 1] ] ++# consS u (raiseS $ i + 1)---- | Are we in a homogeneous (one type) or heterogeneous (two types) situation?-data HomHet a- = Hom a -- ^ homogeneous- | Het a a -- ^ heterogeneous- deriving (Typeable, Show, Eq, Ord, Functor, Foldable, Traversable)--isHom :: HomHet a -> Bool-isHom Hom{} = True-isHom Het{} = False--fromHom :: HomHet a -> a-fromHom (Hom a) = a-fromHom (Het{}) = __IMPOSSIBLE__--leftHH :: HomHet a -> a-leftHH (Hom a) = a-leftHH (Het a1 a2) = a1--rightHH :: HomHet a -> a-rightHH (Hom a) = a-rightHH (Het a1 a2) = a2--instance (Subst a) => Subst (HomHet a) where- applySubst rho u = fmap (applySubst rho) u--instance (PrettyTCM a) => PrettyTCM (HomHet a) where- prettyTCM (Hom a) = prettyTCM a- prettyTCM (Het a1 a2) = prettyTCM a1 <+> text "||" <+> prettyTCM a2--type TermHH = HomHet Term-type TypeHH = HomHet Type---type FunViewHH = FunV TypeHH-type TelHH = Tele (I.Dom TypeHH)-type TelViewHH = TelV TypeHH-type ArgsHH = HomHet Args--absAppHH :: SubstHH t tHH => Abs t -> TermHH -> tHH-absAppHH (Abs _ t) u = substHH u t-absAppHH (NoAbs _ t) u = trivialHH t--class ApplyHH t where- applyHH :: t -> HomHet Args -> HomHet t--instance ApplyHH Term where- applyHH t = fmap (apply t)--instance ApplyHH Type where- applyHH t = fmap (apply t)--substHH :: SubstHH t tHH => TermHH -> t -> tHH-substHH = substUnderHH 0---- | @substHH u t@ substitutes @u@ for the 0th variable in @t@.-class SubstHH t tHH where- substUnderHH :: Nat -> TermHH -> t -> tHH- trivialHH :: t -> tHH--instance (Free a, Subst a) => SubstHH (HomHet a) (HomHet a) where- substUnderHH n (Hom u) t = fmap (substUnder n u) t- substUnderHH n (Het u1 u2) (Hom t) =- if n `relevantIn` t then Het (substUnder n u1 t) (substUnder n u2 t)- else Hom (substUnder n u1 t)- substUnderHH n (Het u1 u2) (Het t1 t2) = Het (substUnder n u1 t1) (substUnder n u2 t2)- trivialHH = id--instance SubstHH Term (HomHet Term) where- substUnderHH n uHH t = fmap (\ u -> substUnder n u t) uHH- trivialHH = Hom--instance SubstHH Type (HomHet Type) where- substUnderHH n uHH (El s t) = fmap (\ u -> El s $ substUnder n u t) uHH--- fmap $ fmap (\ (El s v) -> El s $ substUnderHH n u v)- -- we ignore sorts in substitution, since they do not contain- -- terms we can match on- trivialHH = Hom--instance SubstHH a b => SubstHH (I.Arg a) (I.Arg b) where- substUnderHH n u = fmap $ substUnderHH n u- trivialHH = fmap trivialHH--instance SubstHH a b => SubstHH (I.Dom a) (I.Dom b) where- substUnderHH n u = fmap $ substUnderHH n u- trivialHH = fmap trivialHH--instance SubstHH a b => SubstHH (Abs a) (Abs b) where- substUnderHH n u (Abs x v) = Abs x $ substUnderHH (n + 1) u v- substUnderHH n u (NoAbs x v) = NoAbs x $ substUnderHH n u v- trivialHH = fmap trivialHH--instance (SubstHH a a', SubstHH b b') => SubstHH (a,b) (a',b') where- substUnderHH n u (x,y) = (substUnderHH n u x, substUnderHH n u y)- trivialHH = trivialHH *** trivialHH--instance SubstHH a b => SubstHH (Tele a) (Tele b) where- substUnderHH n u EmptyTel = EmptyTel- substUnderHH n u (ExtendTel t tel) = uncurry ExtendTel $ substUnderHH n u (t, tel)- trivialHH = fmap trivialHH---- | Unify indices.------ In @unifyIndices_ flex a us vs@,------ @a@ is the type eliminated by @us@ and @vs@--- (usally the type of a constructor),--- need not be reduced,------ @us@ and @vs@ are the argument lists to unify,------ @flex@ is the set of flexible (instantiable) variabes in @us@ and @vs@.------ The result is the most general unifier of @us@ and @vs@.-unifyIndices_ :: MonadTCM tcm => FlexibleVars -> Type -> Args -> Args -> tcm Substitution-unifyIndices_ flex a us vs = liftTCM $ do- r <- unifyIndices flex a us vs- case r of- Unifies sub -> return sub- DontKnow err -> throwError err- NoUnify err -> throwError err--unifyIndices :: MonadTCM tcm => FlexibleVars -> Type -> Args -> Args -> tcm UnificationResult-unifyIndices flex a us vs = liftTCM $ do- a <- reduce a- reportSDoc "tc.lhs.unify" 10 $- sep [ text "unifyIndices"- , nest 2 $ text (show flex)- , nest 2 $ parens (prettyTCM a)- , nest 2 $ prettyList $ map prettyTCM us- , nest 2 $ prettyList $ map prettyTCM vs- , nest 2 $ text "context: " <+> (prettyTCM =<< getContextTelescope)- ]- (r, USt s eqs) <- flip runStateT emptyUState . runExceptionT . runWriterT . flip runReaderT emptyUEnv . unUnify $ do- ifClean (unifyConstructorArgs (Hom a) us vs)- -- clean: continue unifying- recheckConstraints- -- dirty: just check equalities to trigger error message- recheckEqualities-- case r of- Left (ConstructorMismatch a u v) -> noUnify a u v- -- Andreas 2011-04-14:- Left (StronglyRigidOccurrence a u v) -> noUnify a u v- Left (UnclearOccurrence a u v) -> typeError $ UnequalTerms CmpEq u v a- Left (WithoutKException a u v) -> typeError $ WithoutKError a u v- Left (GenericUnifyException err) -> typeError $ GenericError err- Right _ -> do- checkEqualities $ applySubst (makeSubstitution s) eqs- let n = maximum $ (-1) : flex'- return $ Unifies $ flattenSubstitution [ IntMap.lookup i s | i <- [0..n] ]- `catchError` \err -> case err of- TypeError _ (Closure {clValue = WithoutKError{}}) -> throwError err- _ -> return $ DontKnow err- where- noUnify a u v = NoUnify <$> do typeError_ $ UnequalTerms CmpEq u v a-- flex' = map flexVar flex- flexible i = i `elem` flex'- findFlexible i = find ((i ==) . flexVar) flex- flexibleHid i = fmap getHiding $ findFlexible i-- flexibleTerm (Var i []) = flexible i- flexibleTerm (Shared p) = flexibleTerm (derefPtr p)- flexibleTerm _ = False-- {- Andreas, 2011-09-12- We unify constructors in heterogeneous situations, as long- as the two types have the same shape (construct the same datatype).- -}-- unifyConstructorArgs ::- TypeHH -- ^ The ureduced type of the constructor, instantiated to the parameters.- -- Possibly heterogeneous, since pars of lhs and rhs might differ.- -> [I.Arg Term] -- ^ the arguments of the constructor (lhs)- -> [I.Arg Term] -- ^ the arguments of the constructor (rhs)- -> Unify ()- unifyConstructorArgs a12 [] [] = return ()- unifyConstructorArgs a12 vs1 vs2 = do- liftTCM $ reportSDoc "tc.lhs.unify" 15 $ sep- [ text "unifyConstructorArgs"- -- , nest 2 $ parens (prettyTCM tel0)- , nest 2 $ prettyList $ map prettyTCM vs1- , nest 2 $ prettyList $ map prettyTCM vs2- , nest 2 $ text "constructor type:" <+> prettyTCM a12- ]- let n = genericLength vs1- -- since c vs1 and c vs2 have same-shaped type- -- vs1 and vs2 must have same length- when (n /= genericLength vs2) $ __IMPOSSIBLE__- TelV tel12 _ <- telViewUpToHH n a12- -- if the length of tel12 is not n, then something is wrong- -- e.g. a12 is not a same-shaped pair of types- when (n /= size tel12) $ __IMPOSSIBLE__- unifyConArgs tel12 vs1 vs2-- unifyConArgs ::- TelHH -- ^ The telescope(s) of the constructor args [length = n].- -> Args -- ^ the arguments of the constructor (lhs) [length = n].- -> Args -- ^ the arguments of the constructor (rhs) [length = n].- -> Unify ()- unifyConArgs _ (_ : _) [] = __IMPOSSIBLE__- unifyConArgs _ [] (_ : _) = __IMPOSSIBLE__- unifyConArgs _ [] [] = return ()- unifyConArgs EmptyTel _ _ = __IMPOSSIBLE__- unifyConArgs tel0@(ExtendTel a@(Dom _ bHH) tel) us0@(arg@(Arg _ u) : us) vs0@(Arg _ v : vs) = do- liftTCM $ reportSDoc "tc.lhs.unify" 15 $ sep- [ text "unifyConArgs"- -- , nest 2 $ parens (prettyTCM tel0)- , nest 2 $ prettyList $ map prettyTCM us0- , nest 2 $ prettyList $ map prettyTCM vs0- , nest 2 $ text "at telescope" <+> prettyTCM bHH <+> text ("(" ++ show (getRelevance a) ++ ") ...")- ]- liftTCM $ reportSDoc "tc.lhs.unify" 25 $- (text $ "tel0 = " ++ show tel0)--- -- Andreas, Ulf, 2011-09-08 (AIM XIV)- -- in case of dependent function type, we cannot postpone- -- unification of u and v, otherwise us or vs might be ill-typed- -- skip irrelevant parts- uHH <- if getRelevance a == Irrelevant then return $ Hom u else- -- Andreas, 2015-01-19 Forced constructor arguments are not unified.- -- Andreas, 2015-02-26 Restricting this to big forced arguments;- -- this still addresses issue 1406.- if getRelevance a == Forced Big then liftTCM $ tryHom bHH u v else- ifClean (unifyHH bHH u v) (return $ Hom u) (return $ Het u v)-- liftTCM $ reportSDoc "tc.lhs.unify" 25 $- (text "uHH (before ureduce) =" <+> prettyTCM uHH)-- uHH <- traverse ureduce uHH-- liftTCM $ reportSDoc "tc.lhs.unify" 25 $- (text "uHH (after ureduce) =" <+> prettyTCM uHH)-- unifyConArgs (tel `absAppHH` uHH) us vs-- -- | Used for arguments of a 'Def' (data/record/postulate), not 'Con'.- unifyArgs :: Type -> [I.Arg Term] -> [I.Arg Term] -> Unify ()- unifyArgs _ (_ : _) [] = __IMPOSSIBLE__- unifyArgs _ [] (_ : _) = __IMPOSSIBLE__- unifyArgs _ [] [] = return ()- unifyArgs a us0@(arg@(Arg _ u) : us) vs0@(Arg _ v : vs) = do- liftTCM $ reportSDoc "tc.lhs.unify" 15 $ sep- [ text "unifyArgs"- , nest 2 $ parens (prettyTCM a)- , nest 2 $ prettyList $ map prettyTCM us0- , nest 2 $ prettyList $ map prettyTCM vs0- ]- a <- ureduce a -- Q: reduce sufficient?- case ignoreSharing $ unEl a of- Pi b _ -> do- -- Andreas, Ulf, 2011-09-08 (AIM XVI)- -- in case of dependent function type, we cannot postpone- -- unification of u and v, otherwise us or vs might be ill-typed- let dep = dependent $ unEl a- -- skip irrelevant parts- unless (isIrrelevant b) $- (if dep then noPostponing else id) $- unify (unDom b) u v- arg <- traverse ureduce arg- unifyArgs (a `piApply` [arg]) us vs- _ -> __IMPOSSIBLE__- where dependent (Pi _ NoAbs{}) = False- dependent (Pi b c) = 0 `relevantIn` absBody c- dependent (Shared p) = dependent (derefPtr p)- dependent _ = False-- -- | Check using conversion check.- recheckEqualities :: Unify ()- recheckEqualities = do- eqs <- takeEqualities- liftTCM $ checkEqualities eqs-- -- | Check using unifier.- recheckConstraints :: Unify ()- recheckConstraints = mapM_ unifyEquality =<< takeEqualities-- unifyEquality :: Equality -> Unify ()- unifyEquality (Equal aHH u v) = unifyHH aHH u v-- i |->> x = do- i |-> x- recheckConstraints-- maybeAssign h i x = (i |->> x) `catchException` \e ->- case e of- UnclearOccurrence{} -> h- _ -> throwException e-- unifySizes :: Term -> Term -> Unify ()- unifySizes u v = do- sz <- liftTCM sizeType- su <- liftTCM $ sizeView u- sv <- liftTCM $ sizeView v- case (su, sv) of- (SizeSuc u, SizeSuc v) -> unify sz u v- (SizeSuc u, SizeInf) -> unify sz u v- (SizeInf, SizeSuc v) -> unify sz u v- _ -> unifyAtomHH (Hom sz) u v checkEqualityHH-- -- | Possibly heterogeneous unification (but at same-shaped types).- -- In het. situations, we only search for a mismatch!- --- -- TODO: eta for records!- unifyHH ::- TypeHH -- ^ one or two types, need not be in (u)reduced form- -> Term -> Term -> Unify ()- unifyHH aHH u v = do- liftTCM $ reportSDoc "tc.lhs.unify" 15 $- sep [ text "unifyHH"- , nest 2 $ (parens $ prettyTCM u) <+> text "=?="- , nest 2 $ parens $ prettyTCM v- , nest 2 $ text ":" <+> prettyTCM aHH- ]- u <- liftTCM . constructorForm =<< ureduce u- v <- liftTCM . constructorForm =<< ureduce v- aHH <- ureduce aHH- liftTCM $ reportSDoc "tc.lhs.unify" 25 $- sep [ text "unifyHH (reduced)"- , nest 2 $ (parens $ prettyTCM u) <+> text "=?="- , nest 2 $ parens $ prettyTCM v- , nest 2 $ text ":" <+> prettyTCM aHH- ]- -- obtain the (== Size) function- isSizeName <- liftTCM isSizeNameTest-- -- Andreas, 2013-10-24 (fixing issue 924)- -- Only if we cannot make progress, we try full normalization!- let tryAgain aHH u v = do- u <- liftTCM $ etaContract =<< normalise u- v <- liftTCM $ etaContract =<< normalise v- unifyAtomHH aHH u v $ \ aHH u v -> do- -- Andreas, 2014-03-03 (issue 1061)- -- As a last resort, normalize types to maybe get back- -- to the homogeneous case- caseMaybeM (liftTCM $ makeHom aHH) (checkEqualityHH aHH u v) $ \ a -> do- unifyAtomHH (Hom a) u v checkEqualityHH-- -- check whether types have the same shape- (aHH, sh) <- shapeViewHH aHH- case sh of- ElseSh -> checkEqualityHH aHH u v -- not a type or not same types-- DefSh d | isSizeName d -> unifySizes u v-- _ -> unifyAtomHH aHH u v tryAgain-- unifyAtomHH ::- TypeHH -- ^ in ureduced form- -> Term- -> Term- -> (TypeHH -> Term -> Term -> Unify ())- -- ^ continuation in case unification was inconclusive- -> Unify ()- unifyAtomHH aHH0 u v tryAgain = do- let (aHH, homogeneous, a) = case aHH0 of- Hom a -> (aHH0, True, a)- Het a1 a2 | a1 == a2 -> (Hom a1, True, a1) -- BRITTLE: just checking syn.eq.- _ -> (aHH0, False, __IMPOSSIBLE__)- -- use @a@ only if 'homogeneous' holds!-- fallback = tryAgain aHH u v- -- Try again if occurs check fails non-rigidly. It might be- -- that normalising gets rid of the occurrence.- (|->?) = maybeAssign fallback-- liftTCM $ reportSDoc "tc.lhs.unify" 15 $- sep [ text "unifyAtom"- , nest 2 $ prettyTCM u <> if flexibleTerm u then text " (flexible)" else empty- , nest 2 $ text "=?="- , nest 2 $ prettyTCM v <> if flexibleTerm v then text " (flexible)" else empty- , nest 2 $ text ":" <+> prettyTCM aHH- ]- liftTCM $ reportSDoc "tc.lhs.unify" 60 $- text $ "aHH = " ++ show aHH- case (ignoreSharing u, ignoreSharing v) of- -- Ulf, 2011-06-19- -- We don't want to worry about levels here.- (Level l, _) -> do- u <- liftTCM $ reallyUnLevelView l- unifyAtomHH aHH u v tryAgain- (_, Level l) -> do- v <- liftTCM $ reallyUnLevelView l- unifyAtomHH aHH u v tryAgain- (Var i us, Var j vs) | i == j -> checkEqualityHH aHH u v--- Andreas, 2013-03-05: the following flex/flex case is an attempt at--- better dotting (see Issue811). Does not work perfectly, maybe the best choice--- which variable to assign cannot made locally, but would need a look at the full--- picture!? Or maybe the information on flexible variables in not yet good enough--- in the call to split in Coverage.- (Var i [], Var j []) | homogeneous, Just fi <- findFlexible i, Just fj <- findFlexible j -> do- liftTCM $ reportSDoc "tc.lhs.unify.flexflex" 20 $- sep [ text "unifying flexible/flexible"- , nest 2 $ text "i =" <+> prettyTCM u <+> text ("; fi = " ++ show fi)- , nest 2 $ text "j =" <+> prettyTCM v <+> text ("; fj = " ++ show fj)- ]- -- We assign the "bigger" variable, where dotted, hidden, earlier is bigger- -- (in this order, see Problem.hs).- -- The comparison is total.- if fj >= fi then j |->? (u, a) else i |->? (v, a)- (Var i [], _) | homogeneous && flexible i -> i |->? (v, a)- (_, Var j []) | homogeneous && flexible j -> j |->? (u, a)- (Con c us, Con c' vs)- | c == c' -> do- r <- liftTCM (dataOrRecordTypeHH' c aHH)- case r of- Just (d, b, parsIxsHH) -> do- (b, parsIxsHH) <- ureduce (b, parsIxsHH)- -- Jesper, 2014-05-03: When --without-K is enabled, we reconstruct- -- datatype indices and unify them as well- withoutKEnabled <- liftTCM $ optWithoutK <$> pragmaOptions- when withoutKEnabled $ do- def <- liftTCM $ getConstInfo d- let parsHH = fst <$> parsIxsHH- ixsHH = snd <$> parsIxsHH- dtypeHH = defType def `applyHH` parsHH- unifyConstructorArgs dtypeHH (leftHH ixsHH) (rightHH ixsHH)- let a'HH = (b `apply`) . fst <$> parsIxsHH- unifyConstructorArgs a'HH us vs- Nothing -> checkEqualityHH aHH u v- | otherwise -> constructorMismatchHH aHH u v- -- Definitions are ok as long as they can't reduce (i.e. datatypes/axioms)- (Def d es, Def d' es')- | d == d' -> do- -- d must be a data, record or axiom- def <- getConstInfo d- let ok = case theDef def of- Datatype{} -> True- Record{} -> True- Axiom{} -> True- _ -> False- inj <- liftTCM $ optInjectiveTypeConstructors <$> pragmaOptions- if inj && ok then do- let us = fromMaybe __IMPOSSIBLE__ $ allApplyElims es- vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es'- unifyArgs (defType def) us vs `catchException` \ _ ->- constructorMismatchHH aHH u v- else checkEqualityHH aHH u v- -- Andreas, 2011-05-30: if heads disagree, abort- -- but do not raise "mismatch" because otherwise type constructors- -- would be distinct- | otherwise -> checkEqualityHH aHH u v -- typeError $ UnequalTerms CmpEq u v a- (Lit l1, Lit l2)- | l1 == l2 -> return ()- | otherwise -> constructorMismatchHH aHH u v-- -- We can instantiate metas if the other term is inert (constructor application)- -- Andreas, 2011-09-13: test/succeed/IndexInference needs this feature.- (MetaV m us, _) | homogeneous -> do- ok <- liftTCM $ instMetaE a m us v- liftTCM $ reportSDoc "tc.lhs.unify" 40 $- vcat [ fsep [ text "inst meta", text $ if ok then "(ok)" else "(not ok)" ]- , nest 2 $ sep [ prettyTCM u, text ":=", prettyTCM =<< normalise u ]- ]- if ok then unify a u v- else addEquality a u v- (_, MetaV m vs) | homogeneous -> do- ok <- liftTCM $ instMetaE a m vs u- liftTCM $ reportSDoc "tc.lhs.unify" 40 $- vcat [ fsep [ text "inst meta", text $ if ok then "(ok)" else "(not ok)" ]- , nest 2 $ sep [ prettyTCM v, text ":=", prettyTCM =<< normalise v ]- ]- if ok then unify a u v- else addEquality a u v-- (Con c us, _) -> do- md <- isEtaRecordTypeHH aHH- case md of- Just (d, parsHH) -> do- (tel, vs) <- liftTCM $ etaExpandRecord d (rightHH parsHH) v- b <- liftTCM $ getRecordConstructorType d- bHH <- ureduce (b `applyHH` parsHH)- unifyConstructorArgs bHH us vs- Nothing -> fallback-- (_, Con c vs) -> do- md <- isEtaRecordTypeHH aHH- case md of- Just (d, parsHH) -> do- (tel, us) <- liftTCM $ etaExpandRecord d (leftHH parsHH) u- b <- liftTCM $ getRecordConstructorType d- bHH <- ureduce (b `applyHH` parsHH)- unifyConstructorArgs bHH us vs- Nothing -> fallback-- -- Andreas, 2011-05-30: If I put checkEquality below, then Issue81 fails- -- because there are definitions blocked by flexibles that need postponement- _ -> fallback--- unify :: Type -> Term -> Term -> Unify ()- unify a = unifyHH (Hom a)-- -- The contexts are transient when unifying, so we should just instantiate to- -- constructor heads and generate fresh metas for the arguments. Beware of- -- constructors that aren't fully applied.- instMetaE :: Type -> MetaId -> Elims -> Term -> TCM Bool- instMetaE a m es v = do- case allApplyElims es of- Just us -> instMeta a m us v- Nothing -> return False-- instMeta :: Type -> MetaId -> Args -> Term -> TCM Bool- instMeta a m us v = do- app <- inertApplication a v- reportSDoc "tc.lhs.unify" 50 $- sep [ text "inert"- <+> sep [ text (show m), text (show us), parens $ prettyTCM v ]- , nest 2 $ text "==" <+> text (show app)- ]- case app of- Nothing -> return False- Just (v', b, vs) -> do- margs <- do- -- The new metas should have the same dependencies as the original meta- mv <- lookupMeta m-- -- Only generate metas for the arguments v' is actually applied to- -- (in case of partial application)- TelV tel0 _ <- telView b- let tel = telFromList $ take (length vs) $ telToList tel0- b' = telePi tel (sort Prop)- withMetaInfo' mv $ do- tel <- getContextTelescope- -- important: create the meta in the same environment as the original meta- newArgsMetaCtx b' tel us- noConstraints $ assignV DirEq m us (v' `apply` margs)- return True- `catchError` \_ -> return False-- inertApplication :: Type -> Term -> TCM (Maybe (Term, Type, Args))- inertApplication a v =- case ignoreSharing v of- Con c vs -> fmap (\ b -> (Con c [], b, vs)) <$> dataOrRecordType c a- Def d es | Just vs <- allApplyElims es -> do- def <- getConstInfo d- let ans = Just (Def d [], defType def, vs)- return $ case theDef def of- Datatype{} -> ans- Record{} -> ans- Axiom{} -> ans- _ -> Nothing- _ -> return Nothing---- | Given the type of a constructor application the corresponding--- data or record type, applied to its parameters (extracted from the--- given type), is returned.------ Precondition: The type has to correspond to an application of the--- given constructor.-dataOrRecordType- :: ConHead -- ^ Constructor name.- -> Type -- ^ Type of constructor application (must end in data/record).- -> TCM (Maybe Type) -- ^ Type of constructor, applied to pars.-dataOrRecordType c a = fmap (\ (d, b, pars, _) -> b `apply` pars) <$> dataOrRecordType' c a--dataOrRecordType' ::- ConHead -- ^ Constructor name.- -> Type -- ^ Type of constructor application (must end in data/record).- -> TCM (Maybe (QName, Type, Args, Args))- -- ^ Name of data/record type,- -- type of constructor to be applied,- -- data/record parameters, and- -- data indices-dataOrRecordType' c a = do- -- The telescope ends with a datatype or a record.- (d, args) <- do- TelV _ (El _ def) <- telView a- let Def d es = ignoreSharing def- args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es- return (d, args)- def <- theDef <$> getConstInfo d- case def of- Datatype{dataPars = n} -> do- a' <- defType <$> getConInfo c- let (pars, ixs) = genericSplitAt n args- return $ Just (d, a', pars, ixs)- Record{} -> do- a' <- getRecordConstructorType d- return $ Just (d, a', args, [])- _ -> return Nothing---- | Heterogeneous situation.--- @a1@ and @a2@ need to end in same datatype/record.-dataOrRecordTypeHH ::- ConHead -- ^ Constructor name.- -> TypeHH -- ^ Type(s) of constructor application (must end in same data/record).- -> TCM (Maybe TypeHH) -- ^ Type of constructor, instantiated possibly heterogeneously to parameters.-dataOrRecordTypeHH c (Hom a) = fmap Hom <$> dataOrRecordType c a-dataOrRecordTypeHH c (Het a1 a2) = do- r1 <- dataOrRecordType' c a1- r2 <- dataOrRecordType' c a2 -- b2 may have different parameters than b1!- return $ case (r1, r2) of- (Just (d1, b1, pars1, _), Just (d2, b2, pars2, _)) | d1 == d2 -> Just $- -- Andreas, 2011-09-15 if no parameters, we can stay homogeneous- if null pars1 && null pars2 then Hom b1- -- if parameters, go heterogeneous- -- TODO: make this smarter, because parameters could be equal!- else Het (b1 `apply` pars1) (b2 `apply` pars2)- _ -> Nothing--dataOrRecordTypeHH' ::- ConHead- -> TypeHH- -> TCM (Maybe (QName, Type, HomHet (Args, Args)))-dataOrRecordTypeHH' c (Hom a) = do- r <- dataOrRecordType' c a- case r of- Just (d, a', pars, ixs) -> return $ Just (d, a', Hom (pars, ixs))- Nothing -> return $ Nothing-dataOrRecordTypeHH' c (Het a1 a2) = do- r1 <- dataOrRecordType' c a1- r2 <- dataOrRecordType' c a2- case (r1, r2) of- (Just (d1, b1, pars1, ixs1), Just (d2, b2, pars2, ixs2)) | d1 == d2 -> do- -- Same constructors have same types, of course.- unless (b1 == b2) __IMPOSSIBLE__- return $ Just $- if null pars1 && null pars2 && null ixs1 && null ixs2- then (d1, b1, Hom ([], []))- else (d1, b1, Het (pars1, ixs1) (pars2, ixs2))- _ -> return Nothing----- | Return record type identifier if argument is a record type.-isEtaRecordTypeHH :: MonadTCM tcm => TypeHH -> tcm (Maybe (QName, HomHet Args))-isEtaRecordTypeHH (Hom a) = fmap (\ (d, ps) -> (d, Hom ps)) <$> liftTCM (isEtaRecordType a)-isEtaRecordTypeHH (Het a1 a2) = do- m1 <- liftTCM $ isEtaRecordType a1- m2 <- liftTCM $ isEtaRecordType a2- case (m1, m2) of- (Just (d1, as1), Just (d2, as2)) | d1 == d2 -> return $ Just (d1, Het as1 as2)- _ -> return Nothing----- | Views an expression (pair) as type shape. Fails if not same shape.-data ShapeView a- = PiSh (I.Dom a) (I.Abs a)- | FunSh (I.Dom a) a- | DefSh QName -- ^ data/record- | VarSh Nat -- ^ neutral type- | LitSh Literal -- ^ built-in type- | SortSh- | MetaSh -- ^ some meta- | ElseSh -- ^ not a type or not definitely same shape- deriving (Typeable, Show, Eq, Ord, Functor)---- | Return the type and its shape. Expects input in (u)reduced form.-shapeView :: Type -> Unify (Type, ShapeView Type)-shapeView t = do- return . (t,) $ case ignoreSharing $ unEl t of- Pi a (NoAbs _ b) -> FunSh a b- Pi a (Abs x b) -> PiSh a (Abs x b)- Def d vs -> DefSh d- Var x vs -> VarSh x- Lit l -> LitSh l- Sort s -> SortSh- MetaV m vs -> MetaSh- _ -> ElseSh---- | Return the reduced type(s) and the common shape.-shapeViewHH :: TypeHH -> Unify (TypeHH, ShapeView TypeHH)-shapeViewHH (Hom a) = do- (a, sh) <- shapeView a- return (Hom a, fmap Hom sh)-shapeViewHH (Het a1 a2) = do- (a1, sh1) <- shapeView a1- (a2, sh2) <- shapeView a2- return . (Het a1 a2,) $ case (sh1, sh2) of-- (PiSh d1@(Dom i1 a1) b1, PiSh (Dom i2 a2) b2)- | argInfoHiding i1 == argInfoHiding i2 ->- PiSh (Dom (setRelevance (min (getRelevance i1) (getRelevance i2)) i1)- (Het a1 a2))- (Abs (absName b1) (Het (absBody b1) (absBody b2)))-- (FunSh d1@(Dom i1 a1) b1, FunSh (Dom i2 a2) b2)- | argInfoHiding i1 == argInfoHiding i2 ->- FunSh (Dom (setRelevance (min (getRelevance i1) (getRelevance i2)) i1)- (Het a1 a2))- (Het b1 b2)-- (DefSh d1, DefSh d2) | d1 == d2 -> DefSh d1- (VarSh x1, VarSh x2) | x1 == x2 -> VarSh x1- (LitSh l1, LitSh l2) | l1 == l2 -> LitSh l1- (SortSh, SortSh) -> SortSh- _ -> ElseSh -- not types, or metas, or not same shape----- | @telViewUpToHH n t@ takes off the first @n@ function types of @t@.--- Takes off all if $n < 0$.-telViewUpToHH :: Int -> TypeHH -> Unify TelViewHH-telViewUpToHH 0 t = return $ TelV EmptyTel t-telViewUpToHH n t = do- (t, sh) <- shapeViewHH =<< liftTCM (traverse reduce t)- case sh of- PiSh a b -> absV a (absName b) <$> telViewUpToHH (n-1) (absBody b)- FunSh a b -> absV a underscore <$> telViewUpToHH (n-1) (raise 1 b)- _ -> return $ TelV EmptyTel t- where- absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t+{-# LANGUAGE DoAndIfThenElse #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE StandaloneDeriving #-}++module Agda.TypeChecking.Rules.LHS.Unify+ ( UnificationResult+ , UnificationResult'(..)+ , unifyIndices+ , unifyIndices_ ) where++import Prelude hiding (null)++import Control.Arrow ((***))+import Control.Applicative hiding (empty)+import Control.Monad+import Control.Monad.Plus+import Control.Monad.State+import Control.Monad.Trans.Maybe+import Control.Monad.Reader+import Control.Monad.Writer (WriterT(..), MonadWriter(..), Monoid(..))++import Data.IntMap (IntMap)+import qualified Data.IntMap as IntMap+import Data.Map (Map)+import qualified Data.Map as Map+import Data.Monoid+import Data.List hiding (null, sort)+import Data.IntSet (IntSet)+import qualified Data.IntSet as IntSet++import Data.Typeable (Typeable)+import Data.Foldable (Foldable)+import Data.Traversable (Traversable,traverse)++import Agda.Interaction.Options (optInjectiveTypeConstructors)++import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.Syntax.Literal+import Agda.Syntax.Position++import Agda.TypeChecking.Monad+import qualified Agda.TypeChecking.Monad.Benchmark as Bench+import Agda.TypeChecking.Monad.Exception+import Agda.TypeChecking.Monad.Builtin (constructorForm)+import Agda.TypeChecking.Conversion -- equalTerm+import Agda.TypeChecking.Constraints+import Agda.TypeChecking.Datatypes+import Agda.TypeChecking.DropArgs+import Agda.TypeChecking.Level (reallyUnLevelView)+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Pretty+import Agda.TypeChecking.SizedTypes (compareSizes)+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Substitute.Pattern+import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Free+import Agda.TypeChecking.Records+import Agda.TypeChecking.MetaVars (assignV, newArgsMetaCtx)+import Agda.TypeChecking.EtaContract+import Agda.Interaction.Options (optInjectiveTypeConstructors, optWithoutK)++import Agda.TypeChecking.Rules.LHS.Problem hiding (Substitution)+-- import Agda.TypeChecking.SyntacticEquality++import Agda.Utils.Except+ ( Error(noMsg, strMsg)+ , MonadError(catchError, throwError)+ )+import Agda.Utils.Either+import Agda.Utils.Functor+import Agda.Utils.List+import Agda.Utils.ListT+import Agda.Utils.Maybe+import Agda.Utils.Monad+import Agda.Utils.Null+import Agda.Utils.Permutation+import Agda.Utils.Size++#include "undefined.h"+import Agda.Utils.Impossible++-- | Result of 'unifyIndices'.+type UnificationResult = UnificationResult' (Telescope, PatternSubstitution)++data UnificationResult' a+ = Unifies a -- ^ Unification succeeded.+ | NoUnify TCErr -- ^ Terms are not unifiable.+ | DontKnow TCErr -- ^ Some other error happened, unification got stuck.+ deriving (Typeable, Show, Functor, Foldable, Traversable)++-- | Unify indices.+--+-- In @unifyIndices_ flex a us vs@,+--+-- @a@ is the type eliminated by @us@ and @vs@+-- (usally the type of a constructor),+-- need not be reduced,+--+-- @us@ and @vs@ are the argument lists to unify,+--+-- @flex@ is the set of flexible (instantiable) variabes in @us@ and @vs@.+--+-- The result is the most general unifier of @us@ and @vs@.+unifyIndices_ :: MonadTCM tcm+ => Telescope+ -> FlexibleVars+ -> Type+ -> Args+ -> Args+ -> tcm (Telescope, PatternSubstitution)+unifyIndices_ tel flex a us vs = liftTCM $ do+ r <- unifyIndices tel flex a us vs+ case r of+ Unifies sub -> return sub+ DontKnow err -> throwError err+ NoUnify err -> throwError err++unifyIndices :: MonadTCM tcm+ => Telescope+ -> FlexibleVars+ -> Type+ -> Args+ -> Args+ -> tcm UnificationResult+unifyIndices tel flex a us vs = liftTCM $ Bench.billTo [Bench.Typing, Bench.CheckLHS, Bench.UnifyIndices] $ do+ reportSDoc "tc.lhs.unify" 10 $+ sep [ text "unifyIndices"+ , nest 2 $ prettyTCM tel+ , nest 2 $ addCtxTel tel $ text (show flex)+ , nest 2 $ addCtxTel tel $ parens (prettyTCM a)+ , nest 2 $ addCtxTel tel $ prettyList $ map prettyTCM us+ , nest 2 $ addCtxTel tel $ prettyList $ map prettyTCM vs+ ]+ initialState <- initUnifyState tel flex a us vs+ reportSDoc "tc.lhs.unify" 20 $ text "initial unifyState:" <+> prettyTCM initialState+ reportSDoc "tc.lhs.unify" 70 $ text "initial unifyState:" <+> text (show initialState)+ (result,output) <- runUnifyM $ unify initialState rightToLeftStrategy+ return $ fmap (\s -> (varTel s , unifySubst output)) result++----------------------------------------------------+-- Equalities+----------------------------------------------------++data Equality = Equal+ { eqType :: Type+ , eqLeft :: Term+ , eqRight :: Term+ }++instance Reduce Equality where+ reduce' (Equal a u v) = Equal <$> reduce' a <*> reduce' u <*> reduce' v++eqConstructorForm :: Equality -> TCM Equality+eqConstructorForm (Equal a u v) = Equal a <$> constructorForm u <*> constructorForm v++eqUnLevel :: Equality -> TCM Equality+eqUnLevel (Equal a u v) = Equal a <$> unLevel u <*> unLevel v+ where+ unLevel (Level l) = reallyUnLevelView l+ unLevel u = return u++----------------------------------------------------+-- Unify state+----------------------------------------------------++data UnifyState = UState+ { varTel :: Telescope+ , flexVars :: FlexibleVars+ , eqTel :: Telescope+ , eqLHS :: [Term]+ , eqRHS :: [Term]+ } deriving (Show)++instance Reduce UnifyState where+ reduce' (UState var flex eq lhs rhs) =+ UState <$> reduce' var+ <*> pure flex+ <*> reduce' eq+ <*> reduce' lhs+ <*> reduce' rhs++reduceVarTel :: UnifyState -> TCM UnifyState+reduceVarTel s@UState{ varTel = tel } = do+ tel <- reduce tel+ return $ s { varTel = tel }++reduceEqTel :: UnifyState -> TCM UnifyState+reduceEqTel s@UState{ eqTel = tel } = do+ tel <- reduce tel+ return $ s { eqTel = tel }++instance Normalise UnifyState where+ normalise' (UState var flex eq lhs rhs) =+ UState <$> normalise' var+ <*> pure flex+ <*> normalise' eq+ <*> normalise' lhs+ <*> normalise' rhs++normaliseVarTel :: UnifyState -> TCM UnifyState+normaliseVarTel s@UState{ varTel = tel } = do+ tel <- normalise tel+ return $ s { varTel = tel }++normaliseEqTel :: UnifyState -> TCM UnifyState+normaliseEqTel s@UState{ eqTel = tel } = do+ tel <- normalise tel+ return $ s { eqTel = tel }++instance PrettyTCM UnifyState where+ prettyTCM state = text "UnifyState" <+> nest 2 (vcat $+ [ text " variable tel: " <+> prettyTCM gamma+ , text " flexible vars: " <+> prettyTCM (map flexVar $ flexVars state)+ , text " equation tel: " <+> addCtxTel gamma (prettyTCM delta)+ , text " equations: " <+> addCtxTel gamma (prettyList_ (zipWith prettyEquality (eqLHS state) (eqRHS state)))+ ])+ where+ gamma = varTel state+ delta = eqTel state+ prettyEquality x y = prettyTCM x <+> text "=?=" <+> prettyTCM y++initUnifyState :: Telescope -> FlexibleVars -> Type -> Args -> Args -> TCM UnifyState+initUnifyState tel flex a us vs = do+ let lhs = map unArg us+ rhs = map unArg vs+ n = size lhs+ unless (n == size lhs) __IMPOSSIBLE__+ TelV eqTel _ <- telView a+ unless (n == size eqTel) __IMPOSSIBLE__+ reduce $ UState tel flex eqTel lhs rhs++isUnifyStateSolved :: UnifyState -> Bool+isUnifyStateSolved = null . eqTel++varCount :: UnifyState -> Int+varCount = size . varTel++-- | Get the type of the i'th variable in the given state+getVarType :: Int -> UnifyState -> Type+getVarType i s = if i < 0 then __IMPOSSIBLE__ else unDom $ (flattenTel $ varTel s) !! i++getVarTypeUnraised :: Int -> UnifyState -> Type+getVarTypeUnraised i s = if i < 0 then __IMPOSSIBLE__ else snd . unDom $ (telToList $ varTel s) !! i++eqCount :: UnifyState -> Int+eqCount = size . eqTel++-- | Get the k'th equality in the given state. The left- and right-hand sides+-- of the equality live in the varTel telescope, and the type of the equality+-- lives in the varTel++eqTel telescope+getEquality :: Int -> UnifyState -> Equality+getEquality k UState { eqTel = eqs, eqLHS = lhs, eqRHS = rhs } =+ if k < 0 then __IMPOSSIBLE__ else+ Equal (unDom $ (flattenTel eqs) !! k) (lhs !! k) (rhs !! k)++-- | As getEquality, but with the unraised type+getEqualityUnraised :: Int -> UnifyState -> Equality+getEqualityUnraised k UState { eqTel = eqs, eqLHS = lhs, eqRHS = rhs } =+ if k < 0 then __IMPOSSIBLE__ else+ Equal (snd . unDom $ (telToList eqs) !! k) (lhs !! k) (rhs !! k)++getEqInfo :: Int -> UnifyState -> ArgInfo+getEqInfo k UState { eqTel = eqs } =+ if k < 0 then __IMPOSSIBLE__ else domInfo $ telToList eqs !! k++-- | Add a list of equations to the front of the equation telescope+addEqs :: Telescope -> [Term] -> [Term] -> UnifyState -> UnifyState+addEqs tel us vs s =+ s { eqTel = tel `abstract` eqTel s+ , eqLHS = us ++ eqLHS s+ , eqRHS = vs ++ eqRHS s+ }+ where k = size tel++addEq :: Type -> Term -> Term -> UnifyState -> UnifyState+addEq a u v = addEqs (ExtendTel (defaultDom a) (Abs underscore EmptyTel)) [u] [v]++++-- | Instantiate the k'th variable with the given value.+-- Returns Nothing if there is a cycle.+solveVar :: Int -> Term -> UnifyState -> Maybe (UnifyState, PatternSubstitution)+solveVar k u s = case instantiateTelescope (varTel s) k u of+ Nothing -> Nothing+ Just (tel' , sigma , rho) -> Just $ (,sigma) $ UState+ { varTel = tel'+ , flexVars = permuteFlex (reverseP rho) $ flexVars s+ , eqTel = applyPatSubst sigma $ eqTel s+ , eqLHS = applyPatSubst sigma $ eqLHS s+ , eqRHS = applyPatSubst sigma $ eqRHS s+ }+ where+ permuteFlex :: Permutation -> FlexibleVars -> FlexibleVars+ permuteFlex perm =+ mapMaybe $ \(FlexibleVar h k x) ->+ FlexibleVar h k <$> findIndex (x==) (permPicks perm)++applyUnder :: Int -> Telescope -> Term -> Telescope+applyUnder k tel u+ | k < 0 = __IMPOSSIBLE__+ | k == 0 = tel `apply1` u+ | otherwise = case tel of+ EmptyTel -> __IMPOSSIBLE__+ ExtendTel a tel' -> ExtendTel a $+ Abs (absName tel') $ applyUnder (k-1) (absBody tel') u++dropAt :: Int -> [a] -> [a]+dropAt _ [] = __IMPOSSIBLE__+dropAt k (x:xs)+ | k < 0 = __IMPOSSIBLE__+ | k == 0 = xs+ | otherwise = x : dropAt (k-1) xs++-- | Solve the k'th equation with the given value, which can depend on+-- regular variables but not on other equation variables.+solveEq :: Int -> Term -> UnifyState -> UnifyState+solveEq k u s = s+ { eqTel = applyUnder k (eqTel s) (raise k u)+ , eqLHS = dropAt k $ eqLHS s+ , eqRHS = dropAt k $ eqRHS s+ }+ where+++-- | Simplify the k'th equation with the given value (which can depend on other+-- equation variables). Returns Nothing if there is a cycle.+simplifyEq :: Int -> Term -> UnifyState -> Maybe UnifyState+simplifyEq k u s = case instantiateTelescope (eqTel s) k u of+ Nothing -> Nothing+ Just (tel' , sigma , rho) -> Just $ UState+ { varTel = varTel s+ , flexVars = flexVars s+ , eqTel = tel'+ , eqLHS = permute rho $ eqLHS s+ , eqRHS = permute rho $ eqRHS s+ }++----------------------------------------------------+-- Unification strategies+----------------------------------------------------++data UnifyStep+ = Deletion+ { deleteAt :: Int+ , deleteType :: Type+ , deleteLeft :: Term+ , deleteRight :: Term+ }+ | Solution+ { solutionAt :: Int+ , solutionType :: Type+ , solutionVar :: Int+ , solutionTerm :: Term+ }+ | Injectivity+ { injectAt :: Int+ , injectType :: Type+ , injectDatatype :: QName+ , injectParameters :: Args+ , injectIndices :: Args+ , injectConstructor :: ConHead+ , injectArgsLeft :: Args+ , injectArgsRight :: Args+ }+ | Conflict+ { conflictAt :: Int+ , conflictDatatype :: QName+ , conflictParameters :: Args+ , conflictConLeft :: ConHead+ , conflictConRight :: ConHead+ }+ | Cycle+ { cycleAt :: Int+ , cycleDatatype :: QName+ , cycleParameters :: Args+ , cycleVar :: Int+ , cycleOccursIn :: Term+ }+ | EtaExpandVar+ { expandVar :: FlexibleVar Int+ , expandVarRecordType :: QName+ , expandVarParameters :: Args+ }+ | EtaExpandEquation+ { expandAt :: Int+ , expandRecordType :: QName+ , expandParameters :: Args+ }+ | LitConflict+ { litConflictAt :: Int+ , litType :: Type+ , litConflictLeft :: Literal+ , litConflictRight :: Literal+ }+ | StripSizeSuc+ { stripAt :: Int+ , stripArgLeft :: Term+ , stripArgRight :: Term+ }+ | SkipIrrelevantEquation+ { skipIrrelevantAt :: Int+ }+ | TypeConInjectivity+ { typeConInjectAt :: Int+ , typeConstructor :: QName+ , typeConArgsLeft :: Args+ , typeConArgsRight :: Args+ } deriving (Show)++type UnifyStrategy = UnifyState -> ListT TCM UnifyStep++leftToRightStrategy :: UnifyStrategy+leftToRightStrategy s =+ msum (for [0..n-1] $ \k -> completeStrategyAt k s)+ where n = size $ eqTel s++rightToLeftStrategy :: UnifyStrategy+rightToLeftStrategy s =+ msum (for (downFrom n) $ \k -> completeStrategyAt k s)+ where n = size $ eqTel s++completeStrategyAt :: Int -> UnifyStrategy+completeStrategyAt k s = msum $ map (\strat -> strat k s) $+ [ skipIrrelevantStrategy+ , basicUnifyStrategy+ , dataStrategy+ , literalStrategy+ , etaExpandVarStrategy+ , etaExpandEquationStrategy+ , injectiveTypeConStrategy+ , simplifySizesStrategy+ , checkEqualityStrategy+ ]++-- | Returns true if the variables 0..k-1 don't occur in x+isHom :: (Free' a All, Subst Term a) => Int -> a -> Maybe a+isHom n x = do+ guard $ getAll $ runFree (\ (i,_) -> All (i >= n)) IgnoreNot x+ --guard $ null $ allFreeVars x `IntSet.intersection` IntSet.fromAscList [0..k-1]+ return $ raise (-n) x++-- | Checks whether the given term (of the given type) is beta-eta-equivalent+-- to a variable. Returns just the de Bruijn-index of the variable if it is,+-- or nothing otherwise.+isEtaVar :: Term -> Type -> TCM (Maybe Int)+isEtaVar u a = runMaybeT $ isEtaVarG u a Nothing []+ where+ -- Checks whether the term u (of type a) is beta-eta-equivalent to+ -- `Var i es`, and returns i if it is. If the argument mi is `Just i'`,+ -- then i and i' are also required to be equal (else Nothing is returned).+ isEtaVarG :: Term -> Type -> Maybe Int -> [Elim' Int] -> MaybeT TCM Int+ isEtaVarG u a mi es = do+ (u, a) <- liftTCM $ reduce (u, a)+ liftTCM $ reportSDoc "tc.lhs.unify" 80 $ text "isEtaVarG" <+> nest 2 (sep+ [ text "u = " <+> text (show u)+ , text "a = " <+> prettyTCM a+ , text "mi = " <+> text (show mi)+ , text "es = " <+> prettyList (map (text . show) es)+ ])+ case (ignoreSharing u, ignoreSharing $ unEl a) of+ (Var i' es', _) -> do+ guard $ mi == (i' <$ mi)+ b <- liftTCM $ typeOfBV i'+ areEtaVarElims (var i') b es' es+ return i'+ (_, Def d pars) -> do+ guard =<< do liftTCM $ isEtaRecord d+ fs <- liftTCM $ map unArg . recFields . theDef <$> getConstInfo d+ is <- forM fs $ \f -> do+ (_, fa) <- MaybeT $ projectTyped u a f+ isEtaVarG (u `applyE` [Proj f]) fa mi (es++[Proj f])+ case (mi, is) of+ (Just i, _) -> return i+ (Nothing, []) -> mzero+ (Nothing, i:is) -> guard (all (==i) is) >> return i+ (_, Pi dom cod) -> addContext dom $ do+ let u' = raise 1 u `apply` [argFromDom dom $> var 0]+ a' = absBody cod+ mi' = fmap (+1) mi+ es' = (fmap . fmap) (+1) es ++ [Apply $ argFromDom dom $> 0]+ (-1+) <$> isEtaVarG u' a' mi' es'+ _ -> mzero++ -- `areEtaVarElims u a es es'` checks whether the given elims es (as applied+ -- to the term u of type a) are beta-eta-equal to either projections or+ -- variables with de Bruijn indices given by es'.+ areEtaVarElims :: Term -> Type -> Elims -> [Elim' Int] -> MaybeT TCM ()+ areEtaVarElims u a [] [] = return ()+ areEtaVarElims u a [] (_:_) = mzero+ areEtaVarElims u a (_:_) [] = mzero+ areEtaVarElims u a (Proj f : es) (Proj f' : es') = do+ guard $ f == f'+ a <- liftTCM $ reduce a+ (_, fa) <- MaybeT $ projectTyped u a f+ areEtaVarElims (u `applyE` [Proj f]) fa es es'+ -- These two cases can occur only when we're looking at two different+ -- variables (i.e. one of function type and the other of record type) so+ -- it's definitely not the variable we're looking for (or someone is playing+ -- Jedi mind tricks on us)+ areEtaVarElims u a (Proj _ : _ ) (Apply _ : _ ) = mzero+ areEtaVarElims u a (Apply _ : _ ) (Proj _ : _ ) = mzero+ areEtaVarElims u a (Apply v : es) (Apply i : es') = do+ ifNotPiType a (const mzero) $ \dom cod -> do+ _ <- isEtaVarG (unArg v) (unDom dom) (Just $ unArg i) []+ areEtaVarElims (u `apply` [fmap var i]) (cod `absApp` var (unArg i)) es es'++findFlexible :: Int -> FlexibleVars -> Maybe (FlexibleVar Nat)+findFlexible i flex =+ let flex' = map flexVar flex+ flexible i = i `elem` flex'+ in find ((i ==) . flexVar) flex++basicUnifyStrategy :: Int -> UnifyStrategy+basicUnifyStrategy k s = do+ Equal a u v <- liftTCM $ eqUnLevel (getEquality k s)+ ha <- mfromMaybe $ isHom n a+ (mi, mj) <- liftTCM $ addCtxTel (varTel s) $ (,) <$> isEtaVar u ha <*> isEtaVar v ha+ liftTCM $ reportSDoc "tc.lhs.unify" 30 $ text "isEtaVar results: " <+> text (show [mi,mj])+ case (mi, mj) of+ (Just i, Just j)+ | i == j -> return $ Deletion k ha (var i) (var i)+ (Just i, Just j)+ | Just fi <- findFlexible i flex+ , Just fj <- findFlexible j flex -> do+ let choice = chooseFlex fi fj+ liftTCM $ reportSDoc "tc.lhs.unify" 40 $ text "fi = " <+> text (show fi)+ liftTCM $ reportSDoc "tc.lhs.unify" 40 $ text "fj = " <+> text (show fj)+ liftTCM $ reportSDoc "tc.lhs.unify" 40 $ text "chooseFlex: " <+> text (show choice)+ case choice of+ ChooseLeft -> return $ Solution k ha i v+ ChooseRight -> return $ Solution k ha j u+ ExpandBoth -> mzero -- This should be taken care of by etaExpandEquationStrategy+ ChooseEither -> return $ Solution k ha j u+ (Just i, _)+ | Just _ <- findFlexible i flex -> return $ Solution k ha i v+ (_, Just j)+ | Just _ <- findFlexible j flex -> return $ Solution k ha j u+ _ -> mzero+ where+ flex = flexVars s+ n = eqCount s++dataStrategy :: Int -> UnifyStrategy+dataStrategy k s = do+ Equal a u v <- liftTCM $ eqConstructorForm =<< eqUnLevel (getEquality k s)+ case a of+ El _ (Def d es) -> do+ npars <- mcatMaybes $ liftTCM $ getNumberOfParameters d+ let (pars,ixs) = splitAt npars $ fromMaybe __IMPOSSIBLE__ $ allApplyElims es+ hpars <- mfromMaybe $ isHom (eqCount s) pars+ liftTCM $ reportSDoc "tc.lhs.unify" 40 $ addContext (varTel s `abstract` eqTel s) $+ text "Found equation at datatype " <+> prettyTCM d+ <+> text " with (homogeneous) parameters " <+> prettyTCM hpars+ case (u, v) of+ (MetaV m es, Con c vs ) -> do+ us <- mcatMaybes $ liftTCM $ addContext (varTel s) $ instMetaCon m es d hpars c+ return $ Injectivity k a d hpars ixs c us vs+ (Con c us , MetaV m es) -> do+ vs <- mcatMaybes $ liftTCM $ addContext (varTel s) $ instMetaCon m es d hpars c+ return $ Injectivity k a d hpars ixs c us vs+ (Con c us , Con c' vs ) | c == c' -> return $ Injectivity k a d hpars ixs c us vs+ (Con c _ , Con c' _ ) -> return $ Conflict k d hpars c c'+ (Var i [] , v ) -> ifOccursStronglyRigid i v $ return $ Cycle k d hpars i v+ (u , Var j [] ) -> ifOccursStronglyRigid j u $ return $ Cycle k d hpars j u+ _ -> mzero+ _ -> mzero+ where+ ifOccursStronglyRigid i u ret = case occurrence i u of+ StronglyRigid -> ret+ NoOccurrence -> mzero+ _ -> do+ u <- liftTCM $ normalise u+ case occurrence i u of+ StronglyRigid -> ret+ _ -> mzero++ -- Instantiate the meta with a constructor applied to fresh metas+ -- Returns the fresh metas if successful+ instMetaCon :: MetaId -> Elims -> QName -> Args -> ConHead -> TCM (Maybe Args)+ instMetaCon m es d pars c = case allApplyElims es of+ Just us -> ifNotM (asks envAssignMetas) (return Nothing) $ do+ reportSDoc "tc.lhs.unify" 60 $+ text "Trying to instantiate the meta" <+> prettyTCM (MetaV m es) <+>+ text "with the constructor" <+> prettyTCM c <+> text "applied to fresh metas"+ margs <- do+ -- The new metas should have the same dependencies as the original meta+ mv <- lookupMeta m++ ctype <- (`piApply` pars) . defType <$> liftTCM (getConstInfo $ conName c)+ reportSDoc "tc.lhs.unify" 80 $ text "Type of constructor: " <+> prettyTCM ctype+ withMetaInfo' mv $ do+ let perm = mvPermutation mv+ tel <- permuteTel perm <$> getContextTelescope+ reportSDoc "tc.lhs.unify" 100 $ text "Context tel (for new metas): " <+> prettyTCM tel+ -- important: create the meta in the same environment as the original meta+ newArgsMetaCtx ctype tel (mvPermutation mv) us+ reportSDoc "tc.lhs.unify" 80 $ text "Generated meta args: " <+> prettyTCM margs+ noConstraints $ assignV DirEq m us (Con c margs)+ return $ Just margs+ `catchError` \_ -> return Nothing+ Nothing -> return Nothing++checkEqualityStrategy :: Int -> UnifyStrategy+checkEqualityStrategy k s = do+ let Equal a u v = getEquality k s+ n = eqCount s+ ha <- mfromMaybe $ isHom n a+ return $ Deletion k ha u v++literalStrategy :: Int -> UnifyStrategy+literalStrategy k s = do+ eq <- liftTCM $ eqUnLevel $ getEquality k s+ case eq of+ Equal a u@(Lit l1) v@(Lit l2)+ | l1 == l2 -> return $ Deletion k a u u -- TODO: wrong context of a, but does it matter?+ | otherwise -> return $ LitConflict k a l1 l2 -- same problem here+ _ -> mzero++etaExpandVarStrategy :: Int -> UnifyStrategy+etaExpandVarStrategy k s = do+ Equal a u v <- liftTCM $ eqUnLevel (getEquality k s)+ shouldEtaExpand u a s `mplus` shouldEtaExpand v a s+ where+ -- TODO: use IsEtaVar to check if the term is a variable+ shouldEtaExpand :: Term -> Type -> UnifyStrategy+ shouldEtaExpand (Var i es) a s = do+ fi <- mfromMaybe $ findFlexible i (flexVars s)+ liftTCM $ reportSDoc "tc.lhs.unify" 50 $+ text "Found flexible variable " <+> text (show i)+ ps <- mfromMaybe $ allProjElims es+ guard $ not $ null ps+ liftTCM $ reportSDoc "tc.lhs.unify" 50 $+ text "with projections " <+> prettyTCM ps+ let b = getVarTypeUnraised (varCount s - 1 - i) s+ (d, pars) <- mcatMaybes $ liftTCM $ isEtaRecordType b+ liftTCM $ reportSDoc "tc.lhs.unify" 50 $+ text "at record type " <+> prettyTCM d+ return $ EtaExpandVar fi d pars+ shouldEtaExpand _ _ _ = mzero++etaExpandEquationStrategy :: Int -> UnifyStrategy+etaExpandEquationStrategy k s = do+ let Equal a u v = getEqualityUnraised k s+ (d, pars) <- mcatMaybes $ liftTCM $ addCtxTel tel $ isEtaRecordType a+ sing <- liftTCM $ (Right True ==) <$> isSingletonRecord d pars+ projLeft <- liftTCM $ shouldProject u+ projRight <- liftTCM $ shouldProject v+ guard $ sing || projLeft || projRight+ return $ EtaExpandEquation k d pars+ where+ shouldProject :: Term -> TCM Bool+ shouldProject u = case ignoreSharing u of+ Def f es -> usesCopatterns f+ Con c us -> isJust <$> isRecordConstructor (conName c)++ Var _ _ -> return False+ Lam _ _ -> __IMPOSSIBLE__+ Lit _ -> __IMPOSSIBLE__+ Pi _ _ -> __IMPOSSIBLE__+ Sort _ -> __IMPOSSIBLE__+ Level _ -> __IMPOSSIBLE__+ MetaV _ _ -> return False+ DontCare _ -> return False+ Shared _ -> __IMPOSSIBLE__++ tel = varTel s `abstract` telFromList (take k $ telToList $ eqTel s)++simplifySizesStrategy :: Int -> UnifyStrategy+simplifySizesStrategy k s = do+ isSizeName <- liftTCM isSizeNameTest+ let Equal a u v = getEquality k s+ case unEl a of+ Def d _ -> do+ guard $ isSizeName d+ su <- liftTCM $ sizeView u+ sv <- liftTCM $ sizeView v+ case (su, sv) of+ (SizeSuc u, SizeSuc v) -> return $ StripSizeSuc k u v+ (SizeSuc u, SizeInf ) -> return $ StripSizeSuc k u v+ (SizeInf , SizeSuc v) -> return $ StripSizeSuc k u v+ _ -> mzero+ _ -> mzero++injectiveTypeConStrategy :: Int -> UnifyStrategy+injectiveTypeConStrategy k s = do+ injTyCon <- liftTCM $ optInjectiveTypeConstructors <$> pragmaOptions+ guard injTyCon+ eq <- liftTCM $ eqUnLevel $ getEquality k s+ case eq of+ Equal a u@(Def d es) v@(Def d' es') | d == d' -> do+ -- d must be a data, record or axiom+ def <- liftTCM $ getConstInfo d+ guard $ case theDef def of+ Datatype{} -> True+ Record{} -> True+ Axiom{} -> True+ _ -> False+ let us = fromMaybe __IMPOSSIBLE__ $ allApplyElims es+ vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es'+ return $ TypeConInjectivity k d us vs+ _ -> mzero++skipIrrelevantStrategy :: Int -> UnifyStrategy+skipIrrelevantStrategy k s = do+ let i = getEqInfo k s+ guard $ isIrrelevant i+ return $ SkipIrrelevantEquation k+++----------------------------------------------------+-- Actually doing the unification+----------------------------------------------------++data UnifyLogEntry+ = UnificationDone UnifyState+ | UnificationStep UnifyState UnifyStep++type UnifyLog = [UnifyLogEntry]++data UnifyOutput = UnifyOutput+ { unifySubst :: PatternSubstitution+ , unifyLog :: UnifyLog+ }++instance Monoid UnifyOutput where+ mempty = UnifyOutput IdS []+ x `mappend` y = UnifyOutput+ { unifySubst = unifySubst y `composeS` unifySubst x+ , unifyLog = unifyLog x ++ unifyLog y+ }++type UnifyM a = WriterT UnifyOutput TCM a++tellUnifySubst :: PatternSubstitution -> UnifyM ()+tellUnifySubst sub = do+ tell $ UnifyOutput sub []++writeUnifyLog :: UnifyLogEntry -> UnifyM ()+writeUnifyLog x = tell $ UnifyOutput IdS [x]++runUnifyM :: UnifyM a -> TCM (a,UnifyOutput)+runUnifyM = runWriterT++unifyStep :: UnifyState -> UnifyStep -> UnifyM (UnificationResult' UnifyState)++unifyStep s Deletion{ deleteAt = k , deleteType = a , deleteLeft = u , deleteRight = v } =+ liftTCM $ do+ addCtxTel (varTel s) $ noConstraints $ equalTerm a u v+ ifM ((optWithoutK <$> pragmaOptions) `and2M` (not <$> isSet (unEl a)))+ {-then-} (DontKnow <$> withoutKErr)+ {-else-} (Unifies <$> reduceEqTel (solveEq k u s))+ `catchError` \err -> return $ DontKnow err+ where+ withoutKErr = addContext (varTel s) $ typeError_ $ WithoutKError a u u++unifyStep s Solution{ solutionAt = k , solutionType = a , solutionVar = i , solutionTerm = u } = do+ let m = varCount s+ caseMaybeM (trySolveVar (m-1-i) u s) (DontKnow <$> err) $ \(s',sub) -> do+ tellUnifySubst sub+ Unifies <$> liftTCM (reduce $ solveEq k (applyPatSubst sub u) s')+ where+ trySolveVar i u s = case solveVar i u s of+ Just x -> return $ Just x+ Nothing -> do+ u <- liftTCM $ normalise u+ s <- liftTCM $ normaliseVarTel s+ return $ solveVar i u s+ err = addContext (varTel s) $ typeError_ $ UnificationRecursiveEq a i u++unifyStep s (Injectivity k a d pars ixs c lhs rhs) = do+ withoutK <- liftTCM $ optWithoutK <$> pragmaOptions+ ctype <- (`piApply` pars) . defType <$> liftTCM (getConstInfo $ conName c)+ reportSDoc "tc.lhs.unify" 40 $ text "Constructor type: " <+> prettyTCM ctype+ TelV ctel ctarget <- liftTCM $ telView ctype+ (lhs, rhs) <- liftTCM $ reduce (lhs,rhs)+ case ignoreSharing $ unEl ctarget of+ Def d' es | d == d' -> do+ let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es+ cixs = map unArg $ drop (length pars) args+ ceq = Con c $ teleArgs ctel+ let mis = mfilter fastDistinct $ forM ixs $ \ix ->+ case ignoreSharing $ unArg ix of+ Var i [] | i < eqCount s -> Just i+ _ -> Nothing+ case mis of+ Nothing | withoutK -> DontKnow <$> err+ Nothing -> do+ return $ Unifies $+ addEqs ctel (map unArg lhs) (map unArg rhs) $+ solveEq k ceq s+ Just is -> do+ let n = eqCount s+ js = is ++ [n-1-k]+ caseMaybeM (trySplitTelescopeExact js (eqTel s)) (DontKnow <$> err) $+ \(SplitTel tel1 tel2 perm) -> do+ reportSDoc "tc.lhs.unify" 40 $ addCtxTel (varTel s) $ sep $+ [ text "split telescope" <+> prettyTCM (eqTel s) <+> text ("at " ++ show js)+ , text " into" <+> prettyTCM tel1+ , text " and " <+> addCtxTel tel1 (prettyTCM tel2)+ , text " perm =" <+> text (show perm)+ ]+ let n1 = size tel1+ n2 = size tel2+ sub1 = renaming perm :: Substitution -- or renamingR?+ sub2 = (ceq : reverse cixs) ++# raiseS (size ctel)+ Unifies <$> liftTCM (reduceEqTel $ s+ { eqTel = ctel `abstract` (applySubst sub2 tel2)+ , eqLHS = map unArg lhs ++ drop n1 (permute perm $ eqLHS s)+ , eqRHS = map unArg rhs ++ drop n1 (permute perm $ eqRHS s)+ })+ _ -> __IMPOSSIBLE__+ where+ n = eqCount s++ err = addContext (varTel s `abstract` eqTel s) $ typeError_+ (UnifyIndicesNotVars+ a+ (Con c $ raise n lhs)+ (Con c $ raise n rhs)+ ixs)++ trySplitTelescopeExact js tel = case splitTelescopeExact js tel of+ Just x -> return $ Just x+ Nothing -> do+ tel <- liftTCM $ normalise tel+ return $ splitTelescopeExact js tel++unifyStep s Conflict+ { conflictConLeft = c+ , conflictConRight = c'+ } = NoUnify <$> addContext (varTel s)+ (typeError_ $ UnifyConflict c c')++unifyStep s Cycle+ { cycleVar = i+ , cycleOccursIn = u+ } = NoUnify <$> addContext (varTel s)+ (typeError_ $ UnifyCycle i u)++unifyStep s EtaExpandVar{ expandVar = fi, expandVarRecordType = d , expandVarParameters = pars } = do+ delta <- liftTCM $ (`apply` pars) <$> getRecordFieldTypes d+ c <- liftTCM $ getRecordConstructor d+ let nfields = size delta+ (varTel', rho) = expandTelescopeVar (varTel s) (m-1-i) delta c+ projectFlexible = [ FlexibleVar (flexHiding fi) (projFlexKind j) (i+j) | j <- [0..nfields-1] ]+ tellUnifySubst $ rho+ Unifies <$> liftTCM (reduce $ UState+ { varTel = varTel'+ , flexVars = projectFlexible ++ liftFlexibles nfields (flexVars s)+ , eqTel = applyPatSubst rho $ eqTel s+ , eqLHS = applyPatSubst rho $ eqLHS s+ , eqRHS = applyPatSubst rho $ eqRHS s+ })+ where+ i = flexVar fi+ m = varCount s+ n = eqCount s++ projFlexKind :: Int -> FlexibleVarKind+ projFlexKind j = case flexKind fi of+ RecordFlex ks -> fromMaybe ImplicitFlex $ ks !!! j+ ImplicitFlex -> ImplicitFlex+ DotFlex -> DotFlex++ liftFlexible :: Int -> Int -> Maybe Int+ liftFlexible n j = if j == i then Nothing else Just (if j > i then j + (n-1) else j)++ liftFlexibles :: Int -> FlexibleVars -> FlexibleVars+ liftFlexibles n fs = catMaybes $ map (traverse $ liftFlexible n) fs++unifyStep s EtaExpandEquation{ expandAt = k, expandRecordType = d, expandParameters = pars } = do+ delta <- liftTCM $ (`apply` pars) <$> getRecordFieldTypes d+ c <- liftTCM $ getRecordConstructor d+ lhs <- expandKth $ eqLHS s+ rhs <- expandKth $ eqRHS s+ Unifies <$> liftTCM (reduceEqTel $ s+ { eqTel = fst $ expandTelescopeVar (eqTel s) k delta c+ , eqLHS = lhs+ , eqRHS = rhs+ })+ where+ expandKth us = do+ let (us1,v:us2) = fromMaybe __IMPOSSIBLE__ $ splitExactlyAt k us+ vs <- liftTCM $ map unArg . snd <$> etaExpandRecord d pars v+ vs <- liftTCM $ reduce vs+ return $ us1 ++ vs ++ us2++unifyStep s LitConflict+ { litType = a+ , litConflictLeft = l+ , litConflictRight = l'+ } = NoUnify <$> addContext (varTel s)+ (typeError_ $ UnequalTerms CmpEq (Lit l) (Lit l') a)++unifyStep s (StripSizeSuc k u v) = do+ sz <- liftTCM sizeType+ return $ Unifies $ s+ { eqTel = unflattenTel (teleNames $ eqTel s) $+ updateAt k (fmap $ const sz) $ flattenTel $ eqTel s --TODO: is this necessary?+ , eqLHS = updateAt k (const u) $ eqLHS s+ , eqRHS = updateAt k (const v) $ eqRHS s+ }++unifyStep s (SkipIrrelevantEquation k) = do+ let lhs = eqLHS s+ return $ Unifies $ solveEq k (DontCare (lhs !! k)) s++unifyStep s (TypeConInjectivity k d us vs) = do+ dtype <- defType <$> liftTCM (getConstInfo d)+ TelV dtel _ <- liftTCM $ telView dtype+ let n = eqCount s+ m = size dtel+ deq = Def d $ map Apply $ teleArgs dtel+ Unifies <$> liftTCM (reduceEqTel $ s+ { eqTel = dtel `abstract` applyUnder k (eqTel s) (raise k deq)+ , eqLHS = map unArg us ++ dropAt k (eqLHS s)+ , eqRHS = map unArg vs ++ dropAt k (eqRHS s)+ })++unify :: UnifyState -> UnifyStrategy -> UnifyM (UnificationResult' UnifyState)+unify s strategy = if isUnifyStateSolved s+ then return $ Unifies s+ else tryUnifyStepsAndContinue (strategy s)+ where+ tryUnifyStepsAndContinue :: ListT TCM UnifyStep -> UnifyM (UnificationResult' UnifyState)+ tryUnifyStepsAndContinue steps = do+ x <- foldListT tryUnifyStep failure $ liftListT lift steps+ case x of+ Unifies s' -> unify s' strategy+ NoUnify err -> return $ NoUnify err+ DontKnow err -> return $ DontKnow err++ tryUnifyStep :: UnifyStep+ -> UnifyM (UnificationResult' UnifyState)+ -> UnifyM (UnificationResult' UnifyState)+ tryUnifyStep step fallback = do+ reportSDoc "tc.lhs.unify" 20 $ text "trying unifyStep" <+> text (show step)+ x <- unifyStep s step+ case x of+ Unifies s' -> do+ reportSDoc "tc.lhs.unify" 20 $ text "unifyStep successful."+ reportSDoc "tc.lhs.unify" 20 $ text "new unifyState:" <+> prettyTCM s'+ writeUnifyLog $ UnificationStep s step+ return x+ NoUnify{} -> return x+ DontKnow err -> do+ y <- fallback+ case y of+ DontKnow{} -> return x+ _ -> return y++ failure :: UnifyM (UnificationResult' a)+ failure = do+ err <- addContext (varTel s) $ typeError_ $+ UnificationStuck (eqTel s) (eqLHS s) (eqRHS s)+ return $ DontKnow err++isSet :: Term -> TCM Bool+isSet a = do+ a <- reduce a+ case ignoreSharing a of+ Def d es -> do+ let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es+ Defn{ defType = dtype, theDef = def } <- getConstInfo d+ reportSDoc "tc.lhs.unify.isset" 50 $ text "Checking whether " <+> prettyTCM a <+> text " is a set..."+ case def of+ Datatype{ dataPars = npars, dataCons = cs, dataMutual = [], dataAbstr = ConcreteDef } -> do+ let pars = take npars args+ TelV tel _ = telView' $ dtype `piApply` pars+ ixtypes = map (unEl . unDom) $ flattenTel tel+ ifNotM (allM ixtypes isSet) (return False) $ allM cs $ \c -> do+ ctype <- defType <$> getConstInfo c+ checkConstructorType d $ ctype `piApply` pars+ Record{ recConType = ctype } -> checkConstructorType d $ ctype `piApply` args+ _ -> return False+ _ -> return False+ where+ checkConstructorType :: QName -> Type -> TCM Bool+ checkConstructorType d a = do+ let TelV tel _ = telView' a+ allM (map (unEl . unDom) $ flattenTel tel) $ \b -> case ignoreSharing b of+ Def d' _ | d == d' -> return True+ _ -> isSet b
src/full/Agda/TypeChecking/Rules/Record.hs view
@@ -3,11 +3,13 @@ module Agda.TypeChecking.Rules.Record where import Control.Applicative+import Control.Monad import Data.Maybe import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Common-import Agda.Syntax.Internal as I+import Agda.Syntax.Internal+import Agda.Syntax.Internal.Pattern import Agda.Syntax.Position import qualified Agda.Syntax.Info as Info @@ -22,7 +24,7 @@ import Agda.TypeChecking.CompiledClause.Compile import Agda.TypeChecking.Rules.Data ( bindParameters, fitsIn )-import Agda.TypeChecking.Rules.Term ( isType_, ConvColor(..) )+import Agda.TypeChecking.Rules.Term ( isType_ ) import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl (checkDecl) import Agda.Utils.Size@@ -56,13 +58,14 @@ :: Info.DefInfo -- ^ Position and other info. -> QName -- ^ Record type identifier. -> Maybe (Ranged Induction) -- ^ Optional: (co)inductive declaration.- -> Maybe A.QName -- ^ Optional: constructor name.+ -> Maybe Bool+ -> Maybe QName -- ^ Optional: constructor name. -> [A.LamBinding] -- ^ Record parameters. -> A.Expr -- ^ Approximate type of constructor (@fields@ -> Set). -- Does not include record parameters. -> [A.Field] -- ^ Field signatures. -> TCM ()-checkRecDef i name ind con ps contel fields =+checkRecDef i name ind eta con ps contel fields = traceCall (CheckRecDef (getRange name) (qnameName name) ps fields) $ do reportSDoc "tc.rec" 10 $ vcat [ text "checking record def" <+> prettyTCM name@@ -123,18 +126,20 @@ -- Add record type to signature. reportSDoc "tc.rec" 15 $ text "adding record type to signature" - let getName :: A.Declaration -> [A.Arg QName]+ etaenabled <- etaEnabled++ let getName :: A.Declaration -> [Arg QName] getName (A.Field _ x arg) = [x <$ arg] getName (A.ScopedDecl _ [f]) = getName f getName _ = [] - fs = concatMap (convColor . getName) fields+ fs = concatMap getName fields -- indCo is what the user wrote: inductive/coinductive/Nothing. -- We drop the Range. indCo = rangedThing <$> ind -- A constructor is inductive unless declared coinductive. conInduction = fromMaybe Inductive indCo- haveEta = conInduction == Inductive+ haveEta = maybe (Inferred $ conInduction == Inductive && etaenabled) Specified eta con = ConHead conName conInduction $ map unArg fs reportSDoc "tc.rec" 30 $ text "record constructor is " <+> text (show con)@@ -147,7 +152,7 @@ , recFields = fs , recTel = ftel -- addConstant adds params! , recAbstr = Info.defAbstract i- , recEtaEquality = haveEta+ , recEtaEquality' = haveEta , recInduction = indCo -- we retain the original user declaration, in case the record turns out to be recursive -- determined by positivity checker: , recRecursive = False@@ -165,9 +170,9 @@ , conAbstr = Info.defAbstract conInfo , conInd = conInduction }- -- Declare the constructor as eligible for instance search- addNamedInstance conName name+ when (Info.defInstance i == InstanceDef) $ do+ addNamedInstance conName name -- Check that the fields fit inside the sort contype `fitsIn` s@@ -206,24 +211,20 @@ ] -} - let -- name of record module- m = qnameToMName name- -- make record parameters hidden and non-stricts irrelevant- htel = map hideAndRelParams $ telToList tel- info = setRelevance recordRelevance defaultArgInfo- tel' = telFromList $ htel ++ [Dom info ("r", rect)]- ext (Dom info (x, t)) = addCtx x (Dom info t)+ let info = setRelevance recordRelevance defaultArgInfo+ addRecordVar = addCtxString "" $ Dom info rect+ -- the record variable has the empty name by intention, see issue 208 - -- Add the record section- -- make record parameters hidden- ctx <- (reverse . map (setHiding Hidden) . take (size tel)) <$> getContext- reportSDoc "tc.rec" 80 $ sep- [ text "visibility-modified record telescope"- , nest 2 $ text "ctx =" <+> prettyTCM ctx- ]- escapeContext (size tel) $ flip (foldr ext) ctx $- -- the record variable has the empty name by intention, see issue 208- underAbstraction (Dom info rect) (Abs "" ()) $ \_ -> do+ let m = qnameToMName name -- Name of record module.++ -- Andreas, 2016-02-09 setting all parameters hidden in the record+ -- section telescope changes the semantics, see e.g.+ -- test/Succeed/RecordInParModule.+ -- Ulf, 2016-03-02 but it's the right thing to do (#1759)+ modifyContext (modifyContextEntries hideOrKeepInstance) $ addRecordVar $ do++ -- Add the record section.+ reportSDoc "tc.rec.def" 10 $ sep [ text "record section:" , nest 2 $ sep@@ -236,17 +237,22 @@ ] addSection m - -- Check the types of the fields- -- Andreas, 2013-09-13 all module telescopes count as parameters to the record projections- -- thus, we set all context entries to @Hidden@- modifyContext (modifyContextEntries (setHiding Hidden)) $ do- underAbstraction (Dom info rect) (Abs "" ()) $ \_ -> do+ -- Andreas, 2016-02-09, Issue 1815 (see also issue 1759).+ -- For checking the record declarations, hide the record parameters+ -- and the parameters of the parent modules.+ modifyContext (modifyContextEntries hideOrKeepInstance) $ addRecordVar $ do++ -- Check the types of the fields and the other record declarations. withCurrentModule m $ do++ -- Andreas, 2013-09-13, 2016-01-06.+ -- Argument telescope for the projections: all parameters are hidden.+ -- This means parameters of the parent modules and of the current+ -- record type.+ -- See test/Succeed/ProjectionsTakeModuleTelAsParameters.agda. tel' <- getContextTelescope checkRecordProjections m name con tel' (raise 1 ftel) fields - -- Andreas, 2011-05-19 here was the code "Add record constr..."- -- Andreas 2012-02-13: postpone polarity computation until after positivity check -- computePolarity name @@ -280,7 +286,8 @@ checkProjs ftel1 ftel2 (A.ScopedDecl scope fs' : fs) = setScope scope >> checkProjs ftel1 ftel2 (fs' ++ fs) - checkProjs ftel1 (ExtendTel (Dom ai t) ftel2) (A.Field info x _ : fs) = do+ checkProjs ftel1 (ExtendTel (Dom ai t) ftel2) (A.Field info x _ : fs) =+ traceCall (CheckProjection (getRange info) x t) $ do -- Andreas, 2012-06-07: -- Issue 387: It is wrong to just type check field types again -- because then meta variables are created again.@@ -318,7 +325,6 @@ let finalt = telePi (replaceEmptyName "r" tel) t projname = qualify m $ qnameName x projcall = Var 0 [Proj projname]--- projcall = Def projname [defaultArg $ var 0] rel = getRelevance ai -- the recursive call recurse = checkProjs (abstract ftel1 $ ExtendTel (Dom ai t)@@ -345,6 +351,7 @@ -- Andreas, 2012-01-12: irrelevant projections get translated to -- P.xi (r _ .. x .. _) = irrAxiom {level of t} {t} x -- PROBLEM: because of dropped parameters, cannot refer to t+ -- 2012-04-02: DontCare instead of irrAxiom -- compute body modification for irrelevant projections let bodyMod = case rel of@@ -352,17 +359,6 @@ Irrelevant -> DontCare _ -> __IMPOSSIBLE__ - -- 2012-04-02: DontCare instead of irrAxiom- -- Irrelevant -> do- -- irrAxiom <- primIrrAxiom- -- let sortToLevel (Type l) = l- -- sortToLevel _ = Max [ClosedLevel 0] -- something random here, we don't care a lot- -- levelOfT = Level $ sortToLevel $ getSort t- -- return $ \ n x -> let -- mkArg t = Arg Hidden Relevant $ raise n t- -- -- ERR: Variables of t not in Scope!- -- mkArg t = Arg Hidden Relevant $ Sort Prop- -- in apply irrAxiom [mkArg levelOfT, mkArg (unEl t), Arg NotHidden Irrelevant x]- let -- Andreas, 2010-09-09: comment for existing code -- split the telescope into parameters (ptel) and the type or the record -- (rt) which should be R ptel@@ -380,10 +376,10 @@ cltel = ftel clause = Clause { clauseRange = getRange info , clauseTel = killRange cltel- , clausePerm = idP $ size ftel- , namedClausePats = [Named Nothing <$> conp]+ , namedClausePats = [Named Nothing <$> numberPatVars (idP $ size ftel) conp] , clauseBody = body , clauseType = Just $ Arg ai t+ , clauseCatchall = False } -- Andreas, 2013-10-20@@ -433,13 +429,15 @@ (defaultDefn ai projname (killRange finalt) Function { funClauses = [clause] , funCompiled = Just cc+ , funTreeless = Nothing , funDelayed = NotDelayed , funInv = NotInjective , funAbstr = ConcreteDef , funMutual = [] , funProjection = Just projection+ , funSmashable = True , funStatic = False- , funCopy = False+ , funInline = False , funTerminates = Just True , funExtLam = Nothing , funWith = Nothing@@ -447,6 +445,8 @@ }) { defArgOccurrences = [StrictPos] } computePolarity projname+ when (Info.defInstance info == InstanceDef) $+ addTypedInstance projname finalt recurse
src/full/Agda/TypeChecking/Rules/Term.hs view
@@ -1,12 +1,12 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE LambdaCase #-}-{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE NondecreasingIndentation #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE PatternGuards #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-} #if __GLASGOW_HASKELL__ >= 710 {-# LANGUAGE FlexibleContexts #-}@@ -17,14 +17,18 @@ import Prelude hiding (null) import Control.Applicative hiding (empty)+import Control.Arrow ((&&&), (***), first, second) import Control.Monad.Trans+import Control.Monad.State (get, put) import Control.Monad.Reader import Data.Maybe+import Data.Either (partitionEithers) import Data.Monoid (mappend) import Data.List hiding (sort, null) import qualified Data.Map as Map import Data.Traversable (sequenceA)+import Data.Void import Agda.Interaction.Options import Agda.Interaction.Highlighting.Generate (storeDisambiguatedName)@@ -33,14 +37,20 @@ import Agda.Syntax.Abstract.Views as A import qualified Agda.Syntax.Info as A import Agda.Syntax.Concrete.Pretty () -- only Pretty instances+import Agda.Syntax.Concrete (FieldAssignment'(..), nameFieldA, exprFieldA) import qualified Agda.Syntax.Concrete.Name as C import Agda.Syntax.Common import Agda.Syntax.Fixity import Agda.Syntax.Internal as I import Agda.Syntax.Position import Agda.Syntax.Literal-import Agda.Syntax.Scope.Base (emptyScopeInfo)+import qualified Agda.Syntax.Reflected as R+import Agda.Syntax.Scope.Base ( ThingsInScope, AbstractName+ , emptyScopeInfo+ , exportedNamesInScope)+import Agda.Syntax.Scope.Monad (getNamedScope) import Agda.Syntax.Translation.InternalToAbstract (reify)+import Agda.Syntax.Translation.ReflectedToAbstract (toAbstract_) import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin@@ -60,6 +70,7 @@ import Agda.TypeChecking.Pretty import Agda.TypeChecking.Primitive import Agda.TypeChecking.Quote+import Agda.TypeChecking.Unquote import Agda.TypeChecking.RecordPatterns import Agda.TypeChecking.Records import Agda.TypeChecking.Reduce@@ -67,7 +78,6 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope import Agda.TypeChecking.Rules.LHS (checkLeftHandSide, LHSResult(..))-import Agda.TypeChecking.Unquote import {-# SOURCE #-} Agda.TypeChecking.Empty (isEmptyType) import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl (checkSectionApplication)@@ -81,6 +91,7 @@ ) import Agda.Utils.Functor (($>))+import Agda.Utils.Lens import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Null@@ -105,14 +116,14 @@ -- | Check that an expression is a type without knowing the sort. isType_ :: A.Expr -> TCM Type isType_ e =- traceCall (IsType_ e) $ sharedType <$> do+ traceCall (IsType_ e) $ sharedType =<< do let fallback = isType e =<< do workOnTypes $ newSortMeta case unScope e of A.Fun i (Arg info t) b -> do a <- Dom info <$> isType_ t b <- isType_ b s <- ptsRule a b- let t' = El s $ Pi (convColor a) $ NoAbs underscore b+ let t' = El s $ Pi a $ NoAbs underscore b noFunctionsIntoSize b t' return t' A.Pi _ tel e | null tel -> isType_ e@@ -124,9 +135,8 @@ noFunctionsIntoSize t0 t' return t' A.Set _ n -> do- n <- ifM typeInType (return 0) (return n) return $ sort (mkType n)- A.App i s (Arg (ArgInfo NotHidden r cs) l)+ A.App i s (Arg (ArgInfo NotHidden r) l) | A.Set _ 0 <- unScope s -> ifNotM hasUniversePolymorphism (typeError $ GenericError "Use --universe-polymorphism to enable level arguments to Set")@@ -242,7 +252,7 @@ checkTypedBinding lamOrPi info b $ \ bs -> ret $ telFromList bs -checkTypedBinding :: LamOrPi -> A.ArgInfo -> A.TypedBinding -> (ListTel -> TCM a) -> TCM a+checkTypedBinding :: LamOrPi -> ArgInfo -> A.TypedBinding -> (ListTel -> TCM a) -> TCM a checkTypedBinding lamOrPi info (A.TBind i xs e) ret = do -- Andreas, 2011-04-26 irrelevant function arguments may appear -- non-strictly in the codomain type@@ -250,8 +260,8 @@ allowed <- optExperimentalIrrelevance <$> pragmaOptions t <- modEnv lamOrPi allowed $ isType_ e let info' = mapRelevance (modRel lamOrPi allowed) info- addContext (xs, convColor (Dom info' t) :: I.Dom Type) $- ret $ bindsWithHidingToTel xs (convColor $ Dom info t)+ addContext (xs, Dom info' t) $+ ret $ bindsWithHidingToTel xs (Dom info t) where -- if we are checking a typed lambda, we resurrect before we check the -- types, but do not modify the new context entries@@ -269,7 +279,7 @@ --------------------------------------------------------------------------- -- | Type check a lambda expression.-checkLambda :: I.Arg A.TypedBinding -> A.Expr -> Type -> TCM Term+checkLambda :: Arg A.TypedBinding -> A.Expr -> Type -> TCM Term checkLambda (Arg _ (A.TLet _ lbs)) body target = checkLetBindings lbs (checkExpr body target) checkLambda (Arg info (A.TBind _ xs typ)) body target = do@@ -290,7 +300,7 @@ -- Andreas, 2015-05-28 Issue 1523 -- If argsT is a SizeLt, it must be non-empty to avoid non-termination. -- TODO: do we need to block checkExpr?- checkSizeLtSat $ unDom argsT+ checkSizeLtSat $ unEl $ unDom argsT -- In order to have as much type information as possible when checking -- body, we first unify (xs : argsT) → ?t₁ with the target type. If this@@ -331,7 +341,7 @@ -- Ensure we are not stepping under a possibly non-existing size. -- TODO: do we need to block checkExpr? let a = unDom arg- checkSizeLtSat a+ checkSizeLtSat $ unEl a -- We only need to block the final term on the argument type -- comparison. The body will be blocked if necessary. We still want to -- compare the argument types first, so we spawn a new problem for that@@ -347,7 +357,7 @@ useTargetType _ _ = __IMPOSSIBLE__ -- | Checking a lambda whose domain type has already been checked.-checkPostponedLambda :: I.Arg ([WithHiding Name], Maybe Type) -> A.Expr -> Type -> TCM Term+checkPostponedLambda :: Arg ([WithHiding Name], Maybe Type) -> A.Expr -> Type -> TCM Term checkPostponedLambda args@(Arg _ ([] , _ )) body target = do checkExpr body target checkPostponedLambda args@(Arg info (WithHiding h x : xs, mt)) body target = do@@ -435,29 +445,31 @@ [ text "Adding absurd function" <+> prettyTCM rel <> prettyTCM aux , nest 2 $ text "of type" <+> prettyTCM t' ]- addConstant aux- $ Defn (setRelevance rel info') aux t'- [Nonvariant] [Unused] (defaultDisplayForm aux)- 0 noCompiledRep Nothing+ addConstant aux $+ (\ d -> (defaultDefn (setRelevance rel info') aux t' d)+ { defPolarity = [Nonvariant]+ , defArgOccurrences = [Unused] }) $ Function { funClauses = [Clause { clauseRange = getRange e- , clauseTel = EmptyTel -- telFromList [fmap ("()",) dom]- , clausePerm = Perm 1 [] -- Perm 1 [0]- , namedClausePats = [Arg info' $ Named (Just $ unranged $ absName b) $ VarP "()"]+ , clauseTel = telFromList [fmap ("()",) dom]+ , namedClausePats = [Arg info' $ Named (Just $ unranged $ absName b) $ VarP (0,"()")] , clauseBody = Bind $ NoAbs "()" NoBody , clauseType = Just $ setRelevance rel $ defaultArg $ absBody b+ , clauseCatchall = False } ] , funCompiled = Just Fail+ , funTreeless = Nothing , funDelayed = NotDelayed , funInv = NotInjective , funAbstr = ConcreteDef , funMutual = [] , funProjection = Nothing+ , funSmashable = False -- there is no body anyway, smashing doesn't make sense , funStatic = False- , funCopy = False+ , funInline = False , funTerminates = Just True , funExtLam = Nothing , funWith = Nothing@@ -497,22 +509,92 @@ , text "hidden args: " <+> prettyTCM hid , text "visible args: " <+> prettyTCM notHid ]- abstract (A.defAbstract di) $+ -- Andreas, Ulf, 2016-02-02: We want to postpone type checking an extended lambda+ -- in case the lhs checker failed due to insufficient type info for the patterns.+ -- Issues 480, 1159, 1811.+ mx <- catchIlltypedPatternBlockedOnMeta $ abstract (A.defAbstract di) $ checkFunDef' t info NotDelayed (Just $ ExtLamInfo (length hid) (length notHid)) Nothing di qname cs- return $ Def qname $ map Apply args+ case mx of+ -- Case: type checking succeeded, so we go ahead.+ Nothing -> return $ Def qname $ map Apply args+ -- Case: we could not check the extended lambda because we are blocked on a meta.+ -- In this case, we want to postpone.+ Just (err, x) -> do+ -- Note that we messed up the state a bit. We might want to unroll these state changes.+ -- However, they are harmless:+ -- 1. We created a new mutual block id.+ -- 2. We added a constant without definition.+ -- TODO: roll back the state.++ -- The meta might not be known in the reset state, as it could have been created+ -- somewhere on the way to the type error.+ mm <- Map.lookup x <$> getMetaStore+ case mvInstantiation <$> mm of+ -- Case: we do not know the meta+ Nothing -> do+ -- TODO: mine for a meta in t+ -- For now, we fail.+ throwError err+ -- Case: we know the meta here. It cannot be instantiated yet.+ Just InstV{} -> __IMPOSSIBLE__+ Just InstS{} -> __IMPOSSIBLE__+ Just{} -> do+ -- It has to be blocked on some meta, so we can postpone,+ -- being sure it will be retired when a meta is solved+ -- (which might be the blocking meta in which case we actually make progress).+ postponeTypeCheckingProblem (CheckExpr e t) $ isInstantiatedMeta x where -- Concrete definitions cannot use information about abstract things. abstract ConcreteDef = inConcreteMode abstract AbstractDef = inAbstractMode +-- | Run a computation.+--+-- * If successful, return Nothing.+--+-- * If @IlltypedPattern p a@ is thrown and type @a@ is blocked on some meta @x@+-- return @Just x@. Note that the returned meta might only exists in the state+-- where the error was thrown, thus, be an invalid 'MetaId' in the current state.+--+-- * If another error was thrown or the type @a@ is not blocked, reraise the error.+--+catchIlltypedPatternBlockedOnMeta :: TCM () -> TCM (Maybe (TCErr, MetaId))+catchIlltypedPatternBlockedOnMeta m = (Nothing <$ m) `catchError` \ err -> do+ let reraise = throwError err+ case err of+ TypeError s cl@(Closure sig env scope (IlltypedPattern p a)) ->+ enterClosure cl $ \ _ -> do+ ifBlockedType a (\ x _ -> return $ Just (err, x)) $ {- else -} \ _ -> reraise+ _ -> reraise+ --------------------------------------------------------------------------- -- * Records --------------------------------------------------------------------------- +expandModuleAssigns :: [Either A.Assign A.ModuleName] -> [C.Name] -> TCM A.Assigns+expandModuleAssigns mfs exs = do+ let (fs , ms) = partitionEithers mfs+ exs' = exs \\ map (view nameFieldA) fs+ fs' <- forM exs' $ \ f -> do+ pms <- forM ms $ \ m -> do+ modScope <- getNamedScope m+ let names :: ThingsInScope AbstractName+ names = exportedNamesInScope modScope+ return $+ case Map.lookup f names of+ Just [n] -> Just (m, FieldAssignment f (A.nameExpr n))+ _ -> Nothing++ case catMaybes pms of+ [] -> return Nothing+ [(_, fa)] -> return (Just fa)+ mfas -> typeError $ GenericError $ "Ambiguity: the field " ++ show f ++ " appears in the following modules " ++ show (map fst mfas)+ return (fs ++ catMaybes fs')+ -- | @checkRecordExpression fs e t@ checks record construction against type @t@. -- Precondition @e = Rec _ fs@.-checkRecordExpression :: A.Assigns -> A.Expr -> Type -> TCM Term-checkRecordExpression fs e t = do+checkRecordExpression :: A.RecordAssigns -> A.Expr -> Type -> TCM Term+checkRecordExpression mfs e t = do reportSDoc "tc.term.rec" 10 $ sep [ text "checking record expression" , prettyA e@@ -534,6 +616,7 @@ def <- getRecordDef r let -- Field names with ArgInfo. axs = recordFieldNames def+ exs = filter notHidden axs -- Just field names. xs = map unArg axs -- Record constructor.@@ -543,26 +626,19 @@ , text " ftel= " <> prettyTCM (recTel def) , text $ " con = " ++ show con ]+ -- Compute the list of given fields, decorated with the ArgInfo from the record def.- let arg x e =- case [ a | a <- axs, unArg a == x ] of- [a] -> unnamed e <$ a- _ -> defaultNamedArg e -- we only end up here if the field names are bad- givenFields = [ (x, Just $ arg x e) | (x, e) <- fs ]+ fs <- expandModuleAssigns mfs (map unArg exs)+ -- Compute a list of metas for the missing visible fields. scope <- getScope let re = getRange e meta x = A.Underscore $ A.MetaInfo re scope Nothing (show x)- missingExplicits = [ (unArg a, Just $ unnamed . meta <$> a)- | a <- axs, notHidden a- , notElem (unArg a) (map fst fs) ]- -- In es omitted explicit fields are replaced by underscores- -- (from missingExplicits). Omitted implicit or instance fields+ -- In @es@ omitted explicit fields are replaced by underscores.+ -- Omitted implicit or instance fields -- are still left out and inserted later by checkArguments_.- es <- catMaybes <$> do- -- Default value @Nothing@ will only be used for missing hidden fields.- -- These can be ignored as they will be inserted by @checkArguments_@.- orderFields r Nothing xs $ givenFields ++ missingExplicits+ es <- insertMissingFields r meta fs axs+ args <- checkArguments_ ExpandLast re es (recTel def `apply` vs) >>= \case (args, remainingTel) | null remainingTel -> return args _ -> __IMPOSSIBLE__@@ -573,14 +649,14 @@ where guessRecordType t = do- let fields = map fst fs+ let fields = [ x | Left (FieldAssignment x _) <- mfs ] rs <- findPossibleRecords fields case rs of -- If there are no records with the right fields we might as well fail right away.- [] -> case fs of- [] -> typeError $ GenericError "There are no records in scope"- [(f, _)] -> typeError $ GenericError $ "There is no known record with the field " ++ show f- _ -> typeError $ GenericError $ "There is no known record with the fields " ++ unwords (map show fields)+ [] -> case fields of+ [] -> typeError $ GenericError "There are no records in scope"+ [f] -> typeError $ GenericError $ "There is no known record with the field " ++ show f+ _ -> typeError $ GenericError $ "There is no known record with the fields " ++ unwords (map show fields) -- If there's only one record with the appropriate fields, go with that. [r] -> do def <- getConstInfo r@@ -627,9 +703,9 @@ axs <- getRecordFieldNames r scope <- getScope let xs = map unArg axs- es <- orderFields r Nothing xs $ map (\(x, e) -> (x, Just e)) fs+ es <- orderFields r Nothing xs $ map (\ (FieldAssignment x e) -> (x, Just e)) fs let es' = zipWith (replaceFields name ei) projs es- checkExpr (A.Rec ei [ (x, e) | (x, Just e) <- zip xs es' ]) t+ checkExpr (A.Rec ei [ Left (FieldAssignment x e) | (x, Just e) <- zip xs es' ]) t MetaV _ _ -> do inferred <- inferExpr recexpr >>= reduce . snd case ignoreSharing $ unEl inferred of@@ -639,7 +715,7 @@ coerce v inferred t _ -> typeError $ ShouldBeRecordType t where- replaceFields :: Name -> A.ExprInfo -> I.Arg A.QName -> Maybe A.Expr -> Maybe A.Expr+ replaceFields :: Name -> A.ExprInfo -> Arg A.QName -> Maybe A.Expr -> Maybe A.Expr replaceFields n ei a@(Arg _ p) Nothing | notHidden a = Just $ A.App ei (A.Def p) $ defaultNamedArg $ A.Var n replaceFields _ _ (Arg _ _) Nothing = Nothing@@ -665,10 +741,10 @@ -- -- Checks @e := ((_ : t0) args) : t@. checkArguments' ::- ExpandHidden -> ExpandInstances -> Range -> [I.NamedArg A.Expr] -> Type -> Type ->+ ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type -> (Args -> Type -> TCM Term) -> TCM Term-checkArguments' exph expIFS r args t0 t k = do- z <- runExceptT $ checkArguments exph expIFS r args t0 t+checkArguments' exph r args t0 t k = do+ z <- runExceptT $ checkArguments exph r args t0 t case z of Right (vs, t1) -> k vs t1 -- vs = evaluated args@@ -683,14 +759,14 @@ , nest 2 $ text "checked" <+> prettyList (map prettyTCM us) , nest 2 $ text "remaining" <+> sep [ prettyList (map (prettyA . namedThing . unArg) es) , nest 2 $ text ":" <+> prettyTCM t0 ] ]- postponeTypeCheckingProblem_ (CheckArgs exph expIFS r es t0 t $ \vs t -> k (us ++ vs) t)+ postponeTypeCheckingProblem_ (CheckArgs exph r es t0 t $ \vs t -> k (us ++ vs) t) -- if unsuccessful, postpone checking until t0 unblocks -- | Type check an expression. checkExpr :: A.Expr -> Type -> TCM Term checkExpr e t0 = verboseBracket "tc.term.expr.top" 5 "checkExpr" $- traceCall (CheckExprCall e t0) $ localScope $ doExpandLast $ shared <$> do+ traceCall (CheckExprCall e t0) $ localScope $ doExpandLast $ shared =<< do reportSDoc "tc.term.expr.top" 15 $ text "Checking" <+> sep [ fsep [ prettyTCM e, text ":", prettyTCM t0 ]@@ -720,7 +796,6 @@ , not (hiddenLambdaOrHole h e) -> do x <- freshName rx $ notInScopeName $ absName b- info <- reify info reportSLn "tc.term.expr.impl" 15 $ "Inserting implicit lambda" checkExpr (A.Lam (A.ExprRange re) (domainFree info x) e) t where@@ -734,7 +809,7 @@ A.QuestionMark{} -> True _ -> False - hiddenLHS (A.Clause (A.LHS _ (A.LHSHead _ (a : _)) _) _ _) = notVisible a+ hiddenLHS (A.Clause (A.LHS _ (A.LHSHead _ (a : _)) _) _ _ _) = notVisible a hiddenLHS _ = False -- a meta variable without arguments: type check directly for efficiency@@ -772,7 +847,7 @@ text "against" <+> prettyTCM t coerce (Sort $ Type n) (sort $ sSuc $ Type n) t - A.App i q (Arg ai e)+ e0@(A.App i q (Arg ai e)) | A.Quote _ <- unScope q, visible ai -> do let quoted (A.Def x) = return x quoted (A.Proj x) = return x@@ -786,9 +861,14 @@ | A.QuoteTerm _ <- unScope q -> do (et, _) <- inferExpr (namedThing e)- q <- quoteTerm =<< etaContract =<< normalise et- ty <- el primAgdaTerm- coerce q ty t+ et' <- etaContract =<< normalise et+ let metas = allMetas et'+ case metas of+ _:_ -> postponeTypeCheckingProblem (CheckExpr e0 t) $ andM $ map isInstantiatedMeta metas+ [] -> do+ q <- quoteTerm et'+ ty <- el primAgdaTerm+ coerce q ty t A.Quote _ -> typeError $ GenericError "quote must be applied to a defined name" A.QuoteTerm _ -> typeError $ GenericError "quoteTerm must be applied to a term"@@ -798,7 +878,7 @@ A.ExtendedLam i di qname cs -> checkExtendedLambda i di qname cs e t - A.Lam i (A.DomainFull (A.TypedBindings _ b)) e -> checkLambda (convColor b) e t+ A.Lam i (A.DomainFull (A.TypedBindings _ b)) e -> checkLambda b e t A.Lam i (A.DomainFree info x) e0 -> checkExpr (A.Lam i (domainFree info x) e0) t @@ -823,11 +903,10 @@ a' <- isType_ a b' <- isType_ b s <- ptsRule a' b'- let v = Pi (convColor $ Dom info a') (NoAbs underscore b')+ let v = Pi (Dom info a') (NoAbs underscore b') noFunctionsIntoSize b' $ El s v coerce v (sort s) t A.Set _ n -> do- n <- ifM typeInType (return 0) (return n) coerce (Sort $ mkType n) (sort $ mkType $ n + 1) t A.Prop _ -> do typeError $ GenericError "Prop is no longer supported"@@ -842,33 +921,61 @@ (internalError "DontCare may only appear in irrelevant contexts") e0@(A.QuoteGoal _ x e) -> do- t' <- etaContract =<< normalise t- let metas = allMetas t'- case metas of- _:_ -> postponeTypeCheckingProblem (CheckExpr e0 t') $ andM $ map isInstantiatedMeta metas- [] -> do- quoted <- quoteTerm (unEl t')+ qg <- quoteGoal t+ case qg of+ Left metas -> postponeTypeCheckingProblem (CheckExpr e0 t) $ andM $ map isInstantiatedMeta metas+ Right quoted -> do tmType <- agdaTermType (v, ty) <- addLetBinding defaultArgInfo x quoted tmType (inferExpr e)- blockTerm t' $ coerce v ty t'- e0@(A.QuoteContext _ x e) -> do- ctx <- getContext- thisModule <- currentModule--- Disabled let bindings for now, as there is no way to get your hands on the--- associated terms using the current reflection mechanism.--- lets <- envLetBindings <$> ask--- let letNames = map (quoteName . qualify thisModule) $ Map.keys lets- let contextNames = map (\(Dom _ (nm,_)) -> quoteName $ qualify thisModule nm) ctx- let names = contextNames -- ++ letNames- nameList <- buildList <*> return names- ctxType <- el (list primQName)- (v, ctxType) <- addLetBinding defaultArgInfo x nameList ctxType (inferExpr e)- blockTerm t $ coerce v ctxType t+ coerce v ty t+ e0@(A.QuoteContext _) -> do+ qc <- quoteContext+ case qc of+ Left metas -> postponeTypeCheckingProblem (CheckExpr e0 t) $ andM $ map isInstantiatedMeta metas+ Right quotedContext -> do+ ctxType <- el $ list $ primArg <@> (unEl <$> agdaTypeType)+ coerce quotedContext ctxType t+ e0@(A.Tactic i e xs ys) -> do+ qc <- quoteContext+ qg <- quoteGoal t+ let postpone metas = postponeTypeCheckingProblem (CheckExpr e0 t) $ andM $ map isInstantiatedMeta metas+ case (qc, qg) of+ (Left metas1, Left metas2) -> postpone $ metas1 ++ metas2+ (Left metas , Right _ ) -> postpone $ metas+ (Right _ , Left metas ) -> postpone $ metas+ (Right quotedCtx, Right quotedGoal) -> do+ quotedCtx <- defaultNamedArg <$> reify quotedCtx+ quotedGoal <- defaultNamedArg <$> reify quotedGoal+ let tac = foldl (A.App i) (A.App i (A.App i e quotedCtx) quotedGoal) xs+ result = foldl (A.App i) (A.Unquote i) (defaultNamedArg tac : ys)+ checkExpr result t+ A.ETel _ -> __IMPOSSIBLE__ -- Application _ | Application hd args <- appView e -> checkApplication hd args e t +quoteGoal :: Type -> TCM (Either [MetaId] Term)+quoteGoal t = do+ t' <- etaContract =<< normalise t+ let metas = allMetas t'+ case metas of+ _:_ -> return $ Left metas+ [] -> do+ quotedGoal <- quoteTerm (unEl t')+ return $ Right quotedGoal++quoteContext :: TCM (Either [MetaId] Term)+quoteContext = do+ contextTypes <- map (fmap snd) <$> getContext+ contextTypes <- etaContract =<< normalise contextTypes+ let metas = allMetas contextTypes+ case metas of+ _:_ -> return $ Left metas+ [] -> do+ quotedContext <- buildList <*> mapM quoteDom contextTypes+ return $ Right quotedContext+ -- | @checkApplication hd args e t@ checks an application. -- Precondition: @Application hs args = appView e@ --@@ -916,19 +1023,19 @@ let unblock = isJust <$> getCon -- to unblock, call getCon later again mc <- getCon case mc of- Just c -> checkConstructorApplication e t c $ map convColor args+ Just c -> checkConstructorApplication e t c args Nothing -> postponeTypeCheckingProblem (CheckExpr e t) unblock -- Subcase: non-ambiguous constructor A.Con (AmbQ [c]) -> do -- augment c with record fields, but do not revert to original name con <- getOrigConHead c- checkConstructorApplication e t con $ map convColor args+ checkConstructorApplication e t con args -- Subcase: pattern synonym A.PatternSyn n -> do (ns, p) <- lookupPatternSyn n- p <- setRange (getRange n) . killRange <$> expandPatternSynonyms p -- expand recursive pattern synonyms+ p <- setRange (getRange n) . killRange <$> expandPatternSynonyms (vacuous p) -- expand recursive pattern synonyms -- Expand the pattern synonym by substituting for -- the arguments we have got and lambda-lifting -- over the ones we haven't.@@ -940,33 +1047,102 @@ e' = A.lambdaLiftExpr (map unArg ns) (A.substExpr s p') checkExpr e' t + -- Subcase: macro+ A.Macro x -> do+ -- First go: no parameters+ TelV tel _ <- telView =<< normalise . defType =<< getConstInfo x++ tTerm <- primAgdaTerm+ tName <- primQName++ let argTel = init $ telToList tel -- last argument is the hole term++ -- inspect macro type to figure out if arguments need to be wrapped in quote/quoteTerm+ mkArg :: Type -> NamedArg A.Expr -> NamedArg A.Expr+ mkArg t a | unEl t == tTerm =+ (fmap . fmap)+ (A.App (A.ExprRange (getRange a)) (A.QuoteTerm A.exprNoRange) . defaultNamedArg) a+ mkArg t a | unEl t == tName =+ (fmap . fmap)+ (A.App (A.ExprRange (getRange a)) (A.Quote A.exprNoRange) . defaultNamedArg) a+ mkArg t a | otherwise = a++ makeArgs :: [Dom (String, Type)] -> [NamedArg A.Expr] -> ([NamedArg A.Expr], [NamedArg A.Expr])+ makeArgs [] args = ([], args)+ makeArgs _ [] = ([], [])+ makeArgs tel@(d : _) (arg : args) =+ case insertImplicit arg (map (fmap fst . argFromDom) tel) of+ ImpInsert is -> makeArgs (drop (length is) tel) (arg : args)+ BadImplicits -> (arg : args, []) -- fail later in checkHeadApplication+ NoSuchName{} -> (arg : args, []) -- ditto+ NoInsertNeeded -> first (mkArg (snd $ unDom d) arg :) $ makeArgs (tail tel) args++ (macroArgs, otherArgs) = makeArgs argTel args+ unq = A.App (A.ExprRange $ fuseRange x args) (A.Unquote A.exprNoRange) . defaultNamedArg++ desugared = A.app (unq $ unAppView $ Application (A.Def x) $ macroArgs) otherArgs++ checkExpr desugared t+ -- Subcase: unquote A.Unquote _ | [arg] <- args -> do- e <- unquoteTerm (namedArg arg)- checkExpr e t+ hole <- newValueMeta RunMetaOccursCheck t+ unquoteM (namedArg arg) hole t $ return hole | arg : args <- args -> do- e <- unquoteTerm (namedArg arg)- checkHeadApplication e t e $ map convColor args+ -- Example: unquote v a b : A+ -- Create meta H : (x : X) (y : Y x) → Z x y for the hole+ -- Check a : X, b : Y a+ -- Unify Z a b == A+ -- Run the tactic on H+ tel <- metaTel args -- (x : X) (y : Y x)+ target <- addCtxTel tel newTypeMeta_ -- Z x y+ let holeType = telePi_ tel target -- (x : X) (y : Y x) → Z x y+ (vs, EmptyTel) <- checkArguments_ ExpandLast (getRange args) args tel+ -- a b : (x : X) (y : Y x)+ let rho = reverse (map unArg vs) ++# IdS -- [x := a, y := b]+ equalType (applySubst rho target) t -- Z a b == A+ hole <- newValueMeta RunMetaOccursCheck holeType+ unquoteM (namedArg arg) hole holeType $ return $ apply hole vs where- unquoteTerm qv = do- qv <- checkExpr qv =<< el primAgdaTerm- mv <- runUnquoteM $ unquote qv- case mv of- Left err -> typeError $ UnquoteFailed err- Right v -> do- e <- reifyUnquoted (v :: Term)- reportSDoc "tc.unquote.term" 10 $- vcat [ text "unquote" <+> prettyTCM qv- , nest 2 $ text "-->" <+> prettyA e ]- return (killRange e)+ metaTel :: [Arg a] -> TCM Telescope+ metaTel [] = pure EmptyTel+ metaTel (arg : args) = do+ a <- newTypeMeta_+ let dom = a <$ domFromArg arg+ ExtendTel dom . Abs "x" <$> addCtxString "x" dom (metaTel args) -- Subcase: defined symbol or variable.- _ -> checkHeadApplication e t hd $ map convColor args+ _ -> checkHeadApplication e t hd args +-- | Unquote a TCM computation in a given hole.+unquoteM :: A.Expr -> Term -> Type -> TCM Term -> TCM Term+unquoteM tac hole holeType k = do+ tac <- checkExpr tac =<< (el primAgdaTerm --> el (primAgdaTCM <#> primLevelZero <@> primUnit))+ inFreshModuleIfFreeParams $ unquoteTactic tac hole holeType k++unquoteTactic :: Term -> Term -> Type -> TCM Term -> TCM Term+unquoteTactic tac hole goal k = do+ ok <- runUnquoteM $ unquoteTCM tac hole+ case ok of+ Left (BlockedOnMeta oldState x) -> do+ put oldState+ mi <- Map.lookup x <$> getMetaStore+ (r, unblock) <- case mi of+ Nothing -> do -- fresh meta: need to block on something else!+ otherMetas <- allMetas <$> instantiateFull goal+ case otherMetas of+ [] -> return (noRange, return False) -- Nothing to block on, leave it yellow. Alternative: fail.+ x:_ -> return (noRange, isInstantiatedMeta x) -- range?+ Just mi -> return (getRange mi, isInstantiatedMeta x)+ setCurrentRange r $+ postponeTypeCheckingProblem (UnquoteTactic tac hole goal) unblock+ Left err -> typeError $ UnquoteFailed err+ Right _ -> k+ -- | Turn a domain-free binding (e.g. lambda) into a domain-full one, -- by inserting an underscore for the missing type.-domainFree :: A.ArgInfo -> A.Name -> A.LamBinding+domainFree :: ArgInfo -> A.Name -> A.LamBinding domainFree info x = A.DomainFull $ A.TypedBindings r $ Arg info $ A.TBind r [pure x] $ A.Underscore underscoreInfo where@@ -1030,6 +1206,11 @@ case e of (A.Var x) -> do -- traceCall (InferVar x) $ do (u, a) <- getVarInfo x+ reportSDoc "tc.term.var" 20 $ hsep+ [ text "variable" , text (show x)+ , text "(" , text (show u) , text ")"+ , text "has type:" , text (show a)+ ] when (unusableRelevance $ getRelevance a) $ typeError $ VariableIsIrrelevant x return (apply u, unDom a)@@ -1088,7 +1269,7 @@ -- | Check the type of a constructor application. This is easier than -- a general application since the implicit arguments can be inserted -- without looking at the arguments to the constructor.-checkConstructorApplication :: A.Expr -> Type -> ConHead -> [I.NamedArg A.Expr] -> TCM Term+checkConstructorApplication :: A.Expr -> Type -> ConHead -> [NamedArg A.Expr] -> TCM Term checkConstructorApplication org t c args = do reportSDoc "tc.term.con" 50 $ vcat [ text "entering checkConstructorApplication"@@ -1102,7 +1283,7 @@ if paramsGiven then fallback else do reportSDoc "tc.term.con" 50 $ text "checkConstructorApplication: no parameters explicitly supplied, continuing..." cdef <- getConInfo c- let Constructor{conData = d} = theDef cdef+ let Constructor{conData = d, conPars = npars} = theDef cdef reportSDoc "tc.term.con" 50 $ nest 2 $ text "d =" <+> prettyTCM d -- Issue 661: t maybe an evaluated form of d .., so we evaluate d -- as well and then check wether we deal with the same datatype@@ -1118,9 +1299,8 @@ -- these additional parameters could be a module parameter telescope. -- Since we get the constructor type ctype from d but the parameters -- from t = Def d' vs, we drop the additional parameters.- npars <- getNumberOfParameters d npars' <- getNumberOfParameters d'- caseMaybe (sequenceA $ List2 (npars, npars')) fallback $ \ (List2 (n,n')) -> do+ caseMaybe (sequenceA $ List2 (Just npars, npars')) fallback $ \ (List2 (n, n')) -> do reportSDoc "tc.term.con" 50 $ nest 2 $ text $ "n = " ++ show n reportSDoc "tc.term.con" 50 $ nest 2 $ text $ "n' = " ++ show n' when (n > n') -- preprocessor does not like ', so put on next line@@ -1134,13 +1314,13 @@ let ctype' = ctype `piApply` ps reportSDoc "tc.term.con" 20 $ nest 2 $ text "ctype' =" <+> prettyTCM ctype' -- get the parameter names- TelV ptel _ <- telViewUpTo n ctype+ let TelV ptel _ = telView'UpTo n ctype let pnames = map (fst . unDom) $ telToList ptel -- drop the parameter arguments args' = dropArgs pnames args -- check the non-parameter arguments expandLast <- asks envExpandLast- checkArguments' expandLast ExpandInstanceArguments (getRange c) args' ctype' t $ \us t' -> do+ checkArguments' expandLast (getRange c) args' ctype' t $ \us t' -> do reportSDoc "tc.term.con" 20 $ nest 2 $ vcat [ text "us =" <+> prettyTCM us , text "t' =" <+> prettyTCM t' ]@@ -1185,9 +1365,9 @@ (map (const dummyUnderscore) ps, args) splitArgs (p:ps) (arg : args) | elem mname [Nothing, Just p] =- (arg :) *** id $ splitArgs ps args+ mapFst (arg :) $ splitArgs ps args | otherwise =- (dummyUnderscore :) *** id $ splitArgs ps (arg:args)+ mapFst (dummyUnderscore :) $ splitArgs ps (arg:args) where mname = nameOf (unArg arg) @@ -1205,7 +1385,7 @@ -- -- Precondition: The head @hd@ has to be unambiguous, and there should -- not be any need to insert hidden lambdas.-checkHeadApplication :: A.Expr -> Type -> A.Expr -> [I.NamedArg A.Expr] -> TCM Term+checkHeadApplication :: A.Expr -> Type -> A.Expr -> [NamedArg A.Expr] -> TCM Term checkHeadApplication e t hd args = do kit <- coinductionKit case hd of@@ -1220,7 +1400,7 @@ prettyTCM c <+> text ":" <+> prettyTCM t0 ] expandLast <- asks envExpandLast- checkArguments' expandLast ExpandInstanceArguments (getRange hd) args t0 t $ \vs t1 -> do+ checkArguments' expandLast (getRange hd) args t0 t $ \vs t1 -> do TelV eTel eType <- telView t -- If the expected type @eType@ is a metavariable we have to make -- sure it's instantiated to the proper pi type@@ -1243,12 +1423,6 @@ compareTel t t1 CmpLeq eTel fTel) (A.Def c) | Just c == (nameOfSharp <$> kit) -> do- -- TODO: Handle coinductive constructors under lets.- lets <- envLetBindings <$> ask- unless (Map.null lets) $- typeError $ NotImplemented- "coinductive constructor in the scope of a let-bound variable"- arg <- case args of [a] | getHiding a == NotHidden -> return $ namedArg a _ -> typeError $ GenericError $ show c ++ " must be applied to exactly one argument."@@ -1256,18 +1430,11 @@ -- The name of the fresh function. i <- fresh :: TCM Int let name = filter (/= '_') (show $ A.nameConcrete $ A.qnameName c) ++ "-" ++ show i- c' <- setRange (getRange c) <$>- liftM2 qualify (killRange <$> currentModule)- (freshName_ name) kit <- coinductionKit' let flat = nameOfFlat kit inf = nameOfInf kit - -- The application of the fresh function to the relevant- -- arguments.- e' <- Def c' . map Apply <$> getContextArgs- -- Add the type signature of the fresh function to the -- signature. -- To make sure we can type check the generated function we have to make@@ -1280,49 +1447,58 @@ a <- newValueMeta RunMetaOccursCheck (sort $ Type lv) return $ El (Type lv) $ Def inf [Apply $ setHiding Hidden $ defaultArg l, Apply $ defaultArg a] - i <- currentOrFreshMutualBlock- tel <- getContextTelescope- -- If we are in irrelevant position, add definition irrelevantly.- -- TODO: is this sufficient?- rel <- asks envRelevance- addConstant c' =<< do- let ai = setRelevance rel defaultArgInfo- useTerPragma $- Defn ai c' forcedType [] [] (defaultDisplayForm c') i noCompiledRep Nothing $- emptyFunction+ wrapper <- inFreshModuleIfFreeParams $ do+ c' <- setRange (getRange c) <$>+ liftM2 qualify (killRange <$> currentModule)+ (freshName_ name) - -- Define and type check the fresh function.- ctx <- getContext >>= mapM (\d -> flip Dom (unDom d) <$> reify (domInfo d))- let info = A.mkDefInfo (A.nameConcrete $ A.qnameName c') defaultFixity'- PublicAccess ConcreteDef noRange- pats = map (\ (Dom info (n, _)) -> Arg info $ Named Nothing $ A.VarP n) $- reverse ctx- core = A.LHSProj { A.lhsDestructor = flat- , A.lhsPatsLeft = []- , A.lhsFocus = defaultNamedArg $ A.LHSHead c' pats- , A.lhsPatsRight = [] }- clause = A.Clause (A.LHS (A.LHSRange noRange) core [])- (A.RHS arg)- []+ -- Define and type check the fresh function.+ rel <- asks envRelevance+ let info = A.mkDefInfo (A.nameConcrete $ A.qnameName c') noFixity'+ PublicAccess ConcreteDef noRange+ core = A.LHSProj { A.lhsDestructor = flat+ , A.lhsPatsLeft = []+ , A.lhsFocus = defaultNamedArg $ A.LHSHead c' []+ , A.lhsPatsRight = [] }+ clause = A.Clause (A.LHS (A.LHSRange noRange) core [])+ (A.RHS arg)+ [] False + i <- currentOrFreshMutualBlock++ -- If we are in irrelevant position, add definition irrelevantly.+ -- TODO: is this sufficient?+ addConstant c' =<< do+ let ai = setRelevance rel defaultArgInfo+ useTerPragma $+ (defaultDefn ai c' forcedType emptyFunction)+ { defMutual = i }++ checkFunDef NotDelayed info c' [clause]++ reportSDoc "tc.term.expr.coind" 15 $ do+ def <- theDef <$> getConstInfo c'+ vcat $+ [ text "The coinductive wrapper"+ , nest 2 $ prettyTCM rel <> prettyTCM c' <+> text ":"+ , nest 4 $ prettyTCM t+ , nest 2 $ prettyA clause+ , text "The definition is" <+> text (show $ funDelayed def) <>+ text "."+ ]+ return c'++ -- The application of the fresh function to the relevant+ -- arguments.+ e' <- Def wrapper . map Apply <$> getContextArgs+ reportSDoc "tc.term.expr.coind" 15 $ vcat $ [ text "The coinductive constructor application" , nest 2 $ prettyTCM e , text "was translated into the application" , nest 2 $ prettyTCM e'- , text "and the function"- , nest 2 $ prettyTCM rel <> prettyTCM c' <+> text ":"- , nest 4 $ prettyTCM (telePi tel t)- , nest 2 $ prettyA clause <> text "." ] - inTopContext $ checkFunDef NotDelayed info c' [clause]-- reportSDoc "tc.term.expr.coind" 15 $ do- def <- theDef <$> getConstInfo c'- text "The definition is" <+> text (show $ funDelayed def) <>- text "."- blockTerm t $ e' <$ workOnTypes (leqType forcedType t) A.Con _ -> __IMPOSSIBLE__ _ -> defaultResult@@ -1330,10 +1506,14 @@ defaultResult = do (f, t0) <- inferHead hd expandLast <- asks envExpandLast- checkArguments' expandLast ExpandInstanceArguments (getRange hd) args t0 t $ \vs t1 -> do+ checkArguments' expandLast (getRange hd) args t0 t $ \vs t1 -> do coerce (f vs) t1 t -traceCallE :: Error e => Call -> ExceptT e TCM r -> ExceptT e TCM r+traceCallE ::+#if !MIN_VERSION_transformers(0,4,1)+ Error e =>+#endif+ Call -> ExceptT e TCM r -> ExceptT e TCM r traceCallE call m = do z <- lift $ traceCall call $ runExceptT m case z of@@ -1345,14 +1525,14 @@ -- make this happen. Returns the evaluated arguments @vs@, the remaining -- type @t0'@ (which should be a subtype of @t1@) and any constraints @cs@ -- that have to be solved for everything to be well-formed.-checkArguments :: ExpandHidden -> ExpandInstances -> Range -> [I.NamedArg A.Expr] -> Type -> Type ->- ExceptT (Args, [I.NamedArg A.Expr], Type) TCM (Args, Type)+checkArguments :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type ->+ ExceptT (Args, [NamedArg A.Expr], Type) TCM (Args, Type) -- Case: no arguments, do not insert trailing hidden arguments: We are done.-checkArguments DontExpandLast DontExpandInstanceArguments _ [] t0 t1 = return ([], t0)+checkArguments DontExpandLast _ [] t0 t1 = return ([], t0) -- Case: no arguments, but need to insert trailing hiddens.-checkArguments exh expandIFS r [] t0 t1 =+checkArguments exh r [] t0 t1 = traceCallE (CheckArguments r [] t0 t1) $ lift $ do t1' <- unEl <$> reduce t1 implicitArgs (-1) (expand t1') t0@@ -1360,13 +1540,12 @@ expand (Pi (Dom info _) _) Hidden = getHiding info /= Hidden && exh == ExpandLast expand _ Hidden = exh == ExpandLast- expand (Pi (Dom info _) _) Instance = getHiding info /= Instance &&- expandIFS == ExpandInstanceArguments- expand _ Instance = expandIFS == ExpandInstanceArguments+ expand (Pi (Dom info _) _) Instance = getHiding info /= Instance+ expand _ Instance = True expand _ NotHidden = False -- Case: argument given.-checkArguments exh expandIFS r args0@(arg@(Arg info e) : args) t0 t1 =+checkArguments exh r args0@(arg@(Arg info e) : args) t0 t1 = traceCallE (CheckArguments r args0 t0 t1) $ do lift $ reportSDoc "tc.term.args" 30 $ sep [ text "checkArguments"@@ -1408,7 +1587,7 @@ -- 2. We have a function type left, but it is the wrong one. -- Our argument must be implicit, case a) is impossible. -- (Otherwise we would have ran out of function types instead.)- let wrongPi info'+ let wrongPi -- b) We have not inserted any implicits. | null xs = lift $ typeError $ WrongHidingInApplication t0' -- c) We inserted implicits, but did not find his one.@@ -1427,13 +1606,24 @@ -- I do not know what I am doing wrong here. -- Could be extreme order-sensitivity or my abuse of the postponing -- mechanism.+ -- Andreas, 2016-02-02: Ulf says unless there is actually some meta+ -- blocking a postponed type checking problem, we might never retry,+ -- since the trigger for retrying constraints is solving a meta.+ -- Thus, the following naive use violates some invariant. -- if not $ isBinderUsed b -- then postponeTypeCheckingProblem (CheckExpr (namedThing e) a) (return True) else checkExpr (namedThing e) a -- save relevance info' from domain in argument addCheckedArgs us (Arg info' u) $- checkArguments exh expandIFS (fuseRange r e) args (absApp b u) t1- | otherwise -> wrongPi info'+ checkArguments exh (fuseRange r e) args (absApp b u) t1+ | otherwise -> do+ reportSDoc "error" 10 $ nest 2 $ vcat+ [ text $ "info = " ++ show info+ , text $ "info' = " ++ show info'+ , text $ "absName b = " ++ show (absName b)+ , text $ "nameOf e = " ++ show (nameOf e)+ ]+ wrongPi _ -> shouldBePi where addCheckedArgs us u rec =@@ -1447,13 +1637,13 @@ checkArguments_ :: ExpandHidden -- ^ Eagerly insert trailing hidden arguments? -> Range -- ^ Range of application.- -> [I.NamedArg A.Expr] -- ^ Arguments to check.+ -> [NamedArg A.Expr] -- ^ Arguments to check. -> Telescope -- ^ Telescope to check arguments against. -> TCM (Args, Telescope) -- ^ Checked arguments and remaining telescope if successful. checkArguments_ exh r args tel = do z <- runExceptT $- checkArguments exh ExpandInstanceArguments r args (telePi tel typeDontCare) typeDontCare+ checkArguments exh r args (telePi tel typeDontCare) typeDontCare case z of Right (args, t) -> do let TelV tel' _ = telView' t@@ -1471,7 +1661,7 @@ inferExpr' exh e = case e of _ | Application hd args <- appView e, defOrVar hd -> traceCall (InferExpr e) $ do (f, t0) <- inferHead hd- res <- runExceptT $ checkArguments exh ExpandInstanceArguments (getRange hd) (map convColor args) t0 (sort Prop)+ res <- runExceptT $ checkArguments exh (getRange hd) args t0 (sort Prop) case res of Right (vs, t1) -> return (f vs, t1) Left t1 -> fallback -- blocked on type t1@@ -1494,7 +1684,7 @@ checkDontExpandLast :: A.Expr -> Type -> TCM Term checkDontExpandLast e t = case e of _ | Application hd args <- appView e, defOrVar hd ->- traceCall (CheckExprCall e t) $ localScope $ dontExpandLast $ shared <$> do+ traceCall (CheckExprCall e t) $ localScope $ dontExpandLast $ shared =<< do checkApplication hd args e t _ -> checkExpr e t -- note that checkExpr always sets ExpandLast @@ -1503,8 +1693,8 @@ inferOrCheck e mt = case e of _ | Application hd args <- appView e, defOrVar hd -> traceCall (InferExpr e) $ do (f, t0) <- inferHead hd- res <- runErrorT $ checkArguments DontExpandLast ExpandInstanceArguments- (getRange hd) (map convColor args) t0 $+ res <- runErrorT $ checkArguments DontExpandLast+ (getRange hd) args t0 $ maybe (sort Prop) id mt case res of Right (vs, t1) -> maybe (return (f vs, t1))@@ -1536,7 +1726,7 @@ inferExprForWith :: A.Expr -> TCM (Term, Type) inferExprForWith e = do reportSDoc "tc.with.infer" 20 $ text "inferExprforWith " <+> prettyTCM e- reportSLn "tc.with.infer" 80 $ "inferExprforWith " ++ show e+ reportSLn "tc.with.infer" 80 $ "inferExprforWith " ++ show (deepUnscope e) traceCall (InferExpr e) $ do -- With wants type and term fully instantiated! (v, t) <- instantiateFull =<< inferExpr e@@ -1571,7 +1761,7 @@ traceCallCPS_ (CheckLetBinding b) ret $ \ret -> do t <- isType_ t v <- applyRelevanceToContext (getRelevance info) $ checkDontExpandLast e t- addLetBinding (convColor info) x v t ret+ addLetBinding info x v t ret checkLetBinding b@(A.LetPatBind i p e) ret = traceCallCPS_ (CheckLetBinding b) ret $ \ret -> do@@ -1632,9 +1822,12 @@ -- We add all the bindings to the context. foldr (uncurry4 addLetBinding) ret $ zip4 infos xs sigma ts -checkLetBinding (A.LetApply i x modapp rd rm) ret = do+checkLetBinding (A.LetApply i x modapp rd rm _adir) ret = do -- Any variables in the context that doesn't belong to the current -- module should go with the new module.+ -- Example: @f x y = let open M t in u@.+ -- There are 2 @new@ variables, @x@ and @y@, going into the anonynous module+ -- @module _ (x : _) (y : _) = M t@. fv <- getCurrentModuleFreeVars n <- getContextSize let new = n - fv@@ -1646,20 +1839,6 @@ ] checkSectionApplication i x modapp rd rm withAnonymousModule x new ret--- LetOpen is only used for highlighting and has no semantics+-- LetOpen and LetDeclaredVariable are only used for highlighting. checkLetBinding A.LetOpen{} ret = ret--class ConvColor a i where- convColor :: a -> i--instance ConvColor A.ArgInfo I.ArgInfo where- convColor = mapArgInfoColors $ const [] -- "TODO guilhem 5"--instance ConvColor (A.Arg e) (I.Arg e) where- convColor = mapArgInfo convColor--instance ConvColor (A.Dom e) (I.Dom e) where- convColor = mapDomInfo convColor--instance ConvColor a i => ConvColor [a] [i] where- convColor = map convColor+checkLetBinding (A.LetDeclaredVariable _) ret = ret
src/full/Agda/TypeChecking/Rules/Term.hs-boot view
@@ -1,9 +1,9 @@ module Agda.TypeChecking.Rules.Term where -import Agda.Syntax.Common (WithHiding)+import Agda.Syntax.Common (WithHiding, NamedArg, Arg) import qualified Agda.Syntax.Abstract as A-import Agda.Syntax.Internal as I+import Agda.Syntax.Internal import Agda.Syntax.Position import Agda.TypeChecking.Monad.Base import Agda.Utils.Except ( ExceptT )@@ -11,11 +11,14 @@ isType_ :: A.Expr -> TCM Type checkExpr :: A.Expr -> Type -> TCM Term+inferExpr :: A.Expr -> TCM (Term, Type) -checkArguments :: ExpandHidden -> ExpandInstances -> Range -> [NamedArg A.Expr] -> Type -> Type ->+checkArguments :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type -> ExceptT (Args, [NamedArg A.Expr], Type) TCM (Args, Type) -checkArguments' :: ExpandHidden -> ExpandInstances -> Range -> [NamedArg A.Expr] -> Type -> Type ->+checkArguments' :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type -> (Args -> Type -> TCM Term) -> TCM Term -checkPostponedLambda :: I.Arg ([WithHiding Name], Maybe Type) -> A.Expr -> Type -> TCM Term+checkPostponedLambda :: Arg ([WithHiding Name], Maybe Type) -> A.Expr -> Type -> TCM Term++unquoteTactic :: Term -> Term -> Type -> TCM Term -> TCM Term
src/full/Agda/TypeChecking/Serialise.hs view
@@ -1,3 +1,4 @@+ -- Andreas, Makoto, Francesco 2014-10-15 AIM XX: -- -O2 does not have any noticable effect on runtime -- but sabotages cabal repl with -Werror@@ -57,7 +58,7 @@ -- 32-bit machines). Word64 does not have these problems. currentInterfaceVersion :: Word64-currentInterfaceVersion = 20151209 * 10 + 0+currentInterfaceVersion = 20160414 * 10 + 0 -- | Encodes something. To ensure relocatability file paths in -- positions are replaced with module names.@@ -66,10 +67,10 @@ encode a = do collectStats <- hasVerbosity "profile.serialize" 20 fileMod <- sourceToModule- newD@(Dict nD sD iD dD _tD+ newD@(Dict nD sD bD iD dD _tD _nameD _qnameD- nC sC iC dC tC+ nC sC bC iC dC tC nameC qnameC stats _ _) <- liftIO $ emptyDict collectStats@@ -78,6 +79,7 @@ icode a nL <- benchSort $ l nD sL <- benchSort $ l sD+ bL <- benchSort $ l bD iL <- benchSort $ l iD dL <- benchSort $ l dD -- Record reuse statistics.@@ -86,6 +88,7 @@ verboseS "profile.serialize" 10 $ do statistics "Integer" iC statistics "String" sC+ statistics "ByteString" bC statistics "Double" dC statistics "Node" nC statistics "Shared Term" tC@@ -97,7 +100,7 @@ modifyStatistics $ Map.union stats -- Encode hashmaps and root, and compress. bits1 <- Bench.billTo [ Bench.Serialization, Bench.BinaryEncode ] $- return $!! B.encode (root, nL, sL, iL, dL)+ return $!! B.encode (root, nL, sL, bL, iL, dL) let compressParams = G.defaultCompressParams { G.compressLevel = G.bestSpeed , G.compressStrategy = G.huffmanOnlyStrategy@@ -146,6 +149,8 @@ -- input is malformed. The decoder is (intended to be) strict enough -- to ensure that all such errors can be caught by the handler here. + shared <- sharedFun+ (mf, r) <- liftIO $ E.handle (\(E.ErrorCall s) -> noResult s) $ do (ver, s, _) <- return $ runGetState B.get s 0@@ -153,7 +158,7 @@ then noResult "Wrong interface version." else do - ((r, nL, sL, iL, dL), s, _) <-+ ((r, nL, sL, bL, iL, dL), s, _) <- return $ runGetState B.get (G.decompress s) 0 if s /= L.empty -- G.decompress seems to throw away garbage at the end, so@@ -161,9 +166,10 @@ then noResult "Garbage at end." else do - st <- St (ar nL) (ar sL) (ar iL) (ar dL)+ st <- St (ar nL) (ar sL) (ar bL) (ar iL) (ar dL) <$> liftIO H.new <*> return mf <*> return incs+ <*> return shared (r, st) <- runStateT (runExceptT (value r)) st return (Just (modFile st), r)
src/full/Agda/TypeChecking/Serialise/Base.hs view
@@ -63,7 +63,7 @@ lensReuse :: Lens' Int32 FreshAndReuse lensReuse f r = f (farReuse r) <&> \ i -> r { farReuse = i } --- | Two 'A.QName's are equal if their @QNameId@ is equal.+-- | Two 'QName's are equal if their @QNameId@ is equal. type QNameId = [NameId] -- | Computing a qualified names composed ID.@@ -75,6 +75,7 @@ -- Dictionaries which are serialized: { nodeD :: !(HashTable Node Int32) -- ^ Written to interface file. , stringD :: !(HashTable String Int32) -- ^ Written to interface file.+ , bstringD :: !(HashTable L.ByteString Int32) -- ^ Written to interface file. , integerD :: !(HashTable Integer Int32) -- ^ Written to interface file. , doubleD :: !(HashTable Double Int32) -- ^ Written to interface file. -- Dicitionaries which are not serialized, but provide@@ -87,6 +88,7 @@ -- Fresh UIDs and reuse statistics: , nodeC :: !(IORef FreshAndReuse) -- counters for fresh indexes , stringC :: !(IORef FreshAndReuse)+ , bstringC :: !(IORef FreshAndReuse) , integerC :: !(IORef FreshAndReuse) , doubleC :: !(IORef FreshAndReuse) , termC :: !(IORef FreshAndReuse)@@ -112,6 +114,7 @@ <*> H.new <*> H.new <*> H.new+ <*> H.new <*> newIORef farEmpty <*> newIORef farEmpty <*> newIORef farEmpty@@ -119,6 +122,7 @@ <*> newIORef farEmpty <*> newIORef farEmpty <*> newIORef farEmpty+ <*> newIORef farEmpty <*> H.new <*> pure collectStats <*> H.new@@ -133,6 +137,7 @@ data St = St { nodeE :: !(Array Int32 Node) -- ^ Obtained from interface file. , stringE :: !(Array Int32 String) -- ^ Obtained from interface file.+ , bstringE :: !(Array Int32 L.ByteString) -- ^ Obtained from interface file. , integerE :: !(Array Int32 Integer) -- ^ Obtained from interface file. , doubleE :: !(Array Int32 Double) -- ^ Obtained from interface file. , nodeMemo :: !Memo@@ -142,6 +147,7 @@ -- ^ Maps module names to file names. Constructed by the decoder. , includes :: [AbsolutePath] -- ^ The include directories.+ , mkShared :: Term -> Term } -- | Monad used by the encoder.@@ -299,7 +305,7 @@ -- | @icode@ only if thing has not seen before. icodeMemo- :: (Eq a, Ord a, Hashable a)+ :: (Ord a, Hashable a) => (Dict -> HashTable a Int32) -- ^ Memo structure for thing of key @a@. -> (Dict -> IORef FreshAndReuse) -- ^ Statistics. -> a -- ^ Key to the thing.@@ -426,6 +432,12 @@ Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> S Int32 +icode15 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l+ , EmbPrj m, EmbPrj n, EmbPrj o ) =>+ Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> o ->+ S Int32+ icode0 tag = icodeN [tag] icode1 tag a = icodeN . (tag :) =<< sequence [icode a] icode2 tag a b = icodeN . (tag :) =<< sequence [icode a, icode b]@@ -441,6 +453,7 @@ icode12 tag a b c d e f g h i j k l = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l] icode13 tag a b c d e f g h i j k l m = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m] icode14 tag a b c d e f g h i j k l m n = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m, icode n]+icode15 tag a b c d e f g h i j k l m n o = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m, icode n, icode o] -- Andreas, Makoto, AIM XX (2014-10-15):@@ -623,6 +636,14 @@ Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> R o ++valu15 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l+ , EmbPrj m, EmbPrj n, EmbPrj o ) =>+ (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> o -> p) ->+ Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->+ R p+ valu0 z = return z valu1 z a = valu0 z `ap` value a valu2 z a b = valu1 z a `ap` value b@@ -638,3 +659,4 @@ valu12 z a b c d e f g h i j k l = valu11 z a b c d e f g h i j k `ap` value l valu13 z a b c d e f g h i j k l m = valu12 z a b c d e f g h i j k l `ap` value m valu14 z a b c d e f g h i j k l m n = valu13 z a b c d e f g h i j k l m `ap` value n+valu15 z a b c d e f g h i j k l m n o = valu14 z a b c d e f g h i j k l m n `ap` value o
src/full/Agda/TypeChecking/Serialise/Instances.hs view
@@ -12,8 +12,8 @@ import Agda.TypeChecking.Serialise.Instances.Internal () instance EmbPrj Interface where- icod_ (Interface a b c d e f g h i j k) = icode11' a b c d e f g h i j k+ icod_ (Interface a b c d e f g h i j k l m n) = icode14' a b c d e f g h i j k l m n value = vcase valu where- valu [a, b, c, d, e, f, g, h, i, j, k] = valu11 Interface a b c d e f g h i j k- valu _ = malformed+ valu [a, b, c, d, e, f, g, h, i, j, k, l, m, n] = valu14 Interface a b c d e f g h i j k l m n+ valu _ = malformed
src/full/Agda/TypeChecking/Serialise/Instances/Abstract.hs view
@@ -1,15 +1,12 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}--#if __GLASGOW_HASKELL__ >= 710-{-# LANGUAGE FlexibleContexts #-}-#endif+{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Agda.TypeChecking.Serialise.Instances.Abstract where import Control.Applicative+import qualified Data.Map as Map+import qualified Data.Set as Set import Agda.Syntax.Common import qualified Agda.Syntax.Abstract as A@@ -60,11 +57,11 @@ valu _ = malformed instance EmbPrj NameSpace where- icod_ (NameSpace a b) = icode2' a b+ icod_ (NameSpace a b c) = icode3' a b c value = vcase valu where- valu [a, b] = valu2 NameSpace a b- valu _ = malformed+ valu [a, b, c] = valu3 NameSpace a b c+ valu _ = malformed instance EmbPrj WhyInScope where icod_ Defined = icode0'@@ -97,6 +94,7 @@ icod_ FldName = icode0 2 icod_ PatternSynName = icode0 3 icod_ QuotableName = icode0 4+ icod_ MacroName = icode0 5 value = vcase valu where valu [] = valu0 DefName@@ -104,6 +102,7 @@ valu [2] = valu0 FldName valu [3] = valu0 PatternSynName valu [4] = valu0 QuotableName+ valu [5] = valu0 MacroName valu _ = malformed instance EmbPrj LocalVar where@@ -115,75 +114,12 @@ valu [a, b] = valu2 ShadowedVar a b valu _ = malformed --- Only used for pattern synonyms-instance EmbPrj A.Expr where- icod_ (A.Var n) = icode1 0 n- icod_ (A.Def n) = icode1 1 n- icod_ (A.Con ns) = icode1 2 ns- icod_ (A.Lit l) = icode1 3 l- icod_ (A.QuestionMark{}) = icode0 4- icod_ (A.Underscore _) = icode0 5- icod_ (A.App _ a b) = icode2 6 a b- icod_ (A.WithApp _ a b) = icode2 7 a b- icod_ (A.Lam _ a b) = icode2 8 a b- icod_ (A.AbsurdLam _ a) = icode1 9 a- icod_ (A.ExtendedLam _ _ _ _) = __IMPOSSIBLE__- icod_ (A.Pi _ a b) = icode2 11 a b- icod_ (A.Fun _ a b) = icode2 12 a b- icod_ (A.Set _ a) = icode1 13 a- icod_ (A.Prop _) = icode0 14- icod_ (A.Let _ _ _) = __IMPOSSIBLE__- icod_ (A.ETel{}) = __IMPOSSIBLE__- icod_ (A.Rec _ a) = icode1 17 a- icod_ (A.RecUpdate _ a b) = icode2 18 a b- -- Andreas, 2015-07-15, drop scopes embedded in expressions.- -- As expressions are not @unScope@d before serialization,- -- this case is not __IMPOSSIBLE__.- icod_ (A.ScopedExpr a b) = icod_ b -- WAS: icode2 19 a b- icod_ (A.QuoteGoal _ a b) = icode2 20 a b- icod_ (A.QuoteContext _ a b) = icode2 21 a b- icod_ (A.Quote _) = icode0 22- icod_ (A.QuoteTerm _) = icode0 23- icod_ (A.Unquote _) = icode0 24- icod_ (A.DontCare a) = icode1 25 a- icod_ (A.PatternSyn a) = icode1 26 a- icod_ (A.Proj a) = icode1 27 a-- value = vcase valu where- valu [0, a] = valu1 A.Var a- valu [1, a] = valu1 A.Def a- valu [2, a] = valu1 A.Con a- valu [3, a] = valu1 A.Lit a- valu [4] = valu0 (A.QuestionMark emptyMetaInfo 0)- valu [5] = valu0 (A.Underscore emptyMetaInfo)- valu [6, a, b] = valu2 (A.App i) a b- valu [7, a, b] = valu2 (A.WithApp i) a b- valu [8, a, b] = valu2 (A.Lam i) a b- valu [9, a] = valu1 (A.AbsurdLam i) a- valu [11, a, b] = valu2 (A.Pi i) a b- valu [12, a, b] = valu2 (A.Fun i) a b- valu [13, a] = valu1 (A.Set i) a- valu [14] = valu0 (A.Prop i)- valu [17, a] = valu1 (A.Rec i) a- valu [18, a, b] = valu2 (A.RecUpdate i) a b- -- valu [19, a, b] = valu2 A.ScopedExpr a b- valu [20, a, b] = valu2 (A.QuoteGoal i) a b- valu [21, a, b] = valu2 (A.QuoteContext i) a b- valu [22] = valu0 (A.Quote i)- valu [23] = valu0 (A.QuoteTerm i)- valu [24] = valu0 (A.Unquote i)- valu [25, a] = valu1 A.DontCare a- valu [26, a] = valu1 A.PatternSyn a- valu [27, a] = valu1 A.Proj a- valu _ = malformed-- i = ExprRange noRange- instance EmbPrj ConPatInfo where icod_ (ConPatInfo a _) = icod_ a value a = flip ConPatInfo patNoRange <$> value a -instance EmbPrj A.Pattern where+-- Only for pattern synonyms (where a is Void)+instance EmbPrj a => EmbPrj (A.Pattern' a) where icod_ (A.VarP a) = icode1 0 a icod_ (A.ConP a b c) = icode3 1 a b c icod_ (A.DefP _ a b) = icode2 2 a b@@ -193,6 +129,7 @@ icod_ (A.AbsurdP _) = icode0 6 icod_ (A.LitP a) = icode1 7 a icod_ (A.PatternSynP _ a b) = icode2 9 a b+ icod_ (A.RecP _ a) = icode1 10 a value = vcase valu where valu [0, a] = valu1 A.VarP a@@ -204,48 +141,11 @@ valu [6] = valu0 (A.AbsurdP i) valu [7, a] = valu1 (A.LitP) a valu [9, a, b] = valu2 (A.PatternSynP i) a b+ valu [10, a] = valu1 (A.RecP i) a valu _ = malformed i = patNoRange -instance EmbPrj A.LamBinding where- icod_ (A.DomainFree i e) = icode2 0 i e- icod_ (A.DomainFull a) = icode1 1 a-- value = vcase valu where- valu [0, i, e] = valu2 A.DomainFree i e- valu [1, a] = valu1 A.DomainFull a- valu _ = malformed--instance EmbPrj A.LetBinding where- icod_ (A.LetBind _ a b c d) = icode4 0 a b c d- icod_ (A.LetPatBind _ a b ) = icode2 1 a b- icod_ (A.LetApply _ _ _ _ _) = icode0 2- icod_ (A.LetOpen _ _) = icode0 2-- value = vcase valu where- valu [0, a, b, c, d] = valu4 (A.LetBind (LetRange noRange)) a b c d- valu [1, a, b] = valu2 (A.LetPatBind (LetRange noRange)) a b- valu [2] = throwError $ NotSupported- "importing pattern synonym containing let module"- valu _ = malformed--instance EmbPrj A.TypedBindings where- icod_ (A.TypedBindings a b) = icode2' a b-- value = vcase valu where- valu [a, b] = valu2 A.TypedBindings a b- valu _ = malformed--instance EmbPrj A.TypedBinding where- icod_ (A.TBind a b c) = icode3 0 a b c- icod_ (A.TLet a b) = icode2 1 a b-- value = vcase valu where- valu [0, a, b, c] = valu3 A.TBind a b c- valu [1, a, b] = valu2 A.TLet a b- valu _ = malformed- instance EmbPrj Precedence where icod_ TopCtx = icode0' icod_ FunctionSpaceDomainCtx = icode0 1@@ -272,8 +172,8 @@ valu _ = malformed instance EmbPrj ScopeInfo where- icod_ (ScopeInfo a b c d) = icode4' a b c d+ icod_ (ScopeInfo a b c d _ _ _) = icode4' a b c d - value = vcase valu where- valu [a, b, c, d] = valu4 ScopeInfo a b c d+ value = vcase valu where -- reverse maps will be recomputed+ valu [a, b, c, d] = valu4 (\ a b c d -> ScopeInfo a b c d Map.empty Map.empty Set.empty) a b c d valu _ = malformed
src/full/Agda/TypeChecking/Serialise/Instances/Common.hs view
@@ -12,6 +12,7 @@ #endif {-# OPTIONS_GHC -fno-warn-orphans #-}+ module Agda.TypeChecking.Serialise.Instances.Common where import Control.Applicative@@ -34,7 +35,7 @@ import qualified Data.Sequence as Seq import Data.Void -import Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Concrete.Name as C import qualified Agda.Syntax.Concrete as C import qualified Agda.Syntax.Abstract as A@@ -66,6 +67,10 @@ icod_ = icodeString value i = (! i) `fmap` gets stringE +instance EmbPrj L.ByteString where+ icod_ = icodeX bstringD bstringC+ value i = (! i) `fmap` gets bstringE+ instance EmbPrj Integer where icod_ = icodeInteger value i = (! i) `fmap` gets integerE@@ -97,6 +102,10 @@ icod_ = icodeDouble value i = (! i) `fmap` gets doubleE +instance EmbPrj Void where+ icod_ = absurd+ value = vcase valu where valu _ = malformed+ instance EmbPrj () where icod_ () = icode0' @@ -118,6 +127,15 @@ valu [a, b, c] = valu3 (,,) a b c valu _ = malformed +instance (EmbPrj a, EmbPrj b) => EmbPrj (Either a b) where+ icod_ (Left x) = icode1 0 x+ icod_ (Right x) = icode1 1 x++ value = vcase valu where+ valu [0, x] = valu1 Left x+ valu [1, x] = valu1 Right x+ valu _ = malformed+ instance EmbPrj a => EmbPrj (Maybe a) where icod_ Nothing = icode0' icod_ (Just x) = icode1' x@@ -127,6 +145,10 @@ valu [x] = valu1 Just x valu _ = malformed +instance EmbPrj a => EmbPrj (Strict.Maybe a) where+ icod_ m = icode (Strict.toLazy m)+ value m = Strict.toStrict `fmap` value m+ instance EmbPrj Bool where icod_ True = icode0' icod_ False = icode0 0@@ -152,7 +174,7 @@ Left err -> throwError $ findErrorToTypeError m err Right f -> return f -instance EmbPrj Position where+instance EmbPrj a => EmbPrj (Position' a) where icod_ (P.Pn file pos line col) = icode4' file pos line col value = vcase valu where@@ -191,7 +213,11 @@ icod_ s = icode (Set.toList s) value s = Set.fromList `fmap` value s -instance EmbPrj P.Interval where+instance EmbPrj a => EmbPrj (Seq a) where+ icod_ s = icode (Fold.toList s)+ value s = Seq.fromList `fmap` value s++instance EmbPrj a => EmbPrj (P.Interval' a) where icod_ (P.Interval p q) = icode2' p q value = vcase valu where@@ -199,11 +225,8 @@ valu _ = malformed instance EmbPrj Range where- icod_ (P.Range is) = icode1' is-- value = vcase valu where- valu [is] = valu1 P.Range is- valu _ = malformed+ icod_ r = icode (P.rangeFile r, P.rangeIntervals r)+ value r = uncurry P.intervalsToRange `fmap` value r instance EmbPrj C.Name where icod_ (C.NoName a b) = icode2 0 a b@@ -243,6 +266,15 @@ valu [2] = valu0 NonAssoc valu _ = malformed +instance EmbPrj Agda.Syntax.Fixity.PrecedenceLevel where+ icod_ Unrelated = icode0'+ icod_ (Related a) = icode1' a++ value = vcase valu where+ valu [] = valu0 Unrelated+ valu [a] = valu1 Related a+ valu _ = malformed+ instance EmbPrj Agda.Syntax.Fixity.Fixity where icod_ (Fixity a b c) = icode3' a b c @@ -260,14 +292,20 @@ instance EmbPrj GenPart where icod_ (BindHole a) = icode1 0 a icod_ (NormalHole a) = icode1 1 a+ icod_ (WildHole a) = icode1 2 a icod_ (IdPart a) = icode1' a value = vcase valu where valu [0, a] = valu1 BindHole a valu [1, a] = valu1 NormalHole a+ valu [2, a] = valu1 WildHole a valu [a] = valu1 IdPart a valu _ = malformed +instance EmbPrj MetaId where+ icod_ (MetaId n) = icod_ n+ value i = MetaId <$> value i+ instance EmbPrj A.QName where icod_ n@(A.QName a b) = icodeMemo qnameD qnameC (qnameId n) $ icode2' a b @@ -290,6 +328,13 @@ valu [a, b, c, d] = valu4 A.Name a b c d valu _ = malformed +instance EmbPrj a => EmbPrj (C.FieldAssignment' a) where+ icod_ (C.FieldAssignment a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 C.FieldAssignment a b+ valu _ = malformed+ instance (EmbPrj s, EmbPrj t) => EmbPrj (Named s t) where icod_ (Named a b) = icode2' a b @@ -304,12 +349,12 @@ valu [r, x] = valu2 Ranged r x valu _ = malformed -instance EmbPrj c => EmbPrj (Common.ArgInfo c) where- icod_ (ArgInfo h r cs) = icode3' h r cs+instance EmbPrj ArgInfo where+ icod_ (ArgInfo h r) = icode2' h r value = vcase valu where- valu [h, r, cs] = valu3 ArgInfo h r cs- valu _ = malformed+ valu [h, r] = valu2 ArgInfo h r+ valu _ = malformed instance EmbPrj NameId where icod_ (NameId a b) = icode2' a b@@ -329,21 +374,21 @@ valu [a, b] = valu2 WithHiding a b valu _ = malformed -instance (EmbPrj a, EmbPrj c) => EmbPrj (Common.Arg c a) where+instance EmbPrj a => EmbPrj (Arg a) where icod_ (Arg i e) = icode2' i e value = vcase valu where valu [i, e] = valu2 Arg i e valu _ = malformed -instance (EmbPrj a, EmbPrj c) => EmbPrj (Common.Dom c a) where+instance EmbPrj a => EmbPrj (Dom a) where icod_ (Dom i e) = icode2' i e value = vcase valu where valu [i, e] = valu2 Dom i e valu _ = malformed -instance EmbPrj Common.Induction where+instance EmbPrj Induction where icod_ Inductive = icode0' icod_ CoInductive = icode0 1 @@ -352,7 +397,7 @@ valu [1] = valu0 CoInductive valu _ = malformed -instance EmbPrj Common.Hiding where+instance EmbPrj Hiding where icod_ Hidden = return 0 icod_ NotHidden = return 1 icod_ Instance = return 2@@ -362,7 +407,7 @@ value 2 = return Instance value _ = malformed -instance EmbPrj Common.Relevance where+instance EmbPrj Relevance where icod_ Relevant = return 0 icod_ Irrelevant = return 1 icod_ (Forced Small) = return 2@@ -378,21 +423,6 @@ value 5 = return UnusedArg value _ = malformed --- instance EmbPrj Common.Relevance where--- icod_ Relevant = icode0'--- icod_ Irrelevant = icode0 1--- icod_ (Forced Small) = icode0 2--- icod_ (Forced Big) = icode0 5--- icod_ NonStrict = icode0 3--- icod_ UnusedArg = icode0 4--- value = vcase valu where valu [] = valu0 Relevant--- valu [1] = valu0 Irrelevant--- valu [2] = valu0 (Forced Small)--- valu [5] = valu0 (Forced Big)--- valu [3] = valu0 NonStrict--- valu [4] = valu0 UnusedArg--- valu _ = malformed- instance EmbPrj ConPOrigin where icod_ ConPImplicit = return 0 icod_ ConPCon = return 1@@ -404,21 +434,23 @@ value _ = malformed instance EmbPrj Agda.Syntax.Literal.Literal where- icod_ (LitInt a b) = icode2' a b- icod_ (LitFloat a b) = icode2 1 a b- icod_ (LitString a b) = icode2 2 a b- icod_ (LitChar a b) = icode2 3 a b- icod_ (LitQName a b) = icode2 5 a b+ icod_ (LitNat a b) = icode2' a b+ icod_ (LitFloat a b) = icode2 1 a b+ icod_ (LitString a b) = icode2 2 a b+ icod_ (LitChar a b) = icode2 3 a b+ icod_ (LitQName a b) = icode2 5 a b+ icod_ (LitMeta a b c) = icode3 6 a b c value = vcase valu where- valu [a, b] = valu2 LitInt a b- valu [1, a, b] = valu2 LitFloat a b- valu [2, a, b] = valu2 LitString a b- valu [3, a, b] = valu2 LitChar a b- valu [5, a, b] = valu2 LitQName a b- valu _ = malformed+ valu [a, b] = valu2 LitNat a b+ valu [1, a, b] = valu2 LitFloat a b+ valu [2, a, b] = valu2 LitString a b+ valu [3, a, b] = valu2 LitChar a b+ valu [5, a, b] = valu2 LitQName a b+ valu [6, a, b, c] = valu3 LitMeta a b c+ valu _ = malformed -instance EmbPrj Common.IsAbstract where+instance EmbPrj IsAbstract where icod_ AbstractDef = icode0 0 icod_ ConcreteDef = icode0'
src/full/Agda/TypeChecking/Serialise/Instances/Compilers.hs view
@@ -3,7 +3,12 @@ module Agda.TypeChecking.Serialise.Instances.Compilers where +import qualified Data.Binary.Get as B+import qualified Data.Binary.Put as B+ import qualified Agda.Compiler.Epic.Interface as Epic+import qualified Agda.Compiler.UHC.Pragmas.Base as CR+import qualified Agda.Compiler.UHC.Bridge as UHCB import qualified Agda.Compiler.JS.Syntax as JS import Agda.TypeChecking.Serialise.Base@@ -28,11 +33,11 @@ valu _ = malformed instance EmbPrj CompiledRepresentation where- icod_ (CompiledRep a b c d) = icode4' a b c d+ icod_ (CompiledRep a b c d e) = icode5' a b c d e value = vcase valu where- valu [a, b, c, d] = valu4 CompiledRep a b c d- valu _ = malformed+ valu [a, b, c, d, e] = valu5 CompiledRep a b c d e+ valu _ = malformed instance EmbPrj JS.Exp where icod_ (JS.Self) = icode0 0@@ -83,7 +88,40 @@ icod_ (JS.MemberId l) = icode l value n = JS.MemberId `fmap` value n --- This is used for the Epic compiler backend.+instance EmbPrj CoreRepresentation where+ icod_ (CrDefn a) = icode1 1 a+ icod_ (CrType a) = icode1 2 a+ icod_ (CrConstr a) = icode1 3 a++ value = vcase valu where+ valu [1, a] = valu1 CrDefn a+ valu [2, a] = valu1 CrType a+ valu [3, a] = valu1 CrConstr a+ valu _ = malformed++instance EmbPrj CR.CoreType where+ icod_ (CR.CTMagic a) = icode1 1 a+ icod_ (CR.CTNormal a) = icode1 2 a++ value = vcase valu where+ valu [1, a] = valu1 CR.CTMagic a+ valu [2, a] = valu1 CR.CTNormal a+ valu _ = malformed++instance EmbPrj CR.CoreConstr where+ icod_ (CR.CCMagic a b) = icode2 1 a b+ icod_ (CR.CCNormal a b c) = icode3 2 a b c++ value = vcase valu where+ valu [1, a, b] = valu2 CR.CCMagic a b+ valu [2, a, b, c] = valu3 CR.CCNormal a b c+ valu _ = malformed++instance EmbPrj CR.HsName where+ icod_ = icode . B.runPut . UHCB.serialize+ value n = value n >>= return . (B.runGet UHCB.unserialize)++-- This is used for the Epic compiler backend instance EmbPrj Epic.EInterface where icod_ (Epic.EInterface a b c d e f g h) = icode8' a b c d e f g h
src/full/Agda/TypeChecking/Serialise/Instances/Highlighting.hs view
@@ -26,6 +26,7 @@ icod_ HP.Primitive = icode0 7 icod_ HP.Record = icode0 8 icod_ HP.Argument = icode0 9+ icod_ HP.Macro = icode0 10 value = vcase valu where valu [] = valu0 HP.Bound@@ -38,6 +39,7 @@ valu [7] = valu0 HP.Primitive valu [8] = valu0 HP.Record valu [9] = valu0 HP.Argument+ valu [10] = valu0 HP.Macro valu _ = malformed instance EmbPrj HP.Aspect where
src/full/Agda/TypeChecking/Serialise/Instances/Internal.hs view
@@ -102,13 +102,12 @@ icod_ (Pi a b) = icode2 5 a b icod_ (Sort a ) = icode1 7 a icod_ (MetaV a b) = __IMPOSSIBLE__- icod_ ExtLam{} = __IMPOSSIBLE__ icod_ (DontCare a ) = icode1 8 a icod_ (Level a ) = icode1 9 a icod_ (Shared p) = icodeMemo termD termC p $ icode (derefPtr p) value r = vcase valu' r where- valu' xs = shared <$> valu xs+ valu' xs = gets mkShared <*> valu xs valu [a] = valu1 var a valu [0, a, b] = valu2 Var a b valu [1, a, b] = valu2 Lam a b@@ -202,14 +201,14 @@ value n = MutId `fmap` value n instance EmbPrj Definition where- icod_ (Defn rel a b c d e f g h i) = icode10' rel a (P.killRange b) c d e f g h i+ icod_ (Defn a b c d e f g h i j k) = icode11' a b (P.killRange c) d e f g h i j k value = vcase valu where- valu [rel, a, b, c, d, e, f, g, h, i] = valu10 Defn rel a b c d e f g h i- valu _ = malformed+ valu [a, b, c, d, e, f, g, h, i, j, k] = valu11 Defn a b c d e f g h i j k+ valu _ = malformed instance EmbPrj NLPat where- icod_ (PVar a) = icode1 0 a+ icod_ (PVar a b) = icode2 0 a b icod_ (PWild) = icode0 1 icod_ (PDef a b) = icode2 2 a b icod_ (PLam a b) = icode2 3 a b@@ -218,7 +217,7 @@ icod_ (PTerm a) = icode1 6 a value = vcase valu where- valu [0, a] = valu1 PVar a+ valu [0, a, b] = valu2 PVar a b valu [1] = valu0 PWild valu [2, a, b] = valu2 PDef a b valu [3, a, b] = valu2 PLam a b@@ -260,19 +259,6 @@ value 3 = return Nonvariant value _ = malformed --- instance EmbPrj Polarity where--- icod_ Covariant = icode0'--- icod_ Contravariant = icode0 1--- icod_ Invariant = icode0 2--- icod_ Nonvariant = icode0 3---- value = vcase valu where--- valu [] = valu0 Covariant--- valu [1] = valu0 Contravariant--- valu [2] = valu0 Invariant--- valu [3] = valu0 Nonvariant--- valu _ = malformed- instance EmbPrj Occurrence where icod_ StrictPos = return 0 icod_ Mixed = return 1@@ -289,39 +275,31 @@ value 5 = return JustNeg value _ = malformed --- instance EmbPrj Occurrence where--- icod_ StrictPos = icode0'--- icod_ Mixed = icode0 1--- icod_ Unused = icode0 2--- icod_ GuardPos = icode0 3--- icod_ JustPos = icode0 4--- icod_ JustNeg = icode0 5+instance EmbPrj EtaEquality where+ icod_ (Specified a) = icode1 0 a+ icod_ (Inferred a) = icode1 1 a --- value = vcase valu where--- valu [] = valu0 StrictPos--- valu [1] = valu0 Mixed--- valu [2] = valu0 Unused--- valu [3] = valu0 GuardPos--- valu [4] = valu0 JustPos--- valu [5] = valu0 JustNeg--- valu _ = malformed+ value = vcase valu where+ valu [0,a] = valu1 Specified a+ valu [1,a] = valu1 Inferred a+ valu _ = malformed instance EmbPrj Defn where- icod_ Axiom = icode0 0- icod_ (Function a b c d e f g h i j k l m) = icode13 1 a b c d e f g h i j k l m- icod_ (Datatype a b c d e f g h i j) = icode10 2 a b c d e f g h i j- icod_ (Record a b c d e f g h i j k l) = icode12 3 a b c d e f g h i j k l- icod_ (Constructor a b c d e) = icode5 4 a b c d e- icod_ (Primitive a b c d) = icode4 5 a b c d+ icod_ Axiom = icode0 0+ icod_ (Function a b _ c d e f g h i j k l m n) = icode14 1 a b c d e f g h i j k l m n+ icod_ (Datatype a b c d e f g h i j) = icode10 2 a b c d e f g h i j+ icod_ (Record a b c d e f g h i j k l) = icode12 3 a b c d e f g h i j k l+ icod_ (Constructor a b c d e) = icode5 4 a b c d e+ icod_ (Primitive a b c d) = icode4 5 a b c d value = vcase valu where- valu [0] = valu0 Axiom- valu [1, a, b, c, d, e, f, g, h, i, j, k, l, m] = valu13 Function a b c d e f g h i j k l m- valu [2, a, b, c, d, e, f, g, h, i, j] = valu10 Datatype a b c d e f g h i j- valu [3, a, b, c, d, e, f, g, h, i, j, k, l] = valu12 Record a b c d e f g h i j k l- valu [4, a, b, c, d, e] = valu5 Constructor a b c d e- valu [5, a, b, c, d] = valu4 Primitive a b c d- valu _ = malformed+ valu [0] = valu0 Axiom+ valu [1, a, b, c, d, e, f, g, h, i, j, k, l, m, n] = valu14 (\ a b -> Function a b Nothing) a b c d e f g h i j k l m n+ valu [2, a, b, c, d, e, f, g, h, i, j] = valu10 Datatype a b c d e f g h i j+ valu [3, a, b, c, d, e, f, g, h, i, j, k, l] = valu12 Record a b c d e f g h i j k l+ valu [4, a, b, c, d, e] = valu5 Constructor a b c d e+ valu [5, a, b, c, d] = valu4 Primitive a b c d+ valu _ = malformed instance EmbPrj a => EmbPrj (WithArity a) where icod_ (WithArity a b) = icode2' a b
src/full/Agda/TypeChecking/SizedTypes.hs view
@@ -8,13 +8,9 @@ import Control.Monad.Writer -import Data.Function import Data.List hiding (null) import qualified Data.Map as Map-import Data.Monoid -import Agda.Interaction.Options- import Agda.Syntax.Common import Agda.Syntax.Internal @@ -46,14 +42,15 @@ ------------------------------------------------------------------------ -- | Check whether a type is either not a SIZELT or a SIZELT that is non-empty.-checkSizeLtSat :: Type -> TCM ()+checkSizeLtSat :: Term -> TCM () checkSizeLtSat t = do reportSDoc "tc.size" 10 $ sep [ text "checking that " <+> prettyTCM t <+> text " is not an empty type of sizes" , text "in context " <+> do inTopContext . prettyTCM =<< getContextTelescope ]- let postpone t = addConstraint $ CheckSizeLtSat t- ifBlockedType t (const postpone) $ \ t -> do+ let postpone :: Term -> TCM ()+ postpone t = addConstraint $ CheckSizeLtSat t+ ifBlocked t (const postpone) $ \ t -> do caseMaybeM (isSizeType t) (return ()) $ \ b -> do case b of BoundedNo -> return ()@@ -246,7 +243,7 @@ max <- getBuiltinDefName builtinSizeMax let loop v = do v <- reduce v- case v of+ case ignoreSharing v of Def x [] | Just x == inf -> return $ [DSizeInf] Def x [Apply u] | Just x == suc -> maxViewSuc_ (fromJust suc) <$> loop (unArg u) Def x [Apply u1, Apply u2] | Just x == max -> maxViewMax <$> loop (unArg u1) <*> loop (unArg u2)@@ -337,8 +334,8 @@ -- | Checked whether a size constraint is trivial (like @X <= X+1@). trivial :: Term -> Term -> TCM Bool trivial u v = do- a@(e , n ) <- sizeExpr u- b@(e', n') <- sizeExpr v+ a@(e , n ) <- oldSizeExpr u+ b@(e', n') <- oldSizeExpr v let triv = e == e' && n <= n' -- Andreas, 2012-02-24 filtering out more trivial constraints fixes -- test/lib-succeed/SizeInconsistentMeta4.agda@@ -368,7 +365,7 @@ getSizeConstraints = do test <- isSizeTypeTest let sizeConstraint cl@Closure{ clValue = ValueCmp CmpLeq s _ _ }- | isJust (test s) = Just cl+ | isJust (test $ unEl s) = Just cl sizeConstraint _ = Nothing mapMaybe (sizeConstraint . theConstraint) <$> getAllConstraints @@ -385,7 +382,7 @@ HasType _ a -> do TelV tel b <- telView a -- b is reduced- caseMaybe (test b) no $ \ _ -> do+ caseMaybe (test $ unEl b) no $ \ _ -> do let yes = return $ Just (m, a, tel) if interactionMetas then yes else do ifM (isJust <$> isInteractionMeta m) no yes@@ -413,7 +410,7 @@ -- extension of its creation context ctxIds <- getContextId let a = SizeMeta m $ take (size tel) $ reverse ctxIds- (b, n) <- sizeExpr u+ (b, n) <- oldSizeExpr u return ([(m, size tel)], [Leq a (n-1) b]) -} _ -> nothing@@ -426,21 +423,22 @@ ------------------------------------------------------------------------ -- | Atomic size expressions.-data SizeExpr- = SizeMeta MetaId [Int] -- ^ A size meta applied to de Bruijn levels.- | Rigid Int -- ^ A de Bruijn level.+data OldSizeExpr+ = SizeMeta MetaId [Int] -- ^ A size meta applied to de Bruijn indices.+ | Rigid Int -- ^ A de Bruijn index. deriving (Eq) -instance Show SizeExpr where+instance Show OldSizeExpr where show (SizeMeta m _) = "X" ++ show (fromIntegral m :: Int) show (Rigid i) = "c" ++ show i -- | Size constraints we can solve.-data SizeConstraint- = Leq SizeExpr Int SizeExpr -- ^ @Leq a +n b@ represents @a =< b + n@.- -- @Leq a -n b@ represents @a + n =< b@.+data OldSizeConstraint+ = Leq OldSizeExpr Int OldSizeExpr+ -- ^ @Leq a +n b@ represents @a =< b + n@.+ -- @Leq a -n b@ represents @a + n =< b@. -instance Show SizeConstraint where+instance Show OldSizeConstraint where show (Leq a n b) | n == 0 = show a ++ " =< " ++ show b | n > 0 = show a ++ " =< " ++ show b ++ " + " ++ show n@@ -451,54 +449,52 @@ -- contexts. -- -- cf. 'Agda.TypeChecking.LevelConstraints.simplifyLevelConstraint'-computeSizeConstraints :: [Closure Constraint] -> TCM [SizeConstraint]-computeSizeConstraints [] = return [] -- special case to avoid maximum []-computeSizeConstraints cs = catMaybes <$> mapM computeSizeConstraint leqs+oldComputeSizeConstraints :: [Closure Constraint] -> TCM [OldSizeConstraint]+oldComputeSizeConstraints [] = return [] -- special case to avoid maximum []+oldComputeSizeConstraints cs = catMaybes <$> mapM oldComputeSizeConstraint leqs where -- get the constraints plus contexts they are defined in gammas = map (envContext . clEnv) cs ls = map clValue cs -- compute the longest context (common water level)- -- gamma = maximumBy (compare `on` size) gammas- -- waterLevel = size gamma ns = map size gammas waterLevel = maximum ns- -- convert deBruijn indices to deBruijn levels to- -- enable comparing constraints under different contexts- -- leqs = zipWith raise (map ((waterLevel -) . size) gammas) ls+ -- lift all constraints to live in the longest context+ -- (assuming this context is an extension of the shorter ones)+ -- by raising the de Bruijn indices leqs = zipWith raise (map (waterLevel -) ns) ls --- | Turn a constraint over de Bruijn levels into a size constraint.-computeSizeConstraint :: Constraint -> TCM (Maybe SizeConstraint)-computeSizeConstraint c =+-- | Turn a constraint over de Bruijn indices into a size constraint.+oldComputeSizeConstraint :: Constraint -> TCM (Maybe OldSizeConstraint)+oldComputeSizeConstraint c = case c of ValueCmp CmpLeq _ u v -> do reportSDoc "tc.size.solve" 50 $ sep [ text "converting size constraint" , prettyTCM c ]- (a, n) <- sizeExpr u- (b, m) <- sizeExpr v+ (a, n) <- oldSizeExpr u+ (b, m) <- oldSizeExpr v return $ Just $ Leq a (m - n) b `catchError` \ err -> case err of PatternErr{} -> return Nothing _ -> throwError err _ -> __IMPOSSIBLE__ --- | Turn a term with de Bruijn levels into a size expression with offset.+-- | Turn a term with de Bruijn indices into a size expression with offset. -- -- Throws a 'patternViolation' if the term isn't a proper size expression.-sizeExpr :: Term -> TCM (SizeExpr, Int)-sizeExpr u = do+oldSizeExpr :: Term -> TCM (OldSizeExpr, Int)+oldSizeExpr u = do u <- reduce u -- Andreas, 2009-02-09. -- This is necessary to surface the solutions of metavariables.- reportSDoc "tc.conv.size" 60 $ text "sizeExpr:" <+> prettyTCM u+ reportSDoc "tc.conv.size" 60 $ text "oldSizeExpr:" <+> prettyTCM u s <- sizeView u case s of SizeInf -> patternViolation- SizeSuc u -> mapSnd (+1) <$> sizeExpr u+ SizeSuc u -> mapSnd (+1) <$> oldSizeExpr u OtherSize u -> case ignoreSharing u of- Var i [] -> return (Rigid i, 0) -- i is already a de Bruijn level.+ Var i [] -> return (Rigid i, 0) MetaV m es | Just xs <- mapM isVar es, fastDistinct xs -> return (SizeMeta m xs, 0) _ -> patternViolation@@ -510,22 +506,22 @@ -- | Compute list of size metavariables with their arguments -- appearing in a constraint.-flexibleVariables :: SizeConstraint -> [(MetaId, [Int])]+flexibleVariables :: OldSizeConstraint -> [(MetaId, [Int])] flexibleVariables (Leq a _ b) = flex a ++ flex b where flex (Rigid _) = [] flex (SizeMeta m xs) = [(m, xs)] -- | Convert size constraint into form where each meta is applied--- to levels @0,1,..,n-1@ where @n@ is the arity of that meta.+-- to indices @0,1,..,n-1@ where @n@ is the arity of that meta. ----- @X[σ] <= t@ beomes @X[id] <= t[σ^-1]@+-- @X[σ] <= t@ becomes @X[id] <= t[σ^-1]@ -- -- @X[σ] ≤ Y[τ]@ becomes @X[id] ≤ Y[τ[σ^-1]]@ or @X[σ[τ^1]] ≤ Y[id]@ -- whichever is defined. If none is defined, we give up. ---canonicalizeSizeConstraint :: SizeConstraint -> Maybe SizeConstraint-canonicalizeSizeConstraint c@(Leq a n b) =+oldCanonicalizeSizeConstraint :: OldSizeConstraint -> Maybe OldSizeConstraint+oldCanonicalizeSizeConstraint c@(Leq a n b) = case (a,b) of (Rigid{}, Rigid{}) -> return c (SizeMeta m xs, Rigid i) -> do@@ -545,17 +541,20 @@ | otherwise -> Nothing -- | Main function.-solveSizeConstraints :: TCM ()-solveSizeConstraints = whenM haveSizedTypes $ do+-- Uses the old solver for size constraints using "Agda.Utils.Warshall".+-- This solver does not smartly use size hypotheses @j : Size< i@.+-- It only checks that its computed solution is compatible+oldSolveSizeConstraints :: TCM ()+oldSolveSizeConstraints = whenM haveSizedTypes $ do reportSLn "tc.size.solve" 70 $ "Considering to solve size constraints" cs0 <- getSizeConstraints- cs <- computeSizeConstraints cs0+ cs <- oldComputeSizeConstraints cs0 ms <- getSizeMetas True -- get all size metas, also interaction metas when (not (null cs) || not (null ms)) $ do reportSLn "tc.size.solve" 10 $ "Solving size constraints " ++ show cs - cs <- return $ mapMaybe canonicalizeSizeConstraint cs+ cs <- return $ mapMaybe oldCanonicalizeSizeConstraint cs reportSLn "tc.size.solve" 10 $ "Canonicalized constraints: " ++ show cs let -- Error for giving up@@ -598,10 +597,11 @@ -- | Old solver for size constraints using "Agda.Utils.Warshall".+-- This solver does not smartly use size hypotheses @j : Size< i@. oldSolver- :: [(MetaId, Int)] -- ^ Size metas and their arity.- -> [SizeConstraint] -- ^ Size constraints (in preprocessed form).- -> TCM Bool -- ^ Returns @False@ if solver fails.+ :: [(MetaId, Int)] -- ^ Size metas and their arity.+ -> [OldSizeConstraint] -- ^ Size constraints (in preprocessed form).+ -> TCM Bool -- ^ Returns @False@ if solver fails. oldSolver metas cs = do let cannotSolve = return False mkFlex (m, ar) = W.NewFlex (fromIntegral m) $ \ i -> fromIntegral i < ar@@ -614,11 +614,10 @@ Nothing -> cannotSolve Just sol -> do reportSLn "tc.size.solve" 10 $ "Solved constraints: " ++ show sol- s <- primSizeSuc+ suc <- primSizeSuc infty <- primSizeInf- let suc v = s `apply` [defaultArg v]- plus v 0 = v- plus v n = suc $ plus v (n - 1)+ let plus v 0 = v+ plus v n = suc `apply1` plus v (n - 1) inst (i, e) = do @@ -641,7 +640,7 @@ -- Andreas, 2012-09-25: do not assign interaction metas to \infty let isInf (W.SizeConst W.Infinite) = True isInf _ = False- unlessM ((isJust <$> isInteractionMeta m) `and2M` return (isInf e)) $+ unlessM (((isInf e &&) . isJust <$> isInteractionMeta m) `or2M` isFrozen m) $ assignTerm m tel v mapM_ inst $ Map.toList sol
src/full/Agda/TypeChecking/SizedTypes/Solve.hs view
@@ -1,9 +1,10 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE NondecreasingIndentation #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE PatternGuards #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-} -- | Solving size constraints under hypotheses. --@@ -25,8 +26,6 @@ -- common super context in which all constraints of a cluster live, -- and raise all constraints to this context. ----- This involves migrating from de Bruijn indices to de Bruijn levels.--- -- There might not be a common super context. Then we are screwed, -- since our solver is not ready to deal with such a situation. We -- will blatantly refuse to solve this cluster and blame it on the@@ -34,7 +33,7 @@ -- -- 3. Convert the joint context into a hypothesis graph. ----- This is straightforward. Each de Bruijn level becomes a+-- This is straightforward. Each de Bruijn index becomes a -- rigid variable, each typing assumption @j : Size< i@ becomes an -- arc. --@@ -88,6 +87,7 @@ import Agda.TypeChecking.SizedTypes.WarshallSolver as Size import Agda.Utils.Cluster+import Agda.Utils.Either import Agda.Utils.Except ( MonadError(catchError) ) import Agda.Utils.Function import Agda.Utils.Functor@@ -106,9 +106,15 @@ #include "undefined.h" import Agda.Utils.Impossible +-- | Flag to control the behavior of size solver.+data DefaultToInfty+ = DefaultToInfty -- ^ Instantiate all unconstrained size variables to ∞.+ | DontDefaultToInfty -- ^ Leave unconstrained size variables unsolved.+ deriving (Eq, Ord, Show)+ -- | Solve size constraints involving hypotheses.-solveSizeConstraints :: TCM ()-solveSizeConstraints = do+solveSizeConstraints :: DefaultToInfty -> TCM ()+solveSizeConstraints flag = do -- Get the constraints. cs0 <- S.getSizeConstraints let -- Error for giving up@@ -117,11 +123,14 @@ cs0) unless (null cs0) $ solveSizeConstraints_ cs0 + -- Andreas, issue 1862: do not default to ∞ always, could be too early.+ when (flag == DefaultToInfty) $ do+ -- Set the unconstrained size metas to ∞. ms <- S.getSizeMetas False -- do not get interaction metas unless (null ms) $ do inf <- primSizeInf- forM_ ms $ \ (m, t, tel) -> do+ forM_ ms $ \ (m, t, tel) -> unlessM (isFrozen m) $ do reportSDoc "tc.size.solve" 20 $ text "solution " <+> prettyTCM (MetaV m []) <+> text " := " <+> prettyTCM inf@@ -143,10 +152,10 @@ -- Simplify constraints and check for obvious inconsistencies. cs <- concat <$> do forM ccs $ \ (c, HypSizeConstraint cxt hids hs sc) -> do- case simplify1 (\ c -> Just [c]) sc of- Nothing -> typeError . GenericDocError =<< do+ case simplify1 (\ c -> return [c]) sc of+ Left _ -> typeError . GenericDocError =<< do text "Contradictory size constraint" <+> prettyTCM c- Just cs -> return $ HypSizeConstraint cxt hids hs <$> cs+ Right cs -> return $ HypSizeConstraint cxt hids hs <$> cs -- Cluster constraints according to the meta variables they mention. -- @csNoM@ are the constraints that do not mention any meta.@@ -194,6 +203,7 @@ let HypSizeConstraint gamma hids hs _ = maximumBy (compare `on` (length . sizeContext)) cs -- Length of longest context. let n = size gamma+ -- Now convert all size constraints to the largest context. csL = for cs $ \ (HypSizeConstraint cxt _ _ c) -> raise (n - size cxt) c -- Canonicalize the constraints.@@ -201,8 +211,42 @@ csC :: [SizeConstraint] csC = applyWhen (null hs) (mapMaybe canonicalizeSizeConstraint) csL reportSDoc "tc.size.solve" 30 $ vcat $+ [ text "Size hypotheses" ] +++ map (prettyTCM . HypSizeConstraint gamma hids hs) hs ++ [ text "Canonicalized constraints" ] ++ map (prettyTCM . HypSizeConstraint gamma hids hs) csC++ -- -- ALT:+ -- -- Now convert all size constraints to de Bruijn levels.++ -- -- To get from indices in a context of length m <= n+ -- -- to levels into the target context of length n,+ -- -- we apply the following substitution:+ -- -- Index m-1 needs to be mapped to level 0,+ -- -- index m-2 needs to be mapped to level 1,+ -- -- index 0 needs to be mapped to level m-1,+ -- -- so the desired substitution is @downFrom m@.+ -- let sub m = applySubst $ parallelS $ map var $ downFrom m++ -- -- We simply reverse the context to get to de Bruijn levels.+ -- -- Of course, all types in the context are broken, but+ -- -- only need it for pretty printing constraints.+ -- gamma <- return $ reverse gamma++ -- -- We convert the hypotheses to de Bruijn levels.+ -- hs <- return $ sub n hs++ -- -- We get a form for pretty-printing+ -- let prettyC = prettyTCM . HypSizeConstraint gamma hids hs++ -- -- We convert the constraints to de Bruijn level format.+ -- let csC :: [SizeConstraint]+ -- csC = for cs $ \ (HypSizeConstraint cxt _ _ c) -> sub (size cxt) c++ -- reportSDoc "tc.size.solve" 30 $ vcat $+ -- [ text "Size hypotheses" ] ++ map prettyC hs +++ -- [ text "Canonicalized constraints" ] ++ map prettyC csC+ -- Convert size metas to flexible vars. let metas :: [SizeMeta] metas = concat $ map (foldMap (:[])) csC@@ -212,11 +256,11 @@ -- Construct the hypotheses graph. let hyps = map (fmap (metaId . sizeMetaId)) hs -- There cannot be negative cycles in hypotheses graph due to scoping.- let hg = fromMaybe __IMPOSSIBLE__ $ hypGraph (rigids csF) hyps+ let hg = fromRight __IMPOSSIBLE__ $ hypGraph (rigids csF) hyps -- Construct the constraint graph. -- g :: Size.Graph NamedRigid Int Label- g <- maybe (err "Inconsistent constraints") return $ constraintGraph csF hg+ g <- either err return $ constraintGraph csF hg reportSDoc "tc.size.solve" 40 $ vcat $ [ text "Constraint graph" , text (show g)@@ -262,51 +306,66 @@ _ -> return Nothing -- | Convert size constraint into form where each meta is applied--- to indices @0,1,..,n-1@ where @n@ is the arity of that meta.+-- to indices @n-1,...,1,0@ where @n@ is the arity of that meta. ----- @X[σ] <= t@ beomes @X[id] <= t[σ^-1]@+-- @X[σ] <= t@ becomes @X[id] <= t[σ^-1]@ -- -- @X[σ] ≤ Y[τ]@ becomes @X[id] ≤ Y[τ[σ^-1]]@ or @X[σ[τ^1]] ≤ Y[id]@ -- whichever is defined. If none is defined, we give up. --+-- Cf. @SizedTypes.oldCanonicalizeSizeConstraint@.+--+-- Fixes (the rather artificial) issue 300.+-- But it is unsound when pruned metas occur and triggers issue 1914.+-- Thus we deactivate it.+-- This needs to be properly implemented, possibly using the+-- metaPermuatation of each meta variable.+ canonicalizeSizeConstraint :: SizeConstraint -> Maybe (SizeConstraint)-canonicalizeSizeConstraint c@(Constraint a cmp b) =+canonicalizeSizeConstraint c@(Constraint a cmp b) = Just c+{- case (a,b) of -- Case flex-flex (Flex (SizeMeta m xs) n, Flex (SizeMeta l ys) n') -- try to invert xs on ys- | Just ys' <- mapM (\ y -> findIndex (==y) xs) ys ->- return $ Constraint (Flex (SizeMeta m [0..size xs-1]) n)+ | let len = size xs+ , Just ys' <- mapM (\ y -> (len-1 -) <$> findIndex (==y) xs) ys ->+ return $ Constraint (Flex (SizeMeta m $ downFrom len) n) cmp (Flex (SizeMeta l ys') n') -- try to invert ys on xs- | Just xs' <- mapM (\ x -> findIndex (==x) ys) xs ->+ | let len = size ys+ , Just xs' <- mapM (\ x -> (len-1 -) <$> findIndex (==x) ys) xs -> return $ Constraint (Flex (SizeMeta m xs') n)- cmp (Flex (SizeMeta l [0..size ys-1]) n')+ cmp (Flex (SizeMeta l $ downFrom len) n') -- give up | otherwise -> Nothing -- Case flex-rigid (Flex (SizeMeta m xs) n, Rigid (NamedRigid x i) n') -> do- j <- findIndex (==i) xs- return $ Constraint (Flex (SizeMeta m [0..size xs-1]) n) cmp (Rigid (NamedRigid x j) n')+ let len = size xs+ j <- (len-1 -) <$> findIndex (==i) xs+ return $ Constraint (Flex (SizeMeta m $ downFrom len) n)+ cmp (Rigid (NamedRigid x j) n') -- Case rigid-flex (Rigid (NamedRigid x i) n, Flex (SizeMeta m xs) n') -> do- j <- findIndex (==i) xs- return $ Constraint (Rigid (NamedRigid x j) n) cmp (Flex (SizeMeta m [0..size xs-1]) n')+ let len = size xs+ j <- (len-1 -) <$> findIndex (==i) xs+ return $ Constraint (Rigid (NamedRigid x j) n)+ cmp (Flex (SizeMeta m $ downFrom len) n') -- Case flex-const (Flex (SizeMeta m xs) n, _) ->- return $ Constraint (Flex (SizeMeta m [0..size xs-1]) n) cmp b+ return $ Constraint (Flex (SizeMeta m $ downFrom $ size xs) n) cmp b -- Case const-flex (_, Flex (SizeMeta m xs) n') -> do- return $ Constraint a cmp (Flex (SizeMeta m [0..size xs-1]) n')+ return $ Constraint a cmp (Flex (SizeMeta m $ downFrom $ size xs) n') -- Case no flex _ -> return c-+-} -- | Identifiers for rigid variables. data NamedRigid = NamedRigid@@ -323,7 +382,10 @@ -- | Size metas in size expressions. data SizeMeta = SizeMeta { sizeMetaId :: MetaId- , sizeMetaArgs :: [Int]+ -- TODO to fix issue 300?+ -- , sizeMetaPerm :: Permutation -- ^ Permutation from the current context+ -- -- to the context of the meta.+ , sizeMetaArgs :: [Int] -- ^ De Bruijn indices. } -- | An equality which ignores the meta arguments.@@ -331,10 +393,12 @@ -- | An order which ignores the meta arguments. instance Ord SizeMeta where compare = compare `on` sizeMetaId +instance Show SizeMeta where show = show . sizeMetaId+ instance PrettyTCM SizeMeta where prettyTCM (SizeMeta x es) = prettyTCM (MetaV x $ map (Apply . defaultArg . var) es) -instance Subst SizeMeta where+instance Subst Term SizeMeta where applySubst sigma (SizeMeta x es) = SizeMeta x (map raise es) where raise i =@@ -350,7 +414,7 @@ -- deriving instance Traversable (SizeExpr' Int) -- | Only for 'raise'.-instance Subst (SizeExpr' NamedRigid SizeMeta) where+instance Subst Term (SizeExpr' NamedRigid SizeMeta) where applySubst sigma a = case a of Infty -> a@@ -363,7 +427,7 @@ type SizeConstraint = Constraint' NamedRigid SizeMeta -instance Subst (SizeConstraint) where+instance Subst Term SizeConstraint where applySubst sigma (Constraint a cmp b) = Constraint (applySubst sigma a) cmp (applySubst sigma b) @@ -378,8 +442,8 @@ data HypSizeConstraint = HypSizeConstraint { sizeContext :: Context , sizeHypIds :: [CtxId]- , sizeHypotheses :: [SizeConstraint]- , sizeConstraint :: SizeConstraint+ , sizeHypotheses :: [SizeConstraint] -- ^ Living in @Context@.+ , sizeConstraint :: SizeConstraint -- ^ Living in @Context@. } instance Flexs SizeMeta HypSizeConstraint where@@ -388,6 +452,7 @@ instance PrettyTCM HypSizeConstraint where prettyTCM (HypSizeConstraint cxt _ hs c) = inTopContext $ modifyContext (const cxt) $ do+ -- text ("[#cxt=" ++ show (size cxt) ++ "]") <+> do applyUnless (null hs) (((hcat $ punctuate (text ", ") $ map prettyTCM hs) <+> text "|-") <+>) (prettyTCM c)
src/full/Agda/TypeChecking/SizedTypes/Syntax.hs view
@@ -1,12 +1,12 @@-{-# LANGUAGE DeriveFoldable #-}-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE NoMonomorphismRestriction #-}-{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE NoMonomorphismRestriction #-}+{-# LANGUAGE UndecidableInstances #-} -- | Syntax of size expressions and constraints. @@ -27,8 +27,11 @@ -- | Constant finite sizes @n >= 0@. newtype Offset = O Int- deriving (Eq, Ord, Num, Show, Enum)+ deriving (Eq, Ord, Num, Enum) +instance Show Offset where+ show (O n) = show n+ instance MeetSemiLattice Offset where meet = min @@ -158,58 +161,59 @@ -- * Constraint simplification -type CTrans r f = Constraint' r f -> Maybe [Constraint' r f]+type CTrans r f = Constraint' r f -> Either String [Constraint' r f] -- | Returns 'Nothing' if we have a contradictory constraint.-simplify1 :: Eq r => CTrans r f-> CTrans r f-simplify1 test c =+simplify1 :: (Show f, Show r, Eq r) => CTrans r f -> CTrans r f+simplify1 test c = do+ let err = Left $ "size constraint " ++ show c ++ " is inconsistent" case c of -- rhs is Infty- Constraint a Le Infty -> Just []- Constraint Const{} Lt Infty -> Just []- Constraint Infty Lt Infty -> Nothing+ Constraint a Le Infty -> return []+ Constraint Const{} Lt Infty -> return []+ Constraint Infty Lt Infty -> err Constraint (Rigid i n) Lt Infty -> test $ Constraint (Rigid i 0) Lt Infty- Constraint a@Flex{} Lt Infty -> Just [c { leftExpr = a { offset = 0 }}]+ Constraint a@Flex{} Lt Infty -> return [c { leftExpr = a { offset = 0 }}] -- rhs is Const- Constraint (Const n) cmp (Const m) -> if compareOffset n cmp m then Just [] else Nothing- Constraint Infty cmp Const{} -> Nothing+ Constraint (Const n) cmp (Const m) -> if compareOffset n cmp m then return [] else err+ Constraint Infty cmp Const{} -> err Constraint (Rigid i n) cmp (Const m) -> if compareOffset n cmp m then test (Constraint (Rigid i 0) Le (Const (m - n - ifLe cmp 0 1)))- else Nothing+ else err Constraint (Flex x n) cmp (Const m) -> if compareOffset n cmp m- then Just [Constraint (Flex x 0) Le (Const (m - n - ifLe cmp 0 1))]- else Nothing+ then return [Constraint (Flex x 0) Le (Const (m - n - ifLe cmp 0 1))]+ else err -- rhs is Rigid- Constraint Infty cmp Rigid{} -> Nothing+ Constraint Infty cmp Rigid{} -> err Constraint (Const m) cmp (Rigid i n) ->- if compareOffset m cmp n then Just []+ if compareOffset m cmp n then return [] else test (Constraint (Const $ m - n) cmp (Rigid i 0)) Constraint (Rigid j m) cmp (Rigid i n) | i == j ->- if compareOffset m cmp n then Just [] else Nothing+ if compareOffset m cmp n then return [] else err Constraint (Rigid j m) cmp (Rigid i n) -> test c Constraint (Flex x m) cmp (Rigid i n) -> if compareOffset m cmp n- then Just [Constraint (Flex x 0) Le (Rigid i (n - m - ifLe cmp 0 1))]- else Just [Constraint (Flex x $ m - n + ifLe cmp 0 1) Le (Rigid i 0)]+ then return [Constraint (Flex x 0) Le (Rigid i (n - m - ifLe cmp 0 1))]+ else return [Constraint (Flex x $ m - n + ifLe cmp 0 1) Le (Rigid i 0)] -- rhs is Flex- Constraint Infty Le (Flex x n) -> Just [Constraint Infty Le (Flex x 0)]- Constraint Infty Lt (Flex x n) -> Nothing+ Constraint Infty Le (Flex x n) -> return [Constraint Infty Le (Flex x 0)]+ Constraint Infty Lt (Flex x n) -> err Constraint (Const m) cmp (Flex x n) ->- if compareOffset m cmp n then Just []- else Just [Constraint (Const $ m - n + ifLe cmp 0 1) Le (Flex x 0)]+ if compareOffset m cmp n then return []+ else return [Constraint (Const $ m - n + ifLe cmp 0 1) Le (Flex x 0)] Constraint (Rigid i m) cmp (Flex x n) -> if compareOffset m cmp n- then Just [Constraint (Rigid i 0) cmp (Flex x $ n - m)]- else Just [Constraint (Rigid i $ m - n) cmp (Flex x 0)]+ then return [Constraint (Rigid i 0) cmp (Flex x $ n - m)]+ else return [Constraint (Rigid i $ m - n) cmp (Flex x 0)] Constraint (Flex y m) cmp (Flex x n) -> if compareOffset m cmp n- then Just [Constraint (Flex y 0) cmp (Flex x $ n - m)]- else Just [Constraint (Flex y $ m - n) cmp (Flex x 0)]+ then return [Constraint (Flex y 0) cmp (Flex x $ n - m)]+ else return [Constraint (Flex y $ m - n) cmp (Flex x 0)] -- | 'Le' acts as 'True', 'Lt' as 'False'. ifLe :: Cmp -> a -> a -> a@@ -243,7 +247,7 @@ show Lt = "<" instance (Show r, Show f) => Show (Constraint' r f) where- show (Constraint a cmp b) = show a ++ show cmp ++ show b+ show (Constraint a cmp b) = show a ++ " " ++ show cmp ++ " " ++ show b -- * Wellformedness @@ -299,7 +303,7 @@ instance (Ord flex, Flexs flex a) => Flexs flex [a] where flexs as = Set.unions (map flexs as) -instance (Ord flex) => Flexs flex (SizeExpr' rigid flex) where+instance Flexs flex (SizeExpr' rigid flex) where flexs (Flex x _) = Set.singleton x flexs _ = Set.empty
src/full/Agda/TypeChecking/SizedTypes/Tests.hs view
@@ -2,10 +2,7 @@ module Agda.TypeChecking.SizedTypes.Tests where -import Control.Applicative- import Test.QuickCheck-import Test.QuickCheck.All import Agda.TypeChecking.SizedTypes.Syntax import Agda.TypeChecking.SizedTypes.WarshallSolver
src/full/Agda/TypeChecking/SizedTypes/Utils.hs view
@@ -3,7 +3,6 @@ module Agda.TypeChecking.SizedTypes.Utils where import Control.Applicative-import Data.Functor import qualified Debug.Trace as Debug import Agda.Utils.Function
src/full/Agda/TypeChecking/SizedTypes/WarshallSolver.hs view
@@ -1,10 +1,10 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NoMonomorphismRestriction #-}-{-# LANGUAGE PatternGuards #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-} #if __GLASGOW_HASKELL__ >= 710 {-# LANGUAGE FlexibleContexts #-}@@ -18,7 +18,6 @@ import Control.Monad import Data.Function (on)-import Data.Functor import Data.List as List import Data.Maybe import Data.Set (Set)@@ -55,7 +54,7 @@ lookupEdge :: (Ord s, Ord t) => Graph.Graph s t e -> s -> t -> Maybe e lookupEdge g s t = Graph.lookup s t g -graphToList :: (Ord s, Ord t) => Graph.Graph s t e -> [Edge s t e]+graphToList :: Graph.Graph s t e -> [Edge s t e] graphToList = Graph.toList graphFromList :: (Ord s, Ord t) => [Edge s t e] -> Graph.Graph s t e@@ -292,7 +291,7 @@ -- instance Show a => Show (Edge' a) where -- show (Edge u v l) = show u ++ " -(" ++ show l ++ ")-> " ++ show v -instance (Show r, Show f, Show a, Ord r, Ord f, MeetSemiLattice a) => MeetSemiLattice (Edge' r f a) where+instance (Ord r, Ord f, MeetSemiLattice a) => MeetSemiLattice (Edge' r f a) where e@(Edge u v l) `meet` e'@(Edge u' v' l') | u == u' && v == v' = Edge u v $ l `meet` l' | otherwise = __IMPOSSIBLE__@@ -302,7 +301,7 @@ top = __IMPOSSIBLE__ isTop e = isTop (label e) -instance (Show r, Show f, Show a, Ord r, Ord f, Dioid a) => Dioid (Edge' r f a) where+instance (Ord r, Ord f, Dioid a) => Dioid (Edge' r f a) where e@(Edge u v l) `compose` e'@(Edge v' w l') | v == v' = Edge u w $ l `compose` l' | otherwise = __IMPOSSIBLE__@@ -337,7 +336,7 @@ in insertEdge e (Graph.unionsWith meet $ gsSrc ++ gsDest) : gsNotDest -- | Reflexive closure. Add edges @0 -> n -> n -> oo@ for all nodes @n@.-reflClos :: (Ord r, Ord f, Show a, Dioid a) => Set (Node r f) -> Graph r f a -> Graph r f a+reflClos :: (Ord r, Ord f, Dioid a) => Set (Node r f) -> Graph r f a -> Graph r f a reflClos ns g = setFoldl step g ns' where -- have at least the nodes in @ns@ ns' = nodes g `Set.union` ns@@ -447,14 +446,16 @@ type Hyp' = Constraint' type HypGraph r f = Graph r f Label -hypGraph :: (Ord rigid, Ord flex) => Set rigid -> [Hyp' rigid flex] -> Maybe (HypGraph rigid flex)+hypGraph :: (Ord rigid, Ord flex, Show rigid, Show flex) =>+ Set rigid -> [Hyp' rigid flex] -> Either String (HypGraph rigid flex) hypGraph is hyps0 = do -- get a list of hypothesis from a list of constraints hyps <- concat <$> mapM (simplify1 $ \ c -> return [c]) hyps0 let g = transClos $ reflClos (Set.mapMonotonic NodeRigid is) $ graphFromConstraints hyps- if negative g then Nothing else Just g+ when (negative g) $ Left "size hypotheses graph has negative loop"+ return g hypConn :: (Ord r, Ord f) => HypGraph r f -> Node r f -> Node r f -> Label -- hypConn hg NodeZero n2 = Label Le 0 -- WRONG: not the best information@@ -464,7 +465,8 @@ | Just l <- lookupEdge hg n1 n2 = l | otherwise = top -simplifyWithHypotheses :: (Ord rigid, Ord flex) => HypGraph rigid flex -> [Constraint' rigid flex] -> Maybe [Constraint' rigid flex]+simplifyWithHypotheses :: (Ord rigid, Ord flex, Show rigid, Show flex) =>+ HypGraph rigid flex -> [Constraint' rigid flex] -> Either String [Constraint' rigid flex] simplifyWithHypotheses hg cons = concat <$> mapM (simplify1 test) cons where -- Test whether a constraint is compatible with the hypotheses:@@ -474,7 +476,8 @@ let Edge n1 n2 l = edgeFromConstraint c l' = hypConn hg n1 n2 -- l' <- lookupEdge hg n1 n2- guard (l' <= l)+ unless (l' <= l) $ Left $+ "size constraint " ++ show c ++ " not consistent with size hypotheses" return [c] -- if (l' <= l) then Just [c] else Nothing @@ -483,7 +486,7 @@ type ConGraph r f = Graph r f Label -constraintGraph :: (Ord r, Ord f, Show r, Show f) => [Constraint' r f] -> HypGraph r f -> Maybe (ConGraph r f)+constraintGraph :: (Ord r, Ord f, Show r, Show f) => [Constraint' r f] -> HypGraph r f -> Either String (ConGraph r f) constraintGraph cons0 hg = do -- Simplify constraints, ensure they are locally consistent with -- hypotheses.@@ -491,14 +494,16 @@ -- Build a transitive graph from constraints. let g = transClos $ graphFromConstraints cons -- Ensure it has no negative loops.- guard $ not $ negative g+ when (negative g) $ Left $+ "size constraint graph has negative loops" -- Ensure it does not constrain the hypotheses.- guard $ hg `implies` g+ unless (hg `implies` g) $ Left $+ "size constraint graph constrains size hypotheses" return g type ConGraphs r f = Graphs r f Label -constraintGraphs :: (Ord r, Ord f, Show r, Show f) => [Constraint' r f] -> HypGraph r f -> Maybe ([f], ConGraphs r f)+constraintGraphs :: (Ord r, Ord f, Show r, Show f) => [Constraint' r f] -> HypGraph r f -> Either String ([f], ConGraphs r f) constraintGraphs cons0 hg = do traceM $ "original constraints cons0 = " ++ show cons0 -- Simplify constraints, ensure they are locally consistent with@@ -513,14 +518,15 @@ -- Check for flexibles to be set to infinity let (xss,gs) = unzip $ map infinityFlexs gs1 xs = concat xss- unless (null $ xs) $ do+ unless (null xs) $ do traceM $ "flexibles to set to oo = " ++ show xs traceM $ "forest after oo-subst = " ++ show (map graphToList gs) -- Ensure none has negative loops.- guard $ not $ negative gs+ when (negative gs) $ Left $ "size constraint graph has negative loop" traceM $ "we are free of negative loops" -- Ensure it does not constrain the hypotheses.- forM_ gs $ do \ g -> guard $ hg `implies` g+ forM_ gs $ \ g -> unless (hg `implies` g) $ Left $+ "size constraint graph constrains size hypotheses" traceM $ "any constraint between rigids is implied by the hypotheses" return (xs, gs) @@ -578,7 +584,7 @@ } -- | Compute a lower bound for a flexible from an edge.-edgeToLowerBound :: (Ord r, Ord f) => LabelledEdge r f -> Maybe (f, SizeExpr' r f)+edgeToLowerBound :: LabelledEdge r f -> Maybe (f, SizeExpr' r f) edgeToLowerBound e = case e of (Edge n1 n2 LInf) -> __IMPOSSIBLE__@@ -588,7 +594,7 @@ _ -> Nothing -- | Compute an upper bound for a flexible from an edge.-edgeToUpperBound :: (Ord r, Ord f) => LabelledEdge r f -> Maybe (f, Cmp, SizeExpr' r f)+edgeToUpperBound :: LabelledEdge r f -> Maybe (f, Cmp, SizeExpr' r f) edgeToUpperBound e = case e of (Edge n1 n2 LInf) -> __IMPOSSIBLE__@@ -658,7 +664,7 @@ Return these edges as a map from target notes to a list of edges. We assume the graph is reflexive-transitive. -}-commonSuccs :: (Ord r, Ord f, Dioid a) =>+commonSuccs :: (Ord r, Ord f) => Graph r f a -> [Node r f] -> Map (Node r f) [Edge' r f a] commonSuccs hg srcs = intersectAll $ map (buildmap . outgoing hg) srcs where@@ -671,7 +677,7 @@ Return these edges as a map from target notes to a list of edges. We assume the graph is reflexive-transitive. -}-commonPreds :: (Ord r, Ord f, Dioid a) => Graph r f a -> [Node r f] -> Map (Node r f) [Edge' r f a]+commonPreds :: (Ord r, Ord f) => Graph r f a -> [Node r f] -> Map (Node r f) [Edge' r f a] commonPreds hg tgts = intersectAll $ map (buildmap . incoming hg) tgts where buildmap = Map.fromList . map (\ e -> (src e, [e]))@@ -810,7 +816,7 @@ Nothing -- TODO! -} -findRigidBelow :: (Ord r, Ord f, Show r, Show f) => HypGraph r f -> (SizeExpr' r f) -> Maybe (SizeExpr' r f)+findRigidBelow :: (Ord r, Ord f) => HypGraph r f -> (SizeExpr' r f) -> Maybe (SizeExpr' r f) findRigidBelow hg (Rigid i m) | m < 0 = do let v = NodeRigid i preds = incoming hg v@@ -891,7 +897,7 @@ verifySolution hg cs sol = do cs <- return $ subst sol cs traceM $ "substituted constraints " ++ show cs- cs <- maybe (Left "solution produces inconsistency") Right $+ cs <- -- maybe (Left "solution produces inconsistency") Right $ concat <$> mapM (simplify1 $ \ c -> return [c]) cs traceM $ "simplified substituted constraints " ++ show cs -- cs <- maybe (Left "solution produces inconsistency") Right $
src/full/Agda/TypeChecking/Substitute.hs view
@@ -6,6 +6,9 @@ {-# LANGUAGE PatternGuards #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TupleSections #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE UndecidableInstances #-} #if __GLASGOW_HASKELL__ <= 708 {-# LANGUAGE OverlappingInstances #-}@@ -15,24 +18,25 @@ module Agda.TypeChecking.Substitute ( module Agda.TypeChecking.Substitute- , Substitution(..)+ , Substitution'(..), Substitution ) where -import Control.Arrow ((***), first, second)+import Control.Arrow ((***), second) import Data.Function import Data.Functor import Data.List hiding (sort, drop) import qualified Data.List as List import Data.Map (Map)+import Data.Maybe import Data.Monoid import Data.Typeable (Typeable) import Debug.Trace (trace) -import Agda.Syntax.Common hiding (Arg, Dom, NamedArg)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Internal.Pattern import Agda.Syntax.Position import Agda.TypeChecking.Monad.Base@@ -43,7 +47,6 @@ import Agda.Utils.Empty import Agda.Utils.Functor import Agda.Utils.List-import Agda.Utils.Monad import Agda.Utils.Permutation import Agda.Utils.Size import Agda.Utils.Tuple@@ -65,9 +68,13 @@ applyE t es = apply t $ map argFromElim es -- precondition: all @es@ are @Apply@s --- | Apply to a single argument.+-- | Apply to some default arguments.+applys :: Apply t => t -> [Term] -> t+applys t vs = apply t $ map defaultArg vs++-- | Apply to a single default argument. apply1 :: Apply t => t -> Term -> t-apply1 t u = apply t [ defaultArg u ]+apply1 t u = applys t [ u ] instance Apply Term where applyE m [] = m@@ -88,7 +95,6 @@ Sort _ -> __IMPOSSIBLE__ DontCare mv -> dontCare $ mv `applyE` es -- Andreas, 2011-10-02 -- need to go under DontCare, since "with" might resurrect irrelevant term- ExtLam _ _ -> __IMPOSSIBLE__ -- | If $v$ is a record value, @canProject f v@ -- returns its field @f@.@@ -133,19 +139,36 @@ defApp f es0 es = Def f $ es0 ++ es -- protect irrelevant fields (see issue 610)-argToDontCare :: Common.Arg c Term -> Term-argToDontCare (Common.Arg ai v)+argToDontCare :: Arg Term -> Term+argToDontCare (Arg ai v) | Irrelevant <- getRelevance ai = dontCare v | otherwise = v -instance Apply Type where- apply = piApply- -- Maybe an @applyE@ instance would be useful here as well.- -- A record type could be applied to a projection name- -- to yield the field type.- -- However, this works only in the monad where we can- -- look up the fields of a record type.+-- Andreas, 2016-01-19: In connection with debugging issue #1783,+-- I consider the Apply instance for Type harmful, as piApply is not+-- safe if the type is not sufficiently reduced.+-- (piApply is not in the monad and hence cannot unfold type synonyms).+--+-- Without apply for types, one has to at least use piApply and be+-- aware of doing something which has a precondition+-- (type sufficiently reduced).+--+-- By grepping for piApply, one can quickly get an overview over+-- potentially harmful uses.+--+-- In general, piApplyM is preferable over piApply since it is more robust+-- and fails earlier than piApply, which may only fail at serialization time,+-- when all thunks are forced. +-- REMOVED:+-- instance Apply Type where+-- apply = piApply+-- -- Maybe an @applyE@ instance would be useful here as well.+-- -- A record type could be applied to a projection name+-- -- to yield the field type.+-- -- However, this works only in the monad where we can+-- -- look up the fields of a record type.+ instance Apply Sort where applyE s [] = s applyE s _ = __IMPOSSIBLE__@@ -155,14 +178,14 @@ -- @applyE@ does not make sense for telecopes, definitions, clauses etc. -instance Subst a => Apply (Tele a) where+instance Subst Term a => Apply (Tele a) where apply tel [] = tel apply EmptyTel _ = __IMPOSSIBLE__ apply (ExtendTel _ tel) (t : ts) = lazyAbsApp tel (unArg t) `apply` ts instance Apply Definition where- apply (Defn info x t pol occ df m c inst d) args =- Defn info x (piApply t args) (apply pol args) (apply occ args) df m c inst (apply d args)+ apply (Defn info x t pol occ df m c inst copy d) args =+ Defn info x (piApply t args) (apply pol args) (apply occ args) df m c inst copy (apply d args) instance Apply RewriteRule where apply r args = RewriteRule@@ -247,7 +270,7 @@ } Record{ recPars = np, recConType = t, recClause = cl, recTel = tel {-, recArgOccurrences = occ-} } ->- d { recPars = np - size args, recConType = apply t args+ d { recPars = np - size args, recConType = piApply t args , recClause = apply cl args, recTel = apply tel args -- , recArgOccurrences = List.drop (length args) occ }@@ -260,27 +283,24 @@ apply (PrimFun x ar def) args = PrimFun x (ar - size args) $ \vs -> def (args ++ vs) instance Apply Clause where- apply (Clause r tel perm ps b t) args =+ apply (Clause r tel ps b t catchall) args = Clause r (apply tel args)- (apply perm args) (List.drop (size args) ps) (apply b args) (applySubst (parallelS (map unArg args)) t)+ catchall instance Apply CompiledClauses where apply cc args = case cc of Fail -> Fail Done hs t- | length hs >= len -> Done (List.drop len hs)- (applySubst- (parallelS $- [ var i | i <- [0..length hs - len - 1]] ++- map unArg args)- t)+ | length hs >= len ->+ let sub = parallelS $ map var [0..length hs - len - 1] ++ map unArg args+ in Done (List.drop len hs) $ applySubst sub t | otherwise -> __IMPOSSIBLE__ Case n bs- | n >= len -> Case (n - len) (apply bs args)+ | unArg n >= len -> Case (n <&> \ m -> m - len) (apply bs args) | otherwise -> __IMPOSSIBLE__ where len = length args@@ -364,8 +384,12 @@ where m = size tel --- | The type must contain the right number of pis without have to perform any--- reduction.+-- | @(x:A)->B(x) `piApply` [u] = B(u)@+--+-- Precondition: The type must contain the right number of pis without+-- having to perform any reduction.+--+-- @piApply@ is potentially unsafe, the monadic 'piApplyM' is preferable. piApply :: Type -> Args -> Type piApply t [] = t piApply (El _ (Pi _ b)) (a:args) = lazyAbsApp b (unArg a) `piApply` args@@ -396,8 +420,8 @@ ExtendTel arg xtel `abstract` tel = ExtendTel arg $ xtel <&> (`abstract` tel) instance Abstract Definition where- abstract tel (Defn info x t pol occ df m c inst d) =- Defn info x (abstract tel t) (abstract tel pol) (abstract tel occ) df m c inst (abstract tel d)+ abstract tel (Defn info x t pol occ df m c inst copy d) =+ Defn info x (abstract tel t) (abstract tel pol) (abstract tel occ) df m c inst copy (abstract tel d) -- | @tel ⊢ (Γ ⊢ lhs ↦ rhs : t)@ becomes @tel, Γ ⊢ lhs ↦ rhs : t)@ -- we do not need to change lhs, rhs, and t since they live in Γ.@@ -474,16 +498,18 @@ where n = size tel instance Abstract Clause where- abstract tel (Clause r tel' perm ps b t) =- Clause r (abstract tel tel') (abstract tel perm)- (namedTelVars tel ++ ps) (abstract tel b)+ abstract tel (Clause r tel' ps b t catchall) =+ Clause r (abstract tel tel')+ (namedTelVars m tel ++ ps) (abstract tel b) t -- nothing to do for t, since it lives under the telescope+ catchall+ where m = size tel + size tel' instance Abstract CompiledClauses where abstract tel Fail = Fail abstract tel (Done xs t) = Done (map (argFromDom . fmap fst) (telToList tel) ++ xs) t abstract tel (Case n bs) =- Case (n + fromIntegral (size tel)) (abstract tel bs)+ Case (n <&> \ i -> i + fromIntegral (size tel)) (abstract tel bs) instance Abstract a => Abstract (WithArity a) where abstract tel (WithArity n a) = WithArity n $ abstract tel a@@ -492,14 +518,14 @@ abstract tel (Branches cop cs ls m) = Branches cop (abstract tel cs) (abstract tel ls) (abstract tel m) -telVars :: Telescope -> [Arg Pattern]-telVars = map (fmap namedThing) . namedTelVars+telVars :: Int -> Telescope -> [Arg DeBruijnPattern]+telVars m = map (fmap namedThing) . (namedTelVars m) -namedTelVars :: Telescope -> [NamedArg Pattern]-namedTelVars EmptyTel = []-namedTelVars (ExtendTel (Common.Dom info a) tel) =- Common.Arg info (namedVarP $ absName tel) :- namedTelVars (unAbs tel)+namedTelVars :: Int -> Telescope -> [NamedArg DeBruijnPattern]+namedTelVars m EmptyTel = []+namedTelVars m (ExtendTel (Dom info a) tel) =+ Arg info (namedDBVarP (m-1) $ absName tel) :+ namedTelVars (m-1) (unAbs tel) instance Abstract FunctionInverse where abstract tel NotInjective = NotInjective@@ -525,7 +551,7 @@ abstractArgs :: Abstract a => Args -> a -> a abstractArgs args x = abstract tel x where- tel = foldr (\(Common.Arg info x) -> ExtendTel (Common.Dom info $ sort Prop) . Abs x)+ tel = foldr (\(Arg info x) -> ExtendTel (Dom info $ sort Prop) . Abs x) EmptyTel $ zipWith (<$) names args names = cycle $ map (stringToArgName . (:[])) ['a'..'z']@@ -534,38 +560,51 @@ -- * Explicit substitutions --------------------------------------------------------------------------- +class DeBruijn a where+ debruijnVar :: Int -> a+ debruijnVar = debruijnNamedVar underscore+ debruijnNamedVar :: String -> Int -> a+ debruijnNamedVar _ = debruijnVar+ debruijnView :: a -> Maybe Int++instance DeBruijn Term where+ debruijnVar = var+ debruijnView (Var n []) = Just n+ debruijnView _ = Nothing+ -- See Syntax.Internal for the definition. -idS :: Substitution+idS :: Substitution' a idS = IdS -wkS :: Int -> Substitution -> Substitution+wkS :: Int -> Substitution' a -> Substitution' a wkS 0 rho = rho wkS n (Wk m rho) = Wk (n + m) rho wkS n EmptyS = EmptyS wkS n rho = Wk n rho -raiseS :: Int -> Substitution+raiseS :: Int -> Substitution' a raiseS n = wkS n idS -consS :: Term -> Substitution -> Substitution-consS (Var n []) (Wk m rho)- | n + 1 == m = wkS (m - 1) (liftS 1 rho)+consS :: DeBruijn a => a -> Substitution' a -> Substitution' a+consS t (Wk m rho)+ | Just n <- debruijnView t,+ n + 1 == m = wkS (m - 1) (liftS 1 rho) consS u rho = seq u (u :# rho) -- | To replace index @n@ by term @u@, do @applySubst (singletonS n u)@.-singletonS :: Int -> Term -> Substitution-singletonS n u = map var [0..n-1] ++# consS u (raiseS n)- -- ALT: foldl (\ s i -> var i `consS` s) (consS u $ raiseS n) $ downFrom n+singletonS :: DeBruijn a => Int -> a -> Substitution' a+singletonS n u = map debruijnVar [0..n-1] ++# consS u (raiseS n)+ -- ALT: foldl (\ s i -> debruijnVar i `consS` s) (consS u $ raiseS n) $ downFrom n -- | Lift a substitution under k binders.-liftS :: Int -> Substitution -> Substitution+liftS :: Int -> Substitution' a -> Substitution' a liftS 0 rho = rho liftS k IdS = IdS liftS k (Lift n rho) = Lift (n + k) rho liftS k rho = Lift k rho -dropS :: Int -> Substitution -> Substitution+dropS :: Int -> Substitution' a -> Substitution' a dropS 0 rho = rho dropS n IdS = raiseS n dropS n (Wk m rho) = wkS m (dropS n rho)@@ -576,7 +615,7 @@ dropS n EmptyS = __IMPOSSIBLE__ -- | @applySubst (ρ `composeS` σ) v == applySubst ρ (applySubst σ v)@-composeS :: Substitution -> Substitution -> Substitution+composeS :: Subst a a => Substitution' a -> Substitution' a -> Substitution' a composeS rho IdS = rho composeS IdS sgm = sgm composeS rho EmptyS = EmptyS@@ -590,7 +629,7 @@ -- If Γ ⊢ ρ : Δ, Θ then splitS |Θ| ρ = (σ, δ), with -- Γ ⊢ σ : Δ -- Γ ⊢ δ : Θσ-splitS :: Int -> Substitution -> (Substitution, Substitution)+splitS :: Int -> Substitution' a -> (Substitution' a, Substitution' a) splitS 0 rho = (rho, EmptyS) splitS n (u :# rho) = second (u :#) $ splitS (n - 1) rho splitS n (Strengthen err rho) = second (Strengthen err) $ splitS (n - 1) rho@@ -602,32 +641,32 @@ infixr 4 ++# -(++#) :: [Term] -> Substitution -> Substitution+(++#) :: DeBruijn a => [a] -> Substitution' a -> Substitution' a us ++# rho = foldr consS rho us -prependS :: Empty -> [Maybe Term] -> Substitution -> Substitution+prependS :: DeBruijn a => Empty -> [Maybe a] -> Substitution' a -> Substitution' a prependS err us rho = foldr f rho us where f Nothing rho = Strengthen err rho f (Just u) rho = consS u rho -parallelS :: [Term] -> Substitution+parallelS :: DeBruijn a => [a] -> Substitution' a parallelS us = us ++# idS -compactS :: Empty -> [Maybe Term] -> Substitution+compactS :: DeBruijn a => Empty -> [Maybe a] -> Substitution' a compactS err us = prependS err us idS -- | Γ ⊢ (strengthenS ⊥ |Δ|) : Γ,Δ-strengthenS :: Empty -> Int -> Substitution+strengthenS :: Empty -> Int -> Substitution' a strengthenS err n | n < 0 = __IMPOSSIBLE__ | otherwise = iterate (Strengthen err) idS !! n -lookupS :: Substitution -> Nat -> Term+lookupS :: Subst a a => Substitution' a -> Nat -> a lookupS rho i = case rho of- IdS -> var i+ IdS -> debruijnVar i Wk n IdS -> let j = i + n in- if j < 0 then __IMPOSSIBLE__ else var j+ if j < 0 then __IMPOSSIBLE__ else debruijnVar j Wk n rho -> applySubst (raiseS n) (lookupS rho i) u :# rho | i == 0 -> u | i < 0 -> __IMPOSSIBLE__@@ -636,7 +675,7 @@ | i == 0 -> absurd err | i < 0 -> __IMPOSSIBLE__ | otherwise -> lookupS rho (i - 1)- Lift n rho | i < n -> var i+ Lift n rho | i < n -> debruijnVar i | otherwise -> raise n $ lookupS rho (i - n) EmptyS -> __IMPOSSIBLE__ @@ -653,31 +692,31 @@ -- ----------- -- Γ ⊢ tρ : σρ -class Subst t where- applySubst :: Substitution -> t -> t+class DeBruijn t => Subst t a | a -> t where+ applySubst :: Substitution' t -> a -> a -raise :: Subst t => Nat -> t -> t+raise :: Subst t a => Nat -> a -> a raise = raiseFrom 0 -raiseFrom :: Subst t => Nat -> Nat -> t -> t+raiseFrom :: Subst t a => Nat -> Nat -> a -> a raiseFrom n k = applySubst (liftS n $ raiseS k) -- | Replace de Bruijn index i by a 'Term' in something.-subst :: Subst t => Int -> Term -> t -> t+subst :: Subst t a => Int -> t -> a -> a subst i u = applySubst $ singletonS i u -strengthen :: Subst t => Empty -> t -> t+strengthen :: Subst t a => Empty -> a -> a strengthen err = applySubst (compactS err [Nothing]) -- | Replace what is now de Bruijn index 0, but go under n binders. -- @substUnder n u == subst n (raise n u)@.-substUnder :: Subst t => Nat -> Term -> t -> t+substUnder :: Subst t a => Nat -> t -> a -> a substUnder n u = applySubst (liftS n (singletonS 0 u)) -instance Subst Substitution where+instance Subst a a => Subst a (Substitution' a) where applySubst rho sgm = composeS rho sgm -instance Subst Term where+instance Subst Term Term where applySubst IdS t = t applySubst rho t = case t of Var i es -> lookupS rho i `applyE` applySubst rho es@@ -691,15 +730,14 @@ Sort s -> sortTm $ applySubst rho s Shared p -> Shared $ applySubst rho p DontCare mv -> dontCare $ applySubst rho mv- ExtLam cs es-> ExtLam (applySubst rho cs) (applySubst rho es) -instance Subst a => Subst (Ptr a) where+instance Subst t a => Subst t (Ptr a) where applySubst rho = fmap (applySubst rho) -instance (Subst a) => Subst (Type' a) where+instance Subst Term a => Subst Term (Type' a) where applySubst rho (El s t) = applySubst rho s `El` applySubst rho t -instance Subst Sort where+instance Subst Term Sort where applySubst rho s = case s of Type n -> levelSort $ sub n Prop -> Prop@@ -708,36 +746,33 @@ DLub s1 s2 -> DLub (sub s1) (sub s2) where sub x = applySubst rho x -instance Subst Level where+instance Subst Term Level where applySubst rho (Max as) = Max $ applySubst rho as -instance Subst PlusLevel where+instance Subst Term PlusLevel where applySubst rho l@ClosedLevel{} = l applySubst rho (Plus n l) = Plus n $ applySubst rho l -instance Subst LevelAtom where+instance Subst Term LevelAtom where applySubst rho (MetaLevel m vs) = MetaLevel m $ applySubst rho vs applySubst rho (BlockedLevel m v) = BlockedLevel m $ applySubst rho v applySubst rho (NeutralLevel _ v) = UnreducedLevel $ applySubst rho v applySubst rho (UnreducedLevel v) = UnreducedLevel $ applySubst rho v -instance Subst Bool where+instance Subst Term Name where applySubst rho = id #if __GLASGOW_HASKELL__ >= 710-instance {-# OVERLAPPING #-} Subst String where+instance {-# OVERLAPPING #-} Subst Term String where #else-instance Subst String where+instance Subst Term String where #endif applySubst rho = id -instance Subst Name where- applySubst rho = id--instance Subst ConPatternInfo where+instance Subst Term ConPatternInfo where applySubst rho (ConPatternInfo mr mt) = ConPatternInfo mr $ applySubst rho mt -instance Subst Pattern where+instance Subst Term Pattern where applySubst rho p = case p of ConP c mt ps -> ConP c (applySubst rho mt) $ applySubst rho ps DotP t -> DotP $ applySubst rho t@@ -745,9 +780,9 @@ LitP l -> p ProjP _ -> p -instance Subst NLPat where+instance Subst Term NLPat where applySubst rho p = case p of- PVar i -> p+ PVar id i -> p PWild -> p PDef f es -> PDef f $ applySubst rho es PLam i u -> PLam i $ applySubst rho u@@ -755,26 +790,34 @@ PBoundVar i es -> PBoundVar i $ applySubst rho es PTerm u -> PTerm $ applySubst rho u -instance Subst t => Subst (Blocked t) where+instance Subst Term RewriteRule where+ applySubst rho (RewriteRule q gamma lhs rhs t) =+ RewriteRule q (applySubst rho gamma)+ (applySubst (liftS n rho) lhs)+ (applySubst (liftS n rho) rhs)+ (applySubst (liftS n rho) t)+ where n = size gamma++instance Subst t a => Subst t (Blocked a) where applySubst rho b = fmap (applySubst rho) b -instance Subst DisplayForm where+instance Subst Term DisplayForm where applySubst rho (Display n ps v) = Display n (applySubst (liftS 1 rho) ps) (applySubst (liftS n rho) v) -instance Subst DisplayTerm where+instance Subst Term DisplayTerm where applySubst rho (DTerm v) = DTerm $ applySubst rho v applySubst rho (DDot v) = DDot $ applySubst rho v applySubst rho (DCon c vs) = DCon c $ applySubst rho vs applySubst rho (DDef c es) = DDef c $ applySubst rho es applySubst rho (DWithApp v vs ws) = uncurry3 DWithApp $ applySubst rho (v, vs, ws) -instance Subst a => Subst (Tele a) where+instance Subst t a => Subst t (Tele a) where applySubst rho EmptyTel = EmptyTel applySubst rho (ExtendTel t tel) = uncurry ExtendTel $ applySubst rho (t, tel) -instance Subst Constraint where+instance Subst Term Constraint where applySubst rho c = case c of ValueCmp cmp a u v -> ValueCmp cmp (rf a) (rf u) (rf v) ElimCmp ps a v e1 e2 -> ElimCmp ps (rf a) (rf v) (rf e1) (rf e2)@@ -785,72 +828,84 @@ Guarded c cs -> Guarded (rf c) cs IsEmpty r a -> IsEmpty r (rf a) CheckSizeLtSat t -> CheckSizeLtSat (rf t)- FindInScope m cands -> FindInScope m (rf cands)+ FindInScope m b cands -> FindInScope m b (rf cands) UnBlock{} -> c where rf x = applySubst rho x -instance Subst a => Subst (Elim' a) where+instance Subst t a => Subst t (Elim' a) where applySubst rho e = case e of Apply v -> Apply $ applySubst rho v Proj{} -> e -instance Subst a => Subst (Abs a) where+instance Subst t a => Subst t (Abs a) where applySubst rho (Abs x a) = Abs x $ applySubst (liftS 1 rho) a applySubst rho (NoAbs x a) = NoAbs x $ applySubst rho a -instance Subst a => Subst (Arg a) where+instance Subst t a => Subst t (Arg a) where applySubst rho = fmap (applySubst rho) -instance Subst a => Subst (Named name a) where+instance Subst t a => Subst t (Named name a) where applySubst rho = fmap (applySubst rho) -instance Subst a => Subst (Dom a) where+instance Subst t a => Subst t (Dom a) where applySubst rho = fmap (applySubst rho) -instance Subst a => Subst (Maybe a) where+instance Subst t a => Subst t (Maybe a) where applySubst rho = fmap (applySubst rho) -instance Subst a => Subst [a] where+instance Subst t a => Subst t [a] where applySubst rho = map (applySubst rho) -instance Subst () where+instance Subst Term () where applySubst _ _ = () -instance (Subst a, Subst b) => Subst (a,b) where+instance (Subst t a, Subst t b) => Subst t (a, b) where applySubst rho (x,y) = (applySubst rho x, applySubst rho y) -instance (Subst a, Subst b, Subst c) => Subst (a,b,c) where+instance (Subst t a, Subst t b, Subst t c) => Subst t (a, b, c) where applySubst rho (x,y,z) = (applySubst rho x, applySubst rho y, applySubst rho z) -instance (Subst a, Subst b, Subst c, Subst d) => Subst (a,b,c,d) where+instance (Subst t a, Subst t b, Subst t c, Subst t d) => Subst t (a, b, c, d) where applySubst rho (x,y,z,u) = (applySubst rho x, applySubst rho y, applySubst rho z, applySubst rho u) -instance Subst ClauseBody where+instance Subst Term ClauseBody where applySubst rho (Body t) = Body $ applySubst rho t applySubst rho (Bind b) = Bind $ applySubst rho b applySubst _ NoBody = NoBody -instance Subst Clause where- -- NOTE: This only happens when reifying extended lambdas, in which case there are- -- no interesting dot patterns and we don't care about the type.- applySubst rho c = c { clauseBody = applySubst rho $ clauseBody c }+instance Subst Term Candidate where+ applySubst rho (Candidate u t eti) = Candidate (applySubst rho u) (applySubst rho t) eti +instance Subst Term EqualityView where+ applySubst rho (OtherType t) = OtherType+ (applySubst rho t)+ applySubst rho (EqualityType s eq l t a b) = EqualityType+ (applySubst rho s)+ eq+ (applySubst rho l)+ (applySubst rho t)+ (applySubst rho a)+ (applySubst rho b)+ --------------------------------------------------------------------------- -- * Telescopes --------------------------------------------------------------------------- type TelView = TelV Type data TelV a = TelV { theTel :: Tele (Dom a), theCore :: a }- deriving (Typeable, Show, Eq, Ord, Functor)+ deriving (Typeable, Show, Functor) +deriving instance (Subst t a, Eq a) => Eq (TelV a)+deriving instance (Subst t a, Ord a) => Ord (TelV a)+ type ListTel' a = [Dom (a, Type)] type ListTel = ListTel' ArgName telFromList' :: (a -> ArgName) -> ListTel' a -> Telescope telFromList' f = foldr extTel EmptyTel where- extTel (Common.Dom info (x, a)) = ExtendTel (Common.Dom info a) . Abs (f x)+ extTel (Dom info (x, a)) = ExtendTel (Dom info a) . Abs (f x) telFromList :: ListTel -> Telescope telFromList = telFromList' id@@ -862,7 +917,7 @@ -- since 'absBody' raises. telToArgs :: Telescope -> [Arg ArgName]-telToArgs tel = [ Common.Arg (domInfo d) (fst $ unDom d) | d <- telToList tel ]+telToArgs tel = [ Arg (domInfo d) (fst $ unDom d) | d <- telToList tel ] -- | Turn a typed binding @(x1 .. xn : A)@ into a telescope. bindsToTel' :: (Name -> a) -> [Name] -> Dom Type -> ListTel' a@@ -898,7 +953,7 @@ -- | @mkPi dom t = telePi (telFromList [dom]) t@ mkPi :: Dom (ArgName, Type) -> Type -> Type-mkPi (Common.Dom info (x, a)) b = el $ Pi (Common.Dom info a) (mkAbs x b)+mkPi (Dom info (x, a)) b = el $ Pi (Dom info a) (mkAbs x b) where el = El $ dLub (getSort a) (Abs x (getSort b)) -- dLub checks x freeIn @@ -943,7 +998,7 @@ teleNoAbs :: a -> Term -> Term instance TeleNoAbs ListTel where- teleNoAbs tel t = foldr (\ (Common.Dom ai (x, _)) -> Lam ai . NoAbs x) t tel+ teleNoAbs tel t = foldr (\ (Dom ai (x, _)) -> Lam ai . NoAbs x) t tel instance TeleNoAbs Telescope where teleNoAbs tel = teleNoAbs $ telToList tel@@ -955,7 +1010,7 @@ dLub :: Sort -> Abs Sort -> Sort dLub s1 (NoAbs _ s2) = sLub s1 s2 dLub s1 b@(Abs _ s2) = case occurrence 0 s2 of- Flexible -> DLub s1 b+ Flexible _ -> DLub s1 b Irrelevantly -> DLub s1 b NoOccurrence -> sLub s1 (noabsApp __IMPOSSIBLE__ b) -- Free.Unused -> sLub s1 (absApp b __IMPOSSIBLE__) -- triggers Issue784@@ -970,31 +1025,31 @@ --------------------------------------------------------------------------- -- | Instantiate an abstraction. Strict in the term.-absApp :: Subst t => Abs t -> Term -> t+absApp :: Subst t a => Abs a -> t -> a absApp (Abs _ v) u = subst 0 u v absApp (NoAbs _ v) _ = v -- | Instantiate an abstraction. Lazy in the term, which allow it to be -- __IMPOSSIBLE__ in the case where the variable shouldn't be used but we -- cannot use 'noabsApp'. Used in Apply.-lazyAbsApp :: Subst t => Abs t -> Term -> t+lazyAbsApp :: Subst t a => Abs a -> t -> a lazyAbsApp (Abs _ v) u = applySubst (u :# IdS) v -- Note: do not use consS here! lazyAbsApp (NoAbs _ v) _ = v -- | Instantiate an abstraction that doesn't use its argument.-noabsApp :: Subst t => Empty -> Abs t -> t+noabsApp :: Subst t a => Empty -> Abs a -> a noabsApp err (Abs _ v) = strengthen err v noabsApp _ (NoAbs _ v) = v -absBody :: Subst t => Abs t -> t+absBody :: Subst t a => Abs a -> a absBody (Abs _ v) = v absBody (NoAbs _ v) = raise 1 v -mkAbs :: (Subst a, Free a) => ArgName -> a -> Abs a+mkAbs :: (Subst t a, Free a) => ArgName -> a -> Abs a mkAbs x v | 0 `freeIn` v = Abs x v | otherwise = NoAbs x (raise (-1) v) -reAbs :: (Subst a, Free a) => Abs a -> Abs a+reAbs :: (Subst t a, Free a) => Abs a -> Abs a reAbs (NoAbs x v) = NoAbs x v reAbs (Abs x v) = mkAbs x v @@ -1004,7 +1059,7 @@ -- at point of application of @k@ and the content of @b@ -- are at the same context. -- Precondition: @a@ and @b@ are at the same context at call time.-underAbs :: Subst a => (a -> b -> b) -> a -> Abs b -> Abs b+underAbs :: Subst t a => (a -> b -> b) -> a -> Abs b -> Abs b underAbs cont a b = case b of Abs x t -> Abs x $ cont (raise 1 a) t NoAbs x t -> NoAbs x $ cont a t@@ -1013,7 +1068,7 @@ -- performs operation @k@ on @a@ and the body of @b@, -- and puts the 'Lam's back. @a@ is raised correctly -- according to the number of abstractions.-underLambdas :: Subst a => Int -> (a -> Term -> Term) -> a -> Term -> Term+underLambdas :: Subst Term a => Int -> (a -> Term -> Term) -> a -> Term -> Term underLambdas n cont a v = loop n a v where loop 0 a v = cont a v loop n a v = case ignoreSharing v of@@ -1072,11 +1127,12 @@ deriving instance Ord NotBlocked deriving instance Eq t => Eq (Blocked t) deriving instance Ord t => Ord (Blocked t)+deriving instance Eq Candidate -deriving instance (Subst a, Eq a) => Eq (Elim' a)-deriving instance (Subst a, Ord a) => Ord (Elim' a)-deriving instance (Subst a, Eq a) => Eq (Tele a)-deriving instance (Subst a, Ord a) => Ord (Tele a)+deriving instance (Subst t a, Eq a) => Eq (Elim' a)+deriving instance (Subst t a, Ord a) => Ord (Elim' a)+deriving instance (Subst t a, Eq a) => Eq (Tele a)+deriving instance (Subst t a, Ord a) => Ord (Tele a) deriving instance Eq Constraint deriving instance Eq Section@@ -1116,8 +1172,6 @@ _ == _ = False instance Ord Term where- ExtLam{} `compare` _ = __IMPOSSIBLE__- _ `compare` ExtLam{} = __IMPOSSIBLE__ Shared a `compare` Shared x | a == x = EQ Shared a `compare` x = compare (derefPtr a) x a `compare` Shared x = compare a (derefPtr x)@@ -1150,12 +1204,12 @@ _ `compare` MetaV{} = GT DontCare{} `compare` DontCare{} = EQ -instance (Subst a, Eq a) => Eq (Abs a) where+instance (Subst t a, Eq a) => Eq (Abs a) where NoAbs _ a == NoAbs _ b = a == b Abs _ a == Abs _ b = a == b a == b = absBody a == absBody b -instance (Subst a, Ord a) => Ord (Abs a) where+instance (Subst t a, Ord a) => Ord (Abs a) where NoAbs _ a `compare` NoAbs _ b = a `compare` b Abs _ a `compare` Abs _ b = a `compare` b a `compare` b = absBody a `compare` absBody b
+ src/full/Agda/TypeChecking/Substitute/Pattern.hs view
@@ -0,0 +1,43 @@+{-# LANGUAGE CPP,+ FlexibleContexts,+ FlexibleInstances,+ MultiParamTypeClasses,+ TypeSynonymInstances #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}+module Agda.TypeChecking.Substitute.Pattern where++import Data.Maybe+import Data.Traversable (traverse)++import Agda.Syntax.Common+import Agda.Syntax.Internal as I+import Agda.Syntax.Internal.Pattern++import Agda.TypeChecking.Substitute++#include "undefined.h"+import Agda.Utils.Impossible++instance DeBruijn DeBruijnPattern where+ debruijnNamedVar n i = VarP (i,n)+ debruijnView (VarP (i,_)) = Just i+ debruijnView _ = Nothing++fromPatternSubstitution :: PatternSubstitution -> Substitution+fromPatternSubstitution = fmap patternToTerm++applyPatSubst :: (Subst Term a) => PatternSubstitution -> a -> a+applyPatSubst = applySubst . fromPatternSubstitution++instance Subst DeBruijnPattern DeBruijnPattern where+ applySubst IdS p = p+ applySubst rho p = case p of+ VarP (i,n) -> useName n $ lookupS rho i+ DotP u -> DotP $ applyPatSubst rho u+ ConP c ci ps -> ConP c ci $ applySubst rho ps+ LitP x -> p+ ProjP f -> p+ where+ useName :: PatVarName -> DeBruijnPattern -> DeBruijnPattern+ useName n (VarP (i,"_")) = VarP (i,n)+ useName _ x = x
src/full/Agda/TypeChecking/SyntacticEquality.hs view
@@ -3,6 +3,7 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE PatternGuards #-} {-# LANGUAGE TupleSections #-}+{-# LANGUAGE UndecidableInstances #-} -- | A syntactic equality check that takes meta instantiations into account, -- but does not reduce. It replaces@@ -21,11 +22,12 @@ import Control.Arrow ((***)) import Control.Monad.State hiding (mapM) -import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Internal -import Agda.TypeChecking.Monad-import Agda.TypeChecking.Reduce (instantiate)+import Agda.TypeChecking.Monad (ReduceM)+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Reduce.Monad import Agda.TypeChecking.Substitute import Agda.Utils.Monad (ifM)@@ -42,13 +44,13 @@ -- only that @v,v'@ are only fully instantiated to the depth -- where they are equal. -{-# SPECIALIZE checkSyntacticEquality :: Term -> Term -> TCM ((Term, Term), Bool) #-}-{-# SPECIALIZE checkSyntacticEquality :: Type -> Type -> TCM ((Type, Type), Bool) #-}-checkSyntacticEquality :: (SynEq a) => a -> a -> TCM ((a, a), Bool)+{-# SPECIALIZE checkSyntacticEquality :: Term -> Term -> ReduceM ((Term, Term), Bool) #-}+{-# SPECIALIZE checkSyntacticEquality :: Type -> Type -> ReduceM ((Type, Type), Bool) #-}+checkSyntacticEquality :: (SynEq a) => a -> a -> ReduceM ((a, a), Bool) checkSyntacticEquality v v' = synEq v v' `runStateT` True -- | Monad for checking syntactic equality-type SynEqM = StateT Bool TCM+type SynEqM = StateT Bool ReduceM -- | Return, flagging inequalty. inequal :: a -> SynEqM a@@ -95,7 +97,7 @@ -- | Syntactic term equality ignores 'DontCare' stuff. instance SynEq Term where synEq v v' = do- (v, v') <- lift $ instantiate (v, v')+ (v, v') <- lift $ instantiate' (v, v') -- currently destroys sharing -- TODO: preserve sharing! case (ignoreSharing v, ignoreSharing v') of@@ -127,7 +129,7 @@ instance SynEq LevelAtom where synEq l l' = do- l <- lift (unBlock =<< instantiate l)+ l <- lift (unBlock =<< instantiate' l) case (l, l') of (MetaLevel m vs , MetaLevel m' vs' ) | m == m' -> MetaLevel m <$$> synEq vs vs' (UnreducedLevel v, UnreducedLevel v' ) -> UnreducedLevel <$$> synEq v v'@@ -146,7 +148,7 @@ instance SynEq Sort where synEq s s' = do- (s, s') <- lift $ instantiate (s, s')+ (s, s') <- lift $ instantiate' (s, s') case (s, s') of (Type l , Type l' ) -> levelSort <$$> synEq l l' (DLub a b, DLub a' b') -> dLub <$$> synEq a a' <**> synEq' b b'@@ -170,7 +172,7 @@ (Apply a, Apply a') -> Apply <$$> synEq a a' _ -> inequal (e, e') -instance (Subst a, SynEq a) => SynEq (Abs a) where+instance (Subst t a, SynEq a) => SynEq (Abs a) where synEq a a' = case (a, a') of (NoAbs x b, NoAbs x' b') -> (NoAbs x *** NoAbs x') <$> synEq b b'@@ -180,21 +182,21 @@ {- TRIGGERS test/fail/UnequalHiding -- | Ignores 'ArgInfo'.-instance SynEq a => SynEq (Common.Arg c a) where- synEq (Common.Arg ai a) (Common.Arg ai' a') = (Common.Arg ai *** Common.Arg ai') <$> synEq a a'+instance SynEq a => SynEq (Arg c a) where+ synEq (Arg ai a) (Arg ai' a') = (Arg ai *** Arg ai') <$> synEq a a' -- | Ignores 'ArgInfo'.-instance SynEq a => SynEq (Common.Dom c a) where- synEq (Common.Dom ai a) (Common.Dom ai' a') = (Common.Dom ai *** Common.Dom ai') <$> synEq a a'+instance SynEq a => SynEq (Dom c a) where+ synEq (Dom ai a) (Dom ai' a') = (Dom ai *** Dom ai') <$> synEq a a' -} -instance (SynEq a, SynEq c) => SynEq (Common.Arg c a) where- synEq (Common.Arg ai a) (Common.Arg ai' a') = Common.Arg <$$> synEq ai ai' <**> synEq a a'+instance SynEq a => SynEq (Arg a) where+ synEq (Arg ai a) (Arg ai' a') = Arg <$$> synEq ai ai' <**> synEq a a' -instance (SynEq a, SynEq c) => SynEq (Common.Dom c a) where- synEq (Common.Dom ai a) (Common.Dom ai' a') = Common.Dom <$$> synEq ai ai' <**> synEq a a'+instance SynEq a => SynEq (Dom a) where+ synEq (Dom ai a) (Dom ai' a') = Dom <$$> synEq ai ai' <**> synEq a a' -instance (SynEq c) => SynEq (Common.ArgInfo c) where- synEq ai@(Common.ArgInfo h r c) ai'@(Common.ArgInfo h' r' c')- | h == h', r == r' = Common.ArgInfo h r <$$> synEq c c'+instance SynEq ArgInfo where+ synEq ai@(ArgInfo h r) ai'@(ArgInfo h' r')+ | h == h', r == r' = pure2 ai | otherwise = inequal (ai, ai')
src/full/Agda/TypeChecking/Telescope.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE ScopedTypeVariables #-} #if __GLASGOW_HASKELL__ >= 710 {-# LANGUAGE FlexibleContexts #-}@@ -7,18 +8,24 @@ module Agda.TypeChecking.Telescope where import Control.Applicative-import Control.Monad (forM_, unless)+import Control.Monad (forM_, unless, guard)+import Data.IntSet (IntSet)+import qualified Data.IntSet as IntSet import Data.List+import Data.Maybe -import Agda.Syntax.Common hiding (Arg, Dom, NamedArg, ArgInfo)-import qualified Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Internal.Pattern+import Agda.Syntax.Position import Agda.TypeChecking.Monad import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Substitute.Pattern import Agda.TypeChecking.Free +import Agda.Utils.Functor import Agda.Utils.List import Agda.Utils.Permutation import Agda.Utils.Size@@ -31,6 +38,7 @@ data OutputTypeName = OutputTypeName QName+ | OutputTypeVar | OutputTypeNameNotYetKnown | NoOutputTypeName @@ -43,10 +51,9 @@ -- Possible base types: Def n _ -> return $ OutputTypeName n Sort{} -> return NoOutputTypeName- Var{} -> return NoOutputTypeName+ Var n _ -> return OutputTypeVar -- Not base types: Con{} -> __IMPOSSIBLE__- ExtLam{} -> __IMPOSSIBLE__ Lam{} -> __IMPOSSIBLE__ Lit{} -> __IMPOSSIBLE__ Level{} -> __IMPOSSIBLE__@@ -56,19 +63,20 @@ DontCare{} -> __IMPOSSIBLE__ -- | The permutation should permute the corresponding telescope. (left-to-right list)-renameP :: Subst t => Permutation -> t -> t+renameP :: Subst t a => Permutation -> a -> a renameP p = applySubst (renaming p) -- | If @permute π : [a]Γ -> [a]Δ@, then @applySubst (renaming π) : Term Γ -> Term Δ@-renaming :: Permutation -> Substitution+renaming :: forall a. DeBruijn a => Permutation -> Substitution' a renaming p = prependS __IMPOSSIBLE__ gamma $ raiseS $ size p where- gamma = inversePermute p var- -- gamma = safePermute (invertP (-1) p) $ map var [0..]+ gamma :: [Maybe a]+ gamma = inversePermute p (debruijnVar :: Int -> a)+ -- gamma = safePermute (invertP (-1) p) $ map deBruijnVar [0..] -- | If @permute π : [a]Γ -> [a]Δ@, then @applySubst (renamingR π) : Term Δ -> Term Γ@-renamingR :: Permutation -> Substitution-renamingR p@(Perm n _) = permute (reverseP p) (map var [0..]) ++# raiseS n+renamingR :: DeBruijn a => Permutation -> Substitution' a+renamingR p@(Perm n _) = permute (reverseP p) (map debruijnVar [0..]) ++# raiseS n -- | Flatten telescope: (Γ : Tel) -> [Type Γ] flattenTel :: Telescope -> [Dom Type]@@ -110,10 +118,45 @@ teleArgNames :: Telescope -> [Arg ArgName] teleArgNames = map (argFromDom . fmap fst) . telToList -teleArgs :: Telescope -> Args-teleArgs tel = [ Common.Arg info (var i) | (i, Common.Dom info _) <- zip (downFrom $ size l) l ]+teleArgs :: (DeBruijn a) => Telescope -> [Arg a]+teleArgs tel =+ [ Arg info (debruijnNamedVar n i)+ | (i, Dom info (n,_)) <- zip (downFrom $ size l) l ] where l = telToList tel +teleNamedArgs :: (DeBruijn a) => Telescope -> [NamedArg a]+teleNamedArgs tel =+ [ Arg info (Named (Just $ Ranged noRange $ argNameToString name) (debruijnNamedVar name i))+ | (i, Dom info (name,_)) <- zip (downFrom $ size l) l ]+ where l = telToList tel++-- | Permute telescope: permutes or drops the types in the telescope according+-- to the given permutation. Assumes that the permutation preserves the+-- dependencies in the telescope.+permuteTel :: Permutation -> Telescope -> Telescope+permuteTel perm tel =+ let names = permute perm $ teleNames tel+ types = permute perm $ renameP perm $ flattenTel tel+ in unflattenTel names types++-- | Recursively computes dependencies of a set of variables in a given+-- telescope. Any dependencies outside of the telescope are ignored.+varDependencies :: Telescope -> IntSet -> IntSet+varDependencies tel = allDependencies IntSet.empty+ where+ n = size tel+ ts = flattenTel tel++ directDependencies :: Int -> IntSet+ directDependencies i = allFreeVars $ ts !! (n-1-i)++ allDependencies :: IntSet -> IntSet -> IntSet+ allDependencies =+ IntSet.foldr $ \j soFar ->+ if j >= n || j `IntSet.member` soFar+ then soFar+ else IntSet.insert j $ allDependencies soFar $ directDependencies j+ -- | A telescope split in two. data SplitTel = SplitTel { firstPart :: Telescope@@ -137,30 +180,119 @@ ts0 = flattenTel tel n = size tel - -- We start with a rough split into fv and the rest. This will most likely- -- not be correct so we patch it up later with reorderTel.+ is = varDependencies tel fv+ isC = IntSet.fromList [0..(n-1)] `IntSet.difference` is - -- Convert given de Bruijn indices into ascending list of de Bruijn levels.- is = map (n - 1 -) $ dropWhile (>= n) $ VarSet.toDescList fv- -- Compute the complement (de Bruijn levels not mentioned in @fv@).- isC = [0..n - 1] \\ is- perm0 = Perm n $ is ++ isC+ perm = Perm n $ map (n-1-) $ VarSet.toDescList is ++ VarSet.toDescList isC - permuteTel p ts = renameP (reverseP p) (permute p ts)+ ts1 = renameP (reverseP perm) (permute perm ts0) - ts1 = permuteTel perm0 ts0+ tel' = unflattenTel (permute perm names) ts1 - perm1 = reorderTel_ ts1+ m = size is+ (tel1, tel2) = telFromList -*- telFromList $ splitAt m $ telToList tel' - ts2 = permuteTel perm1 ts1+-- | As splitTelescope, but fails if any additional variables or reordering+-- would be needed to make the first part well-typed.+splitTelescopeExact+ :: [Int] -- ^ A list of de Bruijn indices+ -> Telescope -- ^ The telescope to split+ -> Maybe SplitTel -- ^ @firstPart@ mentions the given variables in the given order,+ -- @secondPart@ contains all other variables+splitTelescopeExact is tel = guard ok $> SplitTel tel1 tel2 perm+ where+ names = teleNames tel+ ts0 = flattenTel tel+ n = size tel - perm = composeP perm1 perm0+ checkDependencies :: IntSet -> [Int] -> Bool+ checkDependencies soFar [] = True+ checkDependencies soFar (j:js) = ok && checkDependencies (IntSet.insert j soFar) js+ where+ fv' = allFreeVars $ ts0 !! (n-1-j)+ fv = fv' `IntSet.intersection` IntSet.fromAscList [ 0 .. n-1 ]+ ok = fv `IntSet.isSubsetOf` soFar - tel' = unflattenTel (permute perm names) ts2+ ok = all (<n) is && checkDependencies IntSet.empty is - m = length $ takeWhile (`notElem` is) $ reverse $ permPicks perm- (tel1, tel2) = telFromList -*- telFromList $ splitAt (n - m) $ telToList tel'+ isC = downFrom n \\ is + perm = Perm n $ map (n-1-) $ is ++ isC++ ts1 = renameP (reverseP perm) (permute perm ts0)++ tel' = unflattenTel (permute perm names) ts1++ m = size is+ (tel1, tel2) = telFromList -*- telFromList $ splitAt m $ telToList tel'++-- | Try to instantiate one variable in the telescope (given by its de Bruijn+-- level) with the given value, returning the new telescope and a+-- substitution to the old one. Returns Nothing if the given value depends+-- (directly or indirectly) on the variable.+instantiateTelescope+ :: Telescope -- ^ ⊢ Γ+ -> Int -- ^ Γ ⊢ var k : A+ -> Term -- ^ Γ ⊢ u : A+ -> Maybe (Telescope, -- ⊢ Γ'+ PatternSubstitution, -- Γ' ⊢ σ : Γ+ Permutation) -- Γ ⊢ flipP ρ : Γ'+instantiateTelescope tel k u = guard ok $> (tel', sigma, rho)+ where+ names = teleNames tel+ ts0 = flattenTel tel+ n = size tel+ j = n-1-k++ -- is0 is the part of Γ that is needed to type u+ is0 = varDependencies tel $ allFreeVars u+ -- is1 is the rest of Γ (minus the variable we are instantiating)+ is1 = IntSet.delete j $+ IntSet.fromAscList [ 0 .. n-1 ] `IntSet.difference` is0+ -- we work on de Bruijn indices, so later parts come first+ is = IntSet.toAscList is1 ++ IntSet.toAscList is0++ -- if u depends on var j, we cannot instantiate+ ok = not $ j `IntSet.member` is0++ perm = Perm n $ is -- works on de Bruijn indices+ rho = reverseP perm -- works on de Bruijn levels++ u' = renameP perm u -- Γ' ⊢ u' : A'+ us = map (\i -> fromMaybe (DotP u') (debruijnVar <$> findIndex (i ==) is)) [ 0 .. n-1 ]+ sigma = us ++# raiseS (n-1)++ ts1 = permute rho $ applyPatSubst sigma ts0+ tel' = unflattenTel (permute rho names) ts1++-- | Try to eta-expand one variable in the telescope (given by its de Bruijn+-- level)+expandTelescopeVar+ :: Telescope -- Γ = Γ₁(x : D pars)Γ₂+ -> Int -- k = size Γ₁+ -> Telescope -- Γ₁ ⊢ Δ+ -> ConHead -- Γ₁ ⊢ c : Δ → D pars+ -> ( Telescope -- Γ' = Γ₁ΔΓ₂[x ↦ c Δ]+ , PatternSubstitution) -- Γ' ⊢ ρ : Γ+expandTelescopeVar gamma k delta c = (tel', rho)+ where+ (ts1,a:ts2) = fromMaybe __IMPOSSIBLE__ $+ splitExactlyAt k $ telToList gamma++ cpi = ConPatternInfo+ { conPRecord = Just ConPImplicit+ , conPType = Just $ snd <$> argFromDom a+ }+ cdelta = ConP c cpi $ teleNamedArgs delta -- Γ₁Δ ⊢ c Δ : D pars+ rho0 = consS cdelta $ raiseS (size delta) -- Γ₁Δ ⊢ ρ₀ : Γ₁(x : D pars)+ rho = liftS (size ts2) rho0 -- Γ₁ΔΓ₂ρ₀ ⊢ ρ : Γ₁(x : D pars)Γ₂++ gamma1 = telFromList ts1+ gamma2' = applyPatSubst rho0 $ telFromList ts2++ tel' = gamma1 `abstract` (delta `abstract` gamma2')++ telView :: Type -> TCM TelView telView = telViewUpTo (-1) @@ -242,7 +374,8 @@ case n of OutputTypeName n -> addNamedInstance x n OutputTypeNameNotYetKnown -> addUnknownInstance x- NoOutputTypeName -> typeError $ GenericError $ "Terms marked as eligible for instance search should end with a name"+ NoOutputTypeName -> typeError $ WrongInstanceDeclaration+ OutputTypeVar -> typeError $ WrongInstanceDeclaration resolveUnknownInstanceDefs :: TCM () resolveUnknownInstanceDefs = do
+ src/full/Agda/TypeChecking/Telescope.hs-boot view
@@ -0,0 +1,7 @@++module Agda.TypeChecking.Telescope where++import Agda.Syntax.Internal+import Agda.TypeChecking.Monad.Base++piApplyM :: Type -> Args -> TCM Type
src/full/Agda/TypeChecking/Test/Generators.hs view
@@ -12,7 +12,7 @@ import qualified Data.List as List (sort, nub) import Agda.Syntax.Position-import Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Literal import Agda.Syntax.Fixity import Agda.Syntax.Internal as I@@ -154,7 +154,7 @@ { nameId = NameId n 1 , nameConcrete = C.Name noRange [C.Id s] , nameBindingSite = noRange- , nameFixity = defaultFixity'+ , nameFixity = noFixity' } } @@ -196,10 +196,10 @@ HiddenFreqs {hiddenFreq = hideF, notHiddenFreq = nohideF } = hiddenFreqs $ tcFrequencies conf -instance (GenC c, GenC a) => GenC (Common.Arg c a) where+instance GenC a => GenC (Arg a) where genC conf = (\ (h, a) -> Arg (setHiding h defaultArgInfo) a) <$> genC conf -instance (GenC c, GenC a) => GenC (Common.Dom c a) where+instance GenC a => GenC (Dom a) where genC conf = (\ (h, a) -> Dom (setHiding h defaultArgInfo) a) <$> genC conf instance GenC a => GenC (Abs a) where@@ -245,7 +245,7 @@ instance GenC Literal where genC conf = oneof (concat $ zipWith gen useLits- [ uncurry LitInt <$> genC conf+ [ uncurry LitNat <$> genC conf , uncurry LitFloat <$> genC conf , uncurry LitString <$> genC conf , uncurry LitChar <$> genC conf@@ -399,13 +399,14 @@ noShrink = unConName instance ShrinkC Literal Literal where- shrinkC _ (LitInt _ 0) = []- shrinkC conf l = LitInt noRange 0 : case l of- LitInt r n -> LitInt r <$> shrink n+ shrinkC _ (LitNat _ 0) = []+ shrinkC conf l = LitNat noRange 0 : case l of+ LitNat r n -> LitNat r <$> shrink n LitString r s -> LitString r <$> shrinkC conf s LitChar r c -> LitChar r <$> shrinkC conf c LitFloat r x -> LitFloat r <$> shrink x LitQName r x -> []+ LitMeta{} -> [] noShrink = id instance ShrinkC Char Char where@@ -424,11 +425,11 @@ shrinkC conf (Abs s x) = Abs s <$> shrinkC (extendConf conf) x noShrink = fmap noShrink -instance ShrinkC a b => ShrinkC (I.Arg a) (I.Arg b) where+instance ShrinkC a b => ShrinkC (Arg a) (Arg b) where shrinkC conf (Arg info x) = (\ (h,x) -> Arg (setHiding h info) x) <$> shrinkC conf (argInfoHiding info, x) noShrink = fmap noShrink -instance ShrinkC a b => ShrinkC (I.Dom a) (I.Dom b) where+instance ShrinkC a b => ShrinkC (Dom a) (Dom b) where shrinkC conf (Dom info x) = (\ (h,x) -> Dom (setHiding h info) x) <$> shrinkC conf (argInfoHiding info, x) noShrink = fmap noShrink @@ -484,7 +485,6 @@ (MetaV m <$> shrinkC conf (NoType es)) DontCare _ -> [] Shared{} -> __IMPOSSIBLE__- ExtLam _ _ -> __IMPOSSIBLE__ where validType t | not (tcIsType conf) = True@@ -517,7 +517,6 @@ MetaV m args -> MetaV m $ killVar i args DontCare mv -> DontCare $ killVar i mv Shared{} -> __IMPOSSIBLE__- ExtLam _ _ -> __IMPOSSIBLE__ instance KillVar Type where killVar i (El s t) = El s $ killVar i t@@ -529,10 +528,10 @@ instance KillVar a => KillVar (Elim' a) where killVar i = fmap (killVar i) -instance KillVar a => KillVar (I.Arg a) where+instance KillVar a => KillVar (Arg a) where killVar i = fmap (killVar i) -instance KillVar a => KillVar (I.Dom a) where+instance KillVar a => KillVar (Dom a) where killVar i = fmap (killVar i) instance KillVar a => KillVar (Abs a) where
src/full/Agda/TypeChecking/Unquote.hs view
@@ -1,23 +1,32 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE PatternGuards #-} module Agda.TypeChecking.Unquote where +import Control.Arrow ((&&&), (***), first, second) import Control.Applicative-import Control.Monad.State (evalState, get, put)-import Control.Monad.Writer (execWriterT, tell)+import Control.Monad.State (StateT(..), evalStateT, get, gets, put, modify)+import Control.Monad.Reader (ReaderT(..), ask, asks)+import Control.Monad.Writer (WriterT(..), execWriterT, runWriterT, tell) import Control.Monad.Trans (lift)+import Control.Monad import Data.Char import Data.Maybe (fromMaybe) import Data.Traversable (traverse)+import Data.Map (Map)+import qualified Data.Map as Map import Agda.Syntax.Common import Agda.Syntax.Internal as I+import qualified Agda.Syntax.Reflected as R import Agda.Syntax.Literal import Agda.Syntax.Position+import Agda.Syntax.Fixity+import Agda.Syntax.Info import Agda.Syntax.Translation.InternalToAbstract+import Agda.Syntax.Translation.ReflectedToAbstract import Agda.TypeChecking.CompiledClause import Agda.TypeChecking.Datatypes ( getConHead )@@ -29,52 +38,115 @@ import Agda.TypeChecking.Monad.Exception import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Reduce.Monad+import Agda.TypeChecking.Reduce.Monad hiding (reportSDoc) import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Quote+import Agda.TypeChecking.Conversion+import Agda.TypeChecking.MetaVars+import Agda.TypeChecking.EtaContract+import Agda.TypeChecking.Primitive +import {-# SOURCE #-} Agda.TypeChecking.Rules.Term+import {-# SOURCE #-} Agda.TypeChecking.Rules.Def+ import Agda.Utils.Except import Agda.Utils.Impossible import Agda.Utils.Monad ( ifM )-import Agda.Utils.Permutation ( Permutation(Perm) )+import Agda.Utils.Permutation ( Permutation(Perm), compactP ) import Agda.Utils.String ( Str(Str), unStr ) import Agda.Utils.VarSet (VarSet) import qualified Agda.Utils.VarSet as Set+import Agda.Utils.Maybe.Strict (toLazy)+import Agda.Utils.FileName #include "undefined.h" agdaTermType :: TCM Type agdaTermType = El (mkType 0) <$> primAgdaTerm +agdaTypeType :: TCM Type+agdaTypeType = agdaTermType+ qNameType :: TCM Type qNameType = El (mkType 0) <$> primQName -type UnquoteM = ExceptionT UnquoteError TCM+data Dirty = Dirty | Clean+ deriving (Eq) -runUnquoteM :: UnquoteM a -> TCM (Either UnquoteError a)-runUnquoteM = runExceptionT+-- Keep track of the original context. We need to use that when adding new+-- definitions. Also state snapshot from last commit and whether the state is+-- dirty (definitions have been added).+type UnquoteState = (Dirty, TCState)+type UnquoteM = ReaderT Context (StateT UnquoteState (WriterT [QName] (ExceptionT UnquoteError TCM))) +type UnquoteRes a = Either UnquoteError ((a, UnquoteState), [QName])++unpackUnquoteM :: UnquoteM a -> Context -> UnquoteState -> TCM (UnquoteRes a)+unpackUnquoteM m cxt s = runExceptionT $ runWriterT $ runStateT (runReaderT m cxt) s++packUnquoteM :: (Context -> UnquoteState -> TCM (UnquoteRes a)) -> UnquoteM a+packUnquoteM f = ReaderT $ \ cxt -> StateT $ \ s -> WriterT $ ExceptionT $ f cxt s++runUnquoteM :: UnquoteM a -> TCM (Either UnquoteError (a, [QName]))+runUnquoteM m = do+ cxt <- asks envContext+ s <- get+ z <- unpackUnquoteM m cxt (Clean, s)+ case z of+ Left err -> return $ Left err+ Right ((x, _), decls) -> Right (x, decls) <$ mapM_ isDefined decls+ where+ isDefined x = do+ def <- theDef <$> getConstInfo x+ case def of+ Function{funClauses = []} -> genericError $ "Missing definition for " ++ show x+ _ -> return ()++liftU :: TCM a -> UnquoteM a+liftU = lift . lift . lift . lift++liftU1 :: (TCM (UnquoteRes a) -> TCM (UnquoteRes b)) -> UnquoteM a -> UnquoteM b+liftU1 f m = packUnquoteM $ \ cxt s -> f (unpackUnquoteM m cxt s)++liftU2 :: (TCM (UnquoteRes a) -> TCM (UnquoteRes b) -> TCM (UnquoteRes c)) -> UnquoteM a -> UnquoteM b -> UnquoteM c+liftU2 f m1 m2 = packUnquoteM $ \ cxt s -> f (unpackUnquoteM m1 cxt s) (unpackUnquoteM m2 cxt s)++inOriginalContext :: UnquoteM a -> UnquoteM a+inOriginalContext m =+ packUnquoteM $ \ cxt s ->+ modifyContext (const cxt) $ unpackUnquoteM m cxt s+ isCon :: ConHead -> TCM Term -> UnquoteM Bool-isCon con tm = do t <- lift tm+isCon con tm = do t <- liftU tm case ignoreSharing t of Con con' _ -> return (con == con') _ -> return False -{-unquoteFailedGeneric :: String -> UnquoteM a-unquoteFailedGeneric msg = typeError . GenericError $ "Unable to unquote the " ++ msg+isDef :: QName -> TCM Term -> UnquoteM Bool+isDef f tm = do+ t <- liftU tm+ case ignoreSharing t of+ Def g _ -> return (f == g)+ _ -> return False -unquoteFailed :: String -> String -> Term -> TCM a-unquoteFailed kind msg t = do doc <- prettyTCM t- unquoteFailedGeneric $ "term (" ++ show doc ++ ") of type " ++ kind ++ ".\nReason: " ++ msg ++ "."--}+reduceQuotedTerm :: Term -> UnquoteM Term+reduceQuotedTerm t = do+ b <- liftU $ ifBlocked t (\ m _ -> pure $ Left m)+ (\ t -> pure $ Right t)+ case b of+ Left m -> do s <- gets snd; throwException $ BlockedOnMeta s m+ Right t -> return t+ class Unquote a where- unquote :: Term -> UnquoteM a+ unquote :: I.Term -> UnquoteM a -unquoteH :: Unquote a => I.Arg Term -> UnquoteM a+unquoteH :: Unquote a => Arg Term -> UnquoteM a unquoteH a | isHidden a && isRelevant a = unquote $ unArg a unquoteH a = throwException $ BadVisibility "hidden" a -unquoteN :: Unquote a => I.Arg Term -> UnquoteM a+unquoteN :: Unquote a => Arg Term -> UnquoteM a unquoteN a | notHidden a && isRelevant a = unquote $ unArg a unquoteN a = throwException $ BadVisibility "visible" a@@ -85,91 +157,115 @@ ensureDef :: QName -> UnquoteM QName ensureDef x = do- i <- (theDef <$> getConstInfo x) `catchError` \_ -> return Axiom -- for recursive unquoteDecl+ i <- liftU $ (theDef <$> getConstInfo x) `catchError` \_ -> return Axiom -- for recursive unquoteDecl case i of Constructor{} -> do- def <- lift $ prettyTCM =<< primAgdaTermDef- con <- lift $ prettyTCM =<< primAgdaTermCon+ def <- liftU $ prettyTCM =<< primAgdaTermDef+ con <- liftU $ prettyTCM =<< primAgdaTermCon throwException $ ConInsteadOfDef x (show def) (show con) _ -> return x ensureCon :: QName -> UnquoteM QName ensureCon x = do- i <- (theDef <$> getConstInfo x) `catchError` \_ -> return Axiom -- for recursive unquoteDecl+ i <- liftU $ (theDef <$> getConstInfo x) `catchError` \_ -> return Axiom -- for recursive unquoteDecl case i of Constructor{} -> return x _ -> do- def <- lift $ prettyTCM =<< primAgdaTermDef- con <- lift $ prettyTCM =<< primAgdaTermCon+ def <- liftU $ prettyTCM =<< primAgdaTermDef+ con <- liftU $ prettyTCM =<< primAgdaTermCon throwException $ DefInsteadOfCon x (show def) (show con) -pickName :: Type -> String+pickName :: R.Type -> String pickName a =- case unEl a of- Pi{} -> "f"- Sort{} -> "A"- Def d _ | c:_ <- show (qnameName d),+ case a of+ R.Pi{} -> "f"+ R.Sort{} -> "A"+ R.Def d _ | c:_ <- show (qnameName d), isAlpha c -> [toLower c]- _ -> "_"+ _ -> "_" -instance Unquote I.ArgInfo where+instance Unquote ArgInfo where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of Con c [h,r] -> do choice- [(c `isCon` primArgArgInfo, ArgInfo <$> unquoteN h <*> unquoteN r <*> return [])]+ [(c `isCon` primArgArgInfo, ArgInfo <$> unquoteN h <*> unquoteN r)] __IMPOSSIBLE__ Con c _ -> __IMPOSSIBLE__- _ -> throwException $ NotAConstructor "ArgInfo" t+ _ -> throwException $ NonCanonical "arg info" t -instance Unquote a => Unquote (I.Arg a) where+instance Unquote a => Unquote (Arg a) where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of Con c [info,x] -> do choice [(c `isCon` primArgArg, Arg <$> unquoteN info <*> unquoteN x)] __IMPOSSIBLE__ Con c _ -> __IMPOSSIBLE__- _ -> throwException $ NotAConstructor "Arg" t+ _ -> throwException $ NonCanonical "arg" t -- Andreas, 2013-10-20: currently, post-fix projections are not part of the -- quoted syntax.-instance Unquote a => Unquote (Elim' a) where- unquote t = Apply <$> unquote t+instance Unquote R.Elim where+ unquote t = R.Apply <$> unquote t instance Unquote Integer where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of- Lit (LitInt _ n) -> return n- _ -> throwException $ NotALiteral "Integer" t+ Lit (LitNat _ n) -> return n+ _ -> throwException $ NonCanonical "integer" t instance Unquote Double where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of Lit (LitFloat _ x) -> return x- _ -> throwException $ NotALiteral "Float" t+ _ -> throwException $ NonCanonical "float" t instance Unquote Char where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of Lit (LitChar _ x) -> return x- _ -> throwException $ NotALiteral "Char" t+ _ -> throwException $ NonCanonical "char" t instance Unquote Str where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of Lit (LitString _ x) -> return (Str x)- _ -> throwException $ NotALiteral "String" t+ _ -> throwException $ NonCanonical "string" t +unquoteString :: Term -> UnquoteM String+unquoteString x = unStr <$> unquote x++unquoteNString :: Arg Term -> UnquoteM String+unquoteNString x = unStr <$> unquoteN x++data ErrorPart = StrPart String | TermPart R.Term | NamePart QName++instance PrettyTCM ErrorPart where+ prettyTCM (StrPart s) = text s+ prettyTCM (TermPart t) = prettyTCM t+ prettyTCM (NamePart x) = prettyTCM x++instance Unquote ErrorPart where+ unquote t = do+ t <- reduceQuotedTerm t+ case ignoreSharing t of+ Con c [x] ->+ choice [ (c `isCon` primAgdaErrorPartString, StrPart <$> unquoteNString x)+ , (c `isCon` primAgdaErrorPartTerm, TermPart <$> unquoteN x)+ , (c `isCon` primAgdaErrorPartName, NamePart <$> unquoteN x) ]+ __IMPOSSIBLE__+ _ -> throwException $ NonCanonical "error part" t+ instance Unquote a => Unquote [a] where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of Con c [x,xs] -> do choice@@ -180,11 +276,11 @@ [(c `isCon` primNil, return [])] __IMPOSSIBLE__ Con c _ -> __IMPOSSIBLE__- _ -> throwException $ NotAConstructor "List" t+ _ -> throwException $ NonCanonical "list" t instance Unquote Hiding where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of Con c [] -> do choice@@ -193,11 +289,11 @@ ,(c `isCon` primVisible, return NotHidden)] __IMPOSSIBLE__ Con c vs -> __IMPOSSIBLE__- _ -> throwException $ NotAConstructor "Hiding" t+ _ -> throwException $ NonCanonical "visibility" t instance Unquote Relevance where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of Con c [] -> do choice@@ -205,198 +301,356 @@ ,(c `isCon` primIrrelevant, return Irrelevant)] __IMPOSSIBLE__ Con c vs -> __IMPOSSIBLE__- _ -> throwException $ NotAConstructor "Relevance" t+ _ -> throwException $ NonCanonical "relevance" t instance Unquote QName where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of Lit (LitQName _ x) -> return x- _ -> throwException $ NotALiteral "QName" t--instance Unquote ConHead where- unquote t = lift . getConHead =<< ensureCon =<< unquote t--instance Unquote a => Unquote (Abs a) where- unquote t = Abs "_" <$> unquote t+ _ -> throwException $ NonCanonical "name" t -instance Unquote Sort where+instance Unquote a => Unquote (R.Abs a) where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of- Con c [] -> do- choice- [(c `isCon` primAgdaSortUnsupported, pure $ Type $ Max [Plus 0 $ UnreducedLevel $ hackReifyToMeta])]- __IMPOSSIBLE__- Con c [u] -> do+ Con c [x,y] -> do choice- [(c `isCon` primAgdaSortSet, Type <$> unquoteN u)- ,(c `isCon` primAgdaSortLit, Type . levelMax . (:[]) . ClosedLevel <$> unquoteN u)]+ [(c `isCon` primAbsAbs, R.Abs <$> (hint <$> unquoteNString x) <*> unquoteN y)] __IMPOSSIBLE__ Con c _ -> __IMPOSSIBLE__- _ -> throwException $ NotAConstructor "Sort" t+ _ -> throwException $ NonCanonical "abstraction" t -instance Unquote Level where- unquote l = Max . (:[]) . Plus 0 . UnreducedLevel <$> unquote l+ where hint x | not (null x) = x+ | otherwise = "_" -instance Unquote Type where+getCurrentPath :: TCM AbsolutePath+getCurrentPath = fromMaybe __IMPOSSIBLE__ <$> asks envCurrentPath++instance Unquote MetaId where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of- Con c [s, u] -> do+ Lit (LitMeta r f x) -> do+ live <- (== f) <$> liftU getCurrentPath+ unless live $ liftU $ do+ m <- fromMaybe __IMPOSSIBLE__ . Map.lookup f <$> sourceToModule+ typeError . GenericDocError =<<+ sep [ text "Can't unquote stale metavariable"+ , pretty m <> text "." <> pretty x ]+ return x+ _ -> throwException $ NonCanonical "meta variable" t++instance Unquote a => Unquote (Dom a) where+ unquote t = domFromArg <$> unquote t++instance Unquote R.Sort where+ unquote t = do+ t <- reduceQuotedTerm t+ case ignoreSharing t of+ Con c [] -> do choice- [(c `isCon` primAgdaTypeEl, El <$> unquoteN s <*> unquoteN u)]+ [(c `isCon` primAgdaSortUnsupported, return R.UnknownS)] __IMPOSSIBLE__+ Con c [u] -> do+ choice+ [(c `isCon` primAgdaSortSet, R.SetS <$> unquoteN u)+ ,(c `isCon` primAgdaSortLit, R.LitS <$> unquoteN u)]+ __IMPOSSIBLE__ Con c _ -> __IMPOSSIBLE__- _ -> throwException $ NotAConstructor "Type" t+ _ -> throwException $ NonCanonical "sort" t instance Unquote Literal where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t+ let litMeta r x = do+ file <- liftU getCurrentPath+ return $ LitMeta r file x case ignoreSharing t of Con c [x] -> choice- [ (c `isCon` primAgdaLitNat, LitInt noRange <$> unquoteN x)+ [ (c `isCon` primAgdaLitNat, LitNat noRange <$> unquoteN x) , (c `isCon` primAgdaLitFloat, LitFloat noRange <$> unquoteN x) , (c `isCon` primAgdaLitChar, LitChar noRange <$> unquoteN x)- , (c `isCon` primAgdaLitString, LitString noRange . unStr <$> unquoteN x)- , (c `isCon` primAgdaLitQName, LitQName noRange <$> unquoteN x) ]+ , (c `isCon` primAgdaLitString, LitString noRange <$> unquoteNString x)+ , (c `isCon` primAgdaLitQName, LitQName noRange <$> unquoteN x)+ , (c `isCon` primAgdaLitMeta, litMeta noRange =<< unquoteN x) ] __IMPOSSIBLE__ Con c _ -> __IMPOSSIBLE__- _ -> throwException $ NotAConstructor "Literal" t+ _ -> throwException $ NonCanonical "literal" t -instance Unquote Term where+instance Unquote R.Term where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of Con c [] -> choice- [(c `isCon` primAgdaTermUnsupported, pure hackReifyToMeta)]+ [ (c `isCon` primAgdaTermUnsupported, return R.Unknown) ] __IMPOSSIBLE__ Con c [x] -> do choice- [ (c `isCon` primAgdaTermSort, Sort <$> unquoteN x)- , (c `isCon` primAgdaTermLit, Lit <$> unquoteN x) ]+ [ (c `isCon` primAgdaTermSort, R.Sort <$> unquoteN x)+ , (c `isCon` primAgdaTermLit, R.Lit <$> unquoteN x) ] __IMPOSSIBLE__ Con c [x, y] -> choice- [ (c `isCon` primAgdaTermVar, Var <$> (fromInteger <$> unquoteN x) <*> unquoteN y)- , (c `isCon` primAgdaTermCon, Con <$> unquoteN x <*> unquoteN y)- , (c `isCon` primAgdaTermDef, Def <$> (ensureDef =<< unquoteN x) <*> unquoteN y)- , (c `isCon` primAgdaTermLam, Lam <$> (flip setHiding defaultArgInfo <$> unquoteN x) <*> unquoteN y)- , (c `isCon` primAgdaTermPi, mkPi <$> (domFromArg <$> unquoteN x) <*> unquoteN y)- , (c `isCon` primAgdaTermExtLam, mkExtLam <$> unquoteN x <*> unquoteN y) ]+ [ (c `isCon` primAgdaTermVar, R.Var <$> (fromInteger <$> unquoteN x) <*> unquoteN y)+ , (c `isCon` primAgdaTermCon, R.Con <$> (ensureCon =<< unquoteN x) <*> unquoteN y)+ , (c `isCon` primAgdaTermDef, R.Def <$> (ensureDef =<< unquoteN x) <*> unquoteN y)+ , (c `isCon` primAgdaTermMeta, R.Meta <$> unquoteN x <*> unquoteN y)+ , (c `isCon` primAgdaTermLam, R.Lam <$> unquoteN x <*> unquoteN y)+ , (c `isCon` primAgdaTermPi, mkPi <$> unquoteN x <*> unquoteN y)+ , (c `isCon` primAgdaTermExtLam, R.ExtLam <$> unquoteN x <*> unquoteN y) ] __IMPOSSIBLE__ where- mkExtLam = ExtLam- mkPi a (Abs _ b) = Pi a (Abs x b)- where x | 0 `freeIn` b = pickName (unDom a)- | otherwise = "_"- mkPi _ NoAbs{} = __IMPOSSIBLE__+ mkPi :: Dom R.Type -> R.Abs R.Type -> R.Term+ -- TODO: implement Free for reflected syntax so this works again+ --mkPi a (R.Abs "_" b) = R.Pi a (R.Abs x b)+ -- where x | 0 `freeIn` b = pickName (unDom a)+ -- | otherwise = "_"+ mkPi a (R.Abs "_" b) = R.Pi a (R.Abs (pickName (unDom a)) b)+ mkPi a b = R.Pi a b Con{} -> __IMPOSSIBLE__ Lit{} -> __IMPOSSIBLE__- _ -> throwException $ NotAConstructor "Term" t+ _ -> throwException $ NonCanonical "term" t -instance Unquote Pattern where+instance Unquote R.Pattern where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of Con c [] -> do choice- [ (c `isCon` primAgdaPatVar, pure (VarP "x"))- , (c `isCon` primAgdaPatAbsurd, pure (VarP "()"))- , (c `isCon` primAgdaPatDot, pure (DotP hackReifyToMeta))+ [ (c `isCon` primAgdaPatAbsurd, return R.AbsurdP)+ , (c `isCon` primAgdaPatDot, return R.DotP) ] __IMPOSSIBLE__ Con c [x] -> do choice- [ (c `isCon` primAgdaPatProj, ProjP <$> unquoteN x)- , (c `isCon` primAgdaPatLit, LitP <$> unquoteN x) ]+ [ (c `isCon` primAgdaPatVar, R.VarP <$> unquoteNString x)+ , (c `isCon` primAgdaPatProj, R.ProjP <$> unquoteN x)+ , (c `isCon` primAgdaPatLit, R.LitP <$> unquoteN x) ] __IMPOSSIBLE__ Con c [x, y] -> do choice- [ (c `isCon` primAgdaPatCon, flip ConP noConPatternInfo <$> unquoteN x <*> (map (fmap unnamed) <$> unquoteN y)) ]+ [ (c `isCon` primAgdaPatCon, R.ConP <$> unquoteN x <*> unquoteN y) ] __IMPOSSIBLE__ Con c _ -> __IMPOSSIBLE__- _ -> throwException $ NotAConstructor "Pattern" t--data UnquotedFunDef = UnQFun Type [Clause]+ _ -> throwException $ NonCanonical "pattern" t -instance Unquote Clause where+instance Unquote R.Clause where unquote t = do- t <- lift $ reduce t+ t <- reduceQuotedTerm t case ignoreSharing t of Con c [x] -> do choice- [ (c `isCon` primAgdaClauseAbsurd, mkClause Nothing <$> unquoteN x) ]+ [ (c `isCon` primAgdaClauseAbsurd, R.AbsurdClause <$> unquoteN x) ] __IMPOSSIBLE__ Con c [x, y] -> do choice- [ (c `isCon` primAgdaClauseClause, checkClause =<< mkClause . Just <$> unquoteN y <*> unquoteN x) ]+ [ (c `isCon` primAgdaClauseClause, R.Clause <$> unquoteN x <*> unquoteN y) ] __IMPOSSIBLE__ Con c _ -> __IMPOSSIBLE__- _ -> throwException $ NotAConstructor "Clause" t- where- mkClause :: Maybe Term -> [I.Arg Pattern] -> I.Clause- mkClause b ps0 =- Clause { clauseRange = noRange- , clauseTel = dummyTel n'- , clausePerm = Perm n vs- , namedClausePats = ps- , clauseBody = mkBody n b- , clauseType = Nothing }- where- ps = map (fmap unnamed) ps0- n = vars True ps -- with dot patterns- n' = vars False ps -- without dot patterns- dummyTel 0 = EmptyTel- dummyTel n = ExtendTel dummyDom (Abs "x" $ dummyTel (n - 1))- mkBody 0 b = maybe NoBody Body b- mkBody n b = Bind $ Abs "x" $ mkBody (n - 1) b- vars d ps = sum $ map (vars' d . namedArg) ps- vars' d (ConP _ _ ps) = vars d ps- vars' d VarP{} = 1- vars' d DotP{} = if d then 1 else 0- vars' d LitP{} = 0- vars' d ProjP{} = 0+ _ -> throwException $ NonCanonical "clause" t - vs = evalState (execWriterT $ mapM_ (computePerm . namedArg) ps) 0- next = do n <- get; put (n + 1); return n+-- Unquoting TCM computations --------------------------------------------- - computePerm (ConP _ _ ps) = mapM_ (computePerm . namedArg) ps- computePerm VarP{} = tell . (:[]) =<< next- computePerm DotP{} = () <$ next- computePerm LitP{} = return ()- computePerm ProjP{} = return ()+-- | Argument should be a term of type @Term → TCM A@ for some A. Returns the+-- resulting term of type @A@. The second argument is the term for the hole,+-- which will typically be a metavariable. This is passed to the computation+-- (quoted).+unquoteTCM :: I.Term -> I.Term -> UnquoteM I.Term+unquoteTCM m hole = do+ qhole <- liftU $ quoteTerm hole+ evalTCM (m `apply` [defaultArg qhole]) - checkClause :: I.Clause -> UnquoteM I.Clause- checkClause cl@Clause{ clausePerm = Perm n vs , clauseBody = body } = do- let freevs = allFreeVars $ fromMaybe __IMPOSSIBLE__ $ getBody body- propervs = Set.fromList $ map ((n-1)-) vs- dottedvs = Set.difference (Set.fromList [0..n-1]) propervs- offending = Set.intersection freevs dottedvs- Agda.TypeChecking.Monad.reportSDoc "tc.unquote.clause.dotvars" 30 $ vcat- [ text $ "checkClause "- , nest 2 $ text $ "free vars: " ++ show freevs- , nest 2 $ text $ "dotted vars: " ++ show dottedvs- , nest 2 $ text $ "offending vars: " ++ show offending- ]- if Set.null offending- then return cl- else throwException $ RhsUsesDottedVar (Set.toList offending) t+evalTCM :: I.Term -> UnquoteM I.Term+evalTCM v = do+ v <- reduceQuotedTerm v+ liftU $ reportSDoc "tc.unquote.eval" 90 $ text "evalTCM" <+> prettyTCM v+ let failEval = throwException $ NonCanonical "type checking computation" v -instance Unquote UnquotedFunDef where- unquote t = do- t <- lift $ reduce t- case ignoreSharing t of- Con c [x, y] -> do- choice- [ (c `isCon` primAgdaFunDefCon, UnQFun <$> unquoteN x <*> unquoteN y) ]- __IMPOSSIBLE__- Con c _ -> __IMPOSSIBLE__- _ -> throwException $ NotAConstructor "Pattern" t+ case ignoreSharing v of+ I.Def f [] ->+ choice [ (f `isDef` primAgdaTCMGetContext, tcGetContext)+ , (f `isDef` primAgdaTCMCommit, tcCommit) ]+ failEval+ I.Def f [u] ->+ choice [ (f `isDef` primAgdaTCMInferType, tcFun1 tcInferType u)+ , (f `isDef` primAgdaTCMNormalise, tcFun1 tcNormalise u)+ , (f `isDef` primAgdaTCMGetType, tcFun1 tcGetType u)+ , (f `isDef` primAgdaTCMGetDefinition, tcFun1 tcGetDefinition u)+ , (f `isDef` primAgdaTCMFreshName, tcFun1 tcFreshName u) ]+ failEval+ I.Def f [u, v] ->+ choice [ (f `isDef` primAgdaTCMUnify, tcFun2 tcUnify u v)+ , (f `isDef` primAgdaTCMCheckType, tcFun2 tcCheckType u v)+ , (f `isDef` primAgdaTCMDeclareDef, uqFun2 tcDeclareDef u v)+ , (f `isDef` primAgdaTCMDefineFun, uqFun2 tcDefineFun u v) ]+ failEval+ I.Def f [l, a, u] ->+ choice [ (f `isDef` primAgdaTCMReturn, return (unElim u))+ , (f `isDef` primAgdaTCMTypeError, tcFun1 tcTypeError u)+ , (f `isDef` primAgdaTCMQuoteTerm, tcQuoteTerm (unElim u))+ , (f `isDef` primAgdaTCMUnquoteTerm, tcFun1 (tcUnquoteTerm (mkT (unElim l) (unElim a))) u)+ , (f `isDef` primAgdaTCMBlockOnMeta, uqFun1 tcBlockOnMeta u) ]+ failEval+ I.Def f [_, _, u, v] ->+ choice [ (f `isDef` primAgdaTCMCatchError, tcCatchError (unElim u) (unElim v))+ , (f `isDef` primAgdaTCMExtendContext, tcExtendContext (unElim u) (unElim v))+ , (f `isDef` primAgdaTCMInContext, tcInContext (unElim u) (unElim v)) ]+ failEval+ I.Def f [_, _, _, _, m, k] ->+ choice [ (f `isDef` primAgdaTCMBind, tcBind (unElim m) (unElim k)) ]+ failEval+ _ -> failEval+ where+ unElim = unArg . argFromElim+ tcBind m k = do v <- evalTCM m+ evalTCM (k `apply` [defaultArg v]) -reifyUnquoted :: Reify a e => a -> TCM e-reifyUnquoted = nowReifyingUnquoted . disableDisplayForms . withShowAllArguments . reify+ mkT l a = El s a+ where s = Type $ Max [Plus 0 $ UnreducedLevel l]++ -- Don't catch Unquote errors!+ tcCatchError :: Term -> Term -> UnquoteM Term+ tcCatchError m h =+ liftU2 (\ m1 m2 -> m1 `catchError` \ _ -> m2) (evalTCM m) (evalTCM h)++ uqFun1 :: Unquote a => (a -> UnquoteM b) -> Elim -> UnquoteM b+ uqFun1 fun a = do+ a <- unquote (unElim a)+ fun a++ tcFun1 :: Unquote a => (a -> TCM b) -> Elim -> UnquoteM b+ tcFun1 fun = uqFun1 (liftU . fun)++ uqFun2 :: (Unquote a, Unquote b) => (a -> b -> UnquoteM c) -> Elim -> Elim -> UnquoteM c+ uqFun2 fun a b = do+ a <- unquote (unElim a)+ b <- unquote (unElim b)+ fun a b++ tcFun2 :: (Unquote a, Unquote b) => (a -> b -> TCM c) -> Elim -> Elim -> UnquoteM c+ tcFun2 fun = uqFun2 (\ x y -> liftU (fun x y))++ tcFreshName :: Str -> TCM Term+ tcFreshName s = do+ m <- currentModule+ quoteName . qualify m <$> freshName_ (unStr s)++ tcUnify :: R.Term -> R.Term -> TCM Term+ tcUnify u v = do+ (u, a) <- inferExpr =<< toAbstract_ u+ v <- flip checkExpr a =<< toAbstract_ v+ equalTerm a u v+ primUnitUnit++ tcBlockOnMeta :: MetaId -> UnquoteM Term+ tcBlockOnMeta x = do+ s <- gets snd+ throwException (BlockedOnMeta s x)++ tcCommit :: UnquoteM Term+ tcCommit = do+ dirty <- gets fst+ when (dirty == Dirty) $+ liftU $ typeError $ GenericError "Cannot use commitTC after declaring new definitions."+ s <- liftU get+ modify (second $ const s)+ liftU primUnitUnit++ tcTypeError :: [ErrorPart] -> TCM a+ tcTypeError err = typeError . GenericDocError =<< fsep (map prettyTCM err)++ tcInferType :: R.Term -> TCM Term+ tcInferType v = do+ (_, a) <- inferExpr =<< toAbstract_ v+ quoteType =<< normalise a++ tcCheckType :: R.Term -> R.Type -> TCM Term+ tcCheckType v a = do+ a <- isType_ =<< toAbstract_ a+ e <- toAbstract_ v+ v <- checkExpr e a+ quoteTerm =<< normalise v++ tcQuoteTerm :: Term -> UnquoteM Term+ tcQuoteTerm v = liftU $ quoteTerm =<< normalise v++ tcUnquoteTerm :: Type -> R.Term -> TCM Term+ tcUnquoteTerm a v = do+ e <- toAbstract_ v+ v <- checkExpr e a+ return v++ tcNormalise :: R.Term -> TCM Term+ tcNormalise v = do+ (v, _) <- inferExpr =<< toAbstract_ v+ quoteTerm =<< normalise v++ tcGetContext :: UnquoteM Term+ tcGetContext = liftU $ do+ as <- map (fmap snd) <$> getContext+ as <- etaContract =<< normalise as+ buildList <*> mapM quoteDom as++ extendCxt :: Arg R.Type -> UnquoteM a -> UnquoteM a+ extendCxt a m = do+ a <- liftU $ traverse (isType_ <=< toAbstract_) a+ liftU1 (addContext (domFromArg a :: Dom Type)) m++ tcExtendContext :: Term -> Term -> UnquoteM Term+ tcExtendContext a m = do+ a <- unquote a+ extendCxt a (evalTCM m)++ tcInContext :: Term -> Term -> UnquoteM Term+ tcInContext c m = do+ c <- unquote c+ liftU1 inTopContext $ go c m+ where+ go :: [Arg R.Type] -> Term -> UnquoteM Term+ go [] m = evalTCM m+ go (a : as) m = extendCxt a $ go as m++ constInfo :: QName -> TCM Definition+ constInfo x = getConstInfo x `catchError` \ _ ->+ genericError $ "Unbound name: " ++ show x++ tcGetType :: QName -> TCM Term+ tcGetType x = quoteType . defType =<< constInfo x++ tcGetDefinition :: QName -> TCM Term+ tcGetDefinition x = quoteDefn =<< constInfo x++ setDirty :: UnquoteM ()+ setDirty = modify (first $ const Dirty)++ tcDeclareDef :: Arg QName -> R.Type -> UnquoteM Term+ tcDeclareDef (Arg i x) a = inOriginalContext $ do+ setDirty+ let h = getHiding i+ r = getRelevance i+ when (h == Hidden) $ liftU $ typeError . GenericDocError =<< text "Cannot declare hidden function" <+> prettyTCM x+ tell [x]+ liftU $ do+ reportSDoc "tc.unquote.decl" 10 $ sep [ text "declare" <+> prettyTCM x <+> text ":"+ , nest 2 $ prettyTCM a ]+ a <- isType_ =<< toAbstract_ a+ alreadyDefined <- (True <$ getConstInfo x) `catchError` \ _ -> return False+ when alreadyDefined $ genericError $ "Multiple declarations of " ++ show x+ addConstant x $ defaultDefn i x a emptyFunction+ when (h == Instance) $ addTypedInstance x a+ primUnitUnit++ tcDefineFun :: QName -> [R.Clause] -> UnquoteM Term+ tcDefineFun x cs = inOriginalContext $ (setDirty >>) $ liftU $ do+ _ <- getConstInfo x `catchError` \ _ ->+ genericError $ "Missing declaration for " ++ show x+ cs <- mapM (toAbstract_ . QNamed x) cs+ reportSDoc "tc.unquote.def" 10 $ vcat $ map prettyA cs+ let i = mkDefInfo (nameConcrete $ qnameName x) noFixity' PublicAccess ConcreteDef noRange+ checkFunDef NotDelayed i x cs+ primUnitUnit
src/full/Agda/TypeChecking/With.hs view
@@ -1,18 +1,19 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE PatternGuards #-} {-# LANGUAGE TupleSections #-} module Agda.TypeChecking.With where -import Control.Applicative+import Control.Applicative hiding (empty) import Control.Monad-import Control.Monad.State import Data.List import Data.Maybe-import qualified Data.Traversable as Trav (traverse)+import Data.Monoid+import Data.Traversable (traverse) -import Agda.Syntax.Common as Common+import Agda.Syntax.Common import Agda.Syntax.Internal as I import Agda.Syntax.Internal.Pattern import qualified Agda.Syntax.Abstract as A@@ -21,6 +22,7 @@ import Agda.Syntax.Position import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Reduce import Agda.TypeChecking.Datatypes import Agda.TypeChecking.EtaContract@@ -30,6 +32,7 @@ import Agda.TypeChecking.Records import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope+import Agda.TypeChecking.ReconstructParameters import Agda.TypeChecking.Abstract import Agda.TypeChecking.Rules.LHS.Implicit@@ -37,7 +40,9 @@ import Agda.Utils.Functor import Agda.Utils.List+import Agda.Utils.Maybe import Agda.Utils.Monad+import Agda.Utils.Null (empty) import Agda.Utils.Permutation import Agda.Utils.Pretty (prettyShow) import Agda.Utils.Size@@ -77,15 +82,15 @@ -- Input: :: Telescope -- ^ __@Δ@__ context of types and with-arguments. -> Type -- ^ __@Δ ⊢ t@__ type of rhs.- -> [Type] -- ^ __@Δ ⊢ as@__ types of with arguments.+ -> [EqualityView] -- ^ __@Δ ⊢ as@__ types of with arguments. -> [Term] -- ^ __@Δ ⊢ vs@__ with arguments. -- Output: -> ( Telescope -- @Δ₁@ part of context not needed for with arguments and their types. , Telescope -- @Δ₂@ part of context needed for with arguments and their types. , Permutation -- @π@ permutation from Δ to Δ₁Δ₂ as returned by 'splitTelescope'. , Type -- @Δ₁Δ₂ ⊢ t'@ type of rhs under @π@- , [Type] -- @Δ₁ ⊢ as'@ types with with-arguments depending only on @Δ₁@.- , [Term] -- @Δ₁ ⊢ vs'@ with-arguments under @π@.+ , [EqualityView] -- @Δ₁ ⊢ as'@ types with with- and rewrite-arguments depending only on @Δ₁@.+ , [Term] -- @Δ₁ ⊢ vs'@ with- and rewrite-arguments under @π@. ) -- ^ (__@Δ₁@__,__@Δ₂@__,__@π@__,__@t'@__,__@as'@__,__@vs'@__) where -- -- [@Δ₁@] part of context not needed for with arguments and their types.@@ -101,9 +106,17 @@ -- [@Δ₁ ⊢ vs'@] with-arguments under @π@. splitTelForWith delta t as vs = let+ -- Andreas, 2016-01-27, unfixing issue 1692+ -- Due to public protests, we do not rewrite in the types of rewrite+ -- expressions.+ -- Otherwise, we cannot rewrite twice after another with the same equation+ -- as it turns into a reflexive equation in the first rewrite.+ -- Thus we include the fvs of the rewrite terms in Δ₁.+ rewriteTerms = map snd $ filter (isEqualityType . fst) $ zip as vs+ -- Split the telescope into the part needed to type the with arguments- -- and all the other stuff- fv = allFreeVars as+ -- and all the other stuff.+ fv = allFreeVars (as, vs) SplitTel delta1 delta2 perm = splitTelescope fv delta -- Δ₁Δ₂ ⊢ π : Δ@@ -118,112 +131,62 @@ -- and Δ₁ ⊢ as' as' = applySubst rhopi as -- and Δ₁ ⊢ vs' : as'- vs' = applySubst pi vs+ vs' = applySubst rhopi vs in (delta1, delta2, perm, t', as', vs') -- | Abstract with-expressions @vs@ to generate type for with-helper function.+--+-- Each @EqualityType@, coming from a @rewrite@, will turn into 2 abstractions. withFunctionType :: Telescope -- ^ @Δ₁@ context for types of with types.- -> [Term] -- ^ @Δ₁,Δ₂ ⊢ vs : raise Δ₂ as@ with-expressions.- -> [Type] -- ^ @Δ₁ ⊢ as@ types of with-expressions.+ -> [Term] -- ^ @Δ₁,Δ₂ ⊢ vs : raise Δ₂ as@ with and rewrite-expressions.+ -> [EqualityView] -- ^ @Δ₁ ⊢ as@ types of with and rewrite-expressions. -> Telescope -- ^ @Δ₁ ⊢ Δ₂@ context extension to type with-expressions. -> Type -- ^ @Δ₁,Δ₂ ⊢ b@ type of rhs.- -> TCM Type -- ^ @Δ₁ → wtel → Δ₂′ → b′@ such that- -- @[vs/wtel]wtel = as@ and- -- @[vs/wtel]Δ₂′ = Δ₂@ and- -- @[vs/wtel]b′ = b@.-+ -> TCM (Type, Nat)+ -- ^ @Δ₁ → wtel → Δ₂′ → b′@ such that+ -- @[vs/wtel]wtel = as@ and+ -- @[vs/wtel]Δ₂′ = Δ₂@ and+ -- @[vs/wtel]b′ = b@.+ -- Plus the final number of with-arguments. withFunctionType delta1 vs as delta2 b = addCtxTel delta1 $ do - -- Normalize and η-contract the types @as@ of the with-expressions.- reportSLn "tc.with.abstract" 20 $ "preparing for with-abstraction"- as <- etaContract =<< normalise as- reportSDoc "tc.with.abstract" 20 $ text " as = " <+> prettyTCM as -- Normalize and η-contract the type @b@ of the rhs and the types @delta2@- -- of the pattern variables not mentioned in @as@.+ -- of the pattern variables not mentioned in @vs : as@.+ let dbg n s x = reportSDoc "tc.with.abstract" n $ nest 2 $ text (s ++ " =") <+> prettyTCM x - d2b <- return $ telePi_ delta2 b- reportSDoc "tc.with.abstract" 30 $ text "normalizing d2b = " <+> prettyTCM d2b+ let d2b = telePi_ delta2 b+ dbg 30 "Δ₂ → B" d2b d2b <- normalise d2b- reportSDoc "tc.with.abstract" 30 $ text "eta-contracting d2b = " <+> prettyTCM d2b+ dbg 30 "normal Δ₂ → B" d2b d2b <- etaContract d2b- reportSDoc "tc.with.abstract" 20 $ text " d2b = " <+> prettyTCM d2b- let n2 = size delta2- TelV delta2 b <- telViewUpTo n2 d2b-- addContext delta2 $ do-- -- Normalize and η-contract the with-expressions @vs@.-- vs <- etaContract =<< normalise vs- reportSDoc "tc.with.abstract" 20 $ text " vs = " <+> prettyTCM vs- reportSDoc "tc.with.abstract" 40 $- sep [ text "abstracting"- , nest 2 $ vcat $- [ text "vs = " <+> prettyTCM vs- , text "as = " <+> escapeContext n2 (prettyTCM as)- , text "delta2 = " <+> escapeContext n2 (prettyTCM delta2)- , text "b = " <+> prettyTCM b ]- ]- reportSLn "tc.with.abstract" 50 $ " raw vs = " ++ show vs ++ "\n raw b = " ++ show b-- -- Abstract in @b@ and in @as@, generating @wtel@ and @b'@.- ------------------------------------------------------------- -- Δ₁, Δ₂ ⊢ wtel0- -- Δ₁, Δ₂, wtel0 ⊢ b0- let TelV wtel0 b0 = telView'UpTo (size as) $- foldr (uncurry piAbstractTerm) b $ zip vs $ raise n2 as-- -- We know the types in wtel0 (abstracted versions of @as@) do not depend on Δ₂.- -- Δ₁ ⊢ wtel- let wtel = applySubst (strengthenS __IMPOSSIBLE__ n2) wtel0-- -- Δ₁, Δ₂, wtel ⊢ ρ : Δ₁, wtel, Δ₂- let m = n2 + size wtel- let rho = (map var $ [n2..m-1] ++ [0..n2-1]) ++# raiseS m-- -- Using ρ, swap the variables of wtel and Δ₂ to get- -- Δ₁, wtel, Δ₂ ⊢ b'- let b' = applySubst rho b0-- -- Abstract in @Δ₂@ to get @Δ₁, wtel ⊢ Δ₂′@.- -------------------------------------------- -- Δ₁, Δ₂ ⊢ Δ₂flat- let delta2flat = flattenTel delta2+ dbg 30 "eta-contracted Δ₂ → B" d2b - let abstrvs t = foldl (flip abstractTerm) t $ zipWith raise [0..] vs- -- Δ₁, Δ₂, wtel ⊢ Δ₂abs- let delta2abs = abstrvs delta2flat+ vs <- etaContract =<< normalise vs+ as <- etaContract =<< normalise as -- do we need this? - -- Δ₁, wtel, Δ₂ ⊢ Δ₂flat'- let delta2flat' = applySubst rho delta2abs+ let piAbstractVs [] b = return b+ piAbstractVs (va : vas) b = piAbstract va =<< piAbstractVs vas b+ -- wd2db = wtel → [vs : as] (Δ₂ → B)+ wd2b <- piAbstractVs (zip vs as) d2b+ dbg 30 "wΓ → Δ₂ → B" wd2b - -- Δ₁, wtel ⊢ Δ₂′- let delta2' = unflattenTel (teleNames delta2) delta2flat'+ let countArgs OtherType{} = 1+ countArgs EqualityType{} = 2 - -- Assemble final type of with-function.- ----------------------------------------+ return (telePi_ delta1 wd2b, sum $ map countArgs as) - let ty = telePi_ delta1 $ telePi_ wtel $ telePi_ delta2' b'- reportSDoc "tc.with.abstract" 20 $ sep $- [ text "finished with-abstraction"- , text " wtel0 = " <+> prettyTCM wtel0- , text " wtel = " <+> do escapeContext n2 $ prettyTCM wtel- , text " b0 = " <+> addContext wtel (prettyTCM b0)- , text " b' = " <+> do escapeContext n2 $ addContext wtel $ addContext delta2 $ prettyTCM b'- , text " delta2flat = " <+> prettyTCM delta2flat- , text " delta2flat' = " <+> do addContext wtel $ prettyTCM delta2flat'- , text " delta2' = " <+> do escapeContext n2 $ addContext wtel $ prettyTCM delta2'- , text " ty = " <+> do escapeContext n2 $ escapeContext (size delta1) $ prettyTCM delta2'- ]- return ty+-- | From a list of @with@ and @rewrite@ expressions and their types,+-- compute the list of final @with@ expressions (after expanding the @rewrite@s).+withArguments :: [Term] -> [EqualityView] -> [Term]+withArguments vs as = concat $ for (zip vs as) $ \case+ (v, OtherType a) -> [v]+ (prf, eqt@(EqualityType s _eq _l t v _v')) -> [unArg v, prf] -- | Compute the clauses for the with-function given the original patterns.@@ -231,7 +194,7 @@ :: QName -- ^ Name of the parent function. -> QName -- ^ Name of the with-function. -> Type -- ^ Types of the parent function.- -> [I.NamedArg Pattern] -- ^ Parent patterns.+ -> [NamedArg Pattern] -- ^ Parent patterns. -> Permutation -- ^ Final permutation. -> Nat -- ^ Number of needed vars. -> Nat -- ^ Number of with expressions.@@ -239,12 +202,12 @@ -> TCM [A.SpineClause] -- ^ With-clauses flattened wrt. parent patterns. buildWithFunction f aux t qs perm n1 n cs = mapM buildWithClause cs where- buildWithClause (A.Clause (A.SpineLHS i _ ps wps) rhs wh) = do+ buildWithClause (A.Clause (A.SpineLHS i _ ps wps) rhs wh catchall) = do let (wps0, wps1) = genericSplitAt n wps ps0 = map defaultNamedArg wps0 rhs <- buildRHS rhs (ps1, ps2) <- genericSplitAt n1 <$> stripWithClausePatterns f aux t qs perm ps- let result = A.Clause (A.SpineLHS i aux (ps1 ++ ps0 ++ ps2) wps1) rhs wh+ let result = A.Clause (A.SpineLHS i aux (ps1 ++ ps0 ++ ps2) wps1) rhs wh catchall reportSDoc "tc.with" 20 $ vcat [ text "buildWithClause returns" <+> prettyA result ]@@ -323,12 +286,12 @@ stripWithClausePatterns :: QName -- ^ Name of the parent function.- -> QName -- ^ Name of with-function.- -> Type -- ^ __@t@__ type of the original function.- -> [I.NamedArg Pattern] -- ^ __@qs@__ internal patterns for original function.- -> Permutation -- ^ __@π@__ permutation taking @vars(qs)@ to @support(Δ)@.- -> [A.NamedArg A.Pattern] -- ^ __@ps@__ patterns in with clause (eliminating type @t@).- -> TCM [A.NamedArg A.Pattern] -- ^ __@ps'@__ patterns for with function (presumably of type @Δ@).+ -> QName -- ^ Name of with-function.+ -> Type -- ^ __@t@__ type of the original function.+ -> [NamedArg Pattern] -- ^ __@qs@__ internal patterns for original function.+ -> Permutation -- ^ __@π@__ permutation taking @vars(qs)@ to @support(Δ)@.+ -> [NamedArg A.Pattern] -- ^ __@ps@__ patterns in with clause (eliminating type @t@).+ -> TCM [NamedArg A.Pattern] -- ^ __@ps'@__ patterns for with function (presumably of type @Δ@). stripWithClausePatterns parent f t qs perm ps = do -- Andreas, 2014-03-05 expand away pattern synoyms (issue 1074) ps <- expandPatternSynonyms ps@@ -369,12 +332,18 @@ strip :: Term -- ^ Self. -> Type -- ^ The type to be eliminated.- -> [A.NamedArg A.Pattern] -- ^ With-clause patterns.- -> [I.NamedArg DeBruijnPattern] -- ^ Parent-clause patterns with de Bruijn indices relative to Δ.- -> TCM [A.NamedArg A.Pattern] -- ^ With-clause patterns decomposed by parent-clause patterns.+ -> [NamedArg A.Pattern] -- ^ With-clause patterns.+ -> [NamedArg DeBruijnPattern] -- ^ Parent-clause patterns with de Bruijn indices relative to Δ.+ -> TCM [NamedArg A.Pattern] -- ^ With-clause patterns decomposed by parent-clause patterns. -- Case: out of with-clause patterns. strip self t [] qs@(_ : _) = do+ reportSDoc "tc.with.strip" 15 $ vcat+ [ text "strip (out of A.Patterns)"+ , nest 2 $ text "qs =" <+> fsep (punctuate comma $ map (prettyTCM . namedArg) qs)+ , nest 2 $ text "self=" <+> prettyTCM self+ , nest 2 $ text "t =" <+> prettyTCM t+ ] -- Andreas, 2015-06-11, issue 1551: -- As the type t develops, we need to insert more implicit patterns, -- due to copatterns / flexible arity.@@ -419,6 +388,10 @@ if d /= d' then mismatch else do t <- reduce t (self1, t1) <- fromMaybe __IMPOSSIBLE__ <$> projectTyped self t d+ -- Andreas, 2016-01-21, issue #1791+ -- The type of a field might start with hidden quantifiers.+ -- So we may have to insert more implicit patterns here.+ ps <- insertImplicitPatternsT ExpandLast ps t1 strip self1 t1 ps qs Nothing -> mismatch @@ -452,6 +425,12 @@ reportSDoc "tc.with.strip" 60 $ text "parent pattern is constructor " <+> prettyTCM c (a, b) <- mustBePi t+ -- The type of the current pattern is a datatype.+ Def d es <- ignoreSharing <$> normalise (unEl $ unDom a)+ let us = fromMaybe __IMPOSSIBLE__ $ allApplyElims es+ -- Get the original constructor and field names.+ c <- (`withRangeOf` c) <$> do getConForm $ conName c+ case namedArg p of -- Andreas, 2015-07-07 Issue 1606.@@ -472,45 +451,16 @@ expandImplicitPattern' (unDom a) p A.ConP _ (A.AmbQ cs') ps' -> do- c <- (`withRangeOf` c) <$> do getConForm $ conName c+ -- Check whether the with-clause constructor can be (possibly trivially)+ -- disambiguated to be equal to the parent-clause constructor. cs' <- mapM getConForm cs' unless (elem c cs') mismatch-- -- The type is a datatype- Def d es <- ignoreSharing <$> normalise (unEl $ unDom a)- let us = fromMaybe __IMPOSSIBLE__ $ allApplyElims es-- -- Compute the argument telescope for the constructor- Defn {defType = ct, theDef = Constructor{conPars = np}} <- getConInfo c- let ct' = ct `apply` genericTake np us- TelV tel' _ <- telView ct'-- reportSDoc "tc.with.strip" 20 $- vcat [ text "ct = " <+> prettyTCM ct- , text "ct' = " <+> prettyTCM ct'- , text "np = " <+> text (show np)- , text "us = " <+> prettyList (map prettyTCM us)- , text "us' = " <+> prettyList (map prettyTCM $ genericTake np us)- ]-- -- Compute the new type- let v = Con c [ Arg info (var i) | (i, Arg info _) <- zip (downFrom $ size qs') qs' ]- t' = tel' `abstract` absApp (raise (size tel') b) v- self' = tel' `abstract` apply1 (raise (size tel') self) v -- Issue 1546-- reportSDoc "tc.with.strip" 15 $ sep- [ text "inserting implicit"- , nest 2 $ prettyList $ map prettyA (ps' ++ ps)- , nest 2 $ text ":" <+> prettyTCM t'- ]-- -- Insert implicit patterns (just for the constructor arguments)- psi' <- insertImplicitPatterns ExpandLast ps' tel'- unless (size psi' == size tel') $ typeError $- WrongNumberOfConstructorArguments (conName c) (size tel') (size psi')+ -- Strip the subpatterns ps' and then continue.+ stripConP d us b c qs' ps' - -- Keep going- strip self' t' (psi' ++ ps) (qs' ++ qs)+ A.RecP _ fs -> caseMaybeM (isRecord d) mismatch $ \ def -> do+ ps' <- insertMissingFields d (const $ A.WildP empty) fs (recordFieldNames def)+ stripConP d us b c qs' ps' p@(A.PatternSynP pi' c' ps') -> do reportSDoc "impossible" 10 $@@ -538,9 +488,60 @@ mismatch = typeError $ WithClausePatternMismatch (namedArg p0) (snd <$> namedArg q) -- | Make an ImplicitP, keeping arg. info.- makeImplicitP :: A.NamedArg A.Pattern -> A.NamedArg A.Pattern+ makeImplicitP :: NamedArg A.Pattern -> NamedArg A.Pattern makeImplicitP = updateNamedArg $ const $ A.WildP patNoRange + -- case I.ConP / A.ConP+ stripConP+ :: QName+ -- ^ Data type name of this constructor pattern.+ -> [Arg Term]+ -- ^ Data type arguments of this constructor pattern.+ -> Abs Type+ -- ^ Type the remaining patterns eliminate.+ -> ConHead+ -- ^ Constructor of this pattern.+ -> [NamedArg DeBruijnPattern]+ -- ^ Argument patterns (parent clause).+ -> [NamedArg A.Pattern]+ -- ^ Argument patterns (with clause).+ -> TCM [NamedArg A.Pattern]+ -- ^ Stripped patterns.+ stripConP d us b c qs' ps' = do++ -- Get the type and number of parameters of the constructor.+ Defn {defType = ct, theDef = Constructor{conPars = np}} <- getConInfo c+ -- Compute the argument telescope for the constructor+ let ct' = ct `piApply` genericTake np us+ TelV tel' _ <- telView ct'++ reportSDoc "tc.with.strip" 20 $+ vcat [ text "ct = " <+> prettyTCM ct+ , text "ct' = " <+> prettyTCM ct'+ , text "np = " <+> text (show np)+ , text "us = " <+> prettyList (map prettyTCM us)+ , text "us' = " <+> prettyList (map prettyTCM $ genericTake np us)+ ]++ -- Compute the new type+ let v = Con c [ Arg info (var i) | (i, Arg info _) <- zip (downFrom $ size qs') qs' ]+ t' = tel' `abstract` absApp (raise (size tel') b) v+ self' = tel' `abstract` apply1 (raise (size tel') self) v -- Issue 1546++ reportSDoc "tc.with.strip" 15 $ sep+ [ text "inserting implicit"+ , nest 2 $ prettyList $ map prettyA (ps' ++ ps)+ , nest 2 $ text ":" <+> prettyTCM t'+ ]++ -- Insert implicit patterns (just for the constructor arguments)+ psi' <- insertImplicitPatterns ExpandLast ps' tel'+ unless (size psi' == size tel') $ typeError $+ WrongNumberOfConstructorArguments (conName c) (size tel') (size psi')++ -- Keep going+ strip self' t' (psi' ++ ps) (qs' ++ qs)+ -- | Construct the display form for a with function. It will display -- applications of the with function as applications to the original function. -- For instance,@@ -560,7 +561,7 @@ -> Telescope -- ^ __@Δ₁@__ The arguments of the @with@ function before the @with@ expressions. -> Telescope -- ^ __@Δ₂@__ The arguments of the @with@ function after the @with@ expressions. -> Nat -- ^ __@n@__ The number of @with@ expressions.- -> [I.NamedArg Pattern] -- ^ __@qs@__ The parent patterns.+ -> [NamedArg Pattern] -- ^ __@qs@__ The parent patterns. -> Permutation -- ^ __@perm@__ Permutation to split into needed and unneeded vars. -> Permutation -- ^ __@lhsPerm@__ Permutation reordering the variables in parent patterns. -> TCM DisplayForm@@ -643,18 +644,18 @@ -- Andreas, 2014-12-05 refactored using numberPatVars -- Andreas, 2013-02-28 modeled after Coverage/Match/buildMPatterns -- The permutation is the one of the original clause.-patsToElims :: Permutation -> [I.NamedArg Pattern] -> [I.Elim' DisplayTerm]+patsToElims :: Permutation -> [NamedArg Pattern] -> [I.Elim' DisplayTerm] patsToElims perm ps = toElims $ numberPatVars perm ps where- toElims :: [I.NamedArg DeBruijnPattern] -> [I.Elim' DisplayTerm]+ toElims :: [NamedArg DeBruijnPattern] -> [I.Elim' DisplayTerm] toElims = map $ toElim . fmap namedThing - toElim :: I.Arg DeBruijnPattern -> I.Elim' DisplayTerm- toElim (Common.Arg ai p) = case p of+ toElim :: Arg DeBruijnPattern -> I.Elim' DisplayTerm+ toElim (Arg ai p) = case p of ProjP d -> I.Proj d- p -> I.Apply $ Common.Arg ai $ toTerm p+ p -> I.Apply $ Arg ai $ toTerm p - toTerms :: [I.NamedArg DeBruijnPattern] -> [I.Arg DisplayTerm]+ toTerms :: [NamedArg DeBruijnPattern] -> [Arg DisplayTerm] toTerms = map $ fmap $ toTerm . namedThing toTerm :: DeBruijnPattern -> DisplayTerm
src/full/Agda/Utils/AssocList.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE TupleSections #-} -- | Additional functions for association lists.@@ -9,7 +9,6 @@ import Control.Applicative -import Data.Functor import qualified Data.List as List import Agda.Utils.Tuple@@ -64,7 +63,7 @@ -- | O(n). -- If called with a effect-producing function, violation of the invariant -- could matter here (duplicating effects).-mapWithKeyM :: (Functor m, Applicative m) => (k -> v -> m v) -> AssocList k v -> m (AssocList k v)+mapWithKeyM :: Applicative m => (k -> v -> m v) -> AssocList k v -> m (AssocList k v) mapWithKeyM f = mapM $ \ (k,v) -> (k,) <$> f k v where -- mapM is applicative!
src/full/Agda/Utils/Bag.hs view
@@ -1,6 +1,6 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TemplateHaskell #-} -- | A simple overlay over Data.Map to manage unordered sets with duplicates. @@ -17,7 +17,6 @@ import Data.Map (Map) import qualified Data.Map as Map import Data.Monoid-import Data.Set (Set) import qualified Data.Set as Set import Data.Traversable @@ -122,7 +121,7 @@ -- * Traversal ------------------------------------------------------------------------ -map :: (Ord a, Ord b) => (a -> b) -> Bag a -> Bag b+map :: Ord b => (a -> b) -> Bag a -> Bag b map f = Bag . Map.fromListWith (++) . List.map ff . Map.elems . bag where ff (a : as) = (b, b : List.map f as) where b = f a@@ -191,7 +190,7 @@ prop_map_id :: Ord a => Bag a -> Bool prop_map_id b = map id b == b -prop_map_compose :: (Ord a, Ord b, Ord c) =>+prop_map_compose :: (Ord b, Ord c) => (b -> c) -> (a -> b) -> Bag a -> Bool prop_map_compose f g b = map f (map g b) == map (f . g) b
src/full/Agda/Utils/Benchmark.hs view
@@ -128,6 +128,13 @@ finally m f = ReaderT $ \ r -> finally (m `runReaderT` r) (f `runReaderT` r) +instance MonadBench a m => MonadBench a (StateT r m) where+ getBenchmark = lift $ getBenchmark+ putBenchmark = lift . putBenchmark+ modifyBenchmark = lift . modifyBenchmark+ finally m f = StateT $ \s ->+ finally (m `runStateT` s) (f `runStateT` s)+ -- | Turn benchmarking on/off. setBenchmarking :: MonadBench a m => Bool -> m ()@@ -149,6 +156,13 @@ -- Switch to new account. modifyBenchmark $ mapCurrentAccount $ const $ (, now) <$> newAccount return $ fst <$> oldAccount++-- | Resets the account and the timing information.++reset :: MonadBench a m => m ()+reset = modifyBenchmark $+ mapCurrentAccount (const Strict.Nothing) .+ mapTimings (const Trie.empty) -- | Bill a computation to a specific account. -- Works even if the computation is aborted by an exception.
src/full/Agda/Utils/BiMap.hs view
@@ -1,9 +1,9 @@-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE PatternGuards #-}-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TupleSections #-} -- | Finite bijections (implemented as a pair of maps). @@ -18,12 +18,10 @@ import qualified Data.List as List import Data.Map (Map) import qualified Data.Map as Map-import Data.Maybe import Data.Tuple import Data.Typeable ( Typeable ) import Test.QuickCheck-import Test.QuickCheck.All -- | Finite bijective map from @a@ to @b@. There, and back again. data BiMap a b = BiMap@@ -33,19 +31,19 @@ deriving (Typeable) -- | Lookup. O(log n).-lookup :: (Ord a, Ord b) => a -> BiMap a b -> Maybe b+lookup :: Ord a => a -> BiMap a b -> Maybe b lookup a = Map.lookup a . biMapThere -- | Inverse lookup. O(log n).-invLookup :: (Ord a, Ord b) => b -> BiMap a b -> Maybe a+invLookup :: Ord b => b -> BiMap a b -> Maybe a invLookup b = Map.lookup b . biMapBack -- | Empty bimap. O(1).-empty :: (Ord a, Ord b) => BiMap a b+empty :: BiMap a b empty = BiMap Map.empty Map.empty -- | Singleton bimap. O(1).-singleton :: (Ord a, Ord b) => a -> b -> BiMap a b+singleton :: a -> b -> BiMap a b singleton a b = BiMap (Map.singleton a b) (Map.singleton b a) -- | Insert. Overwrites existing value if present.@@ -63,7 +61,7 @@ fromList = List.foldl' (flip (uncurry insert)) empty -- | Turn into list, sorted ascendingly by first value.-toList :: (Ord a, Ord b) => BiMap a b -> [(a,b)]+toList :: BiMap a b -> [(a,b)] toList = Map.toAscList . biMapThere ------------------------------------------------------------------------@@ -76,7 +74,7 @@ instance (Ord a, Ord b) => Ord (BiMap a b) where compare = compare `on` biMapThere -instance (Show a, Show b, Ord a, Ord b) => Show (BiMap a b) where+instance (Show a, Show b) => Show (BiMap a b) where show bimap = "Agda.Utils.BiMap.fromList " ++ show (toList bimap) instance (Ord a, Ord b, Arbitrary a, Arbitrary b) => Arbitrary (BiMap a b) where
src/full/Agda/Utils/Cluster.hs view
@@ -21,9 +21,7 @@ import Data.List import Test.QuickCheck-import Test.QuickCheck.All import Test.QuickCheck.Function-import Text.Show.Functions -- | Characteristic identifiers. type C = Int
src/full/Agda/Utils/Either.hs view
@@ -13,8 +13,6 @@ , tests ) where -import Control.Applicative- import Agda.Utils.QuickCheck import Agda.Utils.TestHelpers
+ src/full/Agda/Utils/Environment.hs view
@@ -0,0 +1,38 @@++-- | Expand environment variables in strings+module Agda.Utils.Environment ( expandEnvironmentVariables ) where++import Data.Char+import Data.Maybe+import System.Environment++expandEnvironmentVariables :: String -> IO String+expandEnvironmentVariables s = do+ env <- getEnvironment+ return $ expandVars env s++expandVars :: [(String, String)] -> String -> String+expandVars env s = concatMap repl $ tokens s+ where+ repl (Var x) = fromMaybe "" $ lookup x env+ repl (Str s) = s++data Token = Var String | Str String+ deriving (Eq, Show)++tokens :: String -> [Token]+tokens s =+ case s of+ '$' : '$' : s -> cons '$' $ tokens s+ '$' : s@(c : _) | isAlpha c -> Var x : tokens s'+ where (x, s') = span isAlphaNum s+ '$' : '{' : s ->+ case break (== '}') s of+ (x, '}' : s) -> Var x : tokens s+ _ -> [Str $ "${" ++ s] -- abort on unterminated '{'+ c : s -> cons c $ tokens s+ "" -> []+ where+ cons c (Str s : ts) = Str (c : s) : ts+ cons c ts = Str [c] : ts+
src/full/Agda/Utils/Except.hs view
@@ -53,6 +53,7 @@ ------------------------------------------------------------------------ import Control.Monad.Error+import Text.PrettyPrint type ExceptT = ErrorT @@ -69,6 +70,9 @@ mapExceptT :: (m (Either e a) -> m' (Either e' a')) -> ExceptT e m a -> ExceptT e' m' a' mapExceptT = mapErrorT +instance Error Doc where+ noMsg = empty+ strMsg = text #endif -- | To simulate @MaybeT@ by @ExceptT@.
src/full/Agda/Utils/Favorites.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFoldable #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE ScopedTypeVariables #-}@@ -16,35 +15,20 @@ module Agda.Utils.Favorites where import Prelude hiding ( null )-import Control.Monad -import Data.Bool-import Data.Eq-import Data.Ord import Data.Foldable (Foldable) import Data.Functor-import Data.Function import Data.Monoid-import Data.List (all, (++)) import qualified Data.List as List-import Data.Set (Set) import qualified Data.Set as Set-import Data.Tuple (uncurry) -import System.IO-import Text.Show-import Test.QuickCheck.All+import Test.QuickCheck import Agda.Utils.Null import Agda.Utils.PartialOrd hiding (tests)-import Agda.Utils.QuickCheck import Agda.Utils.Singleton-import Agda.Utils.TestHelpers import Agda.Utils.Tuple -#include "undefined.h"-import Agda.Utils.Impossible- -- | A list of incomparable favorites. newtype Favorites a = Favorites { toList :: [a] } deriving (Foldable, Show, CoArbitrary, Null, Singleton a)@@ -105,11 +89,11 @@ -- Not better: Discard @a@ IsDominated{} -> loop new old -unionCompared :: PartialOrd a => (Favorites a, Favorites a) -> Favorites a+unionCompared :: (Favorites a, Favorites a) -> Favorites a unionCompared (Favorites new, Favorites old) = Favorites $ new ++ old -- | After comparing, do the actual insertion.-insertCompared :: PartialOrd a => a -> Favorites a -> CompareResult a -> Favorites a+insertCompared :: a -> Favorites a -> CompareResult a -> Favorites a insertCompared a _ (Dominates _ as) = Favorites (a : as) insertCompared _ l IsDominated{} = l
src/full/Agda/Utils/FileName.hs view
@@ -1,5 +1,5 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-| Operations on file names. -}@@ -23,8 +23,8 @@ import System.Win32 (findFirstFile, findClose, getFindDataFileName) #endif -import Data.ByteString.Char8 (ByteString)-import qualified Data.ByteString.Char8 as ByteString+import Data.Text (Text)+import qualified Data.Text as Text import Data.Function import Data.Hashable import Data.Typeable (Typeable)@@ -40,19 +40,13 @@ -- -- Note that the 'Eq' and 'Ord' instances do not check if different -- paths point to the same files or directories.------ Andreas, 2014-03-30:--- For efficiency of serialization, 'AbsolutePath' is implemented--- as 'ByteString' which short-cuts equality testing using--- pointer equality. This saves 20% of the serialization time--- of the standard library! -newtype AbsolutePath = AbsolutePath { byteStringPath :: ByteString }+newtype AbsolutePath = AbsolutePath { byteStringPath :: Text } deriving (Eq, Ord, Typeable, Hashable) -- | Extract the 'AbsolutePath' to be used as 'FilePath'. filePath :: AbsolutePath -> FilePath-filePath = ByteString.unpack . byteStringPath+filePath = Text.unpack . byteStringPath -- TODO: 'Show' should output Haskell-parseable representations. -- The following instance is deprecated, and Pretty should be used@@ -82,21 +76,13 @@ mkAbsolute :: FilePath -> AbsolutePath mkAbsolute f | isAbsolute f =- AbsolutePath $ ByteString.pack $ dropTrailingPathSeparator $ normalise f+ AbsolutePath $ Text.pack $ dropTrailingPathSeparator $ normalise f | otherwise = __IMPOSSIBLE__ -#if mingw32_HOST_OS prop_mkAbsolute :: FilePath -> Property-#else-prop_mkAbsolute :: FilePath -> Bool-#endif prop_mkAbsolute f = let path = rootPath ++ f- in-#if mingw32_HOST_OS- isValid path ==>-#endif- absolutePathInvariant $ mkAbsolute $ path+ in isValid path ==> absolutePathInvariant $ mkAbsolute $ path rootPath :: FilePath #if mingw32_HOST_OS@@ -160,6 +146,9 @@ arbitrary = mk . take 3 . map (take 2) <$> listOf (listOf1 (elements "a1")) where mk ps = mkAbsolute (joinPath $ rootPath : ps)++instance CoArbitrary AbsolutePath where+ coarbitrary (AbsolutePath t) = coarbitrary (Text.unpack t) ------------------------------------------------------------------------ -- All tests
src/full/Agda/Utils/Geniplate.hs view
@@ -15,7 +15,10 @@ import qualified Agda.Syntax.Abstract.Name as A import qualified Agda.Syntax.Concrete.Name as C+import qualified Agda.Syntax.Position as P import qualified Agda.Syntax.Scope.Base as S+import qualified Agda.Utils.FileName as F+import qualified Agda.Utils.Maybe.Strict as MS -- | Types which Geniplate should not descend into. @@ -28,7 +31,10 @@ , [t| S.ScopeInfo |] , [t| Map A.QName A.QName |] , [t| Map A.ModuleName A.ModuleName |]+ , [t| [(A.QName, A.QName)] |]+ , [t| [(A.ModuleName, A.ModuleName)] |] , [t| A.AmbiguousQName |]+ , [t| P.Range' (MS.Maybe F.AbsolutePath) |] ] -- | A localised instance of 'instanceUniverseBiT'. The generated
src/full/Agda/Utils/Graph/AdjacencyMap/Unidirectional.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DoAndIfThenElse #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE ScopedTypeVariables #-}@@ -58,13 +59,12 @@ , sccDAG' , sccDAG , acyclic+ , reachableFrom+ , walkSatisfying , composeWith , complete , gaussJordanFloydWarshallMcNaughtonYamadaReference , gaussJordanFloydWarshallMcNaughtonYamada- , findPath- , allPaths- -- , allTrails -- Exponential, don't use! See issue 1612. ) where @@ -74,6 +74,8 @@ import Control.Monad import qualified Data.Array.IArray as Array+import qualified Data.Edison.Seq.BankersQueue as BQ+import qualified Data.Edison.Seq.SimpleQueue as SQ import Data.Function import qualified Data.Graph as Graph import Data.IntMap.Strict (IntMap)@@ -139,7 +141,7 @@ -- | Turn a graph into a list of edges. @O(n + e)@ -edges :: (Ord s, Ord t) => Graph s t e -> [Edge s t e]+edges :: Graph s t e -> [Edge s t e] edges (Graph g) = [ Edge s t e | (s, tes) <- Map.assocs g@@ -151,7 +153,7 @@ -- -- Roughly linear in the length of the result list @O(result)@. -edgesFrom :: (Ord s, Ord t) => Graph s t e -> [s] -> [Edge s t e]+edgesFrom :: Ord s => Graph s t e -> [s] -> [Edge s t e] edgesFrom (Graph g) ss = [ Edge s t e | s <- ss@@ -165,7 +167,7 @@ -- -- Expensive: @O(n * |ts| * log n)@. -edgesTo :: (Ord s, Ord t) => Graph s t e -> [t] -> [Edge s t e]+edgesTo :: Ord t => Graph s t e -> [t] -> [Edge s t e] edgesTo (Graph g) ts = [ Edge s t e | (s, m) <- Map.assocs g@@ -189,24 +191,24 @@ -- | Get a list of outgoing edges with target. -neighbours :: (Ord s, Ord t) => s -> Graph s t e -> [(t, e)]+neighbours :: Ord s => s -> Graph s t e -> [(t, e)] neighbours s (Graph g) = maybe [] Map.assocs $ Map.lookup s g -- | Get a list of outgoing edges with target. -neighboursMap :: (Ord s, Ord t) => s -> Graph s t e -> Map t e+neighboursMap :: Ord s => s -> Graph s t e -> Map t e neighboursMap s (Graph g) = fromMaybe Map.empty $ Map.lookup s g -- * Node queries -- | Returns all the nodes with outgoing edges. @O(n)@. -sourceNodes :: (Ord s, Ord t) => Graph s t e -> Set s+sourceNodes :: Graph s t e -> Set s sourceNodes = Map.keysSet . graph -- | Returns all the nodes with incoming edges. Expensive! @O(e)@. -targetNodes :: (Ord s, Ord t) => Graph s t e -> Set t+targetNodes :: Ord t => Graph s t e -> Set t targetNodes = Set.fromList . map target . edges -- | For homogeneous graphs, @(s = t)@ we can compute a set@@ -257,7 +259,7 @@ -- | Convert a graph into a list of edges. O(e) -toList :: (Ord s, Ord t) => Graph s t e -> [Edge s t e]+toList :: Graph s t e -> [Edge s t e] toList (Graph g) = [ Edge s t a | (s,m) <- Map.assocs g, (t,a) <- Map.assocs m ] -- | Check whether the graph is discrete (no edges).@@ -267,12 +269,12 @@ discrete = all' (all' null) . graph where all' p = List.all p . Map.elems --- | Remove 'Null' edges.-clean :: (Ord s, Ord t, Null e) => Graph s t e -> Graph s t e+-- | Removes 'Null' edges (and empty 'Map's).+clean :: Null e => Graph s t e -> Graph s t e clean = Graph . filt . fmap filt . graph where- filt :: (Ord k, Null a) => Map k a -> Map k a- filt = Map.fromAscList . List.filter (not . null . snd) . Map.toAscList+ filt :: Null a => Map k a -> Map k a+ filt = Map.filter (not . null) -- | Empty graph (no nodes, no edges). @@ -281,7 +283,7 @@ -- | A graph with two nodes and a single connecting edge. -singleton :: (Ord s, Ord t) => s -> t -> e -> Graph s t e+singleton :: s -> t -> e -> Graph s t e singleton s t e = Graph $ Map.singleton s (Map.singleton t e) -- | Insert an edge into the graph.@@ -344,7 +346,7 @@ -- -- Expensive! @O(n log n)@. -removeTargetNode :: (Ord s, Ord t) => t -> Graph s t e -> Graph s t e+removeTargetNode :: Ord t => t -> Graph s t e -> Graph s t e removeTargetNode t (Graph g) = Graph $ Map.mapMaybe rem g where rem = discardEmpty . Map.delete t @@ -365,7 +367,7 @@ -- | Keep only the edges that satisfy the predicate. @O(e).@ -filterEdges :: (Ord s, Ord t) => (e -> Bool) -> Graph s t e -> Graph s t e+filterEdges :: (e -> Bool) -> Graph s t e -> Graph s t e filterEdges f (Graph g) = Graph $ Map.mapMaybe (discardEmpty . Map.filter f) g -- | Unzipping a graph (naive implementation using fmap).@@ -376,7 +378,7 @@ -- | Maps over a graph under availability of positional information, -- like 'Map.mapWithKey'. -mapWithEdge :: (Ord s, Ord t) => (Edge s t e -> e') -> Graph s t e -> Graph s t e'+mapWithEdge :: (Edge s t e -> e') -> Graph s t e -> Graph s t e' mapWithEdge f (Graph g) = Graph $ flip Map.mapWithKey g $ \ s m -> flip Map.mapWithKey m $ \ t e -> f (Edge s t e) @@ -528,6 +530,67 @@ isAcyclic Graph.AcyclicSCC{} = True isAcyclic Graph.CyclicSCC{} = False +-- | @reachableFrom g n@ is a map containing all nodes reachable from+-- @n@ in @g@. For each node a simple path to the node is given, along+-- with its length (the number of edges). The paths are as short as+-- possible (in terms of the number of edges).+--+-- Precondition: @n@ must be a node in @g@. The number of nodes in the+-- graph must not be larger than @'maxBound' :: 'Int'@.+--+-- Amortised time complexity (assuming that comparisons take constant+-- time): /O(e log n)/, if the lists are not inspected. Inspection of+-- a prefix of a list is linear in the length of the prefix.++reachableFrom :: Ord n => Graph n n e -> n -> Map n (Int, [Edge n n e])+reachableFrom g n = bfs (SQ.singleton (n, BQ.empty)) Map.empty+ where+ bfs !q !map = case SQ.lview q of+ Nothing -> map+ Just ((u, p), q) ->+ if u `Map.member` map+ then bfs q map+ else bfs (foldr SQ.rcons q+ [ (v, BQ.rcons (Edge u v e) p)+ | (v, e) <- neighbours u g+ ])+ (let n = BQ.size p in+ n `seq` Map.insert u (n, BQ.toList p) map)++-- | @walkSatisfying every some g from to@ determines if there is a+-- walk from @from@ to @to@ in @g@, in which every edge satisfies the+-- predicate @every@, and some edge satisfies the predicate @some@. If+-- there are several such walks, then a shortest one (in terms of the+-- number of edges) is returned.+--+-- Precondition: @from@ and @to@ must be nodes in @g@. The number of+-- nodes in the graph must not be larger than @'maxBound' :: 'Int'@.+--+-- Amortised time complexity (assuming that comparisons and the+-- predicates take constant time to compute): /O(e log n)/.++walkSatisfying ::+ Ord n =>+ (e -> Bool) -> (e -> Bool) ->+ Graph n n e -> n -> n -> Maybe [Edge n n e]+walkSatisfying every some g from to =+ case+ [ (l1 + l2, p1 ++ [e] ++ map transposeEdge (reverse p2))+ | e <- everyEdges+ , some (label e)+ , (l1, p1) <- maybeToList (Map.lookup (source e) fromReaches)+ , (l2, p2) <- maybeToList (Map.lookup (target e) reachesTo)+ ] of+ [] -> Nothing+ ess -> Just $ snd $ List.minimumBy (compare `on` fst) ess+ where+ everyEdges = [ e | e <- toList g, every (label e) ]++ fromReaches = reachableFrom (fromList everyEdges) from++ reachesTo =+ reachableFrom (fromList (map transposeEdge everyEdges)) to+ -- * Graph composition -- | @composeWith times plus g g'@ finds all edges@@ -537,7 +600,7 @@ -- Complexity: for each edge @s --> t@ in @g@ we lookup up -- all edges starting in with @t@ in @g'@. ---composeWith :: (Ord s, Ord t, Ord u) => (c -> d -> e) -> (e -> e -> e) ->+composeWith :: (Ord t, Ord u) => (c -> d -> e) -> (e -> e -> e) -> Graph s t c -> Graph t u d -> Graph s u e composeWith times plus (Graph g) (Graph g') = Graph $ Map.mapMaybe (discardEmpty . comp) g where@@ -663,11 +726,15 @@ -- -- * Strongly connected components are used to avoid computing some -- zero edges.+--+-- The graph's strongly connected components (in reverse topological+-- order) are returned along with the transitive closure. gaussJordanFloydWarshallMcNaughtonYamada :: forall n e. (Ord n, Eq e, StarSemiRing e) =>- Graph n n e -> Graph n n e-gaussJordanFloydWarshallMcNaughtonYamada g = loop components g+ Graph n n e -> (Graph n n e, [Graph.SCC n])+gaussJordanFloydWarshallMcNaughtonYamada g =+ (loop components g, components) where components = sccs' g forwardDAG = sccDAG' g components@@ -699,142 +766,6 @@ Nothing -> ozero Just e -> e --- | Find a path from a source node to a target node.------ The path must satisfy the given predicate @good :: e -> Bool@.-findPath :: (SemiRing e, Ord n) => (e -> Bool) -> n -> n -> Graph n n e -> Maybe e-findPath good a b g = headMaybe $ filter good $ allPaths good a b g---- | @allPaths classify a b g@ returns a list of pathes (accumulated edge weights)--- from node @a@ to node @b@ in @g@.--- Alternative intermediate pathes are only considered if they--- are distinguished by the @classify@ function.-allPaths :: (SemiRing e, Ord n, Ord c) => (e -> c) -> n -> n -> Graph n n e -> [e]-allPaths classify s t g = paths Set.empty s- where- paths visited s = do- (s', e) <- neighbours s g- let tag = (s', classify e)- recurse = map (e `otimes`) (paths (Set.insert tag visited) s')- if tag `Set.member` visited then []- else if s' == t then e : recurse- else recurse---- THE FOLLOWING IMPLEMENTATION OF allTrails is in practice worse--- then the naive depth-first search with backtracking.---- -- | A trail is a non-empty list of consecutive edges with no duplicate.--- -- We store a set of edges for more efficient trail composition.--- ----- -- Invariants for @Trail tr s@:--- ----- -- 1. nonempty--- -- @not $ null tr@.--- ----- -- 2. consecutive--- -- @List.and $ zipWith (\ (Edge _ t1 _) (Edge s2 _ _) -> t1 == s2) tr (tail tr)@.--- ----- -- 3. coherence--- -- @Set.toAscList s == sort $ map (\ (Edges s t _) -> (s,t)) tr@.---- data Trail n e = Trail { trail :: [Edge n n e], trailEdgeSet :: Set (n, n) }--- deriving (Show)---- instance (Eq n, Eq e) => Eq (Trail n e) where--- (==) = (==) `on` trail---- instance (Ord n, Ord e) => Ord (Trail n e) where--- compare = compare `on` trail---- singletonTrail :: Edge n n e -> Trail n e--- singletonTrail e@(Edge s t _) = Trail [e] $ Set.singleton (s,t)---- trailSource :: Trail n e -> n--- trailSource (Trail (Edge s _ _ : _) _) = s--- trailSource _ = __IMPOSSIBLE__---- trailTarget :: Trail n e -> n--- trailTarget (Trail (Edge _ t _ : _) _) = t--- trailTarget _ = __IMPOSSIBLE__---- -- | Precondition for @composeTrails t1 t2@:--- -- @trailTarget t1 == trailSource t2@.--- composeTrails :: (Ord n) => Trail n e -> Trail n e -> Maybe (Trail n e)--- composeTrails (Trail t1 s1) (Trail t2 s2) =--- if null (Set.intersection s1 s2) then Just $ Trail (t1 ++ t2) $ Set.union s1 s2--- else Nothing---- composeTrails_alt :: (Ord n) => Trail n e -> Trail n e -> Maybe (Trail n e)--- composeTrails_alt t (Trail [] _) = Just t--- composeTrails_alt (Trail [] _) t = Just t--- composeTrails_alt (Trail t1 s1) (Trail t2 s2) =--- foldr cons (return t2) t1 <&> \ t12 -> Trail t12 $ Set.union s1 s2--- where--- cons e@(Edge s t _) mt12 = do--- t12 <- mt12--- guard $ (s,t) `Set.notMember` s2--- return $ e : t12---- -- | A possibly empty set of trails with same source and same target.--- ----- -- Invariants for @Tails ts@:--- -- Same source: @length (group (map trailSource ts)) == 1@.--- -- Same target: @length (group (map trailTarget ts)) == 1@.---- newtype Trails n e = Trails { trails :: Set (Trail n e) }--- deriving (Eq, Ord, Show, Null, Singleton (Trail n e))---- instance (Ord n, Ord e) => SemiRing (Trails n e) where--- ozero = Null.empty--- oone = __IMPOSSIBLE__--- oplus (Trails t1s) (Trails t2s) = Trails $ Set.union t1s t2s--- otimes (Trails t1s) (Trails t2s) = Trails $ Set.fromList $--- catMaybes [ composeTrails t1 t2 | t1 <- Set.toList t1s, t2 <- Set.toList t2s ]---- -- | We compute @allTrails@ by a transitive closure algorithm.--- -- In practice, we are only interested in the first trail--- -- with a specific property, so it is important--- -- to compute @allTrails@ lazily.--- ----- -- We use a graph with edges labelled by 'Trails'.--- allTrails :: forall e n. (Eq e, Ord e, SemiRing e, Ord n) =>--- n -> n -> Graph n n e -> [e]--- allTrails s t g = map collapse st--- where--- -- Construct a graph of singleton trails--- init :: Graph n n (Trails n e)--- init = mapWithEdge (Singleton.singleton . singletonTrail) g--- -- Compute transitive closure iteratively and keep the diffs.--- diffs = init : map fst (completeIter init)--- -- Extract a sequence of trails from s to t from the diff sequence.--- -- Each diff may contain several or no trails from s to t.--- st = concat $ map (maybe [] (Set.toList . trails) . lookup s t) diffs--- -- Multiply the edge weights a long a trail.--- collapse (Trail tr _) = foldr1 otimes $ map label tr---- | @allTrails a b g@ returns all trails (walks where all edges are--- distinct) from node @a@ to node @b@ in @g@. The trails are returned--- in the form of accumulated edge weights.------ This definition can perhaps be optimised through the use of--- memoisation.------ Andreas, 2015-07-21 Issue 1612: This function is worst-case exponential--- as the @k@-complete graph has @k!@ many trails. DON'T USE!--allTrails :: forall e n. (SemiRing e, Ord n) =>- n -> n -> Graph n n e -> [e]-allTrails s t g = paths Set.empty s- where- paths :: Set (n, n) -> n -> [e]- paths traversed s = do- (s', e) <- neighbours s g- let edge = (s, s')- recurse = (e `otimes`) <$> paths (Set.insert edge traversed) s'- if edge `Set.member` traversed then []- else if s' == t then e : recurse- else recurse- ------------------------------------------------------------------------ -- Generators @@ -844,7 +775,7 @@ instance (CoArbitrary s, CoArbitrary t, CoArbitrary e) => CoArbitrary (Edge s t e) where coarbitrary (Edge s t e) = coarbitrary s . coarbitrary t . coarbitrary e -instance (Ord n, SemiRing e, Arbitrary n, Arbitrary e) =>+instance (Ord n, Arbitrary n, Arbitrary e) => Arbitrary (Graph n n e) where arbitrary = do nodes <- sized $ \ n -> resize (2 * isqrt n) arbitrary
src/full/Agda/Utils/Graph/AdjacencyMap/Unidirectional/Tests.hs view
@@ -1,11 +1,11 @@ {-# OPTIONS_GHC -fno-warn-missing-signatures #-} -{-# LANGUAGE CPP #-}-{-# LANGUAGE DoAndIfThenElse #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DoAndIfThenElse #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE NoMonomorphismRestriction #-}-{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE NoMonomorphismRestriction #-}+{-# LANGUAGE TemplateHaskell #-} -- | Properties for graph library. @@ -13,15 +13,15 @@ import Prelude hiding (null) + import Control.Monad +import qualified Data.Foldable as Fold import Data.Function import qualified Data.Graph as Graph import qualified Data.List as List import Data.Maybe-import Data.Map (Map) import qualified Data.Map as Map-import Data.Set (Set) import qualified Data.Set as Set import Test.QuickCheck as QuickCheck@@ -53,7 +53,7 @@ -- | Generates an edge from the graph. (Unless the graph contains no -- edges.) -edgeIn :: (Ord n, Arbitrary n, Arbitrary e) =>+edgeIn :: (Arbitrary n, Arbitrary e) => Graph n n e -> Gen (Edge n n e) edgeIn g = elementsUnlessEmpty (edges g) @@ -97,7 +97,7 @@ connectivityGraph :: Ord n => Graph n n e -> Graph n n Connected connectivityGraph =- gaussJordanFloydWarshallMcNaughtonYamada .+ fst . gaussJordanFloydWarshallMcNaughtonYamada . fmap (const oone) connected :: Ord n => Graph n n Connected -> n -> n -> Bool@@ -195,6 +195,73 @@ prop_oppositeDAG g = dagInvariant (oppositeDAG (sccDAG g)) +-- | @isWalk g from to es@ is 'True' iff @es@ is a walk from @from@ to+-- @to@ in @g@.++isWalk :: G -> N -> N -> [Edge N N E] -> Bool+isWalk g from to [] =+ from == to+ &&+ from `Set.member` nodes g+isWalk g from to es =+ map source es ++ [to] == [from] ++ map target es+ &&+ all validEdge es+ where+ validEdge e = e `elem` edgesFrom g [source e]++prop_reachableFrom :: G -> Property+prop_reachableFrom g =+ not (Set.null (nodes g)) ==>+ forAll (nodeIn g) $ \u ->+ let reachableFromU = reachableFrom g u in+ -- Every list is a walk of the given length.+ all (\(v, (n, es)) -> isWalk g u v es && length es == n)+ (Map.toList reachableFromU)+ &&+ -- Every walk is a simple path.+ Fold.all (distinct . map source . snd) reachableFromU+ &&+ -- A path is found from u to v iff u = v or there is a non-empty+ -- path from u to v (according to 'connectivityGraph' and+ -- 'connected').+ Fold.all (\v -> Map.member v reachableFromU+ ==+ (u == v || connected cg u v))+ (nodes g)+ where+ cg = connectivityGraph g++prop_walkSatisfying ::+ G -> (Occurrence -> Bool) -> (Occurrence -> Bool) -> Property+prop_walkSatisfying g every some =+ forAll (nodeIn g) $ \from ->+ forAll (nodeIn g) $ \to ->+ case walkSatisfying every some g from to of+ Nothing -> QuickCheck.label "no walk" True+ Just es -> QuickCheck.label (show (length es) ++ " steps") $+ isWalk g from to es+ &&+ all every es' && any some es'+ where es' = map Graph.label es++-- | A property for+-- 'Agda.TypeChecking.Positivity.Occurrence.productOfEdgesInBoundedWalk'.++prop_productOfEdgesInBoundedWalk :: G -> Property+prop_productOfEdgesInBoundedWalk g =+ forAll (nodeIn g) $ \u ->+ forAll (nodeIn g) $ \v ->+ forAll (elements (Map.keys boundToEverySome)) $ \bound ->+ case productOfEdgesInBoundedWalk id g u v bound of+ Nothing -> Nothing+ Just o -> Just (o <= bound)+ ==+ case Graph.lookup u v+ (fst (gaussJordanFloydWarshallMcNaughtonYamada g)) of+ Just o | o <= bound -> Just True+ _ -> Nothing+ -- | Computes the transitive closure of the graph. -- -- Note that this algorithm is not guaranteed to be correct (or@@ -236,7 +303,8 @@ prop_gaussJordanFloydWarshallMcNaughtonYamada :: G -> Property prop_gaussJordanFloydWarshallMcNaughtonYamada g = QuickCheck.label sccInfo $- gaussJordanFloydWarshallMcNaughtonYamada g ~~ transitiveClosure1 g+ fst (gaussJordanFloydWarshallMcNaughtonYamada g) ~~+ transitiveClosure1 g where sccInfo = (if noSCCs <= 3 then " " ++ show noSCCs@@ -247,84 +315,6 @@ prop_complete :: G -> Bool prop_complete g = complete g ~~ transitiveClosure1 g---- Andreas, 2015-07-21 Issue 1612:--- May take forever due to exponential time of allTrails.------ prop_allTrails_existence :: Property--- prop_allTrails_existence =--- forAll (scale (`div` 2) arbitrary :: Gen G) $ \g ->--- forAll (nodeIn g) $ \i ->--- forAll (nodeIn g) $ \j ->--- null (allTrails i j g)--- ==--- not (connected (connectivityGraph g) i j)---- | The 'Integer's should be non-negative.--data ExtendedNatural = Finite Integer | Infinite- deriving (Eq, Ord, Show)--instance SemiRing ExtendedNatural where- ozero = Finite 0- oone = Finite 1-- oplus (Finite m) (Finite n) = Finite (m + n)- oplus Infinite _ = Infinite- oplus _ Infinite = Infinite-- otimes (Finite m) (Finite n) = Finite (m * n)- otimes (Finite 0) _ = Finite 0- otimes _ (Finite 0) = Finite 0- otimes Infinite _ = Infinite- otimes _ Infinite = Infinite--instance StarSemiRing ExtendedNatural where- ostar (Finite 0) = Finite 1- ostar _ = Infinite----- Andreas, 2015-07-21 Issue 1612:--- May take forever due to exponential time of allTrails.------ prop_allTrails_number :: Property--- prop_allTrails_number =--- forAll (scale (`div` 2) arbitrary :: Gen G) $ \g ->--- forAll (nodeIn g) $ \i ->--- forAll (nodeIn g) $ \j ->--- Finite (List.genericLength (allTrails i j g))--- <=--- case Graph.lookup i j--- (gaussJordanFloydWarshallMcNaughtonYamada--- (fmap (const oone) g)) of--- Just n -> n--- Nothing -> Finite 0---- Node 10 is unreachable, so @allTrails _ 10 g1612@ takes forever-g1612 :: Graph N N E-g1612 = Graph $ Map.fromList- [ (n 1,Map.fromList [(n 1,Unused ),(n 9,StrictPos),(n 12,JustPos),(n 15,JustPos)])- , (n 3,Map.fromList [(n 3,Unused ),(n 8,StrictPos)])- , (n 8,Map.fromList [(n 1,GuardPos ),(n 3,Mixed ),(n 8,Unused),(n 9,JustPos),(n 11,StrictPos),(n 12,GuardPos),(n 15,JustPos)])- , (n 9,Map.fromList [(n 1,JustNeg ),(n 8,Mixed ),(n 9,JustNeg),(n 11,StrictPos),(n 12,StrictPos)])- , (n 10,Map.fromList [(n 1,JustPos ),(n 8,StrictPos)])- , (n 11,Map.fromList [(n 1,StrictPos),(n 8,JustNeg ),(n 9,JustNeg),(n 11,JustNeg)])- , (n 12,Map.fromList [(n 1,JustPos ),(n 15,StrictPos)])- , (n 15,Map.fromList [(n 1,JustPos ),(n 8,GuardPos ),(n 11,Mixed),(n 12,Mixed)])- ]---- t1612t = allTrails (n 9) (n 10) g1612 -- FOREVER--g1612a = Graph $ Map.fromList- [(n 1,Map.fromList [(n 2,JustNeg),(n 11,Mixed)])- ,(n 2,Map.fromList [(n 1,JustNeg),(n 2,GuardPos),(n 4,GuardPos),(n 8,Unused),(n 11,Unused)])- ,(n 4,Map.fromList [(n 2,GuardPos),(n 8,JustPos),(n 12,GuardPos)])- ,(n 6,Map.fromList [(n 1,StrictPos),(n 11,Unused),(n 12,JustNeg)])- ,(n 8,Map.fromList [(n 1,GuardPos),(n 4,JustPos),(n 8,JustPos)])- ,(n 11,Map.fromList [(n 4,GuardPos),(n 12,StrictPos)])- ,(n 12,Map.fromList [(n 1,Mixed),(n 4,Mixed),(n 11,Mixed)])- ]- ------------------------------------------------------------------------ -- * All tests
src/full/Agda/Utils/Hash.hs view
@@ -1,3 +1,4 @@+ {-| Instead of checking time-stamps we compute a hash of the module source and store it in the interface file. This module contains the functions to do that. -}
src/full/Agda/Utils/HashMap.hs view
@@ -1,29 +1,14 @@ module Agda.Utils.HashMap ( module HashMap- , mapMaybe- , alter ) where -import Data.Hashable import Data.HashMap.Strict as HashMap-import qualified Data.Maybe as Maybe --- | Like 'Data.Map.Strict.mapMaybe'.---- This code has not been benchmarked. Other implementations may be--- more efficient.--mapMaybe :: (a -> Maybe b) -> HashMap k a -> HashMap k b-mapMaybe f = fmap Maybe.fromJust . HashMap.filter Maybe.isJust . fmap f+-- ASR (20 January 2016) Issue 1779: I removed the @mapMaybe@ and+-- @alter@ functions because them currently aren't used and+-- them were added in unordered-containers 0.2.6.0. --- | Like 'Data.Map.Strict.alter'.+-- mapMaybe :: (a -> Maybe b) -> HashMap k a -> HashMap k b -alter :: (Eq k, Hashable k) =>- (Maybe a -> Maybe a) -> k -> HashMap k a -> HashMap k a-alter f k m = case HashMap.lookup k m of- Nothing -> case f Nothing of- Nothing -> m- Just v -> HashMap.insert k v m- Just v -> case f (Just v) of- Nothing -> HashMap.delete k m- Just v -> HashMap.insert k v m+-- alter :: (Eq k, Hashable k) =>+-- (Maybe a -> Maybe a) -> k -> HashMap k a -> HashMap k a
+ src/full/Agda/Utils/IO/Directory.hs view
@@ -0,0 +1,32 @@+module Agda.Utils.IO.Directory+ ( copyDirContent+ )+where++import Control.Monad+import System.Directory+import System.FilePath+import Data.ByteString as BS++import Paths_Agda++copyDirContent :: FilePath -> FilePath -> IO ()+copyDirContent src dest = do+ createDirectoryIfMissing True dest+ chlds <- getDirectoryContents src+ mapM_ (\x -> do+ isDir <- doesDirectoryExist (src </> x)+ case isDir of+ _ | x == "." || x == ".." -> return ()+ True -> copyDirContent (src </> x) (dest </> x)+ False -> copyIfChanged (src </> x) (dest </> x)+ ) chlds++copyIfChanged :: FilePath -> FilePath -> IO ()+copyIfChanged src dst = do+ exist <- doesFileExist dst+ if not exist then copyFile src dst else do+ new <- BS.readFile src+ old <- BS.readFile dst+ unless (old == new) $ copyFile src dst+
src/full/Agda/Utils/Lens.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE RankNTypes #-} -- | A cut-down implementation of lenses, with names taken from@@ -13,6 +15,9 @@ import Control.Monad.Reader import Control.Monad.Writer +import Data.Map (Map)+import qualified Data.Map as Map+ import Data.Functor.Identity import Agda.Utils.Functor ((<&>))@@ -44,7 +49,8 @@ -- | Read a part of the state. use :: MonadState o m => Lens' i o -> m i-use l = gets (^. l)+use l = do !x <- gets (^. l)+ return x infix 4 .= -- | Write a part of the state.@@ -58,12 +64,24 @@ infix 4 %== -- | Modify a part of the state monadically.-(%==) :: (MonadState o m, Functor m) => Lens' i o -> (i -> m i) -> m ()+(%==)+#if __GLASGOW_HASKELL__ <= 708+ :: (Functor m, MonadState o m)+#else+ :: MonadState o m+#endif+ => Lens' i o -> (i -> m i) -> m () l %== f = put =<< l f =<< get infix 4 %%= -- | Modify a part of the state monadically, and return some result.-(%%=) :: (MonadState o m, Functor m) => Lens' i o -> (i -> m (i, r)) -> m r+(%%=)+#if __GLASGOW_HASKELL__ <= 708+ :: (Functor m, MonadState o m)+#else+ :: MonadState o m+#endif+ => Lens' i o -> (i -> m (i, r)) -> m r l %%= f = do o <- get (o', r) <- runWriterT $ l (WriterT . f) o@@ -79,3 +97,6 @@ -- | Modify a part of the state in a subcomputation. locally :: MonadReader o m => Lens' i o -> (i -> i) -> m a -> m a locally l = local . over l++key :: Ord k => k -> Lens' (Maybe v) (Map k v)+key k f m = f (Map.lookup k m) <&> \ v -> Map.alter (const v) k m
src/full/Agda/Utils/List.hs view
@@ -1,9 +1,9 @@-{-# OPTIONS_GHC -fno-warn-missing-signatures #-}--{-# LANGUAGE CPP #-}-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE PatternGuards #-} {-# LANGUAGE TemplateHaskell #-} +{-# OPTIONS_GHC -fno-warn-missing-signatures #-}+ {-| Utitlity functions on lists. -} module Agda.Utils.List where@@ -12,15 +12,12 @@ import Data.Function import Data.List import Data.Maybe-import Data.Map (Map) import qualified Data.Map as Map import qualified Data.Set as Set import Text.Show.Functions () import Test.QuickCheck-import Test.QuickCheck.All -import Agda.Utils.Bag (Bag) import qualified Agda.Utils.Bag as Bag import Agda.Utils.TestHelpers -- import Agda.Utils.QuickCheck -- Andreas, 2014-04-27 Inconvenient@@ -205,6 +202,24 @@ chop n xs = ys : chop n zs where (ys,zs) = splitAt n xs +-- | Chop a list at the positions when the predicate holds. Contrary to+-- 'wordsBy', consecutive separator elements will result in an empty segment+-- in the result.+-- > intercalate [x] (chopWhen (== x) xs) == xs+chopWhen :: (a -> Bool) -> [a] -> [[a]]+chopWhen p [] = []+chopWhen p xs =+ case break p xs of+ (w, []) -> [w]+ (w, [_]) -> [w, []]+ (w, _ : ys) -> w : chopWhen p ys++prop_chop_intercalate :: Property+prop_chop_intercalate =+ forAllShrink (choose (0, 4 :: Int)) shrink $ \ d ->+ forAllShrink (listOf (choose (0, 4 :: Int))) shrink $ \ xs ->+ xs === intercalate [d] (chopWhen (== d) xs)+ -- | All ways of removing one element from a list. holes :: [a] -> [(a, [a])] holes [] = []@@ -346,24 +361,57 @@ where (zs , as , bs) = zipWithTails f xs ys -} --- | Efficient version of nub that sorts the list via a search tree ('Data.Map').+-- | Efficient variant of 'nubBy' for finite lists.+--+-- Specification:+--+-- > nubOn f xs == 'nubBy' ((==) `'on'` f) xs.+nubOn :: Ord b => (a -> b) -> [a] -> [a]+nubOn tag =+ map snd+ . sortBy (compare `on` fst)+ . map (snd . head)+ . groupBy ((==) `on` fst)+ . sortBy (compare `on` fst)+ . map (\p@(_, x) -> (tag x, p))+ . zip [1..]++prop_nubOn :: (Integer -> Integer) -> [Integer] -> Bool+prop_nubOn f xs = nubOn f xs == nubBy ((==) `on` f) xs++-- | Efficient variant of 'nubBy' for finite lists.+--+-- Specification: For each list @xs@ there is a list @ys@ which is a+-- permutation of @xs@ such that+--+-- > uniqOn f xs == 'nubBy' ((==) `'on'` f) ys.+--+-- Furthermore+--+-- > sortBy (compare `on` f) (uniqOn f xs) == uniqOn f xs. uniqOn :: Ord b => (a -> b) -> [a] -> [a] uniqOn key = Map.elems . Map.fromList . map (\ a -> (key a, a)) --- Andreas, 2014-10-09 RETIRED, the Map version is simpler,--- and possibly more efficient (discards duplicates early).--- -- | Efficient version of nub that sorts the list first. The tag function is--- -- assumed to be cheap. If it isn't pair up the elements with their tags and--- -- call uniqOn fst (or snd).--- uniqOn :: Ord b => (a -> b) -> [a] -> [a]--- uniqOn tag =--- map head--- . groupBy ((==) `on` tag)--- . sortBy (compare `on` tag)+prop_uniqOn1 :: (Integer -> Integer) -> [Integer] -> Bool+prop_uniqOn1 f xs' =+ or [ uniqOn f xs == nubBy ((==) `on` f) ys+ | ys <- permutations xs+ ]+ where+ xs = take 5 xs' -prop_uniqOn :: [Integer] -> Bool-prop_uniqOn xs = sort (nub xs) == uniqOn id xs+ permutations [] = [[]]+ permutations (x : xs) =+ [ ys1 ++ x : ys2+ | ys <- permutations xs+ , n <- [0..length ys]+ , let (ys1, ys2) = splitAt n ys+ ] +prop_uniqOn2 :: (Integer -> Integer) -> [Integer] -> Bool+prop_uniqOn2 f xs =+ sortBy (compare `on` f) (uniqOn f xs) == uniqOn f xs+ -- | Compute the common suffix of two lists. commonSuffix :: Eq a => [a] -> [a] -> [a] commonSuffix xs ys = reverse $ (commonPrefix `on` reverse) xs ys@@ -391,6 +439,37 @@ , isSuffixOf zs' (ys ++ zs) ] where zs' = commonSuffix (xs ++ zs) (ys ++ zs)++editDistanceSpec :: Eq a => [a] -> [a] -> Int+editDistanceSpec [] ys = length ys+editDistanceSpec xs [] = length xs+editDistanceSpec (x : xs) (y : ys)+ | x == y = editDistanceSpec xs ys+ | otherwise = 1 + minimum [ editDistanceSpec (x : xs) ys+ , editDistanceSpec xs (y : ys)+ , editDistanceSpec xs ys ]++editDistance :: Eq a => [a] -> [a] -> Int+editDistance xs ys = editD 0 0+ where xss = tails xs+ yss = tails ys+ tbl = Map.fromList [ ((i, j), editD' i j) | i <- [0..length xss - 1], j <- [0..length yss - 1] ]+ editD i j = tbl Map.! (i, j)+ editD' i j =+ case (xss !! i, yss !! j) of+ ([], ys) -> length ys+ (xs, []) -> length xs+ (x : xs, y : ys)+ | x == y -> editD (i + 1) (j + 1)+ | otherwise -> 1 + minimum [ editD (i + 1) j, editD i (j + 1), editD (i + 1) (j + 1) ]++prop_editDistance :: Property+prop_editDistance =+ forAllShrink (choose (0, 10)) shrink $ \ n ->+ forAllShrink (choose (0, 10)) shrink $ \ m ->+ forAllShrink (vector n) shrink $ \ xs ->+ forAllShrink (vector m) shrink $ \ ys ->+ editDistanceSpec xs ys == editDistance xs (ys :: [Integer]) -- Hack to make $quickCheckAll work under ghc-7.8 return []
src/full/Agda/Utils/ListT.hs view
@@ -1,9 +1,10 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE TupleSections #-}-{-# LANGUAGE UndecidableInstances #-} -- Due to limitations of funct.dep.+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE UndecidableInstances #-} -- Due to limitations of funct.dep. -- | @ListT@ done right, -- see https://www.haskell.org/haskellwiki/ListT_done_right_alternative@@ -15,17 +16,13 @@ module Agda.Utils.ListT where import Control.Applicative-import Control.Arrow import Control.Monad import Control.Monad.Reader import Control.Monad.State-import Control.Monad.Trans -import Data.Functor import Data.Monoid import Agda.Utils.Maybe-import Agda.Utils.Monad -- | Lazy monadic computation of a list of results. newtype ListT m a = ListT { runListT :: m (Maybe (a, ListT m a)) }@@ -104,6 +101,11 @@ mapMListT_alt f = runMListT . foldListT cons (return nilListT) where cons a ml = consMListT (f a) <$> ml +-- | Change from one monad to another+liftListT :: (Monad m, Monad m') => (forall a. m a -> m' a) -> ListT m a -> ListT m' a+liftListT lift xs = runMListT $ caseMaybeM (lift $ runListT xs) (return nilListT) $+ \(x,xs) -> return $ consListT x $ liftListT lift xs+ -- Instances instance Monad m => Monoid (ListT m a) where@@ -120,7 +122,7 @@ mplus = mappend instance (Functor m, Applicative m, Monad m) => Applicative (ListT m) where- pure = return+ pure = sgListT (<*>) = ap -- Another Applicative, but not the canonical one.@@ -130,7 +132,7 @@ -- loop _ _ = Nothing instance (Functor m, Applicative m, Monad m) => Monad (ListT m) where- return = sgListT+ return = pure l >>= k = concatListT $ k <$> l instance MonadTrans ListT where
src/full/Agda/Utils/ListT/Tests.hs view
@@ -8,13 +8,12 @@ import Control.Applicative -import Data.Functor import Data.Functor.Identity import Test.QuickCheck-import Test.QuickCheck.All -import Agda.Utils.Functor+import Text.Show.Functions+ import Agda.Utils.ListT -- * Identity monad instance of ListT (simply lists)
src/full/Agda/Utils/Map.hs view
@@ -18,7 +18,13 @@ data EitherOrBoth a b = L a | B a b | R b -- | Not very efficient (goes via a list), but it'll do.-unionWithM :: (Ord k, Functor m, Monad m) => (a -> a -> m a) -> Map k a -> Map k a -> m (Map k a)+unionWithM+#if __GLASGOW_HASKELL__ <= 708+ :: (Ord k, Functor m, Monad m)+#else+ :: (Ord k, Monad m)+#endif+ => (a -> a -> m a) -> Map k a -> Map k a -> m (Map k a) unionWithM f m1 m2 = fromList <$> mapM combine (toList m) where m = unionWith both (map L m1) (map R m2)@@ -46,7 +52,7 @@ allWithKey f = Map.foldrWithKey (\ k a b -> f k a && b) True -- | Filter a map based on the keys.-filterKeys :: Ord k => (k -> Bool) -> Map k a -> Map k a+filterKeys :: (k -> Bool) -> Map k a -> Map k a filterKeys p = filterWithKey (const . p) -- | Unzip a map.
src/full/Agda/Utils/Maybe/Strict.hs view
@@ -51,7 +51,7 @@ #if __GLASGOW_HASKELL__ >= 706 import GHC.Generics (Generic (..)) #endif-import Test.QuickCheck (Arbitrary (..))+import Test.QuickCheck (Arbitrary (..), CoArbitrary (..)) import Agda.Utils.Null @@ -78,11 +78,13 @@ empty = Nothing null = isNothing +-- The monoid instance was fixed in strict-base-types 0.5.0. See+-- Issue 1805. instance Monoid a => Monoid (Maybe a) where mempty = Nothing - Nothing `mappend` _ = Nothing- _ `mappend` Nothing = Nothing+ Nothing `mappend` m = m+ m `mappend` Nothing = m Just x1 `mappend` Just x2 = Just (x1 `mappend` x2) instance Foldable Maybe where@@ -104,6 +106,8 @@ arbitrary = toStrict <$> arbitrary shrink = map toStrict . shrink . toLazy +instance CoArbitrary a => CoArbitrary (Maybe a) where+ coarbitrary = coarbitrary . toLazy -- | Analogous to 'Lazy.listToMaybe' in "Data.Maybe". listToMaybe :: [a] -> Maybe a
+ src/full/Agda/Utils/Memo.hs view
@@ -0,0 +1,44 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE RankNTypes #-}++module Agda.Utils.Memo where++import Control.Applicative+import Control.Monad.State+import Agda.Utils.Lens++-- Simple memoisation in a state monad++-- | Simple, non-reentrant memoisation.+memo+#if __GLASGOW_HASKELL__ <= 708+ :: (Functor m, MonadState s m)+#else+ :: MonadState s m+#endif+ => Lens' (Maybe a) s -> m a -> m a+memo tbl compute = do+ mv <- use tbl+ case mv of+ Just x -> return x+ Nothing -> do+ x <- compute+ x <$ (tbl .= Just x)++-- | Recursive memoisation, second argument is the value you get+-- on recursive calls.+memoRec+#if __GLASGOW_HASKELL__ <= 708+ :: (Functor m, MonadState s m)+#else+ :: MonadState s m+#endif+ => Lens' (Maybe a) s -> a -> m a -> m a+memoRec tbl ih compute = do+ mv <- use tbl+ case mv of+ Just x -> return x+ Nothing -> do+ tbl .= Just ih+ x <- compute+ x <$ (tbl .= Just x)
src/full/Agda/Utils/Monad.hs view
@@ -21,7 +21,7 @@ import Data.Maybe import Agda.Utils.Except- ( Error(noMsg, strMsg)+ ( Error(strMsg) , MonadError(catchError, throwError) ) @@ -66,16 +66,22 @@ and2M :: Monad m => m Bool -> m Bool -> m Bool and2M ma mb = ifM ma mb (return False) -andM :: Monad m => [m Bool] -> m Bool+andM :: (Foldable f, Monad m) => f (m Bool) -> m Bool andM = Fold.foldl and2M (return True) +allM :: (Functor f, Foldable f, Monad m) => f a -> (a -> m Bool) -> m Bool+allM xs f = andM $ fmap f xs+ -- | Lazy monadic disjunction. or2M :: Monad m => m Bool -> m Bool -> m Bool or2M ma mb = ifM ma (return True) mb -orM :: Monad m => [m Bool] -> m Bool+orM :: (Foldable f, Monad m) => f (m Bool) -> m Bool orM = Fold.foldl or2M (return False) +anyM :: (Functor f, Foldable f, Monad m) => f a -> (a -> m Bool) -> m Bool+anyM xs f = orM $ fmap f xs+ -- | Lazy monadic disjunction with @Either@ truth values. altM1 :: Monad m => (a -> m (Either err b)) -> [a] -> m (Either err b) altM1 f [] = __IMPOSSIBLE__@@ -119,11 +125,23 @@ zipWithM' f xs ys = sequence (zipWith' f xs ys) -- | A monadic version of @'mapMaybe' :: (a -> Maybe b) -> [a] -> [b]@.-mapMaybeM :: (Monad m, Functor m) => (a -> m (Maybe b)) -> [a] -> m [b]+mapMaybeM+#if __GLASGOW_HASKELL__ <= 708+ :: (Functor m, Monad m)+#else+ :: Monad m+#endif+ => (a -> m (Maybe b)) -> [a] -> m [b] mapMaybeM f xs = catMaybes <$> Trav.mapM f xs -- | The @for@ version of 'mapMaybeM'.-forMaybeM :: (Monad m, Functor m) => [a] -> (a -> m (Maybe b)) -> m [b]+forMaybeM+#if __GLASGOW_HASKELL__ <= 708+ :: (Functor m, Monad m)+#else+ :: Monad m+#endif+ => [a] -> (a -> m (Maybe b)) -> m [b] forMaybeM = flip mapMaybeM -- | A monadic version of @'dropWhile' :: (a -> Bool) -> [a] -> [a]@.@@ -136,7 +154,7 @@ -- | Finally for the 'Error' class. Errors in the finally part take -- precedence over prior errors. -finally :: (Error e, MonadError e m) => m a -> m b -> m a+finally :: MonadError e m => m a -> m b -> m a first `finally` after = do r <- catchError (liftM Right first) (return . Left) _ <- after
src/full/Agda/Utils/Null.hs view
@@ -35,8 +35,6 @@ import Agda.Utils.Bag (Bag) import qualified Agda.Utils.Bag as Bag-import Agda.Utils.Functor-import Agda.Utils.Monad -- Andreas, 2015-06-24 orphan instance has to go here -- to be able to define instance Null Doc
+ src/full/Agda/Utils/Parser/MemoisedCPS.hs view
@@ -0,0 +1,208 @@+------------------------------------------------------------------------+-- | Parser combinators with support for left recursion, following+-- Johnson\'s \"Memoization in Top-Down Parsing\".+--+-- This implementation is based on an implementation due to Atkey+-- (attached to an edlambda-members mailing list message from+-- 2011-02-15 titled \'Slides for \"Introduction to Parser+-- Combinators\"\').+--+-- Note that non-memoised left recursion is not guaranteed to work.+--+-- The code contains an important deviation from Johnson\'s paper: the+-- check for subsumed results is not included. This means that one can+-- get the same result multiple times when parsing using ambiguous+-- grammars. As an example, parsing the empty string using @S ∷= ε |+-- ε@ succeeds twice. This change also means that parsing fails to+-- terminate for some cyclic grammars that would otherwise be handled+-- successfully, such as @S ∷= S | ε@. However, the library is not+-- intended to handle infinitely ambiguous grammars. (It is unclear to+-- the author of this module whether the change leads to more+-- non-termination for grammars that are not cyclic.)++{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}++#if __GLASGOW_HASKELL__ >= 710+{-# LANGUAGE FlexibleContexts #-}+#endif++module Agda.Utils.Parser.MemoisedCPS+ ( Parser+ , parse+ , token+ , tok+ , sat+ , chainl1+ , chainr1+ , memoise+ ) where++import Control.Applicative+import Control.Monad (ap, liftM2)+import Control.Monad.State.Strict (State, evalState, get)+import Data.Array+import Data.Hashable+import qualified Data.HashMap.Strict as Map+import Data.HashMap.Strict (HashMap)+import qualified Data.IntMap.Strict as IntMap+import Data.IntMap.Strict (IntMap)+import Data.List++import Agda.Utils.Monad (modify')++-- | Positions.++type Pos = Int++-- | State monad used by the parser.++type M k r tok b = State (IntMap (HashMap k (Value k r tok b)))++-- | Continuations.++type Cont k r tok b a = Pos -> a -> M k r tok b [b]++-- | Memoised values.++data Value k r tok b = Value+ { results :: !(IntMap [r])+ , continuations :: [Cont k r tok b r]+ }++-- | The parser type.+--+-- The parameters of the type @Parser k r tok a@ have the following+-- meanings:+--+-- [@k@] Type used for memoisation keys.+--+-- [@r@] The type of memoised values. (Yes, all memoised values have+-- to have the same type.)+--+-- [@tok@] The token type.+--+-- [@a@] The result type.++newtype Parser k r tok a =+ P { unP :: forall b.+ Array Pos tok ->+ Pos ->+ Cont k r tok b a ->+ M k r tok b [b]+ }++instance Monad (Parser k r tok) where+ return = pure+ P p >>= f = P $ \input i k ->+ p input i $ \j x -> unP (f x) input j k++instance Functor (Parser k r tok) where+ fmap f p = p >>= return . f++instance Applicative (Parser k r tok) where+ pure x = P $ \_ i k -> k i x+ (<*>) = ap++instance Alternative (Parser k r tok) where+ empty = P $ \_ _ _ -> return []+ P p1 <|> P p2 = P $ \input i k ->+ liftM2 (++) (p1 input i k) (p2 input i k)++-- | Runs the parser.++parse :: Parser k r tok a -> [tok] -> [a]+parse p toks =+ flip evalState IntMap.empty $+ unP p (listArray (0, n - 1) toks) 0 $ \j x ->+ if j == n then return [x] else return []+ where n = genericLength toks++-- | Parses a single token.++token :: Parser k r tok tok+token = P $ \input i k ->+ if inRange (bounds input) i then+ (k $! (i + 1)) $! (input ! i)+ else+ return []++-- | Parses a token satisfying the given predicate.++sat :: (tok -> Bool) -> Parser k r tok tok+sat p = do+ t <- token+ if p t then return t else empty++-- | Parses a given token.++tok :: Eq tok => tok -> Parser k r tok tok+tok t = sat (t ==)++-- | Parses one or more things, separated by separators.+--+-- Combines the results in a right-associative way.++chainr1+ :: Parser k r tok a+ -- ^ Parser for a thing.+ -> Parser k r tok (a -> a -> a)+ -- ^ Parser for a separator.+ -> Parser k r tok a+chainr1 p op = c+ where c = (\x f -> f x) <$> p <*>+ (pure id <|> flip <$> op <*> c)++-- | Parses one or more things, separated by separators.+--+-- Combines the results in a left-associative way.++chainl1+ :: Parser k r tok a+ -- ^ Parser for a thing.+ -> Parser k r tok (a -> a -> a)+ -- ^ Parser for a separator.+ -> Parser k r tok a+chainl1 p op = (\x f -> f x) <$> p <*> c+ where+ c = pure (\x -> x)+ <|> (\f y g x -> g (f x y)) <$> op <*> p <*> c++-- | Memoises the given parser.+--+-- Every memoised parser must be annotated with a /unique/ key.+-- (Parametrised parsers must use distinct keys for distinct inputs.)++memoise ::+ (Eq k, Hashable k) =>+ k -> Parser k r tok r -> Parser k r tok r+memoise key p = P $ \input i k -> do++ let alter j zero f m =+ IntMap.alter (Just . f . maybe zero id) j m++ lookupTable = fmap (\m -> Map.lookup key =<<+ IntMap.lookup i m) get+ insertTable v = modify' $ alter i Map.empty (Map.insert key v)++ v <- lookupTable+ case v of+ Nothing -> do+ insertTable (Value IntMap.empty [k])+ unP p input i $ \j r -> do+ Just (Value rs ks) <- lookupTable+ insertTable (Value (alter j [] (r :) rs) ks)+ concat <$> mapM (\k -> k j r) ks -- See note [Reverse ks?].+ Just (Value rs ks) -> do+ insertTable (Value rs (k : ks))+ concat . concat <$>+ mapM (\(i, rs) -> mapM (k i) rs) (IntMap.toList rs)++-- [Reverse ks?]+--+-- If ks were reversed, then the code would be productive for some+-- infinitely ambiguous grammars, including S ∷= S | ε. However, in+-- some cases the results would not be fair (some valid results would+-- never be returned).
+ src/full/Agda/Utils/Parser/ReadP.hs view
@@ -0,0 +1,523 @@+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE MagicHash #-}+{-# LANGUAGE Rank2Types #-}++-----------------------------------------------------------------------------+-- |++-- This is a modified version of the ReadP module from the standard libraries.+-- The changes are:++-- 1) ReadP is parameterised over the token type (hard-wired to 'Char' in the library).+-- 2) Added the functions 'parse' and 'parse'' which run parsers.+-- 3) Removed Read instances.++-- Module : "Text.ParserCombinators.ReadP"+-- Copyright : (c) The University of Glasgow 2002+-- License : BSD-style (see the file libraries/base/LICENSE)+--+-- Maintainer : libraries@haskell.org+-- Stability : provisional+-- Portability : non-portable (local universal quantification)+--+-- This is a library of parser combinators, originally written by Koen Claessen.+-- It parses all alternatives in parallel, so it never keeps hold of+-- the beginning of the input string, a common source of space leaks with+-- other parsers. The '(+++)' choice combinator is genuinely commutative;+-- it makes no difference which branch is \"shorter\".++-----------------------------------------------------------------------------++module Agda.Utils.Parser.ReadP+ (+ -- * The 'ReadP' type+ ReadP, -- :: * -> *; instance Functor, Monad, MonadPlus++ -- * Primitive operations+ get, -- :: ReadP Char+ look, -- :: ReadP String+ (+++), -- :: ReadP a -> ReadP a -> ReadP a+ (<++), -- :: ReadP a -> ReadP a -> ReadP a+ gather, -- :: ReadP a -> ReadP (String, a)++ -- * Parse+ parse, -- :: ReadP tok a -> [tok] -> [a]+ parse', -- :: ReadP tok a -> [tok] -> Either a [tok]++ -- * Other operations+ pfail, -- :: ReadP a+ satisfy, -- :: (Char -> Bool) -> ReadP Char+ char, -- :: Char -> ReadP Char+ string, -- :: String -> ReadP String+ munch, -- :: (Char -> Bool) -> ReadP String+ munch1, -- :: (Char -> Bool) -> ReadP String+ skipSpaces, -- :: ReadP ()+ choice, -- :: [ReadP a] -> ReadP a+ count, -- :: Int -> ReadP a -> ReadP [a]+ between, -- :: ReadP open -> ReadP close -> ReadP a -> ReadP a+ option, -- :: a -> ReadP a -> ReadP a+ optional, -- :: ReadP a -> ReadP ()+ many, -- :: ReadP a -> ReadP [a]+ many1, -- :: ReadP a -> ReadP [a]+ skipMany, -- :: ReadP a -> ReadP ()+ skipMany1, -- :: ReadP a -> ReadP ()+ sepBy, -- :: ReadP a -> ReadP sep -> ReadP [a]+ sepBy1, -- :: ReadP a -> ReadP sep -> ReadP [a]+ endBy, -- :: ReadP a -> ReadP sep -> ReadP [a]+ endBy1, -- :: ReadP a -> ReadP sep -> ReadP [a]+ chainr, -- :: ReadP a -> ReadP (a -> a -> a) -> a -> ReadP a+ chainl, -- :: ReadP a -> ReadP (a -> a -> a) -> a -> ReadP a+ chainl1, -- :: ReadP a -> ReadP (a -> a -> a) -> ReadP a+ chainr1, -- :: ReadP a -> ReadP (a -> a -> a) -> ReadP a+ manyTill, -- :: ReadP a -> ReadP end -> ReadP [a]++ -- * Properties+ -- $properties+ )+ where++import Control.Applicative (Applicative(..),Alternative(empty,(<|>)))+import Control.Monad+import GHC.Exts+import Data.Char++infixr 5 +++, <++++-- ---------------------------------------------------------------------------+-- The P type+-- is representation type -- should be kept abstract++data P t a+ = Get (t -> P t a)+ | Look ([t] -> P t a)+ | Fail+ | Result a (P t a)+ | Final [(a,[t])] -- invariant: list is non-empty!+ deriving (Functor)++-- Monad, MonadPlus++instance Applicative (P t) where+ pure x = Result x Fail+ (<*>) = ap++instance Monad (P t) where+ return = pure++ (Get f) >>= k = Get (\c -> f c >>= k)+ (Look f) >>= k = Look (\s -> f s >>= k)+ Fail >>= k = Fail+ (Result x p) >>= k = k x `mplus` (p >>= k)+ (Final r) >>= k = final [ys' | (x,s) <- r, ys' <- run (k x) s]++ fail _ = Fail++instance Alternative (P t) where+ empty = mzero+ (<|>) = mplus++instance MonadPlus (P t) where+ mzero = Fail++ -- most common case: two gets are combined+ Get f1 `mplus` Get f2 = Get (\c -> f1 c `mplus` f2 c)++ -- results are delivered as soon as possible+ Result x p `mplus` q = Result x (p `mplus` q)+ p `mplus` Result x q = Result x (p `mplus` q)++ -- fail disappears+ Fail `mplus` p = p+ p `mplus` Fail = p++ -- two finals are combined+ -- final + look becomes one look and one final (=optimization)+ -- final + sthg else becomes one look and one final+ Final r `mplus` Final t = Final (r ++ t)+ Final r `mplus` Look f = Look (\s -> Final (r ++ run (f s) s))+ Final r `mplus` p = Look (\s -> Final (r ++ run p s))+ Look f `mplus` Final r = Look (\s -> Final (run (f s) s ++ r))+ p `mplus` Final r = Look (\s -> Final (run p s ++ r))++ -- two looks are combined (=optimization)+ -- look + sthg else floats upwards+ Look f `mplus` Look g = Look (\s -> f s `mplus` g s)+ Look f `mplus` p = Look (\s -> f s `mplus` p)+ p `mplus` Look f = Look (\s -> p `mplus` f s)++-- ---------------------------------------------------------------------------+-- The ReadP type++newtype ReadP t a = R (forall b . (a -> P t b) -> P t b)++-- Functor, Monad, MonadPlus++instance Functor (ReadP t) where+ fmap h (R f) = R (\k -> f (k . h))++instance Applicative (ReadP t) where+ pure x = R (\k -> k x)+ (<*>) = ap++instance Monad (ReadP t) where+ return = pure+ fail _ = R (\_ -> Fail)+ R m >>= f = R (\k -> m (\a -> let R m' = f a in m' k))++instance Alternative (ReadP t) where+ empty = mzero+ (<|>) = mplus++instance MonadPlus (ReadP t) where+ mzero = pfail+ mplus = (+++)++-- ---------------------------------------------------------------------------+-- Operations over P++final :: [(a,[t])] -> P t a+-- Maintains invariant for Final constructor+final [] = Fail+final r = Final r++run :: P t a -> [t] -> [(a,[t])]+run (Get f) (c:s) = run (f c) s+run (Look f) s = run (f s) s+run (Result x p) s = (x,s) : run p s+run (Final r) _ = r+run _ _ = []++-- ---------------------------------------------------------------------------+-- Operations over ReadP++-- | Run a parser on a list of tokens. Returns the list of complete matches.+parse :: ReadP t a -> [t] -> [a]+parse p ts = case complete p of+ R f -> map fst $ run (f return) ts++get :: ReadP t t+-- ^ Consumes and returns the next character.+-- Fails if there is no input left.+get = R Get++look :: ReadP t [t]+-- ^ Look-ahead: returns the part of the input that is left, without+-- consuming it.+look = R Look++pfail :: ReadP t a+-- ^ Always fails.+pfail = R (\_ -> Fail)++(+++) :: ReadP t a -> ReadP t a -> ReadP t a+-- ^ Symmetric choice.+R f1 +++ R f2 = R (\k -> f1 k `mplus` f2 k)++(<++) :: ReadP t a -> ReadP t a -> ReadP t a+-- ^ Local, exclusive, left-biased choice: If left parser+-- locally produces any result at all, then right parser is+-- not used.+R f <++ q =+ do s <- look+ probe (f return) s 0#+ where+ probe (Get f) (c:s) n = probe (f c) s (n+#1#)+ probe (Look f) s n = probe (f s) s n+ probe p@(Result _ _) _ n = discard n >> R (p >>=)+ probe (Final r) _ _ = R (Final r >>=)+ probe _ _ _ = q++ discard 0# = return ()+ discard n = get >> discard (n-#1#)++gather :: ReadP t a -> ReadP t ([t], a)+-- ^ Transforms a parser into one that does the same, but+-- in addition returns the exact characters read.+-- IMPORTANT NOTE: 'gather' gives a runtime error if its first argument+-- is built using any occurrences of readS_to_P.+gather (R m) =+ R (\k -> gath id (m (\a -> return (\s -> k (s,a)))))+ where+ gath l (Get f) = Get (\c -> gath (l.(c:)) (f c))+ gath l Fail = Fail+ gath l (Look f) = Look (\s -> gath l (f s))+ gath l (Result k p) = k (l []) `mplus` gath l p+ gath l (Final r) = error "do not use readS_to_P in gather!"++-- ---------------------------------------------------------------------------+-- Derived operations++satisfy :: (t -> Bool) -> ReadP t t+-- ^ Consumes and returns the next character, if it satisfies the+-- specified predicate.+satisfy p = do c <- get; if p c then return c else pfail++char :: Eq t => t-> ReadP t t+-- ^ Parses and returns the specified character.+char c = satisfy (c ==)++string :: Eq t => [t] -> ReadP t [t]+-- ^ Parses and returns the specified string.+string this = do s <- look; scan this s+ where+ scan [] _ = do return this+ scan (x:xs) (y:ys) | x == y = do _ <- get; scan xs ys+ scan _ _ = do pfail++eof :: ReadP tok ()+eof = do+ ts <- look+ unless (null ts) pfail++complete :: ReadP tok a -> ReadP tok a+complete p = do+ x <- p+ eof+ return x++munch :: (t -> Bool) -> ReadP t [t]+-- ^ Parses the first zero or more characters satisfying the predicate.+munch p =+ do s <- look+ scan s+ where+ scan (c:cs) | p c = do _ <- get; s <- scan cs; return (c:s)+ scan _ = do return []++munch1 :: (t -> Bool) -> ReadP t [t]+-- ^ Parses the first one or more characters satisfying the predicate.+munch1 p =+ do c <- get+ if p c then do s <- munch p; return (c:s) else pfail++choice :: [ReadP t a] -> ReadP t a+-- ^ Combines all parsers in the specified list.+choice [] = pfail+choice [p] = p+choice (p:ps) = p +++ choice ps++skipSpaces :: ReadP Char ()+-- ^ Skips all whitespace.+skipSpaces =+ do s <- look+ skip s+ where+ skip (c:s) | isSpace c = do _ <- get; skip s+ skip _ = do return ()++count :: Int -> ReadP t a -> ReadP t [a]+-- ^ @count n p@ parses @n@ occurrences of @p@ in sequence. A list of+-- results is returned.+count n p = sequence (replicate n p)++between :: ReadP t open -> ReadP t close -> ReadP t a -> ReadP t a+-- ^ @between open close p@ parses @open@, followed by @p@ and finally+-- @close@. Only the value of @p@ is returned.+between open close p = do+ _ <- open+ x <- p+ _ <- close+ return x++option :: a -> ReadP t a -> ReadP t a+-- ^ @option x p@ will either parse @p@ or return @x@ without consuming+-- any input.+option x p = p +++ return x++optional :: ReadP t a -> ReadP t ()+-- ^ @optional p@ optionally parses @p@ and always returns @()@.+optional p = (p >> return ()) +++ return ()++many :: ReadP t a -> ReadP t [a]+-- ^ Parses zero or more occurrences of the given parser.+many p = return [] +++ many1 p++many1 :: ReadP t a -> ReadP t [a]+-- ^ Parses one or more occurrences of the given parser.+many1 p = liftM2 (:) p (many p)++skipMany :: ReadP t a -> ReadP t ()+-- ^ Like 'many', but discards the result.+skipMany p = many p >> return ()++skipMany1 :: ReadP t a -> ReadP t ()+-- ^ Like 'many1', but discards the result.+skipMany1 p = p >> skipMany p++sepBy :: ReadP t a -> ReadP t sep -> ReadP t [a]+-- ^ @sepBy p sep@ parses zero or more occurrences of @p@, separated by @sep@.+-- Returns a list of values returned by @p@.+sepBy p sep = sepBy1 p sep +++ return []++sepBy1 :: ReadP t a -> ReadP t sep -> ReadP t [a]+-- ^ @sepBy1 p sep@ parses one or more occurrences of @p@, separated by @sep@.+-- Returns a list of values returned by @p@.+sepBy1 p sep = liftM2 (:) p (many (sep >> p))++endBy :: ReadP t a -> ReadP t sep -> ReadP t [a]+-- ^ @endBy p sep@ parses zero or more occurrences of @p@, separated and ended+-- by @sep@.+endBy p sep = many (do x <- p ; _ <- sep ; return x)++endBy1 :: ReadP t a -> ReadP t sep -> ReadP t [a]+-- ^ @endBy p sep@ parses one or more occurrences of @p@, separated and ended+-- by @sep@.+endBy1 p sep = many1 (do x <- p ; _ <- sep ; return x)++chainr :: ReadP t a -> ReadP t (a -> a -> a) -> a -> ReadP t a+-- ^ @chainr p op x@ parses zero or more occurrences of @p@, separated by @op@.+-- Returns a value produced by a /right/ associative application of all+-- functions returned by @op@. If there are no occurrences of @p@, @x@ is+-- returned.+chainr p op x = chainr1 p op +++ return x++chainl :: ReadP t a -> ReadP t (a -> a -> a) -> a -> ReadP t a+-- ^ @chainl p op x@ parses zero or more occurrences of @p@, separated by @op@.+-- Returns a value produced by a /left/ associative application of all+-- functions returned by @op@. If there are no occurrences of @p@, @x@ is+-- returned.+chainl p op x = chainl1 p op +++ return x++chainr1 :: ReadP t a -> ReadP t (a -> a -> a) -> ReadP t a+-- ^ Like 'chainr', but parses one or more occurrences of @p@.+chainr1 p op = scan+ where scan = p >>= rest+ rest x = do f <- op+ y <- scan+ return (f x y)+ +++ return x++chainl1 :: ReadP t a -> ReadP t (a -> a -> a) -> ReadP t a+-- ^ Like 'chainl', but parses one or more occurrences of @p@.+chainl1 p op = p >>= rest+ where rest x = do f <- op+ y <- p+ rest (f x y)+ +++ return x++manyTill :: ReadP t a -> ReadP t end -> ReadP t [a]+-- ^ @manyTill p end@ parses zero or more occurrences of @p@, until @end@+-- succeeds. Returns a list of values returned by @p@.+manyTill p end = scan+ where scan = (end >> return []) <++ (liftM2 (:) p scan)++-- ---------------------------------------------------------------------------+-- Converting between ReadP and Read++readP_to_S :: ReadP Char a -> ReadS a+-- ^ Converts a parser into a Haskell ReadS-style function.+-- This is the main way in which you can \"run\" a 'ReadP' parser:+-- the expanded type is+-- @ readP_to_S :: ReadP a -> String -> [(a,String)] @+readP_to_S (R f) = run (f return)++readS_to_P :: ReadS a -> ReadP Char a+-- ^ Converts a Haskell ReadS-style function into a parser.+-- Warning: This introduces local backtracking in the resulting+-- parser, and therefore a possible inefficiency.+readS_to_P r =+ R (\k -> Look (\s -> final [bs'' | (a,s') <- r s, bs'' <- run (k a) s']))++-- ---------------------------------------------------------------------------+-- A variant on parse which returns either a result, or the unparseable text.++run' :: P t a -> [t] -> Either a [t]+run' (Get f) (c:s) = run' (f c) s+run' (Look f) s = run' (f s) s+run' (Result x _) _ = Left x+run' (Final ((x,_):_)) _ = Left x+run' _ s = Right s++parse' :: ReadP t a -> [t] -> Either a [t]+parse' p ts = case complete p of+ R f -> run' (f return) ts++-- ---------------------------------------------------------------------------+-- QuickCheck properties that hold for the combinators++{- $properties+The following are QuickCheck specifications of what the combinators do.+These can be seen as formal specifications of the behavior of the+combinators.++We use bags to give semantics to the combinators.++> type Bag a = [a]++Equality on bags does not care about the order of elements.++> (=~) :: Ord a => Bag a -> Bag a -> Bool+> xs =~ ys = sort xs == sort ys++A special equality operator to avoid unresolved overloading+when testing the properties.++> (=~.) :: Bag (Int,String) -> Bag (Int,String) -> Bool+> (=~.) = (=~)++Here follow the properties:++> prop_Get_Nil =+> readP_to_S get [] =~ []+>+> prop_Get_Cons c s =+> readP_to_S get (c:s) =~ [(c,s)]+>+> prop_Look s =+> readP_to_S look s =~ [(s,s)]+>+> prop_Fail s =+> readP_to_S pfail s =~. []+>+> prop_Return x s =+> readP_to_S (return x) s =~. [(x,s)]+>+> prop_Bind p k s =+> readP_to_S (p >>= k) s =~.+> [ ys''+> | (x,s') <- readP_to_S p s+> , ys'' <- readP_to_S (k (x::Int)) s'+> ]+>+> prop_Plus p q s =+> readP_to_S (p +++ q) s =~.+> (readP_to_S p s ++ readP_to_S q s)+>+> prop_LeftPlus p q s =+> readP_to_S (p <++ q) s =~.+> (readP_to_S p s +<+ readP_to_S q s)+> where+> [] +<+ ys = ys+> xs +<+ _ = xs+>+> prop_Gather s =+> forAll readPWithoutReadS $ \p ->+> readP_to_S (gather p) s =~+> [ ((pre,x::Int),s')+> | (x,s') <- readP_to_S p s+> , let pre = take (length s - length s') s+> ]+>+> prop_String_Yes this s =+> readP_to_S (string this) (this ++ s) =~+> [(this,s)]+>+> prop_String_Maybe this s =+> readP_to_S (string this) s =~+> [(this, drop (length this) s) | this `isPrefixOf` s]+>+> prop_Munch p s =+> readP_to_S (munch p) s =~+> [(takeWhile p s, dropWhile p s)]+>+> prop_Munch1 p s =+> readP_to_S (munch1 p) s =~+> [(res,s') | let (res,s') = (takeWhile p s, dropWhile p s), not (null res)]+>+> prop_Choice ps s =+> readP_to_S (choice ps) s =~.+> readP_to_S (foldr (+++) pfail ps) s+>+> prop_ReadS r s =+> readP_to_S (readS_to_P r) s =~. r s+-}
src/full/Agda/Utils/PartialOrd.hs view
@@ -15,7 +15,6 @@ import Test.QuickCheck.All -- import Agda.Utils.List-import Agda.Utils.SemiRing import Agda.Utils.TestHelpers import Agda.Utils.QuickCheck
src/full/Agda/Utils/Permutation.hs view
@@ -1,11 +1,11 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE DeriveFoldable #-}-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TupleSections #-} module Agda.Utils.Permutation where @@ -16,6 +16,7 @@ import Data.List hiding (drop, null) import qualified Data.List as List import Data.Maybe+import Data.Array import Data.Foldable (Foldable) import Data.Traversable (Traversable)@@ -148,9 +149,8 @@ -- otherwise defaults to @err@. -- @composeP p (invertP err p) == p@ invertP :: Int -> Permutation -> Permutation-invertP err p@(Perm n xs) = Perm (size xs) $ map inv [0..n - 1]- where- inv x = fromMaybe err (findIndex (x ==) xs)+invertP err p@(Perm n xs) = Perm (size xs) $ elems tmpArray+ where tmpArray = accumArray (flip const) err (0, n-1) $ zip xs [0..] -- | Turn a possible non-surjective permutation into a surjective permutation. compactP :: Permutation -> Permutation
src/full/Agda/Utils/Permutation/Tests.hs view
@@ -14,7 +14,6 @@ import Data.Maybe import Test.QuickCheck-import Test.QuickCheck.All import Agda.Utils.List (downFrom) import Agda.Utils.Permutation@@ -36,11 +35,10 @@ type A = Int -- | Extend a list by indefinitely many elements.-withStream :: Testable b- => ([a] -> b) -- ^ Stream function.- -> [a] -- ^ Initial segment.- -> a -- ^ Default element, appended ad infinitum.- -> b+withStream :: ([a] -> b) -- ^ Stream function.+ -> [a] -- ^ Initial segment.+ -> a -- ^ Default element, appended ad infinitum.+ -> b withStream k as a = k $ as ++ repeat a -- | Apply a permutation to a list which might be too short.
src/full/Agda/Utils/Pointer.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE BangPatterns #-} {-# LANGUAGE DeriveDataTypeable #-} module Agda.Utils.Pointer@@ -44,7 +45,7 @@ updatePtr f p = unsafePerformIO $ p <$ modifyIORef (ptrRef p) f setPtr :: a -> Ptr a -> Ptr a-setPtr x = updatePtr (const x)+setPtr !x = updatePtr (const x) -- | If @f a@ contains many copies of @a@ they will all be the same pointer in -- the result. If the function is well-behaved (i.e. preserves the implicit
src/full/Agda/Utils/Pretty.hs view
@@ -8,13 +8,9 @@ , module Text.PrettyPrint ) where -import Data.Function import Data.Int ( Int32 )-import Data.Monoid import Text.PrettyPrint hiding (TextDetails(Str), empty)--import Agda.Utils.Null -- * Pretty class
src/full/Agda/Utils/QuickCheck.hs view
@@ -4,7 +4,6 @@ ) where import Test.QuickCheck hiding ((===))-import Test.QuickCheck.Property (Property(..)) isSuccess :: Result -> Bool isSuccess Success{} = True
− src/full/Agda/Utils/ReadP.hs
@@ -1,523 +0,0 @@-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE MagicHash #-}-{-# LANGUAGE Rank2Types #-}---------------------------------------------------------------------------------- |---- This is a modified version of the ReadP module from the standard libraries.--- The changes are:---- 1) ReadP is parameterised over the token type (hard-wired to 'Char' in the library).--- 2) Added the functions 'parse' and 'parse'' which run parsers.--- 3) Removed Read instances.---- Module : "Text.ParserCombinators.ReadP"--- Copyright : (c) The University of Glasgow 2002--- License : BSD-style (see the file libraries/base/LICENSE)------ Maintainer : libraries@haskell.org--- Stability : provisional--- Portability : non-portable (local universal quantification)------ This is a library of parser combinators, originally written by Koen Claessen.--- It parses all alternatives in parallel, so it never keeps hold of--- the beginning of the input string, a common source of space leaks with--- other parsers. The '(+++)' choice combinator is genuinely commutative;--- it makes no difference which branch is \"shorter\".---------------------------------------------------------------------------------module Agda.Utils.ReadP- (- -- * The 'ReadP' type- ReadP, -- :: * -> *; instance Functor, Monad, MonadPlus-- -- * Primitive operations- get, -- :: ReadP Char- look, -- :: ReadP String- (+++), -- :: ReadP a -> ReadP a -> ReadP a- (<++), -- :: ReadP a -> ReadP a -> ReadP a- gather, -- :: ReadP a -> ReadP (String, a)-- -- * Parse- parse, -- :: ReadP tok a -> [tok] -> [a]- parse', -- :: ReadP tok a -> [tok] -> Either a [tok]-- -- * Other operations- pfail, -- :: ReadP a- satisfy, -- :: (Char -> Bool) -> ReadP Char- char, -- :: Char -> ReadP Char- string, -- :: String -> ReadP String- munch, -- :: (Char -> Bool) -> ReadP String- munch1, -- :: (Char -> Bool) -> ReadP String- skipSpaces, -- :: ReadP ()- choice, -- :: [ReadP a] -> ReadP a- count, -- :: Int -> ReadP a -> ReadP [a]- between, -- :: ReadP open -> ReadP close -> ReadP a -> ReadP a- option, -- :: a -> ReadP a -> ReadP a- optional, -- :: ReadP a -> ReadP ()- many, -- :: ReadP a -> ReadP [a]- many1, -- :: ReadP a -> ReadP [a]- skipMany, -- :: ReadP a -> ReadP ()- skipMany1, -- :: ReadP a -> ReadP ()- sepBy, -- :: ReadP a -> ReadP sep -> ReadP [a]- sepBy1, -- :: ReadP a -> ReadP sep -> ReadP [a]- endBy, -- :: ReadP a -> ReadP sep -> ReadP [a]- endBy1, -- :: ReadP a -> ReadP sep -> ReadP [a]- chainr, -- :: ReadP a -> ReadP (a -> a -> a) -> a -> ReadP a- chainl, -- :: ReadP a -> ReadP (a -> a -> a) -> a -> ReadP a- chainl1, -- :: ReadP a -> ReadP (a -> a -> a) -> ReadP a- chainr1, -- :: ReadP a -> ReadP (a -> a -> a) -> ReadP a- manyTill, -- :: ReadP a -> ReadP end -> ReadP [a]-- -- * Properties- -- $properties- )- where--import Control.Applicative (Applicative(..),Alternative(empty,(<|>)))-import Control.Monad-import GHC.Exts-import Data.Char--infixr 5 +++, <++---- ------------------------------------------------------------------------------ The P type--- is representation type -- should be kept abstract--data P t a- = Get (t -> P t a)- | Look ([t] -> P t a)- | Fail- | Result a (P t a)- | Final [(a,[t])] -- invariant: list is non-empty!- deriving (Functor)---- Monad, MonadPlus--instance Applicative (P t) where- pure = return- (<*>) = ap--instance Monad (P t) where- return x = Result x Fail-- (Get f) >>= k = Get (\c -> f c >>= k)- (Look f) >>= k = Look (\s -> f s >>= k)- Fail >>= k = Fail- (Result x p) >>= k = k x `mplus` (p >>= k)- (Final r) >>= k = final [ys' | (x,s) <- r, ys' <- run (k x) s]-- fail _ = Fail--instance Alternative (P t) where- empty = mzero- (<|>) = mplus--instance MonadPlus (P t) where- mzero = Fail-- -- most common case: two gets are combined- Get f1 `mplus` Get f2 = Get (\c -> f1 c `mplus` f2 c)-- -- results are delivered as soon as possible- Result x p `mplus` q = Result x (p `mplus` q)- p `mplus` Result x q = Result x (p `mplus` q)-- -- fail disappears- Fail `mplus` p = p- p `mplus` Fail = p-- -- two finals are combined- -- final + look becomes one look and one final (=optimization)- -- final + sthg else becomes one look and one final- Final r `mplus` Final t = Final (r ++ t)- Final r `mplus` Look f = Look (\s -> Final (r ++ run (f s) s))- Final r `mplus` p = Look (\s -> Final (r ++ run p s))- Look f `mplus` Final r = Look (\s -> Final (run (f s) s ++ r))- p `mplus` Final r = Look (\s -> Final (run p s ++ r))-- -- two looks are combined (=optimization)- -- look + sthg else floats upwards- Look f `mplus` Look g = Look (\s -> f s `mplus` g s)- Look f `mplus` p = Look (\s -> f s `mplus` p)- p `mplus` Look f = Look (\s -> p `mplus` f s)---- ------------------------------------------------------------------------------ The ReadP type--newtype ReadP t a = R (forall b . (a -> P t b) -> P t b)---- Functor, Monad, MonadPlus--instance Functor (ReadP t) where- fmap h (R f) = R (\k -> f (k . h))--instance Applicative (ReadP t) where- pure = return- (<*>) = ap--instance Monad (ReadP t) where- return x = R (\k -> k x)- fail _ = R (\_ -> Fail)- R m >>= f = R (\k -> m (\a -> let R m' = f a in m' k))--instance Alternative (ReadP t) where- empty = mzero- (<|>) = mplus--instance MonadPlus (ReadP t) where- mzero = pfail- mplus = (+++)---- ------------------------------------------------------------------------------ Operations over P--final :: [(a,[t])] -> P t a--- Maintains invariant for Final constructor-final [] = Fail-final r = Final r--run :: P t a -> [t] -> [(a,[t])]-run (Get f) (c:s) = run (f c) s-run (Look f) s = run (f s) s-run (Result x p) s = (x,s) : run p s-run (Final r) _ = r-run _ _ = []---- ------------------------------------------------------------------------------ Operations over ReadP---- | Run a parser on a list of tokens. Returns the list of complete matches.-parse :: ReadP t a -> [t] -> [a]-parse p ts = case complete p of- R f -> map fst $ run (f return) ts--get :: ReadP t t--- ^ Consumes and returns the next character.--- Fails if there is no input left.-get = R Get--look :: ReadP t [t]--- ^ Look-ahead: returns the part of the input that is left, without--- consuming it.-look = R Look--pfail :: ReadP t a--- ^ Always fails.-pfail = R (\_ -> Fail)--(+++) :: ReadP t a -> ReadP t a -> ReadP t a--- ^ Symmetric choice.-R f1 +++ R f2 = R (\k -> f1 k `mplus` f2 k)--(<++) :: ReadP t a -> ReadP t a -> ReadP t a--- ^ Local, exclusive, left-biased choice: If left parser--- locally produces any result at all, then right parser is--- not used.-R f <++ q =- do s <- look- probe (f return) s 0#- where- probe (Get f) (c:s) n = probe (f c) s (n+#1#)- probe (Look f) s n = probe (f s) s n- probe p@(Result _ _) _ n = discard n >> R (p >>=)- probe (Final r) _ _ = R (Final r >>=)- probe _ _ _ = q-- discard 0# = return ()- discard n = get >> discard (n-#1#)--gather :: ReadP t a -> ReadP t ([t], a)--- ^ Transforms a parser into one that does the same, but--- in addition returns the exact characters read.--- IMPORTANT NOTE: 'gather' gives a runtime error if its first argument--- is built using any occurrences of readS_to_P.-gather (R m) =- R (\k -> gath id (m (\a -> return (\s -> k (s,a)))))- where- gath l (Get f) = Get (\c -> gath (l.(c:)) (f c))- gath l Fail = Fail- gath l (Look f) = Look (\s -> gath l (f s))- gath l (Result k p) = k (l []) `mplus` gath l p- gath l (Final r) = error "do not use readS_to_P in gather!"---- ------------------------------------------------------------------------------ Derived operations--satisfy :: (t -> Bool) -> ReadP t t--- ^ Consumes and returns the next character, if it satisfies the--- specified predicate.-satisfy p = do c <- get; if p c then return c else pfail--char :: Eq t => t-> ReadP t t--- ^ Parses and returns the specified character.-char c = satisfy (c ==)--string :: Eq t => [t] -> ReadP t [t]--- ^ Parses and returns the specified string.-string this = do s <- look; scan this s- where- scan [] _ = do return this- scan (x:xs) (y:ys) | x == y = do _ <- get; scan xs ys- scan _ _ = do pfail--eof :: ReadP tok ()-eof = do- ts <- look- unless (null ts) pfail--complete :: ReadP tok a -> ReadP tok a-complete p = do- x <- p- eof- return x--munch :: (t -> Bool) -> ReadP t [t]--- ^ Parses the first zero or more characters satisfying the predicate.-munch p =- do s <- look- scan s- where- scan (c:cs) | p c = do _ <- get; s <- scan cs; return (c:s)- scan _ = do return []--munch1 :: (t -> Bool) -> ReadP t [t]--- ^ Parses the first one or more characters satisfying the predicate.-munch1 p =- do c <- get- if p c then do s <- munch p; return (c:s) else pfail--choice :: [ReadP t a] -> ReadP t a--- ^ Combines all parsers in the specified list.-choice [] = pfail-choice [p] = p-choice (p:ps) = p +++ choice ps--skipSpaces :: ReadP Char ()--- ^ Skips all whitespace.-skipSpaces =- do s <- look- skip s- where- skip (c:s) | isSpace c = do _ <- get; skip s- skip _ = do return ()--count :: Int -> ReadP t a -> ReadP t [a]--- ^ @count n p@ parses @n@ occurrences of @p@ in sequence. A list of--- results is returned.-count n p = sequence (replicate n p)--between :: ReadP t open -> ReadP t close -> ReadP t a -> ReadP t a--- ^ @between open close p@ parses @open@, followed by @p@ and finally--- @close@. Only the value of @p@ is returned.-between open close p = do- _ <- open- x <- p- _ <- close- return x--option :: a -> ReadP t a -> ReadP t a--- ^ @option x p@ will either parse @p@ or return @x@ without consuming--- any input.-option x p = p +++ return x--optional :: ReadP t a -> ReadP t ()--- ^ @optional p@ optionally parses @p@ and always returns @()@.-optional p = (p >> return ()) +++ return ()--many :: ReadP t a -> ReadP t [a]--- ^ Parses zero or more occurrences of the given parser.-many p = return [] +++ many1 p--many1 :: ReadP t a -> ReadP t [a]--- ^ Parses one or more occurrences of the given parser.-many1 p = liftM2 (:) p (many p)--skipMany :: ReadP t a -> ReadP t ()--- ^ Like 'many', but discards the result.-skipMany p = many p >> return ()--skipMany1 :: ReadP t a -> ReadP t ()--- ^ Like 'many1', but discards the result.-skipMany1 p = p >> skipMany p--sepBy :: ReadP t a -> ReadP t sep -> ReadP t [a]--- ^ @sepBy p sep@ parses zero or more occurrences of @p@, separated by @sep@.--- Returns a list of values returned by @p@.-sepBy p sep = sepBy1 p sep +++ return []--sepBy1 :: ReadP t a -> ReadP t sep -> ReadP t [a]--- ^ @sepBy1 p sep@ parses one or more occurrences of @p@, separated by @sep@.--- Returns a list of values returned by @p@.-sepBy1 p sep = liftM2 (:) p (many (sep >> p))--endBy :: ReadP t a -> ReadP t sep -> ReadP t [a]--- ^ @endBy p sep@ parses zero or more occurrences of @p@, separated and ended--- by @sep@.-endBy p sep = many (do x <- p ; _ <- sep ; return x)--endBy1 :: ReadP t a -> ReadP t sep -> ReadP t [a]--- ^ @endBy p sep@ parses one or more occurrences of @p@, separated and ended--- by @sep@.-endBy1 p sep = many1 (do x <- p ; _ <- sep ; return x)--chainr :: ReadP t a -> ReadP t (a -> a -> a) -> a -> ReadP t a--- ^ @chainr p op x@ parses zero or more occurrences of @p@, separated by @op@.--- Returns a value produced by a /right/ associative application of all--- functions returned by @op@. If there are no occurrences of @p@, @x@ is--- returned.-chainr p op x = chainr1 p op +++ return x--chainl :: ReadP t a -> ReadP t (a -> a -> a) -> a -> ReadP t a--- ^ @chainl p op x@ parses zero or more occurrences of @p@, separated by @op@.--- Returns a value produced by a /left/ associative application of all--- functions returned by @op@. If there are no occurrences of @p@, @x@ is--- returned.-chainl p op x = chainl1 p op +++ return x--chainr1 :: ReadP t a -> ReadP t (a -> a -> a) -> ReadP t a--- ^ Like 'chainr', but parses one or more occurrences of @p@.-chainr1 p op = scan- where scan = p >>= rest- rest x = do f <- op- y <- scan- return (f x y)- +++ return x--chainl1 :: ReadP t a -> ReadP t (a -> a -> a) -> ReadP t a--- ^ Like 'chainl', but parses one or more occurrences of @p@.-chainl1 p op = p >>= rest- where rest x = do f <- op- y <- p- rest (f x y)- +++ return x--manyTill :: ReadP t a -> ReadP t end -> ReadP t [a]--- ^ @manyTill p end@ parses zero or more occurrences of @p@, until @end@--- succeeds. Returns a list of values returned by @p@.-manyTill p end = scan- where scan = (end >> return []) <++ (liftM2 (:) p scan)---- ------------------------------------------------------------------------------ Converting between ReadP and Read--readP_to_S :: ReadP Char a -> ReadS a--- ^ Converts a parser into a Haskell ReadS-style function.--- This is the main way in which you can \"run\" a 'ReadP' parser:--- the expanded type is--- @ readP_to_S :: ReadP a -> String -> [(a,String)] @-readP_to_S (R f) = run (f return)--readS_to_P :: ReadS a -> ReadP Char a--- ^ Converts a Haskell ReadS-style function into a parser.--- Warning: This introduces local backtracking in the resulting--- parser, and therefore a possible inefficiency.-readS_to_P r =- R (\k -> Look (\s -> final [bs'' | (a,s') <- r s, bs'' <- run (k a) s']))---- ------------------------------------------------------------------------------ A variant on parse which returns either a result, or the unparseable text.--run' :: P t a -> [t] -> Either a [t]-run' (Get f) (c:s) = run' (f c) s-run' (Look f) s = run' (f s) s-run' (Result x _) _ = Left x-run' (Final ((x,_):_)) _ = Left x-run' _ s = Right s--parse' :: ReadP t a -> [t] -> Either a [t]-parse' p ts = case complete p of- R f -> run' (f return) ts---- ------------------------------------------------------------------------------ QuickCheck properties that hold for the combinators--{- $properties-The following are QuickCheck specifications of what the combinators do.-These can be seen as formal specifications of the behavior of the-combinators.--We use bags to give semantics to the combinators.--> type Bag a = [a]--Equality on bags does not care about the order of elements.--> (=~) :: Ord a => Bag a -> Bag a -> Bool-> xs =~ ys = sort xs == sort ys--A special equality operator to avoid unresolved overloading-when testing the properties.--> (=~.) :: Bag (Int,String) -> Bag (Int,String) -> Bool-> (=~.) = (=~)--Here follow the properties:--> prop_Get_Nil =-> readP_to_S get [] =~ []->-> prop_Get_Cons c s =-> readP_to_S get (c:s) =~ [(c,s)]->-> prop_Look s =-> readP_to_S look s =~ [(s,s)]->-> prop_Fail s =-> readP_to_S pfail s =~. []->-> prop_Return x s =-> readP_to_S (return x) s =~. [(x,s)]->-> prop_Bind p k s =-> readP_to_S (p >>= k) s =~.-> [ ys''-> | (x,s') <- readP_to_S p s-> , ys'' <- readP_to_S (k (x::Int)) s'-> ]->-> prop_Plus p q s =-> readP_to_S (p +++ q) s =~.-> (readP_to_S p s ++ readP_to_S q s)->-> prop_LeftPlus p q s =-> readP_to_S (p <++ q) s =~.-> (readP_to_S p s +<+ readP_to_S q s)-> where-> [] +<+ ys = ys-> xs +<+ _ = xs->-> prop_Gather s =-> forAll readPWithoutReadS $ \p ->-> readP_to_S (gather p) s =~-> [ ((pre,x::Int),s')-> | (x,s') <- readP_to_S p s-> , let pre = take (length s - length s') s-> ]->-> prop_String_Yes this s =-> readP_to_S (string this) (this ++ s) =~-> [(this,s)]->-> prop_String_Maybe this s =-> readP_to_S (string this) s =~-> [(this, drop (length this) s) | this `isPrefixOf` s]->-> prop_Munch p s =-> readP_to_S (munch p) s =~-> [(takeWhile p s, dropWhile p s)]->-> prop_Munch1 p s =-> readP_to_S (munch1 p) s =~-> [(res,s') | let (res,s') = (takeWhile p s, dropWhile p s), not (null res)]->-> prop_Choice ps s =-> readP_to_S (choice ps) s =~.-> readP_to_S (foldr (+++) pfail ps) s->-> prop_ReadS r s =-> readP_to_S (readS_to_P r) s =~. r s--}
src/full/Agda/Utils/TestHelpers.hs view
@@ -34,7 +34,7 @@ -- | Is the operator associative? -associative :: (Arbitrary a, Eq a, Show a)+associative :: Eq a => (a -> a -> a) -> a -> a -> a -> Bool associative (+) = \x y z ->@@ -42,7 +42,7 @@ -- | Is the operator commutative? -commutative :: (Arbitrary a, Eq a, Show a)+commutative :: Eq a => (a -> a -> a) -> a -> a -> Bool commutative (+) = \x y ->@@ -50,7 +50,7 @@ -- | Is the operator idempotent? -idempotent :: (Arbitrary a, Eq a, Show a)+idempotent :: Eq a => (a -> a -> a) -> a -> Bool idempotent (/\) = \ x ->@@ -58,9 +58,9 @@ -- | Is the element a zero for the operator? -isZero :: (Arbitrary a, Eq a, Show a)- => a -> (a -> a -> a)- -> a -> Bool+isZero :: Eq a+ => a -> (a -> a -> a)+ -> a -> Bool isZero zer (*) = \x -> (zer * x == zer) &&@@ -68,7 +68,7 @@ -- | Is the element a unit for the operator? -identity :: (Arbitrary a, Eq a, Show a)+identity :: Eq a => a -> (a -> a -> a) -> a -> Bool identity one (*) = \x ->@@ -80,7 +80,7 @@ -- second one? leftDistributive- :: (Arbitrary a, Eq a, Show a)+ :: Eq a => (a -> a -> a) -> (a -> a -> a) -> a -> a -> a -> Bool leftDistributive (*) (+) = \x y z ->@@ -90,7 +90,7 @@ -- second one? rightDistributive- :: (Arbitrary a, Eq a, Show a)+ :: Eq a => (a -> a -> a) -> (a -> a -> a) -> a -> a -> a -> Bool rightDistributive (*) (+) = \x y z ->@@ -99,7 +99,7 @@ -- | Does the first operator distribute over the second one? distributive- :: (Arbitrary a, Eq a, Show a)+ :: Eq a => (a -> a -> a) -> (a -> a -> a) -> a -> a -> a -> Bool distributive (*) (+) = \ x y z ->
src/full/Agda/Utils/Trie.hs view
@@ -2,48 +2,63 @@ {-# LANGUAGE BangPatterns #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE PatternGuards #-}+{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TupleSections #-} -- | Strict tries (based on "Data.Map.Strict" and "Agda.Utils.Maybe.Strict"). module Agda.Utils.Trie ( Trie- , empty, singleton, insert, insertWith, union, unionWith, adjust, delete+ , empty, singleton, everyPrefix, insert, insertWith, union, unionWith+ , adjust, delete , toList, toAscList- , lookupPath+ , lookup, member, lookupPath+ , tests ) where -import Prelude hiding (Maybe(..), maybe, null)-import qualified Prelude as Lazy+import Prelude hiding (null, lookup)+import qualified Prelude import Data.Function import Data.Functor-import Data.List (nubBy, sortBy, isPrefixOf)+import Data.List (nubBy, sortBy, isPrefixOf, inits)+import qualified Data.Maybe as Lazy import Data.Map.Strict (Map) import qualified Data.Map.Strict as Map import Test.QuickCheck -import Agda.Utils.List (mcons)-import Agda.Utils.Maybe.Strict+import qualified Agda.Utils.Maybe.Strict as Strict import Agda.Utils.Null -- | Finite map from @[k]@ to @v@. -- -- With the strict 'Maybe' type, 'Trie' is also strict in 'v'.-data Trie k v = Trie !(Maybe v) !(Map k (Trie k v))- deriving Show+data Trie k v = Trie !(Strict.Maybe v) !(Map k (Trie k v))+ deriving (Show, Eq) -- | Empty trie. instance Null (Trie k v) where- empty = Trie Nothing Map.empty+ empty = Trie Strict.Nothing Map.empty null (Trie v t) = null v && null t +-- | Helper function used to implement 'singleton' and 'everyPrefix'.+singletonOrEveryPrefix :: Bool -> [k] -> v -> Trie k v+singletonOrEveryPrefix _ [] !v =+ Trie (Strict.Just v) Map.empty+singletonOrEveryPrefix everyPrefix (x : xs) !v =+ Trie (if everyPrefix then Strict.Just v else Strict.Nothing)+ (Map.singleton x (singletonOrEveryPrefix everyPrefix xs v))+ -- | Singleton trie. singleton :: [k] -> v -> Trie k v-singleton [] !v = Trie (Just v) Map.empty-singleton (x:xs) !v = Trie Nothing $ Map.singleton x (singleton xs v)+singleton = singletonOrEveryPrefix False +-- | @everyPrefix k v@ is a trie where every prefix of @k@ (including+-- @k@ itself) is mapped to @v@.+everyPrefix :: [k] -> v -> Trie k v+everyPrefix = singletonOrEveryPrefix True+ -- | Left biased union. -- -- @union = unionWith (\ new old -> new)@.@@ -53,7 +68,7 @@ -- | Pointwise union with merge function for values. unionWith :: (Ord k) => (v -> v -> v) -> Trie k v -> Trie k v -> Trie k v unionWith f (Trie v ss) (Trie w ts) =- Trie (unionMaybeWith f v w) (Map.unionWith (unionWith f) ss ts)+ Trie (Strict.unionMaybeWith f v w) (Map.unionWith (unionWith f) ss ts) -- | Insert. Overwrites existing value if present. --@@ -67,16 +82,18 @@ -- | Delete value at key, but leave subtree intact. delete :: Ord k => [k] -> Trie k v -> Trie k v-delete path = adjust path (const Nothing)+delete path = adjust path (const Strict.Nothing) -- | Adjust value at key, leave subtree intact.-adjust :: Ord k => [k] -> (Maybe v -> Maybe v) -> Trie k v -> Trie k v+adjust ::+ Ord k =>+ [k] -> (Strict.Maybe v -> Strict.Maybe v) -> Trie k v -> Trie k v adjust path f t@(Trie v ts) = case path of -- case: found the value we want to adjust: adjust it! [] -> Trie (f v) ts -- case: found the subtrie matching the first key: adjust recursively- k : ks | Lazy.Just s <- Map.lookup k ts -> Trie v $ Map.insert k (adjust ks f s) ts+ k : ks | Just s <- Map.lookup k ts -> Trie v $ Map.insert k (adjust ks f s) ts -- case: subtrie not found: leave trie untouched _ -> t @@ -86,17 +103,29 @@ -- | Convert to ascending list. toAscList :: Ord k => Trie k v -> [([k],v)]-toAscList (Trie mv ts) = maybeToList (([],) <$> mv) +++toAscList (Trie mv ts) = Strict.maybeToList (([],) <$> mv) ++ [ (k:ks, v) | (k, t) <- Map.toAscList ts , (ks, v) <- toAscList t ] +-- | Returns the value associated with the given key, if any.+lookup :: Ord k => [k] -> Trie k v -> Maybe v+lookup [] (Trie v _) = Strict.toLazy v+lookup (k : ks) (Trie _ ts) = case Map.lookup k ts of+ Nothing -> Nothing+ Just t -> lookup ks t++-- | Is the given key present in the trie?+member :: Ord k => [k] -> Trie k v -> Bool+member ks t = Lazy.isJust (lookup ks t)+ -- | Collect all values along a given path. lookupPath :: Ord k => [k] -> Trie k v -> [v] lookupPath xs (Trie v cs) = case xs of- [] -> maybeToList v- x : xs -> maybeToList v ++ Lazy.maybe [] (lookupPath xs) (Map.lookup x cs)+ [] -> Strict.maybeToList v+ x : xs -> Strict.maybeToList v +++ maybe [] (lookupPath xs) (Map.lookup x cs) -- Tests ------------------------------------------------------------------ @@ -130,6 +159,10 @@ modelToTrie :: Model -> Trie Key Val modelToTrie (Model xs) = foldr (uncurry insert) empty xs +prop_lookup :: [Key] -> Model -> Bool+prop_lookup ks m@(Model ksvs) =+ lookup ks (modelToTrie m) == Prelude.lookup ks ksvs+ modelPath :: [Key] -> Model -> [Val] modelPath ks (Model xs) = map snd@@ -141,3 +174,17 @@ prop_path ks m = collect (length $ modelPath ks m) $ lookupPath ks (modelToTrie m) == modelPath ks m++prop_everyPrefix :: [Integer] -> Integer -> Bool+prop_everyPrefix ks v =+ everyPrefix ks v ==+ foldr union empty [ singleton ks' v | ks' <- inits ks ]++return []++-- | All tests.++tests :: IO Bool+tests = do+ putStrLn "Agda.Utils.Trie"+ $quickCheckAll
src/full/Agda/Utils/VarSet.hs view
@@ -11,7 +11,6 @@ ) where -import Data.IntSet (IntSet) import Data.IntSet as IntSet type VarSet = IntSet
src/full/Agda/Utils/Warshall.hs view
@@ -451,7 +451,7 @@ lookupEdge :: Ord n => n -> n -> AdjList n e -> Maybe e lookupEdge i j g = lookup j =<< Map.lookup i g -edges :: Ord n => AdjList n e -> [(n,n,e)]+edges :: AdjList n e -> [(n,n,e)] edges g = do (i, ns) <- Map.toList g (j, e) <- ns@@ -502,7 +502,7 @@ where n = abs (div n' 2) + 1 -mapNodes :: (Ord node, Ord node') => (node -> node') -> AdjList node edge -> AdjList node' edge+mapNodes :: Ord node' => (node -> node') -> AdjList node edge -> AdjList node' edge mapNodes f = Map.map f' . Map.mapKeys f where f' es = [ (f n, e) | (n,e) <- es ]