packages feed

Agda 2.2.6 → 2.2.8

raw patch · 161 files changed

+15189/−9609 lines, 161 filesdep +Cabaldep ~directorysetup-changedPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: Cabal

Dependency ranges changed: directory

API changes (from Hackage documentation)

- Agda.Auto.NarrowingSearch: printCTree :: CTree blk -> IO ()
- Agda.Auto.NarrowingSearch: printref :: (Refinable a blk) => a -> IO String
- Agda.Auto.NarrowingSearch: runProp :: MetaEnv (PB blk) -> MetaEnv ()
- Agda.Auto.NarrowingSearch: type HandlePartSol = IO ()
- Agda.Auto.NarrowingSearch: type PrintConstr = MetaEnv String
- Agda.Auto.Print: par :: (Monad m) => Int -> Int -> String -> m String
- Agda.Auto.Print: pargs :: [MId] -> MArgList o -> IO String
- Agda.Auto.Print: pelr :: [MId] -> Elr o -> IO String
- Agda.Auto.Print: pexp :: Int -> [MId] -> MExp o -> IO String
- Agda.Auto.Print: pid :: [MId] -> MId -> String
- Agda.Auto.Print: printClause :: Clause o -> IO String
- Agda.Auto.Print: printConst :: ConstRef o -> IO String
- Agda.Auto.Print: printExp :: [MId] -> MExp o -> IO String
- Agda.Auto.Print: printId :: String -> String
- Agda.Auto.Print: printPat :: Nat -> Pat o -> IO (Nat, String)
- Agda.Auto.Print: printPats :: Nat -> [Pat o] -> IO (Nat, String)
- Agda.Auto.SearchControl: instance (Trav a (RefInfo o)) => Trav (Clos a o) (RefInfo o)
- Agda.Auto.SearchControl: instance Trav (CAction o) (RefInfo o)
- Agda.Auto.SearchControl: instance Trav (CArgList o) (RefInfo o)
- Agda.Auto.SearchControl: instance Trav (HNExp o) (RefInfo o)
- Agda.Auto.SearchControl: occursCheck :: Metavar a (RefInfo o) -> HNExp o -> IO Bool
- Agda.Auto.SearchControl: prioCompare :: Int
- Agda.Auto.SearchControl: prioPreCompare :: Int
- Agda.Auto.Syntax: ElrsCons :: (Elr o) -> (Elrs o) -> Elrs o
- Agda.Auto.Syntax: ElrsNil :: Elrs o
- Agda.Auto.Syntax: ElrsWeak :: (Elrs o) -> Elrs o
- Agda.Auto.Syntax: Fun :: FMode -> (MExp o) -> (MExp o) -> Exp o
- Agda.Auto.Syntax: HNFun :: FMode -> (CExp o) -> (CExp o) -> HNExp o
- Agda.Auto.Syntax: SortLevel :: Nat -> Sort
- Agda.Auto.Syntax: data CArgList o
- Agda.Auto.Syntax: data Elrs o
- Agda.Auto.Typecheck: PEConPar :: PEval o
- Agda.Auto.Typecheck: closify :: a -> Clos a o
- Agda.Auto.Typecheck: comp :: Bool -> CExp o -> CExp o -> EE (MyPB o)
- Agda.Auto.Typecheck: compargs :: CArgList o -> CArgList o -> EE (MyPB o)
- Agda.Auto.Typecheck: comphn' :: Bool -> HNExp o -> HNExp o -> EE (MyPB o)
- Agda.Auto.Typecheck: doclos :: [CAction o] -> Nat -> Either Nat (CExp o)
- Agda.Auto.Typecheck: dopat :: Pat o -> PEval o -> EE (MyMB (Either (Maybe (PEval o)) (PEval o, [CExp o])) o)
- Agda.Auto.Typecheck: dopats :: [Pat o] -> [PEval o] -> EE (MyMB (Either (Maybe [PEval o]) ([PEval o], [CExp o])) o)
- Agda.Auto.Typecheck: dorule :: Clause o -> [PEval o] -> EE (MyMB (Either (Maybe [PEval o]) (CExp o)) o)
- Agda.Auto.Typecheck: dorules :: [Clause o] -> [PEval o] -> EE (MyMB (Maybe (CExp o)) o)
- Agda.Auto.Typecheck: hn' :: CExp o -> CArgList o -> EE (MyMB (HNExp o) o)
- Agda.Auto.Typecheck: msubs :: [CExp o] -> a -> Clos a o
- Agda.Auto.Typecheck: noiotastep' :: ConstRef o -> MArgList o -> EE (MyPB o)
- Agda.Auto.Typecheck: pcargs :: Bool -> [MId] -> CArgList o -> IO String
- Agda.Auto.Typecheck: pcexp :: Bool -> Int -> [MId] -> CExp o -> IO String
- Agda.Auto.Typecheck: phnargs :: Bool -> [MId] -> HNArgList o -> IO String
- Agda.Auto.Typecheck: phnexp :: Bool -> Int -> [MId] -> HNExp o -> IO String
- Agda.Auto.Typecheck: printCtx :: Bool -> Ctx o -> IO String
- Agda.Auto.Typecheck: ptcCompare :: String -> Bool -> CExp o -> CExp o -> EE String
- Agda.Auto.Typecheck: ptcCompareArgList :: String -> CArgList o -> CArgList o -> EE String
- Agda.Auto.Typecheck: ptcNoIotaStep :: HNExp o -> EE String
- Agda.Auto.Typecheck: ptcTypeCheck :: Bool -> Ctx o -> HNExp o -> MExp o -> EE String
- Agda.Auto.Typecheck: ptcTypeUnknown :: Bool -> Ctx o -> CExp o -> MExp o -> EE String
- Agda.Auto.Typecheck: ptcTypecheckArgList :: String -> Bool -> Ctx o -> CExp o -> CExp o -> MArgList o -> EE String
- Agda.Auto.Typecheck: sub :: CExp o -> Clos a o -> Clos a o
- Agda.Auto.Typecheck: weak :: Nat -> Clos a o -> Clos a o
- Agda.Compiler.Agate.Classify: allM :: (Monad m) => (a -> m Bool) -> [a] -> m Bool
- Agda.Compiler.Agate.Classify: andM :: (Monad m) => m Bool -> m Bool -> m Bool
- Agda.Compiler.Agate.Classify: computeGreatestFixedPoint :: ([QName] -> QName -> TCM Bool) -> [QName] -> TCM [QName]
- Agda.Compiler.Agate.Classify: computeLeastFixedPoint :: ([QName] -> QName -> TCM Bool) -> [QName] -> TCM [QName]
- Agda.Compiler.Agate.Classify: enumCompilableTypeFamilies :: Map QName Definition -> TCM [QName]
- Agda.Compiler.Agate.Classify: enumOptimizableConstants :: Map QName Definition -> [QName] -> TCM [QName]
- Agda.Compiler.Agate.Classify: enumTypeFamilies :: Map QName Definition -> TCM [QName]
- Agda.Compiler.Agate.Common: dropArgs :: Int -> Type -> TCM Type
- Agda.Compiler.Agate.Common: forEachArgM :: (Type -> TCM a) -> Type -> TCM [a]
- Agda.Compiler.Agate.Common: psep :: [Doc] -> Doc
- Agda.Compiler.Agate.Common: showClause :: (Term -> TCM Doc) -> (QName -> [Doc] -> TCM Doc) -> ([Doc] -> Term -> TCM Doc) -> Clause -> TCM Doc
- Agda.Compiler.Agate.Common: showOptimizedLiteral :: Literal -> Doc
- Agda.Compiler.Agate.Common: showUntypedLiteral :: Literal -> Doc
- Agda.Compiler.Agate.Common: splitType :: Type -> TCM ([Type], Type)
- Agda.Compiler.Agate.Common: underContext :: Type -> TCM a -> TCM a
- Agda.Compiler.Agate.Common: withFunctionDomain :: Type -> (Type -> TCM a) -> ([a] -> Type -> TCM b) -> TCM b
- Agda.Compiler.Agate.Main: compilerMain :: TCM () -> TCM ()
- Agda.Compiler.Agate.Main: computeMaxArity :: Definitions -> TCM Nat
- Agda.Compiler.Agate.Main: enumConstructors :: Definitions -> [QName]
- Agda.Compiler.Agate.Main: getConstructorArity :: Definition -> TCM Nat
- Agda.Compiler.Agate.Main: printConstants :: Definitions -> IO ()
- Agda.Compiler.Agate.Main: printShowConstants :: Definitions -> IO ()
- Agda.Compiler.Agate.OptimizedPrinter: class ShowAsOptimizedKind a
- Agda.Compiler.Agate.OptimizedPrinter: class ShowAsOptimizedTerm a
- Agda.Compiler.Agate.OptimizedPrinter: class ShowAsOptimizedType a
- Agda.Compiler.Agate.OptimizedPrinter: instance ShowAsOptimizedKind Term
- Agda.Compiler.Agate.OptimizedPrinter: instance ShowAsOptimizedKind Type
- Agda.Compiler.Agate.OptimizedPrinter: instance ShowAsOptimizedTerm Name
- Agda.Compiler.Agate.OptimizedPrinter: instance ShowAsOptimizedTerm QName
- Agda.Compiler.Agate.OptimizedPrinter: instance ShowAsOptimizedTerm Term
- Agda.Compiler.Agate.OptimizedPrinter: instance ShowAsOptimizedType QName
- Agda.Compiler.Agate.OptimizedPrinter: instance ShowAsOptimizedType Term
- Agda.Compiler.Agate.OptimizedPrinter: instance ShowAsOptimizedType Type
- Agda.Compiler.Agate.OptimizedPrinter: showAsOptimizedConstructor :: QName -> TCM Doc
- Agda.Compiler.Agate.OptimizedPrinter: showAsOptimizedKind :: (ShowAsOptimizedKind a) => a -> TCM Doc
- Agda.Compiler.Agate.OptimizedPrinter: showAsOptimizedTerm :: (ShowAsOptimizedTerm a) => a -> TCM Doc
- Agda.Compiler.Agate.OptimizedPrinter: showAsOptimizedType :: (ShowAsOptimizedType a) => a -> TCM Doc
- Agda.Compiler.Agate.OptimizedPrinter: showOptimizedClause :: Doc -> Clause -> TCM Doc
- Agda.Compiler.Agate.OptimizedPrinter: showOptimizedDefinitions :: Definitions -> TCM ()
- Agda.Compiler.Agate.OptimizedPrinter: showTypeDeclaration :: Definitions -> QName -> TCM Doc
- Agda.Compiler.Agate.OptimizedPrinter: showTypeDeclarations :: Definitions -> [QName] -> TCM Doc
- Agda.Compiler.Agate.OptimizedPrinter: showTypeParameter :: Doc -> Type -> TCM ([Doc] -> [Doc])
- Agda.Compiler.Agate.OptimizedPrinter: showValueDefinition :: Definitions -> [QName] -> (QName, Definition) -> TCM Doc
- Agda.Compiler.Agate.OptimizedPrinter: showValueDefinitions :: Definitions -> [QName] -> TCM Doc
- Agda.Compiler.Agate.OptimizedPrinter: underDatatypeParameters :: Nat -> Type -> (Doc -> Type -> TCM (a -> a)) -> (Type -> TCM a) -> TCM a
- Agda.Compiler.Agate.TranslateName: escape :: String -> String
- Agda.Compiler.Agate.TranslateName: translateNameAsOptimizedConstructor :: String -> String
- Agda.Compiler.Agate.TranslateName: translateNameAsOptimizedTerm :: String -> String
- Agda.Compiler.Agate.TranslateName: translateNameAsOptimizedType :: String -> String
- Agda.Compiler.Agate.TranslateName: translateNameAsUntypedConstructor :: String -> String
- Agda.Compiler.Agate.TranslateName: translateNameAsUntypedTerm :: String -> String
- Agda.Compiler.Agate.UntypedPrinter: class ShowAsUntypedTerm a
- Agda.Compiler.Agate.UntypedPrinter: instance ShowAsUntypedTerm Name
- Agda.Compiler.Agate.UntypedPrinter: instance ShowAsUntypedTerm QName
- Agda.Compiler.Agate.UntypedPrinter: instance ShowAsUntypedTerm Term
- Agda.Compiler.Agate.UntypedPrinter: showAsUntypedConstructor :: QName -> TCM Doc
- Agda.Compiler.Agate.UntypedPrinter: showAsUntypedTerm :: (ShowAsUntypedTerm a) => a -> TCM Doc
- Agda.Compiler.Agate.UntypedPrinter: showUntypedApp :: (ShowAsUntypedTerm a) => a -> [Arg Term] -> TCM Doc
- Agda.Compiler.Agate.UntypedPrinter: showUntypedClause :: Clause -> TCM Doc
- Agda.Compiler.Agate.UntypedPrinter: showUntypedDefinition :: (QName, Definition) -> TCM Doc
- Agda.Compiler.Agate.UntypedPrinter: untypedAbs :: [Doc] -> Doc -> Doc
- Agda.Compiler.Alonzo.Haskell: AlComment :: String -> AlDecl
- Agda.Compiler.Alonzo.Haskell: AlDecl :: [HsDecl] -> AlDecl
- Agda.Compiler.Alonzo.Haskell: data AlDecl
- Agda.Compiler.Alonzo.Haskell: dummyLoc :: SrcLoc
- Agda.Compiler.Alonzo.Haskell: hsAp :: HsExp -> HsExp -> HsExp
- Agda.Compiler.Alonzo.Haskell: hsCon :: String -> HsExp
- Agda.Compiler.Alonzo.Haskell: hsError :: String -> HsExp
- Agda.Compiler.Alonzo.Haskell: hsImport :: String -> HsImportDecl
- Agda.Compiler.Alonzo.Haskell: hsLam :: String -> HsExp -> HsExp
- Agda.Compiler.Alonzo.Haskell: hsModule :: String -> [HsDecl] -> HsModule
- Agda.Compiler.Alonzo.Haskell: hsModuleImporting :: String -> [String] -> [String] -> [HsDecl] -> HsModule
- Agda.Compiler.Alonzo.Haskell: hsPreludeName :: String -> HsQName
- Agda.Compiler.Alonzo.Haskell: hsPreludeTypedExp :: String -> HsExp -> HsExp
- Agda.Compiler.Alonzo.Haskell: hsQImport :: String -> HsImportDecl
- Agda.Compiler.Alonzo.Haskell: hsTypedExp :: HsQName -> HsExp -> HsExp
- Agda.Compiler.Alonzo.Haskell: hsUndefined :: HsExp
- Agda.Compiler.Alonzo.Haskell: hsVar :: String -> HsExp
- Agda.Compiler.Alonzo.Haskell: impRTP :: HsImportDecl
- Agda.Compiler.Alonzo.Haskell: impRTS :: HsImportDecl
- Agda.Compiler.Alonzo.Haskell: printAlDecl :: AlDecl -> IO ()
- Agda.Compiler.Alonzo.Haskell: printAlModule :: String -> [AlDecl] -> IO ()
- Agda.Compiler.Alonzo.Haskell: printHsDecls :: [HsDecl] -> IO ()
- Agda.Compiler.Alonzo.Haskell: printHsModule :: Handle -> HsModule -> IO ()
- Agda.Compiler.Alonzo.Main: clauseBod :: Clause -> Term
- Agda.Compiler.Alonzo.Main: compilerMain :: TCM () -> TCM ()
- Agda.Compiler.Alonzo.Main: consDefs :: [QName] -> TCM [Definition]
- Agda.Compiler.Alonzo.Main: contClause :: Name -> Nat -> Clause -> TCM HsDecl
- Agda.Compiler.Alonzo.Main: flattenSubmodules :: QName -> TCM QName
- Agda.Compiler.Alonzo.Main: foldClauses :: Name -> Nat -> [Clause] -> TCM [HsDecl]
- Agda.Compiler.Alonzo.Main: fromCurrentModule :: QName -> TCM Bool
- Agda.Compiler.Alonzo.Main: getConArity :: QName -> TCM Nat
- Agda.Compiler.Alonzo.Main: getDefinitions :: TCM Definitions
- Agda.Compiler.Alonzo.Main: infoDecl :: String -> String -> HsDecl
- Agda.Compiler.Alonzo.Main: maybeQualName :: (QName -> HsQName) -> (Name -> HsName) -> QName -> PM HsQName
- Agda.Compiler.Alonzo.Main: numOfMainS :: [QName] -> Maybe Nat
- Agda.Compiler.Alonzo.Main: processArgPat :: (Arg Pattern) -> PM HsPat
- Agda.Compiler.Alonzo.Main: processArgPats :: [Arg Pattern] -> PM [HsPat]
- Agda.Compiler.Alonzo.Main: processBody :: ClauseBody -> PM HsExp
- Agda.Compiler.Alonzo.Main: processClause :: Name -> Nat -> Clause -> TCM HsDecl
- Agda.Compiler.Alonzo.Main: processDef :: (QName, Definition) -> TCM [HsDecl]
- Agda.Compiler.Alonzo.Main: processDefWithDebug :: (QName, Definition) -> TCM [HsDecl]
- Agda.Compiler.Alonzo.Main: processLit :: Literal -> HsExp
- Agda.Compiler.Alonzo.Main: processPat :: Pattern -> PM HsPat
- Agda.Compiler.Alonzo.Main: processTerm :: Term -> PM HsExp
- Agda.Compiler.Alonzo.Main: processVap :: HsExp -> [Arg Term] -> PM HsExp
- Agda.Compiler.Alonzo.Main: times :: Nat -> a -> [a]
- Agda.Compiler.Alonzo.Main: typeArity :: Type -> Nat
- Agda.Compiler.Alonzo.Main: unfoldVap :: PState -> HsExp -> [Arg Term] -> TCM HsExp
- Agda.Compiler.Alonzo.Main: vecApp :: HsExp -> [HsExp] -> HsExp
- Agda.Compiler.Alonzo.Names: conName :: Name -> HsName
- Agda.Compiler.Alonzo.Names: conQName :: QName -> HsQName
- Agda.Compiler.Alonzo.Names: conQStr :: QName -> String
- Agda.Compiler.Alonzo.Names: conStr :: Name -> String
- Agda.Compiler.Alonzo.Names: dataName :: Name -> HsName
- Agda.Compiler.Alonzo.Names: dfName :: Name -> HsName
- Agda.Compiler.Alonzo.Names: dfNameSub :: Name -> Int -> HsName
- Agda.Compiler.Alonzo.Names: dfQName :: QName -> HsQName
- Agda.Compiler.Alonzo.Names: dfQStr :: QName -> String
- Agda.Compiler.Alonzo.Names: dfStr :: Name -> String
- Agda.Compiler.Alonzo.Names: moduleStr :: ModuleName -> String
- Agda.Compiler.Alonzo.Names: numOfName :: Name -> Nat
- Agda.Compiler.Alonzo.Names: numOfQName :: QName -> Nat
- Agda.Compiler.Alonzo.Names: rtpQName :: String -> HsQName
- Agda.Compiler.Alonzo.PatternMonad: PSt :: Int -> [Int] -> [HsPat] -> Clause -> Defs -> PState
- Agda.Compiler.Alonzo.PatternMonad: addVar :: PM ()
- Agda.Compiler.Alonzo.PatternMonad: addWildcard :: PM ()
- Agda.Compiler.Alonzo.PatternMonad: clause :: PState -> Clause
- Agda.Compiler.Alonzo.PatternMonad: cnt :: PState -> Int
- Agda.Compiler.Alonzo.PatternMonad: data PState
- Agda.Compiler.Alonzo.PatternMonad: defs :: PState -> Defs
- Agda.Compiler.Alonzo.PatternMonad: getPDefs :: PM Defs
- Agda.Compiler.Alonzo.PatternMonad: getPclause :: PM Clause
- Agda.Compiler.Alonzo.PatternMonad: getPcnt :: PM Int
- Agda.Compiler.Alonzo.PatternMonad: getPlst :: PM [HsPat]
- Agda.Compiler.Alonzo.PatternMonad: incPcnt :: PM ()
- Agda.Compiler.Alonzo.PatternMonad: initPState :: Clause -> Defs -> PState
- Agda.Compiler.Alonzo.PatternMonad: lst :: PState -> [HsPat]
- Agda.Compiler.Alonzo.PatternMonad: putPcnt :: Int -> PM ()
- Agda.Compiler.Alonzo.PatternMonad: putPlst :: [HsPat] -> PM ()
- Agda.Compiler.Alonzo.PatternMonad: type Defs = Map QName Definition
- Agda.Compiler.Alonzo.PatternMonad: type PM a = StateT PState TCM a
- Agda.Compiler.Alonzo.PatternMonad: vars :: PState -> [Int]
- Agda.Compiler.MAlonzo.Compiler: malonzoDir :: TCM FilePath
- Agda.Interaction.BasicOps: typeOfMetas :: Rewrite -> TCM ([OutputForm Expr InteractionId], [OutputForm Expr MetaId])
- Agda.Interaction.GhciTop: cmd_goals :: FilePath -> Interaction
- Agda.Interaction.GhciTop: cmd_reset :: Interaction
- Agda.Interaction.GhciTop: respond :: Lisp String -> IO ()
- Agda.Interaction.GhciTop: responseString :: Lisp String -> String
- Agda.Interaction.Imports: CurrentDir :: RelativeTo
- Agda.Interaction.Imports: ProjectRoot :: RelativeTo
- Agda.Interaction.Imports: data RelativeTo
- Agda.Interaction.Imports: moduleName :: FilePath -> TCM TopLevelModuleName
- Agda.Interaction.Imports: moduleName' :: AbsolutePath -> TCM TopLevelModuleName
- Agda.Interaction.Options: optCompileAlonzo :: CommandLineOptions -> Bool
- Agda.Interaction.Options: optCompileMAlonzo :: CommandLineOptions -> Bool
- Agda.Interaction.Options: optMAlonzoDir :: CommandLineOptions -> Maybe FilePath
- Agda.Syntax.Common: instance (Eq e) => Eq (Arg e)
- Agda.Syntax.Concrete: instance Eq AsName
- Agda.Syntax.Concrete: instance Eq BoundName
- Agda.Syntax.Concrete: instance Eq Declaration
- Agda.Syntax.Concrete: instance Eq Expr
- Agda.Syntax.Concrete: instance Eq ImportDirective
- Agda.Syntax.Concrete: instance Eq LHS
- Agda.Syntax.Concrete: instance Eq LamBinding
- Agda.Syntax.Concrete: instance Eq OpenShortHand
- Agda.Syntax.Concrete: instance Eq Pattern
- Agda.Syntax.Concrete: instance Eq Pragma
- Agda.Syntax.Concrete: instance Eq RHS
- Agda.Syntax.Concrete: instance Eq Renaming
- Agda.Syntax.Concrete: instance Eq TypedBinding
- Agda.Syntax.Concrete: instance Eq TypedBindings
- Agda.Syntax.Concrete: instance Eq UsingOrHiding
- Agda.Syntax.Concrete: instance Eq WhereClause
- Agda.Syntax.Concrete.Operators.Parser: instance (Show e) => Show (ExprView e)
- Agda.Syntax.Info: instance Eq DeclInfo
- Agda.Syntax.Info: instance Show ModuleInfo
- Agda.Syntax.Internal: data Telescope
- Agda.Syntax.Internal: instance Data Telescope
- Agda.Syntax.Internal: instance Eq Telescope
- Agda.Syntax.Internal: instance KillRange Telescope
- Agda.Syntax.Internal: instance Ord Telescope
- Agda.Syntax.Internal: instance Show Telescope
- Agda.Syntax.Internal: instance Sized Telescope
- Agda.Syntax.Internal: instance Typeable Telescope
- Agda.Syntax.Scope.Monad: renamedCanonicalNames :: ModuleName -> ModuleName -> Scope -> ScopeM (Map QName QName, Map ModuleName ModuleName)
- Agda.Syntax.Translation.ConcreteToAbstract: instance [overlap ok] ToAbstract (Constr NiceDeclaration) Declaration
- Agda.Termination.CallGraph: Le :: Order
- Agda.Termination.CallGraph: Lt :: Order
- Agda.Termination.CallGraph: Unknown :: Order
- Agda.Termination.CallGraph: showBehaviour :: (Show meta) => CallGraph meta -> String
- Agda.Termination.Semiring: one :: Semiring a -> a
- Agda.TypeChecking.Free: instance Free Telescope
- Agda.TypeChecking.Monad.Base: DependentPatternMatchingOnCodata :: TypeError
- Agda.TypeChecking.Monad.Base: clTrace :: Closure a -> CallTrace
- Agda.TypeChecking.Monad.Base: instance (HasRange a) => HasRange (ParentCall a)
- Agda.TypeChecking.Monad.Base: instance (HasRange a) => HasRange (Trace a)
- Agda.TypeChecking.Monad.Base: noTrace :: CallTrace
- Agda.TypeChecking.Monad.Base: stTrace :: TCState -> CallTrace
- Agda.TypeChecking.Monad.Base: type CallTrace = Trace (Closure Call)
- Agda.TypeChecking.Monad.Options: PersistentOptions :: Target
- Agda.TypeChecking.Monad.Options: PragmaOptions :: Target
- Agda.TypeChecking.Monad.Options: data Target
- Agda.TypeChecking.Monad.Options: makeIncludeDirsAbsolute :: (MonadTCM tcm) => AbsolutePath -> tcm ()
- Agda.TypeChecking.Monad.Options: setOptionsFromPragmas :: (MonadTCM tcm) => [Pragma] -> tcm ()
- Agda.TypeChecking.Monad.Trace: getTrace :: (MonadTCM tcm) => tcm CallTrace
- Agda.TypeChecking.Monad.Trace: onTrace :: (MonadTCM tcm) => (CallTrace -> CallTrace) -> tcm ()
- Agda.TypeChecking.Monad.Trace: setTrace :: (MonadTCM tcm) => CallTrace -> tcm ()
- Agda.TypeChecking.Monad.Trace: withTrace :: (MonadTCM tcm) => CallTrace -> tcm a -> tcm a
- Agda.TypeChecking.Positivity: instance ComputeOccurrences Telescope
- Agda.TypeChecking.Reduce: instance InstantiateFull Telescope
- Agda.TypeChecking.Reduce: instance Normalise Telescope
- Agda.TypeChecking.Rules.Term: forcePi :: (MonadTCM tcm) => Hiding -> String -> Type -> tcm (Type, Constraints)
- Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj MetaId
- Agda.TypeChecking.Substitute: instance (Data a, Subst a) => Subst (Abs a)
- Agda.TypeChecking.Substitute: instance Apply Telescope
- Agda.TypeChecking.Substitute: instance Raise Telescope
- Agda.TypeChecking.Substitute: instance Subst Telescope
- Agda.TypeChecking.Substitute: telView :: Type -> TelView
- Agda.Utils.Trace: Child :: a -> [ChildCall a] -> ChildCall a
- Agda.Utils.Trace: Current :: a -> (ParentCall a) -> [SiblingCall a] -> [ChildCall a] -> CurrentCall a
- Agda.Utils.Trace: NoParent :: ParentCall a
- Agda.Utils.Trace: Parent :: a -> (ParentCall a) -> [SiblingCall a] -> ParentCall a
- Agda.Utils.Trace: TopLevel :: [ChildCall a] -> CurrentCall a
- Agda.Utils.Trace: data ChildCall a
- Agda.Utils.Trace: data CurrentCall a
- Agda.Utils.Trace: data ParentCall a
- Agda.Utils.Trace: instance (Data a) => Data (ChildCall a)
- Agda.Utils.Trace: instance (Data a) => Data (CurrentCall a)
- Agda.Utils.Trace: instance (Data a) => Data (ParentCall a)
- Agda.Utils.Trace: instance Typeable1 ChildCall
- Agda.Utils.Trace: instance Typeable1 CurrentCall
- Agda.Utils.Trace: instance Typeable1 ParentCall
- Agda.Utils.Trace: matchCall :: (call -> Maybe a) -> Trace call -> Maybe a
- Agda.Utils.Trace: matchCalls :: (call -> Maybe a) -> Trace call -> [a]
- Agda.Utils.Trace: matchTrace :: (Monoid m) => (ChildCall call -> m) -> Trace call -> m
- Agda.Utils.Trace: newCall :: a -> Trace a -> Trace a
- Agda.Utils.Trace: type SiblingCall = ChildCall
- Agda.Utils.Trace: type Trace = CurrentCall
- Agda.Utils.Trace: updateCall :: a -> Trace a -> Trace a
+ Agda.Auto.CaseSplit: CSAbsurd :: CSPatI o
+ Agda.Auto.CaseSplit: CSOmittedArg :: CSPatI o
+ Agda.Auto.CaseSplit: CSPatConApp :: (ConstRef o) -> [CSPat o] -> CSPatI o
+ Agda.Auto.CaseSplit: CSPatExp :: (MExp o) -> CSPatI o
+ Agda.Auto.CaseSplit: CSPatVar :: Nat -> CSPatI o
+ Agda.Auto.CaseSplit: CSWith :: (MExp o) -> CSPatI o
+ Agda.Auto.CaseSplit: HI :: FMode -> a -> HI a
+ Agda.Auto.CaseSplit: applyperm :: [Nat] -> CSCtx o -> MExp o -> [CSPat o] -> (CSCtx o, MExp o, [CSPat o])
+ Agda.Auto.CaseSplit: betareduce :: MExp o -> MArgList o -> MExp o
+ Agda.Auto.CaseSplit: caseSplitSearch :: IORef Int -> Int -> [ConstRef o] -> Maybe (EqReasoningConsts o) -> Int -> Int -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]
+ Agda.Auto.CaseSplit: caseSplitSearch' :: (Int -> CSCtx o -> MExp o -> ([Nat], Nat, [Nat]) -> IO (Maybe (MExp o))) -> Int -> Int -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]
+ Agda.Auto.CaseSplit: data CSPatI o
+ Agda.Auto.CaseSplit: data HI a
+ Agda.Auto.CaseSplit: depthofvar :: Nat -> [CSPat o] -> Nat
+ Agda.Auto.CaseSplit: eqelr :: Elr o -> Elr o -> Bool
+ Agda.Auto.CaseSplit: findperm :: [MExp o] -> Maybe [Nat]
+ Agda.Auto.CaseSplit: freevars :: MExp o -> [Nat]
+ Agda.Auto.CaseSplit: getblks :: MExp o -> IO [Nat]
+ Agda.Auto.CaseSplit: infertypevar :: CSCtx o -> Nat -> MExp o
+ Agda.Auto.CaseSplit: lift :: Nat -> MExp o -> MExp o
+ Agda.Auto.CaseSplit: localTerminationEnv :: [CSPat o] -> ([Nat], Nat, [Nat])
+ Agda.Auto.CaseSplit: localTerminationSidecond :: ([Nat], Nat, [Nat]) -> ConstRef o -> MExp o -> EE (MyPB o)
+ Agda.Auto.CaseSplit: mm :: a -> MM a b
+ Agda.Auto.CaseSplit: notequal :: Nat -> Nat -> MExp o -> MExp o -> IO Bool
+ Agda.Auto.CaseSplit: removevar :: CSCtx o -> MExp o -> [CSPat o] -> [(Nat, MExp o)] -> (CSCtx o, MExp o, [CSPat o])
+ Agda.Auto.CaseSplit: rename :: (Nat -> Nat) -> MExp o -> MExp o
+ Agda.Auto.CaseSplit: renamep :: (Nat -> Nat) -> CSPat o -> CSPat o
+ Agda.Auto.CaseSplit: replace :: Nat -> Nat -> MExp o -> MExp o -> MExp o
+ Agda.Auto.CaseSplit: replacep :: Nat -> Nat -> CSPatI o -> MExp o -> CSPat o -> CSPat o
+ Agda.Auto.CaseSplit: rm :: MM a b -> a
+ Agda.Auto.CaseSplit: seqctx :: CSCtx o -> CSCtx o
+ Agda.Auto.CaseSplit: type CSCtx o = [HI (MId, MExp o)]
+ Agda.Auto.CaseSplit: type CSPat o = HI (CSPatI o)
+ Agda.Auto.CaseSplit: type Sol o = [(CSCtx o, [CSPat o], Maybe (MExp o))]
+ Agda.Auto.CaseSplit: unifyexp :: MExp o -> MExp o -> Maybe [(Nat, MExp o)]
+ Agda.Auto.Convert: constructPats :: Map QName (TMode, ConstRef O) -> MetaId -> Clause -> TCM ([(FMode, MId)], [CSPat O])
+ Agda.Auto.Convert: contains_constructor :: [CSPat O] -> Bool
+ Agda.Auto.Convert: etaContractBody :: ClauseBody -> TCM ClauseBody
+ Agda.Auto.Convert: findClauseDeep :: MetaId -> TCM (Maybe (QName, Clause, Bool))
+ Agda.Auto.Convert: freeIn :: Nat -> MExp o -> Bool
+ Agda.Auto.Convert: frommyClause :: (CSCtx O, [CSPat O], Maybe (MExp O)) -> IO Clause
+ Agda.Auto.Convert: matchType :: Integer -> Integer -> Type -> Type -> Maybe (Nat, Nat)
+ Agda.Auto.Convert: modifyAbstractClause :: Clause -> Clause
+ Agda.Auto.Convert: modifyAbstractExpr :: Expr -> Expr
+ Agda.Auto.Convert: negtype :: ConstRef o -> MExp o -> MExp o
+ Agda.Auto.Convert: sMainMeta :: S -> MetaId
+ Agda.Auto.NarrowingSearch: AddExtraRef :: String -> (Metavar a blk) -> (Int, RefCreateEnv blk a) -> Prop blk
+ Agda.Auto.NarrowingSearch: ConnectHandle :: (OKHandle blk) -> (MetaEnv (PB blk)) -> Prop blk
+ Agda.Auto.NarrowingSearch: OKVal :: OKVal
+ Agda.Auto.NarrowingSearch: Pair :: a -> b -> Pair a b
+ Agda.Auto.NarrowingSearch: Sidecondition :: (MetaEnv (PB blk)) -> (MetaEnv (PB blk)) -> Prop blk
+ Agda.Auto.NarrowingSearch: cthandles :: CTree blk -> IORef [OKMeta blk]
+ Agda.Auto.NarrowingSearch: data OKVal
+ Agda.Auto.NarrowingSearch: data Pair a b
+ Agda.Auto.NarrowingSearch: expandbind :: MM a blk -> MetaEnv (MM a blk)
+ Agda.Auto.NarrowingSearch: initMeta :: IO (Metavar a blk)
+ Agda.Auto.NarrowingSearch: instance Eq (Metavar a blk)
+ Agda.Auto.NarrowingSearch: instance Refinable OKVal blk
+ Agda.Auto.NarrowingSearch: mextrarefs :: Metavar a blk -> IORef [(Int, RefCreateEnv blk a)]
+ Agda.Auto.NarrowingSearch: newOKHandle :: RefCreateEnv blk (OKHandle blk)
+ Agda.Auto.NarrowingSearch: type OKHandle blk = MM OKVal blk
+ Agda.Auto.NarrowingSearch: type OKMeta blk = Metavar OKVal blk
+ Agda.Auto.NarrowingSearch: waitok :: OKHandle blk -> MetaEnv (MB b blk) -> MetaEnv (MB b blk)
+ Agda.Auto.SearchControl: ExpRefInfo :: Maybe (RefInfo o) -> [RefInfo o] -> Bool -> Bool -> Maybe ([UId o], [Elr o]) -> Maybe Bool -> Bool -> Maybe EqReasoningState -> ExpRefInfo o
+ Agda.Auto.SearchControl: costAppExtraRef :: Int
+ Agda.Auto.SearchControl: costIncrease :: Int
+ Agda.Auto.SearchControl: costIotaStep :: Int
+ Agda.Auto.SearchControl: data ExpRefInfo o
+ Agda.Auto.SearchControl: eriEqRState :: ExpRefInfo o -> Maybe EqReasoningState
+ Agda.Auto.SearchControl: eriInfTypeUnknown :: ExpRefInfo o -> Bool
+ Agda.Auto.SearchControl: eriIotaStep :: ExpRefInfo o -> Maybe Bool
+ Agda.Auto.SearchControl: eriIsEliminand :: ExpRefInfo o -> Bool
+ Agda.Auto.SearchControl: eriMain :: ExpRefInfo o -> Maybe (RefInfo o)
+ Agda.Auto.SearchControl: eriPickSubsVar :: ExpRefInfo o -> Bool
+ Agda.Auto.SearchControl: eriUnifs :: ExpRefInfo o -> [RefInfo o]
+ Agda.Auto.SearchControl: eriUsedVars :: ExpRefInfo o -> Maybe ([UId o], [Elr o])
+ Agda.Auto.SearchControl: instance Refinable (ConstRef o) (RefInfo o)
+ Agda.Auto.SearchControl: instance Refinable (ICExp o) (RefInfo o)
+ Agda.Auto.SearchControl: instance Trav (TrBr a o) (RefInfo o)
+ Agda.Auto.SearchControl: prioAbsurdLambda :: Int
+ Agda.Auto.SearchControl: prioCompBeta :: Int
+ Agda.Auto.SearchControl: prioCompBetaStructured :: Int
+ Agda.Auto.SearchControl: prioCompCopy :: Int
+ Agda.Auto.SearchControl: prioCompUnif :: Int
+ Agda.Auto.SearchControl: prioNoIota :: Int
+ Agda.Auto.SearchControl: subsvars :: [CAction o] -> [Nat]
+ Agda.Auto.SearchControl: univar :: [CAction o] -> Nat -> Maybe Nat
+ Agda.Auto.Syntax: ALProj :: (MArgList o) -> (MM (ConstRef o) (RefInfo o)) -> FMode -> (MArgList o) -> ArgList o
+ Agda.Auto.Syntax: AbsurdLambda :: FMode -> Exp o
+ Agda.Auto.Syntax: EqRSChain :: EqReasoningState
+ Agda.Auto.Syntax: EqRSNone :: EqReasoningState
+ Agda.Auto.Syntax: EqRSPrf1 :: EqReasoningState
+ Agda.Auto.Syntax: EqRSPrf2 :: EqReasoningState
+ Agda.Auto.Syntax: EqRSPrf3 :: EqReasoningState
+ Agda.Auto.Syntax: EqReasoningConsts :: ConstRef o -> ConstRef o -> ConstRef o -> ConstRef o -> ConstRef o -> ConstRef o -> EqReasoningConsts o
+ Agda.Auto.Syntax: HMNormal :: HintMode
+ Agda.Auto.Syntax: HMRecCall :: HintMode
+ Agda.Auto.Syntax: RICheckElim :: Bool -> RefInfo o
+ Agda.Auto.Syntax: RICheckProjIndex :: [ConstRef o] -> RefInfo o
+ Agda.Auto.Syntax: RICopyInfo :: (ICExp o) -> RefInfo o
+ Agda.Auto.Syntax: RIEqRState :: EqReasoningState -> RefInfo o
+ Agda.Auto.Syntax: RIInferredTypeUnknown :: RefInfo o
+ Agda.Auto.Syntax: RIIotaStep :: Bool -> RefInfo o
+ Agda.Auto.Syntax: RINotConstructor :: RefInfo o
+ Agda.Auto.Syntax: RIPickSubsvar :: RefInfo o
+ Agda.Auto.Syntax: RIUsedVars :: [UId o] -> [Elr o] -> RefInfo o
+ Agda.Auto.Syntax: Set :: Nat -> Sort
+ Agda.Auto.Syntax: TrBr :: [MExp o] -> a -> TrBr a o
+ Agda.Auto.Syntax: UnknownSort :: Sort
+ Agda.Auto.Syntax: addtrailingargs :: Clos (MArgList o) o -> ICArgList o -> ICArgList o
+ Agda.Auto.Syntax: categorizedecl :: ConstRef o -> IO ()
+ Agda.Auto.Syntax: cddeffreevars :: ConstDef o -> Nat
+ Agda.Auto.Syntax: closify :: MExp o -> CExp o
+ Agda.Auto.Syntax: data EqReasoningConsts o
+ Agda.Auto.Syntax: data EqReasoningState
+ Agda.Auto.Syntax: data HintMode
+ Agda.Auto.Syntax: data ICArgList o
+ Agda.Auto.Syntax: data TrBr a o
+ Agda.Auto.Syntax: detecteliminand :: [Clause o] -> Maybe Nat
+ Agda.Auto.Syntax: detectsemiflex :: ConstRef o -> [Clause o] -> IO Bool
+ Agda.Auto.Syntax: doclos :: [CAction o] -> Nat -> Either Nat (ICExp o)
+ Agda.Auto.Syntax: eqrcBegin :: EqReasoningConsts o -> ConstRef o
+ Agda.Auto.Syntax: eqrcCong :: EqReasoningConsts o -> ConstRef o
+ Agda.Auto.Syntax: eqrcEnd :: EqReasoningConsts o -> ConstRef o
+ Agda.Auto.Syntax: eqrcId :: EqReasoningConsts o -> ConstRef o
+ Agda.Auto.Syntax: eqrcStep :: EqReasoningConsts o -> ConstRef o
+ Agda.Auto.Syntax: eqrcSym :: EqReasoningConsts o -> ConstRef o
+ Agda.Auto.Syntax: expandExp :: MExp o -> IO (MExp o)
+ Agda.Auto.Syntax: instance Eq EqReasoningState
+ Agda.Auto.Syntax: instance Show EqReasoningState
+ Agda.Auto.Syntax: metaliseokh :: MExp o -> IO (MExp o)
+ Agda.Auto.Syntax: rieDefFreeVars :: RefInfo o -> Nat
+ Agda.Auto.Syntax: rieEqReasoningConsts :: RefInfo o -> Maybe (EqReasoningConsts o)
+ Agda.Auto.Syntax: rieHints :: RefInfo o -> [(ConstRef o, HintMode)]
+ Agda.Auto.Syntax: sub :: MExp o -> CExp o -> CExp o
+ Agda.Auto.Syntax: subi :: MExp o -> ICExp o -> ICExp o
+ Agda.Auto.Syntax: type ICExp o = Clos (MExp o) o
+ Agda.Auto.Syntax: type UId o = Metavar (Exp o) (RefInfo o)
+ Agda.Auto.Syntax: weak :: Nat -> CExp o -> CExp o
+ Agda.Auto.Syntax: weakarglist :: Nat -> ICArgList o -> ICArgList o
+ Agda.Auto.Syntax: weakelr :: Nat -> Elr o -> Elr o
+ Agda.Auto.Syntax: weaki :: Nat -> Clos a o -> Clos a o
+ Agda.Auto.Typecheck: CMFBlocked :: (Maybe (Metavar (Exp o) (RefInfo o))) -> (HNExp o) -> CMFlex o
+ Agda.Auto.Typecheck: CMFFlex :: (ICExp o) -> (ICArgList o) -> [Maybe (UId o)] -> CMFlex o
+ Agda.Auto.Typecheck: CMFSemi :: (Maybe (Metavar (Exp o) (RefInfo o))) -> (HNExp o) -> CMFlex o
+ Agda.Auto.Typecheck: CMFlex :: (MM b (RefInfo o)) -> (CMFlex o) -> CMode o
+ Agda.Auto.Typecheck: CMRigid :: (Maybe (Metavar (Exp o) (RefInfo o))) -> (HNExp o) -> CMode o
+ Agda.Auto.Typecheck: calcEqRState :: EqReasoningConsts o -> MExp o -> EE (MyPB o)
+ Agda.Auto.Typecheck: checkeliminand :: MExp o -> EE (MyPB o)
+ Agda.Auto.Typecheck: constructorImpossible :: ICArgList o -> ConstRef o -> EE (MyPB o)
+ Agda.Auto.Typecheck: data CMFlex o
+ Agda.Auto.Typecheck: data CMode o
+ Agda.Auto.Typecheck: getDatatype :: ICExp o -> EE (MyMB (Maybe (ICArgList o, [ConstRef o])) o)
+ Agda.Auto.Typecheck: hnb :: ICExp o -> ICArgList o -> EE (MyMB (HNExp o) o)
+ Agda.Auto.Typecheck: hnn_blks :: ICExp o -> EE (MyMB (HNExp o, HNNBlks o) o)
+ Agda.Auto.Typecheck: hnn_checkstep :: ICExp o -> EE (MyMB (HNExp o, Bool) o)
+ Agda.Auto.Typecheck: iotapossmeta :: ICExp o -> ICArgList o -> EE Bool
+ Agda.Auto.Typecheck: meta_not_constructor :: ICExp o -> EE (MB Bool (RefInfo o))
+ Agda.Auto.Typecheck: noiotastep_term :: ConstRef o -> MArgList o -> EE (MyPB o)
+ Agda.Auto.Typecheck: traversePi :: Int -> ICExp o -> EE (MyMB (HNExp o) o)
+ Agda.Auto.Typecheck: type HNNBlks o = [HNExp o]
+ Agda.Auto.Typecheck: unequal :: ICExp o -> ICExp o -> ([(Nat, HNExp o)] -> EE (MyPB o)) -> [(Nat, HNExp o)] -> EE (MyPB o)
+ Agda.Auto.Typecheck: unequals :: ICArgList o -> ICArgList o -> ([(Nat, HNExp o)] -> EE (MyPB o)) -> [(Nat, HNExp o)] -> EE (MyPB o)
+ Agda.Compiler.MAlonzo.Compiler: compileDir :: TCM FilePath
+ Agda.Interaction.BasicOps: CmpLevels :: Comparison -> b -> b -> OutputForm a b
+ Agda.Interaction.BasicOps: CmpTerms :: [Polarity] -> a -> [b] -> [b] -> OutputForm a b
+ Agda.Interaction.BasicOps: atTopLevel :: TCM a -> TCM a
+ Agda.Interaction.BasicOps: moduleContents :: Range -> String -> TCM ([Name], [(Name, Type)])
+ Agda.Interaction.BasicOps: parseExpr :: Range -> String -> TCM Expr
+ Agda.Interaction.BasicOps: typesOfHiddenMetas :: Rewrite -> TCM [OutputForm Expr MetaId]
+ Agda.Interaction.BasicOps: typesOfVisibleMetas :: Rewrite -> TCM [OutputForm Expr InteractionId]
+ Agda.Interaction.FindFile: moduleName :: AbsolutePath -> TCM TopLevelModuleName
+ Agda.Interaction.FindFile: moduleName' :: AbsolutePath -> TCM TopLevelModuleName
+ Agda.Interaction.GhciTop: Cons :: (Lisp a) -> (Lisp a) -> Lisp a
+ Agda.Interaction.GhciTop: cmd_show_module_contents :: GoalCommand
+ Agda.Interaction.GhciTop: cmd_show_module_contents_toplevel :: String -> Interaction
+ Agda.Interaction.GhciTop: ensureFileLoaded :: AbsolutePath -> TCM ()
+ Agda.Interaction.GhciTop: getCurrentFile :: IO FilePath
+ Agda.Interaction.GhciTop: goal_command :: InteractionId -> GoalCommand -> String -> IO ()
+ Agda.Interaction.GhciTop: includeDirectories :: Interaction -> Maybe [FilePath]
+ Agda.Interaction.GhciTop: makeSilent :: Interaction -> Interaction
+ Agda.Interaction.GhciTop: showModuleContents :: Range -> String -> TCM ()
+ Agda.Interaction.GhciTop: top_command' :: FilePath -> Interaction -> IO ()
+ Agda.Interaction.Options: PragmaOptions :: Bool -> Verbosity -> Bool -> Bool -> Bool -> Bool -> Int -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> PragmaOptions
+ Agda.Interaction.Options: data PragmaOptions
+ Agda.Interaction.Options: defaultVerbosity :: Verbosity
+ Agda.Interaction.Options: instance Show PragmaOptions
+ Agda.Interaction.Options: optCompileDir :: CommandLineOptions -> Maybe FilePath
+ Agda.Interaction.Options: optForcing :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: optGuardingTypeConstructors :: PragmaOptions -> Bool
+ Agda.Interaction.Options: optInjectiveTypeConstructors :: PragmaOptions -> Bool
+ Agda.Interaction.Options: optPragmaOptions :: CommandLineOptions -> PragmaOptions
+ Agda.Interaction.Options: optTerminationDepth :: PragmaOptions -> Int
+ Agda.Interaction.Options: type OptionsPragma = [String]
+ Agda.Interaction.Options: type Verbosity = Trie String Int
+ Agda.Syntax.Abstract: DontCare :: Expr
+ Agda.Syntax.Abstract: EtaPragma :: QName -> Pragma
+ Agda.Syntax.Abstract: Quote :: ExprInfo -> Expr
+ Agda.Syntax.Abstract: QuoteGoal :: ExprInfo -> Name -> Expr -> Expr
+ Agda.Syntax.Abstract.Name: qnameToMName :: QName -> ModuleName
+ Agda.Syntax.Abstract.Name: showQNameId :: QName -> String
+ Agda.Syntax.Abstract.Pretty: prettyATop :: (Pretty c, ToConcrete a c, MonadTCM tcm) => a -> tcm Doc
+ Agda.Syntax.Abstract.Pretty: showATop :: (Show c, ToConcrete a c, MonadTCM tcm) => a -> tcm String
+ Agda.Syntax.Common: Forced :: Relevance
+ Agda.Syntax.Common: Irrelevant :: Relevance
+ Agda.Syntax.Common: Relevant :: Relevance
+ Agda.Syntax.Common: argRelevance :: Arg e -> Relevance
+ Agda.Syntax.Common: data Relevance
+ Agda.Syntax.Common: defaultArg :: a -> Arg a
+ Agda.Syntax.Common: hide :: Arg a -> Arg a
+ Agda.Syntax.Common: ignoreForced :: Relevance -> Relevance
+ Agda.Syntax.Common: instance (Eq a) => Eq (Arg a)
+ Agda.Syntax.Common: instance Data Relevance
+ Agda.Syntax.Common: instance Eq Relevance
+ Agda.Syntax.Common: instance Ord Relevance
+ Agda.Syntax.Common: instance Show Relevance
+ Agda.Syntax.Common: instance Typeable Relevance
+ Agda.Syntax.Common: isHiddenArg :: Arg a -> Bool
+ Agda.Syntax.Common: makeIrrelevant :: Arg a -> Arg a
+ Agda.Syntax.Common: makeRelevant :: Arg a -> Arg a
+ Agda.Syntax.Common: withArgsFrom :: [a] -> [Arg b] -> [Arg a]
+ Agda.Syntax.Concrete: EtaPragma :: !Range -> QName -> Pragma
+ Agda.Syntax.Concrete: Quote :: !Range -> Expr
+ Agda.Syntax.Concrete: QuoteGoal :: !Range -> Name -> Expr -> Expr
+ Agda.Syntax.Concrete: Syntax :: Name -> Notation -> Declaration
+ Agda.Syntax.Concrete.Definitions: Codata :: Range -> DeclarationException
+ Agda.Syntax.Concrete.Operators: instance Eq NotationStyle
+ Agda.Syntax.Concrete.Operators.Parser: ($$$) :: (e -> ReadP a e) -> ReadP a e -> ReadP a e
+ Agda.Syntax.Concrete.Operators.Parser: LamV :: [LamBinding] -> e -> ExprView e
+ Agda.Syntax.Concrete.Operators.Parser: chainl1' :: ReadP t a -> ReadP t (a -> a -> ReadP t a) -> ReadP t a
+ Agda.Syntax.Concrete.Operators.Parser: chainr1' :: ReadP t a -> ReadP t (a -> a -> ReadP t a) -> ReadP t a
+ Agda.Syntax.Concrete.Operators.Parser: rebuild :: (IsExpr e) => NewNotation -> Range -> [e] -> ReadP a e
+ Agda.Syntax.Concrete.Operators.Parser: rebuildBinding :: ExprView e -> ReadP a LamBinding
+ Agda.Syntax.Concrete.Pretty: instance Pretty Relevance
+ Agda.Syntax.Concrete.Pretty: pRelevance :: (Pretty a) => Relevance -> a -> Doc
+ Agda.Syntax.Concrete.Pretty: smashTel :: Telescope -> Telescope
+ Agda.Syntax.Fixity: Fixity' :: Fixity -> Notation -> Fixity'
+ Agda.Syntax.Fixity: data Fixity'
+ Agda.Syntax.Fixity: instance Data Fixity'
+ Agda.Syntax.Fixity: instance Eq Fixity'
+ Agda.Syntax.Fixity: instance Show Fixity'
+ Agda.Syntax.Fixity: instance Typeable Fixity'
+ Agda.Syntax.Fixity: oldToNewNotation :: (Name, Fixity') -> NewNotation
+ Agda.Syntax.Fixity: syntaxOf :: Name -> Notation
+ Agda.Syntax.Fixity: theFixity :: Fixity' -> Fixity
+ Agda.Syntax.Fixity: theNotation :: Fixity' -> Notation
+ Agda.Syntax.Fixity: type NewNotation = (Name, Fixity, Notation)
+ Agda.Syntax.Info: instance (Show OpenShortHand, Show ImportDirective) => Show ModuleInfo
+ Agda.Syntax.Info: minfoDirective :: ModuleInfo -> Maybe ImportDirective
+ Agda.Syntax.Info: minfoOpenShort :: ModuleInfo -> Maybe OpenShortHand
+ Agda.Syntax.Internal: Clauses :: Maybe Clause -> Clause -> Clauses
+ Agda.Syntax.Internal: DontCare :: Term
+ Agda.Syntax.Internal: data Clauses
+ Agda.Syntax.Internal: data Tele a
+ Agda.Syntax.Internal: instance (Data a) => Data (Tele a)
+ Agda.Syntax.Internal: instance (Eq a) => Eq (Tele a)
+ Agda.Syntax.Internal: instance (KillRange a) => KillRange (Tele a)
+ Agda.Syntax.Internal: instance (Ord a) => Ord (Tele a)
+ Agda.Syntax.Internal: instance (Show a) => Show (Tele a)
+ Agda.Syntax.Internal: instance Data Clauses
+ Agda.Syntax.Internal: instance Functor Tele
+ Agda.Syntax.Internal: instance HasRange Clauses
+ Agda.Syntax.Internal: instance Show Clauses
+ Agda.Syntax.Internal: instance Sized (Tele a)
+ Agda.Syntax.Internal: instance Typeable Clauses
+ Agda.Syntax.Internal: instance Typeable1 Tele
+ Agda.Syntax.Internal: maybeOriginalClause :: Clauses -> Maybe Clause
+ Agda.Syntax.Internal: originalClause :: Clauses -> Clause
+ Agda.Syntax.Internal: translatedClause :: Clauses -> Clause
+ Agda.Syntax.Internal: type Telescope = Tele (Arg Type)
+ Agda.Syntax.Literal: LitQName :: Range -> QName -> Literal
+ Agda.Syntax.Notation: BindHole :: Int -> GenPart
+ Agda.Syntax.Notation: ExprHole :: String -> HoleName
+ Agda.Syntax.Notation: IdPart :: String -> GenPart
+ Agda.Syntax.Notation: LambdaHole :: String -> String -> HoleName
+ Agda.Syntax.Notation: NormalHole :: Int -> GenPart
+ Agda.Syntax.Notation: data GenPart
+ Agda.Syntax.Notation: data HoleName
+ Agda.Syntax.Notation: instance Data GenPart
+ Agda.Syntax.Notation: instance Eq GenPart
+ Agda.Syntax.Notation: instance Show GenPart
+ Agda.Syntax.Notation: instance Typeable GenPart
+ Agda.Syntax.Notation: isAHole :: GenPart -> Bool
+ Agda.Syntax.Notation: mkNotation :: [HoleName] -> [String] -> Either String Notation
+ Agda.Syntax.Notation: type Notation = [GenPart]
+ Agda.Syntax.Parser.Tokens: KwETA :: Keyword
+ Agda.Syntax.Parser.Tokens: KwQuote :: Keyword
+ Agda.Syntax.Parser.Tokens: KwQuoteGoal :: Keyword
+ Agda.Syntax.Parser.Tokens: KwSyntax :: Keyword
+ Agda.Syntax.Position: instance (HasRange a, HasRange b, HasRange c, HasRange d) => HasRange (a, b, c, d)
+ Agda.Syntax.Scope.Base: exportedNamesInScope :: (InScope a) => Scope -> ThingsInScope a
+ Agda.Syntax.Scope.Monad: withCurrentModule' :: (MonadTrans t, Monad (t ScopeM)) => ModuleName -> t ScopeM a -> t ScopeM a
+ Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete AsWhereDecls WhereClause
+ Agda.Syntax.Translation.AbstractToConcrete: toConcreteCtx :: (ToConcrete a c) => Precedence -> a -> AbsToCon c
+ Agda.Syntax.Translation.ConcreteToAbstract: instance [overlap ok] ToAbstract ConstrDecl Declaration
+ Agda.Termination.CallGraph: decr :: (?cutoff :: Int) => Int -> Order
+ Agda.Termination.CallGraph: decreasing :: Order -> Bool
+ Agda.Termination.CallGraph: infimum :: (?cutoff :: Int) => [Order] -> Order
+ Agda.Termination.CallGraph: instance (Show meta) => Pretty (CallGraph meta)
+ Agda.Termination.CallGraph: instance HasZero Order
+ Agda.Termination.CallGraph: instance Pretty Order
+ Agda.Termination.CallGraph: le :: Order
+ Agda.Termination.CallGraph: lt :: Order
+ Agda.Termination.CallGraph: orderMat :: Matrix Integer Order -> Order
+ Agda.Termination.CallGraph: prettyBehaviour :: (Show meta) => CallGraph meta -> Doc
+ Agda.Termination.CallGraph: unknown :: Order
+ Agda.Termination.Semiring: class (Eq a) => HasZero a
+ Agda.Termination.Semiring: class (Eq a, Monoid a) => SemiRing a
+ Agda.Termination.Semiring: instance HasZero Integer
+ Agda.Termination.Semiring: instance Monoid Integer
+ Agda.Termination.Semiring: instance SemiRing Integer
+ Agda.Termination.Semiring: multiply :: (SemiRing a) => a -> a -> a
+ Agda.Termination.Semiring: zeroElement :: (HasZero a) => a
+ Agda.Termination.SparseMatrix: MIx :: i -> i -> MIx i
+ Agda.Termination.SparseMatrix: Size :: i -> i -> Size i
+ Agda.Termination.SparseMatrix: add :: (Ord i) => (a -> a -> a) -> Matrix i a -> Matrix i a -> Matrix i a
+ Agda.Termination.SparseMatrix: addColumn :: (Num i, HasZero b) => b -> Matrix i b -> Matrix i b
+ Agda.Termination.SparseMatrix: addRow :: (Num i, HasZero b) => b -> Matrix i b -> Matrix i b
+ Agda.Termination.SparseMatrix: col :: MIx i -> i
+ Agda.Termination.SparseMatrix: cols :: Size i -> i
+ Agda.Termination.SparseMatrix: data MIx i
+ Agda.Termination.SparseMatrix: data Matrix i b
+ Agda.Termination.SparseMatrix: data Size i
+ Agda.Termination.SparseMatrix: diagonal :: (Enum i, Num i, Ix i, HasZero b) => Matrix i b -> Array i b
+ Agda.Termination.SparseMatrix: fromIndexList :: (Ord i, HasZero b) => Size i -> [(MIx i, b)] -> Matrix i b
+ Agda.Termination.SparseMatrix: fromLists :: (Ord i, Num i, Enum i, HasZero b) => Size i -> [[b]] -> Matrix i b
+ Agda.Termination.SparseMatrix: instance (Arbitrary i, Integral i) => Arbitrary (MIx i)
+ Agda.Termination.SparseMatrix: instance (Arbitrary i, Integral i) => Arbitrary (Size i)
+ Agda.Termination.SparseMatrix: instance (Arbitrary i, Num i, Integral i, Arbitrary b, HasZero b) => Arbitrary (Matrix i b)
+ Agda.Termination.SparseMatrix: instance (CoArbitrary i) => CoArbitrary (MIx i)
+ Agda.Termination.SparseMatrix: instance (CoArbitrary i) => CoArbitrary (Size i)
+ Agda.Termination.SparseMatrix: instance (Eq i) => Eq (MIx i)
+ Agda.Termination.SparseMatrix: instance (Eq i) => Eq (Size i)
+ Agda.Termination.SparseMatrix: instance (Eq i, Eq b) => Eq (Matrix i b)
+ Agda.Termination.SparseMatrix: instance (Integral i, HasZero b, Pretty b) => Pretty (Matrix i b)
+ Agda.Termination.SparseMatrix: instance (Ix i) => Ix (MIx i)
+ Agda.Termination.SparseMatrix: instance (Ord i) => Ord (MIx i)
+ Agda.Termination.SparseMatrix: instance (Ord i) => Ord (Size i)
+ Agda.Termination.SparseMatrix: instance (Ord i, Integral i, Enum i, CoArbitrary b, HasZero b) => CoArbitrary (Matrix i b)
+ Agda.Termination.SparseMatrix: instance (Ord i, Integral i, Enum i, Show i, Show b, HasZero b) => Show (Matrix i b)
+ Agda.Termination.SparseMatrix: instance (Ord i, Ord b) => Ord (Matrix i b)
+ Agda.Termination.SparseMatrix: instance (Show i) => Show (MIx i)
+ Agda.Termination.SparseMatrix: instance (Show i) => Show (Size i)
+ Agda.Termination.SparseMatrix: intersectWith :: (Ord i) => (a -> a -> a) -> Matrix i a -> Matrix i a -> Matrix i a
+ Agda.Termination.SparseMatrix: isEmpty :: (Num i, Ix i) => Matrix i b -> Bool
+ Agda.Termination.SparseMatrix: isSingleton :: (Num i, Ix i) => Matrix i b -> Maybe b
+ Agda.Termination.SparseMatrix: mIxInvariant :: (Ord i, Num i) => MIx i -> Bool
+ Agda.Termination.SparseMatrix: matrix :: (Arbitrary i, Integral i, Arbitrary b, HasZero b) => Size i -> Gen (Matrix i b)
+ Agda.Termination.SparseMatrix: matrixInvariant :: (Num i, Ix i) => Matrix i b -> Bool
+ Agda.Termination.SparseMatrix: matrixUsingRowGen :: (Arbitrary i, Integral i, Arbitrary b, 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: row :: MIx i -> i
+ Agda.Termination.SparseMatrix: rows :: Size i -> i
+ Agda.Termination.SparseMatrix: size :: Matrix i b -> Size i
+ Agda.Termination.SparseMatrix: sizeInvariant :: (Ord i, Num i) => Size i -> Bool
+ Agda.Termination.SparseMatrix: square :: (Ix i) => Matrix i b -> Bool
+ Agda.Termination.SparseMatrix: tests :: IO Bool
+ Agda.Termination.SparseMatrix: toLists :: (Ord i, Integral i, Enum i, HasZero b) => Matrix i b -> [[b]]
+ Agda.Termination.SparseMatrix: transpose :: (Ord i) => Matrix i b -> Matrix i b
+ Agda.TypeChecking.Abstract: instance AbstractTerm Sort
+ Agda.TypeChecking.CompiledClause: Branches :: QName :-> c -> Literal :-> c -> Maybe c -> Case c
+ Agda.TypeChecking.CompiledClause: Case :: Int -> (Case CompiledClauses) -> CompiledClauses
+ Agda.TypeChecking.CompiledClause: Done :: Int -> Term -> CompiledClauses
+ Agda.TypeChecking.CompiledClause: Fail :: CompiledClauses
+ Agda.TypeChecking.CompiledClause: catchAllBranch :: Case c -> Maybe c
+ Agda.TypeChecking.CompiledClause: compile :: Cls -> CompiledClauses
+ Agda.TypeChecking.CompiledClause: compileClauses :: [Clauses] -> CompiledClauses
+ Agda.TypeChecking.CompiledClause: conBranches :: Case c -> QName :-> c
+ Agda.TypeChecking.CompiledClause: data Case c
+ Agda.TypeChecking.CompiledClause: data CompiledClauses
+ Agda.TypeChecking.CompiledClause: instance (Data c) => Data (Case c)
+ Agda.TypeChecking.CompiledClause: instance (Monoid m) => Monoid (Case m)
+ Agda.TypeChecking.CompiledClause: instance (Pretty a) => Pretty (Case a)
+ Agda.TypeChecking.CompiledClause: instance (Pretty a) => Show (Case a)
+ Agda.TypeChecking.CompiledClause: instance Data CompiledClauses
+ Agda.TypeChecking.CompiledClause: instance Functor Case
+ Agda.TypeChecking.CompiledClause: instance Pretty CompiledClauses
+ Agda.TypeChecking.CompiledClause: instance Show CompiledClauses
+ Agda.TypeChecking.CompiledClause: instance Typeable CompiledClauses
+ Agda.TypeChecking.CompiledClause: instance Typeable1 Case
+ Agda.TypeChecking.CompiledClause: litBranches :: Case c -> Literal :-> c
+ Agda.TypeChecking.CompiledClause: nextSplit :: Cls -> Maybe Int
+ Agda.TypeChecking.CompiledClause: splitC :: Int -> Cl -> Case Cl
+ Agda.TypeChecking.CompiledClause: splitOn :: Int -> Cls -> Case Cls
+ Agda.TypeChecking.CompiledClause: type :-> key value = Map key value
+ Agda.TypeChecking.CompiledClause: type Cl = ([Arg Pattern], ClauseBody)
+ Agda.TypeChecking.CompiledClause: type Cls = [Cl]
+ Agda.TypeChecking.CompiledClause.Match: match :: CompiledClauses -> Args -> (Args -> Args) -> Stack -> TCM (Reduced (Blocked Args) Term)
+ Agda.TypeChecking.CompiledClause.Match: match' :: Stack -> TCM (Reduced (Blocked Args) Term)
+ Agda.TypeChecking.CompiledClause.Match: matchCompiled :: CompiledClauses -> Args -> TCM (Reduced (Blocked Args) Term)
+ Agda.TypeChecking.CompiledClause.Match: type Stack = [(CompiledClauses, Args, Args -> Args)]
+ Agda.TypeChecking.Coverage: IrrelevantDatatype :: Type -> SplitError
+ Agda.TypeChecking.Coverage: NoRecordConstructor :: Type -> SplitError
+ Agda.TypeChecking.Datatypes: DataInfo :: QName -> Telescope -> Args -> Telescope -> Args -> DatatypeInfo
+ Agda.TypeChecking.Datatypes: data DatatypeInfo
+ Agda.TypeChecking.Datatypes: datatypeIxTel :: DatatypeInfo -> Telescope
+ Agda.TypeChecking.Datatypes: datatypeIxs :: DatatypeInfo -> Args
+ Agda.TypeChecking.Datatypes: datatypeName :: DatatypeInfo -> QName
+ Agda.TypeChecking.Datatypes: datatypeParTel :: DatatypeInfo -> Telescope
+ Agda.TypeChecking.Datatypes: datatypePars :: DatatypeInfo -> Args
+ Agda.TypeChecking.Datatypes: getConstructorData :: (MonadTCM tcm) => QName -> tcm QName
+ Agda.TypeChecking.Datatypes: getDatatypeInfo :: (MonadTCM tcm) => Type -> tcm (Maybe DatatypeInfo)
+ Agda.TypeChecking.Datatypes: isDatatype :: (MonadTCM tcm) => QName -> tcm Bool
+ Agda.TypeChecking.EtaContract: etaOnce :: (MonadTCM tcm) => Term -> tcm Term
+ Agda.TypeChecking.Forcing: addForcingAnnotations :: Type -> TCM Type
+ Agda.TypeChecking.Forcing: force :: [Nat] -> Type -> Type
+ Agda.TypeChecking.Forcing: forcedVariables :: Term -> TCM [Nat]
+ Agda.TypeChecking.Free: instance (Free a) => Free (Tele a)
+ Agda.TypeChecking.Level: levelType :: LevelKit -> Term
+ Agda.TypeChecking.Level: requireLevels :: TCM LevelKit
+ Agda.TypeChecking.Level: typeName :: LevelKit -> QName
+ Agda.TypeChecking.MetaVars: Levels :: MetaKind
+ Agda.TypeChecking.MetaVars: Records :: MetaKind
+ Agda.TypeChecking.MetaVars: SingletonRecords :: MetaKind
+ Agda.TypeChecking.MetaVars: allMetaKinds :: [MetaKind]
+ Agda.TypeChecking.MetaVars: data MetaKind
+ Agda.TypeChecking.MetaVars: etaExpandBlocked :: (MonadTCM tcm, Reduce t) => Blocked t -> tcm (Blocked t)
+ Agda.TypeChecking.MetaVars: instance Bounded MetaKind
+ Agda.TypeChecking.MetaVars: instance Enum MetaKind
+ Agda.TypeChecking.MetaVars: instance Eq MetaKind
+ Agda.TypeChecking.MetaVars: isEtaExpandable :: (MonadTCM tcm) => MetaId -> tcm Bool
+ Agda.TypeChecking.MetaVars: type FVs = Set Nat
+ Agda.TypeChecking.MetaVars.Occurs: Flex :: OccursCtx
+ Agda.TypeChecking.MetaVars.Occurs: Rigid :: OccursCtx
+ Agda.TypeChecking.MetaVars.Occurs: abort :: OccursCtx -> TypeError -> TCM ()
+ Agda.TypeChecking.MetaVars.Occurs: data OccursCtx
+ Agda.TypeChecking.MetaVars.Occurs: hasBadRigid :: [Nat] -> Term -> Bool
+ Agda.TypeChecking.MetaVars.Occurs: instance Eq OccursCtx
+ Agda.TypeChecking.MetaVars.Occurs: killArgs :: [Bool] -> MetaId -> TCM Bool
+ Agda.TypeChecking.MetaVars.Occurs: killedType :: [(Arg (String, Type), Bool)] -> Type -> ([Arg Bool], Type)
+ Agda.TypeChecking.MetaVars.Occurs: performKill :: [Arg Bool] -> MetaId -> Type -> TCM ()
+ Agda.TypeChecking.Monad.Base: ArgsCmp :: [Polarity] -> Type -> Args -> Args -> Constraint
+ Agda.TypeChecking.Monad.Base: DuplicateImports :: QName -> [ImportedName] -> TypeError
+ Agda.TypeChecking.Monad.Base: LevelCmp :: Comparison -> Term -> Term -> Constraint
+ Agda.TypeChecking.Monad.Base: SplitOnIrrelevant :: Pattern -> (Arg Type) -> TypeError
+ Agda.TypeChecking.Monad.Base: UnequalLevel :: Comparison -> Term -> Term -> TypeError
+ Agda.TypeChecking.Monad.Base: UnequalRelevance :: Type -> Type -> TypeError
+ Agda.TypeChecking.Monad.Base: VariableIsIrrelevant :: Name -> TypeError
+ Agda.TypeChecking.Monad.Base: catchError_ :: TCM a -> (TCErr -> TCM a) -> TCM a
+ Agda.TypeChecking.Monad.Base: defCompiled :: Definition -> Maybe CompiledClauses
+ Agda.TypeChecking.Monad.Base: defIsRecord :: Defn -> Bool
+ Agda.TypeChecking.Monad.Base: envCall :: TCEnv -> Maybe (Closure Call)
+ Agda.TypeChecking.Monad.Base: envEtaContractImplicit :: TCEnv -> Bool
+ Agda.TypeChecking.Monad.Base: envRange :: TCEnv -> Range
+ Agda.TypeChecking.Monad.Base: funCompiled :: Defn -> CompiledClauses
+ Agda.TypeChecking.Monad.Base: iPragmaOptions :: Interface -> [OptionsPragma]
+ Agda.TypeChecking.Monad.Base: mvPermutation :: MetaVariable -> Permutation
+ Agda.TypeChecking.Monad.Base: recEtaEquality :: Defn -> Bool
+ Agda.TypeChecking.Monad.Base: recNamedCon :: Defn -> Bool
+ Agda.TypeChecking.Monad.Builtin: primAgdaTerm :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTermCon :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTermDef :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTermLam :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTermPi :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTermSort :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTermUnsupported :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Builtin: primAgdaTermVar :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Builtin: primArg :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Builtin: primArgArg :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Builtin: primFlat :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Builtin: primInf :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Builtin: primQName :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Builtin: primSharp :: (MonadTCM tcm) => tcm Term
+ Agda.TypeChecking.Monad.Context: applyRelevanceToContext :: (MonadTCM tcm) => Relevance -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Context: wakeIrrelevantVars :: (MonadTCM tcm) => tcm a -> tcm a
+ Agda.TypeChecking.Monad.MetaVars: isInstantiatedMeta :: (MonadTCM tcm) => MetaId -> tcm Bool
+ Agda.TypeChecking.Monad.Options: CurrentDir :: RelativeTo
+ Agda.TypeChecking.Monad.Options: ProjectRoot :: AbsolutePath -> RelativeTo
+ Agda.TypeChecking.Monad.Options: data RelativeTo
+ Agda.TypeChecking.Monad.Options: doEtaContractImplicit :: (MonadTCM tcm) => tcm a -> tcm a
+ Agda.TypeChecking.Monad.Options: dontEtaContractImplicit :: (MonadTCM tcm) => tcm a -> tcm a
+ Agda.TypeChecking.Monad.Options: hasVerbosity :: (MonadTCM tcm) => VerboseKey -> Int -> tcm Bool
+ Agda.TypeChecking.Monad.Options: pragmaOptions :: (MonadTCM tcm) => tcm PragmaOptions
+ Agda.TypeChecking.Monad.Options: setIncludeDirs :: (MonadTCM tcm) => [FilePath] -> RelativeTo -> tcm ()
+ Agda.TypeChecking.Monad.Options: setPragmaOptions :: (MonadTCM tcm) => PragmaOptions -> tcm ()
+ Agda.TypeChecking.Monad.Options: shouldEtaContractImplicit :: (MonadTCM tcm) => tcm Bool
+ Agda.TypeChecking.Monad.Options: verboseBracket :: (MonadTCM tcm) => VerboseKey -> Int -> String -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Trace: interestingCall :: Closure Call -> Bool
+ Agda.TypeChecking.Positivity: instance (ComputeOccurrences a) => ComputeOccurrences (Tele a)
+ Agda.TypeChecking.Pretty: instance (PrettyTCM a, PrettyTCM b) => PrettyTCM (Judgement a b)
+ Agda.TypeChecking.Pretty: instance PrettyTCM ClauseBody
+ Agda.TypeChecking.Pretty: instance PrettyTCM MetaId
+ Agda.TypeChecking.Primitive: instance FromTerm QName
+ Agda.TypeChecking.Primitive: instance PrimTerm QName
+ Agda.TypeChecking.Primitive: instance ToTerm QName
+ Agda.TypeChecking.Quote: agdaTermType :: TCM Type
+ Agda.TypeChecking.Quote: qNameType :: TCM Type
+ Agda.TypeChecking.Quote: quoteName :: QName -> Term
+ Agda.TypeChecking.Quote: quoteTerm :: Term -> TCM Term
+ Agda.TypeChecking.Quote: quoteType :: Type -> TCM Term
+ Agda.TypeChecking.RecordPatterns: instance Applicative RecPatM
+ Agda.TypeChecking.RecordPatterns: instance Eq Kind
+ Agda.TypeChecking.RecordPatterns: instance Functor RecPatM
+ Agda.TypeChecking.RecordPatterns: instance Monad RecPatM
+ Agda.TypeChecking.RecordPatterns: instance MonadIO RecPatM
+ Agda.TypeChecking.RecordPatterns: instance MonadReader TCEnv RecPatM
+ Agda.TypeChecking.RecordPatterns: instance MonadState TCState RecPatM
+ Agda.TypeChecking.RecordPatterns: instance MonadTCM RecPatM
+ Agda.TypeChecking.RecordPatterns: translateRecordPatterns :: (MonadTCM tcm) => Clause -> tcm Clauses
+ Agda.TypeChecking.Records: isEtaRecord :: (MonadTCM tcm) => QName -> tcm Bool
+ Agda.TypeChecking.Records: isGeneratedRecordConstructor :: (MonadTCM tcm) => QName -> tcm Bool
+ Agda.TypeChecking.Records: isSingletonRecord :: (MonadTCM tcm) => QName -> Args -> tcm (Either MetaId Bool)
+ Agda.TypeChecking.Reduce: instance (InstantiateFull a) => InstantiateFull (Case a)
+ Agda.TypeChecking.Reduce: instance (InstantiateFull a) => InstantiateFull (Tele a)
+ Agda.TypeChecking.Reduce: instance (Normalise a) => Normalise (Maybe a)
+ Agda.TypeChecking.Reduce: instance (Normalise a) => Normalise (Tele a)
+ Agda.TypeChecking.Reduce: instance InstantiateFull Clauses
+ Agda.TypeChecking.Reduce: instance InstantiateFull CompiledClauses
+ Agda.TypeChecking.Reduce: instance InstantiateFull Pattern
+ Agda.TypeChecking.Rules.Builtin: bindBuiltinDummyConstructor :: Expr -> TCM Term
+ Agda.TypeChecking.Rules.Builtin: bindPostulatedName :: String -> Expr -> (QName -> Definition -> TCM Term) -> TCM ()
+ Agda.TypeChecking.Rules.Builtin.Coinduction: CoinductionKit :: QName -> QName -> QName -> CoinductionKit
+ Agda.TypeChecking.Rules.Builtin.Coinduction: bindBuiltinFlat :: Expr -> TCM ()
+ Agda.TypeChecking.Rules.Builtin.Coinduction: bindBuiltinInf :: Expr -> TCM ()
+ Agda.TypeChecking.Rules.Builtin.Coinduction: bindBuiltinSharp :: Expr -> TCM ()
+ Agda.TypeChecking.Rules.Builtin.Coinduction: coinductionKit :: TCM (Maybe CoinductionKit)
+ Agda.TypeChecking.Rules.Builtin.Coinduction: data CoinductionKit
+ Agda.TypeChecking.Rules.Builtin.Coinduction: nameOfFlat :: CoinductionKit -> QName
+ Agda.TypeChecking.Rules.Builtin.Coinduction: nameOfInf :: CoinductionKit -> QName
+ Agda.TypeChecking.Rules.Builtin.Coinduction: nameOfSharp :: CoinductionKit -> QName
+ Agda.TypeChecking.Rules.Builtin.Coinduction: typeOfFlat :: TCM Type
+ Agda.TypeChecking.Rules.Builtin.Coinduction: typeOfInf :: TCM Type
+ Agda.TypeChecking.Rules.Builtin.Coinduction: typeOfSharp :: TCM Type
+ Agda.TypeChecking.Rules.LHS.Problem: focusType :: Focus -> Type
+ Agda.TypeChecking.Rules.Term: checkConstructorApplication :: Expr -> Type -> QName -> [NamedArg Expr] -> TCM Term
+ Agda.TypeChecking.Rules.Term: checkTelescope_ :: Telescope -> (Telescope -> TCM a) -> TCM a
+ Agda.TypeChecking.Rules.Term: checkTypedBinding_ :: Hiding -> TypedBinding -> ([(String, Type)] -> TCM a) -> TCM a
+ Agda.TypeChecking.Rules.Term: checkTypedBindings_ :: TypedBindings -> (Telescope -> TCM a) -> TCM a
+ Agda.TypeChecking.Serialise: instance [incoherent] (EmbPrj a) => EmbPrj (Case a)
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj Clauses
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj CompiledClauses
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj Fixity'
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj GenPart
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj Int32
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj Relevance
+ Agda.TypeChecking.Substitute: instance (Abstract a) => Abstract (Case a)
+ Agda.TypeChecking.Substitute: instance (Apply a) => Apply (Case a)
+ Agda.TypeChecking.Substitute: instance (Raise a) => Raise (Tele a)
+ Agda.TypeChecking.Substitute: instance (Subst a) => Apply (Tele a)
+ Agda.TypeChecking.Substitute: instance (Subst a) => Subst (Abs a)
+ Agda.TypeChecking.Substitute: instance (Subst a) => Subst (Tele a)
+ Agda.TypeChecking.Substitute: instance Abstract Clauses
+ Agda.TypeChecking.Substitute: instance Abstract CompiledClauses
+ Agda.TypeChecking.Substitute: instance Apply Clauses
+ Agda.TypeChecking.Substitute: instance Apply CompiledClauses
+ Agda.TypeChecking.Substitute: instance Raise Pattern
+ Agda.TypeChecking.Substitute: telView' :: Type -> TelView
+ Agda.TypeChecking.Substitute: type Substitution = [Term]
+ Agda.TypeChecking.Telescope: piApplyM :: (MonadTCM tcm) => Type -> Args -> tcm Type
+ Agda.TypeChecking.Telescope: telView :: (MonadTCM tcm) => Type -> tcm TelView
+ Agda.TypeChecking.UniversePolymorphism: compareLevel :: (MonadTCM tcm) => Comparison -> Term -> Term -> tcm Constraints
+ Agda.TypeChecking.UniversePolymorphism: mlevel :: (MonadTCM tcm) => tcm (Maybe Term)
+ Agda.TypeChecking.UniversePolymorphism: solveLevelConstraints :: TCM ()
+ Agda.TypeChecking.UniversePolymorphism: warshallConstraint :: Constraint -> TCM [Constraint]
+ Agda.Utils.Either: allRight :: [Either a b] -> Either [Either a b] [b]
+ Agda.Utils.List: extractNthElement' :: (Integral i) => i -> [a] -> ([a], a, [a])
+ Agda.Utils.List: genericElemIndex :: (Eq a, Integral i) => a -> [a] -> Maybe i
+ Agda.Utils.List: mhead :: [a] -> Maybe a
+ Agda.Utils.List: prop_genericElemIndex :: Integer -> [Integer] -> Property
+ Agda.Utils.Monad: fmapM :: (Traversable f, Applicative m) => (a -> m b) -> f a -> m (f b)
+ Agda.Utils.Permutation: takeP :: Integer -> Permutation -> Permutation
+ Agda.Utils.Pretty: align :: Int -> [(String, Doc)] -> Doc
- Agda.Auto.Auto: auto :: InteractionId -> Range -> String -> TCM ([(InteractionId, String)], Maybe String)
+ Agda.Auto.Auto: auto :: InteractionId -> Range -> String -> TCM (Either [(InteractionId, String)] (Either [String] String), Maybe String)
- Agda.Auto.Convert: S :: MapS QName (TMode, ConstRef O) -> MapS MetaId (Metavar (Exp O) (RefInfo O), Maybe (MExp O, [MExp O]), [MetaId]) -> MapS Int (Maybe (Bool, MExp O, MExp O)) -> Maybe MetaId -> S
+ Agda.Auto.Convert: S :: MapS QName (TMode, ConstRef O) -> MapS MetaId (Metavar (Exp O) (RefInfo O), Maybe (MExp O, [MExp O]), [MetaId]) -> MapS Int (Maybe (Bool, MExp O, MExp O)) -> Maybe MetaId -> MetaId -> S
- Agda.Auto.Convert: frommyExps :: Nat -> MArgList O -> IO Args
+ Agda.Auto.Convert: frommyExps :: Nat -> MArgList O -> Term -> IO Term
- Agda.Auto.Convert: tomy :: MetaId -> [(Bool, QName)] -> TCM ([ConstRef O], Map MetaId (Metavar (Exp O) (RefInfo O), MExp O, [MExp O], [MetaId]), [(Bool, MExp O, MExp O)], Map QName (TMode, ConstRef O))
+ Agda.Auto.Convert: tomy :: MetaId -> [(Bool, QName)] -> [Type] -> TCM ([ConstRef O], [MExp O], Map MetaId (Metavar (Exp O) (RefInfo O), MExp O, [MExp O], [MetaId]), [(Bool, MExp O, MExp O)], Map QName (TMode, ConstRef O))
- Agda.Auto.NarrowingSearch: CTree :: IORef (PrioMeta blk) -> IORef (Maybe (SubConstraints blk)) -> IORef (Maybe (CTree blk)) -> CTree blk
+ Agda.Auto.NarrowingSearch: CTree :: IORef (PrioMeta blk) -> IORef (Maybe (SubConstraints blk)) -> IORef (Maybe (CTree blk)) -> IORef [OKMeta blk] -> CTree blk
- Agda.Auto.NarrowingSearch: Metavar :: IORef (Maybe a) -> IORef Bool -> IORef [(QPB a blk, CTree blk)] -> IORef (Maybe (SubConstraints blk)) -> Metavar a blk
+ Agda.Auto.NarrowingSearch: Metavar :: IORef (Maybe a) -> IORef Bool -> IORef [(QPB a blk, Maybe (CTree blk))] -> IORef [SubConstraints blk] -> IORef [(Int, RefCreateEnv blk a)] -> Metavar a blk
- Agda.Auto.NarrowingSearch: PBlocked :: (Metavar b blk) -> (BlkInfo blk) -> PrintConstr -> (MetaEnv (PB blk)) -> PB blk
+ Agda.Auto.NarrowingSearch: PBlocked :: (Metavar b blk) -> (BlkInfo blk) -> (MetaEnv (PB blk)) -> PB blk
- Agda.Auto.NarrowingSearch: PDoubleBlocked :: (Metavar b blk) -> (Metavar b blk) -> (MetaEnv (PB blk)) -> PB blk
+ Agda.Auto.NarrowingSearch: PDoubleBlocked :: (Metavar b1 blk) -> (Metavar b2 blk) -> (MetaEnv (PB blk)) -> PB blk
- Agda.Auto.NarrowingSearch: QPBlocked :: (BlkInfo blk) -> PrintConstr -> (MetaEnv (PB blk)) -> QPB b blk
+ Agda.Auto.NarrowingSearch: QPBlocked :: (BlkInfo blk) -> (MetaEnv (PB blk)) -> QPB b blk
- Agda.Auto.NarrowingSearch: calc :: MetaEnv (PB blk) -> CTree blk -> Undo Bool
+ Agda.Auto.NarrowingSearch: calc :: MetaEnv (PB blk) -> Maybe (CTree blk) -> Undo (Maybe [OKMeta blk])
- Agda.Auto.NarrowingSearch: doubleblock :: (Refinable a blk) => MM a blk -> MM a blk -> MetaEnv (PB blk) -> MetaEnv (PB blk)
+ Agda.Auto.NarrowingSearch: doubleblock :: (Refinable a blk, Refinable b blk) => MM a blk -> MM b blk -> MetaEnv (PB blk) -> MetaEnv (PB blk)
- Agda.Auto.NarrowingSearch: mbpcase :: Prio -> MetaEnv (MB a blk) -> PrintConstr -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)
+ Agda.Auto.NarrowingSearch: mbpcase :: Prio -> Maybe blk -> MetaEnv (MB a blk) -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)
- Agda.Auto.NarrowingSearch: mcompoint :: Metavar a blk -> IORef (Maybe (SubConstraints blk))
+ Agda.Auto.NarrowingSearch: mcompoint :: Metavar a blk -> IORef [SubConstraints blk]
- Agda.Auto.NarrowingSearch: mmbpcase :: MetaEnv (MB a blk) -> MetaEnv (PB blk) -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)
+ Agda.Auto.NarrowingSearch: mmbpcase :: MetaEnv (MB a blk) -> (forall b. (Refinable b blk) => MM b blk -> MetaEnv (PB blk)) -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)
- Agda.Auto.NarrowingSearch: mmpcase :: (Refinable a blk) => BlkInfo blk -> MM a blk -> PrintConstr -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)
+ Agda.Auto.NarrowingSearch: mmpcase :: (Refinable a blk) => BlkInfo blk -> MM a blk -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)
- Agda.Auto.NarrowingSearch: mobs :: Metavar a blk -> IORef [(QPB a blk, CTree blk)]
+ Agda.Auto.NarrowingSearch: mobs :: Metavar a blk -> IORef [(QPB a blk, Maybe (CTree blk))]
- Agda.Auto.NarrowingSearch: newMeta :: Maybe (SubConstraints blk) -> IO (Metavar a blk)
+ Agda.Auto.NarrowingSearch: newMeta :: IORef [SubConstraints blk] -> IO (Metavar a blk)
- Agda.Auto.NarrowingSearch: propagatePrio :: CTree blk -> Undo ()
+ Agda.Auto.NarrowingSearch: propagatePrio :: CTree blk -> Undo [OKMeta blk]
- Agda.Auto.NarrowingSearch: recalc :: (QPB a blk, CTree blk) -> Undo Bool
+ Agda.Auto.NarrowingSearch: recalc :: (QPB a blk, Maybe (CTree blk)) -> Undo Bool
- Agda.Auto.NarrowingSearch: recalcs :: [(QPB a blk, CTree blk)] -> Undo Bool
+ Agda.Auto.NarrowingSearch: recalcs :: [(QPB a blk, Maybe (CTree blk))] -> Undo Bool
- Agda.Auto.NarrowingSearch: reccalc :: MetaEnv (PB blk) -> CTree blk -> Undo Bool
+ Agda.Auto.NarrowingSearch: reccalc :: MetaEnv (PB blk) -> Maybe (CTree blk) -> Undo Bool
- Agda.Auto.NarrowingSearch: refinements :: (Refinable a blk) => blk -> [blk] -> IO [(Int, RefCreateEnv blk a)]
+ Agda.Auto.NarrowingSearch: refinements :: (Refinable a blk) => blk -> [blk] -> Metavar a blk -> IO [(Int, RefCreateEnv blk a)]
- Agda.Auto.NarrowingSearch: topSearch :: IORef Int -> IORef Int -> HandleSol -> HandlePartSol -> Bool -> blk -> MetaEnv (PB blk) -> Int -> Int -> IO Bool
+ Agda.Auto.NarrowingSearch: topSearch :: IORef Int -> IORef Int -> HandleSol -> blk -> MetaEnv (PB blk) -> Int -> Int -> IO Bool
- Agda.Auto.NarrowingSearch: type RefCreateEnv blk = StateT (Maybe (SubConstraints blk), Int) IO
+ Agda.Auto.NarrowingSearch: type RefCreateEnv blk = StateT (IORef [SubConstraints blk], Int) IO
- Agda.Auto.Syntax: App :: (Elr o) -> (MArgList o) -> Exp o
+ Agda.Auto.Syntax: App :: (Maybe (UId o)) -> (OKHandle (RefInfo o)) -> (Elr o) -> (MArgList o) -> Exp o
- Agda.Auto.Syntax: CALConcat :: (Clos (MArgList o) o) -> (CArgList o) -> CArgList o
+ Agda.Auto.Syntax: CALConcat :: (Clos (MArgList o) o) -> (ICArgList o) -> ICArgList o
- Agda.Auto.Syntax: CALNil :: CArgList o
+ Agda.Auto.Syntax: CALNil :: ICArgList o
- Agda.Auto.Syntax: ConstDef :: String -> o -> MExp o -> DeclCont o -> ConstDef o
+ Agda.Auto.Syntax: ConstDef :: String -> o -> MExp o -> DeclCont o -> Nat -> ConstDef o
- Agda.Auto.Syntax: Constructor :: DeclCont o
+ Agda.Auto.Syntax: Constructor :: Nat -> DeclCont o
- Agda.Auto.Syntax: Datatype :: [ConstRef o] -> DeclCont o
+ Agda.Auto.Syntax: Datatype :: [ConstRef o] -> [ConstRef o] -> DeclCont o
- Agda.Auto.Syntax: Def :: Nat -> [Clause o] -> DeclCont o
+ Agda.Auto.Syntax: Def :: Nat -> [Clause o] -> (Maybe Nat) -> (Maybe Nat) -> DeclCont o
- Agda.Auto.Syntax: HNALConPar :: (CArgList o) -> HNArgList o
+ Agda.Auto.Syntax: HNALConPar :: (ICArgList o) -> HNArgList o
- Agda.Auto.Syntax: HNALCons :: (CExp o) -> (CArgList o) -> HNArgList o
+ Agda.Auto.Syntax: HNALCons :: FMode -> (ICExp o) -> (ICArgList o) -> HNArgList o
- Agda.Auto.Syntax: HNApp :: (Elr o) -> (CArgList o) -> HNExp o
+ Agda.Auto.Syntax: HNApp :: [Maybe (UId o)] -> (Elr o) -> (ICArgList o) -> HNExp o
- Agda.Auto.Syntax: HNLam :: (Abs (CExp o)) -> HNExp o
+ Agda.Auto.Syntax: HNLam :: [Maybe (UId o)] -> FMode -> (Abs (ICExp o)) -> HNExp o
- Agda.Auto.Syntax: HNPi :: FMode -> Bool -> (CExp o) -> (Abs (CExp o)) -> HNExp o
+ Agda.Auto.Syntax: HNPi :: [Maybe (UId o)] -> FMode -> Bool -> (ICExp o) -> (Abs (ICExp o)) -> HNExp o
- Agda.Auto.Syntax: PatVar :: Pat o
+ Agda.Auto.Syntax: PatVar :: String -> Pat o
- Agda.Auto.Syntax: Pi :: FMode -> Bool -> (MExp o) -> (Abs (MExp o)) -> Exp o
+ Agda.Auto.Syntax: Pi :: (Maybe (UId o)) -> FMode -> Bool -> (MExp o) -> (Abs (MExp o)) -> Exp o
- Agda.Auto.Syntax: RIEnv :: [ConstRef o] -> RefInfo o
+ Agda.Auto.Syntax: RIEnv :: [(ConstRef o, HintMode)] -> Nat -> Maybe (EqReasoningConsts o) -> RefInfo o
- Agda.Auto.Syntax: RIMainInfo :: Nat -> (HNExp o) -> RefInfo o
+ Agda.Auto.Syntax: RIMainInfo :: Nat -> (HNExp o) -> Bool -> RefInfo o
- Agda.Auto.Syntax: RIUnifInfo :: (Metavar a (RefInfo o)) -> [CAction o] -> (HNExp o) -> RefInfo o
+ Agda.Auto.Syntax: RIUnifInfo :: [CAction o] -> (HNExp o) -> RefInfo o
- Agda.Auto.Syntax: Sub :: (CExp o) -> CAction o
+ Agda.Auto.Syntax: Sub :: (ICExp o) -> CAction o
- Agda.Auto.Syntax: type CExp o = Clos (MExp o) o
+ Agda.Auto.Syntax: type CExp o = TrBr (ICExp o) o
- Agda.Auto.Typecheck: HNDone :: (HNExp o) -> HNRes o
+ Agda.Auto.Typecheck: HNDone :: (Maybe (Metavar (Exp o) (RefInfo o))) -> (HNExp o) -> HNRes o
- Agda.Auto.Typecheck: HNMeta :: (CExp o) -> (CArgList o) -> HNRes o
+ Agda.Auto.Typecheck: HNMeta :: (ICExp o) -> (ICArgList o) -> [Maybe (UId o)] -> HNRes o
- Agda.Auto.Typecheck: PEConApp :: (CExp o) -> (ConstRef o) -> [PEval o] -> PEval o
+ Agda.Auto.Typecheck: PEConApp :: (ICExp o) -> (ConstRef o) -> [PEval o] -> PEval o
- Agda.Auto.Typecheck: PENo :: (CExp o) -> PEval o
+ Agda.Auto.Typecheck: PENo :: (ICExp o) -> PEval o
- Agda.Auto.Typecheck: comp' :: CExp o -> CExp o -> EE (MyPB o)
+ Agda.Auto.Typecheck: comp' :: Bool -> CExp o -> CExp o -> EE (MyPB o)
- Agda.Auto.Typecheck: getAllArgs :: CArgList o -> EE (MyMB [PEval o] o)
+ Agda.Auto.Typecheck: getAllArgs :: ICArgList o -> EE (MyMB [ICExp o] o)
- Agda.Auto.Typecheck: getNArgs :: Nat -> CArgList o -> EE (MyMB (Maybe ([CExp o], CArgList o)) o)
+ Agda.Auto.Typecheck: getNArgs :: Nat -> ICArgList o -> EE (MyMB (Maybe ([ICExp o], ICArgList o)) o)
- Agda.Auto.Typecheck: hnarglist :: CArgList o -> EE (MyMB (HNArgList o) o)
+ Agda.Auto.Typecheck: hnarglist :: ICArgList o -> EE (MyMB (HNArgList o) o)
- Agda.Auto.Typecheck: hnc :: Bool -> CExp o -> CArgList o -> EE (MyMB (HNRes o) o)
+ Agda.Auto.Typecheck: hnc :: Bool -> ICExp o -> ICArgList o -> [Maybe (UId o)] -> EE (MyMB (HNRes o) o)
- Agda.Auto.Typecheck: hnn :: CExp o -> EE (MyMB (HNExp o) o)
+ Agda.Auto.Typecheck: hnn :: ICExp o -> EE (MyMB (HNExp o) o)
- Agda.Auto.Typecheck: hnn' :: CExp o -> CArgList o -> EE (MyMB (HNExp o) o)
+ Agda.Auto.Typecheck: hnn' :: ICExp o -> ICArgList o -> EE (MyMB (HNExp o, HNNBlks o) o)
- Agda.Auto.Typecheck: iotastep :: HNExp o -> EE (MyMB (Maybe (CExp o, CArgList o)) o)
+ Agda.Auto.Typecheck: iotastep :: Bool -> HNExp o -> EE (MyMB (Either (ICExp o, ICArgList o) (HNNBlks o)) o)
- Agda.Auto.Typecheck: tcSearch :: Ctx o -> CExp o -> MExp o -> EE (MyPB o)
+ Agda.Auto.Typecheck: tcSearch :: Bool -> Ctx o -> CExp o -> MExp o -> EE (MyPB o)
- Agda.Auto.Typecheck: tcargs :: Bool -> Ctx o -> CExp o -> CExp o -> MArgList o -> EE (MyPB o)
+ Agda.Auto.Typecheck: tcargs :: Nat -> Bool -> Ctx o -> CExp o -> MArgList o -> MExp o -> Bool -> (CExp o -> MExp o -> EE (MyPB o)) -> EE (MyPB o)
- Agda.Compiler.MAlonzo.Compiler: definition :: Definition -> TCM [HsDecl]
+ Agda.Compiler.MAlonzo.Compiler: definition :: Maybe CoinductionKit -> Definition -> TCM [HsDecl]
- Agda.Interaction.GhciTop: Interaction :: Bool -> TCM (Maybe ModuleName) -> Interaction
+ Agda.Interaction.GhciTop: Interaction :: Maybe [FilePath] -> TCM (Maybe ModuleName) -> Interaction
- Agda.Interaction.GhciTop: cmd_write_highlighting_info :: FilePath -> FilePath -> Interaction
+ Agda.Interaction.GhciTop: cmd_write_highlighting_info :: [FilePath] -> FilePath -> FilePath -> Interaction
- Agda.Interaction.GhciTop: prettyContext :: Rewrite -> InteractionId -> TCM Doc
+ Agda.Interaction.GhciTop: prettyContext :: Rewrite -> Bool -> InteractionId -> TCM Doc
- Agda.Interaction.Imports: buildInterface :: TopLevelInfo -> HighlightingInfo -> Set String -> TCM Interface
+ Agda.Interaction.Imports: buildInterface :: TopLevelInfo -> HighlightingInfo -> Set String -> [OptionsPragma] -> TCM Interface
- Agda.Interaction.Imports: typeCheck :: FilePath -> RelativeTo -> Maybe [AbsolutePath] -> TCM (Interface, Maybe Warnings)
+ Agda.Interaction.Imports: typeCheck :: AbsolutePath -> TCM (Interface, Maybe Warnings)
- Agda.Interaction.Options: Options :: String -> Maybe FilePath -> [FilePath] -> Bool -> Bool -> Bool -> Trie String Int -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> FilePath -> Maybe FilePath -> Bool -> Bool -> Bool -> Bool -> Maybe FilePath -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> [String] -> CommandLineOptions
+ Agda.Interaction.Options: Options :: String -> Maybe FilePath -> Either [FilePath] [AbsolutePath] -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe FilePath -> Bool -> Bool -> FilePath -> Maybe FilePath -> Bool -> Bool -> [String] -> PragmaOptions -> CommandLineOptions
- Agda.Interaction.Options: optAllowUnsolved :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: optAllowUnsolved :: PragmaOptions -> Bool
- Agda.Interaction.Options: optCompletenessCheck :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: optCompletenessCheck :: PragmaOptions -> Bool
- Agda.Interaction.Options: optDisablePositivity :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: optDisablePositivity :: PragmaOptions -> Bool
- Agda.Interaction.Options: optIncludeDirs :: CommandLineOptions -> [FilePath]
+ Agda.Interaction.Options: optIncludeDirs :: CommandLineOptions -> Either [FilePath] [AbsolutePath]
- Agda.Interaction.Options: optProofIrrelevance :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: optProofIrrelevance :: PragmaOptions -> Bool
- Agda.Interaction.Options: optShowImplicit :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: optShowImplicit :: PragmaOptions -> Bool
- Agda.Interaction.Options: optSizedTypes :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: optSizedTypes :: PragmaOptions -> Bool
- Agda.Interaction.Options: optTerminationCheck :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: optTerminationCheck :: PragmaOptions -> Bool
- Agda.Interaction.Options: optUniverseCheck :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: optUniverseCheck :: PragmaOptions -> Bool
- Agda.Interaction.Options: optUniversePolymorphism :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: optUniversePolymorphism :: PragmaOptions -> Bool
- Agda.Interaction.Options: optUnreachableCheck :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: optUnreachableCheck :: PragmaOptions -> Bool
- Agda.Interaction.Options: optVerbose :: CommandLineOptions -> Trie String Int
+ Agda.Interaction.Options: optVerbose :: PragmaOptions -> Verbosity
- Agda.Interaction.Options: parsePluginOptions :: String -> [String] -> opts -> [OptDescr (Flag opts)] -> Either String opts
+ Agda.Interaction.Options: parsePluginOptions :: [String] -> [OptDescr (Flag opts)] -> Flag opts
- Agda.Interaction.Options: parsePragmaOptions :: [String] -> CommandLineOptions -> Either String CommandLineOptions
+ Agda.Interaction.Options: parsePragmaOptions :: [String] -> CommandLineOptions -> Either String PragmaOptions
- Agda.Interaction.Options: parseStandardOptions :: String -> [String] -> Either String CommandLineOptions
+ Agda.Interaction.Options: parseStandardOptions :: [String] -> Either String CommandLineOptions
- Agda.Syntax.Abstract: DataDef :: DefInfo -> QName -> Induction -> [LamBinding] -> [Constructor] -> Definition
+ Agda.Syntax.Abstract: DataDef :: DefInfo -> QName -> [LamBinding] -> [Constructor] -> Definition
- Agda.Syntax.Abstract: Field :: DefInfo -> Hiding -> QName -> Expr -> Declaration
+ Agda.Syntax.Abstract: Field :: DefInfo -> QName -> (Arg Expr) -> Declaration
- Agda.Syntax.Abstract: TypedBindings :: Range -> Hiding -> [TypedBinding] -> TypedBindings
+ Agda.Syntax.Abstract: TypedBindings :: Range -> (Arg [TypedBinding]) -> TypedBindings
- Agda.Syntax.Abstract.Name: Name :: NameId -> Name -> Range -> Fixity -> Name
+ Agda.Syntax.Abstract.Name: Name :: NameId -> Name -> Range -> Fixity' -> Name
- Agda.Syntax.Abstract.Name: nameFixity :: Name -> Fixity
+ Agda.Syntax.Abstract.Name: nameFixity :: Name -> Fixity'
- Agda.Syntax.Common: Arg :: Hiding -> e -> Arg e
+ Agda.Syntax.Common: Arg :: Hiding -> Relevance -> e -> Arg e
- Agda.Syntax.Concrete: BName :: Name -> Fixity -> BoundName
+ Agda.Syntax.Concrete: BName :: Name -> Fixity' -> BoundName
- Agda.Syntax.Concrete: Field :: Hiding -> Name -> Expr -> Declaration
+ Agda.Syntax.Concrete: Field :: Name -> (Arg Expr) -> Declaration
- Agda.Syntax.Concrete: TypedBindings :: !Range -> Hiding -> [TypedBinding] -> TypedBindings
+ Agda.Syntax.Concrete: TypedBindings :: !Range -> (Arg [TypedBinding]) -> TypedBindings
- Agda.Syntax.Concrete: bnameFixity :: BoundName -> Fixity
+ Agda.Syntax.Concrete: bnameFixity :: BoundName -> Fixity'
- Agda.Syntax.Concrete.Definitions: Axiom :: Range -> Fixity -> Access -> IsAbstract -> Name -> Expr -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: Axiom :: Range -> Fixity' -> Access -> IsAbstract -> Name -> Expr -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: DataDef :: Range -> Induction -> Fixity -> Access -> IsAbstract -> Name -> [LamBinding] -> [NiceConstructor] -> NiceDefinition
+ Agda.Syntax.Concrete.Definitions: DataDef :: Range -> Fixity' -> Access -> IsAbstract -> Name -> [LamBinding] -> [NiceConstructor] -> NiceDefinition
- Agda.Syntax.Concrete.Definitions: FunDef :: Range -> [Declaration] -> Fixity -> Access -> IsAbstract -> Name -> [Clause] -> NiceDefinition
+ Agda.Syntax.Concrete.Definitions: FunDef :: Range -> [Declaration] -> Fixity' -> Access -> IsAbstract -> Name -> [Clause] -> NiceDefinition
- Agda.Syntax.Concrete.Definitions: MultipleFixityDecls :: [(Name, [Fixity])] -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: MultipleFixityDecls :: [(Name, [Fixity'])] -> DeclarationException
- Agda.Syntax.Concrete.Definitions: NiceField :: Range -> Fixity -> Access -> IsAbstract -> Hiding -> Name -> Expr -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: NiceField :: Range -> Fixity' -> Access -> IsAbstract -> Name -> (Arg Expr) -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: PrimitiveFunction :: Range -> Fixity -> Access -> IsAbstract -> Name -> Expr -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: PrimitiveFunction :: Range -> Fixity' -> Access -> IsAbstract -> Name -> Expr -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: RecDef :: Range -> Fixity -> Access -> IsAbstract -> Name -> (Maybe NiceConstructor) -> [LamBinding] -> [NiceDeclaration] -> NiceDefinition
+ Agda.Syntax.Concrete.Definitions: RecDef :: Range -> Fixity' -> Access -> IsAbstract -> Name -> (Maybe NiceConstructor) -> [LamBinding] -> [NiceDeclaration] -> NiceDefinition
- Agda.Syntax.Concrete.Operators.Parser: binop :: (IsExpr e) => ReadP e e -> ReadP e (e -> e -> e)
+ Agda.Syntax.Concrete.Operators.Parser: binop :: (IsExpr e) => ReadP e (NewNotation, Range, [e]) -> ReadP e (e -> e -> ReadP a e)
- Agda.Syntax.Concrete.Operators.Parser: infixP :: (IsExpr e) => ReadP e e -> ReadP e e -> ReadP 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 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 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 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: opP :: (IsExpr e) => ReadP e e -> Name -> ReadP e e
+ Agda.Syntax.Concrete.Operators.Parser: opP :: (IsExpr e) => ReadP e e -> NewNotation -> ReadP e (NewNotation, Range, [e])
- Agda.Syntax.Concrete.Operators.Parser: postfixP :: (IsExpr e) => ReadP e 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 e -> ReadP e (e -> e)
+ Agda.Syntax.Concrete.Operators.Parser: postop :: (IsExpr e) => ReadP e (NewNotation, Range, [e]) -> ReadP e (e -> ReadP a e)
- Agda.Syntax.Concrete.Operators.Parser: prefixP :: (IsExpr e) => ReadP e e -> ReadP e e -> ReadP 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 e -> ReadP e (e -> e)
+ Agda.Syntax.Concrete.Operators.Parser: preop :: (IsExpr e) => ReadP e (NewNotation, Range, [e]) -> ReadP e (e -> ReadP a e)
- Agda.Syntax.Info: DefInfo :: Fixity -> Access -> IsAbstract -> DeclInfo -> DefInfo
+ Agda.Syntax.Info: DefInfo :: Fixity' -> Access -> IsAbstract -> DeclInfo -> DefInfo
- Agda.Syntax.Info: ModuleInfo :: Range -> Range -> Maybe Name -> ModuleInfo
+ Agda.Syntax.Info: ModuleInfo :: Range -> Range -> Maybe Name -> Maybe OpenShortHand -> Maybe ImportDirective -> ModuleInfo
- Agda.Syntax.Info: defFixity :: DefInfo -> Fixity
+ Agda.Syntax.Info: defFixity :: DefInfo -> Fixity'
- Agda.Syntax.Info: mkDefInfo :: Name -> Fixity -> Access -> IsAbstract -> Range -> DefInfo
+ Agda.Syntax.Info: mkDefInfo :: Name -> Fixity' -> Access -> IsAbstract -> Range -> DefInfo
- Agda.Syntax.Internal: ConP :: QName -> [Arg Pattern] -> Pattern
+ Agda.Syntax.Internal: ConP :: QName -> (Maybe (Arg Type)) -> [Arg Pattern] -> Pattern
- Agda.Syntax.Internal: EmptyTel :: Telescope
+ Agda.Syntax.Internal: EmptyTel :: Tele a
- Agda.Syntax.Internal: ExtendTel :: (Arg Type) -> (Abs Telescope) -> Telescope
+ Agda.Syntax.Internal: ExtendTel :: a -> (Abs (Tele a)) -> Tele a
- Agda.Syntax.Internal.Pattern: OHCon :: QName -> OneHolePatterns -> OneHolePattern
+ Agda.Syntax.Internal.Pattern: OHCon :: QName -> (Maybe (Arg Type)) -> OneHolePatterns -> OneHolePattern
- Agda.Syntax.Parser.Monad: Layout :: Int -> LayoutContext
+ Agda.Syntax.Parser.Monad: Layout :: Int32 -> LayoutContext
- Agda.Syntax.Position: Pn :: Maybe AbsolutePath -> !Int -> !Int -> !Int -> Position
+ Agda.Syntax.Position: Pn :: Maybe AbsolutePath -> !Int32 -> !Int32 -> !Int32 -> Position
- Agda.Syntax.Position: posCol :: Position -> !Int
+ Agda.Syntax.Position: posCol :: Position -> !Int32
- Agda.Syntax.Position: posLine :: Position -> !Int
+ Agda.Syntax.Position: posLine :: Position -> !Int32
- Agda.Syntax.Position: posPos :: Position -> !Int
+ Agda.Syntax.Position: posPos :: Position -> !Int32
- Agda.Syntax.Scope.Monad: copyScope :: ModuleName -> Scope -> ScopeM (Scope, Ren ModuleName, Ren QName)
+ Agda.Syntax.Scope.Monad: copyScope :: ModuleName -> Scope -> ScopeM (Scope, (Ren ModuleName, Ren QName))
- Agda.Syntax.Scope.Monad: freshAbstractName :: Fixity -> Name -> ScopeM Name
+ Agda.Syntax.Scope.Monad: freshAbstractName :: Fixity' -> Name -> ScopeM Name
- Agda.Syntax.Scope.Monad: freshAbstractQName :: Fixity -> Name -> ScopeM QName
+ Agda.Syntax.Scope.Monad: freshAbstractQName :: Fixity' -> Name -> ScopeM QName
- Agda.Syntax.Scope.Monad: getFixity :: QName -> ScopeM Fixity
+ Agda.Syntax.Scope.Monad: getFixity :: QName -> ScopeM Fixity'
- Agda.Syntax.Scope.Monad: type Out = [Either (Ren ModuleName) (Ren QName)]
+ Agda.Syntax.Scope.Monad: type Out = (Ren ModuleName, Ren QName)
- Agda.Syntax.Scope.Monad: type WSM = WriterT Out ScopeM
+ Agda.Syntax.Scope.Monad: type WSM = StateT Out ScopeM
- Agda.Termination.CallGraph: (.*.) :: Order -> Order -> Order
+ Agda.Termination.CallGraph: (.*.) :: (?cutoff :: Int) => Order -> Order -> Order
- Agda.Termination.CallGraph: (>*<) :: Call -> Call -> Call
+ Agda.Termination.CallGraph: (>*<) :: (?cutoff :: Int) => Call -> Call -> Call
- Agda.Termination.CallGraph: complete :: (Monoid meta) => CallGraph meta -> CallGraph meta
+ Agda.Termination.CallGraph: complete :: (?cutoff :: Int) => (Monoid meta) => CallGraph meta -> CallGraph meta
- Agda.Termination.CallGraph: supremum :: [Order] -> Order
+ Agda.Termination.CallGraph: supremum :: (?cutoff :: Int) => [Order] -> Order
- Agda.Termination.Semiring: Semiring :: (a -> a -> a) -> (a -> a -> a) -> a -> a -> Semiring a
+ Agda.Termination.Semiring: Semiring :: (a -> a -> a) -> (a -> a -> a) -> a -> Semiring a
- Agda.Termination.Termination: terminates :: (Ord meta, Monoid meta) => CallGraph meta -> Either meta ()
+ Agda.Termination.Termination: terminates :: (Ord meta, Monoid meta, ?cutoff :: Int) => CallGraph meta -> Either meta ()
- Agda.TypeChecking.Coverage: isDatatype :: (MonadTCM tcm) => Type -> tcm (Maybe (QName, [Arg Term], [Arg Term], [QName]))
+ Agda.TypeChecking.Coverage: isDatatype :: (MonadTCM tcm, MonadException SplitError tcm) => Arg Type -> tcm (QName, [Arg Term], [Arg Term], [QName])
- Agda.TypeChecking.Coverage: typeOfVar :: Telescope -> Nat -> Type
+ Agda.TypeChecking.Coverage: typeOfVar :: Telescope -> Nat -> Arg Type
- Agda.TypeChecking.Level: LevelKit :: (Term -> Term) -> (Term -> Term -> Term) -> Term -> QName -> QName -> QName -> LevelKit
+ Agda.TypeChecking.Level: LevelKit :: Term -> (Term -> Term) -> (Term -> Term -> Term) -> Term -> QName -> QName -> QName -> QName -> LevelKit
- Agda.TypeChecking.MetaVars: checkArgs :: (MonadTCM tcm) => MetaId -> Args -> tcm [Arg Nat]
+ Agda.TypeChecking.MetaVars: checkArgs :: (MonadTCM tcm) => MetaId -> Args -> FVs -> tcm [Arg Nat]
- Agda.TypeChecking.MetaVars: etaExpandMeta :: (MonadTCM tcm) => MetaId -> tcm ()
+ Agda.TypeChecking.MetaVars: etaExpandMeta :: (MonadTCM tcm) => [MetaKind] -> MetaId -> tcm ()
- Agda.TypeChecking.MetaVars: validParameters :: (Monad m) => Args -> m [Arg Nat]
+ Agda.TypeChecking.MetaVars: validParameters :: (Monad m) => Args -> FVs -> m [Arg Nat]
- Agda.TypeChecking.MetaVars.Occurs: occurs :: (Occurs t) => (TypeError -> TCM ()) -> MetaId -> [Nat] -> t -> TCM t
+ Agda.TypeChecking.MetaVars.Occurs: occurs :: (Occurs t) => OccursCtx -> MetaId -> [Nat] -> t -> TCM t
- Agda.TypeChecking.Monad.Base: Closure :: Signature -> TCEnv -> ScopeInfo -> CallTrace -> a -> Closure a
+ Agda.TypeChecking.Monad.Base: Closure :: Signature -> TCEnv -> ScopeInfo -> a -> Closure a
- Agda.TypeChecking.Monad.Base: Function :: [Clause] -> FunctionInverse -> [Polarity] -> [Occurrence] -> IsAbstract -> Delayed -> Defn
+ Agda.TypeChecking.Monad.Base: Function :: [Clauses] -> CompiledClauses -> FunctionInverse -> [Polarity] -> [Occurrence] -> IsAbstract -> Delayed -> Defn
- Agda.TypeChecking.Monad.Base: Interface :: [ModuleName] -> ModuleName -> Map ModuleName Scope -> ScopeInfo -> Signature -> BuiltinThings String -> Set String -> HighlightingInfo -> Interface
+ Agda.TypeChecking.Monad.Base: Interface :: [ModuleName] -> ModuleName -> Map ModuleName Scope -> ScopeInfo -> Signature -> BuiltinThings String -> Set String -> HighlightingInfo -> [OptionsPragma] -> Interface
- Agda.TypeChecking.Monad.Base: MetaVar :: MetaInfo -> MetaPriority -> Judgement Type MetaId -> MetaInstantiation -> Set MetaId -> MetaVariable
+ Agda.TypeChecking.Monad.Base: MetaVar :: MetaInfo -> MetaPriority -> Permutation -> Judgement Type MetaId -> MetaInstantiation -> Set MetaId -> MetaVariable
- Agda.TypeChecking.Monad.Base: MutId :: Int -> MutualId
+ Agda.TypeChecking.Monad.Base: MutId :: Int32 -> MutualId
- Agda.TypeChecking.Monad.Base: Primitive :: IsAbstract -> String -> Maybe [Clause] -> Defn
+ Agda.TypeChecking.Monad.Base: Primitive :: IsAbstract -> String -> Maybe [Clauses] -> Defn
- Agda.TypeChecking.Monad.Base: Record :: Nat -> Maybe Clause -> Maybe QName -> Type -> [(Hiding, QName)] -> Telescope -> [Polarity] -> [Occurrence] -> IsAbstract -> Defn
+ Agda.TypeChecking.Monad.Base: Record :: Nat -> Maybe Clause -> QName -> Bool -> Type -> [Arg QName] -> Telescope -> [Polarity] -> [Occurrence] -> Bool -> IsAbstract -> Defn
- Agda.TypeChecking.Monad.Base: TCEnv :: Context -> LetBindings -> ModuleName -> [(ModuleName, Nat)] -> [TopLevelModuleName] -> Maybe MutualId -> AbstractMode -> Bool -> Bool -> Bool -> TCEnv
+ Agda.TypeChecking.Monad.Base: TCEnv :: Context -> LetBindings -> ModuleName -> [(ModuleName, Nat)] -> [TopLevelModuleName] -> Maybe MutualId -> AbstractMode -> Bool -> Bool -> Bool -> Bool -> Range -> Maybe (Closure Call) -> TCEnv
- Agda.TypeChecking.Monad.Base: TCM :: StateT TCState (ReaderT TCEnv m) a -> TCMT m a
+ Agda.TypeChecking.Monad.Base: TCM :: (TCState -> TCEnv -> m (a, TCState)) -> TCMT m a
- Agda.TypeChecking.Monad.Base: TCSt :: FreshThings -> MetaStore -> InteractionPoints -> Constraints -> Signature -> Signature -> Set ModuleName -> ModuleToSource -> VisitedModules -> DecodedModules -> Maybe ModuleName -> ScopeInfo -> CommandLineOptions -> CommandLineOptions -> Statistics -> CallTrace -> Map MutualId (Set QName) -> BuiltinThings PrimFun -> BuiltinThings PrimFun -> Set String -> TCState
+ Agda.TypeChecking.Monad.Base: TCSt :: FreshThings -> MetaStore -> InteractionPoints -> Constraints -> Signature -> Signature -> Set ModuleName -> ModuleToSource -> VisitedModules -> DecodedModules -> Maybe ModuleName -> ScopeInfo -> CommandLineOptions -> PragmaOptions -> Statistics -> Map MutualId (Set QName) -> BuiltinThings PrimFun -> BuiltinThings PrimFun -> Set String -> TCState
- Agda.TypeChecking.Monad.Base: defClauses :: Definition -> [Clause]
+ Agda.TypeChecking.Monad.Base: defClauses :: Definition -> [Clauses]
- Agda.TypeChecking.Monad.Base: funClauses :: Defn -> [Clause]
+ Agda.TypeChecking.Monad.Base: funClauses :: Defn -> [Clauses]
- Agda.TypeChecking.Monad.Base: primClauses :: Defn -> Maybe [Clause]
+ Agda.TypeChecking.Monad.Base: primClauses :: Defn -> Maybe [Clauses]
- Agda.TypeChecking.Monad.Base: recCon :: Defn -> Maybe QName
+ Agda.TypeChecking.Monad.Base: recCon :: Defn -> QName
- Agda.TypeChecking.Monad.Base: recFields :: Defn -> [(Hiding, QName)]
+ Agda.TypeChecking.Monad.Base: recFields :: Defn -> [Arg QName]
- Agda.TypeChecking.Monad.Base: stPragmaOptions :: TCState -> CommandLineOptions
+ Agda.TypeChecking.Monad.Base: stPragmaOptions :: TCState -> PragmaOptions
- Agda.TypeChecking.Monad.Base: type LetBindings = Map Name (Open (Term, Type))
+ Agda.TypeChecking.Monad.Base: type LetBindings = Map Name (Open (Term, Arg Type))
- Agda.TypeChecking.Monad.Base: unTCM :: TCMT m a -> StateT TCState (ReaderT TCEnv m) a
+ Agda.TypeChecking.Monad.Base: unTCM :: TCMT m a -> TCState -> TCEnv -> m (a, TCState)
- Agda.TypeChecking.Monad.Context: getVarInfo :: (MonadTCM tcm) => Name -> tcm (Term, Type)
+ Agda.TypeChecking.Monad.Context: getVarInfo :: (MonadTCM tcm) => Name -> tcm (Term, Arg Type)
- Agda.TypeChecking.Monad.MetaVars: newMeta :: (MonadTCM tcm) => MetaInfo -> MetaPriority -> Judgement Type a -> tcm MetaId
+ Agda.TypeChecking.Monad.MetaVars: newMeta :: (MonadTCM tcm) => MetaInfo -> MetaPriority -> Permutation -> Judgement Type a -> tcm MetaId
- Agda.TypeChecking.Monad.MetaVars: newMeta' :: (MonadTCM tcm) => MetaInstantiation -> MetaInfo -> MetaPriority -> Judgement Type a -> tcm MetaId
+ Agda.TypeChecking.Monad.MetaVars: newMeta' :: (MonadTCM tcm) => MetaInstantiation -> MetaInfo -> MetaPriority -> Permutation -> Judgement Type a -> tcm MetaId
- Agda.TypeChecking.Monad.Options: getInputFile :: (MonadTCM tcm) => tcm FilePath
+ Agda.TypeChecking.Monad.Options: getInputFile :: (MonadTCM tcm) => tcm AbsolutePath
- Agda.TypeChecking.Monad.Options: setCommandLineOptions :: (MonadTCM tcm) => Target -> CommandLineOptions -> tcm ()
+ Agda.TypeChecking.Monad.Options: setCommandLineOptions :: (MonadTCM tcm) => CommandLineOptions -> tcm ()
- Agda.TypeChecking.Monad.Options: setOptionsFromPragma :: (MonadTCM tcm) => Pragma -> tcm ()
+ Agda.TypeChecking.Monad.Options: setOptionsFromPragma :: (MonadTCM tcm) => OptionsPragma -> tcm ()
- Agda.TypeChecking.Monad.Trace: traceCall :: (MonadTCM tcm) => (Maybe r -> Call) -> tcm r -> tcm r
+ Agda.TypeChecking.Monad.Trace: traceCall :: (MonadTCM tcm) => (Maybe r -> Call) -> tcm a -> tcm a
- Agda.TypeChecking.Primitive: buildList :: (MonadTCM tcm) => Term -> tcm ([Term] -> Term)
+ Agda.TypeChecking.Primitive: buildList :: (MonadTCM tcm) => tcm ([Term] -> Term)
- Agda.TypeChecking.Primitive: gpi :: (MonadTCM tcm) => Hiding -> String -> tcm Type -> tcm Type -> tcm Type
+ Agda.TypeChecking.Primitive: gpi :: (MonadTCM tcm) => Hiding -> Relevance -> String -> tcm Type -> tcm Type -> tcm Type
- Agda.TypeChecking.Rebind: rebindClause :: Clause -> TCM Clause
+ Agda.TypeChecking.Rebind: rebindClause :: Clauses -> TCM Clauses
- Agda.TypeChecking.Records: etaContractRecord :: (MonadTCM tcm) => QName -> Args -> tcm Term
+ Agda.TypeChecking.Records: etaContractRecord :: (MonadTCM tcm) => QName -> QName -> Args -> tcm Term
- Agda.TypeChecking.Records: getRecordFieldNames :: (MonadTCM tcm) => QName -> tcm [(Hiding, Name)]
+ Agda.TypeChecking.Records: getRecordFieldNames :: (MonadTCM tcm) => QName -> tcm [Arg Name]
- Agda.TypeChecking.Rules.Builtin: bindBuiltinBool :: String -> Expr -> TCM ()
+ Agda.TypeChecking.Rules.Builtin: bindBuiltinBool :: String -> Expr -> TCM Term
- Agda.TypeChecking.Rules.Builtin: bindBuiltinCons :: Expr -> TCM ()
+ Agda.TypeChecking.Rules.Builtin: bindBuiltinCons :: Expr -> TCM Term
- Agda.TypeChecking.Rules.Builtin: bindBuiltinNil :: Expr -> TCM ()
+ Agda.TypeChecking.Rules.Builtin: bindBuiltinNil :: Expr -> TCM Term
- Agda.TypeChecking.Rules.Builtin: bindBuiltinRefl :: Expr -> TCM ()
+ Agda.TypeChecking.Rules.Builtin: bindBuiltinRefl :: Expr -> TCM Term
- Agda.TypeChecking.Rules.Builtin: bindBuiltinSuc' :: String -> TCM Term -> Expr -> TCM ()
+ Agda.TypeChecking.Rules.Builtin: bindBuiltinSuc' :: String -> TCM Term -> Expr -> TCM Term
- Agda.TypeChecking.Rules.Builtin: bindBuiltinZero' :: String -> TCM Term -> Expr -> TCM ()
+ Agda.TypeChecking.Rules.Builtin: bindBuiltinZero' :: String -> TCM Term -> Expr -> TCM Term
- Agda.TypeChecking.Rules.Builtin: bindConstructor :: String -> (Expr -> TCM ()) -> Expr -> TCM ()
+ Agda.TypeChecking.Rules.Builtin: bindConstructor :: String -> (Expr -> TCM Term) -> Expr -> TCM ()
- Agda.TypeChecking.Rules.Builtin: builtinConstructors :: [(String, Expr -> TCM ())]
+ Agda.TypeChecking.Rules.Builtin: builtinConstructors :: [(String, Expr -> TCM Term)]
- Agda.TypeChecking.Rules.Data: checkConstructor :: QName -> Telescope -> Nat -> Sort -> Induction -> Constructor -> TCM ()
+ Agda.TypeChecking.Rules.Data: checkConstructor :: QName -> Telescope -> Nat -> Sort -> Constructor -> TCM ()
- Agda.TypeChecking.Rules.Data: checkDataDef :: DefInfo -> Induction -> QName -> [LamBinding] -> [Constructor] -> TCM ()
+ Agda.TypeChecking.Rules.Data: checkDataDef :: DefInfo -> QName -> [LamBinding] -> [Constructor] -> TCM ()
- Agda.TypeChecking.Rules.Def: checkClause :: Type -> Clause -> TCM Clause
+ Agda.TypeChecking.Rules.Def: checkClause :: Type -> Clause -> TCM Clauses
- Agda.TypeChecking.Rules.LHS: noPatternMatchingOnCodata :: (MonadTCM tcm) => [(Bool, Arg Pattern)] -> tcm ()
+ Agda.TypeChecking.Rules.LHS: noPatternMatchingOnCodata :: (MonadTCM tcm) => [Arg Pattern] -> tcm ()
- Agda.TypeChecking.Rules.LHS.Problem: Focus :: QName -> [NamedArg Pattern] -> Range -> OneHolePatterns -> Int -> QName -> [Arg Term] -> [Arg Term] -> Focus
+ Agda.TypeChecking.Rules.LHS.Problem: Focus :: QName -> [NamedArg Pattern] -> Range -> OneHolePatterns -> Int -> QName -> [Arg Term] -> [Arg Term] -> Type -> Focus
- Agda.TypeChecking.Rules.Term: checkTelescope :: Telescope -> (Telescope -> TCM a) -> TCM a
+ Agda.TypeChecking.Rules.Term: checkTelescope :: Telescope -> Sort -> (Telescope -> TCM a) -> TCM a
- Agda.TypeChecking.Rules.Term: checkTypedBinding :: Hiding -> TypedBinding -> ([(String, Type)] -> TCM a) -> TCM a
+ Agda.TypeChecking.Rules.Term: checkTypedBinding :: Hiding -> Sort -> TypedBinding -> ([(String, Type)] -> TCM a) -> TCM a
- Agda.TypeChecking.Rules.Term: checkTypedBindings :: TypedBindings -> (Telescope -> TCM a) -> TCM a
+ Agda.TypeChecking.Rules.Term: checkTypedBindings :: TypedBindings -> Sort -> (Telescope -> TCM a) -> TCM a
- Agda.TypeChecking.Serialise: class (Data a) => EmbPrj a
+ Agda.TypeChecking.Serialise: class (Typeable a) => EmbPrj a
- Agda.TypeChecking.Substitute: idSub :: Telescope -> [Term]
+ Agda.TypeChecking.Substitute: idSub :: Telescope -> Substitution
- Agda.TypeChecking.Substitute: substs :: (Subst t) => [Term] -> t -> t
+ Agda.TypeChecking.Substitute: substs :: (Subst t) => Substitution -> t -> t
- Agda.Utils.FileName: (===) :: FilePath -> FilePath -> IO Bool
+ Agda.Utils.FileName: (===) :: AbsolutePath -> AbsolutePath -> Bool
- Agda.Utils.Warshall: SizeVar :: Int -> Int -> SizeExpr
+ Agda.Utils.Warshall: SizeVar :: RigidId -> Int -> SizeExpr

Files

Agda.cabal view
@@ -1,10 +1,10 @@ name:            Agda-version:         2.2.6-cabal-version:   >= 1.6.0.3 && < 2+version:         2.2.8+cabal-version:   >= 1.8 && < 2 build-type:      Simple license:         OtherLicense license-file:    LICENSE-author:          Ulf Norell, Nils Anders Danielsson, Catarina Coquand, Makoto Takeyama, Andreas Abel, ...+author:          Ulf Norell, Nils Anders Danielsson, Catarina Coquand, Makoto Takeyama, Andreas Abel, Darin Morrison... maintainer:      Ulf Norell <ulfn@chalmers.se> homepage:        http://wiki.portal.chalmers.se/agda/ bug-reports:     http://code.google.com/p/agda/issues/list@@ -34,7 +34,7 @@   Note also that this library does not follow the package versioning   policy, because the library is only intended to be used by the Emacs   mode and the Agda-executable package.-tested-with:     GHC == 6.10.4 && == 6.12.1+tested-with:        GHC == 6.12.1, GHC == 6.12.3 extra-source-files: src/full/Agda/undefined.h                     README                     doc/release-notes/*.txt@@ -49,7 +49,7 @@ source-repository this   type:     darcs   location: http://code.haskell.org/Agda/-  tag:      2.2.6+  tag:      2.2.8  flag use-locale   description:@@ -58,231 +58,237 @@     must always be encoded using UTF8.)  library-  hs-source-dirs:  src/full+  hs-source-dirs:   src/full   if flag(use-locale)-    build-depends: base == 4.2.*+    build-depends:  base == 4.2.*   else-    build-depends: base == 4.1.*,-                   utf8-string == 0.3.*-  build-depends:   mtl >= 1.1 && < 2,-                   QuickCheck >= 2.1.0.2 && < 2.2,-                   haskell-src >= 1.0.1.1 && < 2,-                   containers >= 0.1.0 && < 1,-                   pretty >= 1 && < 2,-                   directory >= 1 && < 2,-                   old-time >= 1 && < 2,-                   bytestring >= 0.9.0.1 && < 1,-                   array >= 0.1 && < 1,-                   binary >= 0.4.4 && < 0.6,-                   zlib >= 0.4.0.1 && < 1,-                   filepath >= 1.1 && < 2,-                   process >= 1.0.1.0 && < 2,-                   haskeline >= 0.3 && < 0.7,-                   xhtml == 3000.2.*,-                   syb == 0.1.*-  build-tools:     happy >= 1.15 && < 2,-                   alex >= 2.0.1 && < 3-  extensions:      CPP-  exposed-modules: Agda.Main-                   Agda.Interaction.BasicOps-                   Agda.Interaction.GhciTop-                   Agda.Compiler.Agate.Classify-                   Agda.Compiler.Agate.Common-                   Agda.Compiler.Agate.Main-                   Agda.Compiler.Agate.OptimizedPrinter-                   Agda.Compiler.Agate.TranslateName-                   Agda.Compiler.Agate.UntypedPrinter-                   Agda.Compiler.Alonzo.Main-                   Agda.Compiler.Alonzo.Names-                   Agda.Compiler.Alonzo.Haskell-                   Agda.Compiler.Alonzo.PatternMonad-                   Agda.Compiler.HaskellTypes-                   Agda.Compiler.MAlonzo.Compiler-                   Agda.Compiler.MAlonzo.Encode-                   Agda.Compiler.MAlonzo.Misc-                   Agda.Compiler.MAlonzo.Pretty-                   Agda.Compiler.MAlonzo.Primitives-                   Agda.Interaction.CommandLine.CommandLine-                   Agda.Interaction.Exceptions-                   Agda.Interaction.FindFile-                   Agda.Interaction.Highlighting.Emacs-                   Agda.Interaction.Highlighting.Generate-                   Agda.Interaction.Highlighting.HTML-                   Agda.Interaction.Highlighting.Precise-                   Agda.Interaction.Highlighting.Range-                   Agda.Interaction.Highlighting.Vim-                   Agda.Interaction.Imports-                   Agda.Interaction.MakeCase-                   Agda.Interaction.Monad-                   Agda.Interaction.Options-                   Agda.Syntax.Abstract.Name-                   Agda.Syntax.Abstract.Pretty-                   Agda.Syntax.Abstract.Views-                   Agda.Syntax.Abstract-                   Agda.Syntax.Common-                   Agda.Syntax.Concrete.Definitions-                   Agda.Syntax.Concrete.Name-                   Agda.Syntax.Concrete.Operators.Parser-                   Agda.Syntax.Concrete.Operators-                   Agda.Syntax.Concrete.Pretty-                   Agda.Syntax.Concrete-                   Agda.Syntax.Fixity-                   Agda.Syntax.Info-                   Agda.Syntax.Internal-                   Agda.Syntax.Internal.Generic-                   Agda.Syntax.Internal.Pattern-                   Agda.Syntax.Literal-                   Agda.Syntax.Parser.Alex-                   Agda.Syntax.Parser.Comments-                   Agda.Syntax.Parser.Layout-                   Agda.Syntax.Parser.LexActions-                   Agda.Syntax.Parser.Lexer-                   Agda.Syntax.Parser.LookAhead-                   Agda.Syntax.Parser.Monad-                   Agda.Syntax.Parser.Parser-                   Agda.Syntax.Parser.StringLiterals-                   Agda.Syntax.Parser.Tokens-                   Agda.Syntax.Parser-                   Agda.Syntax.Position-                   Agda.Syntax.Scope.Base-                   Agda.Syntax.Scope.Monad-                   Agda.Syntax.Strict-                   Agda.Syntax.Translation.AbstractToConcrete-                   Agda.Syntax.Translation.ConcreteToAbstract-                   Agda.Syntax.Translation.InternalToAbstract-                   Agda.Termination.CallGraph-                   Agda.Termination.Lexicographic-                   Agda.Termination.Matrix-                   Agda.Termination.Semiring-                   Agda.Termination.TermCheck-                   Agda.Termination.Termination-                   Agda.Tests-                   Agda.TypeChecker-                   Agda.TypeChecking.Abstract-                   Agda.TypeChecking.Constraints-                   Agda.TypeChecking.Conversion-                   Agda.TypeChecking.Coverage-                   Agda.TypeChecking.Coverage.Match-                   Agda.TypeChecking.DisplayForm-                   Agda.TypeChecking.Empty-                   Agda.TypeChecking.EtaContract-                   Agda.TypeChecking.Errors-                   Agda.TypeChecking.Free-                   Agda.TypeChecking.Implicit-                   Agda.TypeChecking.Injectivity-                   Agda.TypeChecking.Level-                   Agda.TypeChecking.MetaVars-                   Agda.TypeChecking.MetaVars.Occurs-                   Agda.TypeChecking.Monad.Base-                   Agda.TypeChecking.Monad.Builtin-                   Agda.TypeChecking.Monad.Closure-                   Agda.TypeChecking.Monad.Constraints-                   Agda.TypeChecking.Monad.Context-                   Agda.TypeChecking.Monad.Debug-                   Agda.TypeChecking.Monad.Env-                   Agda.TypeChecking.Monad.Exception-                   Agda.TypeChecking.Monad.Imports-                   Agda.TypeChecking.Monad.MetaVars-                   Agda.TypeChecking.Monad.Mutual-                   Agda.TypeChecking.Monad.Open-                   Agda.TypeChecking.Monad.Options-                   Agda.TypeChecking.Monad.Signature-                   Agda.TypeChecking.Monad.SizedTypes-                   Agda.TypeChecking.Monad.State-                   Agda.TypeChecking.Monad.Statistics-                   Agda.TypeChecking.Monad.Trace-                   Agda.TypeChecking.Monad-                   Agda.TypeChecking.Patterns.Match-                   Agda.TypeChecking.Polarity-                   Agda.TypeChecking.Positivity-                   Agda.TypeChecking.Pretty-                   Agda.TypeChecking.Primitive-                   Agda.TypeChecking.Rebind-                   Agda.TypeChecking.Records-                   Agda.TypeChecking.Reduce-                   Agda.TypeChecking.Rules.Builtin-                   Agda.TypeChecking.Rules.Data-                   Agda.TypeChecking.Rules.Decl-                   Agda.TypeChecking.Rules.Def-                   Agda.TypeChecking.Rules.LHS-                   Agda.TypeChecking.Rules.LHS.Implicit-                   Agda.TypeChecking.Rules.LHS.Instantiate-                   Agda.TypeChecking.Rules.LHS.Problem-                   Agda.TypeChecking.Rules.LHS.Split-                   Agda.TypeChecking.Rules.LHS.Unify-                   Agda.TypeChecking.Rules.Record-                   Agda.TypeChecking.Rules.Term-                   Agda.TypeChecking.Serialise-                   Agda.TypeChecking.SizedTypes-                   Agda.TypeChecking.Substitute-                   Agda.TypeChecking.Telescope-                   Agda.TypeChecking.Test.Generators-                   Agda.TypeChecking.Tests-                   Agda.TypeChecking.With-                   Agda.Utils.Char-                   Agda.Utils.Either-                   Agda.Utils.FileName-                   Agda.Utils.Fresh-                   Agda.Utils.Function-                   Agda.Utils.Generics-                   Agda.Utils.Graph-                   Agda.Utils.Hash-                   Agda.Utils.Impossible-                   Agda.Utils.IO.Binary-                   Agda.Utils.IO.Locale-                   Agda.Utils.IO.UTF8-                   Agda.Utils.List-                   Agda.Utils.Map-                   Agda.Utils.Maybe-                   Agda.Utils.Monad-                   Agda.Utils.Permutation-                   Agda.Utils.Pointer-                   Agda.Utils.Pretty-                   Agda.Utils.QuickCheck-                   Agda.Utils.ReadP-                   Agda.Utils.SemiRing-                   Agda.Utils.Size-                   Agda.Utils.String-                   Agda.Utils.Suffix-                   Agda.Utils.TestHelpers-                   Agda.Utils.Trace-                   Agda.Utils.Trie-                   Agda.Utils.Tuple-                   Agda.Utils.Unicode-                   Agda.Utils.Warshall-                   Agda.Version-                   Agda.Auto.Auto-                   Agda.Auto.Convert-                   Agda.Auto.Typecheck-                   Agda.Auto.NarrowingSearch-                   Agda.Auto.Print-                   Agda.Auto.Syntax-                   Agda.Auto.SearchControl-  other-modules:   Paths_Agda-  if impl(ghc < 6.12)-    ghc-options:   -auto-all -w -Werror -fwarn-dodgy-imports-                   -fwarn-duplicate-exports -fwarn-hi-shadowing-                   -fwarn-incomplete-patterns -fwarn-missing-fields-                   -fwarn-missing-methods -fwarn-overlapping-patterns-                   -fwarn-warnings-deprecations -fwarn-deprecated-flags-                   -fwarn-dodgy-foreign-imports+    build-depends:  base == 4.1.*,+                    utf8-string == 0.3.*+  build-depends:    mtl >= 1.1 && < 2,+                    QuickCheck >= 2.1.0.2 && < 2.2,+                    haskell-src >= 1.0.1.1 && < 2,+                    containers >= 0.1.0 && < 1,+                    pretty >= 1 && < 2,+                    directory >= 1.0 && < 1.2,+                    old-time >= 1 && < 2,+                    bytestring >= 0.9.0.1 && < 1,+                    array >= 0.1 && < 1,+                    binary >= 0.4.4 && < 0.6,+                    zlib >= 0.4.0.1 && < 1,+                    filepath >= 1.1 && < 2,+                    process >= 1.0.1.0 && < 2,+                    haskeline >= 0.3 && < 0.7,+                    xhtml == 3000.2.*,+                    syb == 0.1.*,+                    Cabal >= 1.8.0.2 && < 1.9+  build-tools:      happy >= 1.15 && < 2,+                    alex >= 2.0.1 && < 3+  extensions:       CPP+  exposed-modules:  Agda.Main+                    Agda.Interaction.BasicOps+                    Agda.Interaction.GhciTop+                    Agda.Compiler.HaskellTypes+                    Agda.Compiler.MAlonzo.Compiler+                    Agda.Compiler.MAlonzo.Encode+                    Agda.Compiler.MAlonzo.Misc+                    Agda.Compiler.MAlonzo.Pretty+                    Agda.Compiler.MAlonzo.Primitives+                    Agda.Packaging.Config+                    Agda.Packaging.Database+                    Agda.Packaging.Monad+                    Agda.Packaging.Types+                    Agda.Interaction.CommandLine.CommandLine+                    Agda.Interaction.Exceptions+                    Agda.Interaction.FindFile+                    Agda.Interaction.Highlighting.Emacs+                    Agda.Interaction.Highlighting.Generate+                    Agda.Interaction.Highlighting.HTML+                    Agda.Interaction.Highlighting.Precise+                    Agda.Interaction.Highlighting.Range+                    Agda.Interaction.Highlighting.Vim+                    Agda.Interaction.Imports+                    Agda.Interaction.MakeCase+                    Agda.Interaction.Monad+                    Agda.Interaction.Options+                    Agda.Syntax.Abstract.Name+                    Agda.Syntax.Abstract.Pretty+                    Agda.Syntax.Abstract.Views+                    Agda.Syntax.Abstract+                    Agda.Syntax.Common+                    Agda.Syntax.Concrete.Definitions+                    Agda.Syntax.Concrete.Name+                    Agda.Syntax.Concrete.Operators.Parser+                    Agda.Syntax.Concrete.Operators+                    Agda.Syntax.Concrete.Pretty+                    Agda.Syntax.Concrete+                    Agda.Syntax.Fixity+                    Agda.Syntax.Info+                    Agda.Syntax.Internal+                    Agda.Syntax.Internal.Generic+                    Agda.Syntax.Internal.Pattern+                    Agda.Syntax.Literal+                    Agda.Syntax.Notation+                    Agda.Syntax.Parser.Alex+                    Agda.Syntax.Parser.Comments+                    Agda.Syntax.Parser.Layout+                    Agda.Syntax.Parser.LexActions+                    Agda.Syntax.Parser.Lexer+                    Agda.Syntax.Parser.LookAhead+                    Agda.Syntax.Parser.Monad+                    Agda.Syntax.Parser.Parser+                    Agda.Syntax.Parser.StringLiterals+                    Agda.Syntax.Parser.Tokens+                    Agda.Syntax.Parser+                    Agda.Syntax.Position+                    Agda.Syntax.Scope.Base+                    Agda.Syntax.Scope.Monad+                    Agda.Syntax.Strict+                    Agda.Syntax.Translation.AbstractToConcrete+                    Agda.Syntax.Translation.ConcreteToAbstract+                    Agda.Syntax.Translation.InternalToAbstract+                    Agda.Termination.CallGraph+                    Agda.Termination.Lexicographic+                    Agda.Termination.Matrix+                    Agda.Termination.SparseMatrix+                    Agda.Termination.Semiring+                    Agda.Termination.TermCheck+                    Agda.Termination.Termination+                    Agda.Tests+                    Agda.TypeChecker+                    Agda.TypeChecking.Abstract+                    Agda.TypeChecking.CompiledClause+                    Agda.TypeChecking.CompiledClause.Match+                    Agda.TypeChecking.Constraints+                    Agda.TypeChecking.Conversion+                    Agda.TypeChecking.Coverage+                    Agda.TypeChecking.Coverage.Match+                    Agda.TypeChecking.Datatypes+                    Agda.TypeChecking.DisplayForm+                    Agda.TypeChecking.Empty+                    Agda.TypeChecking.EtaContract+                    Agda.TypeChecking.Errors+                    Agda.TypeChecking.Free+                    Agda.TypeChecking.Forcing+                    Agda.TypeChecking.Implicit+                    Agda.TypeChecking.Injectivity+                    Agda.TypeChecking.Level+                    Agda.TypeChecking.MetaVars+                    Agda.TypeChecking.MetaVars.Occurs+                    Agda.TypeChecking.Monad.Base+                    Agda.TypeChecking.Monad.Builtin+                    Agda.TypeChecking.Monad.Closure+                    Agda.TypeChecking.Monad.Constraints+                    Agda.TypeChecking.Monad.Context+                    Agda.TypeChecking.Monad.Debug+                    Agda.TypeChecking.Monad.Env+                    Agda.TypeChecking.Monad.Exception+                    Agda.TypeChecking.Monad.Imports+                    Agda.TypeChecking.Monad.MetaVars+                    Agda.TypeChecking.Monad.Mutual+                    Agda.TypeChecking.Monad.Open+                    Agda.TypeChecking.Monad.Options+                    Agda.TypeChecking.Monad.Signature+                    Agda.TypeChecking.Monad.SizedTypes+                    Agda.TypeChecking.Monad.State+                    Agda.TypeChecking.Monad.Statistics+                    Agda.TypeChecking.Monad.Trace+                    Agda.TypeChecking.Monad+                    Agda.TypeChecking.Patterns.Match+                    Agda.TypeChecking.Polarity+                    Agda.TypeChecking.Positivity+                    Agda.TypeChecking.Pretty+                    Agda.TypeChecking.Primitive+                    Agda.TypeChecking.Quote+                    Agda.TypeChecking.Rebind+                    Agda.TypeChecking.RecordPatterns+                    Agda.TypeChecking.Records+                    Agda.TypeChecking.Reduce+                    Agda.TypeChecking.Rules.Builtin+                    Agda.TypeChecking.Rules.Builtin.Coinduction+                    Agda.TypeChecking.Rules.Data+                    Agda.TypeChecking.Rules.Decl+                    Agda.TypeChecking.Rules.Def+                    Agda.TypeChecking.Rules.LHS+                    Agda.TypeChecking.Rules.LHS.Implicit+                    Agda.TypeChecking.Rules.LHS.Instantiate+                    Agda.TypeChecking.Rules.LHS.Problem+                    Agda.TypeChecking.Rules.LHS.Split+                    Agda.TypeChecking.Rules.LHS.Unify+                    Agda.TypeChecking.Rules.Record+                    Agda.TypeChecking.Rules.Term+                    Agda.TypeChecking.Serialise+                    Agda.TypeChecking.SizedTypes+                    Agda.TypeChecking.Substitute+                    Agda.TypeChecking.Telescope+                    Agda.TypeChecking.Test.Generators+                    Agda.TypeChecking.Tests+                    Agda.TypeChecking.UniversePolymorphism+                    Agda.TypeChecking.With+                    Agda.Utils.Char+                    Agda.Utils.Either+                    Agda.Utils.FileName+                    Agda.Utils.Fresh+                    Agda.Utils.Function+                    Agda.Utils.Generics+                    Agda.Utils.Graph+                    Agda.Utils.Hash+                    Agda.Utils.Impossible+                    Agda.Utils.IO.Binary+                    Agda.Utils.IO.Locale+                    Agda.Utils.IO.UTF8+                    Agda.Utils.List+                    Agda.Utils.Map+                    Agda.Utils.Maybe+                    Agda.Utils.Monad+                    Agda.Utils.Permutation+                    Agda.Utils.Pointer+                    Agda.Utils.Pretty+                    Agda.Utils.QuickCheck+                    Agda.Utils.ReadP+                    Agda.Utils.SemiRing+                    Agda.Utils.Size+                    Agda.Utils.String+                    Agda.Utils.Suffix+                    Agda.Utils.TestHelpers+                    Agda.Utils.Trie+                    Agda.Utils.Tuple+                    Agda.Utils.Unicode+                    Agda.Utils.Warshall+                    Agda.Version+                    Agda.Auto.Auto+                    Agda.Auto.Convert+                    Agda.Auto.Typecheck+                    Agda.Auto.NarrowingSearch+                    Agda.Auto.Syntax+                    Agda.Auto.SearchControl+                    Agda.Auto.CaseSplit+  other-modules:    Paths_Agda+  if true+    ghc-options:    -w -Werror+                    -fwarn-deprecated-flags+                    -fwarn-dodgy-foreign-imports+                    -fwarn-dodgy-imports+                    -fwarn-duplicate-exports+                    -fwarn-hi-shadowing+                    -fwarn-incomplete-patterns+                    -fwarn-missing-fields+                    -fwarn-missing-methods+                    -fwarn-overlapping-patterns+                    -fwarn-warnings-deprecations   if impl(ghc >= 6.12)-    ghc-options:   -auto-all -w -Werror -fwarn-dodgy-imports-                   -fwarn-duplicate-exports -fwarn-hi-shadowing-                   -fwarn-incomplete-patterns -fwarn-missing-fields-                   -fwarn-missing-methods -fwarn-overlapping-patterns-                   -fwarn-warnings-deprecations -fwarn-deprecated-flags-                   -fwarn-dodgy-foreign-imports-                   -fwarn-wrong-do-bind -fwarn-dodgy-exports+    ghc-options:    -fwarn-dodgy-exports+                    -fwarn-wrong-do-bind+  ghc-prof-options: -auto-all  executable agda-mode-  hs-source-dirs:  src/agda-mode-  main-is:         Main.hs-  other-modules:   Paths_Agda+  hs-source-dirs:   src/agda-mode+  main-is:          Main.hs+  other-modules:    Paths_Agda   if flag(use-locale)-    build-depends: base == 4.2.*+    build-depends:  base == 4.2.*   else-    build-depends: base == 4.1.*,-                   utf8-string == 0.3.*-  build-depends:   filepath >= 1.1 && < 2,-                   process >= 1.0.1.0 && < 2+    build-depends:  base == 4.1.*,+                    utf8-string == 0.3.*+  build-depends:    filepath >= 1.1 && < 2,+                    process >= 1.0.1.0 && < 2,+                    directory >= 1.0 && < 1.2
LICENSE view
@@ -1,6 +1,6 @@-Copyright (c) 2005-2009 Ulf Norell, Nils Anders Danielsson, Catarina+Copyright (c) 2005-2010 Ulf Norell, Nils Anders Danielsson, Catarina Coquand, Makoto Takeyama, Andreas Abel, Karl Mehltretter, Marcin-Benke.+Benke, Darin Morrison.  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the@@ -38,7 +38,7 @@  - Neither name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without-specific prior written permission. +specific prior written permission.  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
README view
@@ -8,29 +8,34 @@ * Configuring the Emacs mode * Prerequisites * Installing a suitable version of Emacs under Windows-* Installation script for (at least) Ubuntu  ------------------------------------------------------------------------ Installing Agda ------------------------------------------------------------------------ -There are several ways to install Agda. (Note that this README only-discusses installation of Agda, not its standard library. See the Agda-Wiki for information about the library.)+  Note that this README only discusses installation of Agda, not its+  standard library. See the Agda Wiki for information about the+  library. +There are several ways to install Agda:+ * Using a binary package, prepared for your platform.    Recommended if such a package exists. See the Agda Wiki. -* Using stable packages available from Hackage.+* Using a released source package, available from Hackage. +  (Note that if you want to install the development version of Agda,+  then you should use the next method.)+   Install the prerequisites mentioned below, then run the following   commands: +    cabal update     cabal install Agda-executable     agda-mode setup -  The second command tries to set up Emacs for use with Agda. As an+  The last command tries to set up Emacs for use with Agda. As an   alternative you can copy the following text to your .emacs file:      (load-file (let ((coding-system-for-read 'utf-8))@@ -41,39 +46,31 @@    1)  Install the prerequisites mentioned below. -  2a) If your system is Unix-like you can now hopefully install the-      Agda 2 library, batch-mode tool and Emacs mode by running the-      following command:--        make install--      If this does not work on your system, or you want to have more-      control, you can follow 2b instead.--  2b) Run the following commands in the top-level directory of the+  2a) Run the following commands in the top-level directory of the       Agda source tree: +        cabal update         cabal install         agda-mode setup         cd src/main-        cabal clean       # To ensure recompilation when upgrading.         cabal install -      The second command tries to set up Emacs for use with Agda. As-      an alternative you can copy the following text to your .emacs-      file:+      The third command tries to set up Emacs for use with Agda. As an+      alternative you can copy the following text to your .emacs file:          (load-file (let ((coding-system-for-read 'utf-8))                         (shell-command-to-string "agda-mode locate")))        If you want to have more control over where files are installed-      then you can give various flags to cabal install, see-      cabal install --help.+      then you can give various flags to cabal install, see+      cabal install --help. -  A section below lists an installation script which should work under-  the Ubuntu distribution of GNU/Linux, assuming that your-  configuration is reasonably standard.+  2b) Instead of following 2a you can try to install Agda (including+      batch-mode tool and Emacs mode) by running the following+      command: +        make install+ ------------------------------------------------------------------------ Configuring the Emacs mode ------------------------------------------------------------------------@@ -126,11 +123,12 @@ Windows, see below.  Non-Windows users need to ensure that the development files for the C-library zlib are installed (see http://zlib.net). Your package manager-may be able to install these files for you. For instance, on Debian or-Ubuntu it should suffice to run+libraries zlib and ncurses are installed (see http://zlib.net and+http://www.gnu.org/software/ncurses/). Your package manager may be+able to install these files for you. For instance, on Debian or Ubuntu+it should suffice to run -  apt-get install zlib1g-dev+  apt-get install zlib1g-dev libncurses5-dev  as root to get the correct files installed. @@ -252,24 +250,3 @@        M-x view-hello-file     You should see all the characters without white-boxes.---------------------------------------------------------------------------Installation scripts for Ubuntu 9.10---------------------------------------------------------------------------Installs a released version:--  sudo apt-get install agda-mode agda-bin--Installs the development version:--  sudo apt-get install ghc6 happy alex darcs emacs haskell-mode zlib1g-dev make-  wget http://www.haskell.org/cabal/release/cabal-install-0.6.4/cabal-install-0.6.4.tar.gz-  tar xzf cabal-install-0.6.4.tar.gz-  cd cabal-install-0.6.4-  . bootstrap.sh-  cd ..-  $HOME/.cabal/bin/cabal update-  darcs get --lazy http://code.haskell.org/Agda-  cd Agda-  make CABAL_CMD="$HOME/.cabal/bin/cabal" install
Setup.hs view
@@ -1,3 +1,12 @@ import Distribution.Simple  main = defaultMain++-- The following comment may be relevant for agda-pkg:+--+-- Although this looks like the Simple build type, it is in fact vital that+-- we use this Setup.hs because it'll get compiled against the local copy+-- of the Cabal lib, thus enabling Cabal to bootstrap itself without relying+-- on any previous installation. This also means we can use any new features+-- immediately because we never have to worry about building Cabal with an+-- older version of itself.
dist/build/Agda/Syntax/Parser/Lexer.hs view
@@ -48,19 +48,19 @@ import GlaExts #endif alex_base :: AlexAddr-alex_base = AlexA# "\xf7\xff\xff\xff\x6c\x00\x00\x00\xc8\x00\x00\x00\x3c\x01\x00\x00\x40\x01\x00\x00\x44\x01\x00\x00\x4b\x01\x00\x00\x70\x00\x00\x00\x73\x00\x00\x00\x76\x00\x00\x00\x7a\x00\x00\x00\x7d\x00\x00\x00\x94\x00\x00\x00\xa3\xff\xff\xff\x81\x00\x00\x00\x82\x00\x00\x00\x68\x01\x00\x00\xa1\xff\xff\xff\x48\x01\x00\x00\xa0\xff\xff\xff\x49\x01\x00\x00\x9f\xff\xff\xff\x4f\x01\x00\x00\x9b\xff\xff\xff\x50\x01\x00\x00\x8f\xff\xff\xff\x51\x01\x00\x00\xa8\xff\xff\xff\x53\x01\x00\x00\x9d\xff\xff\xff\x54\x01\x00\x00\xa9\xff\xff\xff\x55\x01\x00\x00\xaa\xff\xff\xff\x57\x01\x00\x00\x91\xff\xff\xff\x58\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\xff\xff\xff\xa6\xff\xff\xff\xb1\xff\xff\xff\x16\x00\x00\x00\xb3\xff\xff\xff\x23\x00\x00\x00\x30\x00\x00\x00\x32\x00\x00\x00\x18\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x75\x00\x00\x00\xa0\x00\x00\x00\xb0\x00\x00\x00\xa6\x00\x00\x00\xb8\x00\x00\x00\x6f\x01\x00\x00\x75\x01\x00\x00\x9a\x01\x00\x00\xbe\x01\x00\x00\xc4\x01\x00\x00\xcd\x01\x00\x00\xd6\x01\x00\x00\xdc\x01\x00\x00\xf4\x01\x00\x00\xf9\x01\x00\x00\xfe\x01\x00\x00\x06\x02\x00\x00\x16\x02\x00\x00\x22\x02\x00\x00\x28\x02\x00\x00\x2e\x02\x00\x00\x34\x02\x00\x00\x40\x02\x00\x00\x4c\x02\x00\x00\x52\x02\x00\x00\x5a\x02\x00\x00\x74\x02\x00\x00\x7a\x02\x00\x00\x7f\x02\x00\x00\x9b\x02\x00\x00\xa1\x02\x00\x00\xa6\x02\x00\x00\xab\x02\x00\x00\xc3\x02\x00\x00\xc8\x02\x00\x00\xcd\x02\x00\x00\xd2\x02\x00\x00\xfc\x02\x00\x00\x01\x03\x00\x00\x07\x03\x00\x00\x0c\x03\x00\x00\x24\x03\x00\x00\x29\x03\x00\x00\x2e\x03\x00\x00\x33\x03\x00\x00\x4c\x03\x00\x00\x54\x03\x00\x00\x59\x03\x00\x00\x5e\x03\x00\x00\x64\x03\x00\x00\x7c\x03\x00\x00\x81\x03\x00\x00\x86\x03\x00\x00\x8b\x03\x00\x00\xa3\x03\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x9c\x00\x00\x00\xb2\x03\x00\x00\x9d\x00\x00\x00\x23\x04\x00\x00\x94\x04\x00\x00\x05\x05\x00\x00\x76\x05\x00\x00\xe7\x05\x00\x00\x43\x06\x00\x00\x88\x00\x00\x00\x9f\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x06\x00\x00\x57\x07\x00\x00\xb3\x07\x00\x00\x0f\x08\x00\x00\x6b\x08\x00\x00\xc7\x08\x00\x00\x23\x09\x00\x00\x7f\x09\x00\x00\xdb\x09\x00\x00\x37\x0a\x00\x00\x93\x0a\x00\x00\xef\x0a\x00\x00\x4b\x0b\x00\x00\xa7\x0b\x00\x00\x03\x0c\x00\x00\x5f\x0c\x00\x00\xbb\x0c\x00\x00\x17\x0d\x00\x00\x73\x0d\x00\x00\xcf\x0d\x00\x00\x2b\x0e\x00\x00\x87\x0e\x00\x00\xe3\x0e\x00\x00\x3f\x0f\x00\x00\x9b\x0f\x00\x00\xf7\x0f\x00\x00\x53\x10\x00\x00\xaf\x10\x00\x00\x0b\x11\x00\x00\x67\x11\x00\x00\xc3\x11\x00\x00\x1f\x12\x00\x00\x7b\x12\x00\x00\xd7\x12\x00\x00\x33\x13\x00\x00\x8f\x13\x00\x00\xeb\x13\x00\x00\x47\x14\x00\x00\xa3\x14\x00\x00\xff\x14\x00\x00\x5b\x15\x00\x00\xb7\x15\x00\x00\x13\x16\x00\x00\x6f\x16\x00\x00\xcb\x16\x00\x00\x27\x17\x00\x00\x83\x17\x00\x00\xdf\x17\x00\x00\x3b\x18\x00\x00\x97\x18\x00\x00\xf3\x18\x00\x00\x4f\x19\x00\x00\xab\x19\x00\x00\x07\x1a\x00\x00\x63\x1a\x00\x00\xbf\x1a\x00\x00\x1b\x1b\x00\x00\x77\x1b\x00\x00\xd3\x1b\x00\x00\x2f\x1c\x00\x00\x8b\x1c\x00\x00\xe7\x1c\x00\x00\x43\x1d\x00\x00\x9f\x1d\x00\x00\xfb\x1d\x00\x00\x57\x1e\x00\x00\xb3\x1e\x00\x00\x0f\x1f\x00\x00\x6b\x1f\x00\x00\xc7\x1f\x00\x00\x23\x20\x00\x00\x7f\x20\x00\x00\xdb\x20\x00\x00\x37\x21\x00\x00\x93\x21\x00\x00\xef\x21\x00\x00\x4b\x22\x00\x00\xa7\x22\x00\x00\x03\x23\x00\x00\x5f\x23\x00\x00\xbb\x23\x00\x00\x17\x24\x00\x00\x73\x24\x00\x00\xcf\x24\x00\x00\x2b\x25\x00\x00\x87\x25\x00\x00\xe3\x25\x00\x00\x3f\x26\x00\x00\x9b\x26\x00\x00\xf7\x26\x00\x00\x53\x27\x00\x00\xaf\x27\x00\x00\x0b\x28\x00\x00\x67\x28\x00\x00\xc3\x28\x00\x00\x1f\x29\x00\x00\x7b\x29\x00\x00\xd7\x29\x00\x00\x33\x2a\x00\x00\x8f\x2a\x00\x00\xeb\x2a\x00\x00\x47\x2b\x00\x00\xa3\x2b\x00\x00\xff\x2b\x00\x00\x5b\x2c\x00\x00\xb7\x2c\x00\x00\x13\x2d\x00\x00\x6f\x2d\x00\x00\xcb\x2d\x00\x00\x27\x2e\x00\x00\x83\x2e\x00\x00\xdf\x2e\x00\x00\x3b\x2f\x00\x00\x97\x2f\x00\x00\xf3\x2f\x00\x00\x4f\x30\x00\x00\xab\x30\x00\x00\x07\x31\x00\x00\x63\x31\x00\x00\xbf\x31\x00\x00\x1b\x32\x00\x00\x77\x32\x00\x00\xd3\x32\x00\x00\x2f\x33\x00\x00\x8b\x33\x00\x00\xe7\x33\x00\x00\x43\x34\x00\x00\x9f\x34\x00\x00\xfb\x34\x00\x00\x57\x35\x00\x00\xb3\x35\x00\x00\x0f\x36\x00\x00\x6b\x36\x00\x00\xc7\x36\x00\x00\x23\x37\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x7f\x37\x00\x00\xdb\x37\x00\x00\x37\x38\x00\x00\x93\x38\x00\x00\xef\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x4b\x39\x00\x00\xa7\x39\x00\x00\x03\x3a\x00\x00\x5f\x3a\x00\x00\xbb\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x3b\x00\x00\x73\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x3b\x00\x00\x2b\x3c\x00\x00\x87\x3c\x00\x00\xe3\x3c\x00\x00\x3f\x3d\x00\x00\x9b\x3d\x00\x00\xf7\x3d\x00\x00\x53\x3e\x00\x00\xaf\x3e\x00\x00\x0b\x3f\x00\x00\x67\x3f\x00\x00\xc3\x3f\x00\x00\x1f\x40\x00\x00\x7b\x40\x00\x00\xd7\x40\x00\x00\x33\x41\x00\x00\x8f\x41\x00\x00\xeb\x41\x00\x00\x47\x42\x00\x00\xa3\x42\x00\x00\xff\x42\x00\x00\x5b\x43\x00\x00\xb7\x43\x00\x00\x13\x44\x00\x00\x6f\x44\x00\x00\xcb\x44\x00\x00\x27\x45\x00\x00\x83\x45\x00\x00\xdf\x45\x00\x00\x3b\x46\x00\x00\x97\x46\x00\x00\xf3\x46\x00\x00\x4f\x47\x00\x00\xab\x47\x00\x00\x07\x48\x00\x00"#+alex_base = AlexA# "\xf7\xff\xff\xff\x6c\x00\x00\x00\xc8\x00\x00\x00\x3c\x01\x00\x00\x40\x01\x00\x00\x44\x01\x00\x00\x4b\x01\x00\x00\x70\x00\x00\x00\x73\x00\x00\x00\x76\x00\x00\x00\x7a\x00\x00\x00\x7d\x00\x00\x00\x94\x00\x00\x00\xa3\xff\xff\xff\x81\x00\x00\x00\x82\x00\x00\x00\x68\x01\x00\x00\xa1\xff\xff\xff\x48\x01\x00\x00\xa0\xff\xff\xff\x49\x01\x00\x00\x9f\xff\xff\xff\x4f\x01\x00\x00\x9b\xff\xff\xff\x50\x01\x00\x00\x8f\xff\xff\xff\x51\x01\x00\x00\xa8\xff\xff\xff\x53\x01\x00\x00\x9d\xff\xff\xff\x54\x01\x00\x00\xa9\xff\xff\xff\x55\x01\x00\x00\xaa\xff\xff\xff\x57\x01\x00\x00\x91\xff\xff\xff\x58\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\xff\xff\xff\xa6\xff\xff\xff\xb1\xff\xff\xff\x16\x00\x00\x00\xb3\xff\xff\xff\x23\x00\x00\x00\x30\x00\x00\x00\x32\x00\x00\x00\x18\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x75\x00\x00\x00\xa0\x00\x00\x00\xb0\x00\x00\x00\xa6\x00\x00\x00\xb8\x00\x00\x00\x6f\x01\x00\x00\x75\x01\x00\x00\x9a\x01\x00\x00\xbe\x01\x00\x00\xc4\x01\x00\x00\xcd\x01\x00\x00\xd6\x01\x00\x00\xdc\x01\x00\x00\xf4\x01\x00\x00\xf9\x01\x00\x00\xfe\x01\x00\x00\x06\x02\x00\x00\x16\x02\x00\x00\x22\x02\x00\x00\x28\x02\x00\x00\x2e\x02\x00\x00\x34\x02\x00\x00\x40\x02\x00\x00\x4c\x02\x00\x00\x52\x02\x00\x00\x5a\x02\x00\x00\x74\x02\x00\x00\x7a\x02\x00\x00\x7f\x02\x00\x00\x9b\x02\x00\x00\xa1\x02\x00\x00\xa6\x02\x00\x00\xab\x02\x00\x00\xc3\x02\x00\x00\xc8\x02\x00\x00\xcd\x02\x00\x00\xd2\x02\x00\x00\xfc\x02\x00\x00\x01\x03\x00\x00\x07\x03\x00\x00\x0c\x03\x00\x00\x24\x03\x00\x00\x29\x03\x00\x00\x2e\x03\x00\x00\x33\x03\x00\x00\x4c\x03\x00\x00\x54\x03\x00\x00\x59\x03\x00\x00\x5e\x03\x00\x00\x64\x03\x00\x00\x7c\x03\x00\x00\x81\x03\x00\x00\x86\x03\x00\x00\x8b\x03\x00\x00\xa3\x03\x00\x00\xa8\x03\x00\x00\xad\x03\x00\x00\xb2\x03\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x9c\x00\x00\x00\xd4\x03\x00\x00\x9d\x00\x00\x00\x45\x04\x00\x00\xb6\x04\x00\x00\x27\x05\x00\x00\x98\x05\x00\x00\x09\x06\x00\x00\x65\x06\x00\x00\x88\x00\x00\x00\xc1\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x07\x00\x00\x79\x07\x00\x00\xd5\x07\x00\x00\x31\x08\x00\x00\x8d\x08\x00\x00\xe9\x08\x00\x00\x45\x09\x00\x00\xa1\x09\x00\x00\xfd\x09\x00\x00\x59\x0a\x00\x00\xb5\x0a\x00\x00\x11\x0b\x00\x00\x6d\x0b\x00\x00\xc9\x0b\x00\x00\x25\x0c\x00\x00\x81\x0c\x00\x00\xdd\x0c\x00\x00\x39\x0d\x00\x00\x95\x0d\x00\x00\xf1\x0d\x00\x00\x4d\x0e\x00\x00\xa9\x0e\x00\x00\x05\x0f\x00\x00\x61\x0f\x00\x00\xbd\x0f\x00\x00\x19\x10\x00\x00\x75\x10\x00\x00\xd1\x10\x00\x00\x2d\x11\x00\x00\x89\x11\x00\x00\xe5\x11\x00\x00\x41\x12\x00\x00\x9d\x12\x00\x00\xf9\x12\x00\x00\x55\x13\x00\x00\xb1\x13\x00\x00\x0d\x14\x00\x00\x69\x14\x00\x00\xc5\x14\x00\x00\x21\x15\x00\x00\x7d\x15\x00\x00\xd9\x15\x00\x00\x35\x16\x00\x00\x91\x16\x00\x00\xed\x16\x00\x00\x49\x17\x00\x00\xa5\x17\x00\x00\x01\x18\x00\x00\x5d\x18\x00\x00\xb9\x18\x00\x00\x15\x19\x00\x00\x71\x19\x00\x00\xcd\x19\x00\x00\x29\x1a\x00\x00\x85\x1a\x00\x00\xe1\x1a\x00\x00\x3d\x1b\x00\x00\x99\x1b\x00\x00\xf5\x1b\x00\x00\x51\x1c\x00\x00\xad\x1c\x00\x00\x09\x1d\x00\x00\x65\x1d\x00\x00\xc1\x1d\x00\x00\x1d\x1e\x00\x00\x79\x1e\x00\x00\xd5\x1e\x00\x00\x31\x1f\x00\x00\x8d\x1f\x00\x00\xe9\x1f\x00\x00\x45\x20\x00\x00\xa1\x20\x00\x00\xfd\x20\x00\x00\x59\x21\x00\x00\xb5\x21\x00\x00\x11\x22\x00\x00\x6d\x22\x00\x00\xc9\x22\x00\x00\x25\x23\x00\x00\x81\x23\x00\x00\xdd\x23\x00\x00\x39\x24\x00\x00\x95\x24\x00\x00\xf1\x24\x00\x00\x4d\x25\x00\x00\xa9\x25\x00\x00\x05\x26\x00\x00\x61\x26\x00\x00\xbd\x26\x00\x00\x19\x27\x00\x00\x75\x27\x00\x00\xd1\x27\x00\x00\x2d\x28\x00\x00\x89\x28\x00\x00\xe5\x28\x00\x00\x41\x29\x00\x00\x9d\x29\x00\x00\xf9\x29\x00\x00\x55\x2a\x00\x00\xb1\x2a\x00\x00\x0d\x2b\x00\x00\x69\x2b\x00\x00\xc5\x2b\x00\x00\x21\x2c\x00\x00\x7d\x2c\x00\x00\xd9\x2c\x00\x00\x35\x2d\x00\x00\x91\x2d\x00\x00\xed\x2d\x00\x00\x49\x2e\x00\x00\xa5\x2e\x00\x00\x01\x2f\x00\x00\x5d\x2f\x00\x00\xb9\x2f\x00\x00\x15\x30\x00\x00\x71\x30\x00\x00\xcd\x30\x00\x00\x29\x31\x00\x00\x85\x31\x00\x00\xe1\x31\x00\x00\x3d\x32\x00\x00\x99\x32\x00\x00\xf5\x32\x00\x00\x51\x33\x00\x00\xad\x33\x00\x00\x09\x34\x00\x00\x65\x34\x00\x00\xc1\x34\x00\x00\x1d\x35\x00\x00\x79\x35\x00\x00\xd5\x35\x00\x00\x31\x36\x00\x00\x8d\x36\x00\x00\xe9\x36\x00\x00\x45\x37\x00\x00\xa1\x37\x00\x00\xfd\x37\x00\x00\x59\x38\x00\x00\xb5\x38\x00\x00\x11\x39\x00\x00\x6d\x39\x00\x00\xc9\x39\x00\x00\x25\x3a\x00\x00\x81\x3a\x00\x00\xdd\x3a\x00\x00\x39\x3b\x00\x00\x95\x3b\x00\x00\xf1\x3b\x00\x00\x4d\x3c\x00\x00\xa9\x3c\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x05\x3d\x00\x00\x61\x3d\x00\x00\xbd\x3d\x00\x00\x19\x3e\x00\x00\x75\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\xd1\x3e\x00\x00\x2d\x3f\x00\x00\x89\x3f\x00\x00\xe5\x3f\x00\x00\x41\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x40\x00\x00\xf9\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x41\x00\x00\xb1\x41\x00\x00\x0d\x42\x00\x00\x69\x42\x00\x00\xc5\x42\x00\x00\x21\x43\x00\x00\x7d\x43\x00\x00\xd9\x43\x00\x00\x35\x44\x00\x00\x91\x44\x00\x00\xed\x44\x00\x00\x49\x45\x00\x00\xa5\x45\x00\x00\x01\x46\x00\x00\x5d\x46\x00\x00\xb9\x46\x00\x00\x15\x47\x00\x00\x71\x47\x00\x00\xcd\x47\x00\x00\x29\x48\x00\x00\x85\x48\x00\x00\xe1\x48\x00\x00\x3d\x49\x00\x00\x99\x49\x00\x00\xf5\x49\x00\x00\x51\x4a\x00\x00\xad\x4a\x00\x00\x09\x4b\x00\x00\x65\x4b\x00\x00\xc1\x4b\x00\x00\x1d\x4c\x00\x00\x79\x4c\x00\x00\xd5\x4c\x00\x00\x31\x4d\x00\x00\x8d\x4d\x00\x00"#  alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\x7d\x00\x35\x00\x35\x00\x35\x00\x11\x00\x13\x00\x15\x00\x17\x00\x19\x00\x1b\x00\x1d\x00\x1f\x00\x21\x00\x09\x00\x23\x00\x26\x00\xff\xff\x29\x00\x2d\x00\x2e\x00\x2f\x00\x31\x00\x35\x00\x3d\x01\x1f\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x1e\x01\x18\x01\x19\x01\x3d\x01\x3d\x01\x3d\x01\x7c\x00\x10\x01\x3d\x01\x20\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x13\x01\x12\x01\x3d\x01\x14\x01\x3d\x01\x16\x01\x1c\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\xec\x00\x3d\x01\x3d\x01\xe8\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x1b\x01\x3d\x01\x3d\x01\x15\x01\x3d\x01\xe1\x00\x3d\x01\xc2\x00\xbc\x00\x3d\x01\x8e\x00\x3d\x01\x00\x01\x84\x00\x3d\x01\x3d\x01\x82\x00\xb8\x00\x3d\x01\xad\x00\xa1\x00\x3d\x01\x98\x00\x3d\x01\x3d\x01\xfa\x00\x3d\x01\x89\x00\x3d\x01\x3d\x01\x3d\x01\x38\x00\x17\x01\x1d\x01\x3d\x01\x7e\x00\x35\x00\x35\x00\x35\x00\x2a\x00\x10\x00\x10\x00\x10\x00\x0f\x00\x0f\x00\x0f\x00\x0b\x00\x0b\x00\x0b\x00\xff\xff\x0c\x00\x0c\x00\x0c\x00\x0b\x00\x0b\x00\x0b\x00\xff\xff\x35\x00\x0f\x00\x0f\x00\x0f\x00\x10\x00\x30\x00\x32\x00\x0f\x00\x33\x00\x2b\x00\x0b\x00\x34\x00\x37\x00\x7b\x00\x0c\x00\x70\x00\x0e\x01\x0b\x00\xff\xff\x0c\x00\x0c\x00\x0c\x00\x0f\x00\x35\x00\x35\x00\x35\x00\xff\xff\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x72\x00\x00\x00\x11\x01\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x01\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x2c\x00\x3a\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x0d\x00\xff\xff\x00\x00\x7d\x00\x35\x00\x35\x00\x35\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x71\x00\x35\x00\x3d\x01\x1f\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x1e\x01\x18\x01\x19\x01\x3d\x01\x3d\x01\x3d\x01\x7c\x00\x10\x01\x3d\x01\x20\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x13\x01\x12\x01\x3d\x01\x14\x01\x3d\x01\x16\x01\x1c\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\xec\x00\x3d\x01\x3d\x01\xe8\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x1b\x01\x3d\x01\x3d\x01\x15\x01\x3d\x01\xe1\x00\x3d\x01\xc2\x00\xbc\x00\x3d\x01\x8e\x00\x3d\x01\x00\x01\x84\x00\x3d\x01\x3d\x01\x82\x00\xb8\x00\x3d\x01\xad\x00\xa1\x00\x3d\x01\x98\x00\x3d\x01\x3d\x01\xfa\x00\x3d\x01\x89\x00\x3d\x01\x3d\x01\x3d\x01\x38\x00\x17\x01\x1d\x01\x3d\x01\x35\x00\x35\x00\x35\x00\x7d\x00\x35\x00\x35\x00\x35\x00\x7f\x00\x35\x00\x35\x00\x35\x00\xff\xff\xff\xff\xff\xff\x36\x00\x36\x00\x36\x00\x36\x00\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\x00\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x36\x00\x00\x00\x7b\x00\x3e\x00\x00\x00\x00\x00\x7b\x00\xff\xff\x10\x00\x10\x00\x10\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x4f\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\xff\xff\x00\x00\x6c\x00\x00\x00\x00\x00\x41\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x08\x01\x00\x00\x1e\x00\x71\x00\x18\x00\x22\x00\xff\xff\x71\x00\x24\x00\x00\x00\x1a\x00\x71\x00\x00\x00\x00\x00\x00\x00\x20\x00\x0e\x00\x00\x00\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x42\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x44\x00\x00\x00\x43\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x45\x00\xff\xff\x00\x00\x00\x00\x00\x00\x46\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x00\x00\x00\x00\x00\x00\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x4b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\xff\xff\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x55\x00\x54\x00\xff\xff\x00\x00\x56\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x58\x00\x00\x00\x59\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x5e\x00\x00\x00\x00\x00\x00\x00\x5d\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\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\x00\x00\x63\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x64\x00\x66\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x69\x00\xff\xff\x68\x00\x00\x00\x67\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x65\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x00\x00\x00\x00\x76\x00\x6e\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x78\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\xff\xff\x76\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\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x78\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\xff\xff\x76\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\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x78\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\xff\xff\x76\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\x77\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x78\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\xff\xff\x77\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\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x00\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x79\x00\x75\x00\x75\x00\x7a\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\xff\xff\x75\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\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\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\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x77\x00\x75\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x77\x00\x3e\x01\x77\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x73\x00\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x1a\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x80\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x81\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd2\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb2\x00\x83\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x85\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x86\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x87\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x88\x00\x91\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x8a\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x8b\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x8c\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x8d\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf1\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x8f\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x90\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x92\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x93\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x94\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x95\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc6\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x06\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x96\x00\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x97\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x99\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x9a\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x9b\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x9c\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x9d\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x9e\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x9f\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa0\x00\x3e\x01\x3e\x01\xa9\x00\x3e\x01\x3e\x01\x0d\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa2\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa3\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa5\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa6\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa7\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe5\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa8\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xaa\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xab\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xac\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xae\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xaf\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb0\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb1\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb3\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb5\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb6\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb7\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd9\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb9\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xba\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xbb\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xbd\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xbe\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xbf\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc0\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xcf\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc1\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc3\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc5\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc7\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc8\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc9\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xca\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xcb\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xcc\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xcd\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xce\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd3\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd0\x00\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd1\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd5\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd6\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd7\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd8\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xda\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xdb\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xdc\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xdd\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xde\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xdf\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe0\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe2\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe3\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\xf2\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe6\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe7\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe9\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xea\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xeb\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xed\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xee\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xef\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf0\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf5\x00\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf6\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf7\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf8\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf9\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xfb\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xfc\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xfd\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xfe\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xff\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x01\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x02\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x03\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x04\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x05\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x09\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x0a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x0b\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x0c\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3f\x01\x3e\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3e\x01\x3f\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3d\x01\x3e\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\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\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\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\x3d\x01\x3e\x01\x3d\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x35\x01\x3e\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x27\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x35\x01\x3e\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x35\x01\x3e\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x35\x01\x3e\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3c\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x35\x01\x3e\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3b\x01\x3e\x01\x3b\x01\x35\x01\x3e\x01\x23\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x35\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x37\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x37\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x36\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x37\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x37\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x37\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x37\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x38\x01\x3e\x01\x38\x01\x40\x01\x3e\x01\x2c\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x39\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x39\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3c\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3d\x01\x3e\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x00\x00\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x28\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x41\x01\x3d\x01\x3d\x01\x42\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3e\x01\x3d\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x38\x01\x3e\x01\x38\x01\x40\x01\x3e\x01\x2f\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2f\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3b\x01\x3e\x01\x3b\x01\x40\x01\x3e\x01\x32\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x32\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3f\x01\x3e\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x40\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3d\x01\x3f\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x00\x00\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x41\x01\x3d\x01\x3d\x01\x42\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\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\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\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\x3d\x01\x3f\x01\x3d\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x00\x00\x3f\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\x80\x00\x35\x00\x35\x00\x35\x00\x11\x00\x13\x00\x15\x00\x17\x00\x19\x00\x1b\x00\x1d\x00\x1f\x00\x21\x00\x09\x00\x23\x00\x26\x00\xff\xff\x29\x00\x2d\x00\x2e\x00\x2f\x00\x31\x00\x35\x00\x4f\x01\x31\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x30\x01\x2a\x01\x2b\x01\x4f\x01\x4f\x01\x4f\x01\x7f\x00\x22\x01\x4f\x01\x32\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x25\x01\x24\x01\x4f\x01\x26\x01\x4f\x01\x28\x01\x2e\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\xef\x00\x4f\x01\x4f\x01\xeb\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x2d\x01\x4f\x01\x4f\x01\x27\x01\x4f\x01\xe4\x00\x4f\x01\xc5\x00\xbf\x00\x4f\x01\x91\x00\x4f\x01\x12\x01\x87\x00\x4f\x01\x4f\x01\x85\x00\xbb\x00\x4f\x01\xb0\x00\xa4\x00\x01\x01\x9b\x00\x07\x01\x4f\x01\x0c\x01\x4f\x01\x8c\x00\x4f\x01\x4f\x01\x4f\x01\x38\x00\x29\x01\x2f\x01\x4f\x01\x81\x00\x35\x00\x35\x00\x35\x00\x2a\x00\x10\x00\x10\x00\x10\x00\x0f\x00\x0f\x00\x0f\x00\x0b\x00\x0b\x00\x0b\x00\xff\xff\x0c\x00\x0c\x00\x0c\x00\x0b\x00\x0b\x00\x0b\x00\xff\xff\x35\x00\x0f\x00\x0f\x00\x0f\x00\x10\x00\x30\x00\x32\x00\x0f\x00\x33\x00\x2b\x00\x0b\x00\x34\x00\x37\x00\x7e\x00\x0c\x00\x73\x00\x20\x01\x0b\x00\xff\xff\x0c\x00\x0c\x00\x0c\x00\x0f\x00\x35\x00\x35\x00\x35\x00\xff\xff\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x75\x00\x00\x00\x23\x01\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x01\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x2c\x00\x3a\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x0d\x00\xff\xff\x00\x00\x80\x00\x35\x00\x35\x00\x35\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x74\x00\x35\x00\x4f\x01\x31\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x30\x01\x2a\x01\x2b\x01\x4f\x01\x4f\x01\x4f\x01\x7f\x00\x22\x01\x4f\x01\x32\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x25\x01\x24\x01\x4f\x01\x26\x01\x4f\x01\x28\x01\x2e\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\xef\x00\x4f\x01\x4f\x01\xeb\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x2d\x01\x4f\x01\x4f\x01\x27\x01\x4f\x01\xe4\x00\x4f\x01\xc5\x00\xbf\x00\x4f\x01\x91\x00\x4f\x01\x12\x01\x87\x00\x4f\x01\x4f\x01\x85\x00\xbb\x00\x4f\x01\xb0\x00\xa4\x00\x01\x01\x9b\x00\x07\x01\x4f\x01\x0c\x01\x4f\x01\x8c\x00\x4f\x01\x4f\x01\x4f\x01\x38\x00\x29\x01\x2f\x01\x4f\x01\x35\x00\x35\x00\x35\x00\x80\x00\x35\x00\x35\x00\x35\x00\x82\x00\x35\x00\x35\x00\x35\x00\xff\xff\xff\xff\xff\xff\x36\x00\x36\x00\x36\x00\x36\x00\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\x00\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\x36\x00\x00\x00\x7e\x00\x3e\x00\x00\x00\x00\x00\x7e\x00\xff\xff\x10\x00\x10\x00\x10\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x4f\x00\xff\xff\x6c\x00\x00\x00\x00\x00\x00\x00\x60\x00\xff\xff\x00\x00\x6f\x00\x00\x00\x00\x00\x41\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x1a\x01\x00\x00\x1e\x00\x74\x00\x18\x00\x22\x00\xff\xff\x74\x00\x24\x00\x00\x00\x1a\x00\x74\x00\x00\x00\x00\x00\x00\x00\x20\x00\x0e\x00\x00\x00\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x42\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x44\x00\x00\x00\x43\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x45\x00\xff\xff\x00\x00\x00\x00\x00\x00\x46\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x00\x00\x00\x00\x00\x00\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x4b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\xff\xff\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x55\x00\x54\x00\xff\xff\x00\x00\x56\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x58\x00\x00\x00\x59\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x5e\x00\x00\x00\x00\x00\x00\x00\x5d\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\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\x00\x00\x63\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x64\x00\x66\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x69\x00\xff\xff\x68\x00\x00\x00\x67\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x65\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x6b\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\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\x6e\x00\x00\x00\x00\x00\x79\x00\x71\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x00\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\x7b\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\xff\xff\x79\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\x79\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x00\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\x7b\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\xff\xff\x79\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\x79\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x00\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\x7b\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\xff\xff\x79\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\x7a\x00\x00\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x00\x00\x00\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7b\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x00\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x00\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\xff\xff\x7a\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\x78\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x00\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x7c\x00\x78\x00\x78\x00\x7d\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\xff\xff\x78\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\x78\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x78\x00\x78\x00\x78\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\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x7a\x00\x78\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x00\x00\x00\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x00\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x00\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x00\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x7a\x00\x00\x00\x7a\x00\x50\x01\x7a\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x76\x00\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x2c\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x83\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x84\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xd5\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xb5\x00\x86\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x88\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x89\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x8a\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x8b\x00\x94\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x8d\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x8e\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x8f\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x90\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xf4\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x92\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x93\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x95\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x96\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x97\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x98\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xc9\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x18\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x99\x00\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x9a\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x9c\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x9d\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x9e\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x9f\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xa0\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xa1\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xa2\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xa3\x00\x50\x01\x50\x01\xac\x00\x50\x01\x50\x01\x1f\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xa5\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xa6\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xa7\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xa8\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xa9\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xaa\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xe8\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xab\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xad\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xae\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xaf\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xb1\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xb2\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xb3\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xb4\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xb6\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xb7\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xb8\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xb9\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xba\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xdc\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xbc\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xbd\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xbe\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xc0\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xc1\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xc2\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xc3\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xd2\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xc4\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xc6\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xc7\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xc8\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xca\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xcb\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xcc\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xcd\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xce\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xcf\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xd0\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xd1\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xd6\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xd7\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xd3\x00\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xd4\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xd8\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xd9\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xda\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xdb\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xdd\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xde\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xdf\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xe0\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xe1\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xe2\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xe3\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xe5\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xe6\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xe7\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\xf5\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xe9\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xea\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xec\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xed\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xee\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xf0\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xf1\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xf2\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xf3\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xf8\x00\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\xf6\x00\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xf9\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xfa\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xfb\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xfc\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xfd\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xfe\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\xff\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x02\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x03\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x04\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x05\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x06\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x08\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x09\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x0a\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x0b\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x0d\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x0e\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x0f\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x10\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x11\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x13\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x14\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x15\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x16\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x17\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x1b\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x1c\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x1d\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x1e\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x51\x01\x50\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x00\x00\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x51\x01\x50\x01\x51\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x4f\x01\x50\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\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\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x4f\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\x4f\x01\x50\x01\x4f\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x47\x01\x50\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x4c\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x4c\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x39\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x47\x01\x50\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x4c\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x4c\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x47\x01\x50\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x4c\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x4c\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x47\x01\x50\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x38\x01\x38\x01\x38\x01\x38\x01\x37\x01\x38\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x38\x01\x38\x01\x38\x01\x38\x01\x37\x01\x38\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x4e\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x47\x01\x50\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x38\x01\x38\x01\x38\x01\x38\x01\x37\x01\x38\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x38\x01\x38\x01\x38\x01\x38\x01\x37\x01\x38\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x4d\x01\x50\x01\x4d\x01\x47\x01\x50\x01\x35\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x36\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x38\x01\x38\x01\x38\x01\x38\x01\x37\x01\x38\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x38\x01\x38\x01\x38\x01\x38\x01\x37\x01\x38\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x47\x01\x50\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x38\x01\x38\x01\x38\x01\x38\x01\x37\x01\x38\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x38\x01\x38\x01\x38\x01\x38\x01\x37\x01\x38\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x49\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x49\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x48\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x49\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x49\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x49\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x49\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x4a\x01\x50\x01\x4a\x01\x52\x01\x50\x01\x3e\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x40\x01\x40\x01\x40\x01\x40\x01\x3d\x01\x40\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x40\x01\x40\x01\x40\x01\x40\x01\x3d\x01\x40\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x40\x01\x40\x01\x40\x01\x40\x01\x3d\x01\x40\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x40\x01\x40\x01\x40\x01\x40\x01\x3d\x01\x40\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x4b\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x40\x01\x40\x01\x40\x01\x40\x01\x3d\x01\x40\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x40\x01\x40\x01\x40\x01\x40\x01\x3d\x01\x40\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x40\x01\x40\x01\x40\x01\x40\x01\x3d\x01\x40\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x40\x01\x40\x01\x40\x01\x40\x01\x3d\x01\x40\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x4b\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x4e\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x4f\x01\x50\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x00\x00\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x4f\x01\x3a\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x4f\x01\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x53\x01\x4f\x01\x4f\x01\x54\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x4f\x01\x50\x01\x4f\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x4a\x01\x50\x01\x4a\x01\x52\x01\x50\x01\x41\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x41\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x42\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x4d\x01\x50\x01\x4d\x01\x52\x01\x50\x01\x44\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x44\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x52\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x50\x01\x51\x01\x50\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x00\x00\x51\x01\x51\x01\x51\x01\x51\x01\x52\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x51\x01\x4f\x01\x51\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x00\x00\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x53\x01\x4f\x01\x4f\x01\x54\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x4f\x01\x4f\x01\x4f\x01\x4f\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\x4f\x01\x4f\x01\x4f\x01\x4f\x01\x00\x00\x4f\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\x4f\x01\x51\x01\x4f\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x00\x00\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x51\x01\x00\x00\x51\x01\x00\x00\x51\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\x62\x00\x65\x00\x67\x00\x69\x00\x6e\x00\x7b\x00\x63\x00\x6f\x00\x64\x00\x7d\x00\x65\x00\x0a\x00\x0a\x00\x0a\x00\x65\x00\x6e\x00\x64\x00\x63\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\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0b\x00\x0c\x00\x0d\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x20\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x7b\x00\x6f\x00\x20\x00\x64\x00\x7d\x00\x20\x00\x65\x00\x23\x00\x2d\x00\x20\x00\x2d\x00\x21\x00\x20\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x2d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x6f\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x2d\x00\xff\xff\x2e\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2e\x00\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x5c\x00\x23\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\x5c\x00\x20\x00\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\xff\xff\x7b\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\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x0a\x00\x20\x00\x0a\x00\x0a\x00\x0a\x00\x20\x00\x0a\x00\x0a\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\x2d\x00\x23\x00\xff\xff\xff\xff\x2d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x42\x00\x43\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x20\x00\xff\xff\x4c\x00\xff\xff\xff\xff\x4f\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\x67\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x63\x00\x7b\x00\x69\x00\x64\x00\x20\x00\x7b\x00\x65\x00\xff\xff\x6e\x00\x7b\x00\xff\xff\xff\xff\xff\xff\x6f\x00\x5c\x00\xff\xff\x7b\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7b\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x7d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x50\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x49\x00\xff\xff\x54\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x4f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x4e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x49\x00\xff\xff\xff\xff\xff\xff\x55\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x4c\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x20\x00\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x4e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x50\x00\x49\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x45\x00\x4c\x00\x20\x00\xff\xff\x44\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x44\x00\xff\xff\x41\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x50\x00\xff\xff\xff\xff\xff\xff\x59\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x45\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x4d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x50\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x4f\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x52\x00\x53\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x42\x00\x20\x00\x49\x00\xff\xff\x53\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x45\x00\x4c\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x21\x00\x4e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\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\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\x0a\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\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\x0a\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\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\x0a\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\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\x0a\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\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\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\x7c\x00\x21\x00\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\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\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\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\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\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\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\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\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\x21\x00\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\x21\x00\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\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\x62\x00\x65\x00\x67\x00\x69\x00\x6e\x00\x7b\x00\x63\x00\x6f\x00\x64\x00\x7d\x00\x65\x00\x0a\x00\x0a\x00\x0a\x00\x65\x00\x6e\x00\x64\x00\x63\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\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0b\x00\x0c\x00\x0d\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x20\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x7b\x00\x6f\x00\x20\x00\x64\x00\x7d\x00\x20\x00\x65\x00\x23\x00\x2d\x00\x20\x00\x2d\x00\x21\x00\x20\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x2d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x6f\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x2d\x00\xff\xff\x2e\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2e\x00\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x5c\x00\x23\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\x5c\x00\x20\x00\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\xff\xff\x7b\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\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x0a\x00\x20\x00\x0a\x00\x0a\x00\x0a\x00\x20\x00\x0a\x00\x0a\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\x2d\x00\x23\x00\xff\xff\xff\xff\x2d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x42\x00\x43\x00\x20\x00\x45\x00\xff\xff\xff\xff\xff\xff\x49\x00\x20\x00\xff\xff\x4c\x00\xff\xff\xff\xff\x4f\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\x67\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x63\x00\x7b\x00\x69\x00\x64\x00\x20\x00\x7b\x00\x65\x00\xff\xff\x6e\x00\x7b\x00\xff\xff\xff\xff\xff\xff\x6f\x00\x5c\x00\xff\xff\x7b\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7b\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x7d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x50\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x49\x00\xff\xff\x54\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x4f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x4e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x49\x00\xff\xff\xff\xff\xff\xff\x55\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x4c\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x20\x00\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x4e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x50\x00\x49\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x45\x00\x4c\x00\x20\x00\xff\xff\x44\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x44\x00\xff\xff\x41\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x50\x00\xff\xff\xff\xff\xff\xff\x59\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x45\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x4d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x50\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x4f\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x52\x00\x53\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x42\x00\x20\x00\x49\x00\xff\xff\x53\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x45\x00\x4c\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x41\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x21\x00\x4e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\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\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\x0a\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\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\x0a\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\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\x0a\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\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\x0a\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\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\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\x7c\x00\x21\x00\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\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\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\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\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\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\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\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\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\x21\x00\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\x21\x00\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\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\x6f\x00\x27\x00\xff\xff\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\xff\xff\xff\xff\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x72\x00\x27\x00\xff\xff\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\xff\xff\xff\xff\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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,322) [[],[(AlexAccPred  (alex_action_24) ( not' eof ))],[],[(AlexAcc (alex_action_27))],[],[(AlexAcc (alex_action_26))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40))],[],[(AlexAccPred  (alex_action_0) (alexRightContext 37))],[(AlexAccPred  (alex_action_0) (alexRightContext 37)),(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_0) (alexRightContext 37))],[(AlexAccPred  (alex_action_0) (alexRightContext 37)),(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccSkip)],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccPred  (alex_action_4) ( inState code ))],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_72))],[(AlexAccPred  (alex_action_19) ( not' (followedBy '#') ))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAccPred  (alex_action_19) ( not' (followedBy '#') ))],[],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_78))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_78))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_78))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_78))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_22))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_28))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_30))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_31))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_56))],[],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(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_73))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[],[],[]]-{-# LINE 187 "src/full/Agda/Syntax/Parser/Lexer.x" #-}+alex_accept = listArray (0::Int,340) [[],[(AlexAccPred  (alex_action_25) ( not' eof ))],[],[(AlexAcc (alex_action_28))],[],[(AlexAcc (alex_action_27))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40))],[],[(AlexAccPred  (alex_action_0) (alexRightContext 37))],[(AlexAccPred  (alex_action_0) (alexRightContext 37)),(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_0) (alexRightContext 37))],[(AlexAccPred  (alex_action_0) (alexRightContext 37)),(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccSkip)],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccPred  (alex_action_4) ( inState code ))],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_76))],[(AlexAccPred  (alex_action_20) ( not' (followedBy '#') ))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[(AlexAccPred  (alex_action_20) ( not' (followedBy '#') ))],[],[(AlexAccPred  (alex_action_21) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_21) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_82))],[(AlexAccPred  (alex_action_21) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_21) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_82))],[(AlexAccPred  (alex_action_21) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_82))],[(AlexAccPred  (alex_action_21) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_82))],[(AlexAccPred  (alex_action_21) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_21) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_21) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_23))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_30))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_31))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_56))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_60))],[],[(AlexAcc (alex_action_61))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(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_77))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_79))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[],[],[]]+{-# LINE 191 "src/full/Agda/Syntax/Parser/Lexer.x" #-}   -- | This is the initial state for parsing a literate file. Code blocks@@ -158,65 +158,69 @@ alex_action_14 =  keyword KwCOMPILED  alex_action_15 =  keyword KwIMPORT  alex_action_16 =  keyword KwIMPOSSIBLE -alex_action_17 =  keyword KwLINE -alex_action_18 =  withInterval $ TokString -alex_action_19 =  nestedComment -alex_action_20 =  withInterval TokComment -alex_action_22 =  begin bol_ -alex_action_24 =  offsideRule -alex_action_26 =  endWith newLayoutContext -alex_action_27 =  emptyLayout -alex_action_28 =  keyword KwLet -alex_action_29 =  keyword KwIn -alex_action_30 =  keyword KwWhere -alex_action_31 =  keyword KwField -alex_action_32 =  keyword KwWith -alex_action_33 =  keyword KwRewrite -alex_action_34 =  keyword KwPostulate -alex_action_35 =  keyword KwPrimitive -alex_action_36 =  keyword KwOpen -alex_action_37 =  keyword KwImport -alex_action_38 =  keyword KwModule -alex_action_39 =  keyword KwData -alex_action_40 =  keyword KwCoData -alex_action_41 =  keyword KwRecord -alex_action_42 =  keyword KwConstructor -alex_action_43 =  keyword KwInfix -alex_action_44 =  keyword KwInfixL -alex_action_45 =  keyword KwInfixR -alex_action_46 =  keyword KwMutual -alex_action_47 =  keyword KwAbstract -alex_action_48 =  keyword KwPrivate -alex_action_49 =  keyword KwSet -alex_action_50 =  keyword KwProp -alex_action_51 =  keyword KwForall -alex_action_52 =  withInterval' (read . drop 3) TokSetN -alex_action_53 =  keyword KwUsing -alex_action_54 =  keyword KwHiding -alex_action_55 =  keyword KwRenaming -alex_action_56 =  endWith $ keyword KwTo -alex_action_57 =  keyword KwPublic -alex_action_58 =  hole -alex_action_59 =  symbol SymEllipsis -alex_action_60 =  symbol SymDot -alex_action_61 =  symbol SymSemi -alex_action_62 =  symbol SymColon -alex_action_63 =  symbol SymEqual -alex_action_64 =  symbol SymUnderscore -alex_action_65 =  symbol SymQuestionMark -alex_action_66 =  symbol SymBar -alex_action_67 =  symbol SymOpenParen -alex_action_68 =  symbol SymCloseParen -alex_action_69 =  symbol SymArrow -alex_action_70 =  symbol SymLambda -alex_action_71 =  symbol SymAs -alex_action_72 =  symbol SymOpenBrace -alex_action_73 =  symbol SymCloseBrace -alex_action_74 =  litChar -alex_action_75 =  litString -alex_action_76 =  literal LitInt -alex_action_77 =  literal LitFloat -alex_action_78 =  identifier +alex_action_17 =  keyword KwETA +alex_action_18 =  keyword KwLINE +alex_action_19 =  withInterval $ TokString +alex_action_20 =  nestedComment +alex_action_21 =  withInterval TokComment +alex_action_23 =  begin bol_ +alex_action_25 =  offsideRule +alex_action_27 =  endWith newLayoutContext +alex_action_28 =  emptyLayout +alex_action_29 =  keyword KwLet +alex_action_30 =  keyword KwIn +alex_action_31 =  keyword KwWhere +alex_action_32 =  keyword KwField +alex_action_33 =  keyword KwWith +alex_action_34 =  keyword KwRewrite +alex_action_35 =  keyword KwPostulate +alex_action_36 =  keyword KwPrimitive +alex_action_37 =  keyword KwOpen +alex_action_38 =  keyword KwImport +alex_action_39 =  keyword KwModule +alex_action_40 =  keyword KwData +alex_action_41 =  keyword KwCoData +alex_action_42 =  keyword KwRecord +alex_action_43 =  keyword KwConstructor +alex_action_44 =  keyword KwInfix +alex_action_45 =  keyword KwInfixL +alex_action_46 =  keyword KwInfixR +alex_action_47 =  keyword KwMutual +alex_action_48 =  keyword KwAbstract +alex_action_49 =  keyword KwPrivate +alex_action_50 =  keyword KwSet +alex_action_51 =  keyword KwProp +alex_action_52 =  keyword KwForall +alex_action_53 =  withInterval' (read . drop 3) TokSetN +alex_action_54 =  keyword KwQuoteGoal +alex_action_55 =  keyword KwQuote +alex_action_56 =  keyword KwSyntax +alex_action_57 =  keyword KwUsing +alex_action_58 =  keyword KwHiding +alex_action_59 =  keyword KwRenaming +alex_action_60 =  endWith $ keyword KwTo +alex_action_61 =  keyword KwPublic +alex_action_62 =  hole +alex_action_63 =  symbol SymEllipsis +alex_action_64 =  symbol SymDot +alex_action_65 =  symbol SymSemi +alex_action_66 =  symbol SymColon +alex_action_67 =  symbol SymEqual +alex_action_68 =  symbol SymUnderscore +alex_action_69 =  symbol SymQuestionMark +alex_action_70 =  symbol SymBar +alex_action_71 =  symbol SymOpenParen +alex_action_72 =  symbol SymCloseParen +alex_action_73 =  symbol SymArrow +alex_action_74 =  symbol SymLambda +alex_action_75 =  symbol SymAs +alex_action_76 =  symbol SymOpenBrace +alex_action_77 =  symbol SymCloseBrace +alex_action_78 =  litChar +alex_action_79 =  litString +alex_action_80 =  literal LitInt +alex_action_81 =  literal LitFloat +alex_action_82 =  identifier  {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "<built-in>" #-}
dist/build/Agda/Syntax/Parser/Parser.hs view
@@ -26,3397 +26,3752 @@ import Agda.Syntax.Concrete.Pretty import Agda.Syntax.Common import Agda.Syntax.Fixity-import Agda.Syntax.Literal--import Agda.Utils.Monad-import Agda.Utils.QuickCheck-import Agda.Utils.TestHelpers-#if __GLASGOW_HASKELL__ >= 503-import Data.Array-#else-import Array-#endif-#if __GLASGOW_HASKELL__ >= 503-import GHC.Exts-#else-import GlaExts-#endif---- parser produced by Happy Version 1.17--newtype HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59 = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = GHC.Exts.Any-#else-type HappyAny = forall a . a-#endif-happyIn6 :: ([Token]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn6 x = unsafeCoerce# x-{-# INLINE happyIn6 #-}-happyOut6 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Token])-happyOut6 x = unsafeCoerce# x-{-# INLINE happyOut6 #-}-happyIn7 :: ([Token]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn7 x = unsafeCoerce# x-{-# INLINE happyIn7 #-}-happyOut7 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Token])-happyOut7 x = unsafeCoerce# x-{-# INLINE happyOut7 #-}-happyIn8 :: (Token) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn8 x = unsafeCoerce# x-{-# INLINE happyIn8 #-}-happyOut8 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Token)-happyOut8 x = unsafeCoerce# x-{-# INLINE happyOut8 #-}-happyIn9 :: (()) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn9 x = unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (())-happyOut9 x = unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: (([Pragma], [Declaration])) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn10 x = unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (([Pragma], [Declaration]))-happyOut10 x = unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyIn11 :: t11 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn11 x = unsafeCoerce# x-{-# INLINE happyIn11 #-}-happyOut11 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t11-happyOut11 x = unsafeCoerce# x-{-# INLINE happyOut11 #-}-happyIn12 :: t12 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn12 x = unsafeCoerce# x-{-# INLINE happyIn12 #-}-happyOut12 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t12-happyOut12 x = unsafeCoerce# x-{-# INLINE happyOut12 #-}-happyIn13 :: t13 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn13 x = unsafeCoerce# x-{-# INLINE happyIn13 #-}-happyOut13 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t13-happyOut13 x = unsafeCoerce# x-{-# INLINE happyOut13 #-}-happyIn14 :: (()) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn14 x = unsafeCoerce# x-{-# INLINE happyIn14 #-}-happyOut14 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (())-happyOut14 x = unsafeCoerce# x-{-# INLINE happyOut14 #-}-happyIn15 :: (Integer) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn15 x = unsafeCoerce# x-{-# INLINE happyIn15 #-}-happyOut15 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Integer)-happyOut15 x = unsafeCoerce# x-{-# INLINE happyOut15 #-}-happyIn16 :: (Name) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn16 x = unsafeCoerce# x-{-# INLINE happyIn16 #-}-happyOut16 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Name)-happyOut16 x = unsafeCoerce# x-{-# INLINE happyOut16 #-}-happyIn17 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn17 x = unsafeCoerce# x-{-# INLINE happyIn17 #-}-happyOut17 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Name])-happyOut17 x = unsafeCoerce# x-{-# INLINE happyOut17 #-}-happyIn18 :: ([(Hiding, Name)]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn18 x = unsafeCoerce# x-{-# INLINE happyIn18 #-}-happyOut18 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([(Hiding, Name)])-happyOut18 x = unsafeCoerce# x-{-# INLINE happyOut18 #-}-happyIn19 :: (QName) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn19 x = unsafeCoerce# x-{-# INLINE happyIn19 #-}-happyOut19 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (QName)-happyOut19 x = unsafeCoerce# x-{-# INLINE happyOut19 #-}-happyIn20 :: (QName) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn20 x = unsafeCoerce# x-{-# INLINE happyIn20 #-}-happyOut20 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (QName)-happyOut20 x = unsafeCoerce# x-{-# INLINE happyOut20 #-}-happyIn21 :: (Name) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn21 x = unsafeCoerce# x-{-# INLINE happyIn21 #-}-happyOut21 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Name)-happyOut21 x = unsafeCoerce# x-{-# INLINE happyOut21 #-}-happyIn22 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn22 x = unsafeCoerce# x-{-# INLINE happyIn22 #-}-happyOut22 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Name])-happyOut22 x = unsafeCoerce# x-{-# INLINE happyOut22 #-}-happyIn23 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn23 x = unsafeCoerce# x-{-# INLINE happyIn23 #-}-happyOut23 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Name])-happyOut23 x = unsafeCoerce# x-{-# INLINE happyOut23 #-}-happyIn24 :: ([String]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn24 x = unsafeCoerce# x-{-# INLINE happyIn24 #-}-happyOut24 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([String])-happyOut24 x = unsafeCoerce# x-{-# INLINE happyOut24 #-}-happyIn25 :: (QName) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn25 x = unsafeCoerce# x-{-# INLINE happyIn25 #-}-happyOut25 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (QName)-happyOut25 x = unsafeCoerce# x-{-# INLINE happyOut25 #-}-happyIn26 :: (Expr) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn26 x = unsafeCoerce# x-{-# INLINE happyIn26 #-}-happyOut26 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Expr)-happyOut26 x = unsafeCoerce# x-{-# INLINE happyOut26 #-}-happyIn27 :: t27 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn27 x = unsafeCoerce# x-{-# INLINE happyIn27 #-}-happyOut27 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t27-happyOut27 x = unsafeCoerce# x-{-# INLINE happyOut27 #-}-happyIn28 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn28 x = unsafeCoerce# x-{-# INLINE happyIn28 #-}-happyOut28 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Expr])-happyOut28 x = unsafeCoerce# x-{-# INLINE happyOut28 #-}-happyIn29 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn29 x = unsafeCoerce# x-{-# INLINE happyIn29 #-}-happyOut29 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Expr])-happyOut29 x = unsafeCoerce# x-{-# INLINE happyOut29 #-}-happyIn30 :: t30 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn30 x = unsafeCoerce# x-{-# INLINE happyIn30 #-}-happyOut30 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t30-happyOut30 x = unsafeCoerce# x-{-# INLINE happyOut30 #-}-happyIn31 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn31 x = unsafeCoerce# x-{-# INLINE happyIn31 #-}-happyOut31 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Expr])-happyOut31 x = unsafeCoerce# x-{-# INLINE happyOut31 #-}-happyIn32 :: t32 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn32 x = unsafeCoerce# x-{-# INLINE happyIn32 #-}-happyOut32 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t32-happyOut32 x = unsafeCoerce# x-{-# INLINE happyOut32 #-}-happyIn33 :: ([(Name, Expr)]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn33 x = unsafeCoerce# x-{-# INLINE happyIn33 #-}-happyOut33 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([(Name, Expr)])-happyOut33 x = unsafeCoerce# x-{-# INLINE happyOut33 #-}-happyIn34 :: ([(Name, Expr)]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn34 x = unsafeCoerce# x-{-# INLINE happyIn34 #-}-happyOut34 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([(Name, Expr)])-happyOut34 x = unsafeCoerce# x-{-# INLINE happyOut34 #-}-happyIn35 :: ((Name, Expr)) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn35 x = unsafeCoerce# x-{-# INLINE happyIn35 #-}-happyOut35 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ((Name, Expr))-happyOut35 x = unsafeCoerce# x-{-# INLINE happyOut35 #-}-happyIn36 :: t36 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn36 x = unsafeCoerce# x-{-# INLINE happyIn36 #-}-happyOut36 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t36-happyOut36 x = unsafeCoerce# x-{-# INLINE happyOut36 #-}-happyIn37 :: t37 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn37 x = unsafeCoerce# x-{-# INLINE happyIn37 #-}-happyOut37 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t37-happyOut37 x = unsafeCoerce# x-{-# INLINE happyOut37 #-}-happyIn38 :: ([TypedBindings]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn38 x = unsafeCoerce# x-{-# INLINE happyIn38 #-}-happyOut38 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([TypedBindings])-happyOut38 x = unsafeCoerce# x-{-# INLINE happyOut38 #-}-happyIn39 :: (TypedBindings) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn39 x = unsafeCoerce# x-{-# INLINE happyIn39 #-}-happyOut39 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (TypedBindings)-happyOut39 x = unsafeCoerce# x-{-# INLINE happyOut39 #-}-happyIn40 :: ([TypedBinding]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn40 x = unsafeCoerce# x-{-# INLINE happyIn40 #-}-happyOut40 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([TypedBinding])-happyOut40 x = unsafeCoerce# x-{-# INLINE happyOut40 #-}-happyIn41 :: ([TypedBinding]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn41 x = unsafeCoerce# x-{-# INLINE happyIn41 #-}-happyOut41 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([TypedBinding])-happyOut41 x = unsafeCoerce# x-{-# INLINE happyOut41 #-}-happyIn42 :: (TypedBinding) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn42 x = unsafeCoerce# x-{-# INLINE happyIn42 #-}-happyOut42 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (TypedBinding)-happyOut42 x = unsafeCoerce# x-{-# INLINE happyOut42 #-}-happyIn43 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn43 x = unsafeCoerce# x-{-# INLINE happyIn43 #-}-happyOut43 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([LamBinding])-happyOut43 x = unsafeCoerce# x-{-# INLINE happyOut43 #-}-happyIn44 :: (([LamBinding], Hiding)) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn44 x = unsafeCoerce# x-{-# INLINE happyIn44 #-}-happyOut44 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (([LamBinding], Hiding))-happyOut44 x = unsafeCoerce# x-{-# INLINE happyOut44 #-}-happyIn45 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn45 x = unsafeCoerce# x-{-# INLINE happyIn45 #-}-happyOut45 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Either Hiding LamBinding])-happyOut45 x = unsafeCoerce# x-{-# INLINE happyOut45 #-}-happyIn46 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn46 x = unsafeCoerce# x-{-# INLINE happyIn46 #-}-happyOut46 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([LamBinding])-happyOut46 x = unsafeCoerce# x-{-# INLINE happyOut46 #-}-happyIn47 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn47 x = unsafeCoerce# x-{-# INLINE happyIn47 #-}-happyOut47 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([LamBinding])-happyOut47 x = unsafeCoerce# x-{-# INLINE happyOut47 #-}-happyIn48 :: ((Maybe AsName, ImportDirective)) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn48 x = unsafeCoerce# x-{-# INLINE happyIn48 #-}-happyOut48 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ((Maybe AsName, ImportDirective))-happyOut48 x = unsafeCoerce# x-{-# INLINE happyOut48 #-}-happyIn49 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn49 x = unsafeCoerce# x-{-# INLINE happyIn49 #-}-happyOut49 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (ImportDirective)-happyOut49 x = unsafeCoerce# x-{-# INLINE happyOut49 #-}-happyIn50 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn50 x = unsafeCoerce# x-{-# INLINE happyIn50 #-}-happyOut50 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (ImportDirective)-happyOut50 x = unsafeCoerce# x-{-# INLINE happyOut50 #-}-happyIn51 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn51 x = unsafeCoerce# x-{-# INLINE happyIn51 #-}-happyOut51 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (ImportDirective)-happyOut51 x = unsafeCoerce# x-{-# INLINE happyOut51 #-}-happyIn52 :: (UsingOrHiding) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn52 x = unsafeCoerce# x-{-# INLINE happyIn52 #-}-happyOut52 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (UsingOrHiding)-happyOut52 x = unsafeCoerce# x-{-# INLINE happyOut52 #-}-happyIn53 :: ([Renaming]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn53 x = unsafeCoerce# x-{-# INLINE happyIn53 #-}-happyOut53 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Renaming])-happyOut53 x = unsafeCoerce# x-{-# INLINE happyOut53 #-}-happyIn54 :: ([Renaming]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn54 x = unsafeCoerce# x-{-# INLINE happyIn54 #-}-happyOut54 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Renaming])-happyOut54 x = unsafeCoerce# x-{-# INLINE happyOut54 #-}-happyIn55 :: (Renaming) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn55 x = unsafeCoerce# x-{-# INLINE happyIn55 #-}-happyOut55 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Renaming)-happyOut55 x = unsafeCoerce# x-{-# INLINE happyOut55 #-}-happyIn56 :: (ImportedName) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn56 x = unsafeCoerce# x-{-# INLINE happyIn56 #-}-happyOut56 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (ImportedName)-happyOut56 x = unsafeCoerce# x-{-# INLINE happyOut56 #-}-happyIn57 :: (ImportedName) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn57 x = unsafeCoerce# x-{-# INLINE happyIn57 #-}-happyOut57 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (ImportedName)-happyOut57 x = unsafeCoerce# x-{-# INLINE happyOut57 #-}-happyIn58 :: ([ImportedName]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn58 x = unsafeCoerce# x-{-# INLINE happyIn58 #-}-happyOut58 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([ImportedName])-happyOut58 x = unsafeCoerce# x-{-# INLINE happyOut58 #-}-happyIn59 :: t59 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn59 x = unsafeCoerce# x-{-# INLINE happyIn59 #-}-happyOut59 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t59-happyOut59 x = unsafeCoerce# x-{-# INLINE happyOut59 #-}-happyIn60 :: (LHS) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn60 x = unsafeCoerce# x-{-# INLINE happyIn60 #-}-happyOut60 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (LHS)-happyOut60 x = unsafeCoerce# x-{-# INLINE happyOut60 #-}-happyIn61 :: ([Pattern]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn61 x = unsafeCoerce# x-{-# INLINE happyIn61 #-}-happyOut61 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Pattern])-happyOut61 x = unsafeCoerce# x-{-# INLINE happyOut61 #-}-happyIn62 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn62 x = unsafeCoerce# x-{-# INLINE happyIn62 #-}-happyOut62 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Expr])-happyOut62 x = unsafeCoerce# x-{-# INLINE happyOut62 #-}-happyIn63 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn63 x = unsafeCoerce# x-{-# INLINE happyIn63 #-}-happyOut63 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Expr])-happyOut63 x = unsafeCoerce# x-{-# INLINE happyOut63 #-}-happyIn64 :: (WhereClause) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn64 x = unsafeCoerce# x-{-# INLINE happyIn64 #-}-happyOut64 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (WhereClause)-happyOut64 x = unsafeCoerce# x-{-# INLINE happyOut64 #-}-happyIn65 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn65 x = unsafeCoerce# x-{-# INLINE happyIn65 #-}-happyOut65 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])-happyOut65 x = unsafeCoerce# x-{-# INLINE happyOut65 #-}-happyIn66 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn66 x = unsafeCoerce# x-{-# INLINE happyIn66 #-}-happyOut66 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut66 x = unsafeCoerce# x-{-# INLINE happyOut66 #-}-happyIn67 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn67 x = unsafeCoerce# x-{-# INLINE happyIn67 #-}-happyOut67 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])-happyOut67 x = unsafeCoerce# x-{-# INLINE happyOut67 #-}-happyIn68 :: ([(Hiding, Declaration)]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn68 x = unsafeCoerce# x-{-# INLINE happyIn68 #-}-happyOut68 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([(Hiding, Declaration)])-happyOut68 x = unsafeCoerce# x-{-# INLINE happyOut68 #-}-happyIn69 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn69 x = unsafeCoerce# x-{-# INLINE happyIn69 #-}-happyOut69 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut69 x = unsafeCoerce# x-{-# INLINE happyOut69 #-}-happyIn70 :: (RHS) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn70 x = unsafeCoerce# x-{-# INLINE happyIn70 #-}-happyOut70 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (RHS)-happyOut70 x = unsafeCoerce# x-{-# INLINE happyOut70 #-}-happyIn71 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn71 x = unsafeCoerce# x-{-# INLINE happyIn71 #-}-happyOut71 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut71 x = unsafeCoerce# x-{-# INLINE happyOut71 #-}-happyIn72 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn72 x = unsafeCoerce# x-{-# INLINE happyIn72 #-}-happyOut72 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut72 x = unsafeCoerce# x-{-# INLINE happyOut72 #-}-happyIn73 :: (Name) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn73 x = unsafeCoerce# x-{-# INLINE happyIn73 #-}-happyOut73 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Name)-happyOut73 x = unsafeCoerce# x-{-# INLINE happyOut73 #-}-happyIn74 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn74 x = unsafeCoerce# x-{-# INLINE happyIn74 #-}-happyOut74 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut74 x = unsafeCoerce# x-{-# INLINE happyOut74 #-}-happyIn75 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn75 x = unsafeCoerce# x-{-# INLINE happyIn75 #-}-happyOut75 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])-happyOut75 x = unsafeCoerce# x-{-# INLINE happyOut75 #-}-happyIn76 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn76 x = unsafeCoerce# x-{-# INLINE happyIn76 #-}-happyOut76 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut76 x = unsafeCoerce# x-{-# INLINE happyOut76 #-}-happyIn77 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn77 x = unsafeCoerce# x-{-# INLINE happyIn77 #-}-happyOut77 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut77 x = unsafeCoerce# x-{-# INLINE happyOut77 #-}-happyIn78 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn78 x = unsafeCoerce# x-{-# INLINE happyIn78 #-}-happyOut78 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut78 x = unsafeCoerce# x-{-# INLINE happyOut78 #-}-happyIn79 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn79 x = unsafeCoerce# x-{-# INLINE happyIn79 #-}-happyOut79 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut79 x = unsafeCoerce# x-{-# INLINE happyOut79 #-}-happyIn80 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn80 x = unsafeCoerce# x-{-# INLINE happyIn80 #-}-happyOut80 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut80 x = unsafeCoerce# x-{-# INLINE happyOut80 #-}-happyIn81 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn81 x = unsafeCoerce# x-{-# INLINE happyIn81 #-}-happyOut81 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut81 x = unsafeCoerce# x-{-# INLINE happyOut81 #-}-happyIn82 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn82 x = unsafeCoerce# x-{-# INLINE happyIn82 #-}-happyOut82 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Expr])-happyOut82 x = unsafeCoerce# x-{-# INLINE happyOut82 #-}-happyIn83 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn83 x = unsafeCoerce# x-{-# INLINE happyIn83 #-}-happyOut83 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut83 x = unsafeCoerce# x-{-# INLINE happyOut83 #-}-happyIn84 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn84 x = unsafeCoerce# x-{-# INLINE happyIn84 #-}-happyOut84 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut84 x = unsafeCoerce# x-{-# INLINE happyOut84 #-}-happyIn85 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn85 x = unsafeCoerce# x-{-# INLINE happyIn85 #-}-happyOut85 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut85 x = unsafeCoerce# x-{-# INLINE happyOut85 #-}-happyIn86 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn86 x = unsafeCoerce# x-{-# INLINE happyIn86 #-}-happyOut86 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])-happyOut86 x = unsafeCoerce# x-{-# INLINE happyOut86 #-}-happyIn87 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn87 x = unsafeCoerce# x-{-# INLINE happyIn87 #-}-happyOut87 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut87 x = unsafeCoerce# x-{-# INLINE happyOut87 #-}-happyIn88 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn88 x = unsafeCoerce# x-{-# INLINE happyIn88 #-}-happyOut88 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)-happyOut88 x = unsafeCoerce# x-{-# INLINE happyOut88 #-}-happyIn89 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn89 x = unsafeCoerce# x-{-# INLINE happyIn89 #-}-happyOut89 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)-happyOut89 x = unsafeCoerce# x-{-# INLINE happyOut89 #-}-happyIn90 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn90 x = unsafeCoerce# x-{-# INLINE happyIn90 #-}-happyOut90 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)-happyOut90 x = unsafeCoerce# x-{-# INLINE happyOut90 #-}-happyIn91 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn91 x = unsafeCoerce# x-{-# INLINE happyIn91 #-}-happyOut91 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)-happyOut91 x = unsafeCoerce# x-{-# INLINE happyOut91 #-}-happyIn92 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn92 x = unsafeCoerce# x-{-# INLINE happyIn92 #-}-happyOut92 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)-happyOut92 x = unsafeCoerce# x-{-# INLINE happyOut92 #-}-happyIn93 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn93 x = unsafeCoerce# x-{-# INLINE happyIn93 #-}-happyOut93 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)-happyOut93 x = unsafeCoerce# x-{-# INLINE happyOut93 #-}-happyIn94 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn94 x = unsafeCoerce# x-{-# INLINE happyIn94 #-}-happyOut94 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)-happyOut94 x = unsafeCoerce# x-{-# INLINE happyOut94 #-}-happyIn95 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn95 x = unsafeCoerce# x-{-# INLINE happyIn95 #-}-happyOut95 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)-happyOut95 x = unsafeCoerce# x-{-# INLINE happyOut95 #-}-happyIn96 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn96 x = unsafeCoerce# x-{-# INLINE happyIn96 #-}-happyOut96 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)-happyOut96 x = unsafeCoerce# x-{-# INLINE happyOut96 #-}-happyIn97 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn97 x = unsafeCoerce# x-{-# INLINE happyIn97 #-}-happyOut97 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)-happyOut97 x = unsafeCoerce# x-{-# INLINE happyOut97 #-}-happyIn98 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn98 x = unsafeCoerce# x-{-# INLINE happyIn98 #-}-happyOut98 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([TypeSignature])-happyOut98 x = unsafeCoerce# x-{-# INLINE happyOut98 #-}-happyIn99 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn99 x = unsafeCoerce# x-{-# INLINE happyIn99 #-}-happyOut99 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([TypeSignature])-happyOut99 x = unsafeCoerce# x-{-# INLINE happyOut99 #-}-happyIn100 :: ([(Hiding, TypeSignature)]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn100 x = unsafeCoerce# x-{-# INLINE happyIn100 #-}-happyOut100 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([(Hiding, TypeSignature)])-happyOut100 x = unsafeCoerce# x-{-# INLINE happyOut100 #-}-happyIn101 :: ([(Hiding, TypeSignature)]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn101 x = unsafeCoerce# x-{-# INLINE happyIn101 #-}-happyOut101 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([(Hiding, TypeSignature)])-happyOut101 x = unsafeCoerce# x-{-# INLINE happyOut101 #-}-happyIn102 :: ([Constructor]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn102 x = unsafeCoerce# x-{-# INLINE happyIn102 #-}-happyOut102 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Constructor])-happyOut102 x = unsafeCoerce# x-{-# INLINE happyOut102 #-}-happyIn103 :: ((Maybe Name, [Declaration])) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn103 x = unsafeCoerce# x-{-# INLINE happyIn103 #-}-happyOut103 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ((Maybe Name, [Declaration]))-happyOut103 x = unsafeCoerce# x-{-# INLINE happyOut103 #-}-happyIn104 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn104 x = unsafeCoerce# x-{-# INLINE happyIn104 #-}-happyOut104 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])-happyOut104 x = unsafeCoerce# x-{-# INLINE happyOut104 #-}-happyIn105 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn105 x = unsafeCoerce# x-{-# INLINE happyIn105 #-}-happyOut105 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])-happyOut105 x = unsafeCoerce# x-{-# INLINE happyOut105 #-}-happyIn106 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyIn106 x = unsafeCoerce# x-{-# INLINE happyIn106 #-}-happyOut106 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])-happyOut106 x = unsafeCoerce# x-{-# INLINE happyOut106 #-}-happyInTok :: Token -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)-happyInTok x = unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> Token-happyOutTok x = unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\x00\x00\x6d\x03\x88\x03\x00\x00\x19\x02\xb3\x00\x75\x03\x7b\x03\x00\x00\x7b\x03\x7c\x03\x00\x00\x70\x03\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\xf1\x02\x6d\x03\x79\x03\x00\x00\x3c\x01\x72\x03\x6e\x03\x00\x00\x00\x00\xd9\x01\x00\x00\xa7\x03\x00\x00\x00\x00\xd9\x01\xd4\x02\xb7\x02\x00\x00\x00\x00\x00\x00\x55\x03\xcc\x00\x74\x03\x68\x03\x6c\x03\x63\x03\x6a\x03\x00\x00\x5f\x03\x5c\x03\x00\x00\x00\x00\x00\x00\xd9\x01\x6d\x03\x00\x00\x62\x03\xd9\x01\x00\x00\x50\x03\x33\x03\x00\x00\x9a\x02\x7d\x02\x16\x03\x62\x03\x4b\x03\x57\x03\x84\x03\x00\x00\x8a\x03\x8a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x16\x03\x8a\x03\xa7\x03\x00\x00\x00\x00\x5b\x03\x5b\x03\x00\x00\x5b\x03\x00\x00\xfa\xff\xd4\x01\xd4\x01\x5d\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\x44\x03\x00\x00\x00\x00\x39\x01\x9e\x00\xa7\x03\xd4\x01\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x03\x00\x00\x00\x00\x8a\x03\x16\x03\x52\x03\x4e\x03\x41\x03\x00\x00\x4c\x03\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x03\x00\x00\x00\x00\x16\x03\x16\x03\x3e\x03\x00\x00\x49\x03\x00\x00\x00\x00\x00\x00\x35\x03\x00\x00\x16\x03\x58\x02\xa6\x01\x00\x00\x9e\x00\xa7\x03\xb6\x02\x00\x00\x00\x00\x00\x00\x00\x00\x61\x03\x00\x00\x37\x03\x31\x03\x2c\x03\xdc\x01\x22\x03\x39\x01\x56\x03\x39\x01\x8a\x03\x11\x03\x19\x03\x00\x00\x00\x00\x00\x00\x30\x03\x00\x00\xb6\x02\x00\x00\x38\x03\x24\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x24\x03\x00\x00\x7a\x00\x3d\x03\x1c\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\x1b\x03\x1b\x03\xae\x00\x04\x03\x04\x03\x04\x03\xe3\x00\x18\x03\xfd\x02\xfd\x02\xfd\x02\x17\x03\x17\x03\x17\x03\x06\x03\x59\x04\x00\x00\x00\x00\x16\x03\x00\x00\x00\x00\xfc\x02\xfb\x02\xfa\x02\xee\x02\xee\x02\xee\x02\x26\x03\xa7\x03\x00\x00\x00\x00\x00\x00\xe9\xff\x00\x00\xe9\xff\xe9\xff\xf3\x02\x00\x00\x39\x01\x39\x01\x39\x01\x39\x01\xed\x02\xf0\x02\x00\x00\x00\x00\x12\x00\x16\x03\x21\x03\x16\x03\x16\x03\x58\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x02\xe7\x02\x00\x00\xe6\x02\xe1\x02\xdd\x02\xe0\x02\xe8\x02\x02\x03\x00\x00\x00\x00\xd7\x02\x00\x00\x00\x00\xe5\x02\xce\x02\xce\x02\xf7\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x03\x00\x00\x00\x00\xdf\x02\xc4\x02\xd9\x02\x39\x01\x28\x00\xd3\x02\xd1\x02\xd0\x02\xd2\x02\xe9\xff\x00\x00\x00\x00\x00\x00\xc3\x02\xa7\x03\xde\x02\xbc\x02\x00\x00\xb9\x02\xb0\x02\x00\x00\xa6\x02\xaa\x02\xa4\x02\x00\x00\xa3\x02\x9d\x02\xa2\x02\x00\x00\x00\x00\x00\x00\x79\x00\xa6\x01\x16\x03\x16\x03\x16\x03\xb4\x02\x16\x03\xac\x02\x94\x02\xa6\x01\xc8\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x01\x00\x00\xa0\x02\x49\x00\xa0\x02\x89\x02\x93\x02\x00\x00\x16\x03\xb6\x02\x00\x00\xba\x02\xb8\x02\xb1\x02\x49\x00\x8b\x02\x79\x00\x84\x02\x00\x00\x63\x02\x00\x00\x73\x02\x00\x00\x00\x00\x00\x00\x6d\x02\x16\x03\x00\x00\x79\x00\x00\x00\x83\x02\x83\x02\x83\x02\x00\x00\xb6\x02\x16\x03\x00\x00\x60\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x02\x00\x00\x00\x00\x00\x00\x5a\x02\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x6a\x02\x6a\x02\x1b\x00\x9a\x01\xa6\x01\x49\x00\x00\x00\xa6\x01\x50\x02\x00\x00\x00\x00\x49\x00\x64\x02\x00\x00\xa6\x01\x00\x00\x49\x00\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x04\x02\x4a\x06\x0f\x00\x81\x02\x85\x02\x22\x06\x00\x00\x80\x02\x00\x00\x79\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x00\x32\x06\x00\x00\x00\x00\xbe\x01\x0e\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x33\x00\x00\x00\x00\x00\xed\x00\x23\x04\x0a\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\xc2\x02\x1a\x06\x00\x00\x00\x00\x55\x01\x00\x00\x41\x04\x3c\x04\x00\x00\x02\x06\xea\x05\xd2\x05\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\xb7\x03\x9a\x03\x00\x00\x00\x00\x00\x00\x00\x00\xba\x05\x62\x06\x20\x00\x00\x00\x00\x00\x2c\x00\x2b\x00\x00\x00\x06\x00\x00\x00\x97\x02\xf3\x01\xb7\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\x69\x02\x00\x00\x00\x00\x0e\x03\x4b\x02\x32\x00\xae\x01\x00\x00\x6c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x01\xa2\x05\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\xef\x03\x00\x00\x00\x00\x8a\x05\x72\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00\x5a\x05\x3e\x01\x8c\x01\x00\x00\xcd\x01\x31\x00\x7d\x04\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x01\x53\x02\x7f\x02\x00\x00\x75\x02\x43\x03\x00\x00\x49\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x65\x04\x00\x00\x8f\x00\x9c\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x02\x59\x02\x00\x00\x00\x00\x21\x02\xd8\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\x1d\x00\x1c\x00\x27\x00\x09\x02\x01\x02\xff\x01\xf4\x01\x19\x00\xe4\x01\xd3\x01\xc8\x01\x0d\x00\x0c\x00\x0b\x00\xa1\x01\x00\x00\x00\x00\x00\x00\xd4\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x01\xc0\x01\xbb\x01\x90\x01\xb9\x00\x00\x00\x00\x00\x00\x00\x63\x01\x00\x00\x52\x01\x40\x01\x00\x00\x00\x00\xbc\x01\x4f\x01\x42\x01\x3f\x01\xb6\x01\x00\x00\x00\x00\x00\x00\x84\x01\x42\x05\x81\x01\x2a\x05\x12\x05\xec\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x01\x00\x00\x77\x01\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x71\x01\x50\x01\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x04\x00\x00\x00\x00\x0a\x00\x48\x01\x17\x00\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x1a\x01\x00\x00\x00\x00\x00\x00\x16\x01\x1f\x00\xf4\x00\x2d\x01\x00\x00\x00\x00\xee\x00\x00\x00\x00\x00\x1c\x01\x00\x00\x00\x00\x00\x00\xdd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x87\x01\xe2\x04\xca\x04\xb2\x04\x05\x00\x9a\x04\x00\x00\x97\x00\x62\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x00\x00\x09\x00\xe0\x00\x0c\x01\xcd\x00\x00\x00\x00\x00\x82\x04\x37\x02\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x00\xbb\x00\x51\x01\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x04\x00\x00\x1a\x00\x00\x00\x03\x00\x16\x00\x15\x00\x00\x00\x79\x01\x52\x04\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\x17\x01\x00\x00\xff\xff\x04\x00\x18\x00\x44\x00\x3a\x01\xa7\x00\x00\x00\x35\x01\x45\x00\x00\x00\x00\x00\x93\x00\xfe\xff\x00\x00\x19\x01\x00\x00\x22\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\xfa\xff\x00\x00\xbb\xff\x00\x00\xfc\xff\x00\x00\x00\x00\xbb\xff\xb8\xff\xbb\xff\xa8\xff\x8f\xff\x00\x00\x9b\xff\x9a\xff\x98\xff\x97\xff\x00\x00\x92\xff\x00\x00\x00\x00\x7a\xff\x78\xff\xbb\xff\x00\x00\x8b\xff\x8a\xff\x00\x00\x89\xff\x00\x00\x8c\xff\x8d\xff\x00\x00\x00\x00\x00\x00\xb0\xff\xa9\xff\x8e\xff\x00\x00\xa8\xff\x00\x00\x00\x00\x98\xff\x00\x00\x75\xff\x85\xff\x00\x00\x00\x00\x84\xff\xa6\xff\x64\xff\x6a\xff\x00\x00\x94\xff\x6e\xff\x6b\xff\xa5\xff\x00\x00\x00\x00\x82\xff\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\x00\x00\x00\x00\x79\xff\x00\x00\x00\x00\x7b\xff\x9e\xff\x96\xff\x90\xff\x00\x00\x00\x00\x00\x00\xba\xff\xb9\xff\xbb\xff\xbb\xff\x15\xff\xbb\xff\x10\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xff\xf9\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\xa1\xff\xa8\xff\xa7\xff\x65\xff\x5a\xff\x1c\xff\x00\x00\xb7\xff\x00\x00\x14\xff\x13\xff\x83\xff\x99\xff\x00\x00\x9c\xff\xa2\xff\x92\xff\x00\x00\xbb\xff\x00\x00\x00\x00\x7f\xff\x7e\xff\x6f\xff\x9d\xff\x00\x00\x68\xff\x69\xff\x6d\xff\x95\xff\x6c\xff\x77\xff\x86\xff\x00\x00\x76\xff\x88\xff\x00\x00\x00\x00\x00\x00\x70\xff\x71\xff\x73\xff\x74\xff\x63\xff\x00\x00\x81\xff\x00\x00\x00\x00\xbb\xff\x93\xff\x5a\xff\x1c\xff\x5a\xff\x18\xff\x62\xff\x60\xff\x5e\xff\x5b\xff\x5c\xff\x00\x00\x00\x00\x00\x00\x5a\xff\x00\x00\x65\xff\x00\x00\x65\xff\x00\x00\x00\x00\xa1\xff\xa0\xff\x09\xff\x67\xff\xbb\xff\x66\xff\x5a\xff\x5f\xff\xb2\xff\x00\x00\x4f\xff\x5d\xff\x1d\xff\x1b\xff\x17\xff\x00\x00\xbb\xff\xb4\xff\xa8\xff\x45\xff\x2b\xff\xf2\xfe\x40\xff\x3e\xff\x3d\xff\x3c\xff\x3b\xff\x3f\xff\x3a\xff\x39\xff\x38\xff\x37\xff\x36\xff\x35\xff\x33\xff\x34\xff\x32\xff\x31\xff\x11\xff\x0f\xff\x0e\xff\x0c\xff\x0d\xff\x0b\xff\x0a\xff\xbb\xff\xbb\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xff\x00\x00\x00\x00\x00\x00\xbb\xff\xbb\xff\xbb\xff\x49\xff\x00\x00\x7c\xff\x7d\xff\x00\x00\x87\xff\x72\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\xff\x00\x00\x20\xff\x21\xff\x22\xff\x00\x00\xb1\xff\x00\x00\x00\x00\x00\x00\x23\xff\x65\xff\x65\xff\x65\xff\x65\xff\x00\x00\x00\x00\x1e\xff\x1f\xff\x43\xff\x00\x00\x47\xff\x00\x00\x00\x00\x00\x00\xf6\xfe\xb5\xff\xb6\xff\xb3\xff\x51\xff\x4d\xff\x00\x00\x4e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x55\xff\x00\x00\xb2\xff\x61\xff\x00\x00\xf4\xfe\x12\xff\xbb\xff\x00\x00\x00\x00\xb2\xff\x57\xff\x53\xff\x58\xff\x50\xff\x59\xff\x00\x00\xf3\xfe\x30\xff\x44\xff\x4b\xff\x00\x00\x2c\xff\x2d\xff\xbb\xff\x00\x00\xbb\xff\x65\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xff\xa3\xff\x26\xff\x25\xff\x24\xff\x49\xff\x91\xff\x47\xff\xa1\xff\x9f\xff\x00\x00\xa1\xff\x03\xff\x00\x00\x00\x00\x00\x00\x04\xff\x00\x00\xa1\xff\x00\x00\x4a\xff\x48\xff\xa4\xff\x00\x00\xbb\xff\x00\x00\x00\x00\x00\x00\xbb\xff\x00\x00\x00\x00\x00\x00\xbb\xff\x00\x00\x42\xff\x46\xff\x4c\xff\x56\xff\x54\xff\x52\xff\x00\x00\xf5\xfe\xbb\xff\x00\x00\xbb\xff\xae\xff\x00\x00\x00\xff\x00\x00\x5a\xff\x16\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xff\xac\xff\x00\x00\xfd\xfe\x00\x00\x06\xff\x00\x00\x07\xff\x08\xff\x05\xff\x00\x00\x00\x00\xad\xff\x00\x00\xff\xfe\xbb\xff\xbb\xff\xbb\xff\x1a\xff\x5a\xff\x00\x00\xaf\xff\x00\x00\x02\xff\x41\xff\x01\xff\x2f\xff\x19\xff\x00\x00\xfb\xfe\x2a\xff\x29\xff\x00\x00\x28\xff\xfe\xfe\x2e\xff\xaa\xff\xab\xff\xbb\xff\xbb\xff\x00\x00\x00\x00\xbb\xff\x00\x00\xfa\xfe\xbb\xff\x00\x00\xfc\xfe\x27\xff\x00\x00\xbb\xff\xf7\xfe\xbb\xff\xf9\xfe\x00\x00\xf8\xfe"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x03\x00\x03\x00\x09\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x05\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x04\x00\x05\x00\x03\x00\x2d\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x0a\x00\x06\x00\x03\x00\x03\x00\x0f\x00\x0a\x00\x0b\x00\x0a\x00\x3c\x00\x0c\x00\x2b\x00\x06\x00\x0a\x00\x0a\x00\x03\x00\x0d\x00\x0d\x00\x03\x00\x03\x00\x0a\x00\x0a\x00\x36\x00\x0f\x00\x0d\x00\x0e\x00\x3c\x00\x3d\x00\x19\x00\x1a\x00\x1a\x00\x0a\x00\x0a\x00\x0a\x00\x0d\x00\x0d\x00\x0d\x00\x1b\x00\x1c\x00\x1d\x00\x0a\x00\x0b\x00\x33\x00\x34\x00\x35\x00\x00\x00\x06\x00\x1a\x00\x1a\x00\x1a\x00\x0a\x00\x0a\x00\x0a\x00\x0d\x00\x0c\x00\x38\x00\x2c\x00\x3d\x00\x50\x00\x3c\x00\x3e\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x50\x00\x3c\x00\x5d\x00\x64\x00\x64\x00\x61\x00\x64\x00\x64\x00\x62\x00\x63\x00\x62\x00\x63\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x5c\x00\x5c\x00\x5f\x00\x5d\x00\x60\x00\x60\x00\x5e\x00\x5c\x00\x5c\x00\x36\x00\x50\x00\x50\x00\x4c\x00\x4c\x00\x3b\x00\x3c\x00\x38\x00\x39\x00\x3f\x00\x3e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x08\x00\x4d\x00\x4e\x00\x4f\x00\x0a\x00\x0b\x00\x52\x00\x08\x00\x54\x00\x06\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x06\x00\x0a\x00\x0b\x00\x0a\x00\x0a\x00\x2b\x00\x0a\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x31\x00\x0e\x00\x06\x00\x35\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x3c\x00\x0a\x00\x09\x00\x30\x00\x31\x00\x32\x00\x08\x00\x09\x00\x0f\x00\x03\x00\x30\x00\x31\x00\x32\x00\x0f\x00\x0a\x00\x08\x00\x09\x00\x0d\x00\x3d\x00\x1c\x00\x1d\x00\x2f\x00\x0f\x00\x33\x00\x32\x00\x35\x00\x33\x00\x36\x00\x35\x00\x19\x00\x1a\x00\x3d\x00\x3b\x00\x3c\x00\x0a\x00\x0b\x00\x3f\x00\x3c\x00\x41\x00\x42\x00\x06\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x06\x00\x4d\x00\x4e\x00\x4f\x00\x3c\x00\x3d\x00\x52\x00\x3a\x00\x54\x00\x12\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x0a\x00\x0a\x00\x2c\x00\x0d\x00\x0a\x00\x0a\x00\x0f\x00\x31\x00\x0d\x00\x0f\x00\x12\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x0a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x0f\x00\x0a\x00\x21\x00\x03\x00\x0d\x00\x21\x00\x25\x00\x26\x00\x27\x00\x25\x00\x29\x00\x27\x00\x35\x00\x29\x00\x17\x00\x18\x00\x03\x00\x1a\x00\x21\x00\x3c\x00\x07\x00\x0a\x00\x36\x00\x0c\x00\x0a\x00\x28\x00\x29\x00\x3b\x00\x3c\x00\x0f\x00\x10\x00\x3f\x00\x38\x00\x41\x00\x42\x00\x13\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x03\x00\x4d\x00\x4e\x00\x4f\x00\x07\x00\x03\x00\x52\x00\x12\x00\x54\x00\x07\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x0a\x00\x0a\x00\x0a\x00\x0d\x00\x0a\x00\x37\x00\x0f\x00\x0f\x00\x10\x00\x0f\x00\x0a\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0c\x00\x0f\x00\x0a\x00\x21\x00\x0f\x00\x10\x00\x21\x00\x0f\x00\x03\x00\x2d\x00\x28\x00\x29\x00\x07\x00\x28\x00\x29\x00\x33\x00\x0a\x00\x35\x00\x33\x00\x21\x00\x35\x00\x0f\x00\x10\x00\x36\x00\x3c\x00\x21\x00\x28\x00\x29\x00\x3b\x00\x3c\x00\x0a\x00\x27\x00\x3f\x00\x29\x00\x41\x00\x42\x00\x0a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x03\x00\x4d\x00\x4e\x00\x4f\x00\x07\x00\x03\x00\x52\x00\x08\x00\x54\x00\x07\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x01\x00\x2d\x00\x2e\x00\x2f\x00\x0a\x00\x06\x00\x07\x00\x08\x00\x09\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\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\x4b\x00\x0a\x00\x38\x00\x4e\x00\x0d\x00\x0e\x00\x51\x00\x3a\x00\x25\x00\x0a\x00\x0a\x00\x28\x00\x29\x00\x0d\x00\x0e\x00\x0a\x00\x2d\x00\x2e\x00\x39\x00\x30\x00\x0f\x00\x26\x00\x33\x00\x13\x00\x35\x00\x2a\x00\x09\x00\x38\x00\x13\x00\x3a\x00\x13\x00\x3c\x00\x3d\x00\x37\x00\x3f\x00\x00\x00\x01\x00\x09\x00\x21\x00\x20\x00\x21\x00\x06\x00\x07\x00\x08\x00\x09\x00\x28\x00\x29\x00\x0a\x00\x0b\x00\x0c\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x09\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x0a\x00\x0a\x00\x25\x00\x0d\x00\x0e\x00\x28\x00\x29\x00\x00\x00\x01\x00\x2d\x00\x2d\x00\x2e\x00\x0a\x00\x30\x00\x0a\x00\x33\x00\x33\x00\x35\x00\x35\x00\x3c\x00\x3d\x00\x38\x00\x0a\x00\x3a\x00\x3c\x00\x3c\x00\x3d\x00\x40\x00\x3f\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\x06\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\x01\x00\x39\x00\x12\x00\x03\x00\x0a\x00\x06\x00\x07\x00\x08\x00\x09\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x2f\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x12\x00\x03\x00\x25\x00\x01\x00\x0a\x00\x28\x00\x29\x00\x01\x00\x03\x00\x0f\x00\x2d\x00\x2e\x00\x02\x00\x30\x00\x0a\x00\x26\x00\x33\x00\x3c\x00\x35\x00\x0f\x00\x12\x00\x26\x00\x37\x00\x3a\x00\x37\x00\x3c\x00\x3d\x00\x21\x00\x3f\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x3c\x00\x28\x00\x29\x00\x3c\x00\x21\x00\x0a\x00\x25\x00\x36\x00\x0d\x00\x0e\x00\x29\x00\x28\x00\x29\x00\x26\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x3b\x00\x2b\x00\x33\x00\x26\x00\x35\x00\x36\x00\x03\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x3c\x00\x3d\x00\x03\x00\x3f\x00\x03\x00\x2b\x00\x25\x00\x0a\x00\x0b\x00\x0c\x00\x29\x00\x0e\x00\x3c\x00\x26\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x03\x00\x0a\x00\x33\x00\x34\x00\x35\x00\x3c\x00\x0f\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x3c\x00\x3d\x00\x2c\x00\x3f\x00\x26\x00\x3e\x00\x25\x00\x3b\x00\x3b\x00\x3b\x00\x29\x00\x3b\x00\x04\x00\x21\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x3e\x00\x27\x00\x33\x00\x29\x00\x35\x00\x36\x00\x3e\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x3c\x00\x3d\x00\x32\x00\x3f\x00\x3e\x00\x26\x00\x25\x00\x3e\x00\x2b\x00\x2b\x00\x29\x00\x2b\x00\x26\x00\x3c\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x26\x00\x0f\x00\x33\x00\x34\x00\x35\x00\x3c\x00\x26\x00\x1b\x00\x1c\x00\x37\x00\x0d\x00\x3c\x00\x3d\x00\x2a\x00\x3f\x00\x34\x00\x34\x00\x25\x00\x01\x00\x0a\x00\x3c\x00\x29\x00\x34\x00\x2a\x00\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x3c\x00\x32\x00\x33\x00\x04\x00\x35\x00\x37\x00\x12\x00\x3c\x00\x37\x00\x05\x00\x3e\x00\x3c\x00\x3d\x00\x21\x00\x3f\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x3b\x00\x28\x00\x29\x00\x32\x00\x3e\x00\x3e\x00\x25\x00\x3f\x00\x26\x00\x26\x00\x29\x00\x3c\x00\x26\x00\x05\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x0f\x00\x2c\x00\x33\x00\x26\x00\x35\x00\x3b\x00\x0a\x00\x1b\x00\x1c\x00\x0d\x00\x01\x00\x3c\x00\x3d\x00\x11\x00\x3f\x00\x26\x00\x3e\x00\x25\x00\x03\x00\x17\x00\x18\x00\x29\x00\x1a\x00\x3c\x00\x33\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x33\x00\x22\x00\x33\x00\x24\x00\x35\x00\x36\x00\x33\x00\x1b\x00\x1c\x00\x0c\x00\x01\x00\x3c\x00\x3d\x00\x3c\x00\x3f\x00\x2a\x00\x36\x00\x25\x00\x2a\x00\x36\x00\x26\x00\x29\x00\x2c\x00\x1e\x00\x32\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x26\x00\x3e\x00\x33\x00\x34\x00\x35\x00\x02\x00\x3c\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x3c\x00\x3d\x00\x37\x00\x3f\x00\x34\x00\x2f\x00\x25\x00\x34\x00\x2a\x00\x40\x00\x29\x00\x2b\x00\x26\x00\x36\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x36\x00\x2b\x00\x33\x00\x26\x00\x35\x00\x35\x00\x0a\x00\x1b\x00\x1c\x00\x0d\x00\x2f\x00\x3c\x00\x3d\x00\x11\x00\x3f\x00\x31\x00\x26\x00\x25\x00\x40\x00\x17\x00\x18\x00\x29\x00\x1a\x00\x40\x00\xff\xff\x2d\x00\x2e\x00\x12\x00\x30\x00\xff\xff\x22\x00\x33\x00\x24\x00\x35\x00\xff\xff\x0a\x00\x1b\x00\x1c\x00\x0d\x00\xff\xff\x3c\x00\x3d\x00\x11\x00\x3f\x00\xff\xff\xff\xff\x25\x00\xff\xff\x17\x00\x18\x00\x29\x00\x1a\x00\xff\xff\xff\xff\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x22\x00\x33\x00\x24\x00\x35\x00\xff\xff\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\x3c\x00\x3d\x00\x11\x00\x3f\x00\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0a\x00\x24\x00\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0a\x00\x24\x00\xff\xff\x0d\x00\xff\xff\x0a\x00\xff\xff\x11\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x11\x00\x17\x00\x18\x00\xff\xff\x1a\x00\xff\xff\x17\x00\x18\x00\xff\xff\x1a\x00\x0a\x00\xff\xff\x22\x00\x0d\x00\x24\x00\xff\xff\xff\xff\x22\x00\xff\xff\x24\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\x4b\x00\xff\xff\x0d\x00\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\x55\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xc6\x00\xc9\x01\x9e\x00\x91\x01\xc6\x00\xc0\x01\xc8\x01\x4d\x01\x05\x00\x4d\x01\x9e\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x05\x00\x06\x00\x07\x00\x62\x01\x39\x00\x80\x01\xbc\x01\xbc\x01\x88\x01\x3f\x01\x2d\x01\x41\x01\xcf\x01\x34\x01\x34\x01\x63\x01\x96\x01\x97\x01\xa1\x01\x24\x00\xa2\x01\xbc\x00\xd7\x01\x0a\x00\x0a\x00\x86\x01\x0b\x00\x0b\x00\x9f\x00\x9f\x00\xaa\x00\x98\x00\xc3\x00\x46\x01\x99\x00\x9c\x00\x24\x00\x25\x00\x49\x00\x6f\x01\xa2\x00\x0a\x00\x0a\x00\x0a\x00\x0b\x00\x0b\x00\x0b\x00\xab\x00\xac\x00\xad\x00\x96\x01\xaa\x01\x42\x01\x43\x01\x44\x01\x3f\x01\xcc\x01\xca\x00\xca\x00\x3b\x00\xee\x00\xd0\x01\xa1\x01\x0b\x00\xa2\x01\x40\x01\x87\x01\x98\x01\x08\x00\x24\x00\xc2\x01\xef\x00\x0e\x00\x0f\x00\x10\x00\xa4\x00\x12\x00\x08\x00\x24\x00\x89\x01\xd4\x01\xca\x01\xc1\x01\xc7\x00\xc7\x00\x4e\x01\x9b\x01\x4e\x01\x4f\x01\xb8\x01\x8b\x01\x26\x01\x27\x01\x28\x01\x42\x00\xbd\x01\xbd\x01\x81\x01\x89\x01\xbe\x01\xbf\x01\x2e\x01\x35\x01\x36\x01\xf0\x00\xa0\x00\xa1\x00\xe9\x00\xcb\x00\xf1\x00\xf2\x00\x40\x01\x41\x01\xf3\x00\xa3\x01\xf4\x00\xf5\x00\xcd\x01\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\x47\x01\xfe\x00\xff\x00\x00\x01\x96\x01\x97\x01\x01\x01\x47\x01\x02\x01\xd5\x01\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x92\x01\x96\x01\x97\x01\x41\x01\xee\x00\x3c\x01\x41\x01\x0b\x00\xd3\x00\xd4\x00\xd5\x00\x4d\x00\xd6\x00\xd3\x01\xa5\x01\xef\x00\x0e\x00\x0f\x00\x10\x00\xa4\x00\x12\x00\x24\x00\xaa\x00\x9e\x00\x8e\x01\x49\x01\x4a\x01\x55\x00\x56\x00\x34\x01\xad\x01\x48\x01\x49\x01\x4a\x01\x57\x00\x0a\x00\x55\x00\x56\x00\x0b\x00\xb9\x01\x1a\x01\xad\x00\x4b\x00\x57\x00\x42\x01\x4c\x00\x8d\x01\x42\x01\xf0\x00\x46\x01\x6e\x01\x6f\x01\x98\x01\xf1\x00\xf2\x00\x96\x01\xb5\x01\xf3\x00\xd7\x00\xf4\x00\xf5\x00\xae\x01\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xb7\x01\xfe\x00\xff\x00\x00\x01\x24\x00\x25\x00\x01\x01\x58\x00\x02\x01\xa6\x01\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\xee\x00\x31\x00\xbd\x00\x0b\x00\x31\x00\x0a\x00\x32\x00\x4d\x00\x0b\x00\x32\x00\x7a\x01\xef\x00\x0e\x00\x0f\x00\x10\x00\xa4\x00\x12\x00\x31\x00\x48\x00\x10\x00\x49\x00\x12\x00\x32\x00\x0a\x00\x33\x00\xb6\x01\x0b\x00\x33\x00\x34\x00\x35\x00\x36\x00\x3e\x00\x37\x00\x3f\x00\x41\x00\x37\x00\x48\x00\x10\x00\xd6\x01\xa7\x00\xd7\x00\x24\x00\xec\x00\xa1\x01\xf0\x00\xc5\x01\x31\x00\x87\x01\xd9\x00\x5a\x01\xf2\x00\x6a\x01\x7f\x01\xf3\x00\x7d\x01\xf4\x00\xf5\x00\x78\x01\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xd1\x01\xfe\x00\xff\x00\x00\x01\xd2\x01\xcb\x01\x01\x01\x7c\x01\x02\x01\xec\x00\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\xee\x00\x31\x00\x31\x00\x0b\x00\x31\x00\x7e\x01\x32\x00\x6a\x01\x6b\x01\x32\x00\x8a\x01\xef\x00\x0e\x00\x0f\x00\x10\x00\xa4\x00\x12\x00\x31\x00\x8f\x01\xa1\x01\x31\x00\xac\x01\x32\x00\x31\x00\xd7\x00\x6a\x01\x6c\x01\xd7\x00\x32\x00\x94\x01\x39\x00\x65\x01\xd9\x00\x95\x01\x66\x01\xd9\x00\x45\x00\x31\x00\xdb\x00\x45\x00\xd7\x00\x46\x00\x6a\x01\x6d\x01\xf0\x00\x24\x00\x33\x00\x67\x01\xd9\x00\xf1\x00\xf2\x00\x90\x01\xb3\x00\xf3\x00\x37\x00\xf4\x00\xf5\x00\x55\x01\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\x9f\x01\xfe\x00\xff\x00\x00\x01\xa0\x01\xeb\x00\x01\x01\x51\x01\x02\x01\xec\x00\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x3f\x01\x18\x00\xe3\x00\xd0\x00\xd1\x00\x57\x01\x0a\x01\x0b\x01\x0c\x01\x56\x00\xbb\x01\xce\x00\xcf\x00\xd0\x00\xd1\x00\x0d\x01\x0e\x01\x0f\x01\x10\x01\xcf\x01\x11\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x1a\x00\x1b\x00\x4f\x00\x98\x00\x5d\x01\x50\x00\x99\x00\xc9\x00\x51\x00\x60\x01\x1d\x00\x64\x01\x98\x00\x18\x01\x1e\x00\x99\x00\x9a\x00\x31\x00\x1f\x00\x20\x00\x70\x01\x21\x00\x32\x00\x0a\x00\x3d\x00\x71\x01\x3e\x00\xee\x00\x29\x01\x40\x01\x73\x01\x19\x01\x74\x01\x24\x00\x25\x00\x24\x01\x26\x00\x3f\x01\x18\x00\x2b\x01\xd7\x00\x43\x00\x16\x00\x0a\x01\x0b\x01\x0c\x01\x56\x00\x68\x01\xd9\x00\xd3\x00\xd4\x00\xd5\x00\x0d\x01\x0e\x01\x0f\x01\x10\x01\x2c\x01\x11\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x1a\x00\x1b\x00\xea\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\x98\x00\x2f\x01\x1d\x00\x99\x00\x9b\x00\x18\x01\x1e\x00\x26\x00\x04\x00\x39\x00\x1f\x00\x20\x00\x30\x01\x21\x00\x31\x01\x3a\x00\x3d\x00\x3b\x00\x3e\x00\x24\x00\x25\x00\x40\x01\x32\x01\x19\x01\x24\x00\x24\x00\x25\x00\x37\x01\x26\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x3d\x01\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x18\x00\x39\x01\xdd\x00\x3c\x01\xe2\x00\x0a\x01\x0b\x01\x0c\x01\x56\x00\xb2\x01\xce\x00\xcf\x00\xd0\x00\xd1\x00\x0d\x01\x0e\x01\x0f\x01\x10\x01\xe7\x00\x11\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x1a\x00\x1b\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xdb\x00\x4d\x00\x1d\x00\x18\x00\x31\x00\x18\x01\x1e\x00\x04\x00\x4e\x00\x32\x00\x1f\x00\x20\x00\x58\x00\x21\x00\x31\x00\x0a\x00\x3d\x00\x24\x00\x3e\x00\x32\x00\x19\x00\x0a\x00\xc7\x01\x19\x01\xc8\x01\x24\x00\x25\x00\xd7\x00\x26\x00\x1a\x00\x1b\x00\x1c\x00\x18\x00\x24\x00\xdf\x00\xd9\x00\x24\x00\xd7\x00\x98\x00\x1d\x00\xc5\x01\x99\x00\x9c\x00\x1e\x00\xe1\x00\xd9\x00\x0a\x00\x1f\x00\x20\x00\x19\x00\x21\x00\xaa\x01\xac\x01\x22\x00\x0a\x00\x23\x00\x2e\x00\xb0\x01\x1a\x00\x1b\x00\x1c\x00\x18\x00\x24\x00\x25\x00\xb1\x01\x26\x00\xb2\x01\xb5\x01\x1d\x00\xd3\x00\xd4\x00\xd5\x00\x1e\x00\xd6\x00\x24\x00\x0a\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x94\x01\x31\x00\x22\x00\x31\x00\x23\x00\x24\x00\x32\x00\x1a\x00\x1b\x00\x1c\x00\x18\x00\x24\x00\x25\x00\x9a\x01\x26\x00\x0a\x00\xdd\x00\x1d\x00\xa6\x01\xa8\x01\xa9\x01\x1e\x00\x7a\x01\x5f\x01\x33\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x73\x01\xb5\x00\x22\x00\x37\x00\x23\x00\x2e\x00\xdd\x00\x1a\x00\x1b\x00\x1c\x00\x18\x00\x24\x00\x25\x00\x26\x01\x26\x00\x7c\x01\x0a\x00\x1d\x00\xdd\x00\x83\x01\x84\x01\x1e\x00\x85\x01\x0a\x00\x24\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x0a\x00\x4c\x01\x22\x00\x31\x00\x23\x00\x24\x00\x0a\x00\x1a\x00\x1b\x00\x51\x01\x53\x01\x24\x00\x25\x00\x54\x01\x26\x00\x55\x01\x57\x01\x1d\x00\x18\x00\x31\x00\x24\x00\x1e\x00\x59\x01\x5a\x01\x32\x00\x1f\x00\x20\x00\x91\xff\x21\x00\x24\x00\x91\xff\x3d\x00\x5f\x01\x3e\x00\x64\x01\x19\x00\x24\x00\x6a\x01\x3b\x01\x73\x01\x24\x00\x25\x00\xd7\x00\x26\x00\x1a\x00\x1b\x00\x1c\x00\x18\x00\x76\x01\xd8\x00\xd9\x00\x26\x01\x77\x01\x78\x01\x1d\x00\x2b\x01\x0a\x00\x0a\x00\x1e\x00\x24\x00\x0a\x00\x3b\x01\x1f\x00\x20\x00\x19\x00\x21\x00\x4c\x01\x39\x01\x22\x00\x0a\x00\x23\x00\xdf\x00\x0a\x00\x1a\x00\x1b\x00\x0b\x00\x18\x00\x24\x00\x25\x00\xb0\x00\x26\x00\x0a\x00\xdd\x00\x1d\x00\xe1\x00\xa6\x00\x10\x00\x1e\x00\xa7\x00\x24\x00\xe5\x00\x1f\x00\x20\x00\x19\x00\x21\x00\xe6\x00\x2b\x00\x3d\x00\x2c\x00\x3e\x00\xb2\x00\xe7\x00\x1a\x00\x1b\x00\xd5\x00\x18\x00\x24\x00\x25\x00\x24\x00\x26\x00\x1c\x01\x1d\x01\x1d\x00\xc4\x00\xc5\x00\x0a\x00\x1e\x00\xc6\x00\x98\x00\x4c\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x0a\x00\xdd\x00\x3d\x00\xb3\x00\x3e\x00\xa9\x00\x24\x00\x1a\x00\x1b\x00\x1c\x00\x18\x00\x24\x00\x25\x00\xaa\x00\x26\x00\xb7\x00\xaf\x00\x1d\x00\xb8\x00\xb9\x00\xff\xff\x1e\x00\xa2\xff\x0a\x00\xba\x00\x1f\x00\x20\x00\x19\x00\x21\x00\xbb\x00\xbc\x00\x22\x00\x0a\x00\x23\x00\x41\x00\x0a\x00\x1a\x00\x1b\x00\x0b\x00\x47\x00\x24\x00\x25\x00\x28\x00\x26\x00\x4d\x00\x0a\x00\x1d\x00\xff\xff\xa6\x00\x10\x00\x1e\x00\xa7\x00\xff\xff\x00\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x00\x00\x2b\x00\x3d\x00\x2c\x00\x3e\x00\x00\x00\x0a\x00\x1a\x00\x1b\x00\x0b\x00\x00\x00\x24\x00\x25\x00\x28\x00\x26\x00\x00\x00\x00\x00\x1d\x00\x00\x00\xa6\x00\x10\x00\x1e\x00\xa7\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x3d\x00\x2c\x00\x3e\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x24\x00\x25\x00\x28\x00\x26\x00\x00\x00\xbf\x00\x0d\x00\x0e\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\xc0\x00\x1d\x01\x2c\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\xbf\x00\x0d\x00\x0e\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\xc0\x00\xc1\x00\x2c\x00\x27\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x29\x00\x0d\x00\x0e\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2b\x00\x0a\x00\x2c\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x2e\x00\x0d\x00\x0e\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2f\x00\x0a\x00\x2c\x00\x00\x00\x0b\x00\x00\x00\x0a\x00\x00\x00\xb0\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\xa6\x00\x10\x00\x00\x00\xa7\x00\x00\x00\xa6\x00\x10\x00\x00\x00\xa7\x00\x0a\x00\x00\x00\x2b\x00\x0b\x00\x2c\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x2c\x00\xba\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x1f\x01\x20\x01\x21\x01\x22\x01\x23\x01\x24\x01\xc3\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x4c\x01\xce\x00\xcf\x00\xd0\x00\xd1\x00\x00\x00\xb3\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\xe8\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\x00\x00\x9a\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x27\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x4f\x00\x00\x00\x0b\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x53\x00\xa3\x00\x0f\x00\x10\x00\xa4\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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 = array (3, 269) [-	(3 , happyReduce_3),-	(4 , happyReduce_4),-	(5 , happyReduce_5),-	(6 , happyReduce_6),-	(7 , happyReduce_7),-	(8 , happyReduce_8),-	(9 , happyReduce_9),-	(10 , happyReduce_10),-	(11 , happyReduce_11),-	(12 , happyReduce_12),-	(13 , happyReduce_13),-	(14 , happyReduce_14),-	(15 , happyReduce_15),-	(16 , happyReduce_16),-	(17 , happyReduce_17),-	(18 , happyReduce_18),-	(19 , happyReduce_19),-	(20 , happyReduce_20),-	(21 , happyReduce_21),-	(22 , happyReduce_22),-	(23 , happyReduce_23),-	(24 , happyReduce_24),-	(25 , happyReduce_25),-	(26 , happyReduce_26),-	(27 , happyReduce_27),-	(28 , happyReduce_28),-	(29 , happyReduce_29),-	(30 , happyReduce_30),-	(31 , happyReduce_31),-	(32 , happyReduce_32),-	(33 , happyReduce_33),-	(34 , happyReduce_34),-	(35 , happyReduce_35),-	(36 , happyReduce_36),-	(37 , happyReduce_37),-	(38 , happyReduce_38),-	(39 , happyReduce_39),-	(40 , happyReduce_40),-	(41 , happyReduce_41),-	(42 , happyReduce_42),-	(43 , happyReduce_43),-	(44 , happyReduce_44),-	(45 , happyReduce_45),-	(46 , happyReduce_46),-	(47 , happyReduce_47),-	(48 , happyReduce_48),-	(49 , happyReduce_49),-	(50 , happyReduce_50),-	(51 , happyReduce_51),-	(52 , happyReduce_52),-	(53 , happyReduce_53),-	(54 , happyReduce_54),-	(55 , happyReduce_55),-	(56 , happyReduce_56),-	(57 , happyReduce_57),-	(58 , happyReduce_58),-	(59 , happyReduce_59),-	(60 , happyReduce_60),-	(61 , happyReduce_61),-	(62 , happyReduce_62),-	(63 , happyReduce_63),-	(64 , happyReduce_64),-	(65 , happyReduce_65),-	(66 , happyReduce_66),-	(67 , happyReduce_67),-	(68 , happyReduce_68),-	(69 , happyReduce_69),-	(70 , happyReduce_70),-	(71 , happyReduce_71),-	(72 , happyReduce_72),-	(73 , happyReduce_73),-	(74 , happyReduce_74),-	(75 , happyReduce_75),-	(76 , happyReduce_76),-	(77 , happyReduce_77),-	(78 , happyReduce_78),-	(79 , happyReduce_79),-	(80 , happyReduce_80),-	(81 , happyReduce_81),-	(82 , happyReduce_82),-	(83 , happyReduce_83),-	(84 , happyReduce_84),-	(85 , happyReduce_85),-	(86 , happyReduce_86),-	(87 , happyReduce_87),-	(88 , happyReduce_88),-	(89 , happyReduce_89),-	(90 , happyReduce_90),-	(91 , happyReduce_91),-	(92 , happyReduce_92),-	(93 , happyReduce_93),-	(94 , happyReduce_94),-	(95 , happyReduce_95),-	(96 , happyReduce_96),-	(97 , happyReduce_97),-	(98 , happyReduce_98),-	(99 , happyReduce_99),-	(100 , happyReduce_100),-	(101 , happyReduce_101),-	(102 , happyReduce_102),-	(103 , happyReduce_103),-	(104 , happyReduce_104),-	(105 , happyReduce_105),-	(106 , happyReduce_106),-	(107 , happyReduce_107),-	(108 , happyReduce_108),-	(109 , happyReduce_109),-	(110 , happyReduce_110),-	(111 , happyReduce_111),-	(112 , happyReduce_112),-	(113 , happyReduce_113),-	(114 , happyReduce_114),-	(115 , happyReduce_115),-	(116 , happyReduce_116),-	(117 , happyReduce_117),-	(118 , happyReduce_118),-	(119 , happyReduce_119),-	(120 , happyReduce_120),-	(121 , happyReduce_121),-	(122 , happyReduce_122),-	(123 , happyReduce_123),-	(124 , happyReduce_124),-	(125 , happyReduce_125),-	(126 , happyReduce_126),-	(127 , happyReduce_127),-	(128 , happyReduce_128),-	(129 , happyReduce_129),-	(130 , happyReduce_130),-	(131 , happyReduce_131),-	(132 , happyReduce_132),-	(133 , happyReduce_133),-	(134 , happyReduce_134),-	(135 , happyReduce_135),-	(136 , happyReduce_136),-	(137 , happyReduce_137),-	(138 , happyReduce_138),-	(139 , happyReduce_139),-	(140 , happyReduce_140),-	(141 , happyReduce_141),-	(142 , happyReduce_142),-	(143 , happyReduce_143),-	(144 , happyReduce_144),-	(145 , happyReduce_145),-	(146 , happyReduce_146),-	(147 , happyReduce_147),-	(148 , happyReduce_148),-	(149 , happyReduce_149),-	(150 , happyReduce_150),-	(151 , happyReduce_151),-	(152 , happyReduce_152),-	(153 , happyReduce_153),-	(154 , happyReduce_154),-	(155 , happyReduce_155),-	(156 , happyReduce_156),-	(157 , happyReduce_157),-	(158 , happyReduce_158),-	(159 , happyReduce_159),-	(160 , happyReduce_160),-	(161 , happyReduce_161),-	(162 , happyReduce_162),-	(163 , happyReduce_163),-	(164 , happyReduce_164),-	(165 , happyReduce_165),-	(166 , happyReduce_166),-	(167 , happyReduce_167),-	(168 , happyReduce_168),-	(169 , happyReduce_169),-	(170 , happyReduce_170),-	(171 , happyReduce_171),-	(172 , happyReduce_172),-	(173 , happyReduce_173),-	(174 , happyReduce_174),-	(175 , happyReduce_175),-	(176 , happyReduce_176),-	(177 , happyReduce_177),-	(178 , happyReduce_178),-	(179 , happyReduce_179),-	(180 , happyReduce_180),-	(181 , happyReduce_181),-	(182 , happyReduce_182),-	(183 , happyReduce_183),-	(184 , happyReduce_184),-	(185 , happyReduce_185),-	(186 , happyReduce_186),-	(187 , happyReduce_187),-	(188 , happyReduce_188),-	(189 , happyReduce_189),-	(190 , happyReduce_190),-	(191 , happyReduce_191),-	(192 , happyReduce_192),-	(193 , happyReduce_193),-	(194 , happyReduce_194),-	(195 , happyReduce_195),-	(196 , happyReduce_196),-	(197 , happyReduce_197),-	(198 , happyReduce_198),-	(199 , happyReduce_199),-	(200 , happyReduce_200),-	(201 , happyReduce_201),-	(202 , happyReduce_202),-	(203 , happyReduce_203),-	(204 , happyReduce_204),-	(205 , happyReduce_205),-	(206 , happyReduce_206),-	(207 , happyReduce_207),-	(208 , happyReduce_208),-	(209 , happyReduce_209),-	(210 , happyReduce_210),-	(211 , happyReduce_211),-	(212 , happyReduce_212),-	(213 , happyReduce_213),-	(214 , happyReduce_214),-	(215 , happyReduce_215),-	(216 , happyReduce_216),-	(217 , happyReduce_217),-	(218 , happyReduce_218),-	(219 , happyReduce_219),-	(220 , happyReduce_220),-	(221 , happyReduce_221),-	(222 , happyReduce_222),-	(223 , happyReduce_223),-	(224 , happyReduce_224),-	(225 , happyReduce_225),-	(226 , happyReduce_226),-	(227 , happyReduce_227),-	(228 , happyReduce_228),-	(229 , happyReduce_229),-	(230 , happyReduce_230),-	(231 , happyReduce_231),-	(232 , happyReduce_232),-	(233 , happyReduce_233),-	(234 , happyReduce_234),-	(235 , happyReduce_235),-	(236 , happyReduce_236),-	(237 , happyReduce_237),-	(238 , happyReduce_238),-	(239 , happyReduce_239),-	(240 , happyReduce_240),-	(241 , happyReduce_241),-	(242 , happyReduce_242),-	(243 , happyReduce_243),-	(244 , happyReduce_244),-	(245 , happyReduce_245),-	(246 , happyReduce_246),-	(247 , happyReduce_247),-	(248 , happyReduce_248),-	(249 , happyReduce_249),-	(250 , happyReduce_250),-	(251 , happyReduce_251),-	(252 , happyReduce_252),-	(253 , happyReduce_253),-	(254 , happyReduce_254),-	(255 , happyReduce_255),-	(256 , happyReduce_256),-	(257 , happyReduce_257),-	(258 , happyReduce_258),-	(259 , happyReduce_259),-	(260 , happyReduce_260),-	(261 , happyReduce_261),-	(262 , happyReduce_262),-	(263 , happyReduce_263),-	(264 , happyReduce_264),-	(265 , happyReduce_265),-	(266 , happyReduce_266),-	(267 , happyReduce_267),-	(268 , happyReduce_268),-	(269 , happyReduce_269)-	]--happy_n_terms = 65 :: Int-happy_n_nonterms = 101 :: Int--happyReduce_3 = happySpecReduce_1  0# happyReduction_3-happyReduction_3 happy_x_1-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> -	happyIn6-		 (reverse happy_var_1-	)}--happyReduce_4 = happySpecReduce_2  1# happyReduction_4-happyReduction_4 happy_x_2-	happy_x_1-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> -	case happyOut8 happy_x_2 of { happy_var_2 -> -	happyIn7-		 (happy_var_2 : happy_var_1-	)}}--happyReduce_5 = happySpecReduce_0  1# happyReduction_5-happyReduction_5  =  happyIn7-		 ([]-	)--happyReduce_6 = happySpecReduce_1  2# happyReduction_6-happyReduction_6 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> -	happyIn8-		 (TokKeyword KwLet happy_var_1-	)}--happyReduce_7 = happySpecReduce_1  2# happyReduction_7-happyReduction_7 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> -	happyIn8-		 (TokKeyword KwIn happy_var_1-	)}--happyReduce_8 = happySpecReduce_1  2# happyReduction_8-happyReduction_8 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> -	happyIn8-		 (TokKeyword KwWhere happy_var_1-	)}--happyReduce_9 = happySpecReduce_1  2# happyReduction_9-happyReduction_9 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> -	happyIn8-		 (TokKeyword KwWith happy_var_1-	)}--happyReduce_10 = happySpecReduce_1  2# happyReduction_10-happyReduction_10 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> -	happyIn8-		 (TokKeyword KwRewrite happy_var_1-	)}--happyReduce_11 = happySpecReduce_1  2# happyReduction_11-happyReduction_11 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> -	happyIn8-		 (TokKeyword KwPostulate happy_var_1-	)}--happyReduce_12 = happySpecReduce_1  2# happyReduction_12-happyReduction_12 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> -	happyIn8-		 (TokKeyword KwPrimitive happy_var_1-	)}--happyReduce_13 = happySpecReduce_1  2# happyReduction_13-happyReduction_13 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	happyIn8-		 (TokKeyword KwOpen happy_var_1-	)}--happyReduce_14 = happySpecReduce_1  2# happyReduction_14-happyReduction_14 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> -	happyIn8-		 (TokKeyword KwImport happy_var_1-	)}--happyReduce_15 = happySpecReduce_1  2# happyReduction_15-happyReduction_15 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> -	happyIn8-		 (TokKeyword KwUsing happy_var_1-	)}--happyReduce_16 = happySpecReduce_1  2# happyReduction_16-happyReduction_16 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> -	happyIn8-		 (TokKeyword KwHiding happy_var_1-	)}--happyReduce_17 = happySpecReduce_1  2# happyReduction_17-happyReduction_17 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> -	happyIn8-		 (TokKeyword KwRenaming happy_var_1-	)}--happyReduce_18 = happySpecReduce_1  2# happyReduction_18-happyReduction_18 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> -	happyIn8-		 (TokKeyword KwTo happy_var_1-	)}--happyReduce_19 = happySpecReduce_1  2# happyReduction_19-happyReduction_19 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> -	happyIn8-		 (TokKeyword KwPublic happy_var_1-	)}--happyReduce_20 = happySpecReduce_1  2# happyReduction_20-happyReduction_20 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> -	happyIn8-		 (TokKeyword KwModule happy_var_1-	)}--happyReduce_21 = happySpecReduce_1  2# happyReduction_21-happyReduction_21 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> -	happyIn8-		 (TokKeyword KwData happy_var_1-	)}--happyReduce_22 = happySpecReduce_1  2# happyReduction_22-happyReduction_22 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> -	happyIn8-		 (TokKeyword KwCoData happy_var_1-	)}--happyReduce_23 = happySpecReduce_1  2# happyReduction_23-happyReduction_23 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	happyIn8-		 (TokKeyword KwRecord happy_var_1-	)}--happyReduce_24 = happySpecReduce_1  2# happyReduction_24-happyReduction_24 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> -	happyIn8-		 (TokKeyword KwConstructor happy_var_1-	)}--happyReduce_25 = happySpecReduce_1  2# happyReduction_25-happyReduction_25 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> -	happyIn8-		 (TokKeyword KwField happy_var_1-	)}--happyReduce_26 = happySpecReduce_1  2# happyReduction_26-happyReduction_26 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> -	happyIn8-		 (TokKeyword KwInfix happy_var_1-	)}--happyReduce_27 = happySpecReduce_1  2# happyReduction_27-happyReduction_27 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> -	happyIn8-		 (TokKeyword KwInfixL happy_var_1-	)}--happyReduce_28 = happySpecReduce_1  2# happyReduction_28-happyReduction_28 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> -	happyIn8-		 (TokKeyword KwInfixR happy_var_1-	)}--happyReduce_29 = happySpecReduce_1  2# happyReduction_29-happyReduction_29 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> -	happyIn8-		 (TokKeyword KwMutual happy_var_1-	)}--happyReduce_30 = happySpecReduce_1  2# happyReduction_30-happyReduction_30 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> -	happyIn8-		 (TokKeyword KwAbstract happy_var_1-	)}--happyReduce_31 = happySpecReduce_1  2# happyReduction_31-happyReduction_31 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> -	happyIn8-		 (TokKeyword KwPrivate happy_var_1-	)}--happyReduce_32 = happySpecReduce_1  2# happyReduction_32-happyReduction_32 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> -	happyIn8-		 (TokKeyword KwProp happy_var_1-	)}--happyReduce_33 = happySpecReduce_1  2# happyReduction_33-happyReduction_33 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> -	happyIn8-		 (TokKeyword KwSet happy_var_1-	)}--happyReduce_34 = happySpecReduce_1  2# happyReduction_34-happyReduction_34 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> -	happyIn8-		 (TokKeyword KwForall happy_var_1-	)}--happyReduce_35 = happySpecReduce_1  2# happyReduction_35-happyReduction_35 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> -	happyIn8-		 (TokKeyword KwOPTIONS happy_var_1-	)}--happyReduce_36 = happySpecReduce_1  2# happyReduction_36-happyReduction_36 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> -	happyIn8-		 (TokKeyword KwBUILTIN happy_var_1-	)}--happyReduce_37 = happySpecReduce_1  2# happyReduction_37-happyReduction_37 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> -	happyIn8-		 (TokKeyword KwIMPORT happy_var_1-	)}--happyReduce_38 = happySpecReduce_1  2# happyReduction_38-happyReduction_38 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> -	happyIn8-		 (TokKeyword KwCOMPILED happy_var_1-	)}--happyReduce_39 = happySpecReduce_1  2# happyReduction_39-happyReduction_39 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> -	happyIn8-		 (TokKeyword KwCOMPILED_DATA happy_var_1-	)}--happyReduce_40 = happySpecReduce_1  2# happyReduction_40-happyReduction_40 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> -	happyIn8-		 (TokKeyword KwCOMPILED_TYPE happy_var_1-	)}--happyReduce_41 = happySpecReduce_1  2# happyReduction_41-happyReduction_41 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> -	happyIn8-		 (TokSetN happy_var_1-	)}--happyReduce_42 = happySpecReduce_1  2# happyReduction_42-happyReduction_42 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> -	happyIn8-		 (TokTeX happy_var_1-	)}--happyReduce_43 = happySpecReduce_1  2# happyReduction_43-happyReduction_43 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> -	happyIn8-		 (TokComment happy_var_1-	)}--happyReduce_44 = happySpecReduce_1  2# happyReduction_44-happyReduction_44 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> -	happyIn8-		 (TokSymbol SymEllipsis happy_var_1-	)}--happyReduce_45 = happySpecReduce_1  2# happyReduction_45-happyReduction_45 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> -	happyIn8-		 (TokSymbol SymDot happy_var_1-	)}--happyReduce_46 = happySpecReduce_1  2# happyReduction_46-happyReduction_46 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> -	happyIn8-		 (TokSymbol SymSemi happy_var_1-	)}--happyReduce_47 = happySpecReduce_1  2# happyReduction_47-happyReduction_47 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> -	happyIn8-		 (TokSymbol SymColon happy_var_1-	)}--happyReduce_48 = happySpecReduce_1  2# happyReduction_48-happyReduction_48 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> -	happyIn8-		 (TokSymbol SymEqual happy_var_1-	)}--happyReduce_49 = happySpecReduce_1  2# happyReduction_49-happyReduction_49 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> -	happyIn8-		 (TokSymbol SymUnderscore happy_var_1-	)}--happyReduce_50 = happySpecReduce_1  2# happyReduction_50-happyReduction_50 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> -	happyIn8-		 (TokSymbol SymQuestionMark happy_var_1-	)}--happyReduce_51 = happySpecReduce_1  2# happyReduction_51-happyReduction_51 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> -	happyIn8-		 (TokSymbol SymArrow happy_var_1-	)}--happyReduce_52 = happySpecReduce_1  2# happyReduction_52-happyReduction_52 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	happyIn8-		 (TokSymbol SymLambda happy_var_1-	)}--happyReduce_53 = happySpecReduce_1  2# happyReduction_53-happyReduction_53 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> -	happyIn8-		 (TokSymbol SymAs happy_var_1-	)}--happyReduce_54 = happySpecReduce_1  2# happyReduction_54-happyReduction_54 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> -	happyIn8-		 (TokSymbol SymBar happy_var_1-	)}--happyReduce_55 = happySpecReduce_1  2# happyReduction_55-happyReduction_55 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	happyIn8-		 (TokSymbol SymOpenParen happy_var_1-	)}--happyReduce_56 = happySpecReduce_1  2# happyReduction_56-happyReduction_56 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> -	happyIn8-		 (TokSymbol SymCloseParen happy_var_1-	)}--happyReduce_57 = happySpecReduce_1  2# happyReduction_57-happyReduction_57 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymOpenBrace happy_var_1-	)}--happyReduce_58 = happySpecReduce_1  2# happyReduction_58-happyReduction_58 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymCloseBrace happy_var_1-	)}--happyReduce_59 = happySpecReduce_1  2# happyReduction_59-happyReduction_59 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymOpenVirtualBrace happy_var_1-	)}--happyReduce_60 = happySpecReduce_1  2# happyReduction_60-happyReduction_60 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymCloseVirtualBrace happy_var_1-	)}--happyReduce_61 = happySpecReduce_1  2# happyReduction_61-happyReduction_61 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> -	happyIn8-		 (TokSymbol SymVirtualSemi happy_var_1-	)}--happyReduce_62 = happySpecReduce_1  2# happyReduction_62-happyReduction_62 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	happyIn8-		 (TokSymbol SymOpenPragma happy_var_1-	)}--happyReduce_63 = happySpecReduce_1  2# happyReduction_63-happyReduction_63 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> -	happyIn8-		 (TokSymbol SymClosePragma happy_var_1-	)}--happyReduce_64 = happySpecReduce_1  2# happyReduction_64-happyReduction_64 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> -	happyIn8-		 (TokId happy_var_1-	)}--happyReduce_65 = happySpecReduce_1  2# happyReduction_65-happyReduction_65 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> -	happyIn8-		 (TokQId happy_var_1-	)}--happyReduce_66 = happySpecReduce_1  2# happyReduction_66-happyReduction_66 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	happyIn8-		 (TokString happy_var_1-	)}--happyReduce_67 = happySpecReduce_1  2# happyReduction_67-happyReduction_67 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> -	happyIn8-		 (TokLiteral happy_var_1-	)}--happyReduce_68 = happySpecReduce_0  3# happyReduction_68-happyReduction_68  =  happyIn9-		 (()-	)--happyReduce_69 = happySpecReduce_2  3# happyReduction_69-happyReduction_69 happy_x_2-	happy_x_1-	 =  happyIn9-		 (()-	)--happyReduce_70 = happySpecReduce_2  4# happyReduction_70-happyReduction_70 happy_x_2-	happy_x_1-	 =  case happyOut11 happy_x_1 of { happy_var_1 -> -	happyIn10-		 (happy_var_1-	)}--happyReduce_71 = happySpecReduce_1  5# happyReduction_71-happyReduction_71 happy_x_1-	 =  case happyOut86 happy_x_1 of { happy_var_1 -> -	happyIn11-		 (([], happy_var_1)-	)}--happyReduce_72 = happySpecReduce_3  5# happyReduction_72-happyReduction_72 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut89 happy_x_2 of { happy_var_2 -> -	case happyOut11 happy_x_3 of { happy_var_3 -> -	happyIn11-		 (let (ps,m) = happy_var_3 in (happy_var_2 : ps, m)-	)}}--happyReduce_73 = happySpecReduce_1  6# happyReduction_73-happyReduction_73 happy_x_1-	 =  happyIn12-		 (()-	)--happyReduce_74 = happyMonadReduce 1# 6# happyReduction_74-happyReduction_74 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (( popContext)-	) (\r -> happyReturn (happyIn12 r))--happyReduce_75 = happySpecReduce_1  7# happyReduction_75-happyReduction_75 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> -	happyIn13-		 (happy_var_1-	)}--happyReduce_76 = happySpecReduce_2  7# happyReduction_76-happyReduction_76 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_2 of { (TokSymbol SymVirtualSemi happy_var_2) -> -	happyIn13-		 (happy_var_2-	)}--happyReduce_77 = happyMonadReduce 0# 8# happyReduction_77-happyReduction_77 (happyRest) tk-	 = happyThen (( pushLexState imp_dir)-	) (\r -> happyReturn (happyIn14 r))--happyReduce_78 = happyMonadReduce 1# 9# happyReduction_78-happyReduction_78 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> -	( case happy_var_1 of {-		     LitInt _ n	-> return $ fromIntegral n;-		     _		-> fail $ "Expected integer"-		   })}-	) (\r -> happyReturn (happyIn15 r))--happyReduce_79 = happyMonadReduce 1# 10# happyReduction_79-happyReduction_79 (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_80 = happySpecReduce_2  11# happyReduction_80-happyReduction_80 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_81 = happySpecReduce_1  11# happyReduction_81-happyReduction_81 happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	happyIn17-		 ([happy_var_1]-	)}--happyReduce_82 = happySpecReduce_2  12# happyReduction_82-happyReduction_82 happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	case happyOut18 happy_x_2 of { happy_var_2 -> -	happyIn18-		 ((NotHidden, happy_var_1) : happy_var_2-	)}}--happyReduce_83 = happySpecReduce_1  12# happyReduction_83-happyReduction_83 happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	happyIn18-		 ([(NotHidden, happy_var_1)]-	)}--happyReduce_84 = happyReduce 4# 12# happyReduction_84-happyReduction_84 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut17 happy_x_2 of { happy_var_2 -> -	case happyOut18 happy_x_4 of { happy_var_4 -> -	happyIn18-		 (map ((,) Hidden) happy_var_2 ++ happy_var_4-	) `HappyStk` happyRest}}--happyReduce_85 = happySpecReduce_3  12# happyReduction_85-happyReduction_85 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut17 happy_x_2 of { happy_var_2 -> -	happyIn18-		 (map ((,) Hidden) happy_var_2-	)}--happyReduce_86 = happyMonadReduce 1# 13# happyReduction_86-happyReduction_86 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> -	( mkQName happy_var_1)}-	) (\r -> happyReturn (happyIn19 r))--happyReduce_87 = happySpecReduce_1  13# happyReduction_87-happyReduction_87 happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	happyIn19-		 (QName happy_var_1-	)}--happyReduce_88 = happySpecReduce_1  14# happyReduction_88-happyReduction_88 happy_x_1-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> -	happyIn20-		 (happy_var_1-	)}--happyReduce_89 = happySpecReduce_1  15# happyReduction_89-happyReduction_89 happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	happyIn21-		 (happy_var_1-	)}--happyReduce_90 = happySpecReduce_1  15# happyReduction_90-happyReduction_90 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> -	happyIn21-		 (Name (getRange happy_var_1) [Hole]-	)}--happyReduce_91 = happySpecReduce_2  16# happyReduction_91-happyReduction_91 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_92 = happySpecReduce_1  16# happyReduction_92-happyReduction_92 happy_x_1-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> -	happyIn22-		 ([happy_var_1]-	)}--happyReduce_93 = happyMonadReduce 1# 17# happyReduction_93-happyReduction_93 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut29 happy_x_1 of { happy_var_1 -> -	(-    let getName (Ident (QName x)) = Just x-	getName (Underscore r _)  = Just (Name r [Hole])-	getName _		  = Nothing-    in-    case partition isJust $ map getName happy_var_1 of-	(good, []) -> return $ map fromJust good-	_	   -> fail $ "expected sequence of bound identifiers")}-	) (\r -> happyReturn (happyIn23 r))--happyReduce_94 = happySpecReduce_0  18# happyReduction_94-happyReduction_94  =  happyIn24-		 ([]-	)--happyReduce_95 = happySpecReduce_2  18# happyReduction_95-happyReduction_95 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	case happyOut24 happy_x_2 of { happy_var_2 -> -	happyIn24-		 (snd happy_var_1 : happy_var_2-	)}}--happyReduce_96 = happyMonadReduce 1# 19# happyReduction_96-happyReduction_96 (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 (happyIn25 r))--happyReduce_97 = happySpecReduce_2  20# happyReduction_97-happyReduction_97 happy_x_2-	happy_x_1-	 =  case happyOut36 happy_x_1 of { happy_var_1 -> -	case happyOut26 happy_x_2 of { happy_var_2 -> -	happyIn26-		 (Pi happy_var_1 happy_var_2-	)}}--happyReduce_98 = happySpecReduce_3  20# happyReduction_98-happyReduction_98 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut43 happy_x_2 of { happy_var_2 -> -	case happyOut26 happy_x_3 of { happy_var_3 -> -	happyIn26-		 (forallPi happy_var_2 happy_var_3-	)}}--happyReduce_99 = happySpecReduce_3  20# happyReduction_99-happyReduction_99 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut31 happy_x_1 of { happy_var_1 -> -	case happyOut26 happy_x_3 of { happy_var_3 -> -	happyIn26-		 (Fun (fuseRange happy_var_1 happy_var_3) (RawApp (getRange happy_var_1) happy_var_1) happy_var_3-	)}}--happyReduce_100 = happySpecReduce_1  20# happyReduction_100-happyReduction_100 happy_x_1-	 =  case happyOut27 happy_x_1 of { happy_var_1 -> -	happyIn26-		 (happy_var_1-	)}--happyReduce_101 = happyMonadReduce 1# 21# happyReduction_101-happyReduction_101 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut28 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 (happyIn27 r))--happyReduce_102 = happySpecReduce_3  22# happyReduction_102-happyReduction_102 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut31 happy_x_1 of { happy_var_1 -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn28-		 (RawApp (getRange happy_var_1) happy_var_1 :  happy_var_3-	)}}--happyReduce_103 = happySpecReduce_1  22# happyReduction_103-happyReduction_103 happy_x_1-	 =  case happyOut29 happy_x_1 of { happy_var_1 -> -	happyIn28-		 ([RawApp (getRange happy_var_1) happy_var_1]-	)}--happyReduce_104 = happySpecReduce_1  23# happyReduction_104-happyReduction_104 happy_x_1-	 =  case happyOut30 happy_x_1 of { happy_var_1 -> -	happyIn29-		 ([happy_var_1]-	)}--happyReduce_105 = happySpecReduce_2  23# happyReduction_105-happyReduction_105 happy_x_2-	happy_x_1-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> -	case happyOut29 happy_x_2 of { happy_var_2 -> -	happyIn29-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_106 = happySpecReduce_3  24# happyReduction_106-happyReduction_106 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	case happyOut43 happy_x_2 of { happy_var_2 -> -	case happyOut26 happy_x_3 of { happy_var_3 -> -	happyIn30-		 (Lam (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3-	)}}}--happyReduce_107 = happySpecReduce_2  24# happyReduction_107-happyReduction_107 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	case happyOut44 happy_x_2 of { happy_var_2 -> -	happyIn30-		 (let (bs, h) = happy_var_2; r = fuseRange happy_var_1 bs in-                                     if null bs then AbsurdLam r h else-                                     Lam r bs (AbsurdLam r h)-	)}}--happyReduce_108 = happyReduce 4# 24# happyReduction_108-happyReduction_108 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> -	case happyOut104 happy_x_2 of { happy_var_2 -> -	case happyOut26 happy_x_4 of { happy_var_4 -> -	happyIn30-		 (Let (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4-	) `HappyStk` happyRest}}}--happyReduce_109 = happySpecReduce_1  24# happyReduction_109-happyReduction_109 happy_x_1-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> -	happyIn30-		 (happy_var_1-	)}--happyReduce_110 = happySpecReduce_1  25# happyReduction_110-happyReduction_110 happy_x_1-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> -	happyIn31-		 ([happy_var_1]-	)}--happyReduce_111 = happySpecReduce_2  25# happyReduction_111-happyReduction_111 happy_x_2-	happy_x_1-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> -	case happyOut31 happy_x_2 of { happy_var_2 -> -	happyIn31-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_112 = happySpecReduce_1  26# happyReduction_112-happyReduction_112 happy_x_1-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> -	happyIn32-		 (Ident happy_var_1-	)}--happyReduce_113 = happySpecReduce_1  26# happyReduction_113-happyReduction_113 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> -	happyIn32-		 (Lit happy_var_1-	)}--happyReduce_114 = happySpecReduce_1  26# happyReduction_114-happyReduction_114 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> -	happyIn32-		 (QuestionMark (getRange happy_var_1) Nothing-	)}--happyReduce_115 = happySpecReduce_1  26# happyReduction_115-happyReduction_115 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> -	happyIn32-		 (Underscore (getRange happy_var_1) Nothing-	)}--happyReduce_116 = happySpecReduce_1  26# happyReduction_116-happyReduction_116 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> -	happyIn32-		 (Prop (getRange happy_var_1)-	)}--happyReduce_117 = happySpecReduce_1  26# happyReduction_117-happyReduction_117 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> -	happyIn32-		 (Set (getRange happy_var_1)-	)}--happyReduce_118 = happySpecReduce_1  26# happyReduction_118-happyReduction_118 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> -	happyIn32-		 (SetN (getRange (fst happy_var_1)) (snd happy_var_1)-	)}--happyReduce_119 = happySpecReduce_3  26# happyReduction_119-happyReduction_119 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOut26 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> -	happyIn32-		 (HiddenArg (fuseRange happy_var_1 happy_var_3) (unnamed happy_var_2)-	)}}}--happyReduce_120 = happyReduce 5# 26# 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 happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut26 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> -	happyIn32-		 (HiddenArg (fuseRange happy_var_1 happy_var_5) (named (show happy_var_2) happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_121 = happySpecReduce_3  26# happyReduction_121-happyReduction_121 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	case happyOut26 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> -	happyIn32-		 (Paren (fuseRange happy_var_1 happy_var_3) happy_var_2-	)}}}--happyReduce_122 = happySpecReduce_2  26# happyReduction_122-happyReduction_122 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) -> -	happyIn32-		 (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r-	)}}--happyReduce_123 = happySpecReduce_2  26# happyReduction_123-happyReduction_123 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) -> -	happyIn32-		 (Absurd (fuseRange happy_var_1 happy_var_2)-	)}}--happyReduce_124 = happySpecReduce_3  26# happyReduction_124-happyReduction_124 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	case happyOut32 happy_x_3 of { happy_var_3 -> -	happyIn32-		 (As (fuseRange happy_var_1 happy_var_3) happy_var_1 happy_var_3-	)}}--happyReduce_125 = happySpecReduce_2  26# happyReduction_125-happyReduction_125 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> -	case happyOut32 happy_x_2 of { happy_var_2 -> -	happyIn32-		 (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_126 = happyReduce 4# 26# happyReduction_126-happyReduction_126 (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 happyOut33 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> -	happyIn32-		 (Rec (getRange (happy_var_1,happy_var_4)) happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_127 = happySpecReduce_0  27# happyReduction_127-happyReduction_127  =  happyIn33-		 ([]-	)--happyReduce_128 = happySpecReduce_1  27# happyReduction_128-happyReduction_128 happy_x_1-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> -	happyIn33-		 (happy_var_1-	)}--happyReduce_129 = happySpecReduce_1  28# happyReduction_129-happyReduction_129 happy_x_1-	 =  case happyOut35 happy_x_1 of { happy_var_1 -> -	happyIn34-		 ([happy_var_1]-	)}--happyReduce_130 = happySpecReduce_3  28# happyReduction_130-happyReduction_130 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut35 happy_x_1 of { happy_var_1 -> -	case happyOut34 happy_x_3 of { happy_var_3 -> -	happyIn34-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_131 = happySpecReduce_3  29# happyReduction_131-happyReduction_131 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	case happyOut26 happy_x_3 of { happy_var_3 -> -	happyIn35-		 ((happy_var_1, happy_var_3)-	)}}--happyReduce_132 = happySpecReduce_2  30# happyReduction_132-happyReduction_132 happy_x_2-	happy_x_1-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> -	happyIn36-		 (happy_var_1-	)}--happyReduce_133 = happySpecReduce_1  31# happyReduction_133-happyReduction_133 happy_x_1-	 =  case happyOut38 happy_x_1 of { happy_var_1 -> -	happyIn37-		 ({-TeleBind-} happy_var_1-	)}--happyReduce_134 = happySpecReduce_2  32# happyReduction_134-happyReduction_134 happy_x_2-	happy_x_1-	 =  case happyOut39 happy_x_1 of { happy_var_1 -> -	case happyOut38 happy_x_2 of { happy_var_2 -> -	happyIn38-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_135 = happySpecReduce_1  32# happyReduction_135-happyReduction_135 happy_x_1-	 =  case happyOut39 happy_x_1 of { happy_var_1 -> -	happyIn38-		 ([happy_var_1]-	)}--happyReduce_136 = happySpecReduce_3  33# happyReduction_136-happyReduction_136 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	case happyOut40 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> -	happyIn39-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) NotHidden happy_var_2-	)}}}--happyReduce_137 = happySpecReduce_3  33# happyReduction_137-happyReduction_137 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOut40 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> -	happyIn39-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) Hidden    happy_var_2-	)}}}--happyReduce_138 = happySpecReduce_1  34# happyReduction_138-happyReduction_138 happy_x_1-	 =  case happyOut42 happy_x_1 of { happy_var_1 -> -	happyIn40-		 ([happy_var_1]-	)}--happyReduce_139 = happySpecReduce_3  34# happyReduction_139-happyReduction_139 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut42 happy_x_1 of { happy_var_1 -> -	case happyOut41 happy_x_3 of { happy_var_3 -> -	happyIn40-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_140 = happySpecReduce_1  35# happyReduction_140-happyReduction_140 happy_x_1-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> -	happyIn41-		 (happy_var_1-	)}--happyReduce_141 = happySpecReduce_3  35# happyReduction_141-happyReduction_141 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut26 happy_x_1 of { happy_var_1 -> -	case happyOut41 happy_x_3 of { happy_var_3 -> -	happyIn41-		 (TNoBind happy_var_1 : happy_var_3-	)}}--happyReduce_142 = happySpecReduce_1  35# happyReduction_142-happyReduction_142 happy_x_1-	 =  case happyOut26 happy_x_1 of { happy_var_1 -> -	happyIn41-		 ([TNoBind happy_var_1]-	)}--happyReduce_143 = happySpecReduce_3  36# happyReduction_143-happyReduction_143 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut23 happy_x_1 of { happy_var_1 -> -	case happyOut26 happy_x_3 of { happy_var_3 -> -	happyIn42-		 (TBind (fuseRange happy_var_1 happy_var_3) (map mkBoundName_ happy_var_1) happy_var_3-	)}}--happyReduce_144 = happyMonadReduce 2# 37# happyReduction_144-happyReduction_144 (happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut45 happy_x_1 of { happy_var_1 -> -	(-      case last happy_var_1 of-        Left _  -> parseError "Absurd lambda cannot have a body."-        _       -> return [ b | Right b <- happy_var_1 ])}-	) (\r -> happyReturn (happyIn43 r))--happyReduce_145 = happyMonadReduce 1# 38# happyReduction_145-happyReduction_145 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut45 happy_x_1 of { happy_var_1 -> -	(-    case last happy_var_1 of-      Right _ -> parseError "Missing body for lambda"-      Left h  -> return ([ b | Right b <- init happy_var_1], h))}-	) (\r -> happyReturn (happyIn44 r))--happyReduce_146 = happySpecReduce_2  39# happyReduction_146-happyReduction_146 happy_x_2-	happy_x_1-	 =  case happyOut47 happy_x_1 of { happy_var_1 -> -	case happyOut45 happy_x_2 of { happy_var_2 -> -	happyIn45-		 (map Right happy_var_1 ++ happy_var_2-	)}}--happyReduce_147 = happySpecReduce_2  39# happyReduction_147-happyReduction_147 happy_x_2-	happy_x_1-	 =  case happyOut39 happy_x_1 of { happy_var_1 -> -	case happyOut45 happy_x_2 of { happy_var_2 -> -	happyIn45-		 (Right (DomainFull happy_var_1) : happy_var_2-	)}}--happyReduce_148 = happySpecReduce_1  39# happyReduction_148-happyReduction_148 happy_x_1-	 =  case happyOut47 happy_x_1 of { happy_var_1 -> -	happyIn45-		 (map Right happy_var_1-	)}--happyReduce_149 = happySpecReduce_1  39# happyReduction_149-happyReduction_149 happy_x_1-	 =  case happyOut39 happy_x_1 of { happy_var_1 -> -	happyIn45-		 ([Right $ DomainFull happy_var_1]-	)}--happyReduce_150 = happySpecReduce_2  39# happyReduction_150-happyReduction_150 happy_x_2-	happy_x_1-	 =  happyIn45-		 ([Left NotHidden]-	)--happyReduce_151 = happySpecReduce_2  39# happyReduction_151-happyReduction_151 happy_x_2-	happy_x_1-	 =  happyIn45-		 ([Left Hidden]-	)--happyReduce_152 = happySpecReduce_2  40# happyReduction_152-happyReduction_152 happy_x_2-	happy_x_1-	 =  case happyOut47 happy_x_1 of { happy_var_1 -> -	case happyOut46 happy_x_2 of { happy_var_2 -> -	happyIn46-		 (happy_var_1 ++ happy_var_2-	)}}--happyReduce_153 = happySpecReduce_2  40# happyReduction_153-happyReduction_153 happy_x_2-	happy_x_1-	 =  case happyOut39 happy_x_1 of { happy_var_1 -> -	case happyOut46 happy_x_2 of { happy_var_2 -> -	happyIn46-		 (DomainFull happy_var_1 : happy_var_2-	)}}--happyReduce_154 = happySpecReduce_0  40# happyReduction_154-happyReduction_154  =  happyIn46-		 ([]-	)--happyReduce_155 = happySpecReduce_1  41# happyReduction_155-happyReduction_155 happy_x_1-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> -	happyIn47-		 ([DomainFree NotHidden $ mkBoundName_ happy_var_1]-	)}--happyReduce_156 = happySpecReduce_3  41# happyReduction_156-happyReduction_156 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut23 happy_x_2 of { happy_var_2 -> -	happyIn47-		 (map (DomainFree Hidden . mkBoundName_) happy_var_2-	)}--happyReduce_157 = happySpecReduce_1  42# happyReduction_157-happyReduction_157 happy_x_1-	 =  case happyOut49 happy_x_1 of { happy_var_1 -> -	happyIn48-		 ((Nothing, happy_var_1)-	)}--happyReduce_158 = happyMonadReduce 3# 42# happyReduction_158-happyReduction_158 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut49 happy_x_3 of { happy_var_3 -> -	( isName "as" happy_var_1 >>-                               return (Just (AsName happy_var_2 (getRange (fst happy_var_1))), happy_var_3))}}}-	) (\r -> happyReturn (happyIn48 r))--happyReduce_159 = happyMonadReduce 1# 43# happyReduction_159-happyReduction_159 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut50 happy_x_1 of { happy_var_1 -> -	( verifyImportDirective happy_var_1)}-	) (\r -> happyReturn (happyIn49 r))--happyReduce_160 = happySpecReduce_2  44# happyReduction_160-happyReduction_160 happy_x_2-	happy_x_1-	 =  case happyOut51 happy_x_2 of { happy_var_2 -> -	happyIn50-		 (happy_var_2 { publicOpen = True }-	)}--happyReduce_161 = happySpecReduce_1  44# happyReduction_161-happyReduction_161 happy_x_1-	 =  case happyOut51 happy_x_1 of { happy_var_1 -> -	happyIn50-		 (happy_var_1-	)}--happyReduce_162 = happySpecReduce_2  45# happyReduction_162-happyReduction_162 happy_x_2-	happy_x_1-	 =  case happyOut52 happy_x_1 of { happy_var_1 -> -	case happyOut53 happy_x_2 of { happy_var_2 -> -	happyIn51-		 (ImportDirective (fuseRange happy_var_1 happy_var_2) happy_var_1 happy_var_2 False-	)}}--happyReduce_163 = happySpecReduce_1  45# happyReduction_163-happyReduction_163 happy_x_1-	 =  case happyOut53 happy_x_1 of { happy_var_1 -> -	happyIn51-		 (ImportDirective (getRange happy_var_1) (Hiding []) happy_var_1 False-	)}--happyReduce_164 = happySpecReduce_1  45# happyReduction_164-happyReduction_164 happy_x_1-	 =  case happyOut52 happy_x_1 of { happy_var_1 -> -	happyIn51-		 (ImportDirective (getRange happy_var_1) happy_var_1 [] False-	)}--happyReduce_165 = happySpecReduce_0  45# happyReduction_165-happyReduction_165  =  happyIn51-		 (ImportDirective noRange (Hiding []) [] False-	)--happyReduce_166 = happyReduce 4# 46# happyReduction_166-happyReduction_166 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut58 happy_x_3 of { happy_var_3 -> -	happyIn52-		 (Using happy_var_3-	) `HappyStk` happyRest}--happyReduce_167 = happyReduce 4# 46# happyReduction_167-happyReduction_167 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut59 happy_x_3 of { happy_var_3 -> -	happyIn52-		 (Hiding happy_var_3-	) `HappyStk` happyRest}--happyReduce_168 = happyReduce 4# 47# happyReduction_168-happyReduction_168 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut54 happy_x_3 of { happy_var_3 -> -	happyIn53-		 (happy_var_3-	) `HappyStk` happyRest}--happyReduce_169 = happySpecReduce_3  48# happyReduction_169-happyReduction_169 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut55 happy_x_1 of { happy_var_1 -> -	case happyOut54 happy_x_3 of { happy_var_3 -> -	happyIn54-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_170 = happySpecReduce_1  48# happyReduction_170-happyReduction_170 happy_x_1-	 =  case happyOut55 happy_x_1 of { happy_var_1 -> -	happyIn54-		 ([happy_var_1]-	)}--happyReduce_171 = happySpecReduce_3  49# happyReduction_171-happyReduction_171 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut56 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 -> -	happyIn55-		 (Renaming happy_var_1 happy_var_3 (getRange happy_var_2)-	)}}}--happyReduce_172 = happySpecReduce_2  50# happyReduction_172-happyReduction_172 happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_2 of { happy_var_2 -> -	happyIn56-		 (ImportedName happy_var_2-	)}--happyReduce_173 = happySpecReduce_3  50# happyReduction_173-happyReduction_173 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_3 of { happy_var_3 -> -	happyIn56-		 (ImportedModule happy_var_3-	)}--happyReduce_174 = happySpecReduce_1  51# happyReduction_174-happyReduction_174 happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	happyIn57-		 (ImportedName happy_var_1-	)}--happyReduce_175 = happySpecReduce_2  51# happyReduction_175-happyReduction_175 happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_2 of { happy_var_2 -> -	happyIn57-		 (ImportedModule happy_var_2-	)}--happyReduce_176 = happySpecReduce_0  52# happyReduction_176-happyReduction_176  =  happyIn58-		 ([]-	)--happyReduce_177 = happySpecReduce_1  52# happyReduction_177-happyReduction_177 happy_x_1-	 =  case happyOut59 happy_x_1 of { happy_var_1 -> -	happyIn58-		 (happy_var_1-	)}--happyReduce_178 = happySpecReduce_1  53# happyReduction_178-happyReduction_178 happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	happyIn59-		 ([happy_var_1]-	)}--happyReduce_179 = happySpecReduce_3  53# happyReduction_179-happyReduction_179 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	case happyOut59 happy_x_3 of { happy_var_3 -> -	happyIn59-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_180 = happyMonadReduce 3# 54# happyReduction_180-happyReduction_180 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut27 happy_x_1 of { happy_var_1 -> -	case happyOut63 happy_x_2 of { happy_var_2 -> -	case happyOut62 happy_x_3 of { happy_var_3 -> -	( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2 happy_var_3))}}}-	) (\r -> happyReturn (happyIn60 r))--happyReduce_181 = happyReduce 4# 54# happyReduction_181-happyReduction_181 (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 happyOut61 happy_x_2 of { happy_var_2 -> -	case happyOut63 happy_x_3 of { happy_var_3 -> -	case happyOut62 happy_x_4 of { happy_var_4 -> -	happyIn60-		 (Ellipsis (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3 happy_var_4-	) `HappyStk` happyRest}}}}--happyReduce_182 = happySpecReduce_0  55# happyReduction_182-happyReduction_182  =  happyIn61-		 ([]-	)--happyReduce_183 = happyMonadReduce 3# 55# happyReduction_183-happyReduction_183 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut31 happy_x_2 of { happy_var_2 -> -	case happyOut61 happy_x_3 of { happy_var_3 -> -	( exprToPattern (RawApp (getRange happy_var_2) happy_var_2) >>= \p ->-		   return (p : happy_var_3))}}-	) (\r -> happyReturn (happyIn61 r))--happyReduce_184 = happySpecReduce_0  56# happyReduction_184-happyReduction_184  =  happyIn62-		 ([]-	)--happyReduce_185 = happySpecReduce_2  56# happyReduction_185-happyReduction_185 happy_x_2-	happy_x_1-	 =  case happyOut26 happy_x_2 of { happy_var_2 -> -	happyIn62-		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }-	)}--happyReduce_186 = happySpecReduce_0  57# happyReduction_186-happyReduction_186  =  happyIn63-		 ([]-	)--happyReduce_187 = happySpecReduce_2  57# happyReduction_187-happyReduction_187 happy_x_2-	happy_x_1-	 =  case happyOut26 happy_x_2 of { happy_var_2 -> -	happyIn63-		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }-	)}--happyReduce_188 = happySpecReduce_0  58# happyReduction_188-happyReduction_188  =  happyIn64-		 (NoWhere-	)--happyReduce_189 = happySpecReduce_2  58# happyReduction_189-happyReduction_189 happy_x_2-	happy_x_1-	 =  case happyOut104 happy_x_2 of { happy_var_2 -> -	happyIn64-		 (AnyWhere happy_var_2-	)}--happyReduce_190 = happyReduce 4# 58# happyReduction_190-happyReduction_190 (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 happyOut104 happy_x_4 of { happy_var_4 -> -	happyIn64-		 (SomeWhere happy_var_2 happy_var_4-	) `HappyStk` happyRest}}--happyReduce_191 = happySpecReduce_1  59# happyReduction_191-happyReduction_191 happy_x_1-	 =  case happyOut66 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_192 = happySpecReduce_1  59# happyReduction_192-happyReduction_192 happy_x_1-	 =  case happyOut75 happy_x_1 of { happy_var_1 -> -	happyIn65-		 (happy_var_1-	)}--happyReduce_193 = happySpecReduce_1  59# happyReduction_193-happyReduction_193 happy_x_1-	 =  case happyOut69 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_194 = happySpecReduce_1  59# happyReduction_194-happyReduction_194 happy_x_1-	 =  case happyOut71 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_195 = happySpecReduce_1  59# happyReduction_195-happyReduction_195 happy_x_1-	 =  case happyOut72 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_196 = happySpecReduce_1  59# happyReduction_196-happyReduction_196 happy_x_1-	 =  case happyOut74 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_197 = happySpecReduce_1  59# happyReduction_197-happyReduction_197 happy_x_1-	 =  case happyOut76 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_198 = happySpecReduce_1  59# happyReduction_198-happyReduction_198 happy_x_1-	 =  case happyOut77 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_199 = happySpecReduce_1  59# happyReduction_199-happyReduction_199 happy_x_1-	 =  case happyOut78 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_200 = happySpecReduce_1  59# happyReduction_200-happyReduction_200 happy_x_1-	 =  case happyOut79 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_201 = happySpecReduce_1  59# happyReduction_201-happyReduction_201 happy_x_1-	 =  case happyOut80 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_202 = happySpecReduce_1  59# happyReduction_202-happyReduction_202 happy_x_1-	 =  case happyOut81 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_203 = happySpecReduce_1  59# happyReduction_203-happyReduction_203 happy_x_1-	 =  case happyOut84 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_204 = happySpecReduce_1  59# happyReduction_204-happyReduction_204 happy_x_1-	 =  case happyOut83 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_205 = happySpecReduce_1  59# happyReduction_205-happyReduction_205 happy_x_1-	 =  case happyOut85 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_206 = happySpecReduce_1  59# happyReduction_206-happyReduction_206 happy_x_1-	 =  case happyOut88 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_207 = happySpecReduce_3  60# happyReduction_207-happyReduction_207 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	case happyOut26 happy_x_3 of { happy_var_3 -> -	happyIn66-		 (TypeSig happy_var_1 happy_var_3-	)}}--happyReduce_208 = happySpecReduce_3  61# happyReduction_208-happyReduction_208 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut17 happy_x_1 of { happy_var_1 -> -	case happyOut26 happy_x_3 of { happy_var_3 -> -	happyIn67-		 (map (flip TypeSig happy_var_3) happy_var_1-	)}}--happyReduce_209 = happySpecReduce_3  62# happyReduction_209-happyReduction_209 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	case happyOut26 happy_x_3 of { happy_var_3 -> -	happyIn68-		 (map (id *** flip TypeSig happy_var_3) happy_var_1-	)}}--happyReduce_210 = happySpecReduce_3  63# happyReduction_210-happyReduction_210 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut60 happy_x_1 of { happy_var_1 -> -	case happyOut70 happy_x_2 of { happy_var_2 -> -	case happyOut64 happy_x_3 of { happy_var_3 -> -	happyIn69-		 (FunClause happy_var_1 happy_var_2 happy_var_3-	)}}}--happyReduce_211 = happySpecReduce_2  64# happyReduction_211-happyReduction_211 happy_x_2-	happy_x_1-	 =  case happyOut26 happy_x_2 of { happy_var_2 -> -	happyIn70-		 (RHS happy_var_2-	)}--happyReduce_212 = happySpecReduce_0  64# happyReduction_212-happyReduction_212  =  happyIn70-		 (AbsurdRHS-	)--happyReduce_213 = happyReduce 7# 65# happyReduction_213-happyReduction_213 (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 happyOut46 happy_x_3 of { happy_var_3 -> -	case happyOut26 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> -	case happyOut102 happy_x_7 of { happy_var_7 -> -	happyIn71-		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) Inductive happy_var_2 (map addType happy_var_3) happy_var_5 happy_var_7-	) `HappyStk` happyRest}}}}}}--happyReduce_214 = happyReduce 7# 65# happyReduction_214-happyReduction_214 (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 happyOut46 happy_x_3 of { happy_var_3 -> -	case happyOut26 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> -	case happyOut102 happy_x_7 of { happy_var_7 -> -	happyIn71-		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) CoInductive happy_var_2 (map addType happy_var_3) happy_var_5 happy_var_7-	) `HappyStk` happyRest}}}}}}--happyReduce_215 = happyReduce 7# 66# happyReduction_215-happyReduction_215 (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 KwRecord happy_var_1) -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut46 happy_x_3 of { happy_var_3 -> -	case happyOut26 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> -	case happyOut103 happy_x_7 of { happy_var_7 -> -	happyIn72-		 (Record (getRange (happy_var_1, happy_var_6, happy_var_7)) happy_var_2 (fst happy_var_7) (map addType happy_var_3) happy_var_5 (snd happy_var_7)-	) `HappyStk` happyRest}}}}}}--happyReduce_216 = happySpecReduce_2  67# happyReduction_216-happyReduction_216 happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_2 of { happy_var_2 -> -	happyIn73-		 (happy_var_2-	)}--happyReduce_217 = happySpecReduce_3  68# happyReduction_217-happyReduction_217 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 happyOut22 happy_x_3 of { happy_var_3 -> -	happyIn74-		 (Infix (NonAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3-	)}}}--happyReduce_218 = happySpecReduce_3  68# happyReduction_218-happyReduction_218 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 happyOut22 happy_x_3 of { happy_var_3 -> -	happyIn74-		 (Infix (LeftAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3-	)}}}--happyReduce_219 = happySpecReduce_3  68# happyReduction_219-happyReduction_219 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 happyOut22 happy_x_3 of { happy_var_3 -> -	happyIn74-		 (Infix (RightAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3-	)}}}--happyReduce_220 = happySpecReduce_2  69# happyReduction_220-happyReduction_220 happy_x_2-	happy_x_1-	 =  case happyOut100 happy_x_2 of { happy_var_2 -> -	happyIn75-		 (let toField (h, TypeSig x t) = Field h x t in map toField happy_var_2-	)}--happyReduce_221 = happySpecReduce_2  70# happyReduction_221-happyReduction_221 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> -	case happyOut104 happy_x_2 of { happy_var_2 -> -	happyIn76-		 (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_222 = happySpecReduce_2  71# happyReduction_222-happyReduction_222 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> -	case happyOut104 happy_x_2 of { happy_var_2 -> -	happyIn77-		 (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_223 = happySpecReduce_2  72# happyReduction_223-happyReduction_223 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> -	case happyOut104 happy_x_2 of { happy_var_2 -> -	happyIn78-		 (Private (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_224 = happySpecReduce_2  73# happyReduction_224-happyReduction_224 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> -	case happyOut98 happy_x_2 of { happy_var_2 -> -	happyIn79-		 (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_225 = happySpecReduce_2  74# happyReduction_225-happyReduction_225 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> -	case happyOut98 happy_x_2 of { happy_var_2 -> -	happyIn80-		 (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_226 = happyReduce 4# 75# happyReduction_226-happyReduction_226 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	case happyOut20 happy_x_2 of { happy_var_2 -> -	case happyOut82 happy_x_3 of { happy_var_3 -> -	case happyOut49 happy_x_4 of { happy_var_4 -> -	happyIn81-		 (let-    { m   = happy_var_2-    ; es  = happy_var_3-    ; dir = happy_var_4-    ; r   = getRange (happy_var_1, m, dir)-    } in-    case es of-    { []  -> Open r m dir-    ; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2) []-                           (RawApp (fuseRange m es) (Ident m : es)) DoOpen dir-                       ]-    }-	) `HappyStk` happyRest}}}}--happyReduce_227 = happySpecReduce_0  76# happyReduction_227-happyReduction_227  =  happyIn82-		 ([]-	)--happyReduce_228 = happySpecReduce_2  76# happyReduction_228-happyReduction_228 happy_x_2-	happy_x_1-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> -	case happyOut82 happy_x_2 of { happy_var_2 -> -	happyIn82-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_229 = happyReduce 6# 77# happyReduction_229-happyReduction_229 (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 KwModule happy_var_1) -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut46 happy_x_3 of { happy_var_3 -> -	case happyOut26 happy_x_5 of { happy_var_5 -> -	case happyOut49 happy_x_6 of { happy_var_6 -> -	happyIn83-		 (ModuleMacro (getRange (happy_var_1, happy_var_5, happy_var_6)) happy_var_2 (map addType happy_var_3) happy_var_5 DontOpen happy_var_6-	) `HappyStk` happyRest}}}}}--happyReduce_230 = happyReduce 7# 77# happyReduction_230-happyReduction_230 (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 KwOpen happy_var_1) -> -	case happyOut16 happy_x_3 of { happy_var_3 -> -	case happyOut46 happy_x_4 of { happy_var_4 -> -	case happyOut26 happy_x_6 of { happy_var_6 -> -	case happyOut49 happy_x_7 of { happy_var_7 -> -	happyIn83-		 (ModuleMacro (getRange (happy_var_1, happy_var_6, happy_var_7)) happy_var_3 (map addType happy_var_4) happy_var_6 DoOpen happy_var_7-	) `HappyStk` happyRest}}}}}--happyReduce_231 = happySpecReduce_3  78# happyReduction_231-happyReduction_231 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> -	case happyOut20 happy_x_2 of { happy_var_2 -> -	case happyOut48 happy_x_3 of { happy_var_3 -> -	happyIn84-		 (Import (getRange (happy_var_1,happy_var_2,snd happy_var_3)) happy_var_2 (fst happy_var_3) DontOpen (snd happy_var_3)-	)}}}--happyReduce_232 = happyReduce 4# 78# happyReduction_232-happyReduction_232 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	case happyOut20 happy_x_3 of { happy_var_3 -> -	case happyOut48 happy_x_4 of { happy_var_4 -> -	happyIn84-		 (Import (getRange (happy_var_1,happy_var_3,snd happy_var_4)) happy_var_3 (fst happy_var_4) DoOpen (snd happy_var_4)-	) `HappyStk` happyRest}}}--happyReduce_233 = happyReduce 5# 79# happyReduction_233-happyReduction_233 (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 happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut46 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut105 happy_x_5 of { happy_var_5 -> -	happyIn85-		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_234 = happySpecReduce_2  80# happyReduction_234-happyReduction_234 happy_x_2-	happy_x_1-	 =  case happyOut87 happy_x_2 of { happy_var_2 -> -	happyIn86-		 ([happy_var_2]-	)}--happyReduce_235 = happySpecReduce_3  80# happyReduction_235-happyReduction_235 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut84 happy_x_2 of { happy_var_2 -> -	case happyOut86 happy_x_3 of { happy_var_3 -> -	happyIn86-		 (happy_var_2 : happy_var_3-	)}}--happyReduce_236 = happySpecReduce_3  80# happyReduction_236-happyReduction_236 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut81 happy_x_2 of { happy_var_2 -> -	case happyOut86 happy_x_3 of { happy_var_3 -> -	happyIn86-		 (happy_var_2 : happy_var_3-	)}}--happyReduce_237 = happyReduce 5# 81# happyReduction_237-happyReduction_237 (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 happyOut20 happy_x_2 of { happy_var_2 -> -	case happyOut46 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut105 happy_x_5 of { happy_var_5 -> -	happyIn87-		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) happy_var_2 (map addType happy_var_3) happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_238 = happySpecReduce_1  82# happyReduction_238-happyReduction_238 happy_x_1-	 =  case happyOut90 happy_x_1 of { happy_var_1 -> -	happyIn88-		 (Pragma happy_var_1-	)}--happyReduce_239 = happySpecReduce_1  83# happyReduction_239-happyReduction_239 happy_x_1-	 =  case happyOut91 happy_x_1 of { happy_var_1 -> -	happyIn89-		 (happy_var_1-	)}--happyReduce_240 = happySpecReduce_1  84# happyReduction_240-happyReduction_240 happy_x_1-	 =  case happyOut92 happy_x_1 of { happy_var_1 -> -	happyIn90-		 (happy_var_1-	)}--happyReduce_241 = happySpecReduce_1  84# happyReduction_241-happyReduction_241 happy_x_1-	 =  case happyOut93 happy_x_1 of { happy_var_1 -> -	happyIn90-		 (happy_var_1-	)}--happyReduce_242 = happySpecReduce_1  84# happyReduction_242-happyReduction_242 happy_x_1-	 =  case happyOut95 happy_x_1 of { happy_var_1 -> -	happyIn90-		 (happy_var_1-	)}--happyReduce_243 = happySpecReduce_1  84# happyReduction_243-happyReduction_243 happy_x_1-	 =  case happyOut94 happy_x_1 of { happy_var_1 -> -	happyIn90-		 (happy_var_1-	)}--happyReduce_244 = happySpecReduce_1  84# happyReduction_244-happyReduction_244 happy_x_1-	 =  case happyOut96 happy_x_1 of { happy_var_1 -> -	happyIn90-		 (happy_var_1-	)}--happyReduce_245 = happySpecReduce_1  84# happyReduction_245-happyReduction_245 happy_x_1-	 =  case happyOut97 happy_x_1 of { happy_var_1 -> -	happyIn90-		 (happy_var_1-	)}--happyReduce_246 = happyReduce 4# 85# happyReduction_246-happyReduction_246 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut24 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	happyIn91-		 (OptionsPragma (fuseRange happy_var_1 happy_var_4) happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_247 = happyReduce 5# 86# happyReduction_247-happyReduction_247 (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_3 of { (TokString happy_var_3) -> -	case happyOut25 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn92-		 (BuiltinPragma (fuseRange happy_var_1 happy_var_5) (snd happy_var_3) (Ident happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_248 = happyReduce 5# 87# happyReduction_248-happyReduction_248 (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 happyOut25 happy_x_3 of { happy_var_3 -> -	case happyOut24 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn93-		 (CompiledPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_249 = happyReduce 5# 88# happyReduction_249-happyReduction_249 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut25 happy_x_3 of { happy_var_3 -> -	case happyOut24 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn94-		 (CompiledTypePragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_250 = happyReduce 6# 89# happyReduction_250-happyReduction_250 (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 happyOut25 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> -	case happyOut24 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> -	happyIn95-		 (CompiledDataPragma (fuseRange happy_var_1 happy_var_6) happy_var_3 (snd happy_var_4) happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_251 = happyMonadReduce 4# 90# happyReduction_251-happyReduction_251 (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 happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	( let s = snd happy_var_3 in-       if validHaskellModuleName s-       then return $ ImportPragma (fuseRange happy_var_1 happy_var_4) s-       else parseError $ "Malformed module name: " ++ s ++ ".")}}}-	) (\r -> happyReturn (happyIn96 r))--happyReduce_252 = happySpecReduce_3  91# happyReduction_252-happyReduction_252 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> -	happyIn97-		 (ImpossiblePragma (fuseRange happy_var_1 happy_var_3)-	)}}--happyReduce_253 = happyReduce 5# 92# happyReduction_253-happyReduction_253 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut99 happy_x_3 of { happy_var_3 -> -	happyIn98-		 (reverse happy_var_3-	) `HappyStk` happyRest}--happyReduce_254 = happyReduce 4# 93# happyReduction_254-happyReduction_254 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut99 happy_x_1 of { happy_var_1 -> -	case happyOut67 happy_x_4 of { happy_var_4 -> -	happyIn99-		 (reverse happy_var_4 ++ happy_var_1-	) `HappyStk` happyRest}}--happyReduce_255 = happySpecReduce_2  93# happyReduction_255-happyReduction_255 happy_x_2-	happy_x_1-	 =  case happyOut67 happy_x_2 of { happy_var_2 -> -	happyIn99-		 (reverse happy_var_2-	)}--happyReduce_256 = happyReduce 5# 94# happyReduction_256-happyReduction_256 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut101 happy_x_3 of { happy_var_3 -> -	happyIn100-		 (reverse happy_var_3-	) `HappyStk` happyRest}--happyReduce_257 = happyReduce 4# 95# happyReduction_257-happyReduction_257 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut101 happy_x_1 of { happy_var_1 -> -	case happyOut68 happy_x_4 of { happy_var_4 -> -	happyIn101-		 (reverse happy_var_4 ++ happy_var_1-	) `HappyStk` happyRest}}--happyReduce_258 = happySpecReduce_2  95# happyReduction_258-happyReduction_258 happy_x_2-	happy_x_1-	 =  case happyOut68 happy_x_2 of { happy_var_2 -> -	happyIn101-		 (reverse happy_var_2-	)}--happyReduce_259 = happyReduce 4# 96# happyReduction_259-happyReduction_259 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = happyIn102-		 ([]-	) `HappyStk` happyRest--happyReduce_260 = happySpecReduce_1  96# happyReduction_260-happyReduction_260 happy_x_1-	 =  case happyOut98 happy_x_1 of { happy_var_1 -> -	happyIn102-		 (happy_var_1-	)}--happyReduce_261 = happyReduce 4# 97# happyReduction_261-happyReduction_261 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = happyIn103-		 ((Nothing, [])-	) `HappyStk` happyRest--happyReduce_262 = happyReduce 6# 97# happyReduction_262-happyReduction_262 (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 happyOut73 happy_x_4 of { happy_var_4 -> -	happyIn103-		 ((Just happy_var_4, [])-	) `HappyStk` happyRest}--happyReduce_263 = happyReduce 8# 97# happyReduction_263-happyReduction_263 (happy_x_8 `HappyStk`-	happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut73 happy_x_4 of { happy_var_4 -> -	case happyOut106 happy_x_6 of { happy_var_6 -> -	happyIn103-		 ((Just happy_var_4, reverse happy_var_6)-	) `HappyStk` happyRest}}--happyReduce_264 = happyReduce 5# 97# happyReduction_264-happyReduction_264 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut106 happy_x_3 of { happy_var_3 -> -	happyIn103-		 ((Nothing, reverse happy_var_3)-	) `HappyStk` happyRest}--happyReduce_265 = happyReduce 5# 98# happyReduction_265-happyReduction_265 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut106 happy_x_3 of { happy_var_3 -> -	happyIn104-		 (reverse happy_var_3-	) `HappyStk` happyRest}--happyReduce_266 = happyReduce 4# 99# happyReduction_266-happyReduction_266 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = happyIn105-		 ([]-	) `HappyStk` happyRest--happyReduce_267 = happySpecReduce_1  99# happyReduction_267-happyReduction_267 happy_x_1-	 =  case happyOut104 happy_x_1 of { happy_var_1 -> -	happyIn105-		 (happy_var_1-	)}--happyReduce_268 = happyReduce 4# 100# happyReduction_268-happyReduction_268 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut106 happy_x_1 of { happy_var_1 -> -	case happyOut65 happy_x_4 of { happy_var_4 -> -	happyIn106-		 (reverse happy_var_4 ++ happy_var_1-	) `HappyStk` happyRest}}--happyReduce_269 = happySpecReduce_2  100# happyReduction_269-happyReduction_269 happy_x_2-	happy_x_1-	 =  case happyOut65 happy_x_2 of { happy_var_2 -> -	happyIn106-		 (reverse happy_var_2-	)}--happyNewToken action sts stk-	= lexer(\tk -> -	let cont i = happyDoAction i tk action sts stk in-	case tk of {-	TokEOF -> happyDoAction 64# tk action sts stk;-	TokKeyword KwLet happy_dollar_dollar -> cont 1#;-	TokKeyword KwIn happy_dollar_dollar -> cont 2#;-	TokKeyword KwWhere happy_dollar_dollar -> cont 3#;-	TokKeyword KwWith happy_dollar_dollar -> cont 4#;-	TokKeyword KwRewrite happy_dollar_dollar -> cont 5#;-	TokKeyword KwPostulate happy_dollar_dollar -> cont 6#;-	TokKeyword KwPrimitive happy_dollar_dollar -> cont 7#;-	TokKeyword KwOpen happy_dollar_dollar -> cont 8#;-	TokKeyword KwImport happy_dollar_dollar -> cont 9#;-	TokKeyword KwUsing happy_dollar_dollar -> cont 10#;-	TokKeyword KwHiding happy_dollar_dollar -> cont 11#;-	TokKeyword KwRenaming happy_dollar_dollar -> cont 12#;-	TokKeyword KwTo happy_dollar_dollar -> cont 13#;-	TokKeyword KwPublic happy_dollar_dollar -> cont 14#;-	TokKeyword KwModule happy_dollar_dollar -> cont 15#;-	TokKeyword KwData happy_dollar_dollar -> cont 16#;-	TokKeyword KwCoData happy_dollar_dollar -> cont 17#;-	TokKeyword KwRecord happy_dollar_dollar -> cont 18#;-	TokKeyword KwConstructor happy_dollar_dollar -> cont 19#;-	TokKeyword KwField happy_dollar_dollar -> cont 20#;-	TokKeyword KwInfix happy_dollar_dollar -> cont 21#;-	TokKeyword KwInfixL happy_dollar_dollar -> cont 22#;-	TokKeyword KwInfixR happy_dollar_dollar -> cont 23#;-	TokKeyword KwMutual happy_dollar_dollar -> cont 24#;-	TokKeyword KwAbstract happy_dollar_dollar -> cont 25#;-	TokKeyword KwPrivate happy_dollar_dollar -> cont 26#;-	TokKeyword KwProp happy_dollar_dollar -> cont 27#;-	TokKeyword KwSet happy_dollar_dollar -> cont 28#;-	TokKeyword KwForall happy_dollar_dollar -> cont 29#;-	TokKeyword KwOPTIONS happy_dollar_dollar -> cont 30#;-	TokKeyword KwBUILTIN happy_dollar_dollar -> cont 31#;-	TokKeyword KwIMPORT happy_dollar_dollar -> cont 32#;-	TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 33#;-	TokKeyword KwCOMPILED happy_dollar_dollar -> cont 34#;-	TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 35#;-	TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 36#;-	TokSetN happy_dollar_dollar -> cont 37#;-	TokTeX happy_dollar_dollar -> cont 38#;-	TokComment happy_dollar_dollar -> cont 39#;-	TokSymbol SymEllipsis happy_dollar_dollar -> cont 40#;-	TokSymbol SymDot happy_dollar_dollar -> cont 41#;-	TokSymbol SymSemi happy_dollar_dollar -> cont 42#;-	TokSymbol SymColon happy_dollar_dollar -> cont 43#;-	TokSymbol SymEqual happy_dollar_dollar -> cont 44#;-	TokSymbol SymUnderscore happy_dollar_dollar -> cont 45#;-	TokSymbol SymQuestionMark happy_dollar_dollar -> cont 46#;-	TokSymbol SymArrow happy_dollar_dollar -> cont 47#;-	TokSymbol SymLambda happy_dollar_dollar -> cont 48#;-	TokSymbol SymAs happy_dollar_dollar -> cont 49#;-	TokSymbol SymBar happy_dollar_dollar -> cont 50#;-	TokSymbol SymOpenParen happy_dollar_dollar -> cont 51#;-	TokSymbol SymCloseParen happy_dollar_dollar -> cont 52#;-	TokSymbol SymOpenBrace happy_dollar_dollar -> cont 53#;-	TokSymbol SymCloseBrace happy_dollar_dollar -> cont 54#;-	TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 55#;-	TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 56#;-	TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 57#;-	TokSymbol SymOpenPragma happy_dollar_dollar -> cont 58#;-	TokSymbol SymClosePragma happy_dollar_dollar -> cont 59#;-	TokId happy_dollar_dollar -> cont 60#;-	TokQId happy_dollar_dollar -> cont 61#;-	TokString happy_dollar_dollar -> cont 62#;-	TokLiteral happy_dollar_dollar -> cont 63#;-	_ -> 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 (happyOut6 x))--exprParser = happySomeParser where-  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut26 x))--moduleParser = happySomeParser where-  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut10 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- --------------------------------------------------------------------------}---- | Create a name from a string.--mkName :: (Interval, String) -> Parser Name-mkName (i, s) = do-    let xs = parts s-    mapM_ isValidId xs-    unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"-    return $ Name (getRange i) xs-    where-        parts :: String -> [NamePart]-        parts ""        = []-        parts ('_' : s) = Hole : parts s-        parts s         = Id x : parts s'-          where (x, s') = break (== '_') s--	isValidId Hole   = return ()-	isValidId (Id x) = 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 aren't 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)---- | 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---- | Converts lambda bindings to typed bindings.-addType :: LamBinding -> TypedBindings-addType (DomainFull b)	 = b-addType (DomainFree h x) = TypedBindings r h [TBind r [x] $ Underscore r Nothing]+import Agda.Syntax.Notation+import Agda.Syntax.Literal++import Agda.Utils.Monad+import Agda.Utils.QuickCheck+import Agda.Utils.TestHelpers+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+#else+import Array+#endif+#if __GLASGOW_HASKELL__ >= 503+import GHC.Exts+#else+import GlaExts+#endif++-- parser produced by Happy Version 1.17++newtype HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63 = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = GHC.Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn6 :: ([Token]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn6 x = unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Token])+happyOut6 x = unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: ([Token]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn7 x = unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Token])+happyOut7 x = unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: (Token) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn8 x = unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Token)+happyOut8 x = unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: (()) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn9 x = unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (())+happyOut9 x = unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: (([Pragma], [Declaration])) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn10 x = unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (([Pragma], [Declaration]))+happyOut10 x = unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: t11 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn11 x = unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t11+happyOut11 x = unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: t12 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn12 x = unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t12+happyOut12 x = unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: t13 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn13 x = unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t13+happyOut13 x = unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: (()) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn14 x = unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (())+happyOut14 x = unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: (Integer) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn15 x = unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Integer)+happyOut15 x = unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: (Name) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn16 x = unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Name)+happyOut16 x = unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn17 x = unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Name])+happyOut17 x = unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: (Arg Name) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn18 x = unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Arg Name)+happyOut18 x = unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: ([Arg Name]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn19 x = unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Arg Name])+happyOut19 x = unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: ([Arg Name]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn20 x = unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Arg Name])+happyOut20 x = unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: (QName) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn21 x = unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (QName)+happyOut21 x = unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: (QName) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn22 x = unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (QName)+happyOut22 x = unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyIn23 :: (Name) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn23 x = unsafeCoerce# x+{-# INLINE happyIn23 #-}+happyOut23 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Name)+happyOut23 x = unsafeCoerce# x+{-# INLINE happyOut23 #-}+happyIn24 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn24 x = unsafeCoerce# x+{-# INLINE happyIn24 #-}+happyOut24 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Name])+happyOut24 x = unsafeCoerce# x+{-# INLINE happyOut24 #-}+happyIn25 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn25 x = unsafeCoerce# x+{-# INLINE happyIn25 #-}+happyOut25 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Name])+happyOut25 x = unsafeCoerce# x+{-# INLINE happyOut25 #-}+happyIn26 :: ([String]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn26 x = unsafeCoerce# x+{-# INLINE happyIn26 #-}+happyOut26 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([String])+happyOut26 x = unsafeCoerce# x+{-# INLINE happyOut26 #-}+happyIn27 :: (QName) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn27 x = unsafeCoerce# x+{-# INLINE happyIn27 #-}+happyOut27 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (QName)+happyOut27 x = unsafeCoerce# x+{-# INLINE happyOut27 #-}+happyIn28 :: (Expr) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn28 x = unsafeCoerce# x+{-# INLINE happyIn28 #-}+happyOut28 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Expr)+happyOut28 x = unsafeCoerce# x+{-# INLINE happyOut28 #-}+happyIn29 :: t29 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn29 x = unsafeCoerce# x+{-# INLINE happyIn29 #-}+happyOut29 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t29+happyOut29 x = unsafeCoerce# x+{-# INLINE happyOut29 #-}+happyIn30 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn30 x = unsafeCoerce# x+{-# INLINE happyIn30 #-}+happyOut30 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Expr])+happyOut30 x = unsafeCoerce# x+{-# INLINE happyOut30 #-}+happyIn31 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn31 x = unsafeCoerce# x+{-# INLINE happyIn31 #-}+happyOut31 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Expr])+happyOut31 x = unsafeCoerce# x+{-# INLINE happyOut31 #-}+happyIn32 :: t32 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn32 x = unsafeCoerce# x+{-# INLINE happyIn32 #-}+happyOut32 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t32+happyOut32 x = unsafeCoerce# x+{-# INLINE happyOut32 #-}+happyIn33 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn33 x = unsafeCoerce# x+{-# INLINE happyIn33 #-}+happyOut33 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Expr])+happyOut33 x = unsafeCoerce# x+{-# INLINE happyOut33 #-}+happyIn34 :: t34 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn34 x = unsafeCoerce# x+{-# INLINE happyIn34 #-}+happyOut34 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t34+happyOut34 x = unsafeCoerce# x+{-# INLINE happyOut34 #-}+happyIn35 :: ([(Name, Expr)]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn35 x = unsafeCoerce# x+{-# INLINE happyIn35 #-}+happyOut35 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([(Name, Expr)])+happyOut35 x = unsafeCoerce# x+{-# INLINE happyOut35 #-}+happyIn36 :: ([(Name, Expr)]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn36 x = unsafeCoerce# x+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([(Name, Expr)])+happyOut36 x = unsafeCoerce# x+{-# INLINE happyOut36 #-}+happyIn37 :: ((Name, Expr)) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn37 x = unsafeCoerce# x+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ((Name, Expr))+happyOut37 x = unsafeCoerce# x+{-# INLINE happyOut37 #-}+happyIn38 :: t38 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn38 x = unsafeCoerce# x+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t38+happyOut38 x = unsafeCoerce# x+{-# INLINE happyOut38 #-}+happyIn39 :: t39 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn39 x = unsafeCoerce# x+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t39+happyOut39 x = unsafeCoerce# x+{-# INLINE happyOut39 #-}+happyIn40 :: ([TypedBindings]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn40 x = unsafeCoerce# x+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([TypedBindings])+happyOut40 x = unsafeCoerce# x+{-# INLINE happyOut40 #-}+happyIn41 :: (TypedBindings) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn41 x = unsafeCoerce# x+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (TypedBindings)+happyOut41 x = unsafeCoerce# x+{-# INLINE happyOut41 #-}+happyIn42 :: ([TypedBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn42 x = unsafeCoerce# x+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([TypedBinding])+happyOut42 x = unsafeCoerce# x+{-# INLINE happyOut42 #-}+happyIn43 :: ([TypedBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn43 x = unsafeCoerce# x+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([TypedBinding])+happyOut43 x = unsafeCoerce# x+{-# INLINE happyOut43 #-}+happyIn44 :: (TypedBinding) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn44 x = unsafeCoerce# x+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (TypedBinding)+happyOut44 x = unsafeCoerce# x+{-# INLINE happyOut44 #-}+happyIn45 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn45 x = unsafeCoerce# x+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([LamBinding])+happyOut45 x = unsafeCoerce# x+{-# INLINE happyOut45 #-}+happyIn46 :: (([LamBinding], Hiding)) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn46 x = unsafeCoerce# x+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (([LamBinding], Hiding))+happyOut46 x = unsafeCoerce# x+{-# INLINE happyOut46 #-}+happyIn47 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn47 x = unsafeCoerce# x+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Either Hiding LamBinding])+happyOut47 x = unsafeCoerce# x+{-# INLINE happyOut47 #-}+happyIn48 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn48 x = unsafeCoerce# x+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([LamBinding])+happyOut48 x = unsafeCoerce# x+{-# INLINE happyOut48 #-}+happyIn49 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn49 x = unsafeCoerce# x+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([LamBinding])+happyOut49 x = unsafeCoerce# x+{-# INLINE happyOut49 #-}+happyIn50 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn50 x = unsafeCoerce# x+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([LamBinding])+happyOut50 x = unsafeCoerce# x+{-# INLINE happyOut50 #-}+happyIn51 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn51 x = unsafeCoerce# x+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([LamBinding])+happyOut51 x = unsafeCoerce# x+{-# INLINE happyOut51 #-}+happyIn52 :: ((Maybe AsName, ImportDirective)) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn52 x = unsafeCoerce# x+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ((Maybe AsName, ImportDirective))+happyOut52 x = unsafeCoerce# x+{-# INLINE happyOut52 #-}+happyIn53 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn53 x = unsafeCoerce# x+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (ImportDirective)+happyOut53 x = unsafeCoerce# x+{-# INLINE happyOut53 #-}+happyIn54 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn54 x = unsafeCoerce# x+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (ImportDirective)+happyOut54 x = unsafeCoerce# x+{-# INLINE happyOut54 #-}+happyIn55 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn55 x = unsafeCoerce# x+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (ImportDirective)+happyOut55 x = unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyIn56 :: ((UsingOrHiding , Range)) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn56 x = unsafeCoerce# x+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ((UsingOrHiding , Range))+happyOut56 x = unsafeCoerce# x+{-# INLINE happyOut56 #-}+happyIn57 :: (([Renaming] , Range)) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn57 x = unsafeCoerce# x+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (([Renaming] , Range))+happyOut57 x = unsafeCoerce# x+{-# INLINE happyOut57 #-}+happyIn58 :: ([Renaming]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn58 x = unsafeCoerce# x+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Renaming])+happyOut58 x = unsafeCoerce# x+{-# INLINE happyOut58 #-}+happyIn59 :: (Renaming) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn59 x = unsafeCoerce# x+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Renaming)+happyOut59 x = unsafeCoerce# x+{-# INLINE happyOut59 #-}+happyIn60 :: (ImportedName) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn60 x = unsafeCoerce# x+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (ImportedName)+happyOut60 x = unsafeCoerce# x+{-# INLINE happyOut60 #-}+happyIn61 :: (ImportedName) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn61 x = unsafeCoerce# x+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (ImportedName)+happyOut61 x = unsafeCoerce# x+{-# INLINE happyOut61 #-}+happyIn62 :: ([ImportedName]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn62 x = unsafeCoerce# x+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([ImportedName])+happyOut62 x = unsafeCoerce# x+{-# INLINE happyOut62 #-}+happyIn63 :: t63 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn63 x = unsafeCoerce# x+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t63+happyOut63 x = unsafeCoerce# x+{-# INLINE happyOut63 #-}+happyIn64 :: (LHS) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn64 x = unsafeCoerce# x+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (LHS)+happyOut64 x = unsafeCoerce# x+{-# INLINE happyOut64 #-}+happyIn65 :: ([Pattern]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn65 x = unsafeCoerce# x+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Pattern])+happyOut65 x = unsafeCoerce# x+{-# INLINE happyOut65 #-}+happyIn66 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn66 x = unsafeCoerce# x+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Expr])+happyOut66 x = unsafeCoerce# x+{-# INLINE happyOut66 #-}+happyIn67 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn67 x = unsafeCoerce# x+{-# INLINE happyIn67 #-}+happyOut67 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Expr])+happyOut67 x = unsafeCoerce# x+{-# INLINE happyOut67 #-}+happyIn68 :: (WhereClause) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn68 x = unsafeCoerce# x+{-# INLINE happyIn68 #-}+happyOut68 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (WhereClause)+happyOut68 x = unsafeCoerce# x+{-# INLINE happyOut68 #-}+happyIn69 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn69 x = unsafeCoerce# x+{-# INLINE happyIn69 #-}+happyOut69 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])+happyOut69 x = unsafeCoerce# x+{-# INLINE happyOut69 #-}+happyIn70 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn70 x = unsafeCoerce# x+{-# INLINE happyIn70 #-}+happyOut70 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut70 x = unsafeCoerce# x+{-# INLINE happyOut70 #-}+happyIn71 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn71 x = unsafeCoerce# x+{-# INLINE happyIn71 #-}+happyOut71 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])+happyOut71 x = unsafeCoerce# x+{-# INLINE happyOut71 #-}+happyIn72 :: ([Arg Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn72 x = unsafeCoerce# x+{-# INLINE happyIn72 #-}+happyOut72 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Arg Declaration])+happyOut72 x = unsafeCoerce# x+{-# INLINE happyOut72 #-}+happyIn73 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn73 x = unsafeCoerce# x+{-# INLINE happyIn73 #-}+happyOut73 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut73 x = unsafeCoerce# x+{-# INLINE happyOut73 #-}+happyIn74 :: (RHS) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn74 x = unsafeCoerce# x+{-# INLINE happyIn74 #-}+happyOut74 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (RHS)+happyOut74 x = unsafeCoerce# x+{-# INLINE happyOut74 #-}+happyIn75 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn75 x = unsafeCoerce# x+{-# INLINE happyIn75 #-}+happyOut75 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut75 x = unsafeCoerce# x+{-# INLINE happyOut75 #-}+happyIn76 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn76 x = unsafeCoerce# x+{-# INLINE happyIn76 #-}+happyOut76 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut76 x = unsafeCoerce# x+{-# INLINE happyOut76 #-}+happyIn77 :: (Name) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn77 x = unsafeCoerce# x+{-# INLINE happyIn77 #-}+happyOut77 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Name)+happyOut77 x = unsafeCoerce# x+{-# INLINE happyOut77 #-}+happyIn78 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn78 x = unsafeCoerce# x+{-# INLINE happyIn78 #-}+happyOut78 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut78 x = unsafeCoerce# x+{-# INLINE happyOut78 #-}+happyIn79 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn79 x = unsafeCoerce# x+{-# INLINE happyIn79 #-}+happyOut79 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])+happyOut79 x = unsafeCoerce# x+{-# INLINE happyOut79 #-}+happyIn80 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn80 x = unsafeCoerce# x+{-# INLINE happyIn80 #-}+happyOut80 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut80 x = unsafeCoerce# x+{-# INLINE happyOut80 #-}+happyIn81 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn81 x = unsafeCoerce# x+{-# INLINE happyIn81 #-}+happyOut81 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut81 x = unsafeCoerce# x+{-# INLINE happyOut81 #-}+happyIn82 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn82 x = unsafeCoerce# x+{-# INLINE happyIn82 #-}+happyOut82 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut82 x = unsafeCoerce# x+{-# INLINE happyOut82 #-}+happyIn83 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn83 x = unsafeCoerce# x+{-# INLINE happyIn83 #-}+happyOut83 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut83 x = unsafeCoerce# x+{-# INLINE happyOut83 #-}+happyIn84 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn84 x = unsafeCoerce# x+{-# INLINE happyIn84 #-}+happyOut84 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut84 x = unsafeCoerce# x+{-# INLINE happyOut84 #-}+happyIn85 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn85 x = unsafeCoerce# x+{-# INLINE happyIn85 #-}+happyOut85 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut85 x = unsafeCoerce# x+{-# INLINE happyOut85 #-}+happyIn86 :: ([String]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn86 x = unsafeCoerce# x+{-# INLINE happyIn86 #-}+happyOut86 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([String])+happyOut86 x = unsafeCoerce# x+{-# INLINE happyOut86 #-}+happyIn87 :: ([HoleName]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn87 x = unsafeCoerce# x+{-# INLINE happyIn87 #-}+happyOut87 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([HoleName])+happyOut87 x = unsafeCoerce# x+{-# INLINE happyOut87 #-}+happyIn88 :: (HoleName) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn88 x = unsafeCoerce# x+{-# INLINE happyIn88 #-}+happyOut88 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (HoleName)+happyOut88 x = unsafeCoerce# x+{-# INLINE happyOut88 #-}+happyIn89 :: (String) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn89 x = unsafeCoerce# x+{-# INLINE happyIn89 #-}+happyOut89 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (String)+happyOut89 x = unsafeCoerce# x+{-# INLINE happyOut89 #-}+happyIn90 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn90 x = unsafeCoerce# x+{-# INLINE happyIn90 #-}+happyOut90 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut90 x = unsafeCoerce# x+{-# INLINE happyOut90 #-}+happyIn91 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn91 x = unsafeCoerce# x+{-# INLINE happyIn91 #-}+happyOut91 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Expr])+happyOut91 x = unsafeCoerce# x+{-# INLINE happyOut91 #-}+happyIn92 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn92 x = unsafeCoerce# x+{-# INLINE happyIn92 #-}+happyOut92 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut92 x = unsafeCoerce# x+{-# INLINE happyOut92 #-}+happyIn93 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn93 x = unsafeCoerce# x+{-# INLINE happyIn93 #-}+happyOut93 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut93 x = unsafeCoerce# x+{-# INLINE happyOut93 #-}+happyIn94 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn94 x = unsafeCoerce# x+{-# INLINE happyIn94 #-}+happyOut94 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut94 x = unsafeCoerce# x+{-# INLINE happyOut94 #-}+happyIn95 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn95 x = unsafeCoerce# x+{-# INLINE happyIn95 #-}+happyOut95 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])+happyOut95 x = unsafeCoerce# x+{-# INLINE happyOut95 #-}+happyIn96 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn96 x = unsafeCoerce# x+{-# INLINE happyIn96 #-}+happyOut96 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut96 x = unsafeCoerce# x+{-# INLINE happyOut96 #-}+happyIn97 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn97 x = unsafeCoerce# x+{-# INLINE happyIn97 #-}+happyOut97 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)+happyOut97 x = unsafeCoerce# x+{-# INLINE happyOut97 #-}+happyIn98 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn98 x = unsafeCoerce# x+{-# INLINE happyIn98 #-}+happyOut98 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)+happyOut98 x = unsafeCoerce# x+{-# INLINE happyOut98 #-}+happyIn99 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn99 x = unsafeCoerce# x+{-# INLINE happyIn99 #-}+happyOut99 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)+happyOut99 x = unsafeCoerce# x+{-# INLINE happyOut99 #-}+happyIn100 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn100 x = unsafeCoerce# x+{-# INLINE happyIn100 #-}+happyOut100 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)+happyOut100 x = unsafeCoerce# x+{-# INLINE happyOut100 #-}+happyIn101 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn101 x = unsafeCoerce# x+{-# INLINE happyIn101 #-}+happyOut101 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)+happyOut101 x = unsafeCoerce# x+{-# INLINE happyOut101 #-}+happyIn102 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn102 x = unsafeCoerce# x+{-# INLINE happyIn102 #-}+happyOut102 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)+happyOut102 x = unsafeCoerce# x+{-# INLINE happyOut102 #-}+happyIn103 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn103 x = unsafeCoerce# x+{-# INLINE happyIn103 #-}+happyOut103 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)+happyOut103 x = unsafeCoerce# x+{-# INLINE happyOut103 #-}+happyIn104 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn104 x = unsafeCoerce# x+{-# INLINE happyIn104 #-}+happyOut104 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)+happyOut104 x = unsafeCoerce# x+{-# INLINE happyOut104 #-}+happyIn105 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn105 x = unsafeCoerce# x+{-# INLINE happyIn105 #-}+happyOut105 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)+happyOut105 x = unsafeCoerce# x+{-# INLINE happyOut105 #-}+happyIn106 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn106 x = unsafeCoerce# x+{-# INLINE happyIn106 #-}+happyOut106 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)+happyOut106 x = unsafeCoerce# x+{-# INLINE happyOut106 #-}+happyIn107 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn107 x = unsafeCoerce# x+{-# INLINE happyIn107 #-}+happyOut107 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)+happyOut107 x = unsafeCoerce# x+{-# INLINE happyOut107 #-}+happyIn108 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn108 x = unsafeCoerce# x+{-# INLINE happyIn108 #-}+happyOut108 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([TypeSignature])+happyOut108 x = unsafeCoerce# x+{-# INLINE happyOut108 #-}+happyIn109 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn109 x = unsafeCoerce# x+{-# INLINE happyIn109 #-}+happyOut109 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([TypeSignature])+happyOut109 x = unsafeCoerce# x+{-# INLINE happyOut109 #-}+happyIn110 :: ([Arg TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn110 x = unsafeCoerce# x+{-# INLINE happyIn110 #-}+happyOut110 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Arg TypeSignature])+happyOut110 x = unsafeCoerce# x+{-# INLINE happyOut110 #-}+happyIn111 :: ([Arg TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn111 x = unsafeCoerce# x+{-# INLINE happyIn111 #-}+happyOut111 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Arg TypeSignature])+happyOut111 x = unsafeCoerce# x+{-# INLINE happyOut111 #-}+happyIn112 :: ([Constructor]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn112 x = unsafeCoerce# x+{-# INLINE happyIn112 #-}+happyOut112 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Constructor])+happyOut112 x = unsafeCoerce# x+{-# INLINE happyOut112 #-}+happyIn113 :: ((Maybe Name, [Declaration])) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn113 x = unsafeCoerce# x+{-# INLINE happyIn113 #-}+happyOut113 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ((Maybe Name, [Declaration]))+happyOut113 x = unsafeCoerce# x+{-# INLINE happyOut113 #-}+happyIn114 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn114 x = unsafeCoerce# x+{-# INLINE happyIn114 #-}+happyOut114 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])+happyOut114 x = unsafeCoerce# x+{-# INLINE happyOut114 #-}+happyIn115 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn115 x = unsafeCoerce# x+{-# INLINE happyIn115 #-}+happyOut115 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])+happyOut115 x = unsafeCoerce# x+{-# INLINE happyOut115 #-}+happyIn116 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyIn116 x = unsafeCoerce# x+{-# INLINE happyIn116 #-}+happyOut116 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])+happyOut116 x = unsafeCoerce# x+{-# INLINE happyOut116 #-}+happyInTok :: Token -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)+happyInTok x = unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> Token+happyOutTok x = unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x00\x00\xac\x03\x17\x04\x00\x00\x24\x02\xb5\x00\xfc\x03\x0b\x04\x00\x00\x0b\x04\x03\x04\x00\x00\xf3\x03\x00\x00\x00\x00\x00\x00\x00\x00\x56\x01\x1e\x03\xac\x03\xf8\x03\x00\x00\xfd\xff\x00\x04\xfb\x03\x00\x00\x00\x00\x30\x01\xef\x03\x00\x00\x00\x00\xf0\x03\x00\x00\x00\x00\xea\x00\xfb\x02\xda\x02\x00\x00\x00\x00\x00\x00\xea\x03\xee\xff\xf7\x03\xf2\x03\xf6\x03\xee\x03\xf1\x03\x00\x00\xec\x03\xeb\x03\x00\x00\x00\x00\x00\x00\xea\x00\xac\x03\x00\x00\xe9\x03\xea\x00\x00\x00\x8b\x03\x68\x03\x00\x00\xb1\x02\x90\x02\x19\x04\x88\x00\x47\x03\xe7\x03\x88\x00\xcf\x03\xcf\x03\xd7\x03\xda\x03\x0f\x04\x00\x00\xcf\x03\x00\x00\x00\x00\x00\x00\x00\x00\x47\x03\xcf\x03\xf0\x03\x00\x00\x00\x00\xe4\x03\xe4\x03\x00\x00\xe4\x03\x00\x00\xfa\xff\x70\x02\x70\x02\xe6\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\xc5\x03\x00\x00\x00\x00\x88\x00\xac\x00\xf0\x03\x70\x02\x00\x00\xb4\x01\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x03\x00\x00\x00\x00\xcf\x03\x47\x03\xd5\x03\xce\x03\xc3\x03\x00\x00\xcd\x03\x8d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x03\x00\x00\x00\x00\x47\x03\x47\x03\xc0\x03\x00\x00\xcb\x03\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x03\x00\x00\x47\x03\x67\x02\x85\x02\x00\x00\xac\x00\xf0\x03\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x03\x00\x00\xb7\x03\xb1\x03\xaf\x03\x1b\x03\xa4\x03\x88\x00\xdc\x03\x88\x00\x9d\x03\x99\x03\x00\x00\x00\x00\x00\x00\xb0\x03\x00\x00\x06\x01\x00\x00\xc8\x03\x2a\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\xae\x03\x00\x00\xa8\x00\xd1\x03\xa1\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\xa5\x03\xa5\x03\xc5\x00\x92\x03\x92\x03\x92\x03\x22\x01\xa3\x03\x87\x03\x87\x03\x87\x03\x97\x03\x97\x03\x97\x03\x86\x03\x8f\x03\x93\x06\x00\x00\x00\x00\x47\x03\x00\x00\x00\x00\x7e\x03\x78\x03\x7c\x03\x77\x03\x77\x03\x77\x03\x77\x03\xb2\x03\xf0\x03\x96\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x95\x00\x95\x00\x7b\x03\x00\x00\x88\x00\x88\x00\x88\x00\x88\x00\x70\x03\x7a\x03\x00\x00\x00\x00\x29\x00\x47\x03\xad\x03\x47\x03\x47\x03\x67\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x03\x74\x03\x00\x00\x6e\x03\x72\x03\x64\x03\x6d\x03\x75\x03\x91\x03\x00\x00\x00\x00\x65\x03\x00\x00\x00\x00\x71\x03\x58\x03\x58\x03\x88\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x03\x00\x00\x00\x00\x6c\x03\x54\x03\x69\x03\x88\x00\x28\x00\x63\x03\x5f\x03\x5e\x03\x61\x03\x95\x00\x00\x00\x00\x00\x00\x00\xf7\xff\x00\x00\x00\x00\x55\x03\x00\x00\x4c\x03\xf0\x03\x6f\x03\x44\x03\x00\x00\x3d\x03\x3b\x03\x46\x03\x00\x00\x42\x03\x3a\x03\x38\x03\x00\x00\x00\x00\x36\x03\x34\x03\x33\x03\x00\x00\x00\x00\x31\x03\x00\x00\x31\x03\x00\x00\xde\x00\x85\x02\x47\x03\x47\x03\x47\x03\x43\x03\x47\x03\x3c\x03\x2b\x03\x85\x02\x67\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x01\x00\x00\x3e\x03\x21\x00\x3e\x03\x27\x03\x37\x03\x00\x00\x47\x03\x06\x01\x00\x00\x62\x03\x5d\x03\x5a\x03\x21\x00\x32\x03\x00\x00\xde\x00\x2c\x03\x00\x00\xec\x00\xe8\xff\x1a\x03\x00\x00\x20\x03\x00\x00\x19\x03\x00\x00\x00\x00\x00\x00\x16\x03\x00\x00\xe8\xff\x14\x03\x09\x03\x00\x00\x09\x03\x47\x03\x00\x00\xde\x00\x00\x00\x13\x03\x13\x03\x13\x03\x00\x00\x06\x01\x47\x03\x00\x00\xf5\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x02\x00\x00\x00\x00\x00\x00\xe5\x02\x00\x00\x00\x00\x00\x00\xfd\x02\xde\x00\x00\x00\xf9\x02\x00\x00\x00\x00\xde\x00\xf4\x02\xf4\x02\x1b\x00\x9d\x01\x85\x02\x00\x00\x21\x00\x00\x00\x85\x02\xd9\x02\x00\x00\x00\x00\x21\x00\xe8\x02\x00\x00\x85\x02\x00\x00\x21\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x74\x02\x8f\x06\x0f\x00\xf2\x02\x0e\x03\x79\x01\x00\x00\x07\x03\x00\x00\x06\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x01\x7a\x06\x00\x00\x00\x00\xc3\x01\x0e\x00\x00\x00\x00\x00\x00\x00\xc1\x01\xe6\x02\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x31\x01\x78\x04\x5d\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\x93\x02\x65\x06\x00\x00\x00\x00\x4b\x01\x00\x00\xb5\x04\xa1\x04\x00\x00\x50\x06\x3b\x06\x00\x00\x0b\x03\x26\x06\x00\x00\xfe\x02\x93\x04\xfa\x03\x34\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x11\x06\xd8\x03\x23\x00\x00\x00\x00\x00\x2d\x00\x2c\x00\x00\x00\x06\x00\x00\x00\xf0\x02\x7a\x02\x62\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\xd7\x02\x00\x00\x00\x00\xcc\x02\xb8\x04\x33\x00\x07\x02\x00\x00\xef\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x01\xfc\x05\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x04\x00\x00\x00\x00\xd2\x05\xbd\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\xa8\x05\x37\x01\x84\x02\x00\x00\x11\x03\x32\x00\xf6\x04\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x02\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x02\xdc\x02\xc1\x02\x00\x00\x92\x02\x00\x00\xc8\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\xe1\x04\x00\x00\xd8\x00\x93\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x02\xd2\x02\x00\x00\x00\x00\x8b\x02\x9b\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\x1d\x00\x1c\x00\xf4\x01\xbc\x02\xbb\x02\xaa\x02\x9c\x02\x19\x00\x98\x02\x96\x02\x91\x02\x0d\x00\x0c\x00\x0b\x00\x8d\x02\x57\x02\x00\x00\x00\x00\x00\x00\x23\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x02\x73\x02\x71\x02\x0e\x02\xde\x01\xc5\x02\x18\x02\x00\x00\x00\x00\x00\x00\xb6\x01\x00\x00\xb0\x01\x0e\x01\x00\x00\x00\x00\x69\x02\xe3\x01\x5b\x01\x33\x01\x0f\x02\x00\x00\x00\x00\x00\x00\xd6\x01\x93\x05\xd0\x01\x7e\x05\x69\x05\xe8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x01\x00\x00\xf6\x01\x00\x00\x00\x00\x00\x00\xe7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x01\x89\x01\xd3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x05\x00\x00\x00\x00\x0a\x00\x87\x01\x17\x00\x0c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x36\x00\x00\x00\x00\x00\x00\x00\x6c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x01\x9f\x02\x3f\x01\x65\x01\x00\x00\x00\x00\x50\x01\x00\x00\x00\x00\x00\x00\x48\x01\x00\x00\x00\x00\x00\x00\x00\x00\x26\x01\x00\x00\x00\x00\x00\x00\x04\x01\x00\x00\x3b\x00\x00\x00\x27\x00\x04\x02\x3f\x05\x2a\x05\x15\x05\x05\x00\x00\x05\x00\x00\x90\x00\xfe\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x09\x00\x23\x01\x12\x01\xb8\x00\x00\x00\x00\x00\xeb\x04\xcc\x04\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\xf2\x00\x00\x00\x12\x02\x00\x00\x00\x00\xdf\x00\x40\x03\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\xf1\x02\x00\x00\x9a\x00\x00\x00\x3a\x00\xd6\x04\x00\x00\x18\x00\x00\x00\x03\x00\x16\x00\x15\x00\x00\x00\x78\x01\xbc\x04\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x01\x00\x00\x00\x00\x00\x00\x00\x00\x61\x01\xff\xff\x04\x00\x1f\x00\x4a\x00\xdc\x01\x00\x00\x61\x00\x00\x00\x63\x01\x52\x00\x00\x00\x00\x00\x47\x00\xfe\xff\x00\x00\xe7\x00\x00\x00\x10\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xfa\xff\x00\x00\xb6\xff\x00\x00\xfc\xff\x00\x00\x00\x00\xb6\xff\xb3\xff\xb6\xff\x9d\xff\x83\xff\x00\x00\x90\xff\x8f\xff\x8d\xff\x8c\xff\x00\x00\x87\xff\x00\x00\x00\x00\x6d\xff\x6b\xff\xb6\xff\x00\x00\x7f\xff\x7e\xff\x00\x00\x00\x00\x7d\xff\x7c\xff\x00\x00\x80\xff\x81\xff\x00\x00\x00\x00\x00\x00\xab\xff\x9e\xff\x82\xff\x00\x00\x9d\xff\x00\x00\x00\x00\x8d\xff\x00\x00\x68\xff\x78\xff\x00\x00\x00\x00\x77\xff\x9b\xff\x52\xff\x5d\xff\x00\x00\x89\xff\x61\xff\x5e\xff\x9a\xff\x00\x00\x00\x00\x75\xff\x00\x00\x00\x00\x00\x00\x56\xff\x00\x00\x00\x00\x57\xff\x00\x00\x00\x00\x73\xff\x00\x00\x00\x00\x6c\xff\x00\x00\x6e\xff\x93\xff\x8b\xff\x84\xff\x00\x00\x00\x00\x00\x00\xb5\xff\xb4\xff\xb6\xff\xb6\xff\xfa\xfe\xb6\xff\xf5\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xff\xf9\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\xd5\xff\xd4\xff\xd8\xff\xd7\xff\xd6\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\x96\xff\x9d\xff\x9c\xff\x53\xff\x48\xff\x01\xff\x00\x00\xb2\xff\x00\x00\xf9\xfe\xf8\xfe\x76\xff\x8e\xff\x00\x00\x91\xff\x97\xff\x87\xff\x00\x00\xb6\xff\x00\x00\x00\x00\x72\xff\x71\xff\x00\x00\x59\xff\x5a\xff\x92\xff\x58\xff\x00\x00\x5b\xff\x5c\xff\x60\xff\x62\xff\x8a\xff\x5f\xff\x6a\xff\x79\xff\x00\x00\x69\xff\x7b\xff\x00\x00\x00\x00\x00\x00\x63\xff\x64\xff\x66\xff\x67\xff\x86\xff\x51\xff\x00\x00\x74\xff\x00\x00\x00\x00\xb6\xff\x88\xff\x48\xff\x01\xff\x48\xff\xfd\xfe\x50\xff\x4e\xff\x4c\xff\x49\xff\x4a\xff\x00\x00\x00\x00\x00\x00\x48\xff\x00\x00\x53\xff\x00\x00\x53\xff\x00\x00\x96\xff\x95\xff\xed\xfe\x55\xff\xb6\xff\x54\xff\x48\xff\x4d\xff\xad\xff\x00\x00\x3d\xff\x4b\xff\x02\xff\x00\xff\xfc\xfe\x00\x00\xb6\xff\xaf\xff\x9d\xff\x33\xff\x18\xff\xd5\xfe\x2e\xff\x2c\xff\x2b\xff\x2a\xff\x29\xff\x2d\xff\x28\xff\x27\xff\x26\xff\x25\xff\x24\xff\x1e\xff\x23\xff\x21\xff\x22\xff\x20\xff\x1f\xff\xf6\xfe\xf4\xfe\xf3\xfe\xf1\xfe\xf2\xfe\xee\xfe\xf0\xfe\xef\xfe\xb6\xff\xb6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xff\x00\x00\x00\x00\x00\x00\xb6\xff\xb6\xff\xb6\xff\x00\x00\x37\xff\x00\x00\x6f\xff\x70\xff\x00\x00\x7a\xff\x65\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\xff\x00\x00\x00\x00\x0d\xff\x0e\xff\x0f\xff\x00\x00\xac\xff\x00\x00\x00\x00\x00\x00\x10\xff\x53\xff\x53\xff\x53\xff\x53\xff\x00\x00\x00\x00\x0b\xff\x0c\xff\x31\xff\x00\x00\x35\xff\x00\x00\x00\x00\x00\x00\xd9\xfe\xb0\xff\xb1\xff\xae\xff\x3f\xff\x3b\xff\x00\x00\x3c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x43\xff\x00\x00\xad\xff\x4f\xff\x00\x00\xd7\xfe\xf7\xfe\xb6\xff\x00\x00\x00\x00\xad\xff\x45\xff\x41\xff\x46\xff\x3e\xff\x47\xff\x00\x00\xd6\xfe\x1d\xff\x32\xff\x39\xff\x00\x00\x19\xff\x1a\xff\xb6\xff\x00\x00\xb6\xff\x53\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xff\x98\xff\x13\xff\x12\xff\x11\xff\x00\x00\x07\xff\x05\xff\x00\x00\x03\xff\x37\xff\x85\xff\x35\xff\x96\xff\x94\xff\x00\x00\x96\xff\x00\x00\xe6\xfe\x00\x00\x00\x00\x00\x00\xe7\xfe\xe8\xfe\x00\x00\x96\xff\x00\x00\x38\xff\x36\xff\x00\x00\x06\xff\x00\x00\x99\xff\x00\x00\xb6\xff\x00\x00\x00\x00\x00\x00\xb6\xff\x00\x00\x00\x00\x00\x00\xb6\xff\x00\x00\x30\xff\x34\xff\x3a\xff\x44\xff\x42\xff\x40\xff\x00\x00\xd8\xfe\xb6\xff\x00\x00\xb6\xff\xa9\xff\x00\x00\xe3\xfe\x00\x00\x48\xff\xfb\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xff\xa7\xff\xa3\xff\x00\x00\xe0\xfe\x00\x00\x00\x00\x0a\xff\x09\xff\x00\x00\xea\xfe\x00\x00\xeb\xfe\xec\xfe\xe9\xfe\x00\x00\x08\xff\xa5\xff\x00\x00\x00\x00\xa8\xff\x00\x00\x00\x00\xa4\xff\x00\x00\xe2\xfe\xb6\xff\xb6\xff\xb6\xff\xff\xfe\x48\xff\x00\x00\xaa\xff\x00\x00\xe5\xfe\x2f\xff\xe4\xfe\x1c\xff\xfe\xfe\x00\x00\xde\xfe\x17\xff\x16\xff\x00\x00\x15\xff\xe1\xfe\x1b\xff\x00\x00\xa1\xff\xa6\xff\x00\x00\x04\xff\xa2\xff\x9f\xff\xb6\xff\xb6\xff\x00\x00\x00\x00\xb6\xff\xa0\xff\x00\x00\xdd\xfe\xb6\xff\x00\x00\xdf\xfe\x14\xff\x00\x00\xb6\xff\xda\xfe\xb6\xff\xdc\xfe\x00\x00\xdb\xfe"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x03\x00\x03\x00\x09\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x05\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x04\x00\x05\x00\x2d\x00\x06\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x0a\x00\x30\x00\x03\x00\x03\x00\x00\x00\x0a\x00\x35\x00\x0c\x00\x06\x00\x0e\x00\x30\x00\x40\x00\x0a\x00\x0b\x00\x03\x00\x03\x00\x0a\x00\x37\x00\x03\x00\x03\x00\x0a\x00\x0f\x00\x0c\x00\x37\x00\x0e\x00\x39\x00\x40\x00\x0f\x00\x0f\x00\x40\x00\x41\x00\x0a\x00\x0a\x00\x0a\x00\x1c\x00\x0a\x00\x0f\x00\x0f\x00\x54\x00\x0a\x00\x0b\x00\x57\x00\x11\x00\x12\x00\x5a\x00\x37\x00\x38\x00\x39\x00\x06\x00\x1c\x00\x1c\x00\x06\x00\x1d\x00\x1e\x00\x1f\x00\x0a\x00\x0a\x00\x0b\x00\x3c\x00\x30\x00\x0f\x00\x42\x00\x40\x00\x0a\x00\x3c\x00\x3d\x00\x59\x00\x41\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x06\x00\x59\x00\x42\x00\x40\x00\x67\x00\x6e\x00\x6e\x00\x6b\x00\x6e\x00\x6e\x00\x6c\x00\x6d\x00\x6c\x00\x6d\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x66\x00\x66\x00\x69\x00\x67\x00\x6a\x00\x6a\x00\x68\x00\x66\x00\x66\x00\x3a\x00\x59\x00\x59\x00\x55\x00\x55\x00\x3f\x00\x40\x00\x50\x00\x41\x00\x43\x00\x53\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x0a\x00\x0b\x00\x0a\x00\x0a\x00\x54\x00\x06\x00\x56\x00\x57\x00\x58\x00\x0a\x00\x0a\x00\x5b\x00\x53\x00\x5d\x00\x0f\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0a\x00\x0b\x00\x0c\x00\x31\x00\x0e\x00\x0a\x00\x2f\x00\x08\x00\x09\x00\x37\x00\x0a\x00\x39\x00\x0a\x00\x0b\x00\x0f\x00\x0f\x00\x31\x00\x3a\x00\x40\x00\x37\x00\x37\x00\x39\x00\x39\x00\x37\x00\x09\x00\x1e\x00\x1f\x00\x41\x00\x1c\x00\x3a\x00\x0f\x00\x40\x00\x40\x00\x2f\x00\x3f\x00\x40\x00\x53\x00\x08\x00\x43\x00\x35\x00\x45\x00\x46\x00\x08\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x0a\x00\x03\x00\x06\x00\x40\x00\x54\x00\x07\x00\x56\x00\x57\x00\x58\x00\x0a\x00\x3e\x00\x5b\x00\x03\x00\x5d\x00\x0f\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x0a\x00\x2d\x00\x34\x00\x35\x00\x36\x00\x0f\x00\x0a\x00\x0b\x00\x0c\x00\x13\x00\x0e\x00\x03\x00\x0a\x00\x39\x00\x0a\x00\x19\x00\x1a\x00\x31\x00\x1c\x00\x11\x00\x40\x00\x11\x00\x12\x00\x37\x00\x3a\x00\x39\x00\x24\x00\x39\x00\x26\x00\x3f\x00\x40\x00\x06\x00\x40\x00\x43\x00\x40\x00\x45\x00\x46\x00\x23\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x2c\x00\x2d\x00\x14\x00\x0a\x00\x54\x00\x0a\x00\x56\x00\x57\x00\x58\x00\x0a\x00\x11\x00\x5b\x00\x11\x00\x5d\x00\x0f\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x23\x00\x0a\x00\x23\x00\x53\x00\x27\x00\x28\x00\x29\x00\x39\x00\x11\x00\x15\x00\x2d\x00\x2c\x00\x2d\x00\x31\x00\x40\x00\x0a\x00\x14\x00\x0a\x00\x03\x00\x37\x00\x0f\x00\x39\x00\x07\x00\x0a\x00\x11\x00\x0c\x00\x23\x00\x0e\x00\x40\x00\x3a\x00\x19\x00\x1a\x00\x29\x00\x1c\x00\x3f\x00\x40\x00\x2d\x00\x14\x00\x43\x00\x3c\x00\x45\x00\x46\x00\x23\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x2c\x00\x2d\x00\x33\x00\x3b\x00\x54\x00\x36\x00\x56\x00\x57\x00\x58\x00\x0a\x00\x0a\x00\x5b\x00\x0a\x00\x5d\x00\x0f\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x00\x00\x01\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\x08\x00\x09\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\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\x0a\x00\x1e\x00\x08\x00\x09\x00\x52\x00\x53\x00\x0a\x00\x11\x00\x12\x00\x0f\x00\x27\x00\x28\x00\x29\x00\x11\x00\x12\x00\x2c\x00\x2d\x00\x0a\x00\x0a\x00\x54\x00\x31\x00\x32\x00\x57\x00\x34\x00\x11\x00\x5a\x00\x37\x00\x5c\x00\x39\x00\x5e\x00\x0a\x00\x3c\x00\x0c\x00\x3e\x00\x0e\x00\x40\x00\x41\x00\x03\x00\x43\x00\x00\x00\x01\x00\x07\x00\x23\x00\x22\x00\x23\x00\x06\x00\x07\x00\x08\x00\x09\x00\x2a\x00\x2b\x00\x0a\x00\x2d\x00\x08\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x11\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0a\x00\x1e\x00\x0a\x00\x03\x00\x0a\x00\x0f\x00\x10\x00\x07\x00\x23\x00\x03\x00\x27\x00\x28\x00\x29\x00\x07\x00\x3c\x00\x2c\x00\x2d\x00\x2c\x00\x2d\x00\x0a\x00\x31\x00\x32\x00\x3e\x00\x34\x00\x0f\x00\x10\x00\x37\x00\x0a\x00\x39\x00\x3d\x00\x0a\x00\x3c\x00\x0c\x00\x3e\x00\x0e\x00\x40\x00\x41\x00\x15\x00\x43\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\x01\x00\x51\x00\x52\x00\x53\x00\x0a\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x10\x00\x0a\x00\x00\x00\x01\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x11\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0a\x00\x1e\x00\x15\x00\x03\x00\x15\x00\x0f\x00\x10\x00\x07\x00\x23\x00\x15\x00\x27\x00\x28\x00\x29\x00\x01\x00\x3b\x00\x2c\x00\x2d\x00\x2c\x00\x2d\x00\x0a\x00\x31\x00\x32\x00\x09\x00\x34\x00\x0a\x00\x0a\x00\x37\x00\x09\x00\x39\x00\x09\x00\x12\x00\x11\x00\x11\x00\x3e\x00\x0a\x00\x40\x00\x41\x00\x0a\x00\x43\x00\x1b\x00\x1c\x00\x1d\x00\x0f\x00\x2a\x00\x40\x00\x41\x00\x01\x00\x2e\x00\x0a\x00\x23\x00\x23\x00\x27\x00\x28\x00\x29\x00\x1b\x00\x1c\x00\x29\x00\x2d\x00\x2c\x00\x2d\x00\x2d\x00\x31\x00\x32\x00\x12\x00\x34\x00\x0a\x00\x0a\x00\x37\x00\x3d\x00\x39\x00\x3a\x00\x0a\x00\x1b\x00\x1c\x00\x1d\x00\x0a\x00\x40\x00\x41\x00\x11\x00\x43\x00\x0f\x00\x03\x00\x0a\x00\x06\x00\x27\x00\x28\x00\x29\x00\x01\x00\x14\x00\x11\x00\x2d\x00\x44\x00\x1b\x00\x1c\x00\x31\x00\x32\x00\x23\x00\x34\x00\x0a\x00\x33\x00\x37\x00\x38\x00\x39\x00\x14\x00\x12\x00\x2c\x00\x2d\x00\x23\x00\x0a\x00\x40\x00\x41\x00\x01\x00\x43\x00\x1b\x00\x1c\x00\x1d\x00\x2c\x00\x2d\x00\x0a\x00\x0a\x00\x01\x00\x0c\x00\x0d\x00\x0f\x00\x10\x00\x27\x00\x28\x00\x29\x00\x31\x00\x32\x00\x33\x00\x2d\x00\x0a\x00\x03\x00\x03\x00\x31\x00\x32\x00\x12\x00\x34\x00\x11\x00\x02\x00\x37\x00\x2a\x00\x39\x00\x3a\x00\x0a\x00\x1b\x00\x1c\x00\x1d\x00\x40\x00\x40\x00\x41\x00\x11\x00\x43\x00\x2a\x00\x01\x00\x3b\x00\x23\x00\x27\x00\x28\x00\x29\x00\x0a\x00\x0b\x00\x0c\x00\x2d\x00\x2b\x00\x3b\x00\x2d\x00\x31\x00\x32\x00\x23\x00\x34\x00\x12\x00\x38\x00\x37\x00\x38\x00\x39\x00\x40\x00\x2b\x00\x3a\x00\x2d\x00\x1b\x00\x1c\x00\x40\x00\x41\x00\x2a\x00\x43\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x27\x00\x28\x00\x29\x00\x01\x00\x40\x00\x0a\x00\x2d\x00\x0c\x00\x0d\x00\x3a\x00\x31\x00\x32\x00\x33\x00\x34\x00\x33\x00\x36\x00\x37\x00\x40\x00\x39\x00\x3f\x00\x12\x00\x40\x00\x2f\x00\x2a\x00\x03\x00\x40\x00\x41\x00\x03\x00\x43\x00\x1b\x00\x1c\x00\x1d\x00\x03\x00\x2f\x00\x40\x00\x2a\x00\x01\x00\x03\x00\x40\x00\x30\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x40\x00\x3f\x00\x04\x00\x2d\x00\x3f\x00\x42\x00\x3f\x00\x31\x00\x32\x00\x12\x00\x34\x00\x42\x00\x42\x00\x37\x00\x42\x00\x39\x00\x3f\x00\x36\x00\x1b\x00\x1c\x00\x3f\x00\x42\x00\x40\x00\x41\x00\x34\x00\x43\x00\x2a\x00\x01\x00\x2f\x00\x2f\x00\x27\x00\x28\x00\x29\x00\x2f\x00\x2a\x00\x40\x00\x2d\x00\x2a\x00\x0f\x00\x40\x00\x31\x00\x32\x00\x2a\x00\x34\x00\x12\x00\x0d\x00\x37\x00\x3b\x00\x39\x00\x3a\x00\x2e\x00\x40\x00\x38\x00\x1b\x00\x1c\x00\x40\x00\x41\x00\x38\x00\x43\x00\x38\x00\x01\x00\x40\x00\x2e\x00\x40\x00\x04\x00\x27\x00\x28\x00\x29\x00\x3b\x00\x3b\x00\x05\x00\x2d\x00\x42\x00\x42\x00\x3f\x00\x31\x00\x32\x00\x12\x00\x34\x00\x42\x00\x2a\x00\x37\x00\x38\x00\x39\x00\x36\x00\x40\x00\x1b\x00\x1c\x00\x1d\x00\x43\x00\x40\x00\x41\x00\x2a\x00\x43\x00\x2a\x00\x01\x00\x30\x00\x40\x00\x27\x00\x28\x00\x29\x00\x05\x00\x0f\x00\x2a\x00\x2d\x00\x2a\x00\x42\x00\x3f\x00\x31\x00\x32\x00\x03\x00\x34\x00\x12\x00\x0a\x00\x37\x00\x40\x00\x39\x00\x37\x00\x0f\x00\x37\x00\x0c\x00\x1b\x00\x1c\x00\x40\x00\x41\x00\x37\x00\x43\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x40\x00\x27\x00\x28\x00\x29\x00\x2e\x00\x3a\x00\x2e\x00\x2d\x00\x3a\x00\x30\x00\x2a\x00\x31\x00\x32\x00\x12\x00\x34\x00\x0a\x00\x1f\x00\x37\x00\x42\x00\x39\x00\x0f\x00\x36\x00\x1b\x00\x1c\x00\x13\x00\x2a\x00\x40\x00\x41\x00\x02\x00\x43\x00\x19\x00\x1a\x00\x3b\x00\x1c\x00\x40\x00\x28\x00\x29\x00\x33\x00\x02\x00\x33\x00\x2d\x00\x24\x00\x2e\x00\x26\x00\x31\x00\x32\x00\x38\x00\x38\x00\x2f\x00\x2f\x00\x37\x00\x3a\x00\x39\x00\x2a\x00\x33\x00\x3a\x00\x0a\x00\x44\x00\x40\x00\x40\x00\x41\x00\x0f\x00\x43\x00\x39\x00\x2a\x00\x13\x00\x44\x00\x35\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x44\x00\x2a\x00\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x0a\x00\x26\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x0a\x00\x26\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x19\x00\x1a\x00\xff\xff\x1c\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\x24\x00\xff\xff\x26\x00\x19\x00\x1a\x00\xff\xff\x1c\x00\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x24\x00\x0a\x00\x26\x00\x13\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\x19\x00\x1a\x00\xff\xff\x1c\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x24\x00\xff\xff\x26\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xd6\x00\xf7\x01\xa9\x00\xaf\x01\xd6\x00\xe9\x01\xf6\x01\x61\x01\x05\x00\x61\x01\xa9\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x05\x00\x06\x00\x07\x00\xd2\x01\x06\x02\x9e\x01\xe5\x01\xe5\x01\xa6\x01\x53\x01\x41\x01\x55\x01\xcc\x00\x48\x01\x48\x01\x53\x01\xbf\x01\x53\x00\xc0\x01\xfe\x01\xc1\x01\x9d\x01\x26\x00\xb4\x01\xb5\x01\xa4\x01\x76\x01\x0a\x00\x86\x01\xaa\x00\xaa\x00\xbf\x01\x0b\x00\xc0\x01\x46\x00\xc1\x01\x4c\x00\x87\x01\x77\x01\x5a\x01\x26\x00\x27\x00\x0a\x00\x0a\x00\xb5\x00\xad\x00\x33\x00\x0b\x00\x0b\x00\x55\x00\xb4\x01\xed\x01\x56\x00\x7e\x01\x9d\x01\x57\x00\x56\x01\x57\x01\x58\x01\x04\x02\xda\x00\xda\x00\xfb\x01\xb6\x00\xb7\x00\xb8\x00\xfd\x00\xb4\x01\xb5\x01\x54\x01\xa5\x01\x0b\x00\xeb\x01\x26\x00\xff\x01\x54\x01\x55\x01\x08\x00\xb6\x01\xfe\x00\x0e\x00\x0f\x00\x10\x00\xaf\x00\x12\x00\x02\x02\x08\x00\xc2\x01\x26\x00\xa7\x01\x03\x02\xf8\x01\xea\x01\xd7\x00\xd7\x00\x62\x01\xb9\x01\x62\x01\x63\x01\xe1\x01\xa9\x01\x3a\x01\x3b\x01\x3c\x01\x49\x00\xe6\x01\xe6\x01\x9f\x01\xa7\x01\xe7\x01\xe8\x01\x42\x01\x49\x01\x4a\x01\xff\x00\xab\x00\xac\x00\xf8\x00\xdb\x00\x00\x01\x01\x01\xc5\x01\xe2\x01\x02\x01\xc6\x01\x03\x01\x04\x01\xfc\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\xb4\x01\xb5\x01\x55\x01\x55\x01\x0d\x01\xb0\x01\x0e\x01\x0f\x01\x10\x01\xfd\x00\xd2\x01\x11\x01\xf0\x01\x12\x01\x0b\x00\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\xfe\x00\x0e\x00\x0f\x00\x10\x00\xaf\x00\x12\x00\xe3\x00\xe4\x00\xe5\x00\x3b\x00\xe6\x00\xb5\x00\xcb\x00\x5b\x00\x5c\x00\x46\x00\x0a\x00\x47\x00\xb4\x01\xde\x01\x5d\x00\x0b\x00\x3b\x00\xd3\x00\x26\x00\x56\x01\x56\x01\xab\x01\x5a\x01\x86\x01\xa9\x00\x2c\x01\xb8\x00\xb6\x01\x3d\x00\xff\x00\x48\x01\x26\x00\x87\x01\x50\x01\x00\x01\x01\x01\xce\x01\x5b\x01\x02\x01\x53\x00\x03\x01\x04\x01\x5b\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\xd2\x01\x05\x02\xd7\x01\xe7\x00\x0d\x01\xfb\x00\x0e\x01\x0f\x01\x10\x01\xfd\x00\x5e\x00\x11\x01\xd6\x01\x12\x01\x0b\x00\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\xfe\x00\x0e\x00\x0f\x00\x10\x00\xaf\x00\x12\x00\x26\x00\x27\x00\xac\x01\x5d\x01\x5e\x01\x0a\x00\xc4\x01\x5c\x01\x5d\x01\x5e\x01\x0b\x00\xe3\x00\xe4\x00\xe5\x00\x2a\x00\xe6\x00\xdf\x01\x33\x00\xc5\x01\x33\x00\xb1\x00\x10\x00\x3b\x00\xb2\x00\x34\x00\x26\x00\x7e\x01\x7f\x01\x3c\x00\xff\x00\x3d\x00\x2d\x00\xd4\x01\x2e\x00\x6e\x01\x01\x01\xe0\x01\x26\x00\x02\x01\x26\x00\x03\x01\x04\x01\xe7\x00\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\xa5\x01\xe9\x00\xc9\x01\x33\x00\x0d\x01\x33\x00\x0e\x01\x0f\x01\x10\x01\xfd\x00\x34\x00\x11\x01\x34\x00\x12\x01\x0b\x00\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\xfe\x00\x0e\x00\x0f\x00\x10\x00\xaf\x00\x12\x00\x35\x00\x33\x00\xe7\x00\xc7\x01\x36\x00\x37\x00\x38\x00\x48\x00\x34\x00\x92\x01\x39\x00\x79\x01\xe9\x00\x3b\x00\x26\x00\x0a\x00\x95\x01\x33\x00\x00\x02\x46\x00\x0b\x00\x47\x00\x01\x02\xbf\x01\x34\x00\xc0\x01\x35\x00\xf9\x01\x26\x00\xff\x00\x4e\x00\x10\x00\xc1\x00\xb2\x00\x00\x01\x01\x01\x39\x00\x97\x01\x02\x01\x98\x01\x03\x01\x04\x01\xe7\x00\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x7a\x01\xe9\x00\x51\x00\x99\x01\x0d\x01\x52\x00\x0e\x01\x0f\x01\x10\x01\x0a\x00\xa8\x01\x11\x01\xad\x01\x12\x01\x0b\x00\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\x53\x01\x18\x00\x4e\x00\x10\x00\x4f\x00\x12\x00\x1b\x01\x1c\x01\x1d\x01\x5c\x00\xe4\x01\xde\x00\xdf\x00\xe0\x00\xe1\x00\x1e\x01\x1f\x01\x20\x01\x21\x01\xfe\x01\x22\x01\x23\x01\x24\x01\x25\x01\x26\x01\x27\x01\x28\x01\x1a\x00\x1b\x00\x33\x00\x29\x01\x5b\x00\x5c\x00\x9b\x01\x84\x01\x33\x00\x7e\x01\x80\x01\x5d\x00\x1d\x00\x1e\x00\x1f\x00\x7e\x01\x81\x01\x2a\x01\x20\x00\x33\x00\xae\x01\x55\x00\x21\x00\x22\x00\x56\x00\x23\x00\x34\x00\x57\x00\x3f\x00\x58\x00\x40\x00\x59\x00\xbf\x01\x54\x01\xc0\x01\x2b\x01\xf2\x01\x26\x00\x27\x00\xfa\x01\x28\x00\x53\x01\x18\x00\xfb\x00\x41\x00\x4a\x00\x16\x00\x1b\x01\x1c\x01\x1d\x01\x5c\x00\x42\x00\x43\x00\x33\x00\x44\x00\x65\x01\x1e\x01\x1f\x01\x20\x01\x21\x01\x34\x00\x22\x01\x23\x01\x24\x01\x25\x01\x26\x01\x27\x01\x28\x01\x1a\x00\x1b\x00\xa3\x00\x29\x01\x69\x01\xb2\x01\x6b\x01\xa4\x00\xa7\x00\xb3\x01\xe7\x00\xbd\x01\x1d\x00\x1e\x00\x1f\x00\xbe\x01\x71\x01\x2a\x01\x20\x00\x7b\x01\xe9\x00\xa3\x00\x21\x00\x22\x00\x74\x01\x23\x00\xa4\x00\xd9\x00\x3f\x00\x78\x01\x40\x00\x89\x01\xbf\x01\x54\x01\xc0\x01\x2b\x01\xd5\x01\x26\x00\x27\x00\x8a\x01\x28\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\x18\x00\x82\x01\x83\x01\x84\x01\xa3\x00\x1b\x01\x1c\x01\x1d\x01\x5c\x00\xa4\x00\xa5\x00\x33\x00\x28\x00\x04\x00\x1e\x01\x1f\x01\x20\x01\x21\x01\x34\x00\x22\x01\x23\x01\x24\x01\x25\x01\x26\x01\x27\x01\x28\x01\x1a\x00\x1b\x00\xa3\x00\x29\x01\x8c\x01\xfa\x00\x8d\x01\xa4\x00\xa6\x00\xfb\x00\xe7\x00\x8e\x01\x1d\x00\x1e\x00\x1f\x00\x18\x00\x37\x01\x2a\x01\x20\x00\x7c\x01\xe9\x00\x39\x01\x21\x00\x22\x00\x3d\x01\x23\x00\x33\x00\x33\x00\x3f\x00\x3f\x01\x40\x00\x40\x01\x19\x00\x34\x00\x34\x00\x2b\x01\x43\x01\x26\x00\x27\x00\x0a\x00\x28\x00\x1a\x00\x1b\x00\x1c\x00\x0b\x00\x0a\x00\x26\x00\x27\x00\x18\x00\xfd\x00\x44\x01\xe7\x00\x35\x00\x1d\x00\x1e\x00\x1f\x00\x4f\x00\x88\x01\xc4\x00\x20\x00\xee\x00\xe9\x00\x39\x00\x21\x00\x22\x00\x19\x00\x23\x00\x45\x01\x46\x01\x24\x00\x4d\x01\x25\x00\x30\x00\x33\x00\x1a\x00\x1b\x00\x1c\x00\x0a\x00\x26\x00\x27\x00\x34\x00\x28\x00\x0b\x00\x50\x01\x33\x00\x51\x01\x1d\x00\x1e\x00\x1f\x00\x18\x00\xec\x00\x34\x00\x20\x00\x4b\x01\x87\x01\x88\x01\x21\x00\x22\x00\xe7\x00\x23\x00\xf1\x00\xf6\x00\x24\x00\x33\x00\x25\x00\xea\x00\x19\x00\xf0\x00\xe9\x00\xe7\x00\x40\x00\x26\x00\x27\x00\x04\x00\x28\x00\x1a\x00\x1b\x00\x1c\x00\xe8\x00\xe9\x00\xa3\x00\xbf\x01\x18\x00\xcf\x01\xef\x01\xa4\x00\xa7\x00\x1d\x00\x1e\x00\x1f\x00\xf2\x00\xe0\x00\xe1\x00\x20\x00\x33\x00\x53\x00\x54\x00\x21\x00\x22\x00\x19\x00\x23\x00\x34\x00\x5e\x00\x24\x00\x0a\x00\x25\x00\x30\x00\x33\x00\x1a\x00\x1b\x00\x1c\x00\x26\x00\x26\x00\x27\x00\x34\x00\x28\x00\x0a\x00\x18\x00\xf5\x01\x41\x00\x1d\x00\x1e\x00\x1f\x00\xe3\x00\xe4\x00\xe5\x00\x20\x00\xba\x00\xf6\x01\x44\x00\x21\x00\x22\x00\x41\x00\x23\x00\x19\x00\xf2\x01\x24\x00\x33\x00\x25\x00\x26\x00\xbd\x00\xf4\x01\x44\x00\x1a\x00\x1b\x00\x26\x00\x27\x00\x0a\x00\x28\x00\xf9\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\x1d\x00\x1e\x00\x1f\x00\x18\x00\x26\x00\xbf\x01\x20\x00\xcf\x01\xd0\x01\xef\x01\x21\x00\x22\x00\x85\xff\x23\x00\xce\x01\x85\xff\x3f\x00\x87\x01\x40\x00\xcd\x01\x19\x00\x87\x01\xd5\x01\x0a\x00\xd9\x01\x26\x00\x27\x00\xda\x01\x28\x00\x1a\x00\x1b\x00\x1c\x00\xdb\x01\xde\x01\x26\x00\x0a\x00\x18\x00\xb2\x01\x26\x00\xb8\x01\x0a\x00\x1d\x00\x1e\x00\x1f\x00\x87\x01\xc9\x01\x73\x01\x20\x00\xcb\x01\xec\x00\xcc\x01\x21\x00\x22\x00\x19\x00\x23\x00\x8c\x01\xec\x00\x24\x00\x97\x01\x25\x00\x94\x01\x39\x01\x1a\x00\x1b\x00\x95\x01\xec\x00\x26\x00\x27\x00\x9b\x01\x28\x00\x0a\x00\x18\x00\xa1\x01\xa2\x01\x1d\x00\x1e\x00\x1f\x00\xa3\x01\x0a\x00\x26\x00\x20\x00\x0a\x00\x60\x01\x26\x00\x21\x00\x22\x00\x0a\x00\x23\x00\x19\x00\x67\x01\x3f\x00\x65\x01\x40\x00\xc0\x00\x68\x01\x26\x00\x69\x01\x1a\x00\x1b\x00\x26\x00\x27\x00\x6b\x01\x28\x00\x6d\x01\x18\x00\x26\x00\x6e\x01\x26\x00\x73\x01\x1d\x00\x1e\x00\x1f\x00\x78\x01\x7e\x01\x4f\x01\x20\x00\x8c\x01\x91\x01\x90\x01\x21\x00\x22\x00\x19\x00\x23\x00\x92\x01\x0a\x00\x3f\x00\xc1\x00\x40\x00\x39\x01\x26\x00\x1a\x00\x1b\x00\x1c\x00\x3f\x01\x26\x00\x27\x00\x0a\x00\x28\x00\x0a\x00\x18\x00\x4d\x01\x26\x00\x1d\x00\x1e\x00\x1f\x00\x4f\x01\x60\x01\x0a\x00\x20\x00\x0a\x00\xec\x00\xee\x00\x21\x00\x22\x00\xf0\x00\x23\x00\x19\x00\x0a\x00\x24\x00\x26\x00\x25\x00\xf4\x00\x0b\x00\xf5\x00\xe5\x00\x1a\x00\x1b\x00\x26\x00\x27\x00\xf6\x00\x28\x00\xae\x00\x0f\x00\x10\x00\xaf\x00\x12\x00\x26\x00\x1d\x00\x1e\x00\x1f\x00\x2e\x01\x2f\x01\xd4\x00\x20\x00\xd5\x00\xd6\x00\x0a\x00\x21\x00\x22\x00\x19\x00\x23\x00\x0a\x00\xa3\x00\x3f\x00\xec\x00\x40\x00\x0b\x00\x52\x00\x1a\x00\x1b\x00\xb9\x00\x0a\x00\x26\x00\x27\x00\xb4\x00\x28\x00\xb1\x00\x10\x00\xb5\x00\xb2\x00\x26\x00\x1e\x00\x1f\x00\xbc\x00\xbf\x00\xc3\x00\x20\x00\x2d\x00\xc8\x00\x2e\x00\x21\x00\x22\x00\xc6\x00\xc7\x00\x97\xff\xcb\x00\x3f\x00\xc9\x00\x40\x00\x0a\x00\x4d\x00\xca\x00\x0a\x00\xff\xff\x26\x00\x26\x00\x27\x00\x0b\x00\x28\x00\x48\x00\x0a\x00\x2a\x00\xff\xff\x53\x00\xce\x00\x0d\x00\x0e\x00\x2c\x00\x10\x00\x11\x00\x12\x00\xff\xff\x0a\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\xcf\x00\x2f\x01\x2e\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x00\x00\xce\x00\x0d\x00\x0e\x00\x2c\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\xcf\x00\xd0\x00\x2e\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x2b\x00\x0d\x00\x0e\x00\x2c\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2d\x00\x0a\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x30\x00\x0d\x00\x0e\x00\x2c\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x31\x00\x0a\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\xb1\x00\x10\x00\x00\x00\xb2\x00\x0b\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x31\x00\x00\x00\x2e\x00\xb1\x00\x10\x00\x00\x00\xb2\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x2d\x00\x0a\x00\x2e\x00\x2a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\xb1\x00\x10\x00\x00\x00\xb2\x00\xe3\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x31\x00\x00\x00\x2e\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xec\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\xdb\x01\xde\x00\xdf\x00\xe0\x00\xe1\x00\x00\x00\xdc\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x60\x01\xde\x00\xdf\x00\xe0\x00\xe1\x00\x00\x00\xb8\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\xf7\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\x00\x00\xba\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x29\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x31\x01\x32\x01\x33\x01\x34\x01\x35\x01\x36\x01\x37\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"#++happyReduceArr = array (3, 298) [+	(3 , happyReduce_3),+	(4 , happyReduce_4),+	(5 , happyReduce_5),+	(6 , happyReduce_6),+	(7 , happyReduce_7),+	(8 , happyReduce_8),+	(9 , happyReduce_9),+	(10 , happyReduce_10),+	(11 , happyReduce_11),+	(12 , happyReduce_12),+	(13 , happyReduce_13),+	(14 , happyReduce_14),+	(15 , happyReduce_15),+	(16 , happyReduce_16),+	(17 , happyReduce_17),+	(18 , happyReduce_18),+	(19 , happyReduce_19),+	(20 , happyReduce_20),+	(21 , happyReduce_21),+	(22 , happyReduce_22),+	(23 , happyReduce_23),+	(24 , happyReduce_24),+	(25 , happyReduce_25),+	(26 , happyReduce_26),+	(27 , happyReduce_27),+	(28 , happyReduce_28),+	(29 , happyReduce_29),+	(30 , happyReduce_30),+	(31 , happyReduce_31),+	(32 , happyReduce_32),+	(33 , happyReduce_33),+	(34 , happyReduce_34),+	(35 , happyReduce_35),+	(36 , happyReduce_36),+	(37 , happyReduce_37),+	(38 , happyReduce_38),+	(39 , happyReduce_39),+	(40 , happyReduce_40),+	(41 , happyReduce_41),+	(42 , happyReduce_42),+	(43 , happyReduce_43),+	(44 , happyReduce_44),+	(45 , happyReduce_45),+	(46 , happyReduce_46),+	(47 , happyReduce_47),+	(48 , happyReduce_48),+	(49 , happyReduce_49),+	(50 , happyReduce_50),+	(51 , happyReduce_51),+	(52 , happyReduce_52),+	(53 , happyReduce_53),+	(54 , happyReduce_54),+	(55 , happyReduce_55),+	(56 , happyReduce_56),+	(57 , happyReduce_57),+	(58 , happyReduce_58),+	(59 , happyReduce_59),+	(60 , happyReduce_60),+	(61 , happyReduce_61),+	(62 , happyReduce_62),+	(63 , happyReduce_63),+	(64 , happyReduce_64),+	(65 , happyReduce_65),+	(66 , happyReduce_66),+	(67 , happyReduce_67),+	(68 , happyReduce_68),+	(69 , happyReduce_69),+	(70 , happyReduce_70),+	(71 , happyReduce_71),+	(72 , happyReduce_72),+	(73 , happyReduce_73),+	(74 , happyReduce_74),+	(75 , happyReduce_75),+	(76 , happyReduce_76),+	(77 , happyReduce_77),+	(78 , happyReduce_78),+	(79 , happyReduce_79),+	(80 , happyReduce_80),+	(81 , happyReduce_81),+	(82 , happyReduce_82),+	(83 , happyReduce_83),+	(84 , happyReduce_84),+	(85 , happyReduce_85),+	(86 , happyReduce_86),+	(87 , happyReduce_87),+	(88 , happyReduce_88),+	(89 , happyReduce_89),+	(90 , happyReduce_90),+	(91 , happyReduce_91),+	(92 , happyReduce_92),+	(93 , happyReduce_93),+	(94 , happyReduce_94),+	(95 , happyReduce_95),+	(96 , happyReduce_96),+	(97 , happyReduce_97),+	(98 , happyReduce_98),+	(99 , happyReduce_99),+	(100 , happyReduce_100),+	(101 , happyReduce_101),+	(102 , happyReduce_102),+	(103 , happyReduce_103),+	(104 , happyReduce_104),+	(105 , happyReduce_105),+	(106 , happyReduce_106),+	(107 , happyReduce_107),+	(108 , happyReduce_108),+	(109 , happyReduce_109),+	(110 , happyReduce_110),+	(111 , happyReduce_111),+	(112 , happyReduce_112),+	(113 , happyReduce_113),+	(114 , happyReduce_114),+	(115 , happyReduce_115),+	(116 , happyReduce_116),+	(117 , happyReduce_117),+	(118 , happyReduce_118),+	(119 , happyReduce_119),+	(120 , happyReduce_120),+	(121 , happyReduce_121),+	(122 , happyReduce_122),+	(123 , happyReduce_123),+	(124 , happyReduce_124),+	(125 , happyReduce_125),+	(126 , happyReduce_126),+	(127 , happyReduce_127),+	(128 , happyReduce_128),+	(129 , happyReduce_129),+	(130 , happyReduce_130),+	(131 , happyReduce_131),+	(132 , happyReduce_132),+	(133 , happyReduce_133),+	(134 , happyReduce_134),+	(135 , happyReduce_135),+	(136 , happyReduce_136),+	(137 , happyReduce_137),+	(138 , happyReduce_138),+	(139 , happyReduce_139),+	(140 , happyReduce_140),+	(141 , happyReduce_141),+	(142 , happyReduce_142),+	(143 , happyReduce_143),+	(144 , happyReduce_144),+	(145 , happyReduce_145),+	(146 , happyReduce_146),+	(147 , happyReduce_147),+	(148 , happyReduce_148),+	(149 , happyReduce_149),+	(150 , happyReduce_150),+	(151 , happyReduce_151),+	(152 , happyReduce_152),+	(153 , happyReduce_153),+	(154 , happyReduce_154),+	(155 , happyReduce_155),+	(156 , happyReduce_156),+	(157 , happyReduce_157),+	(158 , happyReduce_158),+	(159 , happyReduce_159),+	(160 , happyReduce_160),+	(161 , happyReduce_161),+	(162 , happyReduce_162),+	(163 , happyReduce_163),+	(164 , happyReduce_164),+	(165 , happyReduce_165),+	(166 , happyReduce_166),+	(167 , happyReduce_167),+	(168 , happyReduce_168),+	(169 , happyReduce_169),+	(170 , happyReduce_170),+	(171 , happyReduce_171),+	(172 , happyReduce_172),+	(173 , happyReduce_173),+	(174 , happyReduce_174),+	(175 , happyReduce_175),+	(176 , happyReduce_176),+	(177 , happyReduce_177),+	(178 , happyReduce_178),+	(179 , happyReduce_179),+	(180 , happyReduce_180),+	(181 , happyReduce_181),+	(182 , happyReduce_182),+	(183 , happyReduce_183),+	(184 , happyReduce_184),+	(185 , happyReduce_185),+	(186 , happyReduce_186),+	(187 , happyReduce_187),+	(188 , happyReduce_188),+	(189 , happyReduce_189),+	(190 , happyReduce_190),+	(191 , happyReduce_191),+	(192 , happyReduce_192),+	(193 , happyReduce_193),+	(194 , happyReduce_194),+	(195 , happyReduce_195),+	(196 , happyReduce_196),+	(197 , happyReduce_197),+	(198 , happyReduce_198),+	(199 , happyReduce_199),+	(200 , happyReduce_200),+	(201 , happyReduce_201),+	(202 , happyReduce_202),+	(203 , happyReduce_203),+	(204 , happyReduce_204),+	(205 , happyReduce_205),+	(206 , happyReduce_206),+	(207 , happyReduce_207),+	(208 , happyReduce_208),+	(209 , happyReduce_209),+	(210 , happyReduce_210),+	(211 , happyReduce_211),+	(212 , happyReduce_212),+	(213 , happyReduce_213),+	(214 , happyReduce_214),+	(215 , happyReduce_215),+	(216 , happyReduce_216),+	(217 , happyReduce_217),+	(218 , happyReduce_218),+	(219 , happyReduce_219),+	(220 , happyReduce_220),+	(221 , happyReduce_221),+	(222 , happyReduce_222),+	(223 , happyReduce_223),+	(224 , happyReduce_224),+	(225 , happyReduce_225),+	(226 , happyReduce_226),+	(227 , happyReduce_227),+	(228 , happyReduce_228),+	(229 , happyReduce_229),+	(230 , happyReduce_230),+	(231 , happyReduce_231),+	(232 , happyReduce_232),+	(233 , happyReduce_233),+	(234 , happyReduce_234),+	(235 , happyReduce_235),+	(236 , happyReduce_236),+	(237 , happyReduce_237),+	(238 , happyReduce_238),+	(239 , happyReduce_239),+	(240 , happyReduce_240),+	(241 , happyReduce_241),+	(242 , happyReduce_242),+	(243 , happyReduce_243),+	(244 , happyReduce_244),+	(245 , happyReduce_245),+	(246 , happyReduce_246),+	(247 , happyReduce_247),+	(248 , happyReduce_248),+	(249 , happyReduce_249),+	(250 , happyReduce_250),+	(251 , happyReduce_251),+	(252 , happyReduce_252),+	(253 , happyReduce_253),+	(254 , happyReduce_254),+	(255 , happyReduce_255),+	(256 , happyReduce_256),+	(257 , happyReduce_257),+	(258 , happyReduce_258),+	(259 , happyReduce_259),+	(260 , happyReduce_260),+	(261 , happyReduce_261),+	(262 , happyReduce_262),+	(263 , happyReduce_263),+	(264 , happyReduce_264),+	(265 , happyReduce_265),+	(266 , happyReduce_266),+	(267 , happyReduce_267),+	(268 , happyReduce_268),+	(269 , happyReduce_269),+	(270 , happyReduce_270),+	(271 , happyReduce_271),+	(272 , happyReduce_272),+	(273 , happyReduce_273),+	(274 , happyReduce_274),+	(275 , happyReduce_275),+	(276 , happyReduce_276),+	(277 , happyReduce_277),+	(278 , happyReduce_278),+	(279 , happyReduce_279),+	(280 , happyReduce_280),+	(281 , happyReduce_281),+	(282 , happyReduce_282),+	(283 , happyReduce_283),+	(284 , happyReduce_284),+	(285 , happyReduce_285),+	(286 , happyReduce_286),+	(287 , happyReduce_287),+	(288 , happyReduce_288),+	(289 , happyReduce_289),+	(290 , happyReduce_290),+	(291 , happyReduce_291),+	(292 , happyReduce_292),+	(293 , happyReduce_293),+	(294 , happyReduce_294),+	(295 , happyReduce_295),+	(296 , happyReduce_296),+	(297 , happyReduce_297),+	(298 , happyReduce_298)+	]++happy_n_terms = 69 :: Int+happy_n_nonterms = 111 :: Int++happyReduce_3 = happySpecReduce_1  0# happyReduction_3+happyReduction_3 happy_x_1+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> +	happyIn6+		 (reverse happy_var_1+	)}++happyReduce_4 = happySpecReduce_2  1# happyReduction_4+happyReduction_4 happy_x_2+	happy_x_1+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> +	case happyOut8 happy_x_2 of { happy_var_2 -> +	happyIn7+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_5 = happySpecReduce_0  1# happyReduction_5+happyReduction_5  =  happyIn7+		 ([]+	)++happyReduce_6 = happySpecReduce_1  2# happyReduction_6+happyReduction_6 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> +	happyIn8+		 (TokKeyword KwLet happy_var_1+	)}++happyReduce_7 = happySpecReduce_1  2# happyReduction_7+happyReduction_7 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> +	happyIn8+		 (TokKeyword KwIn happy_var_1+	)}++happyReduce_8 = happySpecReduce_1  2# happyReduction_8+happyReduction_8 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> +	happyIn8+		 (TokKeyword KwWhere happy_var_1+	)}++happyReduce_9 = happySpecReduce_1  2# happyReduction_9+happyReduction_9 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> +	happyIn8+		 (TokKeyword KwWith happy_var_1+	)}++happyReduce_10 = happySpecReduce_1  2# happyReduction_10+happyReduction_10 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> +	happyIn8+		 (TokKeyword KwRewrite happy_var_1+	)}++happyReduce_11 = happySpecReduce_1  2# happyReduction_11+happyReduction_11 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> +	happyIn8+		 (TokKeyword KwPostulate happy_var_1+	)}++happyReduce_12 = happySpecReduce_1  2# happyReduction_12+happyReduction_12 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> +	happyIn8+		 (TokKeyword KwPrimitive happy_var_1+	)}++happyReduce_13 = happySpecReduce_1  2# happyReduction_13+happyReduction_13 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> +	happyIn8+		 (TokKeyword KwOpen happy_var_1+	)}++happyReduce_14 = happySpecReduce_1  2# happyReduction_14+happyReduction_14 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> +	happyIn8+		 (TokKeyword KwImport happy_var_1+	)}++happyReduce_15 = happySpecReduce_1  2# happyReduction_15+happyReduction_15 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> +	happyIn8+		 (TokKeyword KwUsing happy_var_1+	)}++happyReduce_16 = happySpecReduce_1  2# happyReduction_16+happyReduction_16 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> +	happyIn8+		 (TokKeyword KwHiding happy_var_1+	)}++happyReduce_17 = happySpecReduce_1  2# happyReduction_17+happyReduction_17 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> +	happyIn8+		 (TokKeyword KwRenaming happy_var_1+	)}++happyReduce_18 = happySpecReduce_1  2# happyReduction_18+happyReduction_18 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> +	happyIn8+		 (TokKeyword KwTo happy_var_1+	)}++happyReduce_19 = happySpecReduce_1  2# happyReduction_19+happyReduction_19 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> +	happyIn8+		 (TokKeyword KwPublic happy_var_1+	)}++happyReduce_20 = happySpecReduce_1  2# happyReduction_20+happyReduction_20 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> +	happyIn8+		 (TokKeyword KwModule happy_var_1+	)}++happyReduce_21 = happySpecReduce_1  2# happyReduction_21+happyReduction_21 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> +	happyIn8+		 (TokKeyword KwData happy_var_1+	)}++happyReduce_22 = happySpecReduce_1  2# happyReduction_22+happyReduction_22 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> +	happyIn8+		 (TokKeyword KwCoData happy_var_1+	)}++happyReduce_23 = happySpecReduce_1  2# happyReduction_23+happyReduction_23 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> +	happyIn8+		 (TokKeyword KwRecord happy_var_1+	)}++happyReduce_24 = happySpecReduce_1  2# happyReduction_24+happyReduction_24 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> +	happyIn8+		 (TokKeyword KwConstructor happy_var_1+	)}++happyReduce_25 = happySpecReduce_1  2# happyReduction_25+happyReduction_25 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> +	happyIn8+		 (TokKeyword KwField happy_var_1+	)}++happyReduce_26 = happySpecReduce_1  2# happyReduction_26+happyReduction_26 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> +	happyIn8+		 (TokKeyword KwInfix happy_var_1+	)}++happyReduce_27 = happySpecReduce_1  2# happyReduction_27+happyReduction_27 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> +	happyIn8+		 (TokKeyword KwInfixL happy_var_1+	)}++happyReduce_28 = happySpecReduce_1  2# happyReduction_28+happyReduction_28 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> +	happyIn8+		 (TokKeyword KwInfixR happy_var_1+	)}++happyReduce_29 = happySpecReduce_1  2# happyReduction_29+happyReduction_29 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> +	happyIn8+		 (TokKeyword KwMutual happy_var_1+	)}++happyReduce_30 = happySpecReduce_1  2# happyReduction_30+happyReduction_30 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> +	happyIn8+		 (TokKeyword KwAbstract happy_var_1+	)}++happyReduce_31 = happySpecReduce_1  2# happyReduction_31+happyReduction_31 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> +	happyIn8+		 (TokKeyword KwPrivate happy_var_1+	)}++happyReduce_32 = happySpecReduce_1  2# happyReduction_32+happyReduction_32 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> +	happyIn8+		 (TokKeyword KwProp happy_var_1+	)}++happyReduce_33 = happySpecReduce_1  2# happyReduction_33+happyReduction_33 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> +	happyIn8+		 (TokKeyword KwSet happy_var_1+	)}++happyReduce_34 = happySpecReduce_1  2# happyReduction_34+happyReduction_34 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> +	happyIn8+		 (TokKeyword KwForall happy_var_1+	)}++happyReduce_35 = happySpecReduce_1  2# happyReduction_35+happyReduction_35 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSyntax happy_var_1) -> +	happyIn8+		 (TokKeyword KwSyntax happy_var_1+	)}++happyReduce_36 = happySpecReduce_1  2# happyReduction_36+happyReduction_36 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> +	happyIn8+		 (TokKeyword KwOPTIONS happy_var_1+	)}++happyReduce_37 = happySpecReduce_1  2# happyReduction_37+happyReduction_37 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> +	happyIn8+		 (TokKeyword KwBUILTIN happy_var_1+	)}++happyReduce_38 = happySpecReduce_1  2# happyReduction_38+happyReduction_38 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> +	happyIn8+		 (TokKeyword KwIMPORT happy_var_1+	)}++happyReduce_39 = happySpecReduce_1  2# happyReduction_39+happyReduction_39 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> +	happyIn8+		 (TokKeyword KwCOMPILED happy_var_1+	)}++happyReduce_40 = happySpecReduce_1  2# happyReduction_40+happyReduction_40 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> +	happyIn8+		 (TokKeyword KwCOMPILED_DATA happy_var_1+	)}++happyReduce_41 = happySpecReduce_1  2# happyReduction_41+happyReduction_41 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> +	happyIn8+		 (TokKeyword KwCOMPILED_TYPE happy_var_1+	)}++happyReduce_42 = happySpecReduce_1  2# happyReduction_42+happyReduction_42 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPOSSIBLE happy_var_1) -> +	happyIn8+		 (TokKeyword KwIMPOSSIBLE happy_var_1+	)}++happyReduce_43 = happySpecReduce_1  2# happyReduction_43+happyReduction_43 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwETA happy_var_1) -> +	happyIn8+		 (TokKeyword KwETA happy_var_1+	)}++happyReduce_44 = happySpecReduce_1  2# happyReduction_44+happyReduction_44 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> +	happyIn8+		 (TokKeyword KwQuoteGoal happy_var_1+	)}++happyReduce_45 = happySpecReduce_1  2# happyReduction_45+happyReduction_45 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> +	happyIn8+		 (TokKeyword KwQuote happy_var_1+	)}++happyReduce_46 = happySpecReduce_1  2# happyReduction_46+happyReduction_46 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> +	happyIn8+		 (TokSetN happy_var_1+	)}++happyReduce_47 = happySpecReduce_1  2# happyReduction_47+happyReduction_47 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> +	happyIn8+		 (TokTeX happy_var_1+	)}++happyReduce_48 = happySpecReduce_1  2# happyReduction_48+happyReduction_48 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> +	happyIn8+		 (TokComment happy_var_1+	)}++happyReduce_49 = happySpecReduce_1  2# happyReduction_49+happyReduction_49 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> +	happyIn8+		 (TokSymbol SymEllipsis happy_var_1+	)}++happyReduce_50 = happySpecReduce_1  2# happyReduction_50+happyReduction_50 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> +	happyIn8+		 (TokSymbol SymDot happy_var_1+	)}++happyReduce_51 = happySpecReduce_1  2# happyReduction_51+happyReduction_51 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> +	happyIn8+		 (TokSymbol SymSemi happy_var_1+	)}++happyReduce_52 = happySpecReduce_1  2# happyReduction_52+happyReduction_52 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> +	happyIn8+		 (TokSymbol SymColon happy_var_1+	)}++happyReduce_53 = happySpecReduce_1  2# happyReduction_53+happyReduction_53 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> +	happyIn8+		 (TokSymbol SymEqual happy_var_1+	)}++happyReduce_54 = happySpecReduce_1  2# happyReduction_54+happyReduction_54 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> +	happyIn8+		 (TokSymbol SymUnderscore happy_var_1+	)}++happyReduce_55 = happySpecReduce_1  2# happyReduction_55+happyReduction_55 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> +	happyIn8+		 (TokSymbol SymQuestionMark happy_var_1+	)}++happyReduce_56 = happySpecReduce_1  2# happyReduction_56+happyReduction_56 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> +	happyIn8+		 (TokSymbol SymArrow happy_var_1+	)}++happyReduce_57 = happySpecReduce_1  2# happyReduction_57+happyReduction_57 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> +	happyIn8+		 (TokSymbol SymLambda happy_var_1+	)}++happyReduce_58 = happySpecReduce_1  2# happyReduction_58+happyReduction_58 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> +	happyIn8+		 (TokSymbol SymAs happy_var_1+	)}++happyReduce_59 = happySpecReduce_1  2# happyReduction_59+happyReduction_59 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> +	happyIn8+		 (TokSymbol SymBar happy_var_1+	)}++happyReduce_60 = happySpecReduce_1  2# happyReduction_60+happyReduction_60 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> +	happyIn8+		 (TokSymbol SymOpenParen happy_var_1+	)}++happyReduce_61 = happySpecReduce_1  2# happyReduction_61+happyReduction_61 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> +	happyIn8+		 (TokSymbol SymCloseParen happy_var_1+	)}++happyReduce_62 = happySpecReduce_1  2# happyReduction_62+happyReduction_62 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymOpenBrace happy_var_1+	)}++happyReduce_63 = happySpecReduce_1  2# happyReduction_63+happyReduction_63 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymCloseBrace happy_var_1+	)}++happyReduce_64 = happySpecReduce_1  2# happyReduction_64+happyReduction_64 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymOpenVirtualBrace happy_var_1+	)}++happyReduce_65 = happySpecReduce_1  2# happyReduction_65+happyReduction_65 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymCloseVirtualBrace happy_var_1+	)}++happyReduce_66 = happySpecReduce_1  2# happyReduction_66+happyReduction_66 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> +	happyIn8+		 (TokSymbol SymVirtualSemi happy_var_1+	)}++happyReduce_67 = happySpecReduce_1  2# happyReduction_67+happyReduction_67 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	happyIn8+		 (TokSymbol SymOpenPragma happy_var_1+	)}++happyReduce_68 = happySpecReduce_1  2# happyReduction_68+happyReduction_68 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> +	happyIn8+		 (TokSymbol SymClosePragma happy_var_1+	)}++happyReduce_69 = happySpecReduce_1  2# happyReduction_69+happyReduction_69 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> +	happyIn8+		 (TokId happy_var_1+	)}++happyReduce_70 = happySpecReduce_1  2# happyReduction_70+happyReduction_70 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> +	happyIn8+		 (TokQId happy_var_1+	)}++happyReduce_71 = happySpecReduce_1  2# happyReduction_71+happyReduction_71 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> +	happyIn8+		 (TokString happy_var_1+	)}++happyReduce_72 = happySpecReduce_1  2# happyReduction_72+happyReduction_72 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> +	happyIn8+		 (TokLiteral happy_var_1+	)}++happyReduce_73 = happySpecReduce_0  3# happyReduction_73+happyReduction_73  =  happyIn9+		 (()+	)++happyReduce_74 = happySpecReduce_2  3# happyReduction_74+happyReduction_74 happy_x_2+	happy_x_1+	 =  happyIn9+		 (()+	)++happyReduce_75 = happySpecReduce_2  4# happyReduction_75+happyReduction_75 happy_x_2+	happy_x_1+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> +	happyIn10+		 (happy_var_1+	)}++happyReduce_76 = happySpecReduce_1  5# happyReduction_76+happyReduction_76 happy_x_1+	 =  case happyOut95 happy_x_1 of { happy_var_1 -> +	happyIn11+		 (([], happy_var_1)+	)}++happyReduce_77 = happySpecReduce_3  5# happyReduction_77+happyReduction_77 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut98 happy_x_2 of { happy_var_2 -> +	case happyOut11 happy_x_3 of { happy_var_3 -> +	happyIn11+		 (let (ps,m) = happy_var_3 in (happy_var_2 : ps, m)+	)}}++happyReduce_78 = happySpecReduce_1  6# happyReduction_78+happyReduction_78 happy_x_1+	 =  happyIn12+		 (()+	)++happyReduce_79 = happyMonadReduce 1# 6# happyReduction_79+happyReduction_79 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (( popContext)+	) (\r -> happyReturn (happyIn12 r))++happyReduce_80 = happySpecReduce_1  7# happyReduction_80+happyReduction_80 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> +	happyIn13+		 (happy_var_1+	)}++happyReduce_81 = happySpecReduce_2  7# happyReduction_81+happyReduction_81 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_2 of { (TokSymbol SymVirtualSemi happy_var_2) -> +	happyIn13+		 (happy_var_2+	)}++happyReduce_82 = happyMonadReduce 0# 8# happyReduction_82+happyReduction_82 (happyRest) tk+	 = happyThen (( pushLexState imp_dir)+	) (\r -> happyReturn (happyIn14 r))++happyReduce_83 = happyMonadReduce 1# 9# happyReduction_83+happyReduction_83 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> +	( case happy_var_1 of {+		     LitInt _ n	-> return $ fromIntegral n;+		     _		-> fail $ "Expected integer"+		   })}+	) (\r -> happyReturn (happyIn15 r))++happyReduce_84 = happyMonadReduce 1# 10# happyReduction_84+happyReduction_84 (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_85 = happySpecReduce_2  11# happyReduction_85+happyReduction_85 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_86 = happySpecReduce_1  11# happyReduction_86+happyReduction_86 happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	happyIn17+		 ([happy_var_1]+	)}++happyReduce_87 = happySpecReduce_2  12# happyReduction_87+happyReduction_87 happy_x_2+	happy_x_1+	 =  case happyOut16 happy_x_2 of { happy_var_2 -> +	happyIn18+		 (Arg NotHidden Irrelevant happy_var_2+	)}++happyReduce_88 = happySpecReduce_1  12# happyReduction_88+happyReduction_88 happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	happyIn18+		 (defaultArg happy_var_1+	)}++happyReduce_89 = happySpecReduce_2  13# happyReduction_89+happyReduction_89 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_90 = happySpecReduce_1  13# happyReduction_90+happyReduction_90 happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	happyIn19+		 ([happy_var_1]+	)}++happyReduce_91 = happySpecReduce_2  14# happyReduction_91+happyReduction_91 happy_x_2+	happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	case happyOut20 happy_x_2 of { happy_var_2 -> +	happyIn20+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_92 = happySpecReduce_1  14# happyReduction_92+happyReduction_92 happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	happyIn20+		 ([happy_var_1]+	)}++happyReduce_93 = happyReduce 4# 14# happyReduction_93+happyReduction_93 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut19 happy_x_2 of { happy_var_2 -> +	case happyOut20 happy_x_4 of { happy_var_4 -> +	happyIn20+		 (map hide happy_var_2 ++ happy_var_4+	) `HappyStk` happyRest}}++happyReduce_94 = happySpecReduce_3  14# happyReduction_94+happyReduction_94 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut19 happy_x_2 of { happy_var_2 -> +	happyIn20+		 (map hide happy_var_2+	)}++happyReduce_95 = happyReduce 5# 14# happyReduction_95+happyReduction_95 (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 happyOut20 happy_x_5 of { happy_var_5 -> +	happyIn20+		 (map (Arg Hidden Irrelevant) happy_var_3 ++ happy_var_5+	) `HappyStk` happyRest}}++happyReduce_96 = happyReduce 4# 14# happyReduction_96+happyReduction_96 (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 -> +	happyIn20+		 (map (Arg Hidden Irrelevant) happy_var_3+	) `HappyStk` happyRest}++happyReduce_97 = happyMonadReduce 1# 15# happyReduction_97+happyReduction_97 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> +	( mkQName happy_var_1)}+	) (\r -> happyReturn (happyIn21 r))++happyReduce_98 = happySpecReduce_1  15# happyReduction_98+happyReduction_98 happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	happyIn21+		 (QName happy_var_1+	)}++happyReduce_99 = happySpecReduce_1  16# happyReduction_99+happyReduction_99 happy_x_1+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> +	happyIn22+		 (happy_var_1+	)}++happyReduce_100 = happySpecReduce_1  17# happyReduction_100+happyReduction_100 happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	happyIn23+		 (happy_var_1+	)}++happyReduce_101 = happySpecReduce_1  17# happyReduction_101+happyReduction_101 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> +	happyIn23+		 (Name (getRange happy_var_1) [Hole]+	)}++happyReduce_102 = happySpecReduce_2  18# happyReduction_102+happyReduction_102 happy_x_2+	happy_x_1+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> +	case happyOut24 happy_x_2 of { happy_var_2 -> +	happyIn24+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_103 = happySpecReduce_1  18# happyReduction_103+happyReduction_103 happy_x_1+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> +	happyIn24+		 ([happy_var_1]+	)}++happyReduce_104 = happyMonadReduce 1# 19# happyReduction_104+happyReduction_104 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut31 happy_x_1 of { happy_var_1 -> +	(+    let getName (Ident (QName x)) = Just x+	getName (Underscore r _)  = Just (Name r [Hole])+	getName _		  = Nothing+    in+    case partition isJust $ map getName happy_var_1 of+	(good, []) -> return $ map fromJust good+	_	   -> fail $ "expected sequence of bound identifiers")}+	) (\r -> happyReturn (happyIn25 r))++happyReduce_105 = happySpecReduce_0  20# happyReduction_105+happyReduction_105  =  happyIn26+		 ([]+	)++happyReduce_106 = happySpecReduce_2  20# happyReduction_106+happyReduction_106 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> +	case happyOut26 happy_x_2 of { happy_var_2 -> +	happyIn26+		 (snd happy_var_1 : happy_var_2+	)}}++happyReduce_107 = happyMonadReduce 1# 21# happyReduction_107+happyReduction_107 (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 (happyIn27 r))++happyReduce_108 = happySpecReduce_2  22# happyReduction_108+happyReduction_108 happy_x_2+	happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	case happyOut28 happy_x_2 of { happy_var_2 -> +	happyIn28+		 (Pi happy_var_1 happy_var_2+	)}}++happyReduce_109 = happySpecReduce_3  22# happyReduction_109+happyReduction_109 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut48 happy_x_2 of { happy_var_2 -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	happyIn28+		 (forallPi happy_var_2 happy_var_3+	)}}++happyReduce_110 = happySpecReduce_3  22# happyReduction_110+happyReduction_110 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	happyIn28+		 (Fun (fuseRange happy_var_1 happy_var_3) (RawApp (getRange happy_var_1) happy_var_1) happy_var_3+	)}}++happyReduce_111 = happySpecReduce_1  22# happyReduction_111+happyReduction_111 happy_x_1+	 =  case happyOut29 happy_x_1 of { happy_var_1 -> +	happyIn28+		 (happy_var_1+	)}++happyReduce_112 = happyMonadReduce 1# 23# happyReduction_112+happyReduction_112 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut30 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 (happyIn29 r))++happyReduce_113 = happySpecReduce_3  24# happyReduction_113+happyReduction_113 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut30 happy_x_3 of { happy_var_3 -> +	happyIn30+		 (RawApp (getRange happy_var_1) happy_var_1 :  happy_var_3+	)}}++happyReduce_114 = happySpecReduce_1  24# happyReduction_114+happyReduction_114 happy_x_1+	 =  case happyOut31 happy_x_1 of { happy_var_1 -> +	happyIn30+		 ([RawApp (getRange happy_var_1) happy_var_1]+	)}++happyReduce_115 = happySpecReduce_1  25# happyReduction_115+happyReduction_115 happy_x_1+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> +	happyIn31+		 ([happy_var_1]+	)}++happyReduce_116 = happySpecReduce_2  25# happyReduction_116+happyReduction_116 happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	case happyOut31 happy_x_2 of { happy_var_2 -> +	happyIn31+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_117 = happySpecReduce_3  26# happyReduction_117+happyReduction_117 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> +	case happyOut45 happy_x_2 of { happy_var_2 -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	happyIn32+		 (Lam (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3+	)}}}++happyReduce_118 = happySpecReduce_2  26# happyReduction_118+happyReduction_118 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> +	case happyOut46 happy_x_2 of { happy_var_2 -> +	happyIn32+		 (let (bs, h) = happy_var_2; r = fuseRange happy_var_1 bs in+                                     if null bs then AbsurdLam r h else+                                     Lam r bs (AbsurdLam r h)+	)}}++happyReduce_119 = happyReduce 4# 26# happyReduction_119+happyReduction_119 (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 happyOut114 happy_x_2 of { happy_var_2 -> +	case happyOut28 happy_x_4 of { happy_var_4 -> +	happyIn32+		 (Let (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_120 = happySpecReduce_1  26# happyReduction_120+happyReduction_120 happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	happyIn32+		 (happy_var_1+	)}++happyReduce_121 = happyReduce 4# 26# happyReduction_121+happyReduction_121 (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 happyOut28 happy_x_4 of { happy_var_4 -> +	happyIn32+		 (QuoteGoal (getRange (happy_var_1,happy_var_4)) happy_var_2 happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_122 = happySpecReduce_1  27# happyReduction_122+happyReduction_122 happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	happyIn33+		 ([happy_var_1]+	)}++happyReduce_123 = happySpecReduce_2  27# happyReduction_123+happyReduction_123 happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	case happyOut33 happy_x_2 of { happy_var_2 -> +	happyIn33+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_124 = happySpecReduce_1  28# happyReduction_124+happyReduction_124 happy_x_1+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> +	happyIn34+		 (Ident happy_var_1+	)}++happyReduce_125 = happySpecReduce_1  28# happyReduction_125+happyReduction_125 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> +	happyIn34+		 (Lit happy_var_1+	)}++happyReduce_126 = happySpecReduce_1  28# happyReduction_126+happyReduction_126 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> +	happyIn34+		 (QuestionMark (getRange happy_var_1) Nothing+	)}++happyReduce_127 = happySpecReduce_1  28# happyReduction_127+happyReduction_127 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> +	happyIn34+		 (Underscore (getRange happy_var_1) Nothing+	)}++happyReduce_128 = happySpecReduce_1  28# happyReduction_128+happyReduction_128 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> +	happyIn34+		 (Prop (getRange happy_var_1)+	)}++happyReduce_129 = happySpecReduce_1  28# happyReduction_129+happyReduction_129 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> +	happyIn34+		 (Set (getRange happy_var_1)+	)}++happyReduce_130 = happySpecReduce_1  28# happyReduction_130+happyReduction_130 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> +	happyIn34+		 (Quote (getRange happy_var_1)+	)}++happyReduce_131 = happySpecReduce_1  28# happyReduction_131+happyReduction_131 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> +	happyIn34+		 (SetN (getRange (fst happy_var_1)) (snd happy_var_1)+	)}++happyReduce_132 = happySpecReduce_3  28# happyReduction_132+happyReduction_132 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> +	case happyOut28 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> +	happyIn34+		 (HiddenArg (fuseRange happy_var_1 happy_var_3) (unnamed happy_var_2)+	)}}}++happyReduce_133 = happyReduce 5# 28# happyReduction_133+happyReduction_133 (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 SymOpenBrace happy_var_1) -> +	case happyOut16 happy_x_2 of { happy_var_2 -> +	case happyOut28 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> +	happyIn34+		 (HiddenArg (fuseRange happy_var_1 happy_var_5) (named (show happy_var_2) happy_var_4)+	) `HappyStk` happyRest}}}}++happyReduce_134 = happySpecReduce_3  28# happyReduction_134+happyReduction_134 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> +	case happyOut28 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> +	happyIn34+		 (Paren (fuseRange happy_var_1 happy_var_3) happy_var_2+	)}}}++happyReduce_135 = happySpecReduce_2  28# happyReduction_135+happyReduction_135 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) -> +	happyIn34+		 (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r+	)}}++happyReduce_136 = happySpecReduce_2  28# happyReduction_136+happyReduction_136 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) -> +	happyIn34+		 (Absurd (fuseRange happy_var_1 happy_var_2)+	)}}++happyReduce_137 = happySpecReduce_3  28# happyReduction_137+happyReduction_137 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	case happyOut34 happy_x_3 of { happy_var_3 -> +	happyIn34+		 (As (fuseRange happy_var_1 happy_var_3) happy_var_1 happy_var_3+	)}}++happyReduce_138 = happySpecReduce_2  28# happyReduction_138+happyReduction_138 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> +	case happyOut34 happy_x_2 of { happy_var_2 -> +	happyIn34+		 (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_139 = happyReduce 4# 28# happyReduction_139+happyReduction_139 (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 happyOut35 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> +	happyIn34+		 (Rec (getRange (happy_var_1,happy_var_4)) happy_var_3+	) `HappyStk` happyRest}}}++happyReduce_140 = happySpecReduce_0  29# happyReduction_140+happyReduction_140  =  happyIn35+		 ([]+	)++happyReduce_141 = happySpecReduce_1  29# happyReduction_141+happyReduction_141 happy_x_1+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> +	happyIn35+		 (happy_var_1+	)}++happyReduce_142 = happySpecReduce_1  30# happyReduction_142+happyReduction_142 happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	happyIn36+		 ([happy_var_1]+	)}++happyReduce_143 = happySpecReduce_3  30# happyReduction_143+happyReduction_143 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	case happyOut36 happy_x_3 of { happy_var_3 -> +	happyIn36+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_144 = happySpecReduce_3  31# happyReduction_144+happyReduction_144 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	happyIn37+		 ((happy_var_1, happy_var_3)+	)}}++happyReduce_145 = happySpecReduce_2  32# happyReduction_145+happyReduction_145 happy_x_2+	happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	happyIn38+		 (happy_var_1+	)}++happyReduce_146 = happySpecReduce_1  33# happyReduction_146+happyReduction_146 happy_x_1+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> +	happyIn39+		 ({-TeleBind-} happy_var_1+	)}++happyReduce_147 = happySpecReduce_2  34# happyReduction_147+happyReduction_147 happy_x_2+	happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	case happyOut40 happy_x_2 of { happy_var_2 -> +	happyIn40+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_148 = happySpecReduce_1  34# happyReduction_148+happyReduction_148 happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	happyIn40+		 ([happy_var_1]+	)}++happyReduce_149 = happySpecReduce_3  35# happyReduction_149+happyReduction_149 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> +	case happyOut42 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> +	happyIn41+		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg NotHidden Relevant happy_var_2)+	)}}}++happyReduce_150 = happySpecReduce_3  35# happyReduction_150+happyReduction_150 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> +	case happyOut42 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> +	happyIn41+		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Hidden    Relevant happy_var_2)+	)}}}++happyReduce_151 = happySpecReduce_1  36# happyReduction_151+happyReduction_151 happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	happyIn42+		 ([happy_var_1]+	)}++happyReduce_152 = happySpecReduce_3  36# happyReduction_152+happyReduction_152 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	case happyOut43 happy_x_3 of { happy_var_3 -> +	happyIn42+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_153 = happySpecReduce_1  37# happyReduction_153+happyReduction_153 happy_x_1+	 =  case happyOut42 happy_x_1 of { happy_var_1 -> +	happyIn43+		 (happy_var_1+	)}++happyReduce_154 = happySpecReduce_3  37# happyReduction_154+happyReduction_154 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_1 of { happy_var_1 -> +	case happyOut43 happy_x_3 of { happy_var_3 -> +	happyIn43+		 (TNoBind happy_var_1 : happy_var_3+	)}}++happyReduce_155 = happySpecReduce_1  37# happyReduction_155+happyReduction_155 happy_x_1+	 =  case happyOut28 happy_x_1 of { happy_var_1 -> +	happyIn43+		 ([TNoBind happy_var_1]+	)}++happyReduce_156 = happySpecReduce_3  38# happyReduction_156+happyReduction_156 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut25 happy_x_1 of { happy_var_1 -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	happyIn44+		 (TBind (fuseRange happy_var_1 happy_var_3) (map mkBoundName_ happy_var_1) happy_var_3+	)}}++happyReduce_157 = happyMonadReduce 2# 39# happyReduction_157+happyReduction_157 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut47 happy_x_1 of { happy_var_1 -> +	(+      case last happy_var_1 of+        Left _  -> parseError "Absurd lambda cannot have a body."+        _       -> return [ b | Right b <- happy_var_1 ])}+	) (\r -> happyReturn (happyIn45 r))++happyReduce_158 = happyMonadReduce 1# 40# happyReduction_158+happyReduction_158 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut47 happy_x_1 of { happy_var_1 -> +	(+    case last happy_var_1 of+      Right _ -> parseError "Missing body for lambda"+      Left h  -> return ([ b | Right b <- init happy_var_1], h))}+	) (\r -> happyReturn (happyIn46 r))++happyReduce_159 = happySpecReduce_2  41# happyReduction_159+happyReduction_159 happy_x_2+	happy_x_1+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> +	case happyOut47 happy_x_2 of { happy_var_2 -> +	happyIn47+		 (map Right happy_var_1 ++ happy_var_2+	)}}++happyReduce_160 = happySpecReduce_2  41# happyReduction_160+happyReduction_160 happy_x_2+	happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	case happyOut47 happy_x_2 of { happy_var_2 -> +	happyIn47+		 (Right (DomainFull happy_var_1) : happy_var_2+	)}}++happyReduce_161 = happySpecReduce_1  41# happyReduction_161+happyReduction_161 happy_x_1+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> +	happyIn47+		 (map Right happy_var_1+	)}++happyReduce_162 = happySpecReduce_1  41# happyReduction_162+happyReduction_162 happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	happyIn47+		 ([Right $ DomainFull happy_var_1]+	)}++happyReduce_163 = happySpecReduce_2  41# happyReduction_163+happyReduction_163 happy_x_2+	happy_x_1+	 =  happyIn47+		 ([Left NotHidden]+	)++happyReduce_164 = happySpecReduce_2  41# happyReduction_164+happyReduction_164 happy_x_2+	happy_x_1+	 =  happyIn47+		 ([Left Hidden]+	)++happyReduce_165 = happySpecReduce_2  42# happyReduction_165+happyReduction_165 happy_x_2+	happy_x_1+	 =  case happyOut49 happy_x_1 of { happy_var_1 -> +	happyIn48+		 (happy_var_1+	)}++happyReduce_166 = happySpecReduce_2  43# happyReduction_166+happyReduction_166 happy_x_2+	happy_x_1+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> +	case happyOut49 happy_x_2 of { happy_var_2 -> +	happyIn49+		 (happy_var_1 ++ happy_var_2+	)}}++happyReduce_167 = happySpecReduce_2  43# happyReduction_167+happyReduction_167 happy_x_2+	happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	case happyOut49 happy_x_2 of { happy_var_2 -> +	happyIn49+		 (DomainFull happy_var_1 : happy_var_2+	)}}++happyReduce_168 = happySpecReduce_1  43# happyReduction_168+happyReduction_168 happy_x_1+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> +	happyIn49+		 (happy_var_1+	)}++happyReduce_169 = happySpecReduce_1  43# happyReduction_169+happyReduction_169 happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	happyIn49+		 ([DomainFull happy_var_1]+	)}++happyReduce_170 = happySpecReduce_2  44# happyReduction_170+happyReduction_170 happy_x_2+	happy_x_1+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> +	case happyOut50 happy_x_2 of { happy_var_2 -> +	happyIn50+		 (happy_var_1 ++ happy_var_2+	)}}++happyReduce_171 = happySpecReduce_2  44# happyReduction_171+happyReduction_171 happy_x_2+	happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	case happyOut50 happy_x_2 of { happy_var_2 -> +	happyIn50+		 (DomainFull happy_var_1 : happy_var_2+	)}}++happyReduce_172 = happySpecReduce_0  44# happyReduction_172+happyReduction_172  =  happyIn50+		 ([]+	)++happyReduce_173 = happySpecReduce_1  45# happyReduction_173+happyReduction_173 happy_x_1+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> +	happyIn51+		 ([DomainFree NotHidden $ mkBoundName_ happy_var_1]+	)}++happyReduce_174 = happySpecReduce_3  45# happyReduction_174+happyReduction_174 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut25 happy_x_2 of { happy_var_2 -> +	happyIn51+		 (map (DomainFree Hidden . mkBoundName_) happy_var_2+	)}++happyReduce_175 = happySpecReduce_1  46# happyReduction_175+happyReduction_175 happy_x_1+	 =  case happyOut53 happy_x_1 of { happy_var_1 -> +	happyIn52+		 ((Nothing, happy_var_1)+	)}++happyReduce_176 = happyMonadReduce 3# 46# happyReduction_176+happyReduction_176 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> +	case happyOut16 happy_x_2 of { happy_var_2 -> +	case happyOut53 happy_x_3 of { happy_var_3 -> +	( isName "as" happy_var_1 >>+                               return (Just (AsName happy_var_2 (getRange (fst happy_var_1))), happy_var_3))}}}+	) (\r -> happyReturn (happyIn52 r))++happyReduce_177 = happyMonadReduce 1# 47# happyReduction_177+happyReduction_177 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut54 happy_x_1 of { happy_var_1 -> +	( verifyImportDirective happy_var_1)}+	) (\r -> happyReturn (happyIn53 r))++happyReduce_178 = happySpecReduce_2  48# happyReduction_178+happyReduction_178 happy_x_2+	happy_x_1+	 =  case happyOut55 happy_x_2 of { happy_var_2 -> +	happyIn54+		 (happy_var_2 { publicOpen = True }+	)}++happyReduce_179 = happySpecReduce_1  48# happyReduction_179+happyReduction_179 happy_x_1+	 =  case happyOut55 happy_x_1 of { happy_var_1 -> +	happyIn54+		 (happy_var_1+	)}++happyReduce_180 = happySpecReduce_2  49# happyReduction_180+happyReduction_180 happy_x_2+	happy_x_1+	 =  case happyOut56 happy_x_1 of { happy_var_1 -> +	case happyOut57 happy_x_2 of { happy_var_2 -> +	happyIn55+		 (ImportDirective (fuseRange (snd happy_var_1) (snd happy_var_2)) (fst happy_var_1) (fst happy_var_2) False+	)}}++happyReduce_181 = happySpecReduce_1  49# happyReduction_181+happyReduction_181 happy_x_1+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> +	happyIn55+		 (ImportDirective (getRange (snd happy_var_1)) (Hiding []) (fst happy_var_1) False+	)}++happyReduce_182 = happySpecReduce_1  49# happyReduction_182+happyReduction_182 happy_x_1+	 =  case happyOut56 happy_x_1 of { happy_var_1 -> +	happyIn55+		 (ImportDirective (getRange (snd happy_var_1)) (fst happy_var_1) [] False+	)}++happyReduce_183 = happySpecReduce_0  49# happyReduction_183+happyReduction_183  =  happyIn55+		 (ImportDirective noRange (Hiding []) [] False+	)++happyReduce_184 = happyReduce 4# 50# happyReduction_184+happyReduction_184 (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 happyOut62 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> +	happyIn56+		 ((Using happy_var_3 , fuseRange happy_var_1 happy_var_4)+	) `HappyStk` happyRest}}}++happyReduce_185 = happyReduce 4# 50# happyReduction_185+happyReduction_185 (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 happyOut63 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> +	happyIn56+		 ((Hiding happy_var_3 , fuseRange happy_var_1 happy_var_4)+	) `HappyStk` happyRest}}}++happyReduce_186 = happyReduce 4# 51# happyReduction_186+happyReduction_186 (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 happyOut58 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> +	happyIn57+		 ((happy_var_3 , fuseRange happy_var_1 happy_var_4)+	) `HappyStk` happyRest}}}++happyReduce_187 = happySpecReduce_3  52# happyReduction_187+happyReduction_187 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 -> +	happyIn58+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_188 = happySpecReduce_1  52# happyReduction_188+happyReduction_188 happy_x_1+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> +	happyIn58+		 ([happy_var_1]+	)}++happyReduce_189 = happySpecReduce_3  53# happyReduction_189+happyReduction_189 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut60 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 -> +	happyIn59+		 (Renaming happy_var_1 happy_var_3 (getRange happy_var_2)+	)}}}++happyReduce_190 = happySpecReduce_2  54# happyReduction_190+happyReduction_190 happy_x_2+	happy_x_1+	 =  case happyOut16 happy_x_2 of { happy_var_2 -> +	happyIn60+		 (ImportedName happy_var_2+	)}++happyReduce_191 = happySpecReduce_3  54# happyReduction_191+happyReduction_191 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut16 happy_x_3 of { happy_var_3 -> +	happyIn60+		 (ImportedModule happy_var_3+	)}++happyReduce_192 = happySpecReduce_1  55# happyReduction_192+happyReduction_192 happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	happyIn61+		 (ImportedName happy_var_1+	)}++happyReduce_193 = happySpecReduce_2  55# happyReduction_193+happyReduction_193 happy_x_2+	happy_x_1+	 =  case happyOut16 happy_x_2 of { happy_var_2 -> +	happyIn61+		 (ImportedModule happy_var_2+	)}++happyReduce_194 = happySpecReduce_0  56# happyReduction_194+happyReduction_194  =  happyIn62+		 ([]+	)++happyReduce_195 = happySpecReduce_1  56# happyReduction_195+happyReduction_195 happy_x_1+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> +	happyIn62+		 (happy_var_1+	)}++happyReduce_196 = happySpecReduce_1  57# happyReduction_196+happyReduction_196 happy_x_1+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> +	happyIn63+		 ([happy_var_1]+	)}++happyReduce_197 = happySpecReduce_3  57# happyReduction_197+happyReduction_197 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> +	case happyOut63 happy_x_3 of { happy_var_3 -> +	happyIn63+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_198 = happyMonadReduce 3# 58# happyReduction_198+happyReduction_198 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut29 happy_x_1 of { happy_var_1 -> +	case happyOut67 happy_x_2 of { happy_var_2 -> +	case happyOut66 happy_x_3 of { happy_var_3 -> +	( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2 happy_var_3))}}}+	) (\r -> happyReturn (happyIn64 r))++happyReduce_199 = happyReduce 4# 58# 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 { (TokSymbol SymEllipsis happy_var_1) -> +	case happyOut65 happy_x_2 of { happy_var_2 -> +	case happyOut67 happy_x_3 of { happy_var_3 -> +	case happyOut66 happy_x_4 of { happy_var_4 -> +	happyIn64+		 (Ellipsis (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3 happy_var_4+	) `HappyStk` happyRest}}}}++happyReduce_200 = happySpecReduce_0  59# happyReduction_200+happyReduction_200  =  happyIn65+		 ([]+	)++happyReduce_201 = happyMonadReduce 3# 59# happyReduction_201+happyReduction_201 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut33 happy_x_2 of { happy_var_2 -> +	case happyOut65 happy_x_3 of { happy_var_3 -> +	( exprToPattern (RawApp (getRange happy_var_2) happy_var_2) >>= \p ->+		   return (p : happy_var_3))}}+	) (\r -> happyReturn (happyIn65 r))++happyReduce_202 = happySpecReduce_0  60# happyReduction_202+happyReduction_202  =  happyIn66+		 ([]+	)++happyReduce_203 = happySpecReduce_2  60# happyReduction_203+happyReduction_203 happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> +	happyIn66+		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }+	)}++happyReduce_204 = happySpecReduce_0  61# happyReduction_204+happyReduction_204  =  happyIn67+		 ([]+	)++happyReduce_205 = happySpecReduce_2  61# happyReduction_205+happyReduction_205 happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> +	happyIn67+		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }+	)}++happyReduce_206 = happySpecReduce_0  62# happyReduction_206+happyReduction_206  =  happyIn68+		 (NoWhere+	)++happyReduce_207 = happySpecReduce_2  62# happyReduction_207+happyReduction_207 happy_x_2+	happy_x_1+	 =  case happyOut114 happy_x_2 of { happy_var_2 -> +	happyIn68+		 (AnyWhere happy_var_2+	)}++happyReduce_208 = happyReduce 4# 62# happyReduction_208+happyReduction_208 (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 happyOut114 happy_x_4 of { happy_var_4 -> +	happyIn68+		 (SomeWhere happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_209 = happySpecReduce_1  63# happyReduction_209+happyReduction_209 happy_x_1+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_210 = happySpecReduce_1  63# happyReduction_210+happyReduction_210 happy_x_1+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> +	happyIn69+		 (happy_var_1+	)}++happyReduce_211 = happySpecReduce_1  63# happyReduction_211+happyReduction_211 happy_x_1+	 =  case happyOut73 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_212 = happySpecReduce_1  63# happyReduction_212+happyReduction_212 happy_x_1+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_213 = happySpecReduce_1  63# happyReduction_213+happyReduction_213 happy_x_1+	 =  case happyOut76 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_214 = happySpecReduce_1  63# happyReduction_214+happyReduction_214 happy_x_1+	 =  case happyOut78 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_215 = happySpecReduce_1  63# happyReduction_215+happyReduction_215 happy_x_1+	 =  case happyOut80 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_216 = happySpecReduce_1  63# happyReduction_216+happyReduction_216 happy_x_1+	 =  case happyOut81 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_217 = happySpecReduce_1  63# happyReduction_217+happyReduction_217 happy_x_1+	 =  case happyOut82 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_218 = happySpecReduce_1  63# happyReduction_218+happyReduction_218 happy_x_1+	 =  case happyOut83 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_219 = happySpecReduce_1  63# happyReduction_219+happyReduction_219 happy_x_1+	 =  case happyOut84 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_220 = happySpecReduce_1  63# happyReduction_220+happyReduction_220 happy_x_1+	 =  case happyOut90 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_221 = happySpecReduce_1  63# happyReduction_221+happyReduction_221 happy_x_1+	 =  case happyOut93 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_222 = happySpecReduce_1  63# happyReduction_222+happyReduction_222 happy_x_1+	 =  case happyOut92 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_223 = happySpecReduce_1  63# happyReduction_223+happyReduction_223 happy_x_1+	 =  case happyOut94 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_224 = happySpecReduce_1  63# happyReduction_224+happyReduction_224 happy_x_1+	 =  case happyOut97 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_225 = happySpecReduce_1  63# happyReduction_225+happyReduction_225 happy_x_1+	 =  case happyOut85 happy_x_1 of { happy_var_1 -> +	happyIn69+		 ([happy_var_1]+	)}++happyReduce_226 = happySpecReduce_3  64# happyReduction_226+happyReduction_226 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	happyIn70+		 (TypeSig happy_var_1 happy_var_3+	)}}++happyReduce_227 = happySpecReduce_3  65# happyReduction_227+happyReduction_227 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut17 happy_x_1 of { happy_var_1 -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	happyIn71+		 (map (flip TypeSig happy_var_3) happy_var_1+	)}}++happyReduce_228 = happySpecReduce_3  66# happyReduction_228+happyReduction_228 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut20 happy_x_1 of { happy_var_1 -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	happyIn72+		 (map (fmap (flip TypeSig happy_var_3)) happy_var_1+	)}}++happyReduce_229 = happySpecReduce_3  67# happyReduction_229+happyReduction_229 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> +	case happyOut74 happy_x_2 of { happy_var_2 -> +	case happyOut68 happy_x_3 of { happy_var_3 -> +	happyIn73+		 (FunClause happy_var_1 happy_var_2 happy_var_3+	)}}}++happyReduce_230 = happySpecReduce_2  68# happyReduction_230+happyReduction_230 happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> +	happyIn74+		 (RHS happy_var_2+	)}++happyReduce_231 = happySpecReduce_0  68# happyReduction_231+happyReduction_231  =  happyIn74+		 (AbsurdRHS+	)++happyReduce_232 = happyReduce 7# 69# happyReduction_232+happyReduction_232 (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 happyOut50 happy_x_3 of { happy_var_3 -> +	case happyOut28 happy_x_5 of { happy_var_5 -> +	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> +	case happyOut112 happy_x_7 of { happy_var_7 -> +	happyIn75+		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) Inductive happy_var_2 (map addType happy_var_3) happy_var_5 happy_var_7+	) `HappyStk` happyRest}}}}}}++happyReduce_233 = happyReduce 7# 69# happyReduction_233+happyReduction_233 (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 happyOut50 happy_x_3 of { happy_var_3 -> +	case happyOut28 happy_x_5 of { happy_var_5 -> +	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> +	case happyOut112 happy_x_7 of { happy_var_7 -> +	happyIn75+		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) CoInductive happy_var_2 (map addType happy_var_3) happy_var_5 happy_var_7+	) `HappyStk` happyRest}}}}}}++happyReduce_234 = happyReduce 7# 70# happyReduction_234+happyReduction_234 (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 KwRecord happy_var_1) -> +	case happyOut16 happy_x_2 of { happy_var_2 -> +	case happyOut50 happy_x_3 of { happy_var_3 -> +	case happyOut28 happy_x_5 of { happy_var_5 -> +	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> +	case happyOut113 happy_x_7 of { happy_var_7 -> +	happyIn76+		 (Record (getRange (happy_var_1, happy_var_6, happy_var_7)) happy_var_2 (fst happy_var_7) (map addType happy_var_3) happy_var_5 (snd happy_var_7)+	) `HappyStk` happyRest}}}}}}++happyReduce_235 = happySpecReduce_2  71# happyReduction_235+happyReduction_235 happy_x_2+	happy_x_1+	 =  case happyOut16 happy_x_2 of { happy_var_2 -> +	happyIn77+		 (happy_var_2+	)}++happyReduce_236 = happySpecReduce_3  72# happyReduction_236+happyReduction_236 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 happyOut24 happy_x_3 of { happy_var_3 -> +	happyIn78+		 (Infix (NonAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3+	)}}}++happyReduce_237 = happySpecReduce_3  72# happyReduction_237+happyReduction_237 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 happyOut24 happy_x_3 of { happy_var_3 -> +	happyIn78+		 (Infix (LeftAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3+	)}}}++happyReduce_238 = happySpecReduce_3  72# happyReduction_238+happyReduction_238 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 happyOut24 happy_x_3 of { happy_var_3 -> +	happyIn78+		 (Infix (RightAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3+	)}}}++happyReduce_239 = happySpecReduce_2  73# happyReduction_239+happyReduction_239 happy_x_2+	happy_x_1+	 =  case happyOut110 happy_x_2 of { happy_var_2 -> +	happyIn79+		 (let toField (Arg h rel (TypeSig x t)) = Field x (Arg h rel t) in map toField happy_var_2+	)}++happyReduce_240 = happySpecReduce_2  74# happyReduction_240+happyReduction_240 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> +	case happyOut114 happy_x_2 of { happy_var_2 -> +	happyIn80+		 (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_241 = happySpecReduce_2  75# happyReduction_241+happyReduction_241 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> +	case happyOut114 happy_x_2 of { happy_var_2 -> +	happyIn81+		 (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_242 = happySpecReduce_2  76# happyReduction_242+happyReduction_242 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> +	case happyOut114 happy_x_2 of { happy_var_2 -> +	happyIn82+		 (Private (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_243 = happySpecReduce_2  77# happyReduction_243+happyReduction_243 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> +	case happyOut108 happy_x_2 of { happy_var_2 -> +	happyIn83+		 (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_244 = happySpecReduce_2  78# happyReduction_244+happyReduction_244 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> +	case happyOut108 happy_x_2 of { happy_var_2 -> +	happyIn84+		 (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_245 = happyMonadReduce 5# 79# happyReduction_245+happyReduction_245 (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 happyOut87 happy_x_3 of { happy_var_3 -> +	case happyOut86 happy_x_5 of { happy_var_5 -> +	(+  case happy_var_2 of +    Name _ [_] -> case mkNotation happy_var_3 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 (happyIn85 r))++happyReduce_246 = happySpecReduce_1  80# happyReduction_246+happyReduction_246 happy_x_1+	 =  case happyOut89 happy_x_1 of { happy_var_1 -> +	happyIn86+		 ([happy_var_1]+	)}++happyReduce_247 = happySpecReduce_2  80# happyReduction_247+happyReduction_247 happy_x_2+	happy_x_1+	 =  case happyOut86 happy_x_1 of { happy_var_1 -> +	case happyOut89 happy_x_2 of { happy_var_2 -> +	happyIn86+		 (happy_var_1 ++ [happy_var_2]+	)}}++happyReduce_248 = happySpecReduce_1  81# happyReduction_248+happyReduction_248 happy_x_1+	 =  case happyOut88 happy_x_1 of { happy_var_1 -> +	happyIn87+		 ([happy_var_1]+	)}++happyReduce_249 = happySpecReduce_2  81# happyReduction_249+happyReduction_249 happy_x_2+	happy_x_1+	 =  case happyOut87 happy_x_1 of { happy_var_1 -> +	case happyOut88 happy_x_2 of { happy_var_2 -> +	happyIn87+		 (happy_var_1 ++ [happy_var_2]+	)}}++happyReduce_250 = happySpecReduce_1  82# happyReduction_250+happyReduction_250 happy_x_1+	 =  case happyOut89 happy_x_1 of { happy_var_1 -> +	happyIn88+		 (ExprHole happy_var_1+	)}++happyReduce_251 = happyReduce 6# 82# happyReduction_251+happyReduction_251 (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 happyOut89 happy_x_3 of { happy_var_3 -> +	case happyOut89 happy_x_5 of { happy_var_5 -> +	happyIn88+		 (LambdaHole happy_var_3 happy_var_5+	) `HappyStk` happyRest}}++happyReduce_252 = happySpecReduce_1  83# happyReduction_252+happyReduction_252 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> +	happyIn89+		 (snd happy_var_1+	)}++happyReduce_253 = happyReduce 4# 84# happyReduction_253+happyReduction_253 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> +	case happyOut22 happy_x_2 of { happy_var_2 -> +	case happyOut91 happy_x_3 of { happy_var_3 -> +	case happyOut53 happy_x_4 of { happy_var_4 -> +	happyIn90+		 (let+    { m   = happy_var_2+    ; es  = happy_var_3+    ; dir = happy_var_4+    ; r   = getRange (happy_var_1, m, es, dir)+    } in+    case es of+    { []  -> Open r m dir+    ; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2) []+                           (RawApp (fuseRange m es) (Ident m : es)) DoOpen dir+                       ]+    }+	) `HappyStk` happyRest}}}}++happyReduce_254 = happySpecReduce_0  85# happyReduction_254+happyReduction_254  =  happyIn91+		 ([]+	)++happyReduce_255 = happySpecReduce_2  85# happyReduction_255+happyReduction_255 happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	case happyOut91 happy_x_2 of { happy_var_2 -> +	happyIn91+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_256 = happyReduce 6# 86# happyReduction_256+happyReduction_256 (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 KwModule happy_var_1) -> +	case happyOut16 happy_x_2 of { happy_var_2 -> +	case happyOut50 happy_x_3 of { happy_var_3 -> +	case happyOut28 happy_x_5 of { happy_var_5 -> +	case happyOut53 happy_x_6 of { happy_var_6 -> +	happyIn92+		 (ModuleMacro (getRange (happy_var_1, happy_var_5, happy_var_6)) happy_var_2 (map addType happy_var_3) happy_var_5 DontOpen happy_var_6+	) `HappyStk` happyRest}}}}}++happyReduce_257 = happyReduce 7# 86# happyReduction_257+happyReduction_257 (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 KwOpen happy_var_1) -> +	case happyOut16 happy_x_3 of { happy_var_3 -> +	case happyOut50 happy_x_4 of { happy_var_4 -> +	case happyOut28 happy_x_6 of { happy_var_6 -> +	case happyOut53 happy_x_7 of { happy_var_7 -> +	happyIn92+		 (ModuleMacro (getRange (happy_var_1, happy_var_6, happy_var_7)) happy_var_3 (map addType happy_var_4) happy_var_6 DoOpen happy_var_7+	) `HappyStk` happyRest}}}}}++happyReduce_258 = happySpecReduce_3  87# happyReduction_258+happyReduction_258 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> +	case happyOut22 happy_x_2 of { happy_var_2 -> +	case happyOut52 happy_x_3 of { happy_var_3 -> +	happyIn93+		 (Import (getRange (happy_var_1,happy_var_2,snd happy_var_3)) happy_var_2 (fst happy_var_3) DontOpen (snd happy_var_3)+	)}}}++happyReduce_259 = happyReduce 4# 87# happyReduction_259+happyReduction_259 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> +	case happyOut22 happy_x_3 of { happy_var_3 -> +	case happyOut52 happy_x_4 of { happy_var_4 -> +	happyIn93+		 (Import (getRange (happy_var_1,happy_var_3,snd happy_var_4)) happy_var_3 (fst happy_var_4) DoOpen (snd happy_var_4)+	) `HappyStk` happyRest}}}++happyReduce_260 = happyReduce 5# 88# happyReduction_260+happyReduction_260 (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 happyOut16 happy_x_2 of { happy_var_2 -> +	case happyOut50 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> +	case happyOut115 happy_x_5 of { happy_var_5 -> +	happyIn94+		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_261 = happySpecReduce_2  89# happyReduction_261+happyReduction_261 happy_x_2+	happy_x_1+	 =  case happyOut96 happy_x_2 of { happy_var_2 -> +	happyIn95+		 ([happy_var_2]+	)}++happyReduce_262 = happySpecReduce_3  89# happyReduction_262+happyReduction_262 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut93 happy_x_2 of { happy_var_2 -> +	case happyOut95 happy_x_3 of { happy_var_3 -> +	happyIn95+		 (happy_var_2 : happy_var_3+	)}}++happyReduce_263 = happySpecReduce_3  89# happyReduction_263+happyReduction_263 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut90 happy_x_2 of { happy_var_2 -> +	case happyOut95 happy_x_3 of { happy_var_3 -> +	happyIn95+		 (happy_var_2 : happy_var_3+	)}}++happyReduce_264 = happyReduce 5# 90# happyReduction_264+happyReduction_264 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> +	case happyOut22 happy_x_2 of { happy_var_2 -> +	case happyOut50 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> +	case happyOut115 happy_x_5 of { happy_var_5 -> +	happyIn96+		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) happy_var_2 (map addType happy_var_3) happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_265 = happySpecReduce_1  91# happyReduction_265+happyReduction_265 happy_x_1+	 =  case happyOut99 happy_x_1 of { happy_var_1 -> +	happyIn97+		 (Pragma happy_var_1+	)}++happyReduce_266 = happySpecReduce_1  92# happyReduction_266+happyReduction_266 happy_x_1+	 =  case happyOut100 happy_x_1 of { happy_var_1 -> +	happyIn98+		 (happy_var_1+	)}++happyReduce_267 = happySpecReduce_1  93# happyReduction_267+happyReduction_267 happy_x_1+	 =  case happyOut101 happy_x_1 of { happy_var_1 -> +	happyIn99+		 (happy_var_1+	)}++happyReduce_268 = happySpecReduce_1  93# happyReduction_268+happyReduction_268 happy_x_1+	 =  case happyOut102 happy_x_1 of { happy_var_1 -> +	happyIn99+		 (happy_var_1+	)}++happyReduce_269 = happySpecReduce_1  93# happyReduction_269+happyReduction_269 happy_x_1+	 =  case happyOut104 happy_x_1 of { happy_var_1 -> +	happyIn99+		 (happy_var_1+	)}++happyReduce_270 = happySpecReduce_1  93# happyReduction_270+happyReduction_270 happy_x_1+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> +	happyIn99+		 (happy_var_1+	)}++happyReduce_271 = happySpecReduce_1  93# happyReduction_271+happyReduction_271 happy_x_1+	 =  case happyOut106 happy_x_1 of { happy_var_1 -> +	happyIn99+		 (happy_var_1+	)}++happyReduce_272 = happySpecReduce_1  93# happyReduction_272+happyReduction_272 happy_x_1+	 =  case happyOut107 happy_x_1 of { happy_var_1 -> +	happyIn99+		 (happy_var_1+	)}++happyReduce_273 = happySpecReduce_1  93# happyReduction_273+happyReduction_273 happy_x_1+	 =  case happyOut105 happy_x_1 of { happy_var_1 -> +	happyIn99+		 (happy_var_1+	)}++happyReduce_274 = happyReduce 4# 94# happyReduction_274+happyReduction_274 (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 happyOut26 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> +	happyIn100+		 (OptionsPragma (fuseRange happy_var_1 happy_var_4) happy_var_3+	) `HappyStk` happyRest}}}++happyReduce_275 = happyReduce 5# 95# happyReduction_275+happyReduction_275 (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_3 of { (TokString happy_var_3) -> +	case happyOut27 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> +	happyIn101+		 (BuiltinPragma (fuseRange happy_var_1 happy_var_5) (snd happy_var_3) (Ident happy_var_4)+	) `HappyStk` happyRest}}}}++happyReduce_276 = happyReduce 5# 96# happyReduction_276+happyReduction_276 (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 happyOut27 happy_x_3 of { happy_var_3 -> +	case happyOut26 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> +	happyIn102+		 (CompiledPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)+	) `HappyStk` happyRest}}}}++happyReduce_277 = happyReduce 5# 97# happyReduction_277+happyReduction_277 (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 happyOut27 happy_x_3 of { happy_var_3 -> +	case happyOut26 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> +	happyIn103+		 (CompiledTypePragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)+	) `HappyStk` happyRest}}}}++happyReduce_278 = happyReduce 6# 98# happyReduction_278+happyReduction_278 (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 happyOut27 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> +	case happyOut26 happy_x_5 of { happy_var_5 -> +	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> +	happyIn104+		 (CompiledDataPragma (fuseRange happy_var_1 happy_var_6) happy_var_3 (snd happy_var_4) happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_279 = happyReduce 4# 99# happyReduction_279+happyReduction_279 (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 happyOut27 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> +	happyIn105+		 (EtaPragma (fuseRange happy_var_1 happy_var_4) happy_var_3+	) `HappyStk` happyRest}}}++happyReduce_280 = happyMonadReduce 4# 100# happyReduction_280+happyReduction_280 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	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 (fuseRange happy_var_1 happy_var_4) s+       else parseError $ "Malformed module name: " ++ s ++ ".")}}}+	) (\r -> happyReturn (happyIn106 r))++happyReduce_281 = happySpecReduce_3  101# happyReduction_281+happyReduction_281 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> +	happyIn107+		 (ImpossiblePragma (fuseRange happy_var_1 happy_var_3)+	)}}++happyReduce_282 = happyReduce 5# 102# happyReduction_282+happyReduction_282 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut109 happy_x_3 of { happy_var_3 -> +	happyIn108+		 (reverse happy_var_3+	) `HappyStk` happyRest}++happyReduce_283 = happyReduce 4# 103# happyReduction_283+happyReduction_283 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut109 happy_x_1 of { happy_var_1 -> +	case happyOut71 happy_x_4 of { happy_var_4 -> +	happyIn109+		 (reverse happy_var_4 ++ happy_var_1+	) `HappyStk` happyRest}}++happyReduce_284 = happySpecReduce_2  103# happyReduction_284+happyReduction_284 happy_x_2+	happy_x_1+	 =  case happyOut71 happy_x_2 of { happy_var_2 -> +	happyIn109+		 (reverse happy_var_2+	)}++happyReduce_285 = happyReduce 5# 104# happyReduction_285+happyReduction_285 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut111 happy_x_3 of { happy_var_3 -> +	happyIn110+		 (reverse happy_var_3+	) `HappyStk` happyRest}++happyReduce_286 = happyReduce 4# 105# happyReduction_286+happyReduction_286 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut111 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_4 of { happy_var_4 -> +	happyIn111+		 (reverse happy_var_4 ++ happy_var_1+	) `HappyStk` happyRest}}++happyReduce_287 = happySpecReduce_2  105# happyReduction_287+happyReduction_287 happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_2 of { happy_var_2 -> +	happyIn111+		 (reverse happy_var_2+	)}++happyReduce_288 = happyReduce 4# 106# happyReduction_288+happyReduction_288 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = happyIn112+		 ([]+	) `HappyStk` happyRest++happyReduce_289 = happySpecReduce_1  106# happyReduction_289+happyReduction_289 happy_x_1+	 =  case happyOut108 happy_x_1 of { happy_var_1 -> +	happyIn112+		 (happy_var_1+	)}++happyReduce_290 = happyReduce 4# 107# happyReduction_290+happyReduction_290 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = happyIn113+		 ((Nothing, [])+	) `HappyStk` happyRest++happyReduce_291 = happyReduce 6# 107# happyReduction_291+happyReduction_291 (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 happyOut77 happy_x_4 of { happy_var_4 -> +	happyIn113+		 ((Just happy_var_4, [])+	) `HappyStk` happyRest}++happyReduce_292 = happyReduce 8# 107# happyReduction_292+happyReduction_292 (happy_x_8 `HappyStk`+	happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut77 happy_x_4 of { happy_var_4 -> +	case happyOut116 happy_x_6 of { happy_var_6 -> +	happyIn113+		 ((Just happy_var_4, reverse happy_var_6)+	) `HappyStk` happyRest}}++happyReduce_293 = happyReduce 5# 107# happyReduction_293+happyReduction_293 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut116 happy_x_3 of { happy_var_3 -> +	happyIn113+		 ((Nothing, reverse happy_var_3)+	) `HappyStk` happyRest}++happyReduce_294 = happyReduce 5# 108# happyReduction_294+happyReduction_294 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut116 happy_x_3 of { happy_var_3 -> +	happyIn114+		 (reverse happy_var_3+	) `HappyStk` happyRest}++happyReduce_295 = happyReduce 4# 109# happyReduction_295+happyReduction_295 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = happyIn115+		 ([]+	) `HappyStk` happyRest++happyReduce_296 = happySpecReduce_1  109# happyReduction_296+happyReduction_296 happy_x_1+	 =  case happyOut114 happy_x_1 of { happy_var_1 -> +	happyIn115+		 (happy_var_1+	)}++happyReduce_297 = happyReduce 4# 110# happyReduction_297+happyReduction_297 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut116 happy_x_1 of { happy_var_1 -> +	case happyOut69 happy_x_4 of { happy_var_4 -> +	happyIn116+		 (reverse happy_var_4 ++ happy_var_1+	) `HappyStk` happyRest}}++happyReduce_298 = happySpecReduce_2  110# happyReduction_298+happyReduction_298 happy_x_2+	happy_x_1+	 =  case happyOut69 happy_x_2 of { happy_var_2 -> +	happyIn116+		 (reverse happy_var_2+	)}++happyNewToken action sts stk+	= lexer(\tk -> +	let cont i = happyDoAction i tk action sts stk in+	case tk of {+	TokEOF -> happyDoAction 68# tk action sts stk;+	TokKeyword KwLet happy_dollar_dollar -> cont 1#;+	TokKeyword KwIn happy_dollar_dollar -> cont 2#;+	TokKeyword KwWhere happy_dollar_dollar -> cont 3#;+	TokKeyword KwWith happy_dollar_dollar -> cont 4#;+	TokKeyword KwRewrite happy_dollar_dollar -> cont 5#;+	TokKeyword KwPostulate happy_dollar_dollar -> cont 6#;+	TokKeyword KwPrimitive happy_dollar_dollar -> cont 7#;+	TokKeyword KwOpen happy_dollar_dollar -> cont 8#;+	TokKeyword KwImport happy_dollar_dollar -> cont 9#;+	TokKeyword KwUsing happy_dollar_dollar -> cont 10#;+	TokKeyword KwHiding happy_dollar_dollar -> cont 11#;+	TokKeyword KwRenaming happy_dollar_dollar -> cont 12#;+	TokKeyword KwTo happy_dollar_dollar -> cont 13#;+	TokKeyword KwPublic happy_dollar_dollar -> cont 14#;+	TokKeyword KwModule happy_dollar_dollar -> cont 15#;+	TokKeyword KwData happy_dollar_dollar -> cont 16#;+	TokKeyword KwCoData happy_dollar_dollar -> cont 17#;+	TokKeyword KwRecord happy_dollar_dollar -> cont 18#;+	TokKeyword KwConstructor happy_dollar_dollar -> cont 19#;+	TokKeyword KwField happy_dollar_dollar -> cont 20#;+	TokKeyword KwInfix happy_dollar_dollar -> cont 21#;+	TokKeyword KwInfixL happy_dollar_dollar -> cont 22#;+	TokKeyword KwInfixR happy_dollar_dollar -> cont 23#;+	TokKeyword KwMutual happy_dollar_dollar -> cont 24#;+	TokKeyword KwAbstract happy_dollar_dollar -> cont 25#;+	TokKeyword KwPrivate happy_dollar_dollar -> cont 26#;+	TokKeyword KwProp happy_dollar_dollar -> cont 27#;+	TokKeyword KwSet happy_dollar_dollar -> cont 28#;+	TokKeyword KwForall happy_dollar_dollar -> cont 29#;+	TokKeyword KwSyntax happy_dollar_dollar -> cont 30#;+	TokKeyword KwOPTIONS happy_dollar_dollar -> cont 31#;+	TokKeyword KwBUILTIN happy_dollar_dollar -> cont 32#;+	TokKeyword KwIMPORT happy_dollar_dollar -> cont 33#;+	TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 34#;+	TokKeyword KwETA happy_dollar_dollar -> cont 35#;+	TokKeyword KwCOMPILED happy_dollar_dollar -> cont 36#;+	TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 37#;+	TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 38#;+	TokKeyword KwQuoteGoal happy_dollar_dollar -> cont 39#;+	TokKeyword KwQuote happy_dollar_dollar -> cont 40#;+	TokSetN happy_dollar_dollar -> cont 41#;+	TokTeX happy_dollar_dollar -> cont 42#;+	TokComment happy_dollar_dollar -> cont 43#;+	TokSymbol SymEllipsis happy_dollar_dollar -> cont 44#;+	TokSymbol SymDot happy_dollar_dollar -> cont 45#;+	TokSymbol SymSemi happy_dollar_dollar -> cont 46#;+	TokSymbol SymColon happy_dollar_dollar -> cont 47#;+	TokSymbol SymEqual happy_dollar_dollar -> cont 48#;+	TokSymbol SymUnderscore happy_dollar_dollar -> cont 49#;+	TokSymbol SymQuestionMark happy_dollar_dollar -> cont 50#;+	TokSymbol SymArrow happy_dollar_dollar -> cont 51#;+	TokSymbol SymLambda happy_dollar_dollar -> cont 52#;+	TokSymbol SymAs happy_dollar_dollar -> cont 53#;+	TokSymbol SymBar happy_dollar_dollar -> cont 54#;+	TokSymbol SymOpenParen happy_dollar_dollar -> cont 55#;+	TokSymbol SymCloseParen happy_dollar_dollar -> cont 56#;+	TokSymbol SymOpenBrace happy_dollar_dollar -> cont 57#;+	TokSymbol SymCloseBrace happy_dollar_dollar -> cont 58#;+	TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 59#;+	TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 60#;+	TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 61#;+	TokSymbol SymOpenPragma happy_dollar_dollar -> cont 62#;+	TokSymbol SymClosePragma happy_dollar_dollar -> cont 63#;+	TokId happy_dollar_dollar -> cont 64#;+	TokQId happy_dollar_dollar -> cont 65#;+	TokString happy_dollar_dollar -> cont 66#;+	TokLiteral happy_dollar_dollar -> cont 67#;+	_ -> 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 (happyOut6 x))++exprParser = happySomeParser where+  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut28 x))++moduleParser = happySomeParser where+  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut10 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+ --------------------------------------------------------------------------}++-- | Create a name from a string.++mkName :: (Interval, String) -> Parser Name+mkName (i, s) = do+    let xs = parts s+    mapM_ isValidId xs+    unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"+    return $ Name (getRange i) xs+    where+        parts :: String -> [NamePart]+        parts ""        = []+        parts ('_' : s) = Hole : parts s+        parts s         = Id x : parts s'+          where (x, s') = break (== '_') s++	isValidId Hole   = return ()+	isValidId (Id x) = 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)++-- | 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++-- | Converts lambda bindings to typed bindings.+addType :: LamBinding -> TypedBindings+addType (DomainFull b)	 = b+addType (DomainFree h x) = TypedBindings r $ Arg h Relevant [TBind r [x] $ Underscore r Nothing]   where r = getRange x  -- | Check that an import directive doesn't contain repeated names
+ doc/release-notes/2-2-8.txt view
@@ -0,0 +1,564 @@+------------------------------------------------------------------------+-- 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.
src/agda-mode/Main.hs view
@@ -142,9 +142,7 @@ identifier files =   takeFileName (thisProgram files) ++ " " ++ locateFlag --- | The string appended to the end of the .emacs file. It is assumed--- that the .emacs file uses ASCII or some other character encoding--- which ASCII is compatible with (like Latin-1 or UTF-8).+-- | The string appended to the end of the .emacs file.  setupString :: Files -> String setupString files = unlines
src/data/emacs-mode/agda-input.el view
@@ -152,7 +152,7 @@  (defcustom agda-input-inherit   `(("TeX" . (agda-input-compose-              (agda-input-drop '("geq" "leq" "bullet" "qed"))+              (agda-input-drop '("geq" "leq" "bullet" "qed" "par"))               (agda-input-or                (agda-input-drop-prefix "\\")                (agda-input-or
src/data/emacs-mode/agda2-mode.el view
@@ -10,7 +10,7 @@  ;;; Code: -(defvar agda2-version "2.2.6"+(defvar agda2-version "2.2.8"   "The version of the Agda mode. Note that, by default, the same version of the underlying Haskell library is used (see `agda2-ghci-options').")@@ -245,6 +245,7 @@     (agda2-infer-type-maybe-toplevel         "\C-c\C-d"         (local global) "Infer (deduce) type")     (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-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")     (agda2-indent                ,(kbd "TAB"))     (agda2-indent-reverse        [S-iso-lefttab])@@ -423,8 +424,7 @@ (defun agda2-call-ghci (&rest args)   "Executes commands in GHCi. Sends the list of strings ARGS to GHCi, waits for output and-executes the responses, if any. Returns the number of processed-responses."+returns the responses."   (unless (eq 'run (agda2-process-status))     ;; Try restarting automatically, but only once, in case there is     ;; some major problem.@@ -453,37 +453,36 @@                 (setq response (buffer-substring-no-properties                                 (point-min) (point-max)))))           (delete-file tempfile))))-    (agda2-respond response)))+    response)) -(defun agda2-go (highlight require-response update-goals &rest args)+(defun agda2-go (highlight &rest args)   "Executes commands in GHCi. Sends the list of strings ARGS to GHCi, waits for output and executes the responses, if any. An error is raised if no-responses are received (unless REQUIRE-RESPONSE is nil), and-otherwise the syntax highlighting information is reloaded (unless-HIGHLIGHT is nil; if HIGHLIGHT is a string, then highlighting-info is read from the corresponding file) and the goals-updated (unless UPDATE-GOALS is nil)."+responses are received, and otherwise the syntax highlighting+information is reloaded (unless HIGHLIGHT is nil; if HIGHLIGHT is+a string, then highlighting info is read from the corresponding+file)."   (let* ((highlighting-temp (and highlight (not (stringp highlight))))          (highlighting (cond ((stringp highlight) highlight)                              (highlighting-temp (make-temp-file "agda2-mode")))))         (unwind-protect-            (let ((no-responses-                   (apply 'agda2-call-ghci-                          "ioTCM"-                          (agda2-string-quote (buffer-file-name))-                          (if highlighting-temp-                              (concat "(Just "-                                      (agda2-string-quote highlighting)-                                      ")")-                            "Nothing")-                          "("-                          (append args '(")")))))-                (when (and require-response (>= 0 no-responses))-                  (agda2-raise-ghci-error))-                (if highlight (agda2-highlight-load highlighting)))-          (if highlighting-temp (delete-file highlighting))))-  (if update-goals (agda2-annotate)))+            (let ((responses+                   (agda2-read-responses+                    (apply 'agda2-call-ghci+                           "ioTCM"+                           (agda2-string-quote (buffer-file-name))+                           (if highlighting-temp+                               (concat "(Just "+                                       (agda2-string-quote highlighting)+                                       ")")+                             "Nothing")+                           "("+                           (append args '(")"))))))+                (when (null responses) (agda2-raise-ghci-error))+                (if highlight (agda2-highlight-load highlighting))+                (agda2-exec-responses responses))+          (if highlighting-temp (delete-file highlighting)))))  (defun agda2-goal-cmd (cmd &optional want ask &rest args)   "Reads input from goal or minibuffer and sends command to Agda.@@ -502,52 +501,55 @@   contains whitespace, then the input is taken from the   minibuffer. In this case WANT is used as the prompt string. -* Otherwise (including if WANT is 'goal) the goal contents is+* Otherwise (including if WANT is 'goal) the goal contents are   used. +If the user input is not taken from the goal, then an empty goal+range is given.+ An error is raised if no responses are received."   (multiple-value-bind (o g) (agda2-goal-at (point))     (unless g (error "For this command, please place the cursor in a goal"))     (let ((txt (buffer-substring-no-properties (+ (overlay-start o) 2)-                                               (- (overlay-end   o) 2))))+                                               (- (overlay-end   o) 2)))+          (input-from-goal nil))       (cond ((null want) (setq txt ""))             ((and (stringp want)                   (or ask (string-match "\\`\\s *\\'" txt)))-             (setq txt (read-string (concat want ": ") txt))))-      (apply 'agda2-go nil t t cmd+             (setq txt (read-string (concat want ": ") nil nil txt t)))+            (t (setq input-from-goal t)))+      (apply 'agda2-go nil cmd              (format "%d" g)-             (agda2-goal-Range o)+             (if input-from-goal (agda2-goal-Range o) "noRange")              (agda2-string-quote txt) args)))) +(defun agda2-read-responses (response)+  "Returns a list containing the responses in the response string.+Responses of the form (last . actual-response) are placed last in+the returned list, with last stripped."+  (let ((responses)+        (former)+        (latter))+    (while (string-match "agda2_mode_code" response)+      (setq response (substring response (match-end 0)))+      (push (read response) responses))+    (dolist (r responses (append former latter))+      (if (and (consp r) (equal (car r) 'last))+          (push (cdr r) latter)+        (push r former)))))+ ;; Note that the following function is a security risk, since it ;; evaluates code without first inspecting it. The code (supposedly) ;; comes from the Agda backend, but there could be bugs in the backend ;; which can be exploited by an attacker which manages to trick ;; someone into type-checking compromised Agda code. -(defun agda2-respond (response)-  "Interprets response strings.-For every occurrence of 'agda2_mode_code<sexp>' in RESPONSE the-sexp is executed. The number of executed responses is returned."-  (let ((no-responses 0))-    (while (string-match "agda2_mode_code" response)-      (incf no-responses)-      (setq response (substring response (match-end 0)))-      (let ((inhibit-read-only t))-        (eval (read response))))-    no-responses))--(defvar agda2-response nil-  "Used by the backend to give responses to the Agda mode.")-(make-variable-buffer-local 'agda2-response)--(defun agda2-ask (&rest args)-  "Executes a query in GHCi and returns the response string."-  (setq agda2-response 'agda2-no-response)-  (apply 'agda2-go nil nil nil args)-  (if (equal agda2-response 'agda2-no-response)-      (agda2-raise-ghci-error)-    agda2-response))+(defun agda2-exec-responses (responses)+  "Interprets responses."+  (mapc (lambda (r)+          (let ((inhibit-read-only t))+            (eval r)))+          responses))  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; User commands and response processing@@ -555,7 +557,7 @@ (defun agda2-load ()   "Load current buffer."   (interactive)-  (agda2-go t t t "cmd_load"+  (agda2-go t "cmd_load"             (agda2-string-quote (buffer-file-name))             (agda2-list-quote agda2-include-dirs)             ))@@ -563,7 +565,7 @@ (defun agda2-compile ()   "Compile the current module."   (interactive)-  (agda2-go t t t "cmd_compile"+  (agda2-go t "cmd_compile"             (agda2-string-quote (buffer-file-name))             (agda2-list-quote agda2-include-dirs)             ))@@ -591,7 +593,7 @@  (defun agda2-auto ()  "Simple proof search" (interactive)- (agda2-goal-cmd "cmd_auto"))+ (agda2-goal-cmd "cmd_auto" 'goal))  (defun agda2-make-case ()   "Refine the pattern var given in the goal.@@ -642,11 +644,11 @@  (defun agda2-show-goals()   "Show all goals." (interactive)-  (agda2-go t t t "cmd_metas"))+  (agda2-go t "cmd_metas"))  (defun agda2-show-constraints()   "Show constraints." (interactive)-  (agda2-go t t t "cmd_constraints"))+  (agda2-go t "cmd_constraints"))  (defun agda2-remove-annotations ()   "Removes buffer annotations (overlays and text properties)."@@ -697,8 +699,8 @@ COMMENT is used to build the function's comments. The function NAME takes a prefix argument which tells whether it should normalise types or not when running CMD (through-`agda2-go' nil t nil; the string PROMPT is used as the goal-command prompt)."+`agda2-go' nil; the string PROMPT is used as the goal command+prompt)."   (let ((eval (make-symbol "eval")))     `(defun ,name (not-normalise expr)        ,(concat comment ".@@ -706,7 +708,7 @@ With a prefix argument the result is not explicitly normalised.")        (interactive ,(concat "P\nM" prompt ": "))        (let ((,eval (if not-normalise "Instantiated" "Normalised")))-         (agda2-go nil t nil+         (agda2-go nil                    (concat ,cmd " Agda.Interaction.BasicOps." ,eval " "                            (agda2-string-quote expr))))))) @@ -757,10 +759,35 @@  "cmd_context"  nil) +(defun agda2-module-contents ()+  "Shows all the top-level names in the given module.+Along with their types."+  (interactive)+  (agda2-goal-cmd "cmd_show_module_contents" "Module name"))++(defun agda2-module-contents-toplevel (module)+  "Shows all the top-level names in the given module.+Along with their types."+  (interactive "MModule name: ")+  (agda2-go nil+            "cmd_show_module_contents_toplevel"+            (agda2-string-quote module)))++(defun agda2-module-contents-maybe-toplevel ()+  "Shows all the top-level names in the given module.+Along with their types.++Uses either the scope of the current goal or, if point is not in+a goal, the top-level scope."+  (interactive)+  (call-interactively (if (agda2-goal-at (point))+                          'agda2-module-contents+                        'agda2-module-contents-toplevel)))+ (defun agda2-solveAll ()   "Solves all goals that are already instantiated internally."   (interactive)-  (agda2-go t t t "cmd_solveAll"))+  (agda2-go t "cmd_solveAll"))  (defun agda2-solveAll-action (iss)   (save-excursion@@ -787,7 +814,7 @@   (let ((cmd (concat "cmd_compute_toplevel"                      (if arg " True" " False")                      " ")))-    (agda2-go nil t nil (concat cmd (agda2-string-quote expr)))))+    (agda2-go nil (concat cmd (agda2-string-quote expr)))))  (defun agda2-compute-normalised-maybe-toplevel ()   "Computes the normal form of the given expression,@@ -808,23 +835,24 @@   (let ((highlighting (make-temp-file "agda2-mode")))     (unwind-protect         (progn-          (agda2-go highlighting nil t+          (agda2-go highlighting                     "cmd_write_highlighting_info"+                    (agda2-list-quote agda2-include-dirs)                     (agda2-string-quote (buffer-file-name))                     (agda2-string-quote highlighting)))       (delete-file highlighting)))) -(defun agda2-annotate ()+(defun agda2-goals-action (goals)   "Annotates the goals in the current buffer with text properties.-Note that this function should be run /after/ syntax highlighting-information has been loaded, because the two highlighting-mechanisms interact in unfortunate ways."+GOALS is a list of the buffer's goal numbers, in the order in+which they appear in the buffer. Note that this function should+be run /after/ syntax highlighting information has been loaded,+because the two highlighting mechanisms interact in unfortunate+ways."   (agda2-forget-all-goals)   (agda2-let       (stk-       top-       (goals (agda2-ask "cmd_goals"-                         (agda2-string-quote (buffer-file-name)))))+       top)       ((delims() (re-search-forward "[?]\\|[{][-!]\\|[-!][}]\\|--" nil t))        (is-lone-questionmark ()           (save-excursion@@ -1131,10 +1159,10 @@ With prefix argument, turn on display of implicit arguments if the argument is a positive number, otherwise turn it off."   (interactive "P")-  (cond ((eq arg nil)       (agda2-go t t t "toggleImplicitArgs"))+  (cond ((eq arg nil)       (agda2-go t "toggleImplicitArgs"))         ((and (numberp arg)-              (> arg 0))    (agda2-go t t t "showImplicitArgs" "True"))-        (t                  (agda2-go t t t "showImplicitArgs" "False"))))+              (> arg 0))    (agda2-go t "showImplicitArgs" "True"))+        (t                  (agda2-go t "showImplicitArgs" "False"))))  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;
src/full/Agda/Auto/Auto.hs view
@@ -1,12 +1,14 @@-{-# LANGUAGE UndecidableInstances#-}+{-# LANGUAGE CPP #-}  module Agda.Auto.Auto (auto) where +import Agda.Utils.Impossible+#include "../undefined.h"+ import Control.Monad.Error import Control.Monad.State import System.IO.Unsafe (unsafePerformIO) import Data.List-import Data.Generics import Data.Map (Map) import qualified Data.Map as Map import Data.IORef@@ -20,187 +22,421 @@ import Agda.TypeChecking.Monad.State (getScope) import Agda.TypeChecking.Substitute import qualified Agda.Syntax.Abstract as A+import Agda.Syntax.Abstract.Pretty (prettyA)+import qualified Text.PrettyPrint as PP import qualified Agda.Syntax.Concrete as C import Agda.Syntax.Position import qualified Agda.Syntax.Internal as I import Agda.Syntax.Common import Agda.Syntax.Translation.InternalToAbstract-import Agda.Syntax.Translation.AbstractToConcrete (abstractToConcrete, abstractToConcrete_, makeEnv)+import Agda.Syntax.Translation.AbstractToConcrete (abstractToConcrete, abstractToConcrete_, makeEnv, runAbsToCon, toConcrete) import Agda.Interaction.Monad import Agda.Interaction.BasicOps hiding (refine)+import Agda.Interaction.MakeCase (findClause)+import Agda.TypeChecking.Reduce (normalise)+import qualified Agda.Syntax.Scope.Base+import Agda.Syntax.Scope.Monad (withCurrentModule)+import qualified Agda.Syntax.Abstract.Name as AN+import qualified Agda.TypeChecking.Monad.Base as MB+import Agda.TypeChecking.EtaContract (etaContract)  import Agda.Auto.Convert import Agda.Auto.NarrowingSearch import Agda.Auto.Syntax+import Agda.Auto.SearchControl import Agda.Auto.Typecheck-import Agda.Auto.Print  +import Agda.Auto.CaseSplit+++insertAbsurdPattern [] = []+insertAbsurdPattern s@(_:_) | take (length abspatvarname) s == abspatvarname = "()" ++ drop (length abspatvarname) s+insertAbsurdPattern (c:s) = c : insertAbsurdPattern s+ getName :: A.Expr -> Maybe (Bool, I.QName) getName (A.ScopedExpr _ e) = getName e getName (A.Def qname) = Just (False, qname) getName (A.Con qname) = Just (True, head $ I.unAmbQ qname) getName _ = Nothing -dispmsg msg = return ([], Just msg)+dispmsg msg = return (Left [], Just msg) -auto :: InteractionId -> Range -> String -> TCM ([(InteractionId, String)], Maybe String)-auto ii rng argstr = liftTCM $  -     do  let (hints, timeout, pick, mode) = parseargs argstr-         ahints <- mapM (parseExprIn ii rng) hints+auto :: InteractionId -> Range -> String -> TCM (Either [(InteractionId, String)] (Either [String] String), Maybe String)+auto ii rng argstr = liftTCM $ do+         let (hints, timeout, pick, mode, hintmode) = parseargs argstr+         ahints <- mapM (parseExprIn ii rng) (case mode of {MRefine{} -> []; _ -> hints})++         eqstuff <- liftM (maybe Nothing (mapM getName)) $+                    catchError (liftM Just $ mapM (parseExprIn ii rng) ["_≡_", "begin_", "_≡⟨_⟩_", "_∎", "sym", "cong"]) (\_ -> return Nothing)+          case mapM getName ahints of-          Nothing -> dispmsg "Hints must be a list of constant names" +          Nothing -> dispmsg "Hints must be a list of constant names"           Just ehints -> do            mi <- lookupInteractionId ii-           (myhints, tccons, eqcons, cmap) <- tomy mi ehints+           --thisdefinfo <- catchError (liftM Just $ findClause mi) (\_ -> return Nothing)+           thisdefinfo <- findClauseDeep mi+           ehints <- liftM (ehints ++) $ autohints hintmode mi (case thisdefinfo of {Just (def, _, _) -> Just def; Nothing -> Nothing})+           mrectyp <- case thisdefinfo of+            Nothing -> return []+            Just (def, _, _) -> do+             recdef <- getConstInfo def+             let rectyp = MB.defType recdef+             rectyp <- normalise rectyp+             return [rectyp]++           let ehints' = ehints ++ maybe [] id eqstuff+++           (myhints', mymrectyp, tccons, eqcons, cmap) <- tomy mi ehints' mrectyp++           let myhints = take (length myhints' - (length ehints' - length ehints)) myhints'+               meqr = case eqstuff of+                       Nothing -> Nothing+                       Just _ -> let [c1, c2, c3, c4, c5, c6] = drop (length myhints' - (length ehints' - length ehints)) myhints'+                                 in Just $ EqReasoningConsts c1 c2 c3 c4 c5 c6+++           let tcSearchSC isdep ctx typ trm =++                                     (case meqr of+                                      Nothing -> id+                                      Just eqr -> mpret . Sidecondition (calcEqRState eqr trm)+                                     )++                                     (tcSearch isdep ctx typ trm)            let (mainm, _, _, _) = tccons Map.! mi            case mode of-            MNormal listmode -> do-             sols <- liftIO $ newIORef []-             nsol <- liftIO $ newIORef (if listmode then (pick + 10) else (pick + 1))-             let hsol = if listmode then do+            MNormal listmode disprove -> do+               sols <- liftIO $ newIORef ([] :: [[I.Term]])+               nsol <- liftIO $ newIORef (if listmode then (pick + 10) else (pick + 1))+               let hsol =+++                       if listmode then do+                        nsol' <- readIORef nsol+                        when (nsol' <= 10) $ mapM (\(m, _, _, _) -> frommy (Meta m)) (Map.elems tccons) >>= \trms -> modifyIORef sols (trms :)+                       else do+                        nsol' <- readIORef nsol+                        when (nsol' == 1) $ mapM (\(m, _, _, _) -> frommy (Meta m)) (Map.elems tccons) >>= \trms -> writeIORef sols [trms]+               ticks <- liftIO $ newIORef 0+               let exsearch initprop recinfo defdfv = liftIO $ System.Timeout.timeout (timeout * 1000000) (+                    let r d = do+                         let rechint x = case recinfo of+                                          Nothing -> x+                                          Just (_, recdef) -> (recdef, HMRecCall) : x+                             env = RIEnv {rieHints = rechint $ map (\x -> (x, HMNormal)) myhints,+                                          rieDefFreeVars = defdfv++                                          , rieEqReasoningConsts = meqr++                                         }+                         depreached <- topSearch ticks nsol hsol env (initprop) d costIncrease                          nsol' <- readIORef nsol-                         when (nsol' <= 10) $ mapM (\(m, _, _, _) -> frommy (Meta m)) (Map.elems tccons) >>= \trms -> modifyIORef sols (trms :)+                         if nsol' /= 0 && depreached then+                           r (d + costIncrease)+                          else+                           return depreached+                    in r 0)+               let getsols sol = do+                    exprs <- mapM (\(mi, e) -> do+                               mv <- lookupMeta mi+                               e <- etaContract e+                               expr <- liftM modifyAbstractExpr $ withMetaInfo (getMetaInfo mv) $ reify e+                               return (mi, expr)+                              ) (zip (Map.keys tccons) sol)+                    let r :: I.MetaId -> StateT [I.MetaId] TCM [(I.MetaId, A.Expr)]+                        r midx = do+                         let (m, _, _, deps) = tccons Map.! midx+                         asolss <- mapM r deps+                         dones <- get+                         asols <- if (midx `notElem` dones) then do+                           put (midx : dones)+                           return [(midx, let Just e = lookup midx exprs in e)]+                          else+                           return []+                         return $ concat asolss ++ asols+                    (asols, _) <- runStateT (r mi) []+                    return asols+               if disprove then+                 case eqcons of+                  [] -> case Map.elems tccons of+                   (m, mytype, mylocalVars, _) : [] -> do+                       defdfv <- case thisdefinfo of+                                  Just (def, _, _) -> fromIntegral `liftM` getdfv mi def+                                  Nothing -> return 0+                       ee <- liftIO $ newIORef $ ConstDef {cdname = "T", cdorigin = __IMPOSSIBLE__, cdtype = NotM $ Sort (Set 0), cdcont = Postulate, cddeffreevars = 0}+                       let modargs = drop (length mylocalVars - defdfv) mylocalVars+                           restargs = take (length mylocalVars - defdfv) mylocalVars+                           mytype' = foldl (\x y -> NotM $ Pi Nothing Agda.Auto.Syntax.NotHidden (freeIn 0 y) y (Abs NoId x)) mytype restargs+                           htyp = negtype ee mytype'+                           sctx = (Id "h", closify htyp) : map (\x -> (NoId, closify x)) modargs+                           ntt = closify (NotM $ App Nothing (NotM OKVal) (Const ee) (NotM ALNil))+                       res <- exsearch (tcSearchSC False sctx ntt (Meta m)) Nothing defdfv+                       rsols <- liftM reverse $ liftIO $ readIORef sols+                       if null rsols then do+                         nsol' <- liftIO $ readIORef nsol+                         dispmsg $ insuffsols (pick + (if listmode then 10 else 1) - nsol')                         else do-                         nsol' <- readIORef nsol-                         when (nsol' == 1) $ mapM (\(m, _, _, _) -> frommy (Meta m)) (Map.elems tccons) >>= \trms -> writeIORef sols [trms]-             ticks <- liftIO $ newIORef 0-             res <- liftIO $ System.Timeout.timeout (timeout * 1000000) $-              let r d =-                   do-                    let tc (m, mytype, mylocalVars) isdep = tcExp isdep (map (\x -> (NoId, closify x)) mylocalVars) (closify mytype) (Meta m)-                        initprop = foldl (\x (ineq, e, i) -> mpret $ And Nothing x (comp ineq (closify e) (closify i)))-                                    (foldl (\x (m, mt, mlv, _) -> mpret $ And Nothing x (tc (m, mt, mlv) (not $ hequalMetavar m mainm)))-                                     (mpret OK)-                                     (Map.elems tccons)-                                    )-                                    eqcons-                    depreached <- topSearch ticks nsol hsol undefined False (RIEnv myhints) (initprop) d 1-                    nsol' <- readIORef nsol-                    if nsol' /= 0 && depreached then-                      r (d + 1)-                     else-                      return depreached-              in  r 0-             let getsols sol = do-                  exprs <- mapM (\(mi, e) -> do-                             mv <- lookupMeta mi-                             expr <- withMetaInfo (getMetaInfo mv) $ reify e-                             return (mi, expr)-                            ) (zip (Map.keys tccons) sol)-                  let r :: I.MetaId -> StateT [I.MetaId] TCM [(I.MetaId, A.Expr)]-                      r midx = do-                       let (m, _, _, deps) = tccons Map.! midx-                       asolss <- mapM r deps-                       dones <- get-                       asols <- if (midx `notElem` dones) then do-                         put (midx : dones)-                         return [(midx, let Just e = lookup midx exprs in e)]-                        else-                         return []-                       return $ concat asolss ++ asols-                  (asols, _) <- runStateT (r mi) []-                  return asols-             iis <- getInteractionPoints-             riis <- mapM (\ii -> lookupInteractionId ii >>= \mi -> return (mi, ii)) iis-             if listmode then do-               rsols <- liftM reverse $ liftIO $ readIORef sols-               if null rsols then do-                 nsol' <- liftIO $ readIORef nsol-                 dispmsg $ insuffsols (pick + 10 - nsol')+                         aexprss <- mapM getsols rsols+                         cexprss <- mapM (mapM (\(mi, e) -> lookupMeta mi >>= \mv -> withMetaInfo (getMetaInfo mv) $ abstractToConcrete_ e >>= \e' -> return (mi, e'))) aexprss+                         let ss = dropWhile (== ' ') . dropWhile (/= ' ') . show+                             disp [(_, cexpr)] = ss cexpr+                             disp cexprs = concat (map (\(mi, cexpr) -> ss cexpr ++ " ") cexprs)+                         ticks <- liftIO $ readIORef ticks+                         dispmsg $ "Listing disproof(s) " ++ show pick ++ "-" ++ show (pick + length rsols - 1) +++++                                   "\n" ++ unlines (map (\(x, y) -> show y ++ "  " ++ disp x) $ zip cexprss [pick..])+                   _ -> dispmsg "Metavariable dependencies not allowed in disprove mode"+                  _ -> dispmsg "Metavariable dependencies not allowed in disprove mode"                 else do-                 aexprss <- mapM getsols rsols-                 cexprss <- mapM (mapM (\(mi, e) -> lookupMeta mi >>= \mv -> withMetaInfo (getMetaInfo mv) $ abstractToConcrete_ e >>= \e' -> return (mi, e'))) aexprss-                 let disp [(_, cexpr)] = show cexpr-                     disp cexprs = concat (map (\(mi, cexpr) -> case lookup mi riis of {Nothing -> show mi; Just ii -> show ii} ++ " := " ++ show cexpr ++ " ") cexprs)-                 dispmsg $ "Listing solution(s) " ++ show pick ++ "-" ++ show (pick + length rsols - 1) ++ "\n" ++-                                   unlines (map (\(x, y) -> show y ++ "  " ++ disp x) $ zip cexprss [pick..])-             -              else-               case res of-                Nothing -> do-                 nsol' <- liftIO $ readIORef nsol-                 dispmsg $ insuffsols (pick + 1 - nsol') ++ " at time out (" ++ show timeout ++ "s)"-                Just depthreached -> do-                 ticks <- liftIO $ readIORef ticks-                 rsols <- liftIO $ readIORef sols-                 case rsols of-                  [] -> do-                   nsol' <- liftIO $ readIORef nsol-                   dispmsg $ insuffsols (pick + 1 - nsol')-                  (term : _) -> do-                   exprs <- getsols term-                   giveress <--                    mapM (\(mi, expr) ->-                     case lookup mi riis of-                      Nothing -> giveExpr mi expr >>= \_ -> return Nothing-                      Just ii' -> do (ae, []) <- give ii' Nothing expr  -- `catchError` (\_ -> throwError (strMsg $ "Solution is not accepted by Agda: " ++ show term))-                                     mv <- lookupMeta mi-                                     let scope = getMetaScope mv-                                         ce = abstractToConcrete (makeEnv scope) ae-                                     let cmnt = if ii' == ii then " {- by agsy" ++ (if null argstr then "" else " (" ++ argstr ++ ")") ++ " -}" else ""-                                     return $ Just (ii', show ce ++ cmnt)-                                    -                     ) exprs-                   let msg = if length exprs == 1 then-                              Nothing-                             else-                              Just $ "Also gave solution(s) for hole(s)" ++-                                      concatMap (\(mi', _) ->-                                       if mi' == mi then "" else (" " ++ case lookup mi' riis of {Nothing -> show mi'; Just ii -> show ii})-                                      ) exprs-                   return (catMaybes giveress, msg)-            MDumpProblem (Just dumpfile) -> do-             tcconss <- mapM (\(m, mytype, mylocalVars, _) -> do-               let typ = foldl (\x y -> NotM $ Pi Agda.Auto.Syntax.NotHidden undefined y (Abs NoId x)) mytype mylocalVars-                   trm = foldl (\x _ -> NotM $ Lam Agda.Auto.Syntax.NotHidden (Abs NoId x)) (Meta m) mylocalVars-               typs <- liftIO $ printExp [] typ-               trms <- liftIO $ printExp [] trm-               return $ (if hequalMetavar m mainm then "the_prob : " else "extra_con : ") ++ typs ++ " {\n = " ++ trms ++ ";\n};\n\n"-              ) (Map.elems tccons)-             constss <- liftIO $ mapM (\(_, (TMAll, c)) -> printConst c >>= \s -> return $ s ++ "\n") (Map.toList cmap)-             eqconss <- liftIO $ mapM (\(ineq, e1, e2) -> do-                         pe1 <- printExp [] e1-                         pe2 <- printExp [] e2-                         return $ "-- " ++ pe1 ++ (if ineq then " >= " else " == ") ++ pe2+                 (recinfo, defdfv) <-+                  case thisdefinfo of+                   Just (def, clause, _) -> do+                    let [rectyp'] = mymrectyp+                    defdfv <- getdfv mi def+                    myrecdef <- liftIO $ newIORef $ ConstDef {cdname = "", cdorigin = (Nothing, def), cdtype = rectyp', cdcont = Postulate, cddeffreevars = fromIntegral defdfv}+                    (_, pats) <- constructPats cmap mi clause+                    defdfv <- fromIntegral `liftM` getdfv mi def+                    return $ if contains_constructor pats then+                      (Just (pats, myrecdef), defdfv)+                     else+                      (Nothing, defdfv)+                   Nothing -> return (Nothing, 0)+                 let tc (m, mytype, mylocalVars) isdep = tcSearchSC isdep (map (\x -> (NoId, closify x)) mylocalVars) (closify mytype) (Meta m)+                     initprop =+                       foldl (\x (ineq, e, i) -> mpret $ And Nothing x (comp' ineq (closify e) (closify i)))+                        (foldl (\x (m, mt, mlv, _) ->+                          if hequalMetavar m mainm then+                           case recinfo of+                            Just (recpats, recdef) ->+                             mpret $ Sidecondition (localTerminationSidecond (localTerminationEnv recpats) recdef (Meta m))+                                                   (tc (m, mt, mlv) False)+                            Nothing -> mpret $ And Nothing x (tc (m, mt, mlv) False)+                          else+                           mpret $ And Nothing x (tc (m, mt, mlv) True)+                         )+                         (mpret OK)+                         (Map.elems tccons)                         ) eqcons-             let probs = concat constss ++ concat tcconss ++ (if null ehints then "" else ("-- hints: " ++ concatMap (\(_, n) -> " " ++ show n) ehints) ++ "\n") ++-                         "-- " ++ show (length eqcons) ++ " eqcons\n" ++ unlines eqconss-             liftIO $ writeFile dumpfile probs-             dispmsg $ "Dumping problem to " ++ dumpfile-            MDumpProblem Nothing -> do+                 res <- exsearch initprop recinfo defdfv+                 iis <- getInteractionPoints+                 riis <- mapM (\ii -> lookupInteractionId ii >>= \mi -> return (mi, ii)) iis+                 if listmode then do+                   rsols <- liftM reverse $ liftIO $ readIORef sols+                   if null rsols then do+                     nsol' <- liftIO $ readIORef nsol+                     dispmsg $ insuffsols (pick + 10 - nsol')+                    else do+                     aexprss <- mapM getsols rsols+                     cexprss <- mapM (mapM (\(mi, e) -> lookupMeta mi >>= \mv -> withMetaInfo (getMetaInfo mv) $ abstractToConcrete_ e >>= \e' -> return (mi, e'))) aexprss+                     let disp [(_, cexpr)] = show cexpr+                         disp cexprs = concat (map (\(mi, cexpr) -> case lookup mi riis of {Nothing -> show mi; Just ii -> show ii} ++ " := " ++ show cexpr ++ " ") cexprs)+                     ticks <- liftIO $ readIORef ticks+                     dispmsg $ "Listing solution(s) " ++ show pick ++ "-" ++ show (pick + length rsols - 1) +++++                               "\n" ++ unlines (map (\(x, y) -> show y ++ "  " ++ disp x) $ zip cexprss [pick..])+                  else+                   case res of+                    Nothing -> do+                     nsol' <- liftIO $ readIORef nsol+                     dispmsg $ insuffsols (pick + 1 - nsol') ++ " at time out (" ++ show timeout ++ "s)"+                    Just depthreached -> do+                     ticks <- liftIO $ readIORef ticks+                     rsols <- liftIO $ readIORef sols+                     case rsols of+                      [] -> do+                       nsol' <- liftIO $ readIORef nsol+                       dispmsg $ insuffsols (pick + 1 - nsol')+                      (term : _) -> do+                       exprs <- getsols term+                       giveress <-+                        mapM (\(mi, expr) ->+                         case lookup mi riis of+                          Nothing -> giveExpr mi expr >>= \_ -> return Nothing+                          Just ii' -> do (ae, []) <- give ii' Nothing expr+                                         mv <- lookupMeta mi+                                         let scope = getMetaScope mv+                                             ce = abstractToConcrete (makeEnv scope) ae+                                         let cmnt = if ii' == ii then agsyinfo ticks else ""+                                         return $ Just (ii', show ce ++ cmnt)+                         ) exprs+                       let msg = if length exprs == 1 then+                                  Nothing+                                 else+                                  Just $ "Also gave solution(s) for hole(s)" +++                                          concatMap (\(mi', _) ->+                                           if mi' == mi then "" else (" " ++ case lookup mi' riis of {Nothing -> show mi'; Just ii -> show ii})+                                          ) exprs+                       return (Left $ catMaybes giveress, msg)++            MCaseSplit -> do+             case thisdefinfo of+              Just (def, clause, True) ->+               case Map.elems tccons of+                ((m, mytype, mylocalVars, _) : []) | null eqcons -> do+++                 (ids, pats) <- constructPats cmap mi clause+                 let pids = concat $ map (\(_, x) -> " " ++ case x of {Id s -> s; NoId -> "noid"}) ids+                     ctx = map (\((hid, id), t) -> HI hid (id, t)) (zip ids mylocalVars)+                 ticks <- liftIO $ newIORef 0+                 let [rectyp'] = mymrectyp+                 defdfv <- getdfv mi def+                 myrecdef <- liftIO $ newIORef $ ConstDef {cdname = "", cdorigin = (Nothing, def), cdtype = rectyp', cdcont = Postulate, cddeffreevars = fromIntegral defdfv}+                 sols <- liftIO $ System.Timeout.timeout (timeout * 1000000) (+                    let r d = do+                         sols <- liftIO $ caseSplitSearch ticks __IMPOSSIBLE__ myhints meqr __IMPOSSIBLE__ d myrecdef ctx mytype pats+                         case sols of+                          [] -> r (d + costIncrease)+                          (_:_) -> return sols+                    in r 0)+                 case sols of+                  Just (cls : _) -> withInteractionId ii $ do+                   cls' <- liftIO $ mapM frommyClause cls+                   cls'' <- mapM (\(I.Clause _ tel perm ps body) ->+                     withCurrentModule (AN.qnameModule def) $ do+                      -- Normalise the dot patterns+                      ps <- addCtxTel tel $ normalise ps+                      body <- etaContractBody body+                      liftM modifyAbstractClause $ inContext [] $ reify $ NamedClause def $ I.Clause noRange tel perm ps body+                    ) cls'+                   pcs <- withInteractionId ii $ mapM prettyA cls''+                   ticks <- liftIO $ readIORef ticks+++                   return (Right $ Left (map (insertAbsurdPattern . PP.renderStyle (PP.style { PP.mode = PP.OneLineMode })) pcs), Nothing)++                  Just [] -> dispmsg "No solution found" -- case not possible at the moment because case split doesnt care about search exhaustiveness+                  Nothing -> dispmsg $ "No solution found at time out (" ++ show timeout ++ "s)"+                _ -> dispmsg "Metavariable dependencies not allowed in case split mode"+              _ -> dispmsg "Metavariable is not at top level of clause RHS"++            MRefine listmode -> do              mv <- lookupMeta mi              let HasType _ tt = mvJudgement mv                  minfo = getMetaInfo mv-                 localVars = map (snd . unArg . ctxEntry) . envContext . clEnv $ minfo-             withMetaInfo minfo $ do+             targettyp <- withMetaInfo minfo $ do               vs <- getContextArgs               let targettype = tt `piApply` vs-              targettype <- rewrite Normalised targettype-              localVars <- mapM (rewrite Normalised) localVars-              dispmsg $ "Target type: " ++ show (localVars, targettype)+              normalise targettype+             let tctx = length $ envContext $ clEnv minfo +             hits <- if elem "-a" hints then do+               st <- liftTCM $ join $ pureTCM $ \st _ -> return st+               let defs = sigDefinitions $ stSignature st+                   idefs = sigDefinitions $ stImports st+                   alldefs = Map.keys defs ++ Map.keys idefs+               liftM catMaybes $ mapM (\n ->+                 case thisdefinfo of+                  Just (def, _, _) | def == n -> return Nothing+                  _ -> do+                   cn <- withMetaInfo minfo $ runAbsToCon $ toConcrete n+                   if head (show cn) == '.' then -- not in scope+                     return Nothing+                    else do+                     c <- getConstInfo n+                     ctyp <- normalise $ defType c+                     cdfv <- withMetaInfo minfo $ getDefFreeVars n+                     return $ case matchType cdfv (fromIntegral tctx) ctyp targettyp of+                      Nothing -> Nothing+                      Just score -> Just (show cn, score)+                ) alldefs+              else do+               let scopeinfo = clScope (getMetaInfo mv)+                   namespace = Agda.Syntax.Scope.Base.everythingInScope scopeinfo+                   names = Agda.Syntax.Scope.Base.nsNames namespace+                   qnames = map (\(x, y) -> (x, Agda.Syntax.Scope.Base.anameName $ head y)) $ Map.toList names+                   modnames = case thisdefinfo of+                               Just (def, _, _) -> filter (\(_, n) -> n /= def) qnames+                               Nothing -> qnames+               liftM catMaybes $ mapM (\(cn, n) -> do+                 c <- getConstInfo n+                 ctyp <- normalise $ defType c+                 cdfv <- withMetaInfo minfo $ getDefFreeVars n+                 return $ case matchType cdfv (fromIntegral tctx) ctyp targettyp of+                  Nothing -> Nothing+                  Just score -> Just (show cn, score)+                ) modnames++             let sorthits = sortBy (\(_, (pa1, pb1)) (_, (pa2, pb2)) -> case compare pa2 pa1 of {EQ -> compare pb1 pb2; o -> o}) hits+             if listmode || pick == (-1) then+               let pick' = max 0 pick+               in if pick' >= length sorthits then+                    dispmsg $ insuffcands $ length sorthits+                   else+                    let showhits = take 10 $ drop pick' sorthits+                    in dispmsg $ "Listing candidate(s) " ++ show pick' ++ "-" ++ show (pick' + length showhits - 1) ++ " (found " ++ show (length sorthits) ++ " in total)\n" +++                                  unlines (map (\(i, (cn, _)) -> show i ++ "  " ++ cn) (zip [pick'..pick' + length showhits - 1] showhits))+              else+               if pick >= length sorthits then+                dispmsg $ insuffcands $ length sorthits+               else+                return (Right $ Right (fst $ sorthits !! pick), Nothing)+ where+++  agsyinfo ticks = ""+autohints AHMModule mi (Just def) = do+ mv <- lookupMeta mi+ let scopeinfo = clScope (getMetaInfo mv)+     namespace = Agda.Syntax.Scope.Base.everythingInScope scopeinfo+     names = Agda.Syntax.Scope.Base.nsNames namespace+     qnames = map (Agda.Syntax.Scope.Base.anameName . head) $ Map.elems names+     modnames = filter (\n -> AN.qnameModule n == AN.qnameModule def && n /= def) qnames+ modnames' <- filterM (\n -> do+   c <- getConstInfo n+   return (case theDef c of+            Axiom{} -> True+            Function{} -> True+            _ -> False+          )+  ) modnames+ return $ map (\x -> (False, x)) modnames'+autohints _ _ _ = return []+ insuffsols 0 = "No solution found"-insuffsols n = "Only " ++ show n ++ " solution(s) were found"+insuffsols n = "Only " ++ show n ++ " solution(s) found" -data Mode = MNormal Bool  -- true if list mode-          | MDumpProblem (Maybe String)  -- Just filename to dump as agsy file or Nothing to show the problem in internal agda format+insuffcands 0 = "No candidate found"+insuffcands n = "Only " ++ show n ++ " candidate(s) found" +data Mode = MNormal Bool Bool -- true if list mode, true if disprove++          | MCaseSplit++          | MRefine Bool -- true if list mode+++data AutoHintMode = AHMNone+                  | AHMModule++parseargs :: String -> ([String], Int, Int, Mode, AutoHintMode) parseargs s =- let r ("-t" : timeout : ws) (_, pick, mode) =-      r ws (read timeout, pick, mode)-     r ("-s" : pick : ws) (timeout, _, mode) =-      r ws (timeout, read pick, mode)-     r ("-dump" : dumpfile : ws) (timeout, pick, _) =-      r ws (timeout, pick, MDumpProblem (Just dumpfile))-     r ("-dumpa" : ws) (timeout, pick, _) =-      r ws (timeout, pick, MDumpProblem Nothing)-     r ("-l" : ws) (timeout, pick, _) =-      r ws (timeout, pick, MNormal True)-     r (h : ws) x =-      let (hints, timeout, pick, mode) = r ws x-      in  (h : hints, timeout, pick, mode)-     r [] (x,y,z) = ([],x,y,z)- in  r (words s) (1, 0, MNormal False)+ let r ("-t" : timeout : ws) (_, pick, mode, hintmode) =+      r ws (read timeout, pick, mode, hintmode)+     r ("-s" : pick : ws) (timeout, _, mode, hintmode) =+      r ws (timeout, read pick, mode, hintmode)  +     r ("-l" : ws) (timeout, pick, MNormal _ disprove, hintmode) =+      r ws (timeout, pick, MNormal True disprove, hintmode)+     r ("-l" : ws) (timeout, pick, MRefine _, hintmode) =+      r ws (timeout, pick, MRefine True, hintmode)+     r ("-d" : ws) (timeout, pick, MNormal listmode _, hintmode) =+      r ws (timeout, pick, MNormal listmode True, hintmode)+     r ("-m" : ws) (timeout, pick, mode, _) =+      r ws (timeout, pick, mode, AHMModule)++     r ("-c" : ws) (timeout, pick, _, hintmode) =+      r ws (timeout, pick, MCaseSplit, hintmode)++     r ("-r" : ws) (timeout, pick, _, hintmode) =+      r ws (timeout, (-1), MRefine False, hintmode)+     r (h : ws) x =+      let (hints, timeout, pick, mode, hintmode) = r ws x+      in (h : hints, timeout, pick, mode, hintmode)+     r [] (x,y,z,w) = ([],x,y,z,w)+ in r (words s) (5, 0, MNormal False False, AHMNone)
+ src/full/Agda/Auto/CaseSplit.hs view
@@ -0,0 +1,645 @@+{-# LANGUAGE Rank2Types, ScopedTypeVariables, CPP #-}+module Agda.Auto.CaseSplit where++import Agda.Utils.Impossible+#include "../undefined.h"++import Data.IORef+import Data.List (findIndex, union)+import qualified Data.IntMap as IntMap++import Agda.Auto.NarrowingSearch+import Agda.Auto.Syntax+++import Agda.Auto.SearchControl+import Agda.Auto.Typecheck++abspatvarname = "\0absurdPattern"++costCaseSplitVeryHigh = 10000+costCaseSplitHigh = 5000+costCaseSplitLow = 2000+costAddVarDepth = 1000+++data HI a = HI FMode a+drophid = map (\(HI _ x) -> x)+++type CSPat o = HI (CSPatI o)+type CSCtx o = [HI (MId, MExp o)]++data CSPatI o = CSPatConApp (ConstRef o) [CSPat o]+              | CSPatVar Nat+              | CSPatExp (MExp o)+              | CSWith (MExp o) -- always an App+              | CSAbsurd++              | CSOmittedArg+type Sol o = [(CSCtx o, [CSPat o], Maybe (MExp o))]++caseSplitSearch :: forall o . IORef Int -> Int -> [ConstRef o] -> Maybe (EqReasoningConsts o) -> Int -> Int -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]+caseSplitSearch ticks nsolwanted chints meqr depthinterval depth recdef ctx tt pats = do+ let branchsearch depth ctx tt termcheckenv = do+++      nsol <- newIORef 1+      m <- initMeta+      sol <- newIORef Nothing+      let trm = Meta m+          hsol = do trm' <- expandExp trm+++                    writeIORef sol (Just trm')+++          hpartsol = __IMPOSSIBLE__++          initcon = mpret $ Sidecondition (localTerminationSidecond termcheckenv recdef trm)+                                          (++                                           (case meqr of+                                            Nothing -> id+                                            Just eqr -> mpret . Sidecondition (calcEqRState eqr trm)+                                           )++                                           (tcSearch False (map (\(id, t) -> (id, closify t)) (drophid ctx)) (closify tt) trm)+                                          )+      recdefd <- readIORef recdef+      let env = RIEnv {rieHints = (recdef, HMRecCall) : map (\x -> (x, HMNormal)) chints,+                       rieDefFreeVars = cddeffreevars recdefd++                       , rieEqReasoningConsts = meqr++                      }+      depreached <- topSearch ticks nsol hsol env initcon depth (depth + 1)+      rsol <- readIORef sol+      return rsol+     ctx' = ff 1 ctx+     ff _ [] = []+     ff n (HI hid (id, t) : ctx) = HI hid (id, lift n t) : ff (n + 1) ctx+ caseSplitSearch' branchsearch depthinterval depth recdef ctx' tt pats++caseSplitSearch' :: forall o . (Int -> CSCtx o -> MExp o -> ([Nat], Nat, [Nat]) -> IO (Maybe (MExp o))) -> Int -> Int -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]+caseSplitSearch' branchsearch depthinterval depth recdef ctx tt pats = do+  recdefd <- readIORef recdef+  sols <- rc depth (cddeffreevars recdefd) ctx tt pats+  return sols+ where+  rc :: Int -> Int -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]+  rc depth _ _ _ _ | depth < 0 = return []+  rc depth nscrutavoid ctx tt pats = do++    mblkvar <- getblks tt+++    fork+     mblkvar+   where+   fork :: [Nat] -> IO [Sol o]+   fork mblkvar = do+    sols1 <- dobody+    case sols1 of+     (_:_) -> return sols1+     [] -> do+      let r [] = return []+          r (v:vs) = do+           sols2 <- splitvar mblkvar v+           case sols2 of+            (_:_) -> return sols2+            [] -> r vs+      r [nv - x | x <- [0..nv]] -- [0..length ctx - 1 - nscrutavoid]+    where nv = length ctx - 1+   dobody :: IO [Sol o]+   dobody = do+    case findperm (map snd (drophid ctx)) of+     Just perm -> do+      let (ctx', tt', pats') = applyperm perm ctx tt pats+      res <- branchsearch depth ctx' tt' (localTerminationEnv pats')+      return $ case res of+       Just trm -> [[(ctx', pats', Just trm)]]+       Nothing -> []+     Nothing -> __IMPOSSIBLE__ -- no permutation found+   splitvar :: [Nat] -> Nat -> IO [Sol o]+   splitvar mblkvar scrut = do+    let scruttype = infertypevar ctx scrut+    case rm scruttype of+     App _ _ (Const c) _ -> do+      cd <- readIORef c+      case cdcont cd of+       Datatype cons _ -> do+         sols <- dobranches cons+         return $ map (\sol -> case sol of+          [] ->+           case findperm (map snd (drophid ctx)) of+            Just perm ->+             let HI scrhid(_, scrt) = ctx !! scrut+                 ctx1 = take scrut ctx ++ (HI scrhid (Id abspatvarname, scrt)) : drop (scrut + 1) ctx+                 (ctx', _, pats') = applyperm perm ctx1 tt ({-map (replacep scrut 1 CSAbsurd __IMPOSSIBLE__) -}pats)+             in [(ctx', pats', Nothing)]+            Nothing -> __IMPOSSIBLE__ -- no permutation found+          _ -> sol+          ) sols+        where+         dobranches :: [ConstRef o] -> IO [Sol o]+         dobranches [] = return [[]]+         dobranches (con : cons) = do+          cond <- readIORef con+          let ff t = case rm t of+                        Pi _ h _ it (Abs id ot) ->+                         let (xs, inft) = ff ot+                         in ((Pair h (scrut + length xs), id, lift (scrut + length xs + 1) it) : xs, inft)+                        _ -> ([], lift scrut t)+              (newvars, inftype) = ff (cdtype cond)+              constrapp = mm $ App Nothing (mm OKVal) (Const con) (foldl (\xs (Pair h v, _, _) -> mm $ ALCons h (mm $ App Nothing (mm OKVal) (Var v) (mm ALNil)) xs) (mm ALNil) (reverse newvars))+              pconstrapp = CSPatConApp con (map (\(Pair hid v, _, _) -> HI hid (CSPatVar v)) newvars)+              thesub = replace scrut (length newvars) constrapp+              Id newvarprefix = fst $ (drophid ctx) !! scrut+              ctx1 = map (\(HI hid (id, t)) -> HI hid (id, thesub t)) (take scrut ctx) +++                     reverse (map (\((Pair hid _, id, t), i) ->+                       HI hid (Id (case id of {NoId -> newvarprefix{- ++ show i-}; Id id -> id}), t)+                      ) (zip newvars [0..])) +++                     map (\(HI hid (id, t)) -> HI hid (id, thesub t)) (drop (scrut + 1) ctx)+              tt' = thesub tt+              pats' = map (replacep scrut (length newvars) pconstrapp constrapp) pats+              scruttype' = thesub scruttype  -- scruttype shouldn't really refer to scrutvar so lift is enough, but what if circular ref has been created and this is not detected until case split is done+          case unifyexp inftype scruttype' of+           Nothing -> do+            res <- notequal scrut (length newvars) scruttype' inftype+            if res then -- branch absurd+              dobranches cons+             else -- branch dont know+              return []+           Just unif ->+            do+             let (ctx2, tt2, pats2) = removevar ctx1 tt' pats' unif+                 --cost = if elem scrut mblkvar then costCaseSplit - (costCaseSplit - costCaseSplitFollow) `div` (length mblkvar) else costCaseSplit+                 cost = if null mblkvar then+                         if scrut < length ctx - nscrutavoid && nothid then costCaseSplitLow + costAddVarDepth * depthofvar scrut pats else costCaseSplitVeryHigh+                        else+                         if elem scrut mblkvar then costCaseSplitLow else (if scrut < length ctx - nscrutavoid && nothid then costCaseSplitHigh else costCaseSplitVeryHigh)++                 nothid = let HI hid _ = ctx !! scrut+                          in case hid of {Hidden -> False; NotHidden -> True}+++             sols <- rc (depth - cost) (length ctx - 1 - scrut) ctx2 tt2 pats2+             case sols of+              [] -> return []+              _ -> do+               sols2 <- dobranches cons+               return $ concat (map (\sol -> map (\sol2 -> sol ++ sol2) sols2) sols)+       _ -> return [] -- split failed "scrut type is not datatype"+     _ -> return [] -- split failed "scrut type is not datatype"+infertypevar :: CSCtx o -> Nat -> MExp o+infertypevar ctx v = snd $ (drophid ctx) !! v+replace :: Nat -> Nat -> MExp o -> MExp o -> MExp o+replace sv nnew re = r 0+ where+  r n e =+   case rm e of+         App uid ok elr@(Var v) args ->+          if v >= n then+           if v - n == sv then+            betareduce (lift n re) (rs n args)+           else+            if v - n > sv then+             mm $ App uid ok (Var (v + nnew - 1)) (rs n args)+            else+             mm $ App uid ok elr (rs n args)+          else+           mm $ App uid ok elr (rs n args)+         App uid ok elr@(Const _) args ->+          mm $ App uid ok elr (rs n args)+         Lam hid (Abs mid e) -> mm $ Lam hid (Abs mid (r (n + 1) e))+         Pi uid hid possdep it (Abs mid ot) -> mm $ Pi uid hid possdep (r n it) (Abs mid (r (n + 1) ot))+         Sort{} -> e++         AbsurdLambda{} -> e+++  rs n es =+   case rm es of+    ALNil -> mm $ ALNil+    ALCons hid a as -> mm $ ALCons hid (r n a) (rs n as)++    ALProj{} -> __IMPOSSIBLE__+++    ALConPar as -> mm $ ALConPar (rs n as)+++betareduce :: MExp o -> MArgList o -> MExp o+betareduce e args = case rm args of+ ALNil -> e+ ALCons _ a rargs -> case rm e of+  App uid ok elr eargs -> mm $ App uid ok elr (concatargs eargs args)+  Lam _ (Abs _ b) -> betareduce (replace 0 0 a b) rargs+  _ -> __IMPOSSIBLE__ -- not type correct if this happens++ ALProj{} -> __IMPOSSIBLE__+++ ALConPar as -> __IMPOSSIBLE__+++concatargs xs ys = case rm xs of+ ALNil -> ys+ ALCons hid x xs -> mm $ ALCons hid x (concatargs xs ys)++ ALProj{} -> __IMPOSSIBLE__+++ ALConPar as -> mm $ ALConPar (concatargs xs ys)+++eqelr :: Elr o -> Elr o -> Bool+eqelr (Var v1) (Var v2) = v1 == v2+eqelr (Const c1) (Const c2) = c1 == c2+eqelr _ _ = False++replacep :: Nat -> Nat -> CSPatI o -> MExp o -> CSPat o -> CSPat o+replacep sv nnew rp re = r+ where+  r (HI hid (CSPatConApp c ps)) = HI hid (CSPatConApp c (map r ps))+  r (HI hid (CSPatVar v)) = if v == sv then+                    HI hid rp+                   else+                    if v > sv then+                     HI hid (CSPatVar (v + nnew - 1))+                    else+                     HI hid (CSPatVar v)+  r (HI hid (CSPatExp e)) = HI hid (CSPatExp $ replace sv nnew re e)++  r p@(HI _ CSOmittedArg) = p++  r _ = __IMPOSSIBLE__ -- other constructors dont appear in indata Pats++rm :: MM a b -> a+rm (NotM x) = x+rm (Meta{}) = __IMPOSSIBLE__++mm :: a -> MM a b+mm = NotM++unifyexp :: MExp o -> MExp o -> Maybe [(Nat, MExp o)]+unifyexp e1 e2 = r e1 e2 (\unif -> Just unif) []+ where+  r e1 e2 cont unif = case (rm e1, rm e2) of+   (App _ _ elr1 args1, App _ _ elr2 args2) | eqelr elr1 elr2 -> rs args1 args2 cont unif+   (Lam hid1 (Abs _ b1), Lam hid2 (Abs _ b2)) | hid1 == hid2 -> r b1 b2 cont unif+   (Pi _ hid1 _ it1 (Abs _ ot1), Pi _ hid2 _ it2 (Abs _ ot2)) | hid1 == hid2 -> r it1 it2 (r ot1 ot2 cont) unif+   (Sort _, Sort _) -> cont unif -- a bit sloppy+   (App _ _ (Var v) (NotM ALNil), _) ->+    case lookup v unif of+     Nothing -> cont ((v, e2) : unif)+     Just e1' -> r e1' e2 cont unif+   (_, App _ _ (Var v) (NotM ALNil)) ->+    case lookup v unif of+     Nothing -> cont ((v, e1) : unif)+     Just e2' -> r e1 e2' cont unif+   _ -> Nothing+  rs args1 args2 cont unif = case (rm args1, rm args2) of+   (ALNil, ALNil) -> cont unif+   (ALCons hid1 a1 as1, ALCons hid2 a2 as2) | hid1 == hid2 -> r a1 a2 (rs as1 as2 cont) unif+   (ALConPar as1, ALCons _ _ as2) -> rs as1 as2 cont unif+   (ALCons _ _ as1, ALConPar as2) -> rs as1 as2 cont unif+   (ALConPar as1, ALConPar as2) -> rs as1 as2 cont unif+   _ -> Nothing++lift :: Nat -> MExp o -> MExp o+lift 0 = id+lift n = r 0+ where+  r j e =+   case rm e of+         App uid ok elr args -> case elr of+          Var v | v >= j -> mm $ App uid ok (Var (v + n)) (rs j args)+          _ -> mm $ App uid ok elr (rs j args)+         Lam hid (Abs mid e) -> mm $ Lam hid (Abs mid (r (j + 1) e))+         Pi uid hid possdep it (Abs mid ot) -> mm $ Pi uid hid possdep (r j it) (Abs mid (r (j + 1) ot))+         Sort{} -> e++         AbsurdLambda{} -> e+++  rs j es =+   case rm es of+    ALNil -> mm $ ALNil+    ALCons hid a as -> mm $ ALCons hid (r j a) (rs j as)++    ALProj{} -> __IMPOSSIBLE__+++    ALConPar as -> mm $ ALConPar (rs j as)+++removevar :: CSCtx o -> MExp o -> [CSPat o] -> [(Nat, MExp o)] -> (CSCtx o, MExp o, [CSPat o])+removevar ctx tt pats [] = (ctx, tt, pats)+removevar ctx tt pats ((v, e) : unif) =+ let+  e2 = replace v 0 (__IMPOSSIBLE__ {- occurs check failed -}) e+  thesub = replace v 0 e2+  ctx1 = map (\(HI hid (id, t)) -> HI hid (id, thesub t)) (take v ctx) +++         map (\(HI hid (id, t)) -> HI hid (id, thesub t)) (drop (v + 1) ctx)+  tt' = thesub tt+  pats' = map (replacep v 0 (CSPatExp e2) e2) pats+  unif' = map (\(uv, ue) -> (if uv > v then uv - 1 else uv, thesub ue)) unif+ in+  removevar ctx1 tt' pats' unif'++notequal :: Nat -> Nat -> MExp o -> MExp o -> IO Bool+notequal firstnew nnew e1 e2 =+  case (rm e1, rm e2) of+   (App _ _ _ es1, App _ _ _ es2) -> rs es1 es2 (\_ -> return False) []+   _ -> __IMPOSSIBLE__+ where+  rs :: MArgList o -> MArgList o -> ([(Nat, MExp o)] -> IO Bool) -> [(Nat, MExp o)] -> IO Bool+  rs es1 es2 cont unifier2 =+   case (rm es1, rm es2) of+    (ALCons _ e1 es1, ALCons _ e2 es2) -> r e1 e2 (rs es1 es2 cont) unifier2++    (ALConPar es1, ALConPar es2) -> rs es1 es2 cont unifier2++    _ -> cont unifier2++  r :: MExp o -> MExp o -> ([(Nat, MExp o)] -> IO Bool) -> [(Nat, MExp o)] -> IO Bool+  r e1 e2 cont unifier2 = case rm e2 of+   App _ _ (Var v2) es2 | firstnew <= v2 && v2 < firstnew + nnew ->+    case rm es2 of+     ALNil ->+      case lookup v2 unifier2 of+       Nothing -> cont ((v2, e1) : unifier2)+       Just e2' -> cc e1 e2'+     ALCons{} -> cont unifier2++     ALProj{} -> __IMPOSSIBLE__+++     ALConPar{} -> __IMPOSSIBLE__++   _ -> cc e1 e2+   where+   cc e1 e2 = case (rm e1, rm e2) of+    (App _ _ (Const c1) es1, App _ _ (Const c2) es2) -> do+     cd1 <- readIORef c1+     cd2 <- readIORef c2+     case (cdcont cd1, cdcont cd2) of+      (Constructor{}, Constructor{}) ->+       if c1 == c2 then+        rs es1 es2 cont unifier2+       else+        return True+      _ -> cont unifier2+    _ -> cont unifier2++findperm :: [MExp o] -> Maybe [Nat]+findperm ts =+ let+  frees = map freevars ts+  m = IntMap.fromList (map (\i -> (i, length (filter (elem i) frees))) [0..length ts - 1])+  r _ perm 0 = Just $ reverse perm+  r m perm n =+   case lookup 0 (map (\(x,y) -> (y,x)) (IntMap.toList m)) of+    Nothing -> Nothing+    Just i -> r (foldl (\m i -> IntMap.adjust (\x -> x - 1) i m) (IntMap.insert i (-1) m) (frees !! i)) (i : perm) (n - 1)+ in r m [] (length ts)++freevars :: MExp o -> [Nat]+freevars = f 0+ where+  f n e = case rm e of+   App _ _ (Var v) args -> union [v - n] (fs n args)+   App _ _ (Const _) args -> fs n args+   Lam _ (Abs _ b) -> f (n + 1) b+   Pi _ _ _ it (Abs _ ot) -> union (f n it) (f (n + 1) ot)+   Sort{} -> []++   AbsurdLambda{} -> []+++  fs n es = case rm es of+   ALNil -> []+   ALCons _ e es -> union (f n e) (fs n es)++   ALProj{} -> __IMPOSSIBLE__+++   ALConPar es -> fs n es+++applyperm :: [Nat] -> CSCtx o -> MExp o -> [CSPat o] -> (CSCtx o, MExp o, [CSPat o])+applyperm perm ctx tt pats =+ let ctx1 = map (\(HI hid (id, t)) -> HI hid (id, rename (ren perm) t)) ctx+     ctx2 = map (\i -> ctx1 !! i) perm+     ctx3 = seqctx ctx2+     tt' = rename (ren perm) tt+     pats' = map (renamep (ren perm)) pats+ in (ctx3, tt', pats')++ren n i = let Just j = findIndex (== i) n in j++rename :: (Nat -> Nat) -> MExp o -> MExp o+rename ren = r 0+ where+  r j e =+   case rm e of+         App uid ok elr args -> case elr of+          Var v | v >= j -> mm $ App uid ok (Var (ren (v - j) + j)) (rs j args)+          _ -> mm $ App uid ok elr (rs j args)+         Lam hid (Abs mid e) -> mm $ Lam hid (Abs mid (r (j + 1) e))+         Pi uid hid possdep it (Abs mid ot) -> mm $ Pi uid hid possdep (r j it) (Abs mid (r (j + 1) ot))+         Sort{} -> e++         AbsurdLambda{} -> e+++  rs j es =+   case rm es of+    ALNil -> mm $ ALNil+    ALCons hid a as -> mm $ ALCons hid (r j a) (rs j as)++    ALProj{} -> __IMPOSSIBLE__+++    ALConPar as -> mm $ ALConPar (rs j as)+++renamep :: (Nat -> Nat) -> CSPat o -> CSPat o+renamep ren = r+ where+  r (HI hid (CSPatConApp c pats)) = HI hid (CSPatConApp c (map r pats))+  r (HI hid (CSPatVar i)) = HI hid (CSPatVar $ ren i)+  r (HI hid (CSPatExp e)) = HI hid (CSPatExp $ rename ren e)++  r p@(HI _ CSOmittedArg) = p++  r _ = __IMPOSSIBLE__++seqctx :: CSCtx o -> CSCtx o+seqctx = r (-1)+ where+  r _ [] = []+  r n (HI hid (id, t) : ctx) = HI hid (id, lift n t) : r (n - 1) ctx+-- --------------------++depthofvar :: Nat -> [CSPat o] -> Nat+depthofvar v pats =+ let [depth] = concatMap (f 0) (drophid pats)+     f d (CSPatConApp _ pats) = concatMap (f (d + 1)) (drophid pats)+     f d (CSPatVar v') = if v == v' then [d] else []+     f _ _ = []+ in depth++-- --------------------++localTerminationEnv :: [CSPat o] -> ([Nat], Nat, [Nat])+localTerminationEnv pats =+ let g _ [] = ([], 0, [])+     g i (hp@(HI _ p) : ps) = case p of+      CSPatConApp{} ->+       let (size, vars) = h hp+           (is, size', vars') = g (i + 1) ps+       in (i : is, size + size', vars ++ vars')+      _ -> g (i + 1) ps+     h (HI _ p) = case p of+      CSPatConApp c ps ->+       let (size, vars) = hs ps+       in (size + 1, vars)+      CSPatVar n -> (0, [n])+      CSPatExp e -> he e+      _ -> (0, [])+     hs [] = (0, [])+     hs (p : ps) =+      let (size, vars) = h p+          (size', vars') = hs ps+      in (size + size', vars ++ vars')+     he e = case rm e of+      App _ _ (Var v) _ -> (0, [v])+      App _ _ (Const _) args ->+       let (size, vars) = hes args+       in (size + 1, vars)+      _ -> (0, [])+     hes as = case rm as of+      ALNil -> (0, [])+      ALCons _ a as ->+       let (size, vars) = he a+           (size', vars') = hes as+       in (size + size', vars ++ vars')++      ALProj{} -> __IMPOSSIBLE__+++      ALConPar as -> hes as++ in g 0 pats+++localTerminationSidecond :: ([Nat], Nat, [Nat]) -> ConstRef o -> MExp o -> EE (MyPB o)+localTerminationSidecond (is, size, vars) reccallc b =+  ok b+ where+     ok e = mmpcase (False, prioNo, Nothing) e $ \e -> case e of+      App _ _ elr args -> mpret $ Sidecondition+       (oks args)+       (case elr of+          Const c | c == reccallc -> if size == 0 then mpret (Error "localTerminationSidecond: no size to decrement") else okcall 0 size vars args+          _ -> mpret OK+       )+      Lam _ (Abs _ e) -> ok e+      Pi _ _ _ it (Abs _ ot) -> mpret $ Sidecondition+       (ok it)+       (ok ot)+      Sort{} -> mpret OK++      AbsurdLambda{} -> mpret OK+++     oks as = mmpcase (False, prioNo, Nothing) as $ \as -> case as of+      ALNil -> mpret OK+      ALCons _ a as -> mpret $ Sidecondition+       (ok a)+       (oks as)++      ALProj eas _ _ as -> mpret $ Sidecondition (oks eas) (oks as)+++      ALConPar as -> oks as++     okcall i size vars as = mmpcase (False, prioNo, Nothing) as $ \as -> case as of+      ALNil -> mpret OK+      ALCons _ a as | elem i is ->+       mbpcase prioNo Nothing (he size vars a) $ \x -> case x of+        Nothing -> mpret $ Error "localTerminationSidecond: reccall not ok"+        Just (size', vars') -> okcall (i + 1) size' vars' as+      ALCons _ a as -> okcall (i + 1) size vars as++      ALProj{} -> mpret OK+++      ALConPar as -> __IMPOSSIBLE__++     he size vars e = mmcase e $ \e -> case e of+      App _ _ (Var v) _ ->+       case remove v vars of+        Nothing -> mbret Nothing+        Just vars' -> mbret $ Just (size, vars')+      App _ _ (Const c) args -> do+       cd <- readIORef c+       case cdcont cd of+        Constructor{} ->+         if size == 1 then+          mbret Nothing+         else+          hes (size - 1) vars args+        _ -> mbret Nothing+      _ -> mbret Nothing+     hes size vars as = mmcase as $ \as -> case as of+      ALNil -> mbret $ Just (size, vars)+      ALCons _ a as ->+       mbcase (he size vars a) $ \x -> case x of+        Nothing -> mbret Nothing+        Just (size', vars') -> hes size' vars' as++      ALProj{} -> __IMPOSSIBLE__+++      ALConPar as -> __IMPOSSIBLE__++     remove _ [] = Nothing+     remove x (y : ys) | x == y = Just ys+     remove x (y : ys) = case remove x ys of {Nothing -> Nothing; Just ys' -> Just (y : ys')}++-- ---------------------------+++getblks :: MExp o -> IO [Nat]+getblks tt = do+ NotB (hntt, blks) <- hnn_blks (Clos [] tt)+ case f blks of+  Just v -> return [v]+  Nothing -> case hntt of+   HNApp _ (Const c) args -> do+    cd <- readIORef c+    case cdcont cd of+     Datatype{} -> g [] args+     _ -> return []+   _ -> return []+ where+  f blks = case blks of+             (_:_) -> case last blks of+              HNApp _ (Var v) _ -> Just v+              _ -> Nothing+             _ -> Nothing+  g vs args = do+   NotB hnargs <- hnarglist args+   case hnargs of+    HNALCons _ a as -> do+     NotB (_, blks) <- hnn_blks a+     let vs' = case f blks of+                Just v | v `notElem` vs -> v : vs+                _ -> vs+     g vs' as+    _ -> return vs+-- ---------------------------
src/full/Agda/Auto/Convert.hs view
@@ -1,25 +1,32 @@+{-# LANGUAGE CPP #-}+ module Agda.Auto.Convert where +import Agda.Utils.Impossible+#include "../undefined.h"+ import Data.IORef import Data.Map (Map) import qualified Data.Map as Map import Control.Monad.State import Control.Monad.Error -import qualified Agda.Syntax.Literal as I import qualified Agda.Syntax.Internal as I+import qualified Agda.Syntax.Literal as I import qualified Agda.Syntax.Common as C import qualified Agda.Syntax.Abstract.Name as AN+import qualified Agda.Syntax.Abstract as A+import qualified Agda.Syntax.Position as SP import qualified Agda.TypeChecking.Monad.Base as MB-import Agda.TypeChecking.Monad.Signature (getConstInfo)-import Agda.Utils.Permutation (Permutation(Perm))+import Agda.TypeChecking.Monad.Signature (getConstInfo, getDefFreeVars, getImportedSignature)+import Agda.Utils.Permutation (Permutation(Perm), idP) import Agda.Interaction.BasicOps (rewrite, Rewrite(..)) import Agda.TypeChecking.Monad.Base (mvJudgement, getMetaInfo, ctxEntry, envContext, clEnv, Judgement(HasType)) import Agda.TypeChecking.Monad.MetaVars (lookupMeta, withMetaInfo) import Agda.TypeChecking.Monad.Context (getContextArgs) import Agda.TypeChecking.Monad.Constraints (lookupConstraint, getConstraints)-import Agda.TypeChecking.Substitute (piApply)-import Agda.TypeChecking.Reduce (Normalise, normalise)+import Agda.TypeChecking.Substitute (piApply, raise)+import Agda.TypeChecking.Reduce (Normalise, normalise, instantiate) import Agda.TypeChecking.EtaContract (etaContract) import Agda.TypeChecking.Primitive (constructorForm) import Agda.TypeChecking.Free (freeIn)@@ -27,13 +34,16 @@ import Agda.Auto.NarrowingSearch import Agda.Auto.Syntax +import Agda.Auto.CaseSplit hiding (lift) + norm :: Normalise t => t -> MB.TCM t norm x = normalise x+--norm x = return x -type O = (Maybe Int, AN.QName)  -- Nothing - Def, Just npar - Con with npar parameters which don't appear in Agda+type O = (Maybe Int, AN.QName) -- Nothing - Def, Just npar - Con with npar parameters which don't appear in Agda -data TMode = TMAll  -- can be extended to distinguish between different modes (all, only def)+data TMode = TMAll -- can be extended to distinguish between different modes (all, only def)  deriving Eq  type MapS a b = (Map a b, [a])@@ -48,17 +58,18 @@ data S = S {sConsts :: MapS AN.QName (TMode, ConstRef O),             sMetas :: MapS I.MetaId (Metavar (Exp O) (RefInfo O), Maybe (MExp O, [MExp O]), [I.MetaId]),             sEqs :: MapS Int (Maybe (Bool, MExp O, MExp O)),-            sCurMeta :: Maybe I.MetaId+            sCurMeta :: Maybe I.MetaId,+            sMainMeta :: I.MetaId            }  type TOM = StateT S MB.TCM -tomy :: I.MetaId -> [(Bool, AN.QName)] -> MB.TCM ([ConstRef O], Map I.MetaId (Metavar (Exp O) (RefInfo O), MExp O, [MExp O], [I.MetaId]), [(Bool, MExp O, MExp O)], Map AN.QName (TMode, ConstRef O))-tomy imi icns = do+tomy :: I.MetaId -> [(Bool, AN.QName)] -> [I.Type] -> MB.TCM ([ConstRef O], [MExp O], Map I.MetaId (Metavar (Exp O) (RefInfo O), MExp O, [MExp O], [I.MetaId]), [(Bool, MExp O, MExp O)], Map AN.QName (TMode, ConstRef O))+tomy imi icns typs = do  eqs <- getEqs  let-  r :: TOM ()-  r = do+  r :: [AN.QName] -> TOM [AN.QName]+  r projfcns = do    nxt <- popMapS sConsts (\x y -> y {sConsts = x})    case nxt of     Just cn -> do@@ -70,28 +81,40 @@      typ <- lift $ norm typ      typ' <- tomyType typ      let clausesToDef clauses = do-           clauses' <- tomyClauses clauses-           let narg = case clauses of-                        []                               -> 0+           let clauses' = map I.translatedClause clauses+           clauses'' <- tomyClauses clauses'+           let narg = case clauses' of+                        [] -> 0                         I.Clause {I.clausePats = xs} : _ -> length xs-           return $ Def narg clauses'-     cont <- case defn of-      MB.Axiom {} -> return Postulate-      MB.Function  {MB.funClauses  =      clauses} -> clausesToDef clauses+           return (Def narg clauses'' Nothing Nothing, [])+     (cont, projfcns2) <- case defn of+      MB.Axiom {} -> return (Postulate, [])+      MB.Function {MB.funClauses = clauses} -> clausesToDef clauses       MB.Primitive {MB.primClauses = Just clauses} -> clausesToDef clauses-      MB.Primitive {} -> throwError $ strMsg "Primitive functions are not supported"+      MB.Primitive {} -> throwError $ strMsg "Auto: Primitive functions are not supported"       MB.Datatype {MB.dataCons = cons} -> do-       cons' <- mapM (\con -> getConst True con TMAll) cons-       return $ Datatype cons'-      MB.Record {MB.recConType = contyp} -> do-       contyp' <- tomyType contyp+       cons2 <- mapM (\con -> getConst True con TMAll) cons+       return (Datatype cons2 [], [])+      MB.Record {MB.recFields = fields, MB.recTel = tel} -> do -- the value of recPars seems unreliable or don't know what it signifies+       let pars n (I.El _ (I.Pi it (I.Abs _ typ))) = C.Arg (C.argHiding it) (C.argRelevance it) (I.Var n []) : pars (n - 1) typ+           pars _ (I.El _ _) = []+           contyp npar I.EmptyTel = I.El (I.mkType 0 {- arbitrary -}) (I.Def cn (pars (npar - 1) typ))+           contyp npar (I.ExtendTel it (I.Abs v tel)) = I.El (I.mkType 0 {- arbitrary -}) (I.Pi it (I.Abs v (contyp (npar + 1) tel)))+       contyp' <- tomyType $ contyp 0 tel        cc <- lift $ liftIO $ readIORef c-       let Datatype [con] = cdcont cc+       let Datatype [con] [] = cdcont cc        lift $ liftIO $ modifyIORef con (\cdef -> cdef {cdtype = contyp'})-       return $ cdcont cc-      MB.Constructor {} -> return Constructor++       projfcns <- mapM (\name -> getConst False name TMAll) (map C.unArg fields)++       return (Datatype [con] projfcns, []{-map snd fields-})+      MB.Constructor {MB.conData = dt} -> do+       _ <- getConst False dt TMAll -- make sure that datatype is included+       cc <- lift $ liftIO $ readIORef c+       let (Just nomi, _) = cdorigin cc+       return (Constructor (nomi - cddeffreevars cc), [])      lift $ liftIO $ modifyIORef c (\cdef -> cdef {cdtype = typ', cdcont = cont})-     r+     r $ projfcns2 ++ projfcns     Nothing -> do      nxt <- popMapS sMetas (\x y -> y {sMetas = x})      case nxt of@@ -106,8 +129,9 @@        msol <- case MB.mvInstantiation mv of                      MB.InstV{} ->                       lift $ withMetaInfo (getMetaInfo mv) $ do-                       args  <- getContextArgs-                       sol <- norm (I.MetaV mi args)+                       args <- getContextArgs+                       --sol <- norm (I.MetaV mi args)+                       sol <- instantiate (I.MetaV mi args)                        return $ Just sol                      _ -> return Nothing        case msol of@@ -130,7 +154,7 @@        ctx' <- mapM tomyType localVars        modify (\s -> s {sCurMeta = Nothing})        modify (\s -> s {sMetas = (Map.adjust (\(m, Nothing, deps) -> (m, Just (typ', ctx'), deps)) mi (fst $ sMetas s), snd $ sMetas s)})-       r+       r projfcns       Nothing -> do        nxt <- popMapS sEqs (\x y -> y {sEqs = x})        case nxt of@@ -139,36 +163,41 @@          e' <- tomyExp e          i' <- tomyExp i          modify (\s -> s {sEqs = (Map.adjust (\Nothing -> Just (ineq, e', i')) eqi (fst $ sEqs s), snd $ sEqs s)})-         r+         r projfcns         Nothing ->-         return ()- (icns', s) <- runStateT+         return projfcns+ ((icns', typs'), s) <- runStateT   (do _ <- getMeta imi       icns' <- mapM (\(iscon, name) -> getConst iscon name TMAll) icns-      r-      return icns'-  ) (S {sConsts = initMapS, sMetas = initMapS, sEqs = initMapS, sCurMeta = Nothing})- return (icns', Map.map (\(x, Just (y, z), w) -> (x, y, z, w)) (fst (sMetas s)), map (\(Just x) -> x) $ Map.elems (fst (sEqs s)), fst (sConsts s))- where+      typs' <- mapM tomyType typs+      projfcns <- r []+      projfcns' <- mapM (\name -> getConst False name TMAll) projfcns+      [] <- r []+      return (projfcns' ++ icns', typs')+  ) (S {sConsts = initMapS, sMetas = initMapS, sEqs = initMapS, sCurMeta = Nothing, sMainMeta = imi})+ lift $ liftIO $ mapM_ categorizedecl icns'+ return (icns', typs', Map.map (\(x, Just (y, z), w) -> (x, y, z, w)) (fst (sMetas s)), map (\(Just x) -> x) $ Map.elems (fst (sEqs s)), fst (sConsts s))  getConst :: Bool -> AN.QName -> TMode -> TOM (ConstRef O) getConst iscon name mode = do  def <- lift $ getConstInfo name  case MB.theDef def of-  MB.Record{} -> do+  MB.Record {MB.recCon = conname} -> do    cmap <- fst `liftM` gets sConsts    case Map.lookup name cmap of     Just (mode', c) ->      if iscon then do       cd <- lift $ liftIO $ readIORef c-      let Datatype [con] = cdcont cd+      let Datatype [con] _ = cdcont cd       return con      else       return c     Nothing -> do-     def <- lift $ getConstInfo name-     ccon <- lift $ liftIO $ newIORef (ConstDef {cdname = show name, cdorigin = (Just (fromIntegral $ I.arity (MB.defType def)), name), cdtype = undefined, cdcont = Constructor})-     c <- lift $ liftIO $ newIORef (ConstDef {cdname = show name, cdorigin = (Nothing, name), cdtype = undefined, cdcont = Datatype [ccon]})+     mainm <- gets sMainMeta+     dfv <- lift $ getdfv mainm name+     let nomi = fromIntegral $ I.arity (MB.defType def)+     ccon <- lift $ liftIO $ newIORef (ConstDef {cdname = show name ++ ".CONS", cdorigin = (Just nomi, conname), cdtype = __IMPOSSIBLE__, cdcont = Constructor (nomi - fromIntegral dfv), cddeffreevars = fromIntegral dfv}) -- ?? correct value of deffreevars for records?+     c <- lift $ liftIO $ newIORef (ConstDef {cdname = show name, cdorigin = (Nothing, name), cdtype = __IMPOSSIBLE__, cdcont = Datatype [ccon] [], cddeffreevars = fromIntegral dfv}) -- ?? correct value of deffreevars for records?      modify (\s -> s {sConsts = (Map.insert name (mode, c) cmap, name : snd (sConsts s))})      return $ if iscon then ccon else c   _ -> do@@ -177,16 +206,21 @@     Just (mode', c) ->      return c     Nothing -> do-     iscon' <- if iscon then do-       def <- lift $ getConstInfo name-       let MB.Constructor {MB.conPars = npar} = MB.theDef def-       return $ Just $ fromIntegral npar+     (miscon, sname) <- if iscon then do+       let MB.Constructor {MB.conPars = npar, MB.conData = dname} = MB.theDef def+       return (Just (fromIntegral npar), show dname ++ "." ++ show (I.qnameName name))       else-       return Nothing-     c <- lift $ liftIO $ newIORef (ConstDef {cdname = show name, cdorigin = (iscon', name), cdtype = undefined, cdcont = undefined})+       return (Nothing, show name)+     mainm <- gets sMainMeta+     dfv <- lift $ getdfv mainm name+     c <- lift $ liftIO $ newIORef (ConstDef {cdname = sname, cdorigin = (miscon, name), cdtype = __IMPOSSIBLE__, cdcont = __IMPOSSIBLE__, cddeffreevars = fromIntegral dfv})      modify (\s -> s {sConsts = (Map.insert name (mode, c) cmap, name : snd (sConsts s))})      return c +getdfv mainm name = do+ mv <- lookupMeta mainm+ withMetaInfo (getMetaInfo mv) $ getDefFreeVars name+ getMeta :: I.MetaId -> TOM (Metavar (Exp O) (RefInfo O)) getMeta name = do  mmap <- fst `liftM` gets sMetas@@ -194,7 +228,7 @@   Just (m, _, _) ->    return m   Nothing -> do-   m <- lift $ liftIO $ newMeta Nothing+   m <- lift $ liftIO initMeta    modify (\s -> s {sMetas = (Map.insert name (m, Nothing, []) mmap, name : snd (sMetas s))})    return m @@ -229,7 +263,7 @@   Just cl' -> cl' : cls'   Nothing -> cls' -tomyClause I.Clause {I.clausePerm = Perm n ps, I.clausePats = pats, I.clauseBody = body} = do+tomyClause cl@(I.Clause {I.clausePerm = Perm n ps, I.clausePats = pats, I.clauseBody = body}) = do  pats' <- mapM tomyPat pats  body' <- tomyBody body  return $ case body' of@@ -237,16 +271,16 @@            Nothing -> Nothing  tomyPat p = case C.unArg p of- I.VarP _ -> return PatVar- I.DotP _ -> return PatExp- I.ConP n pats -> do+ I.VarP n -> return $ PatVar (show n)+ I.DotP _ -> return $ PatVar "_" -- because Agda includes these when referring to variables in the body+ I.ConP n _ pats -> do   c <- getConst True n TMAll   pats' <- mapM tomyPat pats   def <- lift $ getConstInfo n   cc <- lift $ liftIO $ readIORef c   let Just npar = fst $ cdorigin cc   return $ PatConApp c (replicate (fromIntegral npar) PatExp ++ pats')- I.LitP _ -> throwError $ strMsg "Literals in patterns are not supported"+ I.LitP _ -> throwError $ strMsg "Auto: Literals in patterns are not supported"  tomyBody (I.Body t) = do  t <- lift $ norm t@@ -268,25 +302,24 @@ weaken _ e@(Meta m) = e weaken i (NotM e) =  case e of-  App elr as ->+  App uid okh elr as ->    let elr' = case elr of                Var v -> if v >= i then Var (v + 1) else elr                Const{} -> elr        as' = weakens i as-   in  NotM $ App elr' as'+   in NotM $ App uid okh elr' as'   Lam hid (Abs mid t) ->    let t' = weaken (i + 1) t-   in  NotM $ Lam hid (Abs mid t')-  Pi hid possdep x (Abs mid y) -> +   in NotM $ Lam hid (Abs mid t')+  Pi uid hid possdep x (Abs mid y) ->    let x' = weaken i x        y' = weaken (i + 1) y-   in  NotM $ Pi hid possdep x' (Abs mid y')-  Fun hid x y ->-   let x' = weaken i x-       y' = weaken i y-   in  NotM $ Fun hid x' y'+   in NotM $ Pi uid hid possdep x' (Abs mid y')   Sort{} -> NotM e +  AbsurdLambda{} -> NotM e++ weakens :: Int -> MArgList O -> MArgList O weakens _ as@(Meta m) = as weakens i (NotM as) =@@ -295,60 +328,68 @@   ALCons hid x xs ->    let x' = weaken i x        xs' = weakens i xs-   in  NotM $ ALCons hid x' xs'+   in NotM $ ALCons hid x' xs'++  ALProj{} -> __IMPOSSIBLE__+   ALConPar xs ->    let xs' = weakens i xs-   in  NotM $ ALConPar xs'+   in NotM $ ALConPar xs'   tomyType :: I.Type -> TOM (MExp O)-tomyType (I.El _ t) = tomyExp t  -- sort info is thrown away+tomyType (I.El _ t) = tomyExp t -- sort info is thrown away  tomyExp :: I.Term -> TOM (MExp O) tomyExp (I.Var v as) = do  as' <- tomyExps as- return $ NotM $ App (Var $ fromIntegral v) as'+ return $ NotM $ App Nothing (NotM OKVal) (Var $ fromIntegral v) as' tomyExp (I.Lam hid (I.Abs name b)) = do  b' <- tomyExp b  return $ NotM $ Lam (cnvh hid) (Abs (Id name) b') tomyExp t@(I.Lit{}) = do  t <- lift $ constructorForm t  case t of-  I.Lit{} -> throwError $ strMsg "Literals in terms are not supported"+  I.Lit{} -> throwError $ strMsg "Auto: Literals in terms are not supported"   _ -> tomyExp t tomyExp (I.Def name as) = do  c <- getConst False name TMAll  as' <- tomyExps as- return $ NotM $ App (Const c) as'+ return $ NotM $ App Nothing (NotM OKVal) (Const c) as' tomyExp (I.Con name as) = do  c <- getConst True name TMAll  as' <- tomyExps as  def <- lift $ getConstInfo name  cc <- lift $ liftIO $ readIORef c  let Just npar = fst $ cdorigin cc- return $ NotM $ App (Const c) (foldl (\x _ -> NotM $ ALConPar x) as' [1..npar])-tomyExp (I.Pi (C.Arg hid x) (I.Abs name y)) = do+ return $ NotM $ App Nothing (NotM OKVal) (Const c) (foldl (\x _ -> NotM $ ALConPar x) as' [1..npar])+tomyExp (I.Pi (C.Arg hid _ x) (I.Abs name y)) = do  x' <- tomyType x  y' <- tomyType y- return $ NotM $ Pi (cnvh hid) (freeIn 0 y) x' (Abs (Id name) y')-tomyExp (I.Fun (C.Arg hid x) y) = do+ return $ NotM $ Pi Nothing (cnvh hid) (Agda.TypeChecking.Free.freeIn 0 y) x' (Abs (Id name) y')+tomyExp (I.Fun (C.Arg hid _ x) y) = do  x' <- tomyType x  y' <- tomyType y- return $ NotM $ Fun (cnvh hid) x' y'-tomyExp (I.Sort (I.Type (I.Lit (I.LitLevel _ l)))) = return $ NotM $ Sort $ SortLevel $ fromIntegral l-tomyExp (I.Sort (I.MetaS _ _)) = throwError $ strMsg "Searching for type place holders is not supported"-tomyExp t@(I.Sort _) = throwError $ strMsg $ "Meta variable kind not supported: " ++ show t-tomyExp (I.MetaV mid _) = do- mcurmeta <- gets sCurMeta- case mcurmeta of-  Nothing -> return ()-  Just curmeta ->-   modify (\s -> s {sMetas = (Map.adjust (\(m, x, deps) -> (m, x, mid : deps)) curmeta (fst $ sMetas s), snd $ sMetas s)})- m <- getMeta mid- return $ Meta m+ return $ NotM $ Pi Nothing (cnvh hid) False x' (Abs NoId (weaken 0 y'))+tomyExp (I.Sort (I.Type (I.Lit (I.LitLevel _ l)))) = return $ NotM $ Sort $ Set $ fromIntegral l+tomyExp (I.Sort (I.MetaS _ _)) = throwError $ strMsg "Auto: Searching for a type of arbitrary set level is not supported"+tomyExp (I.Sort _) = return $ NotM $ Sort UnknownSort+tomyExp t@I.MetaV{} = do+ t <- lift $ instantiate t+ case t of+  I.MetaV mid _ -> do+   mcurmeta <- gets sCurMeta+   case mcurmeta of+    Nothing -> return ()+    Just curmeta ->+     modify (\s -> s {sMetas = (Map.adjust (\(m, x, deps) -> (m, x, mid : deps)) curmeta (fst $ sMetas s), snd $ sMetas s)})+   m <- getMeta mid+   return $ Meta m+  _ -> tomyExp t+tomyExp (I.DontCare) = return $ NotM $ dontCare  tomyExps [] = return $ NotM ALNil-tomyExps (C.Arg hid a : as) = do+tomyExps (C.Arg hid _ a : as) = do  a' <- tomyExp a  as' <- tomyExps as  return $ NotM $ ALCons (cnvh hid) a' as'@@ -365,15 +406,16 @@ fmExp m (I.Var _ as) = fmExps m as fmExp m (I.Lam _ (I.Abs _ b)) = fmExp m b fmExp m (I.Lit _) = False-fmExp m (I.Def _ as) =  fmExps m as-fmExp m (I.Con _ as) =  fmExps m as-fmExp m (I.Pi (C.Arg _ x) (I.Abs _ y)) = fmType m x || fmType m y-fmExp m (I.Fun (C.Arg _ x) y) = fmType m x || fmType m y+fmExp m (I.Def _ as) = fmExps m as+fmExp m (I.Con _ as) = fmExps m as+fmExp m (I.Pi x (I.Abs _ y)) = fmType m (C.unArg x) || fmType m y+fmExp m (I.Fun x y) = fmType m (C.unArg x) || fmType m y fmExp m (I.Sort _) = False fmExp m (I.MetaV mid _) = mid == m+fmExp m (I.DontCare) = False  fmExps m [] = False-fmExps m (C.Arg _ a : as) = fmExp m a || fmExps m as+fmExps m (a : as) = fmExp m (C.unArg a) || fmExps m as  -- --------------------------------------------- @@ -388,53 +430,315 @@  frommyType e = do  e' <- frommyExp e- return $ I.El (I.mkType 0) e'  -- 0 is arbitrary, sort no read by Agda when reifying-+ return $ I.El (I.mkType 0) e'  -- 0 is arbitrary, sort not read by Agda when reifying frommyExp :: MExp O -> IO I.Term frommyExp (Meta m) = do  bind <- readIORef $ mbind m  case bind of-  Nothing -> error "frommyExp: meta not bound"+  Nothing -> __IMPOSSIBLE__   Just e -> frommyExp (NotM e) frommyExp (NotM e) =  case e of-  App (Var v) as -> do-   as' <- frommyExps 0 as-   return $ I.Var (fromIntegral v) as'-  App (Const c) as -> do+  App _ _ (Var v) as ->+   frommyExps 0 as (I.Var (fromIntegral v) [])+  App _ _ (Const c) as -> do    cdef <- readIORef c    let (iscon, name) = cdorigin cdef        (ndrop, h) = case iscon of {Just n -> (n, I.Con); Nothing -> (0, I.Def)}-   as' <- frommyExps ndrop as-   return $ h name as'+   frommyExps ndrop as (h name [])   Lam hid (Abs mid t) -> do    t' <- frommyExp t    return $ I.Lam (icnvh hid) (I.Abs (case mid of {NoId -> "x"; Id id -> id}) t')-  Pi hid _ x (Abs mid y) -> do-   x' <- frommyType x-   y' <- frommyType y-   return $ I.Pi (C.Arg (icnvh hid) x') (I.Abs (case mid of {NoId -> "x"; Id id -> id}) y')-  Fun hid x y -> do+  Pi _ hid _ x (Abs mid y) -> do    x' <- frommyType x    y' <- frommyType y-   return $ I.Fun (C.Arg (icnvh hid) x') y'-  Sort (SortLevel l) ->+   return $ I.Pi (C.Arg (icnvh hid) C.Relevant x') (I.Abs (case mid of {NoId -> "x"; Id id -> id}) y')+   -- maybe have case for Pi where possdep is False which produces Fun (and has to unweaken y), return $ I.Fun (C.Arg (icnvh hid) x') y'+  Sort (Set l) ->    return $ I.Sort (I.mkType (fromIntegral l))-  Sort Type -> error "frommyExp: Sort Type encountered"+  Sort Type -> __IMPOSSIBLE__+  Sort UnknownSort -> return I.DontCare+  -- Sort UnknownSort -> return $ I.Sort (I.mkType 0) -- hoping that it's thrown away -frommyExps :: Nat -> MArgList O -> IO I.Args-frommyExps ndrop (Meta m) = do+  AbsurdLambda hid ->+   return $ I.Lam (icnvh hid) (I.Abs abslamvarname (I.Var 0 []))+++frommyExps :: Nat -> MArgList O -> I.Term -> IO I.Term+frommyExps ndrop (Meta m) trm = do  bind <- readIORef $ mbind m  case bind of-  Nothing -> error "frommyExps: meta not bound"-  Just e -> frommyExps ndrop (NotM e)-frommyExps ndrop (NotM as) =+  Nothing -> __IMPOSSIBLE__+  Just e -> frommyExps ndrop (NotM e) trm+frommyExps ndrop (NotM as) trm =  case as of-  ALNil -> return []-  ALCons _ _ xs | ndrop > 0 -> frommyExps (ndrop - 1) xs+  ALNil -> return trm+  ALCons _ _ xs | ndrop > 0 -> frommyExps (ndrop - 1) xs trm   ALCons hid x xs -> do    x' <- frommyExp x-   xs' <- frommyExps ndrop xs-   return $ C.Arg (icnvh hid) x' : xs'-  ALConPar _ -> error "ConPar should not occur here"+   frommyExps ndrop xs (addend (C.Arg (icnvh hid) C.Relevant x') trm) +  ALProj eas idx hid xs -> do+   idx <- expandbind idx+   let c = case idx of+            NotM c -> c+            Meta{} -> __IMPOSSIBLE__+   cdef <- readIORef c+   let name = snd $ cdorigin cdef+   trm2 <- frommyExps 0 eas (I.Def name [])+   frommyExps 0 xs (addend (C.Arg (icnvh hid) C.Relevant trm) trm2)++  ALConPar xs | ndrop > 0 -> frommyExps (ndrop - 1) xs trm+  ALConPar _ -> __IMPOSSIBLE__+ where+  addend x (I.Var h xs) = I.Var h (xs ++ [x])+  addend x (I.Con h xs) = I.Con h (xs ++ [x])+  addend x (I.Def h xs) = I.Def h (xs ++ [x])+  addend _ _ = __IMPOSSIBLE__++-- --------------------------------++abslamvarname = "\0absurdlambda"++modifyAbstractExpr :: A.Expr -> A.Expr+modifyAbstractExpr = f+ where+  f (A.App i e1 (C.Arg h r (C.Named n e2))) = A.App i (f e1) (C.Arg h r (C.Named n (f e2)))+  f (A.Lam i (A.DomainFree h n) _) | show n == abslamvarname = A.AbsurdLam i h+  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.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 cl = cl++-- ---------------------------------+++constructPats :: Map AN.QName (TMode, ConstRef O) -> I.MetaId -> I.Clause -> MB.TCM ([(FMode, MId)], [CSPat O])+constructPats cmap mainm clause = do+ let cnvps ns [] = return (ns, [])+     cnvps ns (p : ps) = do+      (ns', ps') <- cnvps ns ps+      (ns'', p') <- cnvp ns' p+      return (ns'', p' : ps')+     cnvp ns p =+      let hid = cnvh $ C.argHiding p+      in case C.unArg p of+       I.VarP n -> return ((hid, Id n) : ns, HI hid (CSPatVar $ length ns))+       I.ConP c _ ps -> do+        (c2, _) <- runStateT (getConst True c TMAll) (S {sConsts = (cmap, []), sMetas = initMapS, sEqs = initMapS, sCurMeta = Nothing, sMainMeta = mainm})+        (ns', ps') <- cnvps ns ps+        cc <- liftIO $ readIORef c2+        let Just npar = fst $ cdorigin cc+        return (ns', HI hid (CSPatConApp c2 (replicate (fromIntegral npar) (HI Hidden CSOmittedArg) ++ ps')))+       I.DotP t -> do+        (t2, _) <- runStateT (tomyExp t) (S {sConsts = (cmap, []), sMetas = initMapS, sEqs = initMapS, sCurMeta = Nothing, sMainMeta = mainm})+        return (ns, HI hid (CSPatExp t2))+       _ -> __IMPOSSIBLE__+ (names, pats) <- cnvps [] (I.clausePats clause)+ return (reverse names, pats)+++frommyClause :: (CSCtx O, [CSPat O], Maybe (MExp O)) -> IO I.Clause+frommyClause (ids, pats, mrhs) = do+ let ctel [] = return I.EmptyTel+     ctel (HI hid (mid, t) : ctx) = do+      let Id id = mid+      tel <- ctel ctx+      t' <- frommyType t+      return $ I.ExtendTel (C.Arg (icnvh hid) C.Relevant t') (I.Abs id tel)+ tel <- ctel $ reverse ids+ let getperms 0 [] perm nv = return (perm, nv)+     getperms n [] _ _ = __IMPOSSIBLE__+     getperms 0 (p : ps) perm nv = do+      (perm, nv) <- getperm p perm nv+      getperms 0 ps perm nv+     getperms n (HI _ CSPatExp{} : ps) perm nv = getperms (n - 1) ps perm nv+     getperms n (HI _ CSOmittedArg{} : ps) perm nv = getperms (n - 1) ps perm nv+     getperms n (_ : _) _ _ = __IMPOSSIBLE__+     getperm (HI _ p) perm nv =+      case p of+       --CSPatVar v -> return (length ids + nv - 1 - v : perm, nv)+       CSPatVar v -> return ((length ids - 1 - v, nv) : perm, nv + 1)+       CSPatConApp c ps -> do+        cdef <- readIORef c+        let (Just ndrop, _) = cdorigin cdef+        getperms ndrop ps perm nv+       CSPatExp e -> return (perm, nv + 1)+       _ -> __IMPOSSIBLE__+ (rperm, nv) <- getperms 0 pats [] 0+ let --perm = reverse rperm+     perm = map (\i -> let Just x = lookup i rperm in x) [0..length ids - 1]+     --renperm = map (\i -> length ids + nv - 1 - i) rperm+     --renm = rename (\i -> renperm !! i)+     cnvps 0 [] = return []+     cnvps n [] = __IMPOSSIBLE__+     cnvps 0 (p : ps) = do+      p' <- cnvp p+      ps' <- cnvps 0 ps+      return (p' : ps')+     cnvps n (HI _ CSPatExp{} : ps) = cnvps (n - 1) ps+     cnvps n (HI _ CSOmittedArg{} : ps) = cnvps (n - 1) ps+     cnvps n (_ : _) = __IMPOSSIBLE__+     cnvp (HI hid p) = do+      p' <- case p of+       CSPatVar v -> return (I.VarP $ let HI _ (Id n, _) = ids !! v in n)+       CSPatConApp c ps -> do+        cdef <- readIORef c+        let (Just ndrop, name) = cdorigin cdef+        ps' <- cnvps ndrop ps+        return (I.ConP name Nothing ps')+       CSPatExp e -> do+        e' <- frommyExp {- renm e -} e  -- rename disabled to match (incorrect?) Agda reification of clauses+        return (I.DotP e')+       CSAbsurd -> __IMPOSSIBLE__ -- CSAbsurd not used+       _ -> __IMPOSSIBLE__+      return $ C.Arg (icnvh hid) C.Relevant p'+ ps <- cnvps 0 pats+ body <- case mrhs of+          Nothing -> return $ I.NoBody+          Just e -> do+           e' <- frommyExp {- renm e -} e  -- rename disabled to match (incorrect?) Agda reification of clauses+           let r 0 = I.Body e'+               r n = I.Bind $ I.Abs "h" $ r (n - 1)+               e'' = r ({-length ids + -}nv)+           return e''+ return $ I.Clause SP.noRange tel (Perm (fromIntegral $ nv{- + length ids-}) (map fromIntegral perm)) ps body++contains_constructor :: [CSPat O] -> Bool+contains_constructor = any f+ where+  f (HI _ p) = case p of+         CSPatConApp{} -> True+         _ -> False+++etaContractBody :: I.ClauseBody -> MB.TCM I.ClauseBody+etaContractBody (I.NoBody) = return I.NoBody+etaContractBody (I.Body b) = etaContract b >>= \b -> return (I.Body b)+etaContractBody (I.NoBind b) = etaContractBody b >>= \b -> return (I.NoBind b)+etaContractBody (I.Bind (I.Abs id b)) = etaContractBody b >>= \b -> return (I.Bind (I.Abs id b))+++-- ---------------------------------++freeIn :: Nat -> MExp o -> Bool+freeIn = f+ where+  mr x = let NotM x' = x in x'+  f v e = case mr e of+   App _ _ elr args -> case elr of+    Var v' | v' == v -> False+    _ -> fs v args+   Lam _ (Abs _ b) -> f (v + 1) b+   Pi _ _ _ it (Abs _ ot) -> f v it && f (v + 1) ot+   Sort{} -> True++   AbsurdLambda{} -> True+++  fs v es = case mr es of+   ALNil -> True+   ALCons _ a as -> f v a && fs v as++   ALProj{} -> __IMPOSSIBLE__+++   ALConPar as -> fs v as+++negtype :: ConstRef o -> MExp o -> MExp o+negtype ee = f 0+ where+  mr x = let NotM x' = x in x'+  f n e = case mr e of+   Pi uid hid possdep it (Abs id ot) -> NotM $ Pi uid hid possdep it (Abs id (f (n + 1) ot))+   _ -> NotM $ Pi Nothing NotHidden False (NotM $ Pi Nothing NotHidden False e (Abs NoId (NotM $ Pi Nothing NotHidden True (NotM $ Sort (Set 0)) (Abs NoId (NotM $ App Nothing (NotM OKVal) (Var 0) (NotM ALNil)))))) (Abs NoId (NotM $ App Nothing (NotM OKVal) (Const ee) (NotM ALNil)))++-- ---------------------------------------++findClauseDeep :: I.MetaId -> MB.TCM (Maybe (AN.QName, I.Clause, Bool))+findClauseDeep m = do+  sig <- getImportedSignature+  let res = do+        def <- Map.elems $ MB.sigDefinitions sig+        MB.Function{MB.funClauses = cs} <- [MB.theDef def]+        c <- map I.translatedClause cs+        unless (peelbinds False findMeta $ I.clauseBody c) []+        return (MB.defName def, c, peelbinds __IMPOSSIBLE__ toplevel $ I.clauseBody c)+  return $ case res of+    [] -> Nothing+    [r] -> Just r+    _ -> __IMPOSSIBLE__+  where+    peelbinds d f = r+     where r b = case b of+                  I.Bind b -> r $ I.absBody b+                  I.NoBind b -> r b+                  I.NoBody -> d+                  I.Body e -> f e+    findMeta e =+     case e of+      I.Var _ as -> findMetas as+      I.Lam _ b -> findMeta (I.absBody b)+      I.Lit{} -> False+      I.Def _ as -> findMetas as+      I.Con _ as -> findMetas as+      I.Pi it ot -> findMetat (C.unArg it) || findMetat (I.absBody ot)+      I.Fun it ot -> findMetat (C.unArg it) || findMetat ot+      I.Sort{} -> False+      I.MetaV m' _  -> m == m'+      I.DontCare -> False+    findMetas = any (findMeta . C.unArg)+    findMetat (I.El _ e) = findMeta e+    toplevel e =+     case e of+      I.MetaV{} -> True+      _ -> False++-- ---------------------------------------++matchType :: Integer -> Integer -> I.Type -> I.Type -> Maybe (Nat, Nat) -- Nat is deffreevars of const, Nat is ctx length of target type, left arg is const type, right is target type+matchType cdfv tctx ctyp ttyp = trmodps cdfv ctyp+ where+  trmodps 0 ctyp = tr 0 0 ctyp+  trmodps n ctyp = case ctyp of+   I.El _ (I.Pi _ ot) -> trmodps (n - 1) (I.absBody ot)+   _ -> __IMPOSSIBLE__+  tr narg na ctyp =+   case ft 0 0 Just ctyp ttyp of+    Just n -> Just (n, narg)+    Nothing -> case ctyp of+     I.El _ (I.Pi _ ot) -> tr (narg + 1) (na + 1) (I.absBody ot)+     I.El _ (I.Fun _ ot) -> tr (narg + 1) na ot+     _ -> Nothing+   where+    ft nl n c (I.El _ e1) (I.El _ e2) = f nl n c e1 e2+    f nl n c e1 e2 = case e1 of+     I.Var v1 as1 | v1 < nl -> case e2 of+      I.Var v2 as2 | v1 == v2 -> fs nl (n + 1) c as1 as2+      _ -> Nothing+     I.Var v1 _ | v1 < nl + na -> c n -- unify vars with no args?+     I.Var v1 as1 -> case e2 of+      I.Var v2 as2 | cdfv + na + nl - v1 == tctx + nl - v2 -> fs nl (n + 1) c as1 as2+      _ -> Nothing+     _ -> case (e1, e2) of+      (I.MetaV{}, _) -> c n+      (_, I.MetaV{}) -> c n+      (I.Lam hid1 b1, I.Lam hid2 b2) | hid1 == hid2 -> f (nl + 1) n c (I.absBody b1) (I.absBody b2)+      (I.Lit lit1, I.Lit lit2) | lit1 == lit2 -> c (n + 1)+      (I.Def n1 as1, I.Def n2 as2) | n1 == n2 -> fs nl (n + 1) c as1 as2+      (I.Con n1 as1, I.Con n2 as2) | n1 == n2 -> fs nl (n + 1) c as1 as2+      (I.Pi (C.Arg hid1 rel1 it1) ot1, I.Pi (C.Arg hid2 rel2 it2) ot2) | hid1 == hid2 -> ft nl n (\n -> ft (nl + 1) n c (I.absBody ot1) (I.absBody ot2)) it1 it2+      (I.Fun (C.Arg hid1 rel1 it1) ot1, I.Fun (C.Arg hid2 rel2 it2) ot2) | hid1 == hid2 -> ft nl n (\n -> ft nl n c ot1 ot2) it1 it2+      (I.Fun (C.Arg hid1 rel1 it1) ot1, I.Pi (C.Arg hid2 rel2 it2) ot2) | hid1 == hid2 -> ft nl n (\n -> ft (nl + 1) n c (raise 1 ot1) (I.absBody ot2)) it1 it2+      (I.Pi (C.Arg hid1 rel1 it1) ot1, I.Fun (C.Arg hid2 rel2 it2) ot2) | hid1 == hid2 -> ft nl n (\n -> ft (nl + 1) n c (I.absBody ot1) (raise 1 ot2)) it1 it2+      (I.Sort{}, I.Sort{}) -> c n -- sloppy+      _ -> Nothing+    fs nl n c es1 es2 = case (es1, es2) of+     ([], []) -> c n+     (C.Arg hid1 rel1 e1 : es1, C.Arg hid2 rel2 e2 : es2) | hid1 == hid2 -> f nl n (\n -> fs nl n c es1 es2) e1 e2+     _ -> Nothing
src/full/Agda/Auto/NarrowingSearch.hs view
@@ -1,12 +1,16 @@-{-# OPTIONS -fglasgow-exts #-}-{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE UndecidableInstances, Rank2Types,+             ExistentialQuantification, MultiParamTypeClasses,+             FunctionalDependencies, FlexibleInstances,+             ScopedTypeVariables, CPP #-}  module Agda.Auto.NarrowingSearch where +import Agda.Utils.Impossible+#include "../undefined.h"+ import Data.IORef hiding (writeIORef, modifyIORef) import qualified Data.IORef as NoUndo (writeIORef, modifyIORef) import Control.Monad.State-import Data.Char   type Prio = Int@@ -20,54 +24,50 @@ data Term blk = forall a . Trav a blk => Term a  data Prop blk = OK-								      | Error String-								      | And (Maybe [Term blk]) (MetaEnv (PB blk)) (MetaEnv (PB blk))-								      | Or Prio (MetaEnv (PB blk)) (MetaEnv (PB blk))--runProp :: MetaEnv (PB blk) -> MetaEnv ()-runProp x = do- x <- x- case x of-  PBlocked _ _ _ _ -> putStr "<blocked>"-  PDoubleBlocked _ _ _ -> putStr "<double blocked>"-  NotPB x -> case x of-   OK -> putStr "OK"-   Error s -> putStr $ "(Error: " ++ s ++ ")"-   And _ x1 x2 -> do-    putStr "(And "-    runProp x1-    putStr " "-    runProp x2-    putStr ")"-   Or _ x1 x2 -> do-    putStr "(Or "-    runProp x1-    putStr " "-    runProp x2-    putStr ")"+              | Error String+              | forall a . AddExtraRef String (Metavar a blk) (Int, RefCreateEnv blk a)+              | And (Maybe [Term blk]) (MetaEnv (PB blk)) (MetaEnv (PB blk))+              | Sidecondition (MetaEnv (PB blk)) (MetaEnv (PB blk)) -- first arg is sidecondition+              | Or Prio (MetaEnv (PB blk)) (MetaEnv (PB blk))+              | ConnectHandle (OKHandle blk) (MetaEnv (PB blk)) +data OKVal = OKVal+type OKHandle blk = MM OKVal blk+type OKMeta blk = Metavar OKVal blk data Metavar a blk = Metavar  {mbind :: IORef (Maybe a),   mprincipalpresent :: IORef Bool,-  mobs :: IORef [(QPB a blk, CTree blk)],-  mcompoint :: IORef (Maybe (SubConstraints blk))+  mobs :: IORef [(QPB a blk, Maybe (CTree blk))],+  mcompoint :: IORef [SubConstraints blk],+  mextrarefs :: IORef [(Int, RefCreateEnv blk a)]++  }  hequalMetavar :: Metavar a1 blk1 -> Metavar a2 bkl2 -> Bool hequalMetavar m1 m2 = mprincipalpresent m1 == mprincipalpresent m2 -newMeta :: Maybe (SubConstraints blk) -> IO (Metavar a blk)+instance Eq (Metavar a blk) where+ x == y = hequalMetavar x y++newMeta :: IORef [SubConstraints blk] -> IO (Metavar a blk) newMeta mcompoint = do  bind <- newIORef Nothing  pp <- newIORef False  obs <- newIORef []- cp <- newIORef mcompoint- return $ Metavar bind pp obs cp+ erefs <- newIORef []+ return $ Metavar bind pp obs mcompoint erefs +initMeta :: IO (Metavar a blk)+initMeta = do+ cp <- newIORef []+ newMeta cp+ data CTree blk = CTree  {ctpriometa :: IORef (PrioMeta blk),   ctsub :: IORef (Maybe (SubConstraints blk)),-  ctparent :: IORef (Maybe (CTree blk))  -- Nothing - root+  ctparent :: IORef (Maybe (CTree blk)), -- Nothing - root+  cthandles :: IORef [OKMeta blk]  }  data SubConstraints blk = SubConstraints@@ -83,11 +83,12 @@  priometa <- newIORef (NoPrio False)  sub <- newIORef Nothing  rparent <- newIORef parent- return $ CTree priometa sub rparent+ handles <- newIORef []+ return $ CTree priometa sub rparent handles  newSubConstraints :: CTree blk -> IO (SubConstraints blk) newSubConstraints node = do- flip <- newIORef False+ flip <- newIORef True -- False -- initially (and always) True, trying out prefer rightmost subterm when none have priority  comcount <- newIORef 0  sub1 <- newCTree $ Just node  sub2 <- newCTree $ Just node@@ -95,7 +96,7 @@   data PrioMeta blk = forall a . Refinable a blk => PrioMeta Prio (Metavar a blk)-                  | NoPrio Bool  -- True if subconstraint is done (all OK)+                  | NoPrio Bool -- True if subconstraint is done (all OK)  instance Eq (PrioMeta blk) where  NoPrio d1 == NoPrio d2 = d1 == d2@@ -138,41 +139,51 @@  -- ----------------------- -type RefCreateEnv blk = StateT (Maybe (SubConstraints blk), Int) IO +type RefCreateEnv blk = StateT ( ( (IORef [SubConstraints blk])), Int) IO++data Pair a b = Pair a b+ class Refinable a blk | a -> blk where- refinements :: blk -> [blk] -> IO [(Int, RefCreateEnv blk a)]- printref :: a -> IO String+ refinements :: blk -> [blk] -> Metavar a blk -> IO [(Int, RefCreateEnv blk a)] + newPlaceholder :: RefCreateEnv blk (MM a blk) newPlaceholder = do- (mcompoint, c) <- get- put (mcompoint, c + 1)+ (e@( ( mcompoint)), c) <- get  m <- lift $ newMeta mcompoint+ put (e, (c + 1))  return $ Meta m +newOKHandle :: RefCreateEnv blk (OKHandle blk)+newOKHandle = do+ (e@( ( _)), c) <- get+ cp <- lift $ newIORef []+ m <- lift $ newMeta cp+ put (e, (c + 1))+ return $ Meta m+ dryInstantiate :: RefCreateEnv blk a -> IO a-dryInstantiate bind = evalStateT bind (Nothing, 0)+dryInstantiate bind = evalStateT bind ( ( __IMPOSSIBLE__), 0) -type BlkInfo blk = (Bool, Prio, Maybe blk)  -- Bool - is principal+type BlkInfo blk = (Bool, Prio, Maybe blk) -- Bool - is principal  data MM a blk = NotM a               | Meta (Metavar a blk)  type MetaEnv = IO -type PrintConstr = MetaEnv String  data MB a blk = NotB a               | forall b . Refinable b blk => Blocked (Metavar b blk) (MetaEnv (MB a blk))               | Failed String  data PB blk = NotPB (Prop blk)-            | forall b . Refinable b blk => PBlocked (Metavar b blk) (BlkInfo blk) PrintConstr (MetaEnv (PB blk))-            | forall b . Refinable b blk => PDoubleBlocked (Metavar b blk) (Metavar b blk) (MetaEnv (PB blk))+            | forall b . Refinable b blk => PBlocked (Metavar b blk) (BlkInfo blk) (MetaEnv (PB blk))+            | forall b1 b2 . (Refinable b1 blk, Refinable b2 blk) => PDoubleBlocked (Metavar b1 blk) (Metavar b2 blk) (MetaEnv (PB blk)) -data QPB b blk = QPBlocked (BlkInfo blk) PrintConstr (MetaEnv (PB blk))-               | QPDoubleBlocked (IORef Bool) (MetaEnv (PB blk))  -- flag set True by first observer that continues+data QPB b blk = QPBlocked (BlkInfo blk) (MetaEnv (PB blk))+               | QPDoubleBlocked (IORef Bool) (MetaEnv (PB blk)) -- flag set True by first observer that continues  mmcase :: Refinable a blk => MM a blk -> (a -> MetaEnv (MB b blk)) -> MetaEnv (MB b blk) mmcase x f = case x of@@ -192,18 +203,18 @@    Just x -> f x    Nothing -> fm -mmpcase :: Refinable a blk => BlkInfo blk -> MM a blk -> PrintConstr -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)-mmpcase blkinfo x pr f = case x of+mmpcase :: Refinable a blk => BlkInfo blk -> MM a blk -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)+mmpcase blkinfo x f = case x of  NotM x -> f x  x@(Meta m) -> do   bind <- readIORef $ mbind m   case bind of    Just x -> f x-   Nothing -> return $ PBlocked m blkinfo pr (mmpcase (error "blkinfo not needed because will be notb next time") x pr f)+   Nothing -> return $ PBlocked m blkinfo (mmpcase __IMPOSSIBLE__ x f) -- blkinfo not needed because will be notb next time -doubleblock :: Refinable a blk => MM a blk -> MM a blk -> MetaEnv (PB blk) -> MetaEnv (PB blk)+doubleblock :: (Refinable a blk, Refinable b blk) => MM a blk -> MM b blk -> MetaEnv (PB blk) -> MetaEnv (PB blk) doubleblock (Meta m1) (Meta m2) cont = return $ PDoubleBlocked m1 m2 cont-doubleblock _ _ _ = error "doubleblock: this case should not occur"+doubleblock _ _ _ = __IMPOSSIBLE__  mbcase :: MetaEnv (MB a blk) -> (a -> MetaEnv (MB b blk)) -> MetaEnv (MB b blk) mbcase x f = do@@ -213,22 +224,27 @@   Blocked m x -> return $ Blocked m (mbcase x f)   Failed msg -> return $ Failed msg -mbpcase :: Prio -> MetaEnv (MB a blk) -> PrintConstr -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)-mbpcase prio x pr f = do+mbpcase :: Prio -> Maybe blk -> MetaEnv (MB a blk) -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)+mbpcase prio bi x f = do  x' <- x  case x' of   NotB x -> f x-  Blocked m x -> return $ PBlocked m (False, prio, Nothing) pr (mbpcase prio x pr f)+  Blocked m x -> return $ PBlocked m (False, prio, bi) (mbpcase prio bi x f)   Failed msg -> return $ NotPB $ Error msg -mmbpcase :: MetaEnv (MB a blk) -> MetaEnv (PB blk) -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)+mmbpcase :: MetaEnv (MB a blk) -> (forall b . Refinable b blk => MM b blk -> MetaEnv (PB blk)) -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk) mmbpcase x fm f = do  x' <- x  case x' of   NotB x -> f x-  Blocked m x -> fm+  Blocked m x -> fm (Meta m)   Failed msg -> return $ NotPB $ Error msg +waitok :: OKHandle blk -> MetaEnv (MB b blk) -> MetaEnv (MB b blk)+waitok okh f =+ mmcase okh $ \b -> case b of -- principle constraint is never present for okhandle so it will not be refined+  OKVal -> f+ mbret :: a -> MetaEnv (MB a blk) mbret x = return $ NotB x @@ -238,26 +254,41 @@ mpret :: Prop blk -> MetaEnv (PB blk) mpret p = return $ NotPB p +expandbind :: MM a blk -> MetaEnv (MM a blk)+expandbind x = case x of+ NotM{} -> return x+ Meta m -> do+  bind <- readIORef $ mbind m+  case bind of+   Just x -> return $ NotM x+   Nothing -> return x++ -- -----------------------  type HandleSol = IO ()-type HandlePartSol = IO () + type SRes = Either Bool Int -topSearch :: forall blk . IORef Int -> IORef Int -> HandleSol -> HandlePartSol -> Bool -> blk -> MetaEnv (PB blk) -> Int -> Int -> IO Bool-topSearch ticks nsol hsol hpartsol inter envinfo p depth depthinterval = do+topSearch :: forall blk . IORef Int -> IORef Int -> HandleSol -> blk -> MetaEnv (PB blk) -> Int -> Int -> IO Bool+topSearch ticks nsol hsol envinfo p searchdepth depthinterval = do  depthreached <- newIORef False- exitinteractive <- newIORef False ++ mainroot <- newCTree Nothing+  let   searchSubProb :: [(CTree blk, Maybe (IORef Bool))] -> Int -> IO SRes   searchSubProb [] depth = do    when (depth < depthinterval) $ do++     hsol     n <- readIORef nsol     NoUndo.writeIORef nsol $! n - 1-    when inter (getChar >> return ())++    return $ Left True   searchSubProb ((root, firstdone) : restprobs) depth =    let@@ -265,11 +296,11 @@     search depth = do      pm <- readIORef $ ctpriometa root      case pm of-      NoPrio False -> error "NarrowingSearch.search: nothing to refine but not done"+      NoPrio False -> __IMPOSSIBLE__ -- nothing to refine but not done       NoPrio True ->-       searchSubProb restprobs depth  -- ?? what should depth be+       searchSubProb restprobs depth -- ?? what should depth be       PrioMeta _ m -> do-       let carryon = (if inter then forki else fork) m depth+       let carryon = fork m depth        sub <- readIORef $ ctsub root        case sub of         Nothing -> carryon@@ -278,17 +309,7 @@              sub2 = scsub2 sc          pm1 <- readIORef $ ctpriometa sub1          pm2 <- readIORef $ ctpriometa sub2-         let split = carryon  -- split disabled-         {-let split = runUndo $ do-              uwriteIORef (ctparent sub1) Nothing-              uwriteIORef (ctparent sub2) Nothing-              done <- lift $ newIORef False-              flip <- lift $ readIORef $ scflip sc-              let pmmax = choosePrioMeta flip pm1 pm2-              if pmmax == pm1 then-                lift $ searchSubProb ((sub1, Nothing) : (sub2, Just done) : restprobs) depth  -- ?? what should depth be-               else-                lift $ searchSubProb ((sub2, Nothing) : (sub1, Just done) : restprobs) depth  -- ?? what should depth be-}+         let split = carryon -- split disabled          case pm1 of           NoPrio True -> split           _ ->@@ -303,63 +324,17 @@     fork :: Refinable a blk => Metavar a blk -> Int -> IO SRes     fork m depth = do       blkinfos <- extractblkinfos m-      refs <- refinements envinfo blkinfos+      refs <- refinements envinfo blkinfos m       f refs      where-      f [] = return (Left False)-      f ((cost, bind) : binds) = hsres (refine m bind (depth - cost)) (f binds)--    forki :: Refinable a blk => Metavar a blk -> Int -> IO SRes-    forki m depth = do-     blkinfos <- extractblkinfos m-     refs <- refinements envinfo blkinfos-     direfs <- mapM dryInstantiate (map snd refs)-     descs <- mapM printref direfs-     let loop deflt = do-          putStr "\x1b[2J\x1b[0;0H"-          printCTree root >> putStrLn ""-          putStrLn $ "depth: " ++ show depth-          hpartsol-          putStrLn "----------------------------------------------"-          obs <- readIORef (mobs m)-          let pqpb (QPBlocked _ pr _) = pr-              pqpb (QPDoubleBlocked _ _) = return "double blocked"-          mapM_ (\obs -> do-            pc <- pqpb $ fst obs-            putStrLn pc-           ) obs-          putStrLn "----------------------------------------------"-          mapM_ (\(desc, (cost, i)) ->-            putStrLn $ (if i == deflt then "*" else " ") ++ show (i + 1) ++ ": " ++ desc ++ " (" ++ show cost ++ ")"-           ) (zip descs (zip (map fst refs) [0..]))-          when (deflt == length descs) $ putStrLn "* : BACK"-          putStr "<"-          c <- getChar-          putStrLn "\n"-          case c of-           _ | isDigit c ->-            let choice = ord c - ord '1'-            in  hsres (refine m (snd $ refs !! choice) (depth - fst (refs !! choice))) $ do-             e <- readIORef exitinteractive-             if not e then-               loop (choice + 1)-              else-               return $ Left False-           '\x7f' -> return (Left False)-           '\x1b' -> do NoUndo.writeIORef exitinteractive True-                        return (Left False)-           '\n' -> if deflt == length descs then-                    return (Left False)-                   else-                    hsres (refine m (snd $ refs !! deflt) (depth - fst (refs !! deflt))) $ do-                     e <- readIORef exitinteractive-                     if not e then-                       loop (deflt + 1)-                      else-                       return $ Left False-           _ -> error $ "unknown char: " ++ show (ord c)-     loop 0-+      f [] = do+       erefs <- readIORef $ mextrarefs m+       case erefs of+        [] -> return (Left False)+        _ -> do+         NoUndo.writeIORef (mextrarefs m) []+         f erefs+      f ((cost, bind) : binds) = hsres (refine m bind (depth - cost) ) (f binds)     hsres :: IO SRes -> IO SRes -> IO SRes     hsres x1 x2 = do      res <- x1@@ -372,38 +347,34 @@         else do          res2 <- x2          case res2 of-          Right _ -> if found then error "hsres: this should not happen" else return res2+          Right _ -> if found then __IMPOSSIBLE__ else return res2           Left found2 -> return $ Left (found || found2)      refine :: Metavar a blk -> RefCreateEnv blk a -> Int -> IO SRes-    refine _ _ depth | depth < 0 = do++    refine _ _ depthleft | depthleft < 0 = do      NoUndo.writeIORef depthreached True      return $ Left False-    refine m bind depth = runUndo $-     do mcomptr <- ureadIORef (mcompoint m)-        t <- lift $ readIORef ticks+++    refine m bind depthleft = runUndo $+     do t <- ureadIORef ticks         lift $ NoUndo.writeIORef ticks $! t + 1-        (bind, (_, nnewmeta)) <- lift $ runStateT bind (mcomptr, 0) -{--        ob <- ureadIORef (mbind m)-        case ob of-         Just _ -> error "meta already bound"-         Nothing -> return ()--} +        (bind, (_, nnewmeta)) <- lift $ runStateT bind ( ( (mcompoint m)), 0)         uwriteIORef (mbind m) (Just bind)-        case mcomptr of-         Nothing -> return ()-         Just comptr -> do+        mcomptr <- ureadIORef $ mcompoint m+        mapM_ (\comptr ->           umodifyIORef (sccomcount comptr) (+ (nnewmeta - 1))-          umodifyIORef (scflip comptr) not+          -- umodifyIORef (scflip comptr) not -- don't flip now since trying prefer rightmost subterm if non have prio+         ) mcomptr         obs <- ureadIORef (mobs m)         res <- recalcs obs         case res of-         True ->  -- failed+         True -> -- failed           return $ Left False-         False -> lift $ search depth  -- succeeded+         False -> lift $ search depthleft -- succeeded      doit = do      res <- search depth@@ -433,14 +404,13 @@         NoUndo.writeIORef rdone True         doit - root <- newCTree Nothing  runUndo $ do-  res <- reccalc p root+  res <- reccalc p (Just mainroot)   case res of-   True ->  -- failed immediately+   True -> -- failed immediately     return False    False -> do-    Left solfound <- lift $ searchSubProb [(root, Nothing)] depth+    Left solfound <- lift $ searchSubProb [(mainroot, Nothing)] searchdepth     dr <- lift $ readIORef depthreached     return dr @@ -450,13 +420,13 @@  return $ f obs  where   f [] = []-  f ((QPBlocked (_,_,mblkinfo) _ _, _) : cs) =+  f ((QPBlocked (_,_,mblkinfo) _, _) : cs) =    case mblkinfo of     Nothing -> f cs     Just blkinfo -> blkinfo : f cs-  f ((QPDoubleBlocked _ _, _) : cs) = f cs+  f ((QPDoubleBlocked{}, _) : cs) = f cs -recalcs :: [(QPB a blk, CTree blk)] -> Undo Bool+recalcs :: [(QPB a blk, Maybe (CTree blk))] -> Undo Bool recalcs [] = return False recalcs (c : cs) = seqc (recalc c) (recalcs cs) @@ -467,10 +437,10 @@   res1@True -> return res1   False -> y -recalc :: (QPB a blk, CTree blk) -> Undo Bool+recalc :: (QPB a blk, Maybe (CTree blk)) -> Undo Bool recalc (con, node) =  case con of-  QPBlocked _ _ cont -> reccalc cont node+  QPBlocked _ cont -> reccalc cont node   QPDoubleBlocked flag cont -> do    fl <- ureadIORef flag    if fl then@@ -479,98 +449,123 @@      uwriteIORef flag True      reccalc cont node -reccalc :: MetaEnv (PB blk) -> CTree blk -> Undo Bool-reccalc cont node = calc cont node+reccalc :: MetaEnv (PB blk) -> Maybe (CTree blk) -> Undo Bool+reccalc cont node = do+ res <- calc cont node+ case res of+  Nothing -> return True+  Just pendhandles ->+   foldM (\res1 h ->+    case res1 of+     True -> return res1+     False -> do -calc :: forall blk . MetaEnv (PB blk) -> CTree blk -> Undo Bool++      uwriteIORef (mbind h) $ Just OKVal+      obs <- ureadIORef (mobs h)+      recalcs obs+   ) False pendhandles++calc :: forall blk . MetaEnv (PB blk) -> Maybe (CTree blk) -> Undo (Maybe [OKMeta blk]) calc cont node = do   res <- donewp node cont   case res of-   Just _ -> do-    propagatePrio node-    return False-   Nothing -> return True+   Just (_, pendhandles) -> do+    pendhandles2 <- case node of+     Just node -> propagatePrio node+     Nothing -> return []+    return $ Just (pendhandles ++ pendhandles2)+   Nothing -> return Nothing  where-  storeprio node pm = do+  storeprio (Just node) pm pendhandles = do+   pendhandles' <- case pm of+    NoPrio True -> do+     handles <- ureadIORef (cthandles node)+     return $ handles ++ pendhandles+    _ -> return pendhandles    uwriteIORef (ctpriometa node) pm-   return $ Just pm+   return $ Just (pm, pendhandles')+  storeprio Nothing _ _ =+   return $ Just (NoPrio False, [])   donewp node p = do    bp <- lift p    case bp of     NotPB p ->      doprop node p-    PBlocked m blkinfo pr cont -> do-     oldobs <- ureadmodifyIORef (mobs m) ((QPBlocked blkinfo pr cont, node) :)+    PBlocked m blkinfo cont -> do+     oldobs <- ureadmodifyIORef (mobs m) ((QPBlocked blkinfo cont, node) :)      let (princ, prio, _) = blkinfo-     if princ then do-       uwriteIORef (mprincipalpresent m) True-       mapM_ (\(qpb, node) -> do-         let priometa = case qpb of-                      QPBlocked (_, prio, _) _ _ -> PrioMeta prio m-                      QPDoubleBlocked _ _ -> NoPrio False-         uwriteIORef (ctpriometa node) priometa-         propagatePrio node-        ) oldobs-       storeprio node (PrioMeta prio m)-      else do-       pp <- ureadIORef (mprincipalpresent m)-       if pp then-         storeprio node (PrioMeta prio m)-        else-         storeprio node (NoPrio False)+     pp <- ureadIORef (mprincipalpresent m)+     when (princ && not pp) $ do+      uwriteIORef (mprincipalpresent m) True+      mapM_ (\(qpb, node) -> case node of+         Just node ->+          case qpb of+           QPBlocked (_, prio, _) _ -> do+++            uwriteIORef (ctpriometa node) (PrioMeta prio m)+            propagatePrio node+           QPDoubleBlocked flag _ ->+            return []+         Nothing -> return []+       ) oldobs+     if pp || princ then+       storeprio node (PrioMeta prio m) []+      else+       storeprio node (NoPrio False) []     PDoubleBlocked m1 m2 cont -> do      flag <- lift $ newIORef False      let newobs = ((QPDoubleBlocked flag cont, node) :)      umodifyIORef (mobs m1) newobs      umodifyIORef (mobs m2) newobs-     storeprio node (NoPrio False)+     storeprio node (NoPrio False) []   doprop node p =    case p of-    OK -> storeprio node (NoPrio True)+    OK -> storeprio node (NoPrio True) []     Error _ -> return Nothing+++    AddExtraRef _ m eref -> do+     lift $ NoUndo.modifyIORef (mextrarefs m) (eref :)+     return Nothing     And coms p1 p2 -> do-     sc <- lift $ newSubConstraints node+     let Just jnode = node+     sc <- lift $ newSubConstraints jnode -{--     osc <- ureadIORef (ctsub node)-     case osc of-      Just _ -> error "sc already set"-      Nothing -> return ()--} -     uwriteIORef (ctsub node) $ Just sc+     uwriteIORef (ctsub jnode) $ Just sc      ndep <- case coms of-      Nothing -> return 1  -- no metas pointing to it so will never decrement to 0-      Just coms ->-       liftM snd $ runStateT (mapM_ (\(Term x) ->-         let f :: forall b . Trav b blk => MM b blk -> StateT Int Undo ()-             f (NotM x) = traverse f x-             f (Meta m) = do-              mcomptr <- lift $ ureadIORef (mcompoint m)-              case mcomptr of-               Just _ -> return ()-               Nothing -> do-                bind <- lift $ ureadIORef $ mbind m-                case bind of-                 Just x -> traverse f x-                 Nothing -> do-                  lift $ uwriteIORef (mcompoint m) $ Just sc-                  modify (+1)-         in  traverse f x-        ) coms) 0-     lift $ NoUndo.writeIORef (sccomcount sc) ndep  -- OK since sc was just created-     resp1 <- donewp (scsub1 sc) p1+      Nothing -> return 1 -- no metas pointing to it so will never decrement to 0+      Just coms -> return 1 -- dito+     lift $ NoUndo.writeIORef (sccomcount sc) ndep -- OK since sc was just created+     resp1 <- donewp (Just $ scsub1 sc) p1      case resp1 of-      Just pm1 -> do-       resp2 <- donewp (scsub2 sc) p2+      Just (pm1, phs1) -> do+       resp2 <- donewp (Just $ scsub2 sc) p2        case resp2 of-        Just pm2 ->-         storeprio node (choosePrioMeta False pm1 pm2)+        Just (pm2, phs2) ->+         storeprio node (choosePrioMeta False pm1 pm2) (phs1 ++ phs2)         resp2@Nothing -> return resp2       resp1@Nothing -> return resp1+    Sidecondition sidep mainp -> do+     resp1 <- donewp Nothing sidep+     case resp1 of+      Just{} -> do+       resp2 <- donewp node mainp+       case resp2 of+        Just (pm2, phs2) ->+         storeprio node pm2 phs2+        resp2@Nothing -> return resp2+      resp1@Nothing -> return resp1     Or prio p1 p2 -> do-     cm <- lift $ newMeta Nothing+     cm <- lift $ initMeta      donewp node (choose (Meta cm) prio p1 p2)+    ConnectHandle (Meta handle) p' -> do+     let Just jnode = node+     umodifyIORef (cthandles jnode) (handle :)+     donewp node p'+    ConnectHandle (NotM _) _ -> __IMPOSSIBLE__  choosePrioMeta :: Bool -> PrioMeta blk -> PrioMeta blk -> PrioMeta blk choosePrioMeta flip pm1@(PrioMeta p1 _) pm2@(PrioMeta p2 _) = if p1 > p2 then pm1 else if p2 > p1 then pm2 else if flip then pm2 else pm1@@ -578,11 +573,11 @@ choosePrioMeta _ (NoPrio _) pm@(PrioMeta _ _) = pm choosePrioMeta _ (NoPrio d1) (NoPrio d2) = NoPrio (d1 && d2) -propagatePrio :: CTree blk -> Undo ()+propagatePrio :: CTree blk -> Undo [OKMeta blk] propagatePrio node = do  parent <- lift $ readIORef $ ctparent node  case parent of-  Nothing -> return ()+  Nothing -> return []   Just parent -> do    Just sc <- ureadIORef (ctsub parent)    pm1 <- ureadIORef $ ctpriometa $ scsub1 sc@@ -592,46 +587,28 @@    opm <- ureadIORef (ctpriometa parent)    if (not (pm == opm)) then do      uwriteIORef (ctpriometa parent) pm-     propagatePrio parent+     phs <- case pm of+      NoPrio True -> ureadIORef (cthandles parent)+      _ -> return []+     phs2 <- propagatePrio parent+     return $ phs ++ phs2     else-     return ()+     return []  data Choice = LeftDisjunct | RightDisjunct  choose :: MM Choice blk -> Prio -> MetaEnv (PB blk) -> MetaEnv (PB blk) -> MetaEnv (PB blk) choose c prio p1 p2 =- mmpcase (True, prio, Nothing) c (return "choose") $ \c -> case c of+ mmpcase (True, prio, Nothing) c $ \c -> case c of   LeftDisjunct -> p1   RightDisjunct -> p2  instance Refinable Choice blk where- refinements _ _ = return [(0, return LeftDisjunct), (0, return RightDisjunct)]  -- no cost to make a choice- printref LeftDisjunct = return "choose_left"- printref RightDisjunct = return "choose_right"+ refinements _ x _ = return [(0, return LeftDisjunct), (0, return RightDisjunct)] --- ------------------------------------ -printCTree :: CTree blk -> IO ()-printCTree t = do- pm <- readIORef $ ctpriometa t- sub <- readIORef $ ctsub t- putStr "("- putStr $ case pm of-  NoPrio False -> "-"-  NoPrio True -> "x"-  PrioMeta p _ -> show p- case sub of-  Nothing -> return ()-  Just sc -> do-   flip <- readIORef $ scflip sc-   ct <- readIORef $ sccomcount sc-   putStr ", "-   putStr $ if flip then ">" else "<"-   putStr ", "-   putStr $ show ct-   putStr ", "-   printCTree $ scsub1 sc-   putStr ", "-   printCTree $ scsub2 sc- putStr ")"+instance Refinable OKVal blk where+ refinements _ _ _ = __IMPOSSIBLE__ -- OKVal should never be refined ++-- ------------------------------------
− src/full/Agda/Auto/Print.hs
@@ -1,129 +0,0 @@-module Agda.Auto.Print where--import Data.IORef-import Data.Char--import Agda.Auto.NarrowingSearch-import Agda.Auto.Syntax--printExp :: [MId] -> MExp o -> IO String-printExp = pexp 0--pexp :: Int -> [MId] -> MExp o -> IO String-pexp p ctx e = case e of- Meta m -> do-  bind <- readIORef $ mbind m-  case bind of-   Nothing -> return "?"-   Just e -> pexp p ctx (NotM e)- NotM e -> case e of  -  App elr args -> do-   let p' = case args of {NotM ALNil -> 4; _ -> 3}-   elr' <- pelr ctx elr-   args' <- pargs ctx args-   par p p' $ elr' ++ args'-  Lam _ (Abs id b) -> do-   b' <- pexp 1 (id : ctx) b-   par p 1 $ "\\" ++ pid ctx id ++ " -> " ++ b'-  Fun _ it ot -> do-   it' <- pexp 3 ctx it-   ot' <- pexp 2 ctx ot-   par p 2 $ it' ++ " -> " ++ ot'-  Pi _ _ it (Abs id ot) -> do-   it' <- pexp 1 ctx it-   ot' <- pexp 2 (id : ctx) ot-   par p 2 $ "[" ++ pid ctx id ++ ":" ++ it' ++ "] -> " ++ ot'-  Sort (SortLevel 0) -> par p 4 "*"-  Sort (SortLevel n) -> par p 4 $ "*" ++ show n-  Sort Type -> par p 4 "Type"--pid :: [MId] -> MId -> String-pid _ (Id s) = printId s-pid ctx NoId = "\"#" ++ show (length ctx) ++ "\""--par :: Monad m => Int -> Int -> String -> m String-par n1 n2 s | n1 > n2 = return $ "(" ++ s ++ ")"-par _ _ s = return s--pelr :: [MId] -> Elr o -> IO String-pelr ctx elr = case elr of- Var v ->-  if v >= length ctx then-   return $ "@" ++ show (v - length ctx)-  else-   case ctx !! v of-    Id v -> return $ printId v-    NoId -> return $ "\"#" ++ show (length ctx - v - 1) ++ "\""- Const c -> do-  c <- readIORef c-  return $ printId (cdname c)--pargs :: [MId] -> MArgList o -> IO String-pargs ctx args = case args of- Meta m -> do-  bind <- readIORef $ mbind m-  case bind of-   Nothing -> return "[?]"-   Just args -> pargs ctx (NotM args)- NotM args -> case args of-  ALNil -> return ""-  ALCons _ arg args -> do-   arg' <- pexp 4 ctx arg-   args' <- pargs ctx args-   return $ " " ++ arg' ++ args'-  ALConPar args -> do-   args' <- pargs ctx args-   return $ " " ++ "$" ++ args'---- -------------------------------------printConst :: ConstRef o -> IO String-printConst c = do- cdef <- readIORef c- typs <- printExp [] (cdtype cdef)- case cdcont cdef of-  Def narg cls -> do-   clss <- mapM printClause cls-   return $ printId (cdname cdef) ++ " : " ++ typs ++ " {\n" ++ concatMap (\x -> x ++ "\n") clss ++ "};\n"-  Datatype cons -> do-   cons' <- mapM (\c -> do-             cdef <- readIORef c-             typs <- printExp [] (cdtype cdef)-             return $ " " ++ printId (cdname cdef) ++ " : " ++ typs ++ ";\n"-            ) cons-   return $ "data " ++ printId (cdname cdef) ++ " : " ++ typs ++ " {\n" ++ concat cons' ++ "};\n"-  Constructor -> return ""-  Postulate ->-   return $ "postulate " ++ printId (cdname cdef) ++ " : " ++ typs ++ ";\n"--printClause :: Clause o -> IO String-printClause (pats, e) = do- (nv, patss) <- printPats 0 pats- es <- printExp (replicate nv NoId) e- return $ patss ++ " = " ++ es ++ ";"--printPats :: Nat -> [Pat o] -> IO (Nat, String)-printPats nv [] = return (nv, "")-printPats nv (p:ps) = do- (nv', p') <- printPat nv p- (nv'', ps') <- printPats nv' ps- return (nv'', " " ++ p' ++ ps')--printPat :: Nat -> Pat o -> IO (Nat, String)-printPat nv (PatConApp c pats) = do- cd <- readIORef c- (nv', patss) <- printPats nv pats- return (nv', "(" ++ printId (cdname cd) ++ patss ++ ")")-printPat nv PatVar = return (nv + 1, printId $ "#" ++ show nv)-printPat nv PatExp = return (nv, ".*")---- ---------------------------------printId :: String -> String-printId "" = "!!empty string id!!"-printId s@(c : cs) =- if (isAlpha c || (c == '_')) && all (\c -> isAlpha c || isDigit c || (c == '_') || (c == '\'')) cs then-  s- else-  "\"" ++ s ++ "\""-
src/full/Agda/Auto/SearchControl.hs view
@@ -1,116 +1,332 @@-{-# OPTIONS -fglasgow-exts -XUndecidableInstances #-}+{-# LANGUAGE UndecidableInstances, MultiParamTypeClasses,+             TypeSynonymInstances, FlexibleInstances, CPP #-}  module Agda.Auto.SearchControl where +import Agda.Utils.Impossible+#include "../undefined.h"+ import Control.Monad import Data.IORef import Control.Monad.State+import Data.Maybe (mapMaybe)  import Agda.Auto.NarrowingSearch import Agda.Auto.Syntax-import Agda.Auto.Print   instance Refinable (ArgList o) (RefInfo o) where- refinements _ _ = return [-   (0, return ALNil),-   (0, cons NotHidden),-   (0, cons Hidden)-  ]-  where cons hid = do p1 <- newPlaceholder-                      p2 <- newPlaceholder-                      return $ ALCons hid p1 p2- printref x = pargs [] (NotM x)+ refinements _ infos _ =+  return $ [+            (0, return ALNil), +            (0, cons NotHidden),+            (0, cons Hidden) -getinfo [] (Just x) us = (x, us)-getinfo (x@(RIMainInfo _ _) : xs) Nothing us = getinfo xs (Just x) us-getinfo (x@(RIUnifInfo _ _ _) : xs) m us = getinfo xs m (x : us)-getinfo _ _ _ = error "getinfo: case should not occur" +           ]++           +++           (let isdep = rr infos+                rr (RICheckElim isdep : _) = isdep+                rr (_ : xs) = rr xs+                rr _ = __IMPOSSIBLE__+                proj hid = newPlaceholder >>= \p1 -> newPlaceholder >>= \p2 -> newPlaceholder >>= \p3 -> return $ ALProj p1 p2 hid p3+            in if isdep then+                 []+                else++                 [(0, proj NotHidden), (0, proj Hidden)]+++           )++  where cons hid = newPlaceholder >>= \p1 -> newPlaceholder >>= \p2 -> return $ ALCons hid p1 p2+++data ExpRefInfo o = ExpRefInfo {eriMain :: Maybe (RefInfo o), eriUnifs :: [RefInfo o], eriInfTypeUnknown, eriIsEliminand :: Bool, eriUsedVars :: Maybe ([UId o], [Elr o]),+                                eriIotaStep :: Maybe Bool, eriPickSubsVar :: Bool++                                , eriEqRState :: Maybe EqReasoningState++                               }++getinfo = f (ExpRefInfo {eriMain = Nothing, eriUnifs = [], eriInfTypeUnknown = False, eriIsEliminand = False, eriUsedVars = Nothing,+                         eriIotaStep = Nothing, eriPickSubsVar = False++                         , eriEqRState = Nothing++                        })+ where+  f i [] = i+  f i (x@RIMainInfo{} : xs) = f (i {eriMain = Just x}) xs+  f i (x@RIUnifInfo{} : xs) = f (i {eriUnifs = x : eriUnifs i}) xs+  f i (RIInferredTypeUnknown : xs) = f (i {eriInfTypeUnknown = True}) xs+  f i (RINotConstructor : xs) = f (i {eriIsEliminand = True}) xs+  f i (RIUsedVars nuids nused : xs) = f (i {eriUsedVars = Just (nuids, nused)}) xs+  f i (RIIotaStep semif : xs) = f (i {eriIotaStep = Just (semif || maybe False id (eriIotaStep i))}) xs+  f i (RIPickSubsvar : xs) = f (i {eriPickSubsVar = True}) xs++  f i (RIEqRState s : xs) = f (i {eriEqRState = Just s}) xs++  f i _ = __IMPOSSIBLE__+++univar :: [CAction o] -> Nat -> Maybe Nat+univar cl v = f cl v 0+ where+ f [] v v' = Just (v' + v)+ f (Weak n : _) v v' | v < n = Nothing+ f (Weak n : xs) v v' = f xs (v - n) v'+ f (Sub _ : xs) v v' = f xs v (v' + 1)+ f (Skip : _) 0 v' = Just v'+ f (Skip : xs) v v' = f xs (v - 1) (v' + 1)++subsvars :: [CAction o] -> [Nat]+subsvars = f 0+ where+  f n [] = []+  f n (Weak _ : xs) = f n xs+  f n (Sub _ : xs) = n : f (n + 1) xs+  f n (Skip : xs) = f (n + 1) xs++ instance Refinable (Exp o) (RefInfo o) where- refinements envinfo infos = do-  let RIEnv hints = envinfo-      (RIMainInfo n tt, unis) = getinfo infos Nothing []-  occs <- mapM (\(RIUnifInfo mm _ opphne) -> occursCheck mm opphne) unis-  cons <- case tt of-           HNApp (Const c) _ -> do-            cd <- readIORef c-            return $ case cdcont cd of-             Datatype cons -> cons-             _ -> []-           _ -> return []-  let up = case unis of-            [] -> False-            _ -> all not occs-      lam hid = (0,-                 do p <- newPlaceholder-                    return $ Lam hid (Abs NoId p)+ refinements envinfo infos meta =+  let+   hints = rieHints envinfo+   deffreevars = rieDefFreeVars envinfo++   meqr = rieEqReasoningConsts envinfo++   ExpRefInfo {eriMain = Just (RIMainInfo n tt iotastepdone), eriUnifs = unis, eriInfTypeUnknown = inftypeunknown, eriIsEliminand = iseliminand, eriUsedVars = Just (uids, usedvars),+                         eriIotaStep = iotastep, eriPickSubsVar = picksubsvar++                         , eriEqRState = meqrstate++                        } = getinfo infos++   eqrstate = maybe EqRSNone id meqrstate++   app muid elr = do p <- newPlaceholder+                     p <- case elr of+                      Var{} -> return p+                      Const c -> do+                       cd <- lift $ readIORef c+                       let dfvapp 0 _ = p+                           dfvapp i n = NotM $ ALCons NotHidden (NotM $ App Nothing (NotM $ OKVal) (Var n) (NotM ALNil)) (dfvapp (i - 1) (n - 1))+                            -- NotHidden is ok because agda reification throws these arguments away and agsy skips typechecking them+                       return $ dfvapp (cddeffreevars cd) (n - 1)++                     okh <- newOKHandle+                     let uid = case muid of+                                Just _ -> muid+                                Nothing -> Just meta+                     return $ App uid okh elr p+   lam hid id = do+    p <- newPlaceholder+    return $ Lam hid (Abs id p)+   pi muid dep hid =+    do p1 <- newPlaceholder+       p2 <- newPlaceholder+       let uid = case muid of+                  Just _ -> muid+                  Nothing -> Just meta+       return $ Pi uid hid dep p1 (Abs NoId p2)+   set l = return $ Sort (Set l)+  in case unis of+   [] ->+    let++     eqr = maybe __IMPOSSIBLE__ id meqr+     foldargs [] = NotM ALNil+     foldargs ((h, a) : xs) = NotM $ ALCons h a (foldargs xs)+     eq_begin_step_step = (costEqStep,+                       do psb <- replicateM 4 newPlaceholder+                          okhb <- newOKHandle+                          pss1 <- replicateM 6 newPlaceholder+                          okhs1 <- newOKHandle+                          pss2 <- replicateM 7 newPlaceholder+                          okhs2 <- newOKHandle+                          return $ App (Just meta) okhb (Const $ eqrcBegin eqr) (foldargs (zip [Hidden, Hidden, Hidden, Hidden, NotHidden] (psb ++ [+                            NotM $ App (Just meta) okhs1 (Const $ eqrcStep eqr) (foldargs (zip [Hidden, Hidden, NotHidden, Hidden, Hidden, NotHidden, NotHidden] (pss1 ++ [+                             NotM $ App (Just meta) okhs2 (Const $ eqrcStep eqr) (foldargs (zip [Hidden, Hidden, NotHidden, Hidden, Hidden, NotHidden, NotHidden] pss2))+                            ])))+                           ])))+                      )+     eq_step = (costEqStep,+                 do ps <- replicateM 7 newPlaceholder+                    okh <- newOKHandle+                    return $ App (Just meta) okh (Const $ eqrcStep eqr) (foldargs (zip [Hidden, Hidden, NotHidden, Hidden, Hidden, NotHidden, NotHidden] ps))                 )-      apps = map app [0..n - 1]-      capps = case unis of-               [] -> map capp (hints ++ cons)-               _ -> []-      app v = (if up then 0 else 1,-               do p <- newPlaceholder-                  return $ App (Var v) p+     eq_end = (costEqEnd,+               do ps <- replicateM 3 newPlaceholder+                  okh <- newOKHandle+                  return $ App (Just meta) okh (Const $ eqrcEnd eqr) (foldargs (zip [Hidden, Hidden, NotHidden] ps))               )-      capp c = (if up then 0 else 2,-                do p <- newPlaceholder-                   return $ App (Const c) p+     eq_sym = (costEqSym,+               do ps <- replicateM 5 newPlaceholder+                  okh <- newOKHandle+                  return $ App (Just meta) okh (Const $ eqrcSym eqr) (foldargs (zip [Hidden, Hidden, Hidden, Hidden, NotHidden] ps))+              )+     eq_cong = (costEqCong,+                do ps <- replicateM 8 newPlaceholder+                   okh <- newOKHandle+                   return $ App (Just meta) okh (Const $ eqrcCong eqr) (foldargs (zip [Hidden, Hidden, Hidden, Hidden, NotHidden, Hidden, Hidden, NotHidden] ps))                )-      set l = map (\l -> (0, return $ Sort (SortLevel l))) [0 .. l - 1]-      fun hid = (2,-                 do p1 <- newPlaceholder-                    p2 <- newPlaceholder-                    return $ Fun hid p1 p2)-      pi hid = (2,-                do p1 <- newPlaceholder-                   p2 <- newPlaceholder-                   return $ Pi hid True p1 (Abs NoId p2))-      mimic = case unis of-               [] -> []-               (RIUnifInfo _ cl hnopp : _) -> case hnopp of-                HNApp (Const c) _ -> [capp c]-                _ -> []-               _ -> error "refinements: mimic: not matched"-  case tt of-   HNFun hid _ _ -> return $ lam hid : apps ++ capps ++ mimic-   HNPi hid _ _ _ -> return $ lam hid : apps ++ capps ++ mimic-   HNSort (SortLevel l) -> return $ set l ++ [fun NotHidden, fun Hidden, pi NotHidden, pi Hidden] ++ apps ++ capps ++ mimic-   _ -> return $ apps ++ capps ++ mimic- printref x = printExp [] (NotM x) --- ---------------------------------+     pcav i = if inftypeunknown then costInferredTypeUnkown else i+     pc i = pcav i+     varcost v | v < n - deffreevars = pcav (case Just usedvars of {Just usedvars -> if elem v (mapMaybe (\x -> case x of {Var v -> Just v; Const{} -> Nothing}) usedvars) then costAppVarUsed else costAppVar; Nothing -> if picksubsvar then costAppVar else costAppVarUsed})+     varcost v | otherwise = pcav costAppHint+     varapps = map (\v ->+                (varcost v,+                 app Nothing (Var v)+                )) [0..n - 1]+     hintapps = map (\(c, hm) ->+                 (cost c hm,+                  app Nothing (Const c)+                 )) hints+                 where cost c hm = pc (case iotastep of+                                        Just _ -> costIotaStep+                                        Nothing -> if elem c (mapMaybe (\x -> case x of {Var{} -> Nothing; Const c -> Just c}) usedvars) then+                                          case hm of {HMNormal -> costAppHintUsed; HMRecCall -> costAppRecCallUsed}+                                         else+                                          case hm of {HMNormal -> costAppHint; HMRecCall -> costAppRecCall})+     generics = varapps ++ hintapps+    in case tt of -occursCheck :: forall a o . Metavar a (RefInfo o) -> HNExp o -> IO Bool-occursCheck m0 hn = liftM snd $ runStateT (-  let f :: forall b . Trav b (RefInfo o) => MM b (RefInfo o) -> StateT Bool IO ()-      f (NotM x) = traverse f x-      f (Meta m) = do-         bind <- lift $ readIORef $ mbind m-         case bind of-          Just x -> traverse f x-          Nothing -> when (hequalMetavar m m0) $ put True-  in  traverse f hn- ) False+     _ | eqrstate == EqRSChain ->+      return $ [eq_end, eq_step] +     HNPi _ hid possdep _ (Abs id _) -> return $ (pc (if iotastepdone then costLamUnfold else costLam), lam hid id) : (costAbsurdLam, return $ AbsurdLambda hid) : generics +     HNSort (Set l) -> return $ map (\l -> (pc costSort, set l)) [0..l - 1] ++ [(pc costPi, pi Nothing True NotHidden), (pc costPi, pi Nothing True Hidden)] ++ generics+++     HNApp _ (Const c) _ -> do+      cd <- readIORef c+      return $ case cdcont cd of+       Datatype cons _++        | eqrstate == EqRSNone++         -> map (\c -> (pc (case iotastep of {Just True -> costUnification; _ -> if length cons <= 1 then costAppConstructorSingle else costAppConstructor}), app Nothing (Const c))) cons +++            generics++            ++ if maybe False (\eqr -> c == eqrcId eqr) meqr then [eq_sym, eq_cong, eq_begin_step_step] else []+       _ | eqrstate == EqRSPrf1 -> generics ++ [eq_sym, eq_cong]+       _ | eqrstate == EqRSPrf2 -> generics ++ [eq_cong]++       _ -> generics+     _ -> return generics+   (RIUnifInfo cl hne : _) ->+    let+     subsvarapps = map (\v ->+                    (costUnification,+                     app Nothing (Var v)+                    )) (subsvars cl)+     mlam = case tt of+      HNPi _ hid _ _ (Abs id _) -> [(costUnification, lam hid id)]+      _ -> []+     generics = mlam ++ subsvarapps++     pickuid seenuids =+      case f seenuids of+       Just uid -> (uid, True)+       Nothing -> (head seenuids, False) -- ?? which uid to pick+      where f [] = Nothing+            f (Nothing:_) = Just Nothing+            f (Just u:us) = if elem u uids then f us else Just (Just u)+    in+     return $ case hne of+      HNApp seenuids (Var v) _ ->+       let (uid, isunique) = pickuid seenuids+           uni = case univar cl v of+                  Just v | v < n -> [(if isunique then costUnification else costUnificationOccurs, app uid (Var v))]+                  _ -> []+       in uni ++ generics+      HNApp seenuids (Const c) _ ->+       let (uid, isunique) = pickuid seenuids+       in (if isunique then costUnification else costUnificationOccurs, app uid (Const c)) : generics+      HNLam{} -> generics+      HNPi seenuids hid possdep _ _ ->+       let (uid, isunique) = pickuid seenuids+       in (if isunique then costUnification else costUnificationOccurs, pi uid possdep hid) : generics+      HNSort (Set l) -> map (\l -> (costUnification, set l)) [0..l] ++ generics+      HNSort _ -> generics+   _ -> __IMPOSSIBLE__+++extraref meta seenuids c = (costAppExtraRef, app (head seenuids) (Const c))+ where+   app muid elr = do p <- newPlaceholder+                     okh <- newOKHandle+                     let uid = case muid of+                                Just _ -> muid+                                Nothing -> Just meta+                     return $ App uid okh elr p+++instance Refinable (ICExp o) (RefInfo o) where+ refinements _ infos _ =+  let (RICopyInfo e : _) = infos+  in return [(0, return e)]+++instance Refinable (ConstRef o) (RefInfo o) where+ refinements _ [RICheckProjIndex projs] _ = return $ map (\x -> (0, return x)) projs+ refinements _ _ _ = __IMPOSSIBLE__++ -- ---------------------------------+costIotaStep, costAppExtraRef, costIncrease :: Int+costIncrease = 1000+costUnificationOccurs = 100 -- 1000001 -- 1 -- 100+costUnification = 0000+costAppVar = 0000 -- 0, 1+costAppVarUsed = 1000 -- 5+costAppHint = 3000 -- 2, 5+costAppHintUsed = 5000+costAppRecCall = 0 -- 1000?+costAppRecCallUsed = 10000 -- 1000?+costAppConstructor = 1000+costAppConstructorSingle = 0000+costAppExtraRef = 1000+costLam = 0000 -- 1, 0+costLamUnfold = 1000 -- 1, 0+costPi = 1000003 -- 100 -- 5+costSort = 1000004 -- 0+costIotaStep = 3000 -- 1000005 -- 2 -- 100+costInferredTypeUnkown = 1000006 -- 100+costAbsurdLam = 0 -prioNo, prioTypeUnknown, prioTypecheckArgList, prioInferredTypeUnknown, prioPreCompare, prioCompare, prioCompareArgList, prioCompIota, prioCompChoice :: Int+costEqStep = 2000+costEqEnd = 0+costEqSym = 0+costEqCong = 500+++prioNo, prioTypeUnknown, prioTypecheckArgList, prioInferredTypeUnknown, prioCompBeta, prioCompBetaStructured, prioCompareArgList, prioCompIota, prioCompChoice, prioCompUnif, prioCompCopy, prioNoIota, prioAbsurdLambda :: Int prioNo = (-1) prioTypeUnknown = 0-prioTypecheck False = 1+prioTypecheck False = 1000 prioTypecheck True = 0-prioTypecheckArgList = 3-prioInferredTypeUnknown = 4-prioPreCompare = 4-prioCompChoice = 4-prioCompare = 2-prioCompareArgList = 2-prioCompIota = 4+prioTypecheckArgList = 3000+prioInferredTypeUnknown = 4000+prioCompBeta = 4000+prioCompBetaStructured = 4000+prioCompIota = 4000+prioCompChoice = 5000 -- 700 -- 5000+prioCompUnif = 6000 -- 2+prioCompCopy = 8000+prioCompareArgList = 7000 -- 5 -- 2+prioNoIota = 500 -- 500+prioAbsurdLambda = 1000 +prioProjIndex = 3000 :: Int++ -- ---------------------------------  instance Trav a blk => Trav [a] blk where@@ -120,37 +336,27 @@ instance Trav (MId, CExp o) (RefInfo o) where  traverse f (_, ce) = traverse f ce -instance Trav a (RefInfo o) => Trav (Clos a o) (RefInfo o) where- traverse f (Clos cl e) = traverse f cl >> traverse f e--instance Trav (CAction o) (RefInfo o) where- traverse f (Sub ce) = traverse f ce- traverse _ Skip = return ()- traverse _ (Weak _) = return ()+instance Trav (TrBr a o) (RefInfo o) where+ traverse f (TrBr es _) = traverse f es  instance Trav (Exp o) (RefInfo o) where  traverse f e = case e of-  App _ args -> traverse f args+  App _ _ _ args -> traverse f args   Lam _ (Abs _ b) -> traverse f b-  Fun _ it ot -> traverse f it >> traverse f ot-  Pi _ _ it (Abs _ ot) -> traverse f it >> traverse f ot+  Pi _ _ _ it (Abs _ ot) -> traverse f it >> traverse f ot   Sort _ -> return () +  AbsurdLambda{} -> return ()++ instance Trav (ArgList o) (RefInfo o) where  traverse _ ALNil = return ()  traverse f (ALCons _ arg args) = traverse f arg >> traverse f args- traverse f (ALConPar args) = traverse f args -instance Trav (HNExp o) (RefInfo o) where- traverse f e = case e of-  HNApp _ args -> traverse f args-  HNLam (Abs _ b) -> traverse f b-  HNFun _ it ot -> traverse f it >> traverse f ot-  HNPi _ _ it (Abs _ ot) -> traverse f it >> traverse f ot-  HNSort _ -> return ()+ traverse f (ALProj eas _ _ as) = traverse f eas >> traverse f as -instance Trav (CArgList o) (RefInfo o) where- traverse _ CALNil = return ()- traverse f (CALConcat arg args) = traverse f arg >> traverse f args + traverse f (ALConPar args) = traverse f args ++-- ---------------------------------
src/full/Agda/Auto/Syntax.hs view
@@ -1,41 +1,81 @@-{-# OPTIONS -fglasgow-exts #-}+{-# LANGUAGE ExistentialQuantification, CPP #-}  module Agda.Auto.Syntax where +import Agda.Utils.Impossible+#include "../undefined.h"+ import Data.IORef  import Agda.Auto.NarrowingSearch +type UId o = Metavar (Exp o) (RefInfo o) -data RefInfo o = RIEnv [ConstRef o]-               | RIMainInfo Nat (HNExp o)-               | forall a . RIUnifInfo (Metavar a (RefInfo o)) [CAction o] (HNExp o)  -- metavar is the flexible side of the equality+data HintMode = HMNormal+              | HMRecCall ++data EqReasoningConsts o = EqReasoningConsts {eqrcId, eqrcBegin, eqrcStep, eqrcEnd, eqrcSym, eqrcCong :: ConstRef o} -- "_≡_", "begin_", "_≡⟨_⟩_", "_∎", "sym", "cong"++data EqReasoningState = EqRSNone | EqRSChain | EqRSPrf1 | EqRSPrf2 | EqRSPrf3+ deriving (Eq, Show)+++data RefInfo o = RIEnv {rieHints :: [(ConstRef o, HintMode)], rieDefFreeVars :: Nat -- Nat - deffreevars (to make cost of using module parameters correspond to that of hints)++                        , rieEqReasoningConsts :: Maybe (EqReasoningConsts o)++                       }+               | RIMainInfo Nat (HNExp o) Bool -- true if iota steps performed when normalising target type (used to put cost when traversing a definition by construction instantiation)+               | forall a . RIUnifInfo [CAction o] (HNExp o) -- meta environment, opp hne+               | RICopyInfo (ICExp o)+               | RIIotaStep Bool -- True - semiflex+               | RIInferredTypeUnknown+               | RINotConstructor+               | RIUsedVars [UId o] [Elr o]+               | RIPickSubsvar++               | RIEqRState EqReasoningState+++               | RICheckElim Bool -- isdep+               | RICheckProjIndex [ConstRef o] -- noof proj functions++ type MyPB o = PB (RefInfo o) type MyMB a o = MB a (RefInfo o)  type Nat = Int + data FMode = Hidden            | NotHidden  deriving Eq + data MId = Id String          | NoId  data Abs a = Abs MId a -data ConstDef o = ConstDef {cdname :: String, cdorigin :: o, cdtype :: MExp o, cdcont :: DeclCont o}  -- contains no metas+data ConstDef o = ConstDef {cdname :: String, cdorigin :: o, cdtype :: MExp o, cdcont :: DeclCont o -data DeclCont o = Def Nat [Clause o]-                | Datatype [ConstRef o]  -- constructors-                | Constructor+                   , cddeffreevars :: Nat++                  } -- contains no metas++data DeclCont o = Def Nat [Clause o] (Maybe Nat) (Maybe Nat) -- maybe an index to elimand argument, maybe index to elim arg if semiflex+                | Datatype [ConstRef o] -- constructors++                           [ConstRef o] -- projection functions++                | Constructor Nat -- number of omitted args                 | Postulate  type Clause o = ([Pat o], MExp o)  data Pat o = PatConApp (ConstRef o) [Pat o]-           | PatVar+           | PatVar String            | PatExp  type ConstRef o = IORef (ConstDef o)@@ -43,42 +83,58 @@ data Elr o = Var Nat            | Const (ConstRef o) -data Sort = SortLevel Nat+data Sort = Set Nat++          | UnknownSort+           | Type -data Exp o = App (Elr o) (MArgList o)+data Exp o = App (Maybe (UId o)) (OKHandle (RefInfo o)) (Elr o) (MArgList o)            | Lam FMode (Abs (MExp o))-           | Fun FMode (MExp o) (MExp o)-           | Pi FMode Bool (MExp o) (Abs (MExp o))  -- true if possibly dependent (var not known to not occur)+           | Pi (Maybe (UId o)) FMode Bool (MExp o) (Abs (MExp o)) -- true if possibly dependent (var not known to not occur)            | Sort Sort +           | AbsurdLambda FMode+++dontCare = Sort UnknownSort++ type MExp o = MM (Exp o) (RefInfo o)  data ArgList o = ALNil                | ALCons FMode (MExp o) (MArgList o)-               | ALConPar (MArgList o)  -- inserted to cover glitch of polymorphic constructor applications coming from Agda +               | ALProj (MArgList o) (MM (ConstRef o) (RefInfo o)) FMode (MArgList o) -- proj pre args, projfcn idx, tail+++               | ALConPar (MArgList o) -- inserted to cover glitch of polymorphic constructor applications coming from Agda++ type MArgList o = MM (ArgList o) (RefInfo o) -data HNExp o = HNApp (Elr o) (CArgList o)-             | HNLam (Abs (CExp o))-             | HNFun FMode (CExp o) (CExp o)-             | HNPi FMode Bool (CExp o) (Abs (CExp o))+data HNExp o = HNApp [Maybe (UId o)] (Elr o) (ICArgList o)+             | HNLam [Maybe (UId o)] FMode (Abs (ICExp o))+             | HNPi [Maybe (UId o)] FMode Bool (ICExp o) (Abs (ICExp o))              | HNSort Sort  data HNArgList o = HNALNil-                 | HNALCons (CExp o) (CArgList o)-                 | HNALConPar (CArgList o)+                 | HNALCons FMode (ICExp o) (ICArgList o) -type CExp o = Clos (MExp o) o+                 | HNALConPar (ICArgList o) -data CArgList o = CALNil-                | CALConcat (Clos (MArgList o) o) (CArgList o)- -- !! (CALCons and CALConcat are used differently by eta rule in hncomp, but could replace those uses by a new CALSnoc construction) +type ICExp o = Clos (MExp o) o++type CExp o = TrBr (ICExp o) o++data ICArgList o = CALNil+                 | CALConcat (Clos (MArgList o) o) (ICArgList o)+ data Clos a o = Clos [CAction o] a+data TrBr a o = TrBr [MExp o] a -data CAction o = Sub (CExp o)+data CAction o = Sub (ICExp o)                | Skip                | Weak Nat @@ -86,8 +142,183 @@  type EE = IO -data Elrs o = ElrsNil-            | ElrsCons (Elr o) (Elrs o)-            | ElrsWeak (Elrs o)+-- ------------------------------------------- +detecteliminand :: [Clause o] -> Maybe Nat+detecteliminand cls =+ case map cleli cls of+  [] -> Nothing+  (i:is) -> if all (i ==) is then i else Nothing+ where+  cleli (pats, _) = pateli 0 pats+  pateli i (PatConApp _ args : pats) = if all notcon (args ++ pats) then Just i else Nothing+  pateli i (_ : pats) = pateli (i + 1) pats+  pateli i [] = Nothing+  notcon PatConApp{} = False+  notcon _ = True +detectsemiflex :: ConstRef o -> [Clause o] -> IO Bool+detectsemiflex _ _ = return False -- disabled+categorizedecl :: ConstRef o -> IO ()+categorizedecl c = do+ cd <- readIORef c+ case cdcont cd of+  Def narg cls _ _ -> do+   semif <- detectsemiflex c cls+   let elim = detecteliminand cls+       semifb = case (semif, elim) of+                 (True, Just i) -> Just i -- just copying val of elim arg. this should be changed+                 (_, _) -> Nothing+   writeIORef c (cd {cdcont = Def narg cls elim semifb})+  _ -> return ()++-- -------------------------------------------++metaliseokh :: MExp o -> IO (MExp o)+metaliseokh = fm+ where+  fm (Meta m) = return $ Meta m+  fm (NotM e) = do+   e <- f e+   return $ NotM e+  f (App uid _ elr args) = do+   m <- initMeta+   args <- fms args+   return $ App uid (Meta m) elr args+  f (Lam hid (Abs id b)) = do+   b <- fm b+   return $ Lam hid (Abs id b)+  f (Pi uid hid posdep it (Abs id ot)) = do+   it <- fm it+   ot <- fm ot+   return $ Pi uid hid posdep it (Abs id ot)+  f e@(Sort{}) = return e++  f e@(AbsurdLambda{}) = return e+++  fms (Meta m) = return $ Meta m+  fms (NotM es) = do+   es <- fs es+   return $ NotM es+  fs ALNil = return ALNil+  fs (ALCons hid a as) = do+   a <- fm a+   as <- fms as+   return $ ALCons hid a as++  fs (ALProj eas idx hid as) = do+   eas <- fms eas+   as <- fms as+   return $ ALProj eas idx hid as+++  fs (ALConPar as) = do+   as <- fms as+   return $ ALConPar as+++-- -------------------------------------------++expandExp :: MExp o -> IO (MExp o)+expandExp = fm+ where+  fm (Meta m) = do+   mb <- readIORef $ mbind m+   case mb of+    Nothing -> return $ Meta m+    Just e -> fm (NotM e)+  fm (NotM e) = do+   e <- f e+   return $ NotM e+  f (App uid okh elr args) = do+   args <- fms args+   return $ App uid okh elr args+  f (Lam hid (Abs id b)) = do+   b <- fm b+   return $ Lam hid (Abs id b)+  f (Pi uid hid posdep it (Abs id ot)) = do+   it <- fm it+   ot <- fm ot+   return $ Pi uid hid posdep it (Abs id ot)+  f e@(Sort{}) = return e++  f e@(AbsurdLambda{}) = return e+++  fms (Meta m) = do+   mb <- readIORef $ mbind m+   case mb of+    Nothing -> return $ Meta m+    Just es -> fms (NotM es)+  fms (NotM es) = do+   es <- fs es+   return $ NotM es+  fs ALNil = return ALNil+  fs (ALCons hid a as) = do+   a <- fm a+   as <- fms as+   return $ ALCons hid a as++  fs (ALProj eas idx hid as) = do+   idx <- expandbind idx+   eas <- fms eas+   as <- fms as+   return $ ALProj eas idx hid as+++  fs (ALConPar as) = do+   as <- fms as+   return $ ALConPar as+++-- ---------------------------------++addtrailingargs :: Clos (MArgList o) o -> ICArgList o -> ICArgList o+addtrailingargs newargs CALNil = CALConcat newargs CALNil+addtrailingargs newargs (CALConcat x xs) = CALConcat x (addtrailingargs newargs xs)++-- ---------------------------------++closify :: MExp o -> CExp o+closify e = TrBr [e] (Clos [] e)++sub :: MExp o -> CExp o -> CExp o+-- sub e (Clos [] x) = Clos [Sub e] x+sub e (TrBr trs (Clos (Skip : as) x)) = TrBr (e : trs) (Clos (Sub (Clos [] e) : as) x)+{-sub e (Clos (Weak n : as) x) = if n == 1 then+                                Clos as x+                               else+                                Clos (Weak (n - 1) : as) x-}+sub _ _ = __IMPOSSIBLE__++subi :: MExp o -> ICExp o -> ICExp o+subi e (Clos (Skip : as) x) = Clos (Sub (Clos [] e) : as) x+subi _ _ = __IMPOSSIBLE__++weak :: Nat -> CExp o -> CExp o+weak n (TrBr trs e) = TrBr trs (weaki n e)++weaki :: Nat -> Clos a o -> Clos a o+weaki 0 x = x+weaki n (Clos as x) = Clos (Weak n : as) x++weakarglist :: Nat -> ICArgList o -> ICArgList o+weakarglist 0 = id+weakarglist n = f+ where f CALNil = CALNil+       f (CALConcat (Clos cl as) as2) = CALConcat (Clos (Weak n : cl) as) (f as2)+weakelr :: Nat -> Elr o -> Elr o+weakelr 0 elr = elr+weakelr n (Var v) = Var (v + n)+weakelr _ elr@(Const _) = elr++doclos :: [CAction o] -> Nat -> Either Nat (ICExp o)+doclos = f 0+ where+  f ns [] i = Left (ns + i)+  f ns (Weak n : xs) i = f (ns + n) xs i+  f ns (Sub s : _) 0 = Right (weaki ns s)+  f ns (Skip : _) 0 = Left ns+  f ns (Skip : xs) i = f (ns + 1) xs (i - 1)+  f ns (Sub _ : xs) i = f ns xs (i - 1)
src/full/Agda/Auto/Typecheck.hs view
@@ -1,509 +1,809 @@-{-# OPTIONS -fglasgow-exts #-}--module Agda.Auto.Typecheck where--import Data.IORef--import Agda.Auto.NarrowingSearch-import Agda.Auto.Syntax-import Agda.Auto.SearchControl-import Agda.Auto.Print---closify :: a -> Clos a o-closify = Clos []--sub :: CExp o -> Clos a o -> Clos a o--- sub e (Clos [] x) = Clos [Sub e] x-sub e (Clos (Skip : as) x) = Clos (Sub e : as) x-{-sub e (Clos (Weak n : as) x) = if n == 1 then-                                Clos as x-                               else-                                Clos (Weak (n - 1) : as) x-}-sub _ _ = error "sub: pattern not matched"--msubs :: [CExp o] -> a -> Clos a o-msubs ss x = Clos (map Sub ss) x--weak :: Nat -> Clos a o -> Clos a o-weak 0 x = x-weak n (Clos as x) = Clos (Weak n : as) x--{- -- only used by eta-conversion-weakarglist :: Nat -> CArgList -> CArgList-weakarglist 0 = id-weakarglist n = f- where f CALNil = CALNil-       f (CALConcat cl as as2) = CALConcat (Weak n : cl) as (f as2)--weakelr :: Nat -> Elr -> Elr-weakelr 0 elr = elr-weakelr n (Var v) = Var (v + n)-weakelr _ elr@(Const _) = elr--}---- -----------------------------------tcExp :: Bool -> Ctx o -> CExp o -> MExp o -> EE (MyPB o)-tcExp isdep ctx typ trm =- mbpcase prioTypeUnknown (hnn typ) (ptcTypeUnknown isdep ctx typ trm) $ \hntyp ->- mmpcase (True, prioTypecheck isdep, Just (RIMainInfo (length ctx) hntyp)) trm (ptcTypeCheck isdep ctx hntyp trm) $ \trm -> case trm of-  App elr args -> do-   (ityp, sc) <- case elr of-            Var v ->  -- assuming within scope-             return (weak (v + 1) (snd $ ctx !! v), id)-            Const c -> do-             cdef <- readIORef c-             return (closify (cdtype cdef), \x -> mpret $ And (Just [Term args]) (noiotastep' c args) x)-   sc $ tcargs isdep ctx typ ityp args-  Lam hid (Abs id1 b) -> case hntyp of-   HNFun hid' it ot | hid == hid' ->-    tcExp isdep ((id1, it) : ctx) (weak 1 ot) b-   HNPi hid' _ it (Abs id2 ot) | hid == hid' ->-    tcExp isdep ((pickid id1 id2, it) : ctx) ot b-   _ -> mpret $ Error "tcExp, type of lam should be fun or pi (and same hid)"-  Fun _ it ot -> case hntyp of-   HNSort s ->-    mpret $ And (Just [Term ctx])-     (tcExp isdep ctx (closify (NotM $ Sort s)) it)-     (tcExp isdep ctx (closify (NotM $ Sort s)) ot)-   _ -> mpret $ Error "tcExp, type of fun should be set"-  Pi _ _ it (Abs id ot) -> case hntyp of-   HNSort s ->-    mpret $ And (Just [Term ctx, Term it])-     (tcExp True ctx (closify (NotM $ Sort s)) it)-     (tcExp isdep ((id, closify it) : ctx) (closify (NotM $ Sort s)) ot)-   _ -> mpret $ Error "tcExp, type of pi should be set"-  Sort (SortLevel i) -> case hntyp of-   HNSort s2 -> case s2 of-    SortLevel j -> mpret $ if i < j then OK else Error "tcExp, type of set should be larger set"-    Type -> mpret OK-   _ -> mpret $ Error "tcExp, type of set should be set"-  Sort Type -> error "tcexp: Sort Type should not occur"--tcargs :: Bool -> Ctx o -> CExp o -> CExp o -> MArgList o -> EE (MyPB o)-tcargs isdep ctx etyp ityp args = mmpcase (True, prioTypecheckArgList, Nothing) args (ptcTypecheckArgList "" isdep ctx etyp ityp args) $ \args' -> case args' of- ALNil -> comp' etyp ityp- ALCons hid a as ->-  mbpcase prioInferredTypeUnknown (hnn ityp) (ptcTypecheckArgList "inferred_type_unknown" isdep ctx etyp ityp args) $ \hnityp -> case hnityp of-   HNFun hid' it ot | hid == hid' -> mpret $-    And (Just [Term ctx])-        (tcExp isdep ctx it a)-        (tcargs isdep ctx etyp ot as)-   HNPi hid' possdep it (Abs _ ot) | hid == hid' -> mpret $-    And (Just [Term ctx, Term a])-        (tcExp (isdep || possdep) ctx it a)-        (tcargs isdep ctx etyp (sub (closify a) ot) as)-   _ -> mpret $ Error "tcargs, inf type should be fun or pi (and same hid)"- ALConPar _ -> error "ConPar should not occur here"---- -----------------------------------hnn :: CExp o -> EE (MyMB (HNExp o) o)-hnn e = hnn' e CALNil--hnn' :: CExp o -> CArgList o -> EE (MyMB (HNExp o) o)-hnn' e as =- mbcase (hn' e as) $ \hne ->-  mbcase (iotastep hne) $ \res -> case res of-   Nothing -> mbret hne-   Just (e, as) -> hnn' e as--hn' :: CExp o -> CArgList o -> EE (MyMB (HNExp o) o)-hn' e as = mbcase (hnc False e as) $ \res -> case res of-            HNDone hne -> mbret hne-            HNMeta _ _ -> error "hn': should not happen"--data HNRes o = HNDone (HNExp o)-             | HNMeta (CExp o) (CArgList o)--hnc :: Bool -> CExp o -> CArgList o -> EE (MyMB (HNRes o) o)-hnc haltmeta = loop- where-  loop ce@(Clos cl e) cargs =-   (if haltmeta then mmmcase e (mbret $ HNMeta ce cargs) else mmcase e) $-   \e -> case e of-    App elr args ->-     let cargs' = CALConcat (Clos cl args) cargs-     in  case elr of-      Var v -> case doclos cl v of-       Left v' -> mbret $ HNDone $ HNApp (Var v') cargs'-       Right f -> loop f cargs'-      Const _ -> mbret $ HNDone $ HNApp elr cargs'-    Lam _ (Abs id b) ->-     let cb = Clos (Skip : cl) b-     in  mbcase (hnarglist cargs) $ \hncargs -> case hncargs of-      HNALNil -> mbret $ HNDone $ HNLam (Abs id cb)-      HNALCons arg cargs' -> loop (sub arg cb) cargs'-      HNALConPar _ -> error "ConPar should not occur here"-    Fun hid it ot -> checkNoArgs cargs $ mbret $ HNDone $ HNFun hid (Clos cl it) (Clos cl ot)-    Pi hid possdep it (Abs id ot) -> checkNoArgs cargs $ mbret $ HNDone $ HNPi hid possdep (Clos cl it) (Abs id (Clos (Skip : cl) ot))-    Sort s -> checkNoArgs cargs $ mbret $ HNDone $ HNSort s-  checkNoArgs cargs c =-   mbcase (hnarglist cargs) $ \hncargs -> case hncargs of-    HNALNil -> c-    HNALCons _ _ -> mbfailed "hnc: there should be no args"-    HNALConPar _ -> error "ConPar should not occur here"--doclos :: [CAction o] -> Nat -> Either Nat (CExp o)-doclos = f 0- where-  f ns [] i = Left (ns + i)-  f ns (Weak n : xs) i = f (ns + n) xs i-  f ns (Skip : _) 0 = Left ns-  f ns (Sub s : _) 0 = Right (weak ns s)-  f ns (Skip : xs) i = f (ns + 1) xs (i - 1)-  f ns (Sub _ : xs) i = f ns xs (i - 1)--hnarglist :: CArgList o -> EE (MyMB (HNArgList o) o)-hnarglist args = case args of- CALNil -> mbret HNALNil- CALConcat (Clos cl args) args2 -> mmcase args $ \args -> case args of-   ALNil -> hnarglist args2-   ALCons _ arg args' -> mbret $ HNALCons (Clos cl arg) (CALConcat (Clos cl args') args2)-   ALConPar args' -> mbret $ HNALConPar (CALConcat (Clos cl args') args2)----- -------------------------------getNArgs :: Nat -> CArgList o -> EE (MyMB (Maybe ([CExp o], CArgList o)) o)-getNArgs 0 args = mbret $ Just ([], args)-getNArgs narg args =- mbcase (hnarglist args) $ \hnargs -> case hnargs of-  HNALNil -> mbret Nothing-  HNALCons arg args' ->-   mbcase (getNArgs (narg - 1) args') $ \res -> case res of-    Nothing -> mbret Nothing-    Just (pargs, rargs) -> mbret $ Just (arg : pargs, rargs)-  HNALConPar _ -> error "ConPar should not occur here"--getAllArgs :: CArgList o -> EE (MyMB [PEval o] o)-getAllArgs args =- mbcase (hnarglist args) $ \hnargs -> case hnargs of-  HNALNil -> mbret []-  HNALCons arg args' ->-   mbcase (getAllArgs args') $ \args'' ->-    mbret (PENo arg : args'')-  HNALConPar args' ->-   mbcase (getAllArgs args') $ \args'' ->-    mbret (PEConPar : args'')--iotastep :: HNExp o -> EE (MyMB (Maybe (CExp o, CArgList o)) o)-iotastep e = case e of- HNApp (Const c) args -> do-  cd <- readIORef c-  case cdcont cd of-   Def narg cls ->-    mbcase (getNArgs narg args) $ \res -> case res of-     Nothing -> mbret Nothing-     Just (pargs, rargs) ->-      mbcase (dorules cls (map PENo pargs)) $ \res -> case res of-       Nothing -> mbret Nothing-       Just rhs -> mbret $ Just (rhs, rargs)-   _ -> mbret Nothing- _ -> mbret Nothing--data PEval o = PENo (CExp o)-             | PEConApp (CExp o) (ConstRef o) [PEval o]-             | PEConPar--dorules :: [Clause o] -> [PEval o] -> EE (MyMB (Maybe (CExp o)) o)-dorules [] _ = mbret Nothing-dorules (rule:rules') as =- mbcase (dorule rule as) $ \x -> case x of-  Left (Just as') -> dorules rules' as'-  Left Nothing -> mbret Nothing-  Right rhs -> mbret $ Just rhs--dorule :: Clause o -> [PEval o] -> EE (MyMB (Either (Maybe [PEval o]) (CExp o)) o)-dorule (pats, rhs) as =- mbcase (dopats pats as) $ \x -> case x of-  Right (_, ss) -> mbret $ Right (msubs ss rhs)-  Left hnas -> mbret $ Left hnas--dopats :: [Pat o] -> [PEval o] -> EE (MyMB (Either (Maybe [PEval o]) ([PEval o], [CExp o])) o)-dopats [] [] = mbret $ Right ([], [])-dopats (p:ps') (a:as') =- mbcase (dopat p a) $ \x -> case x of-  Right (hna, ss) ->-   mbcase (dopats ps' as') $ \x -> case x of-    Right (hnas, ss2) -> mbret $ Right (hna : hnas, ss2 ++ ss)-    Left Nothing -> mbret $ Left Nothing-    Left (Just hnas) -> mbret $ Left $ Just (hna : hnas)-  Left Nothing -> mbret $ Left Nothing-  Left (Just hna) -> mbret $ Left $ Just (hna : as')-dopats _ _ = error "dopats: pattern not matched"--dopat :: Pat o -> PEval o -> EE (MyMB (Either (Maybe (PEval o)) (PEval o, [CExp o])) o)-dopat (PatConApp c pas) a =- case a of-  PENo a -> mbcase (hnn a) $ \hna -> case hna of-   HNApp (Const c') as ->-    if c == c' then-     mbcase (getAllArgs as) $ \as' ->-      if length as' == length pas then-       mbcase (dopats pas as') $ \x -> case x of-        Right (hnas, ss) -> mbret $ Right (PEConApp a c' hnas, ss)-        Left Nothing -> mbret $ Left Nothing-        Left (Just hnas) -> mbret $ Left $ Just (PEConApp a c' hnas)-      else-       mbfailed "dopat: wrong amount of args"-    else do-     cd <- readIORef c'-     case cdcont cd of-      Constructor -> mbcase (getAllArgs as) $ \as' ->-       mbret $ Left (Just (PEConApp a c' as'))-      _ -> mbret $ Left Nothing-   _ -> mbret $ Left Nothing-  aa@(PEConApp a c' as) ->-   if c == c' then-    if length as == length pas then-     mbcase (dopats pas as) $ \x -> case x of-      Right (hnas, ss) -> mbret $ Right (PEConApp a c' hnas, ss)-      Left Nothing -> mbret $ Left Nothing-      Left (Just hnas) -> mbret $ Left $ Just (PEConApp a c' hnas)-    else-     mbfailed "dopat: wrong amount of args"-   else-    mbret $ Left (Just aa)-  PEConPar -> error "ConPar should not occur here"-dopat PatVar a@(PENo a') = mbret $ Right (a, [a'])-dopat PatVar a@(PEConApp a' _ _) = mbret $ Right (a, [a'])-dopat PatVar PEConPar = error "ConPar should not occur here"-dopat PatExp a = mbret $ Right (a, [])---- -------------------------------noiotastep :: HNExp o -> EE (MyPB o)-noiotastep hne =- mbpcase prioNo (iotastep hne) (ptcNoIotaStep hne) $ \res -> case res of-  Just _ -> mpret $ Error "iota step possible contrary to assumed"-  Nothing -> mpret OK--noiotastep' :: ConstRef o -> MArgList o -> EE (MyPB o)-noiotastep' c args = do- cd <- readIORef c- let isshorthand =-      case cdcont cd of-       Def _ [(pats, _)] -> all (\pat -> case pat of {PatConApp{} -> False; _ -> True}) pats-       _ -> False- if isshorthand then-   mpret OK-  else-   noiotastep $ HNApp (Const c) (CALConcat (Clos [] args) CALNil)---comp' :: CExp o -> CExp o -> EE (MyPB o)-comp' = comp True---comp :: Bool -> CExp o -> CExp o -> EE (MyPB o)-comp ineq e1 e2 = f e1 CALNil $ \res1 -> f e2 CALNil $ \res2 -> g res1 res2- where-  f e as cont =-   mbpcase prioPreCompare (hnc True e as) (ptcCompare "beta" ineq e1 e2) $ \res ->-    case res of-     HNDone hne ->-      mmbpcase (iotastep hne)-       (mpret $ Or prioCompChoice-        (mpret $ And Nothing-         (noiotastep hne)-         (cont res)-        )-        (mbpcase prioCompIota (iotastep hne) (ptcCompare "iota" ineq e1 e2) $ \res -> case res of-         Nothing -> mpret $ Error "no iota step possible, contrary to assumed"-         Just (e, as) -> f e as cont-        )-       )-       (\res' -> case res' of-         Nothing -> cont res-         Just (e, as) -> f e as cont-       )-     HNMeta _ _ -> cont res-  g res1 res2 =-   case (res1, res2) of-    (HNDone hne1, HNDone hne2) -> comphn' ineq hne1 hne2-    (HNDone hne1, HNMeta ce2 cargs2) -> unif True hne1 ce2 cargs2-    (HNMeta ce1 cargs1, HNDone hne2) -> unif False hne2 ce1 cargs1-    (HNMeta ce1@(Clos _ m1) cargs1, HNMeta ce2@(Clos _ m2) cargs2) -> doubleblock m1 m2 $ f ce1 cargs1 $ \res1 -> f ce2 cargs2 $ \res2 -> g res1 res2-  unif oppis1 opphne = loop-   where-    loop ce@(Clos cl m) cargs =-     do-      let Meta mm = m-      mmpcase (False, prioCompare, Just (RIUnifInfo mm cl opphne)) m (ptcCompare "unify" ineq e1 e2) $ \_ ->-       f ce cargs $ \res ->-        case res of-         HNDone hne -> if oppis1 then comphn' ineq opphne hne else comphn' ineq hne opphne-         HNMeta ce' cargs' -> loop ce' cargs'---comphn' :: Bool -> HNExp o -> HNExp o -> EE (MyPB o)-comphn' ineq hne1 hne2 =- case (hne1, hne2) of-  (HNApp elr1 args1, HNApp elr2 args2) ->-   let ce = case (elr1, elr2) of-             (Var v1, Var v2) -> if v1 == v2 then Nothing else Just "comphn, elr, vars not equal"-             (Const c1, Const c2) -> if c1 == c2 then Nothing else Just "comphn, elr, consts not equal"-             (_, _) -> Just "comphn, elrs not equal"-   in  case ce of-        Nothing -> compargs args1 args2-        Just msg -> mpret $ Error msg-  (HNLam (Abs id1 b1), HNLam (Abs id2 b2)) -> comp False b1 b2-{- eta-conversion disabled-  (HNLam (Abs id b), HNApp elr args) ->-   mbpcase False prioCompare (hn b) $ \hnb ->-   comphn False (id : idctx) hnb (HNApp (weakelr 1 elr) (CALConcat (weakarglist 1 args) (CALCons (closify (NotM $ App (Var 0) $ NotM ALNil)) CALNil)))-  (HNApp elr args, HNLam (Abs id b)) ->-   mbpcase False prioCompare (hn b) $ \hnb ->-   comphn False (id : idctx) (HNApp (weakelr 1 elr) (CALConcat (weakarglist 1 args) (CALCons (closify (NotM $ App (Var 0) $ NotM ALNil)) CALNil))) hnb--}-  (HNFun hid1 it1 ot1, HNFun hid2 it2 ot2) | hid1 == hid2 -> mpret $-   And (Just []) (comp False it1 it2) (comp ineq ot1 ot2)-  (HNPi hid1 _ it1 (Abs id1 ot1), HNPi hid2 _ it2 (Abs id2 ot2)) | hid1 == hid2 -> mpret $-   And (Just []) (comp False it1 it2) (comp ineq ot1 ot2)-  (HNFun hid1 it1 ot1, HNPi hid2 _ it2 (Abs id ot2)) | hid1 == hid2 -> mpret $  -- ?? exclude this case-   And (Just []) (comp False it1 it2) (comp ineq (weak 1 ot1) ot2)-  (HNPi hid1 _ it1 (Abs id ot1), HNFun hid2 it2 ot2) | hid1 == hid2 -> mpret $  -- ?? exclude this case-   And (Just []) (comp False it1 it2) (comp ineq ot1 (weak 1 ot2))-  (HNSort s1, HNSort s2) -> mpret $-   case (s1, s2) of-    (SortLevel i1, SortLevel i2) -> if i1 == i2 || ineq && i1 > i2 then OK else Error "comphn, set levels not matching"-    (Type, SortLevel _) | ineq -> OK-    _ -> error "comphn'.2: case should not occur"-  (_, _) -> mpret $ Error "comphn, not equal"--compargs :: CArgList o -> CArgList o -> EE (MyPB o)-compargs args1 args2 =- mbpcase prioCompareArgList (hnarglist args1) (ptcCompareArgList "lhs" args1 args2) $ \hnargs1 ->- mbpcase prioCompareArgList (hnarglist args2) (ptcCompareArgList "rhs" args1 args2) $ \hnargs2 ->- case (hnargs1, hnargs2) of-  (HNALNil, HNALNil) -> mpret OK-  (HNALCons arg1 args1', HNALCons arg2 args2') -> mpret $-   And (Just []) (comp False arg1 arg2) (compargs args1' args2')-  (HNALConPar args1', HNALCons _ args2') -> compargs args1' args2'-  (HNALCons _ args1', HNALConPar args2') -> compargs args1' args2'-  (HNALConPar args1', HNALConPar args2') -> compargs args1' args2'-  (_, _) -> mpret $ Error $ "compargs, not equal"--pickid :: MId -> MId -> MId-pickid mid1@(Id _) _ = mid1-pickid _ mid2 = mid2---- -----------------------------------tcSearch :: Ctx o -> CExp o -> MExp o -> EE (MyPB o)-tcSearch ctx typ trm = tcExp False ctx typ trm---- ------------------------------norm = True--ptcTypeUnknown :: Bool -> Ctx o -> CExp o -> MExp o -> EE String-ptcTypeUnknown isdep ctx typ trm = do- pctx <- printCtx norm ctx- ptyp <- printCExp norm (map fst ctx) typ- ptrm <- printExp (map fst ctx) trm- return $ "tt_unknown " ++ (if isdep then "dep " else "") ++ pctx ++ " | " ++ ptrm ++ " : " ++ ptyp--ptcTypeCheck :: Bool -> Ctx o -> HNExp o -> MExp o -> EE String-ptcTypeCheck isdep ctx hntyp trm = do- pctx <- printCtx norm ctx- ptyp <- printHNExp norm (map fst ctx) hntyp- ptrm <- printExp (map fst ctx) trm- return $ (if isdep then "dep " else "") ++ pctx ++ " | " ++ ptrm ++ " : " ++ ptyp--ptcTypecheckArgList :: String -> Bool -> Ctx o -> CExp o -> CExp o -> MArgList o -> EE String-ptcTypecheckArgList msg isdep ctx etyp ityp args = do- pctx <- printCtx norm ctx- petyp <- printCExp norm (map fst ctx) etyp- pityp <- printCExp norm (map fst ctx) ityp- pargs <- pargs (map fst ctx) args - return $ msg ++ " " ++ (if isdep then "dep " else "") ++ pctx ++ " | " ++ pargs ++ " : " ++ pityp ++ " => " ++ petyp--ptcNoIotaStep :: HNExp o -> EE String-ptcNoIotaStep hne = do- phne <- printHNExp norm [] hne- return $ "no_iota " ++ phne--ptcCompare :: String -> Bool -> CExp o -> CExp o -> EE String-ptcCompare msg ineq e1 e2 = do- pe1 <- printCExp norm [] e1- pe2 <- printCExp norm [] e2- return $ msg ++ " " ++ pe1 ++ (if ineq then " >= " else " == ") ++ pe2--ptcCompareArgList :: String -> CArgList o -> CArgList o -> EE String-ptcCompareArgList msg args1 args2 = do- pargs1 <- pcargs norm [] args1- pargs2 <- pcargs norm [] args2- return $ msg ++ " " ++ pargs1 ++ " == " ++ pargs2---- -----------------------------------------------------phnexp :: Bool -> Int -> [MId] -> HNExp o -> IO String-phnexp norm p ctx e = case e of  - HNApp elr args -> do-  elr' <- pelr ctx elr-  args' <- pcargs norm ctx args-  par p 3 $ elr' ++ args'- HNLam (Abs id b) -> do-  b' <- pcexp norm 1 (id : ctx) b-  par p 1 $ "\\" ++ pid ctx id ++ " -> " ++ b'- HNFun _ it ot -> do-  it' <- pcexp norm 3 ctx it-  ot' <- pcexp norm 2 ctx ot-  par p 2 $ it' ++ " -> " ++ ot'- HNPi _ _ it (Abs id ot) -> do-  it' <- pcexp norm 1 ctx it-  ot' <- pcexp norm 2 (id : ctx) ot-  par p 2 $ "[" ++ pid ctx id ++ ":" ++ it' ++ "] -> " ++ ot'- HNSort (SortLevel 0) -> return "*"- HNSort (SortLevel n) -> return $ "*" ++ show n- HNSort Type -> return "Type"--printHNExp norm = phnexp norm 4--phnargs :: Bool -> [MId] -> HNArgList o -> IO String-phnargs norm ctx args = case args of-  HNALNil -> return ""-  HNALCons arg args -> do-   arg' <- pcexp norm 4 ctx arg-   args' <- pcargs norm ctx args-   return $ " " ++ arg' ++ args'-  HNALConPar args -> do-   args' <- pcargs norm ctx args-   return $ " " ++ "$" ++ args'--pcexp :: Bool -> Int -> [MId] -> CExp o -> IO String-pcexp True p ctx cexp = do- res <- hnn cexp- case res of-  NotB hnexp -> phnexp True p ctx hnexp-  _ -> pcexp False p ctx cexp-pcexp False p ctx (Clos acts e) = do  -- TODO: handle closure properly- pe <- pexp p ctx e- return $ "<..>" ++ pe--printCExp norm = pcexp norm 4--pcargs :: Bool -> [MId] -> CArgList o -> IO String-pcargs True ctx args = do- res <- hnarglist args- case res of-  NotB hnargs -> phnargs True ctx hnargs-  _ -> pcargs False ctx args-pcargs False ctx args = case args of-  CALNil -> return ""-  CALConcat (Clos acts arg) args -> do  -- TODO: handle closure properly-   arg' <- pargs ctx arg-   args' <- pcargs False ctx args-   return $ "<..>" ++ arg' ++ args'--printCtx :: Bool -> Ctx o -> IO String-printCtx _ [] = return ""-printCtx norm ((mid, t) : ctx) = do- p <- printCExp norm (map fst ctx) t- ps <- printCtx norm ctx- return $ ps ++ ", " ++ pid (map fst ctx) mid ++ " : " ++ p--+{-# LANGUAGE ExistentialQuantification, FlexibleContexts,+             ScopedTypeVariables, CPP #-}++module Agda.Auto.Typecheck where++import Agda.Utils.Impossible+#include "../undefined.h"++import Data.IORef+import Control.Monad (liftM)++import Agda.Auto.NarrowingSearch+import Agda.Auto.Syntax+import Agda.Auto.SearchControl+++-- ---------------------------------++tcExp :: Bool -> Ctx o -> CExp o -> MExp o -> EE (MyPB o)+tcExp isdep ctx typ@(TrBr typtrs ityp@(Clos _ itypexp)) trm =+  mbpcase prioTypeUnknown Nothing (hnn_checkstep ityp) $ \(hntyp, iotastepdone) ->+  mmpcase (True, prioTypecheck isdep, Just (RIMainInfo (length ctx) hntyp iotastepdone)) trm $ \trm -> case trm of+   App _ okh elr args -> case hntyp of+    HNPi{} | isdep -> mpret $ Error "tcExp, dep terms should be eta-long"+    _ -> do+     (ityp, sc) <- case elr of+              Var v -> -- assuming within scope+               return (weak (v + 1) (snd $ ctx !! v), id)+              Const c -> do+               cdef <- readIORef c+               return (closify (cdtype cdef), \x -> mpret $ And (Just [Term args]) (noiotastep_term c args) x)++     ndfv <- case elr of+              Var{} -> return 0+              Const c -> readIORef c >>= \cd -> return (cddeffreevars cd)+++     isconstructor <- case elr of+      Var{} -> return False+      Const c -> do+       cdef <- readIORef c+       return $ case cdcont cdef of {Constructor{} -> True; _ -> False}++     sc $ tcargs ndfv isdep ctx ityp args (NotM $ App Nothing (NotM OKVal) elr (NotM ALNil)) isconstructor $ \ityp _ -> mpret $ ConnectHandle okh (comp' True typ ityp)+   Lam hid (Abs id1 b) -> case hntyp of+    HNPi _ hid2 _ it (Abs id2 ot) | hid == hid2 ->+     tcExp isdep ((pickid id1 id2, t it) : ctx) (t ot) b+    _ -> mpret $ Error "tcExp, type of lam should be fun or pi (and same hid)"+   Pi _ _ _ it (Abs id ot) -> case hntyp of+    HNSort s ->+     mpret $ And (Just [Term ctx, Term it])+      (tcExp True ctx (closify (NotM $ Sort s)) it)+      (tcExp isdep ((id, closify it) : ctx) (closify (NotM $ Sort s)) ot)+    _ -> mpret $ Error "tcExp, type of pi should be set"+   Sort (Set i) -> case hntyp of+    HNSort s2 -> case s2 of+     Set j -> mpret $ if i < j then OK else Error "tcExp, type of set should be larger set"++     UnknownSort -> mpret OK -- mpret $ Error "tcExp, type of set i unknown sort" -- OK instead? (prev __IMPOSSIBLE__)++     Type -> mpret OK+    _ -> mpret $ Error "tcExp, type of set should be set"++   Sort UnknownSort -> __IMPOSSIBLE__++   Sort Type -> __IMPOSSIBLE__++   AbsurdLambda hid -> case hntyp of+    HNPi _ hid2 _ it _ | hid == hid2 ->+     mbpcase prioAbsurdLambda Nothing (getDatatype it) $ \res -> case res of+      Just (indeces, cons) ->+       foldl (\p con -> mpret $ And Nothing p (+        constructorImpossible indeces con+       )) (mpret OK) cons+      Nothing -> mpret $ Error "tcExp, absurd lambda, datatype needed"+    _ -> mpret $ Error "tcExp, type of absurd lam should be fun or pi (and same hid)"+++  where+   t = TrBr typtrs+++getDatatype :: ICExp o -> EE (MyMB (Maybe (ICArgList o, [ConstRef o])) o)+getDatatype t =+ mbcase (hnn t) $ \hnt -> case hnt of+  HNApp _ (Const c) args -> do+   cd <- readIORef c+   case cdcont cd of+    Datatype cons _ -> mbret $ Just (args, cons) -- ?? check that lenth args corresponds to type of datatype+    _ -> mbret Nothing+  _ -> mbret Nothing++constructorImpossible :: ICArgList o -> ConstRef o -> EE (MyPB o)+constructorImpossible args c = do+ cd <- readIORef c+ mbpcase prioAbsurdLambda Nothing (traversePi (-1) (Clos [] $ cdtype cd)) $ \hnot ->+  case hnot of+   HNApp _ _ args2 -> unequals args args2 (\_ -> mpret $ Error "not unequal") []+   _ -> mpret $ Error "constructorImpossible 1"++unequals :: ICArgList o -> ICArgList o -> ([(Nat, HNExp o)] -> EE (MyPB o)) -> [(Nat, HNExp o)] -> EE (MyPB o)+unequals es1 es2 cont unifier2 =+ mbpcase prioAbsurdLambda Nothing (hnarglist es1) $ \hnes1 ->+ mbpcase prioAbsurdLambda Nothing (hnarglist es2) $ \hnes2 ->+ case (hnes1, hnes2) of+  (HNALCons _ e1 es1, HNALCons _ e2 es2) -> unequal e1 e2 (unequals es1 es2 cont) unifier2++  (HNALConPar es1, HNALConPar es2) -> unequals es1 es2 cont unifier2++  _ -> cont unifier2++unequal :: ICExp o -> ICExp o -> ([(Nat, HNExp o)] -> EE (MyPB o)) -> [(Nat, HNExp o)] -> EE (MyPB o)+unequal e1 e2 cont unifier2 =+ mbpcase prioAbsurdLambda Nothing (hnn e1) $ \hne1 ->+ mbpcase prioAbsurdLambda Nothing (hnn e2) $ \hne2 ->+  case hne2 of+   HNApp _ (Var v2) es2 | v2 < 0 ->+    mbpcase prioAbsurdLambda Nothing (hnarglist es2) $ \hnes2 -> case hnes2 of+     HNALNil ->+      case lookup v2 unifier2 of+       Nothing -> cont ((v2, hne1) : unifier2)+       Just hne2' -> cc hne1 hne2'+     HNALCons{} -> cont unifier2++     HNALConPar{} -> __IMPOSSIBLE__++   _ -> cc hne1 hne2+ where+  cc hne1 hne2 = case (hne1, hne2) of+   (HNApp _ (Const c1) es1, HNApp _ (Const c2) es2) -> do+    cd1 <- readIORef c1+    cd2 <- readIORef c2+    case (cdcont cd1, cdcont cd2) of+     (Constructor{}, Constructor{}) ->+      if c1 == c2 then+       unequals es1 es2 cont unifier2+      else+       mpret OK+     _ -> cont unifier2+   _ -> cont unifier2++traversePi :: Int -> ICExp o -> EE (MyMB (HNExp o) o)+traversePi v t =+ mbcase (hnn t) $ \hnt ->+ case hnt of+  HNPi _ _ _ _ (Abs _ ot) -> traversePi (v - 1) (subi (NotM $ App Nothing (NotM OKVal) (Var v) (NotM ALNil)) ot)+  _ -> mbret hnt+++tcargs :: Nat -> Bool -> Ctx o -> CExp o -> MArgList o -> MExp o -> Bool -> (CExp o -> MExp o -> EE (MyPB o)) -> EE (MyPB o)+tcargs ndfv isdep ctx ityp@(TrBr ityptrs iityp) args elimtrm isconstructor cont = mmpcase (True, prioTypecheckArgList, (Just $ RICheckElim $ isdep || isconstructor)) args $ \args' -> case args' of+ ALNil -> cont ityp elimtrm+ ALCons hid a as ->+  mbpcase prioInferredTypeUnknown (Just RIInferredTypeUnknown) (hnn iityp) $ \hnityp -> case hnityp of+   HNPi _ hid2 possdep it (Abs _ ot) | ndfv > 0 || copyarg a || hid == hid2 -> mpret $+    And (Just ((if possdep then [Term a] else []) ++ [Term ctx, Term ityptrs]))+        (if ndfv > 0 then mpret OK else (tcExp (isdep || possdep) ctx (t it) a))+        (tcargs (ndfv - 1) isdep ctx (sub a (t ot)) as (addend hid a elimtrm) isconstructor cont)+   _ -> mpret $ Error "tcargs, inf type should be fun or pi (and same hid)"+++ ALProj{} | ndfv > 0 -> __IMPOSSIBLE__++ ALProj preas projidx hid as ->+  mbpcase prioInferredTypeUnknown (Just RIInferredTypeUnknown) (hnn iityp) $ \hnityp -> case hnityp of+   HNApp _ (Const dd) _ -> do+    dddef <- readIORef dd+    case cdcont dddef of+     Datatype _ projs ->+      mmpcase (True, prioProjIndex, Just (RICheckProjIndex projs)) projidx $+      \projidx -> do+       projd <- readIORef projidx+       tcargs (cddeffreevars projd) isdep ctx (closify $ cdtype projd) preas (NotM $ App Nothing (NotM OKVal) (Const projidx) (NotM ALNil)) True $+        \ityp2@(TrBr ityp2trs iityp2) elimtrm2 ->+         case iityp2 of+          Clos _ (NotM (Pi _ _ _ (NotM (App _ _ (Const dd2) _)) _)) | dd2 == dd ->+           mbpcase prioInferredTypeUnknown (Just RIInferredTypeUnknown) (hnn iityp2) $ \hnityp2 -> case hnityp2 of+            HNPi _ hid2 possdep it (Abs _ ot) | hid == hid2 -> mpret $+             And Nothing+                 (comp' True (TrBr ityp2trs it) ityp)+                 (tcargs 0 isdep ctx (sub elimtrm (t ot)) as (addend hid elimtrm elimtrm2) isconstructor cont)+            _ -> mpret $ Error "proj function type is not a Pi"+          _ -> mpret $ Error "proj function type is not correct"+     _ -> mpret $ Error "proj, not a datatype"+   _ -> mpret $ Error "proj, not a const app"+++ ALConPar _ -> __IMPOSSIBLE__++ where+  t = TrBr ityptrs+++addend hid a (NotM (App uid okh elr as)) = NotM $ App uid okh elr (f as)+ where f (NotM ALNil) = NotM $ ALCons hid a (NotM $ ALNil)+       f (NotM (ALCons hid a as)) = NotM $ ALCons hid a (f as)+       f _ = __IMPOSSIBLE__+addend _ _ _ = __IMPOSSIBLE__+copyarg _ = False+++-- ---------------------------------+++type HNNBlks o = [HNExp o]++noblks = []+addblk = (:)+++hnn :: ICExp o -> EE (MyMB (HNExp o) o)+hnn e = mbcase (hnn_blks e) $ \(hne, _) -> mbret hne++hnn_blks :: ICExp o -> EE (MyMB (HNExp o, HNNBlks o) o)+hnn_blks e = hnn' e CALNil++hnn_checkstep :: ICExp o -> EE (MyMB (HNExp o, Bool) o)+hnn_checkstep e =+ mbcase (hnb e CALNil) $ \hne ->+  mbcase (iotastep True hne) $ \res -> case res of+   Right _ -> mbret (hne, False)+   Left (e, as) ->+    mbcase (hnn' e as) $ \(hne, _) -> mbret (hne, True)+++hnn' :: ICExp o -> ICArgList o -> EE (MyMB (HNExp o, HNNBlks o) o)+hnn' e as =+ mbcase (hnb e as) $ \hne ->+  mbcase (iotastep True hne) $ \res -> case res of+   Right blks -> mbret (hne, blks)+   Left (e, as) -> hnn' e as++hnb :: ICExp o -> ICArgList o -> EE (MyMB (HNExp o) o)+hnb e as = mbcase (hnc False e as []) $ \res -> case res of+            HNDone _ hne -> mbret hne+            HNMeta{} -> __IMPOSSIBLE__++data HNRes o = HNDone (Maybe (Metavar (Exp o) (RefInfo o))) (HNExp o)+             | HNMeta (ICExp o) (ICArgList o) [Maybe (UId o)]++hnc :: Bool -> ICExp o -> ICArgList o -> [Maybe (UId o)] -> EE (MyMB (HNRes o) o)+hnc haltmeta = loop+ where+  loop ce@(Clos cl e) cargs seenuids =+   (if haltmeta then mmmcase e (mbret $ HNMeta ce cargs seenuids) else mmcase e) $+   \ee -> case ee of+    App uid okh elr args ->+     let ncargs = CALConcat (Clos cl args) cargs+     in case elr of+      Var v -> case doclos cl v of+       Left v' -> mbret $ HNDone expmeta (HNApp (uid : seenuids) (Var v') ncargs)+       Right f -> loop f ncargs (uid : seenuids)+      Const _ -> mbret $ HNDone expmeta (HNApp (uid : seenuids) elr ncargs)+    Lam hid (Abs id b) ->+     mbcase (hnarglist cargs) $ \hncargs -> case hncargs of+      HNALNil -> mbret $ HNDone expmeta (HNLam seenuids hid (Abs id (Clos (Skip : cl) b)))+      HNALCons _ arg cargs' -> loop (Clos (Sub arg : cl) b) cargs' seenuids++      HNALConPar{} -> __IMPOSSIBLE__++    Pi uid hid possdep it (Abs id ot) -> checkNoArgs cargs $ mbret $ HNDone expmeta (HNPi (uid : seenuids) hid possdep (Clos cl it) (Abs id (Clos (Skip : cl) ot)))+    Sort s -> checkNoArgs cargs $ mbret $ HNDone expmeta (HNSort s)++    AbsurdLambda{} -> mbfailed "hnc: encountered absurdlambda"+++   where expmeta = case e of {Meta m -> Just m; NotM _ -> Nothing}+  checkNoArgs cargs c =+   mbcase (hnarglist cargs) $ \hncargs -> case hncargs of+    HNALNil -> c+    HNALCons{} -> mbfailed "hnc: there should be no args"++    HNALConPar{} -> __IMPOSSIBLE__+++hnarglist :: ICArgList o -> EE (MyMB (HNArgList o) o)+hnarglist args =+ case args of+  CALNil -> mbret HNALNil+  CALConcat (Clos cl args) args2 ->+   mmcase args $ \args -> case args of+    ALNil -> hnarglist args2+    ALCons hid arg argsb -> mbret $ HNALCons hid (Clos cl arg) (CALConcat (Clos cl argsb) args2)++    ALProj{} -> mbret HNALNil -- dirty hack to make check of no-iota in term work+++    ALConPar args -> mbret $ HNALConPar (CALConcat (Clos cl args) args2)+-- -----------------------------++getNArgs :: Nat -> ICArgList o -> EE (MyMB (Maybe ([ICExp o], ICArgList o)) o)+getNArgs 0 args = mbret $ Just ([], args)+getNArgs narg args =+ mbcase (hnarglist args) $ \hnargs -> case hnargs of+  HNALNil -> mbret Nothing+  HNALCons _ arg args' ->+   mbcase (getNArgs (narg - 1) args') $ \res -> case res of+    Nothing -> mbret Nothing+    Just (pargs, rargs) -> mbret $ Just (arg : pargs, rargs)++  HNALConPar{} -> __IMPOSSIBLE__+++getAllArgs :: ICArgList o -> EE (MyMB [ICExp o] o)+getAllArgs args =+ mbcase (hnarglist args) $ \hnargs -> case hnargs of+  HNALNil -> mbret []+  HNALCons _ arg args' ->+   mbcase (getAllArgs args') $ \args'' ->+    mbret (arg : args'')++  HNALConPar args2 ->+   mbcase (getAllArgs args2) $ \args3 -> mbret (__IMPOSSIBLE__ : args3)+++data PEval o = PENo (ICExp o)+             | PEConApp (ICExp o) (ConstRef o) [PEval o]++iotastep :: Bool -> HNExp o -> EE (MyMB (Either (ICExp o, ICArgList o) (HNNBlks o)) o)+iotastep smartcheck e = case e of+ HNApp _ (Const c) args -> do+  cd <- readIORef c+  case cdcont cd of+   Def narg cls _ _ ->+    mbcase (getNArgs narg args) $ \res -> case res of+     Nothing -> mbret (Right noblks)+     Just (pargs, rargs) ->+      mbcase (dorules cls (map PENo pargs)) $ \res -> case res of+       Right blks -> mbret (Right blks)+       Left rhs -> mbret $ Left (rhs, rargs)+   _ -> mbret $ Right noblks+ _ -> mbret $ Right noblks+ where+ dorules :: [Clause o] -> [PEval o] -> EE (MyMB (Either (ICExp o) (HNNBlks o)) o)+ dorules [] _ = mbret $ Right noblks+ dorules (rule:rules') as =+  mbcase (dorule rule as) $ \x -> case x of+   Left (Left as') -> dorules rules' as'+   Left (Right blks) -> mbret (Right blks)+   Right rhs -> mbret $ Left rhs++ dorule :: Clause o -> [PEval o] -> EE (MyMB (Either (Either [PEval o] (HNNBlks o)) (ICExp o)) o)+ dorule (pats, rhs) as =+  mbcase (dopats pats as) $ \x -> case x of+   Right (_, ss) -> mbret $ Right (Clos (map Sub ss) rhs)+   Left hnas -> mbret $ Left hnas++ dopats :: [Pat o] -> [PEval o] -> EE (MyMB (Either (Either [PEval o] (HNNBlks o)) ([PEval o], [ICExp o])) o)+ dopats [] [] = mbret $ Right ([], [])+ dopats (p:ps') (a:as') =+  mbcase (dopat p a) $ \x -> case x of+   Right (hna, ss) ->+    mbcase (dopats ps' as') $ \x -> case x of+     Right (hnas, ss2) -> mbret $ Right (hna : hnas, ss2 ++ ss)+     Left (Right blks) -> mbret $ Left (Right blks)+     Left (Left hnas) -> mbret $ Left $ Left (hna : hnas)+   Left (Right blks) -> mbret $ Left (Right blks)+   Left (Left hna) -> mbret $ Left $ Left (hna : as')+ dopats _ _ = __IMPOSSIBLE__++ dopat :: Pat o -> PEval o -> EE (MyMB (Either (Either (PEval o) (HNNBlks o)) (PEval o, [ICExp o])) o)+ dopat (PatConApp c pas) a =+  case a of+   PENo a ->+    if smartcheck then+     mbcase (meta_not_constructor a) $ \notcon -> if notcon then mbret $ Left $ Right noblks else qq -- to know more often if iota step is possible+    else+     qq+    where+     qq =+      mbcase (hnn_blks a) $ \(hna, blks) -> case hna of+       HNApp _ (Const c') as ->+        if c == c' then+         mbcase (getAllArgs as) $ \as' ->+          if length as' == length pas then+           mbcase (dopats pas (map PENo as')) $ \x -> case x of+            Right (hnas, ss) -> mbret $ Right (PEConApp a c' hnas, ss)+            Left (Right blks) -> mbret $ Left (Right blks)+            Left (Left hnas) -> mbret $ Left $ Left (PEConApp a c' hnas)+          else+           mbfailed "dopat: wrong amount of args"+        else do+         cd <- readIORef c'+         case cdcont cd of+          Constructor{} -> mbcase (getAllArgs as) $ \as' ->+           mbret $ Left (Left (PEConApp a c' (map PENo as')))+          _ -> mbret $ Left (Right (addblk hna blks))+       _ -> mbret $ Left (Right (addblk hna blks))+   aa@(PEConApp a c' as) ->+    if c == c' then+     if length as == length pas then+      mbcase (dopats pas as) $ \x -> case x of+       Right (hnas, ss) -> mbret $ Right (PEConApp a c' hnas, ss)+       Left (Right blks) -> mbret $ Left (Right blks)+       Left (Left hnas) -> mbret $ Left $ Left (PEConApp a c' hnas)+     else+      mbfailed "dopat: wrong amount of args"+    else+     mbret $ Left (Left aa)+ dopat PatVar{} a@(PENo a') = mbret $ Right (a, [a'])+ dopat PatVar{} a@(PEConApp a' _ _) = mbret $ Right (a, [a'])+ dopat PatExp a = mbret $ Right (a, [])++-- -----------------------------++noiotastep :: HNExp o -> EE (MyPB o)+noiotastep hne =+ mbpcase prioNoIota Nothing (iotastep False hne) $ \res -> case res of+  Left _ -> mpret $ Error "iota step possible contrary to assumed"+  Right _ -> mpret OK++noiotastep_term :: ConstRef o -> MArgList o -> EE (MyPB o)+noiotastep_term c args = f (HNApp [] (Const c) (CALConcat (Clos [] args) CALNil))+ where+  f hne@(HNApp _ (Const c) _) = do+   cd <- readIORef c+   let isshorthand =+        case cdcont cd of+         Def _ [(pats, _)] _ _ -> True -- all (\pat -> case pat of {PatConApp{} -> False; _ -> True}) pats+         _ -> False+   if isshorthand then+     mpret OK+    else+     noiotastep hne+  f _ = __IMPOSSIBLE__++data CMode o = CMRigid (Maybe (Metavar (Exp o) (RefInfo o))) (HNExp o)+             | forall b . Refinable b (RefInfo o) => CMFlex (MM b (RefInfo o)) (CMFlex o)+data CMFlex o = CMFFlex (ICExp o) (ICArgList o) [Maybe (UId o)]+              | CMFSemi (Maybe (Metavar (Exp o) (RefInfo o))) (HNExp o)+              | CMFBlocked (Maybe (Metavar (Exp o) (RefInfo o))) (HNExp o)++comp' :: forall o . Bool -> CExp o -> CExp o -> EE (MyPB o)+comp' ineq lhs@(TrBr trs1 e1) rhs@(TrBr trs2 e2) = comp ineq e1 e2+ where+  comp :: Bool -> ICExp o -> ICExp o -> EE (MyPB o)+  comp ineq e1 e2 =+   proc e1 e2++   where+    proc e1 e2 = f True e1 CALNil [] $ \res1 -> f True e2 CALNil [] $ \res2 -> g res1 res2+    f semifok e as seenuids cont =+     mbpcase prioCompBeta Nothing (hnc True e as seenuids) $ \res ->+      case res of+       HNDone mexpmeta hne -> fhn semifok mexpmeta hne cont++       HNMeta ce@(Clos cl m) cargs seenuids -> do+        b1 <- boringClos cl+        b2 <- boringArgs cargs+        if b1 && b2 then+          cont $ CMFlex m (CMFFlex ce cargs seenuids)+         else+          mbpcase prioCompBetaStructured Nothing (hnc False ce cargs seenuids) $ \res ->+           case res of+            HNDone mexpmeta hne -> cont $ CMFlex m (CMFBlocked mexpmeta hne)+            HNMeta{} -> __IMPOSSIBLE__+++    fhn semifok mexpmeta hne cont =+     mmbpcase (iotastep True hne)+      (\m -> do+        sf <- return False {- semiflex hne -}+        if semifok && sf then+          cont (CMFlex m (CMFSemi mexpmeta hne))+         else+          cont (CMFlex m (CMFBlocked mexpmeta hne))+      )+      (\res -> case res of+        Right _ -> cont (CMRigid mexpmeta hne)+        Left (e, as) -> f semifok e as [] cont+      )+    g res1 res2 =+     case (res1, res2) of+      (CMRigid mexpmeta1 hne1, CMRigid mexpmeta2 hne2) -> comphn ineq mexpmeta1 hne1 mexpmeta2 hne2+      (CMFlex m1 (CMFBlocked mexpmeta1 hne1), _) -> mstp False mexpmeta1 hne1 $ \res1 -> g res1 res2+      (_, CMFlex m2 (CMFBlocked mexpmeta2 hne2)) -> mstp False mexpmeta2 hne2 $ \res2 -> g res1 res2+      (CMRigid mexpmeta1 hne1, CMFlex _ fl2) -> unif True mexpmeta1 hne1 fl2+      (CMFlex _ fl1, CMRigid mexpmeta2 hne2) -> unif False mexpmeta2 hne2 fl1+++      (CMFlex m1 fl1, CMFlex m2 fl2) -> doubleblock m1 m2 $ fcm fl1 $ \res1 -> fcm fl2 $ \res2 -> g res1 res2+    fcm (CMFFlex ce cargs seenuids) = f True ce cargs seenuids+    fcm (CMFSemi mexpmeta hne) = fhn True mexpmeta hne+    fcm (CMFBlocked _ hne) = __IMPOSSIBLE__ -- not used. if so should be: fhn False hne+    mstp semif mexpmeta hne cont =+     mpret $ Or prioCompChoice+      (mpret $ And (Just [Term lhs, Term rhs])+       (noiotastep hne)+       (cont (CMRigid mexpmeta hne))+      )+      (stp semif hne cont)+    stp semif hne cont =+     mbpcase prioCompIota (Just $ RIIotaStep semif) (iotastep True hne) $ \res -> case res of+      Right _ -> mpret $ Error "no iota step possible, contrary to assumed"+      Left (e, as) -> f semif e as [] cont+    unif oppis1 oppmexpmeta opphne res =+     let iter res = if oppis1 then+                     g (CMRigid oppmexpmeta opphne) res+                    else+                     g res (CMRigid oppmexpmeta opphne)+     in case res of+      CMFFlex ce cargs seenuids -> do+       poss <- iotapossmeta ce cargs+       maybeor poss prioCompChoice+        (loop ce cargs seenuids)+-- (mbpcase prioCompBeta (Just $ RIIotaStep False) (hnb ce cargs) $ \hne ->+        (mbpcase prioCompBeta (Just $ RIIotaStep False) (hnc False ce cargs seenuids) $ \res ->+          -- RIIotaStep here on beta-norm to make cost high when guessing elim const in type par+          case res of+           HNDone mexpmeta hne -> stp False hne iter+           HNMeta{} -> __IMPOSSIBLE__+        )+       where+        loop ce@(Clos cl m) cargs seenuids =+         mmpcase (False, prioCompUnif, Just (RIUnifInfo cl opphne)) m $ \_ ->+         mbpcase prioCompBeta Nothing (hnc True ce cargs seenuids) $ \res -> case res of+          HNDone mexpmeta hne ->+           mpret $ And (Just [Term lhs, Term rhs])+            (noiotastep hne)+            (iter (CMRigid mexpmeta hne))+          HNMeta ce cargs seenuids -> loop ce cargs seenuids+      CMFSemi _ hne ->+       __IMPOSSIBLE__ -- CMFSemi disabled, if used should be: stp True hne iter+      CMFBlocked{} -> __IMPOSSIBLE__+    comphn :: Bool -> Maybe (Metavar (Exp o) (RefInfo o)) -> HNExp o -> Maybe (Metavar (Exp o) (RefInfo o)) -> HNExp o -> EE (MyPB o)+    comphn ineq mexpmeta1 hne1 mexpmeta2 hne2 =+     case (hne1, hne2) of+      (HNApp _ elr1 args1, HNApp _ elr2 args2) ->+       let ce = case (elr1, elr2) of+                 (Var v1, Var v2) -> if v1 == v2 then Nothing else Just "comphn, elr, vars not equal"+                 (Const c1, Const c2) -> if c1 == c2 then Nothing else Just "comphn, elr, consts not equal"+                 (_, _) -> Just "comphn, elrs not equal"+       in case ce of+            Nothing -> compargs args1 args2+            Just msg -> mpret $ Error msg+      (HNLam _ hid1 (Abs id1 b1), HNLam _ hid2 (Abs id2 b2)) -> comp False b1 b2+      (HNLam seenuids _ (Abs _ b1), HNApp uid2 elr2 args2) ->+       f True b1 CALNil seenuids $ \res1 -> fhn True mexpmeta2 (HNApp uid2 (weakelr 1 elr2) (addtrailingargs (Clos [] $ NotM $ ALCons NotHidden{- arbitrary -} (NotM $ App Nothing (NotM OKVal) (Var 0) (NotM ALNil)) (NotM ALNil)) (weakarglist 1 args2))) $ \res2 -> g res1 res2+      (HNApp uid1 elr1 args1, HNLam seenuids _ (Abs _ b2)) ->+       fhn True mexpmeta1 (HNApp uid1 (weakelr 1 elr1) (addtrailingargs (Clos [] $ NotM $ ALCons NotHidden{- arbitrary -} (NotM $ App Nothing (NotM OKVal) (Var 0) (NotM ALNil)) (NotM ALNil)) (weakarglist 1 args1))) $ \res1 -> f True b2 CALNil seenuids $ \res2 -> g res1 res2+{-+      (HNLam _ (Abs _ b1), HNApp uid2 elr2 args2) ->+       f True b1 CALNil $ \res1 -> g res1+        (CMRigid mexpmeta2 (HNApp uid2 (weakelr 1 elr2) (addtrailingargs (Clos [] $ NotM $ ALCons NotHidden{- arbitrary -} (NotM $ App Nothing (NotM OKVal) (Var 0) (NotM ALNil)) (NotM ALNil)) (weakarglist 1 args2))))+      (HNApp uid1 elr1 args1, HNLam _ (Abs _ b2)) ->+       f True b2 CALNil $ \res2 -> g+        (CMRigid mexpmeta1 (HNApp uid1 (weakelr 1 elr1) (addtrailingargs (Clos [] $ NotM $ ALCons NotHidden{- arbitrary -} (NotM $ App Nothing (NotM OKVal) (Var 0) (NotM ALNil)) (NotM ALNil)) (weakarglist 1 args1))))+        res2+-}+      (HNPi _ hid1 _ it1 (Abs id1 ot1), HNPi _ hid2 _ it2 (Abs id2 ot2)) -> mpret $+       And (Just [Term trs1, Term trs2]) (comp False it1 it2) (comp ineq ot1 ot2)+      (HNSort s1, HNSort s2) -> mpret $+       case (s1, s2) of+        (Set i1, Set i2) -> if i1 == i2 || ineq && i1 > i2 then OK else Error "comphn, set levels not matching"+        (Set _, UnknownSort) -> OK+        (UnknownSort, Set _) -> OK+        (UnknownSort, UnknownSort) -> OK+        (Type, Set _) | ineq -> OK+        (Type, UnknownSort) | ineq -> OK+        _ -> __IMPOSSIBLE__+      (HNApp uid1 (Const c1) _, _) -> case mexpmeta2 of+       Nothing -> mpret $ Error "comphn, not equal (2)"+       Just m2 -> mpret $ AddExtraRef "comphn: not equal, adding extra ref" m2 (extraref m2 uid1 c1)+      (_, HNApp uid2 (Const c2) _) -> case mexpmeta1 of+       Nothing -> mpret $ Error "comphn, not equal (3)"+       Just m1 -> mpret $ AddExtraRef "comphn: not equal, adding extra ref" m1 (extraref m1 uid2 c2)+      (_, _) -> mpret $ Error "comphn, not equal"++    compargs :: ICArgList o -> ICArgList o -> EE (MyPB o)+    compargs args1 args2 =+     mbpcase prioCompareArgList Nothing (hnarglist args1) $ \hnargs1 ->+     mbpcase prioCompareArgList Nothing (hnarglist args2) $ \hnargs2 ->+     case (hnargs1, hnargs2) of+      (HNALNil, HNALNil) -> mpret OK+      (HNALCons hid1 arg1 args1b, HNALCons hid2 arg2 args2b) -> mpret $+       And (Just [Term trs1, Term trs2]) (comp False arg1 arg2) (compargs args1b args2b)++      (HNALConPar args1b, HNALCons _ _ args2b) -> compargs args1b args2b+      (HNALCons _ _ args1b, HNALConPar args2b) -> compargs args1b args2b+      (HNALConPar args1', HNALConPar args2') -> compargs args1' args2'++      (_, _) -> mpret $ Error $ "comphnargs, not equal"+++    boringExp :: ICExp o -> EE Bool+    boringExp (Clos cl e) = do+     e <- expandbind e+     case e of+      Meta{} -> boringClos cl+      NotM e -> case e of+       App _ _ (Var v) as -> do+        as <- expandbind as+        case as of+         Meta{} -> return False+         NotM as -> case as of+          ALNil -> case doclos cl v of+           Left _ -> return True+           Right e -> boringExp e+          ALCons{} -> return False++          ALProj{} -> __IMPOSSIBLE__+++          ALConPar{} -> return False++       _ -> return False++    boringClos :: [CAction o] -> EE Bool+    boringClos cl = liftM (all id) $ mapM f cl+     where f (Sub e) = boringExp e+           f Skip = return True+           f (Weak _) = return True++    boringArgs :: ICArgList o -> EE Bool+    boringArgs CALNil = return True+    boringArgs (CALConcat (Clos cl as) as2) = do+     b1 <- f cl as+     b2 <- boringArgs as2+     return $ b1 && b2+     where+      f cl as = do+       as <- expandbind as+       case as of+        Meta{} -> return False+        NotM as -> case as of+         ALNil -> return True+         ALCons _ a as -> do+          b1 <- boringExp (Clos cl a)+          b2 <- f cl as+          return $ b1 && b2++         ALProj{} -> __IMPOSSIBLE__+++         ALConPar as -> f cl as+-- ---------------------------------++checkeliminand :: MExp o -> EE (MyPB o)+checkeliminand = f [] []+ where+  f uids used e =+   mmpcase (False, prioNo, Just (RIUsedVars uids used)) e $ \e -> case e of+    App uid _ elr@(Var{}) args -> fs (adduid uid uids) (elr : used) args+    App uid _ elr@(Const c) args -> do+     cd <- readIORef c+     case cdcont cd of+      Def _ _ (Just i) _ -> mpret $ Sidecondition (fs (adduid uid uids) (elr : used) args) (g i args)+       where+        g i as = mmpcase (False, prioNo, Nothing) as $ \as -> case as of+                  ALNil -> mpret OK+                  ALCons _ a as -> case i of+                   0 -> mmpcase (False, prioNo, Just RINotConstructor) a $ \_ ->+                         mpret OK+                   _ -> g (i - 1) as++                  ALProj eas _ _ as -> mpret OK+++                  ALConPar as -> case i of+                   0 -> __IMPOSSIBLE__+                   _ -> g (i - 1) as++      _ -> fs (adduid uid uids) (elr : used) args+    Lam _ (Abs _ e) -> f uids (w used) e+    Pi uid _ _ e1 (Abs _ e2) -> mpret $ Sidecondition (f (adduid uid uids) used e1) (f (adduid uid uids) (w used) e2)+    Sort _ -> mpret OK++    AbsurdLambda{} -> mpret OK+++  fs uids used as =+   mmpcase (False, prioNo, Nothing) as $ \as -> case as of+    ALNil -> mpret OK+    ALCons _ a as -> mpret $ Sidecondition (f uids used a) (fs uids used as)++    ALProj eas _ _ as -> mpret $ Sidecondition (fs uids used eas) (fs uids used as)+++    ALConPar as -> fs uids used as++  w = map (\x -> case x of {Var v -> Var (v + 1); Const{} -> x})+  adduid (Just uid) uids = uid : uids+  adduid Nothing uids = uids++-- ---------------------------------+++maybeor _ _ mainalt _ = mainalt++iotapossmeta :: ICExp o -> ICArgList o -> EE Bool+iotapossmeta ce@(Clos cl _) cargs = do+ xs <- mapM ncaction cl+ y <- nccargs cargs+ return $ not (all id xs && y)+ where+  ncaction (Sub ce) = nonconstructor ce+  ncaction Skip = return True+  ncaction (Weak{}) = return True+  nccargs CALNil = return True+  nccargs (CALConcat (Clos cl margs) cargs) = do+   x <- ncmargs cl margs+   y <- nccargs cargs+   return $ x && y+  ncmargs cl (Meta m) = do+   mb <- readIORef (mbind m)+   case mb of+    Nothing -> return False+    Just x -> ncargs cl x+  ncmargs cl (NotM args) = ncargs cl args+  ncargs cl ALNil = return True+  ncargs cl (ALCons _ a args) = do+   x <- nonconstructor (Clos cl a)+   y <- ncmargs cl args+   return $ x && y++  ncargs _ (ALProj{}) = __IMPOSSIBLE__+++  ncargs cl (ALConPar args) = ncmargs cl args++  nonconstructor :: ICExp o -> EE Bool+  nonconstructor ce = do+   res <- hnc True ce CALNil []+   case res of+    Blocked{} -> return False+    Failed{} -> return False+    NotB res -> case res of+     HNMeta ce _ _ -> do+      let (Clos _ (Meta m)) = ce+      infos <- extractblkinfos m+      if any (\info -> case info of {RINotConstructor -> True; _ -> False}) infos then do+        return True+       else+        return False+      -- return False -- return True -- ?? removes completeness - Yes, in DavidW1.additionRight+     HNDone{} -> do+      res <- hnn ce+      case res of+       NotB hne -> case hne of+        HNApp _ (Const c) _ -> do+         cd <- readIORef c+         case cdcont cd of+          Constructor{} -> return False+          _ -> return True+        _ -> return True+       Blocked m _ -> return False -- not necessary to do check here because already done by hnn (!! if it's known that m stands for an eliminator then it cannot be constructor so True instead)+       Failed _ -> return False++meta_not_constructor :: ICExp o -> EE (MB Bool (RefInfo o))+meta_not_constructor a =+ mbcase (hnc True a CALNil []) $ \res -> case res of+  HNMeta ce _ _ -> do+    let (Clos _ (Meta m)) = ce+    infos <- extractblkinfos m+    if any (\info -> case info of {RINotConstructor -> True; _ -> False}) infos then do+      b <- iotapossmeta ce CALNil+      mbret $ not b+     else+      mbret False+  HNDone{} -> mbret False++-- ---------------------------------++calcEqRState :: EqReasoningConsts o -> MExp o -> EE (MyPB o)+calcEqRState cs = f EqRSNone+ where+  f s e =+   mmpcase (False, prioNo, Just (RIEqRState s)) e $ \e -> case e of+    App _ _ (Const c) args -> case () of+     _ | c == eqrcBegin cs -> fs [EqRSNone, EqRSNone, EqRSNone, EqRSNone, EqRSChain] args+     _ | c == eqrcStep cs -> fs [EqRSNone, EqRSNone, EqRSNone, EqRSNone, EqRSNone, EqRSPrf1, EqRSChain] args+     _ | c == eqrcSym cs -> fs [EqRSNone, EqRSNone, EqRSNone, EqRSNone, EqRSPrf2] args+     _ | c == eqrcCong cs -> fs [EqRSNone, EqRSNone, EqRSNone, EqRSNone, EqRSNone, EqRSNone, EqRSNone, EqRSPrf3] args+     _ -> fs [] args+    App _ _ (Var{}) args -> fs [] args+    Lam _ (Abs _ b) -> f EqRSNone b+    Pi _ _ _ it (Abs _ ot) -> mpret $ Sidecondition (f EqRSNone it) (f EqRSNone ot)+    Sort{} -> mpret OK++    AbsurdLambda{} -> mpret OK+++  fs ss args =+   mmpcase (False, prioNo, Nothing) args $ \args -> case (ss, args) of+    (_, ALNil) -> mpret OK+    (s : ss, ALCons _ a args) -> mpret $ Sidecondition (f s a) (fs ss args)+    ([], ALCons _ a args) -> mpret $ Sidecondition (f EqRSNone a) (fs [] args)++    ([], ALProj eas _ _ as) -> mpret $ Sidecondition (fs [] eas) (fs [] as)+    ((_:_), ALProj{}) -> __IMPOSSIBLE__+++    (_ : ss, ALConPar args) -> fs ss args+    ([], ALConPar args) -> fs [] args+++-- ---------------------------------++pickid :: MId -> MId -> MId+pickid mid1@(Id _) _ = mid1+pickid _ mid2 = mid2++-- ---------------------------------++tcSearch :: Bool -> Ctx o -> CExp o -> MExp o -> EE (MyPB o)+tcSearch isdep ctx typ trm = mpret $ Sidecondition (checkeliminand trm)+                              (tcExp isdep ctx typ trm)++-- ----------------------------
− src/full/Agda/Compiler/Agate/Classify.hs
@@ -1,137 +0,0 @@-{-# LANGUAGE CPP #-}--{-| Classify type familes and constants-    TODO: optimize by getting rid of !'s--}--module Agda.Compiler.Agate.Classify where--#include "../../undefined.h"-import Agda.Utils.Impossible--import Agda.Compiler.Agate.TranslateName-import Agda.Compiler.Agate.Common--import Agda.TypeChecking.MetaVars-import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Monad--import Agda.Syntax.Common-import Agda.Syntax.Internal-import Agda.Syntax.Abstract.Name--import Data.Map ((!), Map)-import qualified Data.Map as Map--import Control.Monad-import Agda.Utils.Monad--allM :: Monad m => (a -> m Bool) -> [a] -> m Bool-allM f xs = liftM and $ mapM f xs--andM :: Monad m => m Bool -> m Bool -> m Bool-andM x y = ifM x y $ return False--------------------------------------------------------------------enumTypeFamilies :: Map QName Definition -> TCM [QName]-enumTypeFamilies definitions = fmap concat $ mapM f $ Map.toList definitions-    where-      f (name,d) = do-	--let def = theDef d-	let ty = defType d-	(_,ty2) <- splitType ty-	(El sort term) <- reduce ty2-	case term of-	    Sort _ -> return [name]-	    _      -> return []--enumCompilableTypeFamilies :: Map QName Definition -> TCM [QName]-enumCompilableTypeFamilies definitions = do-    names <- enumTypeFamilies definitions-    computeGreatestFixedPoint f names where-    f :: [QName] -> QName -> TCM Bool-    f names name = do-	let d = definitions ! name-	let def = theDef d-	case def of-	    Axiom{}                                       -> return False -- IO should get True-	    Primitive{}                                   -> return False -- String should get True-	    Function{funClauses = []}                     -> __IMPOSSIBLE__-	    Function{funClauses = [Clause{ clauseBody = NoBody }]}  -> return False-	    Function{funClauses = [Clause{}]}             -> return False -- TODO-	    Function{}                                    -> return False-	    Constructor{}                                 -> return False -- ctor is not a typefam-	    Datatype{dataCons = cnames} -> do-	    	ty <- instantiate $ defType d-	    	andM (isCompilableType ty) $-	    	    allM ( \cname ->-	    	             do let d = definitions ! cname-			    	ty <- instantiate $ defType d-				isCompilableType ty ) cnames-	    Record{} -> return True-	where -- TODO: implement correctly---	isCompilableType (El s tm) = isCompilableTypeFamily tm--	isCompilableType :: Type -> TCM Bool-	isCompilableType (El s tm) = isCompilableTypeFamily tm--	isCompilableTypeFamily :: Term -> TCM Bool-	isCompilableTypeFamily tm = do-	    tm <- reduce tm-	    case tm of-		Var n args -> allM (isCompilableTypeFamily . unArg) args-		Sort _     -> return True-		Lam h abs  -> return False -- this can be too strong-		Def c args -> andM (return $ elem c names) $-		    allM (isCompilableTypeFamily . unArg) args-		Pi arg abs -> andM (isCompilableType $ unArg arg) $-		    underAbstraction_ abs isCompilableType-		Fun arg ty -> andM (isCompilableType $ unArg arg) $-		    isCompilableType ty-		Lit lit    -> return False-		Con c args -> return False-		MetaV _ _  -> return __IMPOSSIBLE__--------------------------------------------------------------------enumOptimizableConstants :: Map QName Definition -> [QName] -> TCM [QName]-enumOptimizableConstants definitions names = do-	computeGreatestFixedPoint f names-	where-	f :: [QName] -> QName -> TCM Bool-	f names name = return True -- All constants are optimized at the moment-	-- TODO: implement correctly---------------------------------------------------------------------computeGreatestFixedPoint :: ([QName] -> QName -> TCM Bool)-> [QName] -> TCM [QName]-computeGreatestFixedPoint f names = go names True where-    go names False = return names-    go names True  = go2 names names [] False-    go2 keptNames []           namesNext changed = go namesNext changed-    go2 keptNames (name:names) namesNext changed = do-	b <- f keptNames name-	case b of-	    True  -> go2 keptNames names (name : namesNext) changed-	    -- name is kept-	    False -> go2 keptNames names namesNext True-	    -- name is removed--computeLeastFixedPoint :: ([QName] -> QName -> TCM Bool) -> [QName] -> TCM [QName]-computeLeastFixedPoint f names = go names [] True where-    go names grantedNames False = return grantedNames-    go names grantedNames True  = go2 names [] grantedNames False-    go2 []           namesNext grantedNames changed =-	go namesNext grantedNames changed-    go2 (name:names) namesNext grantedNames changed = do-	b <- f grantedNames name-	case b of-	    True  -> go2 names namesNext (name : grantedNames) True-	    -- name is granted to be okay-	    False -> go2 names (name : namesNext) grantedNames changed-	    -- name is unsettled-----
− src/full/Agda/Compiler/Agate/Common.hs
@@ -1,137 +0,0 @@-{-# LANGUAGE CPP #-}--{-| common--}--module Agda.Compiler.Agate.Common where--#include "../../undefined.h"-import Agda.Utils.Impossible--import Control.Monad--import Agda.Compiler.Agate.TranslateName--import Agda.Syntax.Common-import Agda.Syntax.Literal-import Agda.Syntax.Internal--import Agda.TypeChecking.Monad-import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Substitute--import Agda.Utils.Pretty-import Agda.Utils.Monad--------------------------------------------------------------------psep :: [Doc] -> Doc-psep [x] = x-psep xs = parens $ sep xs---dropArgs :: Int -> Type -> TCM Type-dropArgs n (El s t) = dropArgsTm s n t-    where-	dropArgsTm s 0 t = return (El s t)-	dropArgsTm _ n t = do-	    t <- reduce t-	    case t of-		Pi arg abs  -> dropArgs (n - 1) $ absBody abs-		Fun arg ty  -> dropArgs (n - 1) ty-		Var _ _	    -> __IMPOSSIBLE__-		Def _ _	    -> __IMPOSSIBLE__-		Con _ _	    -> __IMPOSSIBLE__-		MetaV _ _   -> __IMPOSSIBLE__-		Lam _ _	    -> __IMPOSSIBLE__-		Sort _	    -> __IMPOSSIBLE__-		Lit _	    -> __IMPOSSIBLE__--withFunctionDomain :: Type -> (Type -> TCM a) -> ([a] -> Type -> TCM b) -> TCM b-withFunctionDomain (El s tm) f ret = withDomain s tm-    where-	withDomain s tm = do-	    tm <- reduce tm-	    case tm of-		Pi arg abs -> do-		    res	    <- f $ unArg arg-		    underAbstraction arg abs $ \ty ->-			withFunctionDomain ty f $ \ress ty ->-			ret (res : ress) ty-		Fun arg ty -> do-		    res  <- f $ unArg arg-		    withFunctionDomain ty f $ \ress ty ->-			ret (res : ress) ty-		Var _ _    -> ret [] (El s tm)-		Def _ _    -> ret [] (El s tm)-		Con _ _    -> ret [] (El s tm)-		Sort _	   -> ret [] (El s tm)-		Lit _	   -> __IMPOSSIBLE__-		MetaV _ _  -> __IMPOSSIBLE__-		Lam _ _	   -> __IMPOSSIBLE__--splitType :: Type -> TCM ([Type], Type)-splitType ty = withFunctionDomain ty return $ \tys ty -> return (tys,ty)--forEachArgM :: (Type -> TCM a) -> Type -> TCM [a]-forEachArgM f ty = withFunctionDomain ty f $ \ress _ -> return ress--underContext :: Type -> TCM a -> TCM a-underContext ty k = withFunctionDomain ty return $ \_ _ -> k------showOptimizedLiteral :: Literal -> Doc-showOptimizedLiteral (LitLevel  _ i) = text $ show i-showOptimizedLiteral (LitInt    _ i) = text $ show i-showOptimizedLiteral (LitString _ s) = text $ show s-showOptimizedLiteral (LitFloat  _ f) = text $ show f-showOptimizedLiteral (LitChar   _ c) = text $ show c--showUntypedLiteral :: Literal -> Doc-showUntypedLiteral (LitLevel  _ i) = text "VInt"    <+> text (show i)-showUntypedLiteral (LitInt    _ i) = text "VInt"    <+> text (show i)-showUntypedLiteral (LitString _ s) = text "VString" <+> text (show s)-showUntypedLiteral (LitFloat  _ f) = text "VFloat"  <+> text (show f)-showUntypedLiteral (LitChar   _ c) = text "VChar"   <+> text (show c)---showClause :: (Term -> TCM Doc) ->-	      (QName -> [Doc] -> TCM Doc) ->-	      ([Doc] -> Term -> TCM Doc) -> Clause -> TCM Doc-showClause fTerm fCon fBody (Clause{ clauseBody = NoBody }) = return empty-showClause fTerm fCon fBody (Clause{ clausePats = pats, clauseBody = body })   = go 0 [] body-    where-    go :: Int -> [Doc] -> ClauseBody -> TCM Doc-    go n dvars NoBody        = return empty-    go n dvars (NoBind body) = go n (dvars ++ [text "_"]) body-    go n dvars (Bind abs)    =-	underAbstraction_ abs{absName = show (n + 1)} $ \body -> do-	    dvar <- fTerm $ Var 0 []-	    go (n + 1) (dvars ++ [dvar]) body-    go n dvars (Body term)   = do-	(_,dpats) <- showPatterns dvars $ map unArg pats-	fBody dpats term--    showPatterns :: [Doc] -> [Pattern] -> TCM ([Doc], [Doc])-    showPatterns dvars []           = return (dvars,[])-    showPatterns dvars (pat : pats) = do-	(dvars', dpat)  <- showPattern  dvars  pat-	(dvars'',dpats) <- showPatterns dvars' pats-	return (dvars'', (dpat : dpats))--    showPattern :: [Doc] -> Pattern -> TCM ([Doc], Doc)-    showPattern (dvar : dvars) (VarP s) = return (dvars, dvar)-    showPattern []             (VarP s) = __IMPOSSIBLE__-    showPattern (dvar : dvars) (DotP _) = return (dvars, dvar)-    showPattern []             (DotP _) = __IMPOSSIBLE__-    showPattern dvars (ConP name args) = do-	(dvars',dargs) <- showPatterns dvars (map unArg args)-	dcon <- fCon name dargs-	return (dvars', dcon)-    showPattern dvars (LitP lit) = do-	dlit <- fTerm $ Lit lit-	return (dvars, dlit)-----
− src/full/Agda/Compiler/Agate/Main.hs
@@ -1,161 +0,0 @@-{-# LANGUAGE CPP #-}--{-| main module.--}--module Agda.Compiler.Agate.Main where--#include "../../undefined.h"-import Agda.Utils.Impossible--import Agda.Compiler.Agate.TranslateName-import Agda.Compiler.Agate.OptimizedPrinter-import Agda.Compiler.Agate.UntypedPrinter-import Agda.Compiler.Agate.Common--import Agda.Syntax.Internal-import Text.PrettyPrint-import Agda.Syntax.Common--import Control.Monad.State-import Control.Monad.Error--import Data.List as List-import qualified Data.Map as Map-import Data.Map (Map)--import Agda.Syntax.Abstract.Name--import Agda.Interaction.Options-import Agda.Interaction.Monad--import Agda.TypeChecker-import Agda.TypeChecking.Monad-import Agda.TypeChecking.Reduce--import Agda.Utils.Monad--import Agda.Version---- | The main function-compilerMain :: TCM () -> TCM ()-compilerMain typeCheck = do-	typeCheck-	sig <- gets stSignature-	let definitions = sigDefinitions sig-	let defs = Map.toList definitions-	maxconargs <- computeMaxArity definitions-	liftIO $ do-	    putStrLn "{-# OPTIONS -fglasgow-exts -cpp #-}"-	    putStrLn ""-	    putStrLn "-- Generated by Agate 2"-	    putStrLn ""-	    printConstants definitions-	    putStrLn ""-	    putStrLn "data Value = VAbs (Value -> Value)"-	    putStrLn "           | VCon0 !Nat"-	    mapM_ (\k -> putStrLn $ "           | VCon" ++ show k ++ " !Nat"-	 			 ++ concat (genericReplicate k " Value") )-	    	  [1..maxconargs]-	    putStrLn "           | VNonData"-	    putStrLn "           | VIO      !(IO Value)"-	    putStrLn "           | VInt     !Integer"-	    putStrLn "           | VFloat   !Double"-	    putStrLn "           | VString  !String"-	    putStrLn "           | VChar    !Char"-	    putStrLn ""-	    putStrLn "instance Show Value where"-	    putStrLn "  show v = case v of"-	    putStrLn "    VAbs     f     -> \"<func>\""-	    putStrLn "    VCon0    c     -> getConString c"-	    mapM_ (\k -> putStrLn $ "    VCon" ++ show k ++ "    c"-	 			 ++ concatMap (\i -> " a" ++ show i) [1..k]-	 			 ++ "\t-> showCons c [a1"-	 			 ++ concatMap (\i -> ",a" ++ show i) [2..k]-	 			 ++ "]" )-	    	  [1..maxconargs]-	    putStrLn "    VNonData       -> \"<nondata>\""-	    putStrLn "    VIO      m     -> \"<IO>\""-	    putStrLn "    VInt     i     -> show i"-	    putStrLn "    VFloat   f     -> show f"-	    putStrLn "    VString  s     -> show s"-	    putStrLn "    VChar    c     -> show c"-	    putStrLn ""-	    --putStrLn "join sep []     = \"\""-	    --putStrLn "join sep [a]    = a"-	    --putStrLn "join sep (a:as) = a ++ sep ++ join sep as"-	    putStrLn ""-	    putStrLn "showCons c as = \"(\" ++ unwords (getConString c : map show as) ++ \")\""-	    putStrLn "showBind (f,v) = show v"-	    putStrLn ""-	    printShowConstants definitions-	    putStrLn "getConString c = show c"-	    putStrLn ""-    	    putStrLn "(|$|) :: Value -> Value -> Value"-	    putStrLn "(VAbs f) |$| x = f x"-	    putStrLn ""-	    putStrLn "class Trans a where"-	    putStrLn "    unbox :: Value -> a"-	    putStrLn "    box   :: a -> Value"-	    putStrLn ""-	    putStrLn "instance Trans () where"-	    putStrLn "    unbox VNonData = ()"-	    putStrLn "    box () = VNonData"-	    putStrLn ""-	    putStrLn "instance (Trans a, Trans b) => Trans (a -> b) where"-	    putStrLn "    unbox (VAbs f) = unbox . f . box"-	    putStrLn "    box f = VAbs ( box . f . unbox )"-	    putStrLn ""-	    putStrLn "instance Trans Integer where"-	    putStrLn "    unbox (VInt i) = i"-	    putStrLn "    box i = VInt i"-	    putStrLn ""-	    putStrLn "instance Trans Double where"-	    putStrLn "    unbox (VFloat f) = f"-	    putStrLn "    box f = VFloat f"-	    putStrLn ""-	    putStrLn "instance Trans String where"-	    putStrLn "    unbox (VString s) = s"-	    putStrLn "    box s = VString s"-	    putStrLn ""-	    putStrLn "instance Trans Char where"-	    putStrLn "    unbox (VChar c) = c"-	    putStrLn "    box c = VChar c"-	    putStrLn ""-	    putStrLn "main = putStrLn $ show x_Main__main"-	liftIO $ putStrLn $ "--"-	ddefs <- mapM showUntypedDefinition defs-	liftIO $ putStrLn $ render $ vcat ddefs-	showOptimizedDefinitions definitions--enumConstructors :: Definitions -> [QName]-enumConstructors = concatMap f . Map.toList where-    f (name, d) = case theDef d of-			Constructor{} -> [name]-                        Record{}      -> [name]-                        _             -> []--computeMaxArity :: Definitions -> TCM Nat-computeMaxArity dd =-    fmap maximum $ mapM getConstructorArity $ map snd $ Map.toList dd--getConstructorArity :: Definition -> TCM Nat-getConstructorArity defn = case theDef defn of-    Record{recFields = flds} -> return $ genericLength flds-    Constructor{conPars = np} -> do-	ty <- normalise $ defType defn-	(args,_) <- splitType ty-	return $ genericLength args - np-    _ -> return 0--printConstants :: Definitions -> IO ()-printConstants dd = mapM_ go $ zip (enumConstructors dd) [1..] where-    go (name,n) = let cname = translateNameAsUntypedConstructor $ show name in-		  putStrLn $ "#define " ++ cname ++ " " ++ show n--printShowConstants :: Definitions -> IO ()-printShowConstants dd = mapM_ go $ zip (enumConstructors dd) [1..] where-    go (name,n) = let pname = show $ qnameName name in-		  putStrLn $ "getConString " ++ show n ++ " = \"" ++ pname ++ "\""------------------------------------------------------------------
− src/full/Agda/Compiler/Agate/OptimizedPrinter.hs
@@ -1,305 +0,0 @@-{-# LANGUAGE CPP #-}--{-| Generate GHC code for optimized datatypes and their values--}--module Agda.Compiler.Agate.OptimizedPrinter where--#include "../../undefined.h"-import Agda.Utils.Impossible--import Control.Monad.Trans-import qualified Data.Map as Map-import Data.Map ((!), Map)--import Agda.Compiler.Agate.Classify-import Agda.Compiler.Agate.TranslateName-import Agda.Compiler.Agate.Common--import Agda.Syntax.Common-import Agda.Syntax.Internal-import Agda.TypeChecking.Monad-import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Free-import Agda.Utils.Pretty-import Agda.Utils.Size--------------------------------------------------------------------showAsOptimizedConstructor :: QName -> TCM Doc-showAsOptimizedConstructor s =-    return $ text $ translateNameAsOptimizedConstructor $ show s--------------------------------------------------------------------showOptimizedDefinitions :: Definitions -> TCM ()-showOptimizedDefinitions definitions = do-    liftIO $ putStrLn ("\n-----\n")-    typefams <- enumCompilableTypeFamilies definitions-    dtypedecls <- showTypeDeclarations definitions typefams-    liftIO $ putStrLn $ render dtypedecls-    optimizableConstants <- enumOptimizableConstants definitions typefams-    liftIO $ putStrLn $ ""-    dvaluedefs <- showValueDefinitions definitions typefams-    liftIO $ putStrLn $ render dvaluedefs-    return ()--------------------------------------------------------------------- Generating GHC Type Declarations--showTypeDeclarations :: Definitions -> [QName] -> TCM Doc-showTypeDeclarations definitions typefams = do-    dtypedecls <- mapM (showTypeDeclaration definitions) typefams-    return $ vcat dtypedecls--showTypeDeclaration :: Definitions -> QName -> TCM Doc-showTypeDeclaration definitions name = do-    dtypename <- showAsOptimizedType name-    let defn = definitions ! name-    ty <- normalise $ defType defn-    case theDef defn of-	Datatype{ dataPars = np, dataIxs = ni, dataCons = cnames } | ni == 0 -> do-	    dparams <- underDatatypeParameters np ty showTypeParameter stop-	    dargs <- mapM (showConstructorDeclaration np) cnames-	    showDatatypeDeclaration dtypename dparams dargs-	Record{ recPars = np, recFields = flds } -> do-	    let arity = np `div` 2-	    dparams <- underDatatypeParameters arity ty showTypeParameter stop-	    dcon <- showAsOptimizedConstructor name-	    dflds <- mapM (showRecordFieldDeclaration (arity + 1)) (map snd flds)-	    showDatatypeDeclaration dtypename dparams [sep $ dcon : dflds]-     	Function { funClauses = [clause@(Clause{ clausePats = pat })] } -> do-	    (args,_) <- splitType ty-	    let dextra = map (\i -> text $ "a" ++ show i)-			     [length pat + 1 .. length args]-	    showTypeSynonymDeclaration dtypename dextra clause-     	_ -> return empty-    where-    stop ty = return []-    showDatatypeDeclaration dtypename dparams [] =-	return $ (text "type") <+> (sep (dtypename : dparams) <+> equals <+>-				    text "()")-    showDatatypeDeclaration dtypename dparams dargs =-	return $ (text "data") <+> (sep $-				    sep (dtypename : dparams) <+> equals :-				    punctuate (text " |") dargs)-				$+$ text "    -- deriving (Show)"-    showTypeSynonymDeclaration dtypename dextra = showClause fTerm fCon fBody-	where-	fTerm = showAsOptimizedType-	fCon name dargs = __IMPOSSIBLE__-	fBody dpats term = do-	    dterm <- showAsOptimizedType term-	    return $ (text "type") <+>-		     (sep (dtypename : (dpats ++ dextra)) <+> equals <+>-		      sep (dterm : dextra))--    showConstructorDeclaration np cname = do-	let defn = definitions ! cname-	ty <- normalise $ defType defn-	dcon <- showAsOptimizedConstructor cname-	underDatatypeParameters np ty (\d t -> return id) $ \ty -> do-	    dargs <- forEachArgM showAsOptimizedType ty-	    return $ sep $ dcon : dargs-    showRecordFieldDeclaration np fldname = do-	let defn = definitions ! fldname-	ty <- normalise $ defType defn-	underDatatypeParameters np ty (\d t -> return id) showAsOptimizedType--showTypeParameter :: Doc -> Type -> TCM ([Doc] -> [Doc])-showTypeParameter dname ty = do-    ty <- instantiate ty-    (args,_) <- splitType ty-    case args of-	[]  -> return $ (:) dname-	_:_ -> do-		dk <- showAsOptimizedKind ty-		return $ (:) $ parens $ sep [ dname <+> text "::", dk ]--underDatatypeParameters :: Nat -> Type -> (Doc -> Type -> TCM (a -> a)) ->-			   (Type -> TCM a) -> TCM a-underDatatypeParameters np ty f k = go 0 ty where-    go i ty        | i >= np = k ty-    go i (El s tm)           = do-      let varname = show (i + 1)-      tm <- reduce tm-      case tm of-	Pi arg abs -> underAbstraction arg abs{absName = varname} $ \ty -> do-	    dname <- showAsOptimizedTerm $ Var 0 []-	    cont <- f dname $ unArg arg-	    dparams <- go (i + 1) ty-	    return $ cont dparams-	Fun arg ty -> do-	    let dname = text $ translateNameAsOptimizedTerm varname-	    cont <- f dname $ unArg arg-	    dparams <- go (i + 1) ty-	    return $ cont dparams-	Var _ _    -> __IMPOSSIBLE__-	Def _ _    -> __IMPOSSIBLE__-	Con _ _    -> __IMPOSSIBLE__-	Sort _	   -> __IMPOSSIBLE__-	Lit _	   -> __IMPOSSIBLE__-	MetaV _ _  -> __IMPOSSIBLE__-	Lam _ _	   -> __IMPOSSIBLE__--------------------------------------------------------------------- Generating GHC Value Definitions--showValueDefinitions :: Definitions -> [QName] -> TCM Doc-showValueDefinitions definitions typefams = do-    let defs = Map.toList definitions-    dvaluedefs <- mapM (showValueDefinition definitions typefams) defs-    return $ vcat dvaluedefs--showValueDefinition :: Definitions -> [QName] -> (QName,Definition) -> TCM Doc-showValueDefinition definitions typefams (name, defn) = do-    dname <- showAsOptimizedTerm name-    ty <- normalise $ defType defn-    dty <- showAsOptimizedType ty-    let dtypedecl = sep [ dname, text "::" ] <+> dty-    case theDef defn of-	Axiom{} -> do-	    let dvaluedef = sep [ dname, equals ] <+>-			    sep [ text "undefined {- postulate -}" ]-	    return $ dtypedecl $+$ dvaluedef-	Function { funClauses = clauses } -> do-	    dclauses <- mapM (showOptimizedClause dname) clauses-	    return $ vcat $ dtypedecl : dclauses-	Datatype{ dataPars = np, dataIxs = ni, dataCons = cnames } -> do-	    let dvars = map (\i -> text ("v" ++ show i)) [1 .. np + ni]-	    let dvaluedef = sep [ sep (dname : dvars), equals ] <+> text "()"-	    return $ dtypedecl $+$ dvaluedef-	Record{} ->-	    return empty  -- no o_xxx since we always use D_xxx-	Constructor{} ->-	    return empty  -- no o_xxx since we always use D_xxx-	Primitive { primName = pf } -> do-	    let dvaluedef = sep [ dname, equals ] <+>-			    sep [ text (show name), text "{- primitive -}" ]-	    return $ dtypedecl $+$ dvaluedef--showOptimizedClause :: Doc -> Clause -> TCM Doc-showOptimizedClause dfuncname = showClause fTerm fCon fBody where-    fTerm = showAsOptimizedTerm-    fCon name dargs = do-	dname <- showAsOptimizedConstructor name-	return $ parens $ sep (dname : dargs)-    fBody dpats term = do-	dterm <- showAsOptimizedTerm term-	return $ (sep (dfuncname : dpats) <+> equals) <+> nest 2 dterm--------------------------------------------------------------------- implementation of the "K" function--class ShowAsOptimizedKind a where-    showAsOptimizedKind :: a -> TCM Doc--instance ShowAsOptimizedKind Type where-    showAsOptimizedKind (El s t) = showAsOptimizedKind t--instance ShowAsOptimizedKind Term where-    showAsOptimizedKind t = do-	t <- reduce t-	case t of-	    Pi arg abs -> do-		dk1 <- showAsOptimizedKind $ unArg arg-		dk2 <- showAsOptimizedKind $ absBody abs-		return $ parens $ sep [dk1 <+> text "->", dk2]-	    Fun arg ty -> do-		dk1 <- showAsOptimizedKind $ unArg arg-		dk2 <- showAsOptimizedKind $ ty-		return $ parens $ sep [dk1 <+> text "->", dk2]-	    Sort s     -> return $ text "*"-	    Var _ _    -> return $ text "*" -- ok?-	    Def _ _    -> __IMPOSSIBLE__-	    Con _ _    -> __IMPOSSIBLE__-	    Lit _      -> __IMPOSSIBLE__-	    MetaV _ _  -> __IMPOSSIBLE__-	    Lam _ _    -> __IMPOSSIBLE__--------------------------------------------------------------------- implementation of the "T" function--class ShowAsOptimizedType a where-    showAsOptimizedType :: a -> TCM Doc--instance ShowAsOptimizedType QName where-    showAsOptimizedType s = return $ text $ translateNameAsOptimizedType $ show s--instance ShowAsOptimizedType Type where-    showAsOptimizedType (El s t) = showAsOptimizedType t--instance ShowAsOptimizedType Term where-    showAsOptimizedType t = do-	t <- reduce t-	case t of-	    Var n args -> do-		varname <- nameOfBV n-		dvar <- showAsOptimizedTerm varname-		dargs <- mapM (showAsOptimizedType . unArg) args-		return $ psep $ dvar : dargs-	    Def name args -> do-		dname <- showAsOptimizedType name-		dargs <- mapM (showAsOptimizedType . unArg) args-		return $ psep $ dname : dargs-	    Con name args -> do-		return $ text "<constructor term (impossible)>"-	    Pi arg abs -> do-		dt1 <- showAsOptimizedType $ unArg arg-		underAbstraction_ abs $ \body -> do-		    dvar <- showAsOptimizedTerm $ Var 0 []-		    dt2 <- showAsOptimizedType body-		    case freeIn 0 body of-			True  -> return $ parens $ sep $-			    [ sep [ text "forall",-				    dvar <> text ".", dt1, text "->" ],-			      dt2 ]-			False -> return $ parens $ sep [dt1 <+> text "->", dt2]-	    Fun arg ty -> do-		dt1 <- showAsOptimizedType $ unArg arg-		dt2 <- showAsOptimizedType $ ty-		return $ parens $ sep [dt1, text "->", dt2]-	    Sort s        -> return $ text "()"-	    MetaV id args -> return $ text "<meta (impossible)>"-	    Lam h t       -> __IMPOSSIBLE__-	    Lit lit       -> __IMPOSSIBLE__---------------------------------------------------------------------- implementation of the "O" function--class ShowAsOptimizedTerm a where-    showAsOptimizedTerm :: a -> TCM Doc--instance ShowAsOptimizedTerm Name where-    showAsOptimizedTerm s = return $ text $ translateNameAsOptimizedTerm $ show s--instance ShowAsOptimizedTerm QName where-    showAsOptimizedTerm s = return $ text $ translateNameAsOptimizedTerm $ show s--instance ShowAsOptimizedTerm Term where-    showAsOptimizedTerm (Var n args) = do-    	varname <- nameOfBV n-    	dvar <- showAsOptimizedTerm varname-    	dargs <- mapM (showAsOptimizedTerm . unArg) args-    	return $ psep $ dvar : dargs-    showAsOptimizedTerm (Lam h abs) = underAbstraction_ abs $ \body -> do-    	dvar <- showAsOptimizedTerm $ Var 0 []-    	dt <- showAsOptimizedTerm body-    	return $ parens $ sep [ text "\\" <> dvar, text "->", dt ]-    showAsOptimizedTerm (Def name args) = do-	dname <- showAsOptimizedTerm name-	dargs <- mapM (showAsOptimizedTerm . unArg) args-	return $ psep $ dname : dargs-    showAsOptimizedTerm (Con name args) = do-    	dname <- showAsOptimizedConstructor name-    	dargs <- mapM (showAsOptimizedTerm . unArg) args-    	return $ psep $ dname : dargs-    showAsOptimizedTerm (Lit lit)        = return $ showOptimizedLiteral lit-    showAsOptimizedTerm (Pi _ _)	 = return $ text "()"-    showAsOptimizedTerm (Fun _ _)	 = return $ text "()"-    showAsOptimizedTerm (Sort _)	 = return $ text "()"-    showAsOptimizedTerm (MetaV id args)  = __IMPOSSIBLE__---------------------------------------------------------------------
− src/full/Agda/Compiler/Agate/TranslateName.hs
@@ -1,53 +0,0 @@-{-# LANGUAGE CPP #-}--{-| Translate Agda names into a variety of GHC names--}--module Agda.Compiler.Agate.TranslateName where--#include "../../undefined.h"-import Agda.Utils.Impossible--import Data.Char--------------------------------------------------------------------translateNameAsUntypedTerm :: String -> String-translateNameAsUntypedTerm "_"                 = "_"-translateNameAsUntypedTerm s   | all isDigit s = 'x':s-translateNameAsUntypedTerm s                   = 'x':'_':escape s--translateNameAsUntypedConstructor :: String -> String-translateNameAsUntypedConstructor s = 'C':'_':escape s--translateNameAsOptimizedType :: String -> String-translateNameAsOptimizedType "_" = "_"-translateNameAsOptimizedType s   = 'T':'_':escape s--translateNameAsOptimizedTerm :: String -> String-translateNameAsOptimizedTerm "_"                 = "_"-translateNameAsOptimizedTerm s   | all isDigit s = 'o':s-translateNameAsOptimizedTerm s                   = 'o':'_':escape s--translateNameAsOptimizedConstructor :: String -> String-translateNameAsOptimizedConstructor s = 'D':'_':escape s--------------------------------------------------------------------escape :: String -> String-escape ""      = ""-escape "_"     = "_"-escape (c:s) | isUpper c || isLower c || isDigit c = c:escape s-escape ('.':s) = '_':'_':escape s-escape ('_':s) = '_':'z':escape s-escape (c:s) | ord c >= 256-	       = '_':'u'-                    :intToDigit (ord c `div` 4096)-                    :intToDigit ((ord c `div` 256) `mod` 16)-                    :intToDigit ((ord c `div` 16)  `mod` 16)-                    :intToDigit (ord c `mod` 16):escape s-escape (c:s)   = '_':intToDigit (ord c `div` 16)-                    :intToDigit (ord c `mod` 16):escape s-------------------------------------------------------------------
− src/full/Agda/Compiler/Agate/UntypedPrinter.hs
@@ -1,124 +0,0 @@-{-# LANGUAGE CPP #-}--{-| Generate GHC code for untyped execution--}--module Agda.Compiler.Agate.UntypedPrinter where--import Data.List--#include "../../undefined.h"-import Agda.Utils.Impossible--import Agda.Compiler.Agate.TranslateName-import Agda.Compiler.Agate.Common-import Agda.Compiler.Agate.OptimizedPrinter--import Agda.Syntax.Common-import Agda.Syntax.Internal-import Agda.Syntax.Literal-import Agda.TypeChecking.Monad-import Agda.TypeChecking.Reduce-import Agda.Utils.Pretty--------------------------------------------------------------------showAsUntypedConstructor :: QName -> TCM Doc-showAsUntypedConstructor name =-    return $ text $ translateNameAsUntypedConstructor $ show name--------------------------------------------------------------------- implementation of the "X" function--class ShowAsUntypedTerm a where-    showAsUntypedTerm :: a -> TCM Doc--instance ShowAsUntypedTerm Name where-    showAsUntypedTerm t = return $ text $ translateNameAsUntypedTerm $ show t--instance ShowAsUntypedTerm QName where-    showAsUntypedTerm t = return $ text $ translateNameAsUntypedTerm $ show t--instance ShowAsUntypedTerm Term where-    showAsUntypedTerm (Var n args) = do-	varname <- nameOfBV n-	showUntypedApp varname args-    showAsUntypedTerm (Lam h abs) = underAbstraction_ abs $ \body -> do-	dvar <- showAsUntypedTerm $ Var 0 []-	dbody <- showAsUntypedTerm body-	return $ parens $ text "VAbs" <+>-		 parens (sep [ text "\\" <> dvar, text "->", dbody ])-    showAsUntypedTerm (Con name args) = showUntypedApp name args-    showAsUntypedTerm (Def name args) = showUntypedApp name args-    showAsUntypedTerm (Lit lit)    = return $ parens $ showUntypedLiteral lit-    showAsUntypedTerm (Pi _ _)	   = return $ text "VNonData"-    showAsUntypedTerm (Fun _ _)    = return $ text "VNonData"-    showAsUntypedTerm (Sort _)	   = return $ text "VNonData"-    showAsUntypedTerm (MetaV _ _)  = __IMPOSSIBLE__--showUntypedApp :: ShowAsUntypedTerm a => a -> [Arg Term] -> TCM Doc-showUntypedApp head args = do-    dhead <- showAsUntypedTerm head-    dargs <- mapM (showAsUntypedTerm . unArg) args-    return $ foldl (\f a -> parens (f <+> text "|$|" <+> a)) dhead dargs--------------------------------------------------------------------showUntypedDefinition :: (QName, Definition) -> TCM Doc-showUntypedDefinition (name, defn) = do-    dname <- showAsUntypedTerm name-    case theDef defn of-	Axiom{} ->-	    return $ sep [ dname, equals ] <+>-		     sep [ text "undefined {- postulate -}" ]-	Function {funClauses = []} -> __IMPOSSIBLE__-	Function {funClauses = clauses} -> do-            let pats = clausePats $ head clauses-	    let dvars = map (\i -> text ("v" ++ show i)) [1 .. length pats]-	    let drhs = untypedAbs dvars $ sep (text "f" : dvars)-	    dclauses <- mapM showUntypedClause clauses-	    return $ (dname <+> equals) <+> drhs <+> text "where" $+$-		     nest 2 (vcat dclauses)-	Datatype{ dataPars = np, dataIxs = ni, dataCons = cnames } -> do-	    let dvars = map (\i -> text ("v" ++ show i)) [1 .. np + ni]-	    let drhs = untypedAbs dvars $ text "VNonData"-	    return $ sep [ dname, equals ] <+> drhs <+> text "{- datatype -}"-	Record{ recPars = np, recFields = flds } -> do-	    dcname <- showAsUntypedConstructor name-	    let arity = length flds-	    let dvars = map (\i -> text ("v" ++ show i)) [1 .. arity]-	    let drhs = untypedAbs dvars $ sep $-		       text "VCon" <> text (show arity) : dcname : dvars-	    return $ sep [ dname, equals ] <+> drhs-	Constructor{ conPars = np } -> do-	    dcname <- showAsUntypedConstructor name-	    ty <- instantiate $ defType defn-	    (args,_) <- splitType ty-	    let arity = genericLength args - np-	    let dvars = map (\i -> text ("v" ++ show i)) [1 .. arity]-	    let drhs = untypedAbs dvars $ sep $-		       text "VCon" <> text (show arity) : dcname : dvars-	    return $ sep [ dname, equals ] <+> drhs-	Primitive{ primName = pf } -> do-	    doptname <- showAsOptimizedTerm name-	    return $ sep [ dname, equals ] <+>-		     sep [ text "box", doptname, text "{- primitive -}" ]--untypedAbs :: [Doc] -> Doc -> Doc-untypedAbs dvars dtail = foldr-    (\dvar d -> sep [ text "VAbs (\\" <> dvar <+> text "->",-		      d <> text ")" ]) dtail dvars--showUntypedClause :: Clause -> TCM Doc-showUntypedClause = showClause fTerm fCon fBody where-    fTerm = showAsUntypedTerm-    fCon name dargs = do-	dname <- showAsUntypedConstructor name-	return $ parens $ (text "VCon" <> text (show (length dargs))) <+>-			  sep (dname : dargs)-    fBody dpats term = do-	dterm <- showAsUntypedTerm term-	return $ text "f" <+> sep [ sep [ sep dpats, equals ], dterm ]---------------------------------------------------------------------
− src/full/Agda/Compiler/Alonzo/Haskell.hs
@@ -1,112 +0,0 @@-module Agda.Compiler.Alonzo.Haskell where-import Language.Haskell.Syntax-import Language.Haskell.Pretty-import System.IO--dummyLoc :: SrcLoc-dummyLoc = SrcLoc "=alonzo=" 0 0--hsModule :: String -> [HsDecl] -> HsModule-hsModule name decls = HsModule dummyLoc (Module name) Nothing [] decls--hsModuleImporting :: String -> [String] -> [String] -> [HsDecl] -> HsModule-hsModuleImporting name imps qimps decls =-  HsModule dummyLoc (Module name) Nothing-    (map hsImport imps ++ impRTS : impRTP : map hsQImport qimps) decls--hsImport :: String -> HsImportDecl-hsImport s = HsImportDecl dummyLoc (Module s) False Nothing Nothing--hsQImport :: String -> HsImportDecl-hsQImport s = HsImportDecl dummyLoc (Module s) True Nothing Nothing--impRTS :: HsImportDecl-impRTS = hsImport "RTS"--impRTP :: HsImportDecl-impRTP = hsQImport "RTP"--hsUndefined :: HsExp-hsUndefined = hsVar "undefined"--hsError :: String -> HsExp-hsError s = HsApp (hsVar "error") (HsLit $ HsString s)--hsCast e@(HsVar _) = HsApp (hsVar "cast") e-hsCast e@(HsCon _) = HsApp (hsVar "cast") e-hsCast e = HsApp (hsVar "cast") (HsParen e)--hsVar :: String -> HsExp-hsVar s = HsVar $ UnQual $ HsIdent s--hsCon :: String -> HsExp-hsCon s = HsCon $ UnQual $ HsIdent s--hsLam :: String -> HsExp -> HsExp-hsLam n e = HsLambda dummyLoc [HsPVar (HsIdent n)] e--hsAp :: HsExp -> HsExp -> HsExp-hsAp e1 e2 =  HsApp (hsCast e1) $ HsParen (hsCast e2)--outputHsModule s hsmod numOfMainS = do-  handle <- openFile (s++".hs") WriteMode-  printHsModule handle hsmod-  case numOfMainS of-    Nothing -> return ()-    Just i -> printHsMain handle i-  hClose handle--printHsMain handle i = do-  hPutStrLn handle mainStr where-      -- mainStr = "main = putStrLn d" ++ (show i)-      mainStr = "main = d" ++ show i--printHsModule :: Handle -> HsModule -> IO ()-printHsModule handle hsmod = do-	    hPutStrLn handle "{-# OPTIONS -fglasgow-exts #-}"-	    hPutStrLn handle ""-	    hPutStrLn handle "-- Generated by Alonzo"-	    hPutStrLn handle ""-            hPutStrLn handle $ prettyPrint $ hsmod--printHsDecls :: [HsDecl] -> IO ()-printHsDecls ds = mapM_ (putStrLn . prettyPrint) ds--data AlDecl = AlDecl [HsDecl] | AlComment String--printAlDecl :: AlDecl -> IO()-printAlDecl (AlDecl ds) = printHsDecls ds-printAlDecl (AlComment s) = putStrLn $ "{- "++s++" -}"--printAlModule :: String -> [AlDecl] -> IO()-printAlModule name ds = do-	    putStrLn "{-# OPTIONS -fglasgow-exts -cpp #-}"-	    putStrLn ""-	    putStrLn "-- Generated by Alonzo"-	    putStrLn ""-            putStrLn $ "module " ++ name ++ " where"-            putStrLn "import RTS"-            mapM_ printAlDecl ds---{---type sigs-HsExp = ...-HsExpTypeSig SrcLoc HsExp HsQualType--data HsQualType-	 = HsQualType HsContext HsType-type HsContext = [HsAsst]--HsType = ... HsTyCon HsQName--}--hsTypedExp :: HsQName -> HsExp -> HsExp-hsTypedExp qn e = HsExpTypeSig dummyLoc e $ HsQualType [] $ HsTyCon qn--hsPreludeName :: String -> HsQName-hsPreludeName s = Qual prelude_mod $ HsIdent s--hsPreludeTypedExp :: String -> HsExp -> HsExp-hsPreludeTypedExp s e = hsTypedExp (hsPreludeName s) e
− src/full/Agda/Compiler/Alonzo/Main.hs
@@ -1,504 +0,0 @@-{-# LANGUAGE CPP #-}--module Agda.Compiler.Alonzo.Main where--#include "../../undefined.h"-import Agda.Utils.Impossible--import Debug.Trace(trace)-import Language.Haskell.Syntax-import Language.Haskell.Pretty-import System.FilePath (pathSeparator)--import Agda.Compiler.Alonzo.Haskell--- import Agda.Compiler.Alonzo.Debug-import Agda.Compiler.Alonzo.Names-import Agda.Compiler.Alonzo.PatternMonad--- import qualified Agda.Compiler.Alonzo.PatternMonadLift as PML--import qualified Agda.Syntax.Concrete.Name as C--import Agda.Syntax.Internal-import Agda.Syntax.Literal--- import Agda.Syntax.Scope-import Text.PrettyPrint-import Agda.Syntax.Common--- import Agda.Syntax.Abstract(Pattern'(..),Pattern)--import Control.Applicative-import Control.Monad.State--import qualified Data.Set as Set-import qualified Data.Map as Map-import Data.List as List-import Data.Set (Set)-import Data.Map (Map, (!))-import Data.Generics.Text---- import Agda.Syntax.Abstract.Test-import Agda.Syntax.Abstract.Name-import qualified Agda.Syntax.Concrete.Name as CN--import Agda.Interaction.Options-import Agda.Interaction.Monad--import Agda.TypeChecker-import Agda.TypeChecking.Monad-import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.Reduce--import Agda.Utils.Monad-import Agda.Utils.Permutation-import Agda.Utils.Pretty--import System.IO--- import Data.List(nub)---- import Agda.Version---- | The main function-compilerMain :: TCM () -> TCM ()-compilerMain typeCheck = ignoreAbstractMode $ do-      typeCheck-      sig <- gets stSignature-      let (moduleName:_) =  Map.keys $ sigSections sig-      withCurrentModule moduleName $ do -- TODO: Hack!-        builtinMap <- getBuiltinThings-	-- let sigs = toList sig-	-- let definitions = mdefDefs (snd (head sigs)) -- :: Map Name Definition-	let definitions = sigDefinitions sig -- :: Map QName Definition-	let defs = Map.toList definitions-        let names = List.map fst defs-        hsdefs <- mapM processDefWithDebug defs-        -- We get more than we need here-        allImps <- map (render . pretty) . Map.keys <$> getVisitedModules-        verboseS "comp.alonzo.import" 20 $ liftIO $ mapM_ (\m -> putStrLn $ "import " ++ m) allImps-        hImps <- getHaskellImports-        let mainNum = (numOfMainS names)-        let fileBase = map pathSep (show moduleName)-              where-                pathSep '.' = pathSeparator-                pathSep c   = c-        let moduleString = show moduleName-        let hsmod = hsModuleImporting moduleString (Set.toList hImps) allImps (concat hsdefs)-        liftIO $ outputHsModule fileBase hsmod mainNum-        -- let almod = List.map AlDecl hsdefs-        -- liftIO $ printAlModule moduleString almod---- TODO: move somewhere else-fromCurrentModule :: QName -> TCM Bool-fromCurrentModule q = do-  m <- qnameFromList . mnameToList <$> currentModule-  return $ moduleId q == moduleId m-  where-    moduleId q = mi-      where NameId _ mi = nameId $ qnameName q--flattenSubmodules :: QName -> TCM QName-flattenSubmodules q = do-  ifM (fromCurrentModule q)-      (return q)-  $ do-    topModules <- map (iModuleName . miInterface) . Map.elems <$>-                    getVisitedModules-    case filter (isInModule q) topModules of-      [top]     -> return $ q { qnameModule = top }-      []        -> error $ "flattenSubmodules: " ++ show q ++ " </- " ++ show topModules-      _ : _ : _ -> __IMPOSSIBLE__--maybeQualName :: (QName -> HsQName) -> (Name -> HsName) -> QName -> PM HsQName-maybeQualName qual unqual q = lift $ do-  ifM (fromCurrentModule q)-      (return $ UnQual (unqual $ qnameName q))-      (qual <$> flattenSubmodules q)--maybeQualConName = maybeQualName conQName conName-maybeQualDefName = maybeQualName dfQName dfName--numOfMainS :: [QName] -> Maybe Nat-numOfMainS [] = Nothing-numOfMainS (n:ns) | isMain (qnameName n) = Just $ numOfQName n-                  | otherwise = numOfMainS ns---- isMain (Name _ (C.Name _ [C.Id _ "mainS"]) _ _ ) = True-isMain n = (show n == "main")----processDefWithDebug :: (QName,Definition) -> TCM [HsDecl]-processDefWithDebug (qname,def) = do-     def <- instantiateFull def-     hsdecls <- processDef (qname,def)-     return (nameInfo:hsdecls) where-         nameInfo = infoDecl infoName (show name)-         infoName = "name" ++ (show $ numOfName name)-	 name = qnameName qname--infoDecl :: String -> String -> HsDecl-infoDecl name val = HsFunBind [ HsMatch dummyLoc hsname [] rhs []] where-    rhs = HsUnGuardedRhs $ HsLit $ HsString val-    hsname = HsIdent name---processDef :: (QName,Definition) -> TCM [HsDecl]-processDef (qname,Defn { theDef = Function { funClauses = clauses } }) =  do-      hsDecls <- foldClauses name 1 clauses-      return [HsFunBind [HsMatch dummyLoc (dfName name) [] rhs hsDecls]] where-                rhs = HsUnGuardedRhs $ HsVar $ UnQual $ dfNameSub name 1-                name = qnameName qname--processDef (qname,Defn { theDef = Datatype{ dataPars = n, dataClause = Nothing, dataCons = [] } }) = do-  return [ddecl,vdecl]  where-      name = qnameName qname-      ddecl = HsDataDecl  dummyLoc [] (dataName name) tvars cons []-      tvars = []-      cons = [HsConDecl dummyLoc (conName name) [] ]-      vdecl = HsFunBind [ HsMatch dummyLoc hsname (nDummyArgs n) rhs []]-      rhs = HsUnGuardedRhs $ HsVar $ unit_con_name-      hsname = dfName name-      nDummyArgs :: Nat -> [HsPat]-      nDummyArgs 0 = []-      nDummyArgs k = (HsPVar $ HsIdent ("v" ++ (show k))) : nDummyArgs (k-1)--processDef (qname,Defn { theDef = Datatype{ dataPars = n, dataIxs = nind, dataClause = Nothing, dataCons = cs }}) = do-  cons <- consForName name cs-  arities <- getConArities cs-  return [ddecl cons arities,vdecl]  where-      name = qnameName qname-      dataname = dataName name-      ddecl cs arities = HsDataDecl  dummyLoc [] dataname (tvars arities) cs []-      tvars arities = genericTake (List.maximum arities) $ List.map HsIdent letters-      vdecl = HsFunBind [ HsMatch dummyLoc hsname (nDummyArgs (n+nind)) rhs []]-      rhs = HsUnGuardedRhs $ HsVar $ unit_con_name-      hsname = dfName name-      nDummyArgs 0 = []-      nDummyArgs k = (HsPVar $ HsIdent ("v" ++ (show k))) : nDummyArgs (k-1)---- Records are translated to a data with one cons-processDef (qname, Defn { theDef =-            Record { recPars = n, recFields = fields, recTel = tel } }) =  do-   return [ddecl arity tel,vdecl tel]  where-      name = qnameName qname-      arity = genericLength fields-      ddecl n tel = HsDataDecl  dummyLoc [] dataname (tvars n) [con n] []-      dataname = (dataName name)-      tvars n = genericTake n idents-      con n = HsConDecl dummyLoc (conName  name) args-      idents = List.map HsIdent letters-      args =  List.map (HsUnBangedTy . HsTyVar) $ genericTake arity idents-      vdecl tel = HsFunBind [ HsMatch dummyLoc hsname (nDummyArgs 0) rhs []]-      rhs = HsUnGuardedRhs $ HsVar $ unit_con_name-      hsname = dfName name-      nDummyArgs 0 = []-      nDummyArgs k = (HsPVar $ HsIdent ("v" ++ (show k))) : nDummyArgs (k-1)--processDef def@(qname,Defn { theDef = Constructor{} }) =-    return []--processDef def@(qname,Defn { theDef = Axiom{axHsDef = mhs} }) = return-  [HsFunBind [HsMatch dummyLoc hsid  [] rhs decls]] where-             rhs = HsUnGuardedRhs $ case mhs of-                    Just (HsDefn _ hs) -> hsVar hs-                    _                  -> hsError $ "axiom: " ++ show qname-             decls = []-             hsid = dfName name-             name = qnameName qname--processDef (qname,Defn { theDef = Primitive info prim expr }) = return $-  [HsFunBind [HsMatch dummyLoc hsid  [] rhs decls]] where-             -- rhs = HsUnGuardedRhs $ error $ "primitive: " ++ (show prim)-             rhs = HsUnGuardedRhs $ HsVar $ rtpQName prim-             decls = []-             hsid = dfName name-             name = qnameName qname--processDef (qname, (Defn { theDef = Datatype{dataClause = Just clause} })) = do-           -- liftIO $ putStrLn $ gshow $ clauseBod clause-    mkSynonym (clauseBod clause) where-    name = qnameName qname-    mkSynonym (Lam _ (Abs _ t)) = mkSynonym t-    mkSynonym (Def rhsqname args) = return [ddecl, vdecl] where-      ddecl = HsTypeDecl loc dname [] typ-      moduleName = qnameModule rhsqname-      hsModuleName = Module $ moduleStr moduleName-      vdecl = HsFunBind [ HsMatch dummyLoc hsname (nDummyArgs 0) rhs []]-      rhs = HsUnGuardedRhs $ HsVar $ unit_con_name-      hsname = dfName name-      loc = dummyLoc-      nDummyArgs 0 = []-      nDummyArgs k = (HsPVar $ HsIdent ("v" ++ (show k))) : nDummyArgs (k-1)-      dname = dataName name-      typ = HsTyCon $ Qual hsModuleName $ dataName $ qnameName rhsqname-    mkSynonym t = __IMPOSSIBLE__-{-          do-              liftIO $ putStrLn $ gshow t-              return []--}--{--  t <- normalise $ Def qname []-  mkSynonym t where-    name = qnameName qname-    mkSynonym (Lam _ (Abs _ t)) = mkSynonym t-    mkSynonym (Def newqn args) = return [ddecl, vdecl] where-      ddecl = HsTypeDecl loc dname [] typ--      loc = dummyLoc-      dname = dataName name-      typ = HsTyCon $ UnQual $ dataName $ qnameName newqn-    mkSynonym t = do-              liftIO $ putStrLn $ gshow t-              return []--}----- error "Unimplemented: Datatype from module"--consForName dname qns = mapM (processCon dname)  qns--times :: Nat -> a -> [a]-times 0 x = []-times n x = x:(times (n-1) x)--processCon dname qn = do-  -- let id = nameId $ qnameName qn-  -- let NameId cn = id-  arity <- getConArity qn-  -- let arg = HsUnBangedTy $ HsTyCon unit_tycon_name-  let arg = HsUnBangedTy $ HsTyVar $ HsIdent "a"-  let idents =  List.map HsIdent letters-  let args =  List.map (HsUnBangedTy . HsTyVar) $ genericTake arity idents-  return $ HsConDecl dummyLoc (conName $ qnameName qn) args--{--dummyCon :: Nat -> Nat -> HsConDecl-dummyCon i j = HsConDecl dummyLoc (mangleConName i j) []--mangleConName :: Nat -> Nat -> HsCode--- mangleConName i j = (HsIdent $ "C"++(show i)++"_"++(show j))-mangleConName i j = (HsIdent $ "C"++(show j))--}---- consForData :: QName -> TCM [Definition]--- consForData qn = undefined--consDefs :: [QName] -> TCM [Definition]-consDefs qns = do-  definitions <- getDefinitions-  return [definitions ! qn | qn <- qns]---processClause :: Name -> Nat -> Clause -> TCM HsDecl-processClause name number clause@(Clause{ clausePerm = perm-                                        , clausePats = args-                                        , clauseBody = body-                                        }) = do-  reportSLn "comp.alonzo.clause" 20 $-    "processClause " ++ show name ++ "\n" ++-    "  perm = " ++ show perm ++ "\n" ++-    "  args = " ++ show args ++ "\n"-  ldefs <- getDefinitions-  let bodyPM = processBody body-      pst0   = initPState clause ldefs-  (exp, pst) <- runStateT bodyPM pst0-  let rhs = HsUnGuardedRhs exp-  (pats, pst2) <- runStateT (processArgPats args) pst-  return $ HsFunBind $ [HsMatch dummyLoc hsid pats rhs decls]-    where-                    decls = []-                    hsid = dfNameSub name $ fromIntegral number-                    -- pats =  processArgPats  args--contClause :: Name -> Nat -> Clause -> TCM HsDecl-contClause name number (Clause{ clausePats = args, clauseBody = body }) = do-  return $ HsFunBind $ [HsMatch dummyLoc hsid pats rhs decls] where-                decls = []-                hsid = dfNameSub name (fromIntegral number)-                rightLetters =  genericTake (length args) letters-                pats = List.map (HsPVar . HsIdent) rightLetters-                rhs = HsUnGuardedRhs exp-		exp = vecApp expfun expargs-                expfun = hsCast$ HsVar $ UnQual $ dfNameSub name (fromIntegral $ number+1)-                expargs = List.map (HsVar . UnQual . HsIdent) rightLetters--foldClauses :: Name -> Nat -> [Clause] -> TCM [HsDecl]-foldClauses name n [] = return []-foldClauses name n [c] = do-        decl <- processClause name n c-        return [decl]-foldClauses name n (c:cs) = do-	head <- processClause name n c-        cont <- contClause name n c-	tail <- foldClauses name (n+1) cs-	return (head:cont:tail)--processArgPats :: [Arg Pattern] -> PM [HsPat]-processArgPats args = mapM processArgPat args--processArgPat :: (Arg Pattern) -> PM HsPat-processArgPat (Arg hid pat) = processPat pat--processPat :: Pattern -> PM HsPat-processPat (VarP _) = do-  pats  <- getPlst-  case pats of-        [] -> do-	   c <- getPclause-	   error $ "Oops! empty pattern list in\n" ++ (gshow c)-	(p:ps) -> do-	  putPlst ps-	  return p--processPat (DotP _) = return HsPWildCard--processPat (ConP qname args) = do-  hsCode <- do-    def <- lift $ theDef <$> getConstInfo qname-    case def of-      Constructor{conHsCode = c} -> return c-      Record{}                   -> return Nothing  -- no COMPILED_DATA for records yet-      _                          -> __IMPOSSIBLE__-  cname <- case hsCode of-        Just (_, h)  -> return $ UnQual $ HsIdent h-        Nothing -> maybeQualConName qname-  hspats <- mapM processArgPat args-  return $ HsPParen $ HsPApp cname hspats--processPat (LitP (LitInt _ i)) = return $ HsPLit (HsInt i)-processPat (LitP (LitChar _ c)) =-  return $  HsPParen $ HsPApp (rtpCon "CharT") [HsPLit (HsChar c)]-processPat (LitP _) = error "Unimplemented literal patttern"--- processPat (AbsurdP _) = return HsPWildCard---processBody :: ClauseBody -> PM HsExp-processBody (NoBind cb) = do-        addWildcard-	processBody cb-processBody (Bind (Abs name cb)) = do-	-- cnt <- getPcnt-	addVar-	incPcnt-	processBody cb--processBody (Body t) = processTerm t >>= (return . hsCast)-processBody NoBody = do-	putPlst (repeat HsPWildCard)-	return hsUndefined--processTerm :: Term -> PM HsExp-processTerm (Var n ts) = do-  cnt <- getPcnt-  processVap (hsVar $ "v" ++ (show (cnt - fromIntegral n - 1))) ts--processTerm (Def qn ts) = do-  x <- maybeQualDefName qn-  processVap (HsVar x) ts---- Check if the con was redefined from other module--- if so, use the original name--- !!!-processTerm (Con qn ts) = do-  def <- lift $ theDef <$> getConstInfo qn-  case def of-    Constructor{conHsCode = Just (_, hs)} ->-        processVap (HsCon $ UnQual $ HsIdent hs) ts-    -- Can be a record constructor in which case the def will be for the record.-    _ -> do-      ldefs <- getPDefs-      if (Map.member qn ldefs)-        then do-          definiens <- case theDef <$> Map.lookup qn ldefs of-                          Just df -> return df-                          Nothing -> fail $ "Alonzo: No such definition: " ++ show qn-          case definiens of-            Constructor{conSrcCon = origqn} -> do-              x <- maybeQualConName origqn-              processVap (HsCon x) ts-            _ -> do-              x <- maybeQualConName qn-              processVap (HsCon x) ts-        else do-          x <- maybeQualConName qn-          processVap (HsCon x) ts--processTerm (Lam h (Abs n t)) = do-  cnt <- getPcnt-  incPcnt-  exp <- processTerm t-  return $ hsLam ("v" ++ show cnt)  exp-processTerm (Lit l) = return $  (processLit l)-processTerm (Pi arg abs) = return $ HsVar  unit_con_name-processTerm (Fun arg typ) = return $ HsVar  unit_con_name-processTerm (Sort s) =  return $ HsVar  unit_con_name-processTerm (MetaV _ _) =  error "Can't have metavariables"---- processTerm t =  return hsUndefined--processLit :: Literal -> HsExp-processLit (LitLevel r i) = processLit (LitInt r i)-processLit (LitInt _ i) =  HsApp toNat $ intLit i where-	intLit i = HsParen $ hsPreludeTypedExp "Integer" $ HsLit $ HsInt i-	toNat = HsVar $ Qual (Module "RTP") $ HsIdent "_primIntegerToNat"-processLit (LitFloat _ f) =  hsPreludeTypedExp "Double" $-						HsLit $ HsFrac $ toRational f--- processLit (LitFloat _ f) =  HsApp (HsVar $ rtpCon "FloatT")---                                   (HsLit $ HsFrac $ toRational f)-processLit (LitString _ s) =  HsLit $ HsString s-processLit (LitChar _ c) =  HsApp (HsVar $ rtpCon "CharT")-                                  (HsLit $ HsChar c)--processVap :: HsExp -> [Arg Term] -> PM HsExp-processVap e ts = do-  p <- get-  lift $ unfoldVap p e ts--unfoldVap :: PState -> HsExp -> [Arg Term] -> TCM HsExp-unfoldVap _ e [] = return e-unfoldVap p e ((Arg NotHidden t):ts) = do-  e1 <- evalStateT (processTerm t) p-  unfoldVap p (hsAp e e1) ts--- unfoldVap p e ((Arg Hidden t):ts) = unfoldVap p e ts-unfoldVap p e ((Arg Hidden t):ts) = do-  e1 <- evalStateT (processTerm t) p-  unfoldVap p (hsAp e e1) ts----getDefinitions :: TCM Definitions-getDefinitions = do-  sig <- gets stSignature-  let definitions = sigDefinitions sig -- :: Map QName Definition-  idefs <- sigDefinitions <$> getImportedSignature-  return (definitions `Map.union` idefs)----getConArities cs = mapM getConArity cs--getConArity :: QName -> TCM Nat-getConArity qn = do-        Defn _ ty _ _ Constructor{conPars = np} <- getConstInfo qn-	ty' <- normalise ty-        return $ typeArity ty' - np-        -- return $ arity ty'--typeArity :: Type -> Nat-typeArity (El s t) = ar t where-    ar (Pi _ (Abs _ t2)) = typeArity t2 + 1-    ar (Fun a t2) = typeArity t2 + 1-    ar _ = 0--clauseBod :: Clause -> Term-clauseBod c = stripBinds (clauseBody c) where-  stripBinds (Bind (Abs _ r)) = stripBinds r-  stripBinds (NoBind r) = stripBinds r-  stripBinds (Body r) = r-  stripBinds (NoBody) = __IMPOSSIBLE__--letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "k", "m", "n", "p","q"]--vecApp :: HsExp -> [HsExp] -> HsExp-vecApp e [] = e-vecApp e (a:as) = vecApp (HsApp e a) as-
− src/full/Agda/Compiler/Alonzo/Names.hs
@@ -1,66 +0,0 @@-module Agda.Compiler.Alonzo.Names where--import Data.List-import Language.Haskell.Syntax-import Agda.Syntax.Abstract.Name-import Agda.Syntax.Common--conStr :: Name -> String-conStr n = "C" ++ (show $ numOfName n)--dfStr :: Name -> String-dfStr n = "d" ++ (show $ numOfName n)--- dfStr (Name (NameId i) c) = "d" ++ (show i)--conQStr :: QName -> String-conQStr qn = "C" ++ (show $ numOfQName qn)--dfQStr :: QName -> String-dfQStr qn = "d" ++ (show $ numOfQName qn)---- For now a hack that allows hierarhical modules, but not local modules(?)-moduleStr :: ModuleName -> String--- moduleStr m = show m-moduleStr (MName []) = error "Empty module list!"-moduleStr (MName ns) = intercalate "." (map show ns)--conName :: Name -> HsName-conName = HsIdent . conStr--dataName :: Name -> HsName-dataName n = HsIdent $ "T" ++ (show (numOfName n))---- dataQName :: QName -> HsQName--- dataQName n = HsIdent $ "T" ++ (show (numOfName n))--dfName :: Name -> HsName-dfName = HsIdent . dfStr--dfNameSub :: Name -> Int -> HsName-dfNameSub name i = HsIdent id where-	id = (dfStr name) ++ "_" ++  (show i)--dfQName :: QName -> HsQName-dfQName (QName m n)-  | (moduleStr m) == "RTP" = Qual (Module $ moduleStr m)(HsIdent $ "_"++(show n))-  | otherwise = Qual (Module $ moduleStr m) (dfName n)--conQName :: QName -> HsQName-conQName (QName m n)-  |(moduleStr m)=="RTP" = Qual (Module $ moduleStr m)  (HsIdent $ show n)-  | otherwise = Qual (Module $ moduleStr m) (conName n)--numOfName :: Name -> Nat-numOfName n = i where-	id = nameId n-        (NameId i mi) = id---numOfQName :: QName -> Nat--- numOfQName (QName m (Name (NameId i) nc) ) = i-numOfQName = numOfName . qnameName---rtpQName :: String -> HsQName-rtpQName s = Qual (Module "RTP")(HsIdent $ ('_':s))-rtpCon s = Qual (Module "RTP")(HsIdent s)
− src/full/Agda/Compiler/Alonzo/PatternMonad.hs
@@ -1,68 +0,0 @@-module Agda.Compiler.Alonzo.PatternMonad where-import Agda.Syntax.Internal-import Agda.TypeChecking.Monad.Base--import Control.Monad.State-import Control.Monad.Error--import qualified Data.Map-import Data.Map (Map)--import Language.Haskell.Syntax-import Agda.TypeChecking.Monad-import Agda.Utils.Permutation-import Agda.Utils.Size--type Defs =  Map QName Definition-data PState = PSt-  { cnt :: Int-  , vars :: [Int]-  , lst :: [HsPat]-  , clause :: Clause-  , defs :: Defs-  }--initPState :: Clause -> Defs -> PState-initPState c@(Clause{ clausePerm = perm }) d = PSt-  { cnt = 0-  , vars = permute perm [0..]-  , lst = []-  , clause = c-  , defs = d-  }--type PM a = StateT PState TCM a--getPDefs :: PM Defs-getPDefs = gets defs--getPcnt :: PM Int-getPcnt = gets cnt--getPlst :: PM [HsPat]-getPlst = gets lst--getPclause :: PM Clause-getPclause = gets clause--putPlst :: [HsPat] -> PM()-putPlst newlst = modify $ \s -> s { lst = newlst }--putPcnt :: Int -> PM()-putPcnt newcnt = modify $ \s -> s { cnt = newcnt }--incPcnt :: PM()-incPcnt = modify $ \s -> s { cnt = 1 + cnt s }--addWildcard :: PM()-addWildcard = do-        lst <- getPlst-        putPlst $ lst++[HsPWildCard]--addVar :: PM()-addVar = do-        lst <- getPlst-        s <- get-        let v : vs = vars s-        put $ s { vars = vs }-        putPlst $ lst++[HsPVar(HsIdent ("v" ++ show v))]
src/full/Agda/Compiler/HaskellTypes.hs view
@@ -14,6 +14,7 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Rules.Builtin.Coinduction import Agda.TypeChecking.Substitute import Agda.TypeChecking.Free import Agda.Utils.Monad@@ -85,15 +86,28 @@     Fun a b -> hsKFun <$> haskellKind (unArg a) <*> haskellKind b     _       -> 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).+--+-- Note that if @haskellType@ supported universe polymorphism then the+-- special treatment of INFINITY might not be needed.+ haskellType :: MonadTCM tcm => Type -> tcm HaskellType haskellType = liftTCM . fromType   where     fromArgs = mapM (fromTerm . unArg)     fromType = fromTerm . unEl     fromTerm v = do-      v <- reduce v+      v   <- reduce v+      kit <- liftTCM coinductionKit+      let err = notAHaskellType (El Prop v)       case v of         Var x args -> hsApp <$> getHsVar x <*> fromArgs args+        Def d args | Just d == (nameOfInf <$> kit) ->+          case args of+            [a, b] -> fromTerm (unArg b)+            _      -> err         Def d args -> hsApp <$> getHsType d <*> fromArgs args         Fun a b    -> hsFun <$> fromType (unArg a) <*> fromType b         Pi a b ->@@ -104,14 +118,12 @@               return $ hsForall x $ hsFun "()" b           )           (if 0 `freeIn` absBody b-           then notAHaskellType (El Prop v)+           then err            else hsFun <$> fromType (unArg a) <*> fromType (absApp b __IMPOSSIBLE__)           )-        Con{}      -> notAHaskellType (El Prop v)-        Lam{}      -> notAHaskellType (El Prop v)-        Lit{}      -> notAHaskellType (El Prop v)-        Sort{}     -> notAHaskellType (El Prop v)-        MetaV{}    -> notAHaskellType (El Prop v)---+        Con{}      -> err+        Lam{}      -> err+        Lit{}      -> err+        Sort{}     -> err+        MetaV{}    -> err+        DontCare   -> err
src/full/Agda/Compiler/MAlonzo/Compiler.hs view
@@ -33,6 +33,7 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Rules.Builtin.Coinduction import Agda.TypeChecking.Pretty import Agda.Utils.FileName import Agda.Utils.Monad@@ -49,15 +50,15 @@      -- Compute the output directory.     opts <- commandLineOptions-    malonzoDir <- case optMAlonzoDir opts of+    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 $ CN.projectRoot f tm-    setCommandLineOptions PersistentOptions $-      opts { optMAlonzoDir = Just malonzoDir }+    setCommandLineOptions $+      opts { optCompileDir = Just compileDir }      ignoreAbstractMode $ do       mapM_ (compile . miInterface) =<< (M.elems <$> getVisitedModules)@@ -100,12 +101,59 @@ --------------------------------------------------  definitions :: Definitions -> TCM [HsDecl]-definitions = M.fold (liftM2(++).(definition<.>instantiateFull)) declsForPrim+definitions defs = do+  kit <- coinductionKit+  M.fold (liftM2 (++) . (definition kit <.> instantiateFull))+         declsForPrim+         defs -definition :: Definition -> TCM [HsDecl]-definition (Defn q ty _ _ d) = do+-- | Note that the INFINITY, SHARP and FLAT builtins are translated as+-- follows (if a 'CoinductionKit' is given):+--+-- @+--   type Infinity a b = b+--+--   sharp :: forall a. () -> forall b. () -> b -> b+--   sharp _ _ x = x+--+--   flat :: forall a. () -> forall b. () -> b -> b+--   flat _ _ x = x+-- @++definition :: Maybe CoinductionKit -> Definition -> TCM [HsDecl]+definition kit (Defn q ty _ _ d) = do   checkTypeOfMain q ty   (infodecl q :) <$> case d of++    -- Special treatment of coinductive builtins.+    Datatype{} | Just q == (nameOfInf <$> kit) -> do+      let inf = unqhname "T" q+          a   = ihname "a" 0+          b   = ihname "a" 1+      return [HsTypeDecl dummy inf [a, b] (HsTyVar b)]+    Constructor{} | Just q == (nameOfSharp <$> kit) -> do+      let sharp = unqhname "d" q+          x     = ihname "x" 0+      return $+        [ HsTypeSig dummy [sharp] $ fakeType $+            "forall a. () -> forall b. () -> b -> b"+        , HsFunBind [HsMatch dummy sharp+                             [HsPWildCard, HsPWildCard, HsPVar x]+                             (HsUnGuardedRhs (HsVar (UnQual x)))+                             []]+        ]+    Function{} | Just q == (nameOfFlat <$> kit) -> do+      let flat = unqhname "d" q+          x    = ihname "x" 0+      return $+        [ HsTypeSig dummy [flat] $ fakeType $+            "forall a. () -> forall b. () -> b -> b"+        , HsFunBind [HsMatch dummy flat+                             [HsPWildCard, HsPWildCard, HsPVar x]+                             (HsUnGuardedRhs (HsVar (UnQual x)))+                             []]+        ]+     Axiom{ axHsDef = Just (HsDefn ty hs) } -> return $ fbWithType ty (fakeExp hs)     Axiom{}                                -> return $ fb axiomErr     Function{ funClauses =        cls } -> function cls@@ -122,12 +170,14 @@     Record{ recClause = cl, recCon = c, recFields = flds } -> do       let noFields = genericLength flds       ar <- arity <$> normalise ty-      cd <- case c of-        Nothing -> return $ cdecl q noFields-        Just c  -> snd <$> condecl c+      cd <- snd <$> condecl c+--       cd <- case c of+--         Nothing -> return $ cdecl q noFields+--         Just c  -> snd <$> condecl c       return $ tvaldecl q Inductive noFields ar [cd] cl   where-  function cls = mkwhere <$> mapM (clause q) (tag 0 cls)+  function cls = mkwhere <$> mapM (clause q)+                                  (tag 0 $ L.map translatedClause cls)   tag _ []       = []   tag i [cl]     = (i, True , cl): []   tag i (cl:cls) = (i, False, cl): tag (i + 1) cls@@ -186,19 +236,21 @@   match hps rhs = HsMatch dummy (dsubname q i) hps (HsUnGuardedRhs rhs) []   bvars (Body _)          _ = []   bvars (Bind (Abs _ b')) n = HsPVar (ihname "v" n) : bvars b' (n + 1)-  bvars (NoBind      b' ) n = HsPWildCard           : bvars b' n+  bvars (NoBind      b' ) n = HsPWildCard           : bvars b' n -- WHY NOT: bvars b' n  -- PRODDUCES head [] exception   bvars NoBody            _ = repeat HsPWildCard -- ? -  isCon (Arg _ ConP{}) = True-  isCon _              = False+  isCon (Arg _ _ ConP{}) = True+  isCon _                = False +-- argpatts aps xs = hps+-- xs is alist of haskell *variables* in form of patterns (because of wildcard) argpatts :: [Arg Pattern] -> [HsPat] -> TCM [HsPat] argpatts ps0 bvs = evalStateT (mapM pat' ps0) bvs   where   pat   (VarP _   ) = do v <- gets head; modify tail; return v-  pat   (DotP _   ) = pat (VarP dummy)+  pat   (DotP _   ) = pat (VarP dummy) -- WHY NOT: return HsPWildCard -- SEE ABOVE   pat   (LitP l   ) = return $ HsPLit $ hslit l-  pat p@(ConP q ps) = do+  pat p@(ConP q _ 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.@@ -218,7 +270,7 @@   irr (VarP {})   = return True   irr (DotP {})   = return True   irr (LitP {})   = return False-  irr (ConP q ps) =+  irr (ConP q _ ps) =     (&&) <$> singleConstructorType q          <*> (and <$> mapM (irr . unArg) ps) @@ -241,6 +293,7 @@   Fun   _ _  -> return unit_con   Sort  _    -> return unit_con   MetaV _ _  -> mazerror "hit MetaV"+  DontCare   -> return unit_con   where apps =  foldM (\h a -> HsApp h <$> term (unArg a))  literal :: Literal -> TCM HsExp@@ -258,6 +311,7 @@                     LitFloat  _ x -> HsFrac   (toRational x)                     LitString _ x -> HsString x                     LitChar   _ x -> HsChar   x+                    LitQName  _ x -> HsString (show x)  condecl :: QName -> TCM (Nat, HsConDecl) condecl q = getConstInfo q >>= \d -> case d of@@ -330,15 +384,15 @@                        , "  #-}"                        ] -malonzoDir :: TCM FilePath-malonzoDir = do-  mdir <- optMAlonzoDir <$> commandLineOptions+compileDir :: TCM FilePath+compileDir = do+  mdir <- optCompileDir <$> commandLineOptions   case mdir of     Just dir -> return dir     Nothing  -> __IMPOSSIBLE__  outFile' = do-  mdir <- malonzoDir+  mdir <- compileDir   (fdir, fn) <- splitFileName . repldot pathSeparator .                 prettyPrint <$> curHsMod   let dir = mdir </> fdir@@ -354,7 +408,7 @@ callGHC :: Interface -> TCM () callGHC i = do   setInterface i-  mdir          <- malonzoDir+  mdir          <- compileDir   hsmod         <- prettyPrint <$> curHsMod   MName agdaMod <- curMName   let outputName = case agdaMod of
src/full/Agda/Compiler/MAlonzo/Misc.hs view
@@ -4,7 +4,6 @@  import Control.Monad.State import Data.Generics-import Data.Generics.Aliases import Data.List as L import Data.Map as M import Data.Set as S@@ -73,6 +72,16 @@ -- utilities for haskell names -------------------------------------------------- +-- The following naming scheme seems to be used:+--+-- * Types coming from Agda are named "T\<number\>".+--+-- * Other definitions coming from Agda are named "d\<number\>".+--   Exception: the main function is named "main".+--+-- * Names coming from Haskell must always be used qualified.+--   Exception: names from the Prelude.+ ihname :: String -> Nat -> HsName ihname s i = HsIdent $ s ++ show i @@ -91,7 +100,7 @@         L.filter (flip (isPrefixOf `on` mnameToList) m) <$>         L.map (iModuleName . miInterface) . M.elems <$>         getVisitedModules-  return $ case ms of (m' : _) -> m'; _ -> mazerror$ "tlmodOf: "++show m+  return $ case ms of (m' : _) -> m'; _ -> __IMPOSSIBLE__  -- qualify HsName n by the module of QName q, if necessary; -- accumulates the used module in stImportedModules at the same time.
src/full/Agda/Compiler/MAlonzo/Pretty.hs view
@@ -15,5 +15,10 @@  prettyPrint :: (Pretty.Pretty a, Data a) => a -> String prettyPrint = Pretty.prettyPrint .-              everywhere (mkT HsParen) .+              everywhere (mkT bracket) .               everywhere (mkT encodeModuleName)+  where+  -- Workaround for GHC bug #4284.+  bracket :: HsExp -> HsExp+  bracket e@(HsVar _) = e+  bracket e           = HsParen e
src/full/Agda/Compiler/MAlonzo/Primitives.hs view
@@ -178,11 +178,14 @@   , "primStringEquality" |-> rel "(==)" "String"
   , "primShowString"     |-> return "(show :: String -> String)"
 
+  -- QNames
+  , "primQNameEquality" |-> rel "(==)" "String"
+
   -- Trust me
   , ("primTrustMe"       , Right <$> do
        refl <- primRefl
        flip runReaderT 0 $
-         term $ lam "A" (lam "x" (lam "y" (refl `apply` [var 2, var 1]))))
+         term $ lam "A" (lam "x" (lam "y" refl)))
   ]
   where
   x |-> s = (x, Left <$> s)
@@ -206,7 +209,7 @@   unimplemented = typeError $ NotImplemented s
 
   lam x t = Lam Hidden (Abs x t)
-  var x   = Arg Hidden (Var x [])
+  var x   = Arg Hidden Relevant (Var x [])
 
 ----------------------
 
src/full/Agda/Interaction/BasicOps.hs view
@@ -10,6 +10,7 @@  import Control.Monad.Error import Control.Monad.Reader+import Control.Monad.State import qualified Data.Map as Map import Data.Map (Map) import Data.List@@ -27,6 +28,7 @@ import Agda.Syntax.Translation.AbstractToConcrete import Agda.Syntax.Translation.ConcreteToAbstract import Agda.Syntax.Scope.Base+import Agda.Syntax.Scope.Monad import Agda.Syntax.Fixity(Precedence(..)) import Agda.Syntax.Parser @@ -36,6 +38,7 @@ import Agda.TypeChecking.MetaVars import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope import Agda.TypeChecking.EtaContract (etaContract) import Agda.TypeChecking.Coverage import Agda.TypeChecking.Records@@ -50,15 +53,21 @@ #include "../undefined.h" import Agda.Utils.Impossible +-- | Parses an expression.++parseExpr :: Range -> String -> TCM C.Expr+parseExpr rng s = liftIO $ parsePosString exprParser pos s+  where+  pos = case rStart rng of+          Just pos -> pos+          Nothing  -> startPos Nothing+ parseExprIn :: InteractionId -> Range -> String -> TCM Expr parseExprIn ii rng s = do     mId <- lookupInteractionId ii     updateMetaVarRange mId rng     mi  <- getMetaInfo <$> lookupMeta mId-    let pos = case rStart (getRange mi) of-                Just pos -> pos-                Nothing  -> __IMPOSSIBLE__-    e <- liftIO $ parsePosString exprParser pos s+    e   <- parseExpr rng s     concreteToAbstract (clScope mi) e  giveExpr :: MetaId -> Expr -> TCM Expr@@ -126,7 +135,7 @@                                     , Agda.Syntax.Info.metaScope = scope { scopePrecedence = ArgumentCtx } 				    , metaNumber = Nothing 				    }-                      in App (ExprRange $ r) e (Arg NotHidden $ unnamed metaVar)+                      in App (ExprRange $ r) e (defaultArg $ unnamed metaVar)                  --ToDo: The position of metaVar is not correct                  --ToDo: The fixity of metavars is not correct -- fixed? MT @@ -194,7 +203,9 @@  data OutputForm a b       = OfType b a | CmpInType Comparison a b b+                   | CmpTerms [Polarity] a [b] [b]       | JustType b | CmpTypes Comparison b b+                   | CmpLevels Comparison b b                    | CmpTeles Comparison b b       | JustSort b | CmpSorts Comparison b b       | Guard (OutputForm a b) [OutputForm a b]@@ -209,24 +220,29 @@  outputFormId :: OutputForm a b -> b outputFormId o = case o of-  OfType i _        -> i-  CmpInType _ _ i _ -> i-  JustType i        -> i-  CmpTypes _ i _    -> i-  CmpTeles _ i _    -> i-  JustSort i        -> i-  CmpSorts _ i _    -> i-  Guard o _         -> outputFormId o-  Assign i _        -> i-  TypedAssign i _ _ -> i-  IsEmptyType _     -> __IMPOSSIBLE__   -- Should never be used on IsEmpty constraints+  OfType i _           -> i+  CmpInType _ _ i _    -> i+  CmpTerms _ _ (i:_) _ -> i+  CmpTerms _ _ [] _    -> __IMPOSSIBLE__+  JustType i           -> i+  CmpLevels _ i _      -> i+  CmpTypes _ i _       -> i+  CmpTeles _ i _       -> i+  JustSort i           -> i+  CmpSorts _ i _       -> i+  Guard o _            -> outputFormId o+  Assign i _           -> i+  TypedAssign i _ _    -> i+  IsEmptyType _        -> __IMPOSSIBLE__   -- Should never be used on IsEmpty constraints  instance Functor (OutputForm a) where     fmap f (OfType e t)           = OfType (f e) t     fmap f (JustType e)           = JustType (f e)     fmap f (JustSort e)           = JustSort (f e)     fmap f (CmpInType cmp t e e') = CmpInType cmp t (f e) (f e')+    fmap f (CmpTerms cmp t e e')  = CmpTerms cmp t (map f e) (map f e')     fmap f (CmpTypes cmp e e')    = CmpTypes cmp (f e) (f e')+    fmap f (CmpLevels cmp e e')   = CmpLevels cmp (f e) (f e')     fmap f (CmpTeles cmp e e')    = CmpTeles cmp (f e) (f e')     fmap f (CmpSorts cmp e e')    = CmpSorts cmp (f e) (f e')     fmap f (Guard o os)           = Guard (fmap f o) (fmap (fmap f) os)@@ -236,6 +252,10 @@  instance Reify Constraint (OutputForm Expr Expr) where     reify (ValueCmp cmp t u v)   = CmpInType cmp <$> reify t <*> reify u <*> reify v+    reify (ArgsCmp cmp t u v)    = CmpTerms cmp <$> reify t+                                                <*> mapM (reify . unArg) u+                                                <*> mapM (reify . unArg) v+    reify (LevelCmp cmp t t')    = CmpLevels cmp <$> reify t <*> reify t'     reify (TypeCmp cmp t t')     = CmpTypes cmp <$> reify t <*> reify t'     reify (TelCmp  cmp t t')     = CmpTeles cmp <$> (ETel <$> reify t) <*> (ETel <$> reify t')     reify (SortCmp cmp s s')     = CmpSorts cmp <$> reify s <*> reify s'@@ -268,7 +288,9 @@     show (JustType e)           = "Type " ++ show e     show (JustSort e)           = "Sort " ++ show e     show (CmpInType cmp t e e') = show e ++ showComparison cmp ++ show e' ++ " : " ++ show t+    show (CmpTerms cmp t e e')  = show e ++ "~~" ++ show e' ++ " : " ++ show t     show (CmpTypes  cmp t t')   = show t ++ showComparison cmp ++ show t'+    show (CmpLevels cmp t t')   = show t ++ showComparison cmp ++ show t'     show (CmpTeles  cmp t t')   = show t ++ showComparison cmp ++ show t'     show (CmpSorts cmp s s')    = show s ++ showComparison cmp ++ show s'     show (Guard o os)           = show o ++ "  if  " ++ show os@@ -278,25 +300,33 @@  instance (ToConcrete a c, ToConcrete b d) =>          ToConcrete (OutputForm a b) (OutputForm c d) where-    toConcrete (OfType e t) = OfType <$> toConcrete e <*> toConcrete t+    toConcrete (OfType e t) = OfType <$> toConcrete e <*> toConcreteCtx TopCtx t     toConcrete (JustType e) = JustType <$> toConcrete e     toConcrete (JustSort e) = JustSort <$> toConcrete e     toConcrete (CmpInType cmp t e e') =-             CmpInType cmp <$> toConcrete t <*> toConcrete e <*> toConcrete e'-    toConcrete (CmpTypes cmp e e') = CmpTypes cmp <$> toConcrete e <*> toConcrete e'+      CmpInType cmp <$> toConcreteCtx TopCtx t <*> toConcreteCtx ArgumentCtx e+                                               <*> toConcreteCtx ArgumentCtx e'+    toConcrete (CmpTerms cmp t e e') =+      CmpTerms cmp <$> toConcreteCtx TopCtx t <*> mapM toConcrete e <*> mapM toConcrete e'+    toConcrete (CmpTypes cmp e e') = CmpTypes cmp <$> toConcreteCtx ArgumentCtx e+                                                  <*> toConcreteCtx ArgumentCtx e'+    toConcrete (CmpLevels cmp e e') = CmpLevels cmp <$> toConcreteCtx ArgumentCtx e+                                                    <*> toConcreteCtx ArgumentCtx e'     toConcrete (CmpTeles cmp e e') = CmpTeles cmp <$> toConcrete e <*> toConcrete e'-    toConcrete (CmpSorts cmp e e') = CmpSorts cmp <$> toConcrete e <*> toConcrete e'+    toConcrete (CmpSorts cmp e e') = CmpSorts cmp <$> toConcreteCtx ArgumentCtx e+                                                  <*> toConcreteCtx ArgumentCtx e'     toConcrete (Guard o os) = Guard <$> toConcrete o <*> toConcrete os-    toConcrete (Assign m e) = Assign <$> toConcrete m <*> toConcrete e-    toConcrete (TypedAssign m e a) = TypedAssign <$> toConcrete m <*> toConcrete e <*> toConcrete a-    toConcrete (IsEmptyType a) = IsEmptyType <$> toConcrete a+    toConcrete (Assign m e) = Assign <$> toConcrete m <*> toConcreteCtx TopCtx e+    toConcrete (TypedAssign m e a) = TypedAssign <$> toConcrete m <*> toConcreteCtx TopCtx e+                                                                  <*> toConcreteCtx TopCtx a+    toConcrete (IsEmptyType a) = IsEmptyType <$> toConcreteCtx TopCtx a  instance (Pretty a, Pretty b) => Pretty (OutputForm' a b) where   pretty (OfType' e t) = pretty e <+> text ":" <+> pretty t  instance (ToConcrete a c, ToConcrete b d) =>             ToConcrete (OutputForm' a b) (OutputForm' c d) where-  toConcrete (OfType' e t) = OfType' <$> toConcrete e <*> toConcrete t+  toConcrete (OfType' e t) = OfType' <$> toConcrete e <*> toConcreteCtx TopCtx t  --ToDo: Move somewhere else instance ToConcrete InteractionId C.Expr where@@ -357,8 +387,16 @@     rewriteJudg mv (HasType i t) = do       t <- rewrite norm t       vs <- getContextArgs-      OfType i <$> reify (t `piApply` vs)-    rewriteJudg mv (IsSort i)    = return $ JustSort i+      reportSDoc "interactive.meta" 10 $ TP.vcat+        [ TP.text $ unwords ["permuting", show i, "with", show $ mvPermutation mv]+        , TP.nest 2 $ TP.vcat+          [ TP.text "len  =" TP.<+> TP.text (show $ length vs)+          , TP.text "args =" TP.<+> prettyTCM vs+          , TP.text "t    =" TP.<+> prettyTCM t+          ]+        ]+      OfType i <$> reify (t `piApply` permute (takeP (size vs) $ mvPermutation mv) vs)+    rewriteJudg mv (IsSort i) = return $ JustSort i   typeOfMeta :: Rewrite -> InteractionId -> TCM (OutputForm Expr InteractionId)@@ -367,23 +405,19 @@         out <- typeOfMetaMI norm mi         return $ fmap (\_ -> ii) out +typesOfVisibleMetas :: Rewrite -> TCM [OutputForm Expr InteractionId]+typesOfVisibleMetas norm =+  liftTCM $ mapM (typeOfMeta norm) =<< getInteractionPoints -typeOfMetas :: Rewrite -> TCM ([OutputForm Expr InteractionId],[OutputForm Expr MetaId])--- First visible metas, then hidden-typeOfMetas norm = liftTCM $-    do	ips <- getInteractionPoints-        js <- mapM (typeOfMeta norm) ips-        hidden <- hiddenMetas-        return $ (js,hidden)-   where hiddenMetas =    --TODO: Change so that it uses getMetaMI above-            do is <- getInteractionMetas-	       store <- Map.filterWithKey (openAndImplicit is) <$> getMetaStore-               let mvs = Map.keys store-               mapM (typeOfMetaMI norm) mvs-          where-               openAndImplicit is x (MetaVar _ _ _ M.Open _)		 = x `notElem` is-	       openAndImplicit is x (MetaVar _ _ _ (M.BlockedConst _) _) = True-	       openAndImplicit _ _ _					 = False+typesOfHiddenMetas :: Rewrite -> TCM [OutputForm Expr MetaId]+typesOfHiddenMetas norm = liftTCM $ do+  is    <- getInteractionMetas+  store <- Map.filterWithKey (openAndImplicit is) <$> getMetaStore+  mapM (typeOfMetaMI norm) $ Map.keys store+  where+  openAndImplicit is x (MetaVar{mvInstantiation = M.Open}) = x `notElem` is+  openAndImplicit is x (MetaVar{mvInstantiation = M.BlockedConst _}) = True+  openAndImplicit _  _ _                                    = False  -- Gives a list of names and corresponding types. @@ -398,7 +432,7 @@ 	visible _	     = __IMPOSSIBLE__         reifyContext xs = reverse <$> zipWithM out [1..] xs -        out i (Arg h (x, t)) = escapeContext i $ do+        out i (Arg h _ (x, t)) = escapeContext i $ do           t' <- reify =<< rewrite norm t           return $ OfType x t' @@ -440,30 +474,34 @@   mv <- lookupMeta mi   withMetaInfo (getMetaInfo mv) $ case mvJudgement mv of     HasType _ t -> do-        t <- normalise =<< piApply t <$> getContextArgs+        t <- reduce =<< piApply t <$> getContextArgs         case unEl t of           I.Def d _ -> do             def <- getConstInfo d             case theDef def of-              Datatype{} -> introData t-              Record{}   -> introRec d-              _          -> return []-          _ -> case telView t of-            TelV EmptyTel _ -> return []-            TelV tel _      -> introFun tel+              Datatype{}                 -> introData t+              Record{ recNamedCon = name }+                | name      -> introData t+                | otherwise -> introRec d+              _                          -> return []+          _ -> do+            TelV tel _ <- telView t+            case tel of+              EmptyTel -> return []+              tel      -> introFun tel      `catchError` \_ -> return []     _ -> __IMPOSSIBLE__   where-    conName [Arg _ (I.ConP c _)] = [c]-    conName [_]                = []-    conName _                  = __IMPOSSIBLE__+    conName [Arg _ _ (I.ConP c _ _)] = [c]+    conName [_]                      = []+    conName _                        = __IMPOSSIBLE__      showTCM v = show <$> prettyTCM v      introFun tel = addCtxTel tel' $ do         imp <- showImplicitArguments         let okHiding h = imp || h == NotHidden-        vars <- mapM showTCM [ Arg h (I.Var i [])+        vars <- mapM showTCM [ Arg h Relevant (I.Var i [])                              | (h, i) <- zip hs $ reverse [0..n - 1]                              , okHiding h                              ]@@ -476,9 +514,9 @@         makeName (x, t)   = (x, t)      introData t = do-      let tel  = telFromList [Arg NotHidden ("_", t)]+      let tel  = telFromList [defaultArg ("_", t)]           perm = idP 1-          pat  = [Arg NotHidden (I.VarP "c")]+          pat  = [defaultArg (I.VarP "c")]       r <- split tel perm pat 0       case r of         Left err -> return []@@ -487,13 +525,60 @@     introRec d = do       hfs <- getRecordFieldNames d       fs <- ifM showImplicitArguments-            (return $ map snd hfs)-            (return [ f | (NotHidden, f) <- hfs ])+            (return $ map unArg hfs)+            (return [ f | (Arg NotHidden _ f) <- hfs ])       return         [ concat $-            "record " :-            zipWith (\c f -> unwords [c, show f, "= ?"])-                    ("{":repeat ";") fs ++-            [" }"]+            "record {" :+            intersperse ";" (map (\ f -> show f ++ " = ?") fs) +++            ["}"]         ] +-- | Runs the given computation as if in an anonymous goal at the end+-- of the top-level module.++atTopLevel :: TCM a -> TCM a+atTopLevel m = do+  mCurrent <- stCurrentModule <$> get+  case mCurrent of+    Nothing      -> typeError $+                      GenericError "The file has not been loaded yet."+    Just current -> do+      r <- getVisitedModule (toTopLevelModuleName current)+      case r of+        Nothing -> __IMPOSSIBLE__+        Just mi -> do+          tel <- lookupSection current+          M.withCurrentModule current $+            withScope_ (iInsideScope $ miInterface mi) $+              addCtxTel tel $+                m++-- | Returns the contents of the given module.++moduleContents :: 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 rng s = do+  m <- parseExpr rng s+  m <- case m of+         C.Ident m              -> return m+         C.RawApp _ [C.Ident m] -> return m+         _                      -> typeError $+           GenericError $ "Not a module name: " ++ show m ++ "."+  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 <- defType <$> instantiateDef d+                   return (x, t))+                (concatMap (\(x, ns) -> map ((,) x) ns) $+                           Map.toList names)+  return (Map.keys modules, types)
src/full/Agda/Interaction/CommandLine/CommandLine.hs view
@@ -12,7 +12,7 @@ import Data.Maybe import qualified Agda.Utils.IO.Locale as LocIO -import Agda.Interaction.BasicOps as BasicOps+import Agda.Interaction.BasicOps as BasicOps hiding (parseExpr) import Agda.Interaction.Monad  import qualified Agda.Syntax.Abstract as A@@ -159,7 +159,8 @@ 	  r <- getInteractionRange i 	  liftIO $ LocIO.putStrLn $ s ++ " " ++ show r showMetas [] =-    do  (interactionMetas,hiddenMetas) <- typeOfMetas AsIs+    do  interactionMetas <- typesOfVisibleMetas AsIs+        hiddenMetas      <- typesOfHiddenMetas  AsIs         mapM_ (liftIO . LocIO.putStrLn) =<< mapM showII interactionMetas 	mapM_ print' hiddenMetas     where
src/full/Agda/Interaction/FindFile.hs view
@@ -12,6 +12,7 @@   , findFile, findFile', findFile''   , findInterfaceFile   , checkModuleName+  , moduleName', moduleName   , ModuleToSource   , SourceToModule, sourceToModule   , tests@@ -27,10 +28,11 @@ import System.FilePath import System.Directory -import Agda.Syntax.Concrete.Name-import Agda.TypeChecking.Monad+import Agda.Syntax.Concrete+import Agda.Syntax.Parser+import Agda.TypeChecking.Monad.Base+import {-# SOURCE #-} Agda.TypeChecking.Monad.Options (getIncludeDirs) import Agda.Utils.FileName-import Agda.Utils.Monad  -- | Converts an Agda file name to the corresponding interface file -- name.@@ -93,20 +95,21 @@   -- ^ Cached invocations of 'findFile'''. An updated copy is returned.   -> IO (Either FindError AbsolutePath, ModuleToSource) findFile'' dirs m modFile =-    case Map.lookup m modFile of-      Just f  -> return (Right f, modFile)-      Nothing -> do-        existingFiles <--          liftIO $ filterM (doesFileExist . filePath) files-        return $ case nub existingFiles of-          []     -> (Left (NotFound files), modFile)-          [file] -> (Right file, Map.insert m file modFile)-          files  -> (Left (Ambiguous files), modFile)-    where-    files = [ mkAbsolute (filePath dir </> file)-            | dir  <- dirs-            , file <- map (moduleNameToFileName m) [".agda", ".lagda"]-            ]+  case Map.lookup m modFile of+    Just f  -> return (Right f, modFile)+    Nothing -> do+      files <- mapM absolute+                    [ filePath dir </> file+                    | dir  <- dirs+                    , file <- map (moduleNameToFileName m)+                                  [".agda", ".lagda"]+                    ]+      existingFiles <-+        liftIO $ filterM (doesFileExist . filePath) files+      return $ case nub existingFiles of+        []     -> (Left (NotFound files), modFile)+        [file] -> (Right file, Map.insert m file modFile)+        files  -> (Left (Ambiguous files), modFile)  -- | Finds the interface file corresponding to a given top-level -- module name. The returned paths are absolute.@@ -138,9 +141,29 @@     Left (Ambiguous files) -> typeError $                                 AmbiguousTopLevelModuleName name files     Right file' ->-      ifM (liftIO $ filePath file === filePath file')-          (return ())-          (typeError $ ModuleDefinedInOtherFile name file file')+      if file === file' then+        return ()+       else+        typeError $ ModuleDefinedInOtherFile name file file'++-- | Computes the module name of the top-level module in the given+-- file.++moduleName' :: AbsolutePath -> TCM TopLevelModuleName+moduleName' file = liftIO $ do+  topLevelModuleName <$> parseFile' moduleParser file++-- | A variant of 'moduleName'' which raises an error if the file name+-- does not match the module name.+--+-- The file name is interpreted relative to the current working+-- directory (unless it is absolute).++moduleName :: AbsolutePath -> TCM TopLevelModuleName+moduleName file = do+  m <- moduleName' file+  checkModuleName m file+  return m  -- | Maps top-level module names to the corresponding source file -- names.
src/full/Agda/Interaction/GhciTop.hs view
@@ -40,6 +40,7 @@ import Agda.Utils.Pretty as P import Agda.Utils.String import Agda.Utils.FileName+import qualified Agda.Utils.Trie as Trie import Agda.Utils.Tuple import qualified Agda.Utils.IO.Locale as LocIO import qualified Agda.Utils.IO.UTF8 as UTF8@@ -130,19 +131,39 @@ -- | An interactive computation.  data Interaction = Interaction-  { isIndependent :: Bool-    -- ^ Can the command run even if the relevant file has not been-    -- loaded into the state?+  { includeDirectories :: Maybe [FilePath]+    -- ^ A command is independent iff this field is @'Just' is@; @is@+    -- is used as the command's include directories.   , command :: TCM (Maybe ModuleName)     -- ^ If a module name is returned, then syntax highlighting     -- information will be written for the given module (by 'ioTCM').   } +-- | Can the command run even if the relevant file has not been loaded+-- into the state?++isIndependent :: Interaction -> Bool+isIndependent = isJust . includeDirectories+ -- | Run a TCM computation in the current state. Should only --   be used for debugging. ioTCM_ :: TCM a -> IO a ioTCM_ m = do   tcs <- readIORef theState+  result <- runTCM $ do+    put $ theTCState tcs+    x <- withEnv initEnv m+    s <- get+    return (x, s)+  case result of+    Right (x, s) -> do+      writeIORef theState $ tcs { theTCState = s }+      return x+    Left err -> do+      Right doc <- runTCM $ prettyTCM err+      putStrLn $ render doc+      return $ undefined+{-   Right (x, s) <- runTCM $ do     put $ theTCState tcs     x <- withEnv initEnv m@@ -150,6 +171,7 @@     return (x, s)   writeIORef theState $ tcs { theTCState = s }   return x+-}  -- | Runs a 'TCM' computation. All calls from the Emacs mode should be -- wrapped in this function.@@ -177,19 +199,22 @@         } <- readIORef theState    -- Run the computation.-  r <- if not (isIndependent cmd) && Just current /= (fst <$> f) then-         let s = "Error: First load the file." in-         return $ Right $ Left (s, TCErr Nothing $ Exception noRange s)-        else-         runTCM $ catchError (do-             put st-             x  <- withEnv initEnv $ command cmd-             st <- get-             return (Right (x, st))-           ) (\e -> do-             s <- prettyError e-             return (Left (s, e))-           )+  r <- runTCM $ catchError (do+           put st+           x  <- withEnv initEnv $ do+                   case includeDirectories cmd of+                     Nothing -> ensureFileLoaded current+                     Just is -> do+                       ex <- liftIO $ doesFileExist $ filePath current+                       setIncludeDirs is $+                         if ex then ProjectRoot current else CurrentDir+                   command cmd+           st <- get+           return (Right (x, st))+         ) (\e -> do+           s <- prettyError e+           return (Left (s, e))+         )    -- Update the state.   case r of@@ -224,16 +249,20 @@             Left e              -> errHi e Nothing    -- If an error was encountered, display an error message and exit-  -- with an error code.+  -- with an error code; otherwise, inform Emacs about the buffer's+  -- goals.   let errStatus = Status { sChecked               = False                          , sShowImplicitArguments =                              optShowImplicit $ stPragmaOptions st                          }   case r of-    Right (Right _)     -> return ()     Right (Left (s, e)) -> displayErrorAndExit errStatus (getRange e) s     Left e              -> displayErrorAndExit errStatus (getRange e) $                              tcErrString e+    Right (Right _)     -> do+      is <- theInteractionPoints <$> liftIO (readIORef theState)+      liftIO $ LocIO.putStrLn $ response $+        L [A "agda2-goals-action", Q $ L $ List.map showNumIId is]  -- | @cmd_load m includes@ loads the module in file @m@, using -- @includes@ as the include directories.@@ -253,47 +282,54 @@           -> Bool -- ^ Allow unsolved meta-variables?           -> ((Interface, Maybe Imp.Warnings) -> TCM ())           -> Interaction-cmd_load' file includes unsolvedOK cmd = Interaction True $ do-  -- Forget the previous "current file" and interaction points.-  liftIO $ modifyIORef theState $ \s ->-    s { theInteractionPoints = []-      , theCurrentFile       = Nothing-      }+cmd_load' file includes unsolvedOK cmd =+  Interaction (Just includes) $ do+    -- Forget the previous "current file" and interaction points.+    liftIO $ modifyIORef theState $ \s ->+      s { theInteractionPoints = []+        , theCurrentFile       = Nothing+        } -  f <- liftIO $ absolute file-  t <- liftIO $ getModificationTime file+    f <- liftIO $ absolute file+    t <- liftIO $ getModificationTime file -  -- All options are reset when a file is reloaded, including the-  -- choice of whether or not to display implicit arguments.-  oldIncs <- getIncludeDirs-  setCommandLineOptions $-    defaultOptions { optAllowUnsolved = unsolvedOK-                   , optIncludeDirs   = includes-                   }+    -- All options (except for the verbosity setting) 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 reset, so they are preserved.)+    opts <- commandLineOptions+    setCommandLineOptions $+      defaultOptions { optIncludeDirs   = optIncludeDirs opts+                     , optPragmaOptions =+                         (optPragmaOptions defaultOptions)+                           { optAllowUnsolved = unsolvedOK+                           , optVerbose       = optVerbose (optPragmaOptions opts)+                           }+                     } -  -- Reset the state, preserving options and decoded modules. Note-  -- that Imp.typeCheck resets the decoded modules if the include-  -- directories have changed.-  preserveDecodedModules resetState+    -- Reset the state, preserving options and decoded modules. Note+    -- that Imp.typeCheck resets the decoded modules if the include+    -- directories have changed.+    preserveDecodedModules resetState -  ok <- Imp.typeCheck file Imp.ProjectRoot (Just oldIncs)+    ok <- Imp.typeCheck f -  -- The module type checked. If the file was not changed while the-  -- type checker was running then the interaction points and the-  -- "current file" are stored.-  t' <- liftIO $ getModificationTime file-  when (t == t') $ do-    is <- sortInteractionPoints =<< getInteractionPoints-    liftIO $ modifyIORef theState $ \s ->-      s { theInteractionPoints = is-        , theCurrentFile       = Just (f, t)-        }+    -- The module type checked. If the file was not changed while the+    -- type checker was running then the interaction points and the+    -- "current file" are stored.+    t' <- liftIO $ getModificationTime file+    when (t == t') $ do+      is <- sortInteractionPoints =<< getInteractionPoints+      liftIO $ modifyIORef theState $ \s ->+        s { theInteractionPoints = is+          , theCurrentFile       = Just (f, t)+          } -  cmd ok+    cmd ok -  liftIO System.performGC+    liftIO System.performGC -  return $ Just $ iModuleName (fst ok)+    return $ Just $ iModuleName (fst ok)  -- | @cmd_compile m includes@ compiles the module in file @m@, using -- @includes@ as the include directories.@@ -313,7 +349,7 @@           ])  cmd_constraints :: Interaction-cmd_constraints = Interaction False $ do+cmd_constraints = Interaction Nothing $ do     cs <- map show <$> B.getConstraints     display_info "*Constraints*" (unlines cs)     return Nothing@@ -321,12 +357,13 @@ -- Show unsolved metas. If there are no unsolved metas but unsolved constraints -- show those instead. cmd_metas :: Interaction-cmd_metas = Interaction False $ do -- CL.showMetas []-  ims <- fst <$> B.typeOfMetas B.AsIs-  hms <- snd <$> B.typeOfMetas B.Normalised -- show unsolved implicit arguments normalised+cmd_metas = Interaction Nothing $ do -- CL.showMetas []+  ims <- B.typesOfVisibleMetas B.AsIs+  -- Show unsolved implicit arguments normalised.+  hms <- B.typesOfHiddenMetas B.Normalised   if not $ null ims && null hms     then do-      di <- mapM (\i -> B.withInteractionId (B.outputFormId i) (showA i)) ims+      di <- mapM (\i -> B.withInteractionId (B.outputFormId i) (showATop i)) ims       dh <- mapM showA' hms       display_info "*All Goals*" $ unlines $ di ++ dh       return Nothing@@ -343,27 +380,30 @@     metaId _ = __IMPOSSIBLE__     showA' m = do       r <- getMetaRange (metaId m)-      d <- B.withMetaId (B.outputFormId m) (showA m)+      d <- B.withMetaId (B.outputFormId m) (showATop m)       return $ d ++ "  [ at " ++ show r ++ " ]" -cmd_reset :: Interaction-cmd_reset = Interaction True $ do-  preserveDecodedModules resetState-  return Nothing+-- | If the range is 'noRange', then the string comes from the+-- minibuffer rather than the goal.  type GoalCommand = InteractionId -> Range -> String -> Interaction  cmd_give :: GoalCommand-cmd_give = give_gen B.give $ \s ce -> case ce of (SC.Paren _ _)-> "'paren"-                                                 _             -> "'no-paren"+cmd_give = give_gen B.give $ \rng s ce ->+  case ce of+    ce | rng == noRange -> quote (show ce)+    SC.Paren _ _ -> "'paren"+    _            -> "'no-paren"  cmd_refine :: GoalCommand-cmd_refine = give_gen B.refine $ \s -> quote . show+cmd_refine = give_gen B.refine $ \_ s -> quote . show -give_gen give_ref mk_newtxt ii rng s = Interaction False $ do+give_gen give_ref mk_newtxt ii rng s = Interaction Nothing $ give_gen' give_ref mk_newtxt ii rng s++give_gen' give_ref mk_newtxt ii rng s = do   scope     <- getInteractionScope ii   (ae, iis) <- give_ref ii Nothing =<< B.parseExprIn ii rng s-  let newtxt = A . mk_newtxt s $ abstractToConcrete (makeEnv scope) ae+  let newtxt = A . mk_newtxt rng s $ abstractToConcrete (makeEnv scope) ae   iis       <- sortInteractionPoints iis   liftIO $ modifyIORef theState $ \s ->              s { theInteractionPoints =@@ -377,7 +417,7 @@   replace x xs ys = concatMap (\y -> if y == x then xs else [y]) ys  cmd_intro :: GoalCommand-cmd_intro ii rng _ = Interaction False $ do+cmd_intro ii rng _ = Interaction Nothing $ do   ss <- B.introTactic ii   B.withInteractionId ii $ case ss of     []    -> do@@ -399,17 +439,30 @@   (if null s then cmd_intro else cmd_refine) ii rng s  cmd_auto :: GoalCommand-cmd_auto ii rng s = Interaction False $ do-  (xs, msg) <- Auto.auto ii rng s-  mapM_ (\(ii, s) -> do-    liftIO $ modifyIORef theState $ \s ->-      s { theInteractionPoints = filter (/= ii) (theInteractionPoints s) }-    liftIO $ LocIO.putStrLn $ response $ L [A "agda2-give-action", showNumIId ii, A $ quote s]-   ) xs-  case msg of-   Nothing -> command cmd_metas >> return ()-   Just msg -> display_info "*Auto*" msg-  return Nothing+cmd_auto ii rng s = Interaction Nothing $ do+  (res, msg) <- Auto.auto ii rng s+  case res of+   Left xs -> do+    mapM_ (\(ii, s) -> do+      liftIO $ modifyIORef theState $ \s ->+        s { theInteractionPoints = filter (/= ii) (theInteractionPoints s) }+      liftIO $ LocIO.putStrLn $ response $ L [A "agda2-give-action", showNumIId ii, A $ quote s]+     ) xs+    case msg of+     Nothing -> command cmd_metas >> return ()+     Just msg -> display_info "*Auto*" msg+    return Nothing+   Right (Left cs) -> do+    case msg of+     Nothing -> return ()+     Just msg -> display_info "*Auto*" msg+    liftIO $ LocIO.putStrLn $ response $+     Cons (A "last")+          (L [ A "agda2-make-case-action",+               Q $ L $ List.map (A . quote) cs+             ])+    return Nothing+   Right (Right s) -> give_gen' B.refine (\_ s -> quote . show) ii rng s  -- | Sorts interaction points based on their ranges. @@ -424,79 +477,106 @@ prettyTypeOfMeta norm ii = do   form <- B.typeOfMeta norm ii   case form of-    B.OfType _ e -> prettyA e-    _            -> text <$> showA form+    B.OfType _ e -> prettyATop e+    _            -> text <$> showATop form  -- | Pretty-prints the context of the given meta-variable.  prettyContext   :: B.Rewrite      -- ^ Normalise?+  -> Bool           -- ^ Print the elements in reverse order?   -> InteractionId   -> TCM Doc-prettyContext norm ii = B.withInteractionId ii $ do+prettyContext norm rev ii = B.withInteractionId ii $ do   ctx <- B.contextOfMeta ii norm-  es  <- mapM (prettyA . B.ofExpr) ctx-  ns  <- mapM (showA   . B.ofName) ctx-  let maxLen = maximum $ 0 : filter (< longNameLength) (map length ns)-  return $ vcat $-           map (\(n, e) -> text n $$ nest (maxLen + 1) (text ":") <+> e) $-           zip ns es---- | 'prettyContext' lays out @n : e@ on (at least) two lines if @n@--- has at least @longNameLength@ characters.--longNameLength = 10+  es  <- mapM (prettyATop . B.ofExpr) ctx+  ns  <- mapM (showATop   . B.ofName) ctx+  let shuffle = if rev then reverse else id+  return $ align 10 $ shuffle $ zip ns (map (text ":" <+>) es)  cmd_context :: B.Rewrite -> GoalCommand-cmd_context norm ii _ _ = Interaction False $ do-  display_infoD "*Context*" =<< prettyContext norm ii+cmd_context norm ii _ _ = Interaction Nothing $ do+  display_infoD "*Context*" =<< prettyContext norm False ii   return Nothing  cmd_infer :: B.Rewrite -> GoalCommand-cmd_infer norm ii rng s = Interaction False $ do+cmd_infer norm ii rng s = Interaction Nothing $ do   display_infoD "*Inferred Type*"     =<< B.withInteractionId ii-          (prettyA =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s)+          (prettyATop =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s)   return Nothing  cmd_goal_type :: B.Rewrite -> GoalCommand-cmd_goal_type norm ii _ _ = Interaction False $ do+cmd_goal_type norm ii _ _ = Interaction Nothing $ do   s <- B.withInteractionId ii $ prettyTypeOfMeta norm ii   display_infoD "*Current Goal*" s   return Nothing --- | Displays the current goal and context plus the given document.+-- | Displays the current goal, the given document, and the current+-- context.  cmd_goal_type_context_and doc norm ii _ _ = do   goal <- B.withInteractionId ii $ prettyTypeOfMeta norm ii-  ctx  <- prettyContext norm ii+  ctx  <- prettyContext norm True ii   display_infoD "*Goal type etc.*"-                (ctx $+$+                (text "Goal:" <+> goal $+$+                 doc $+$                  text (replicate 60 '\x2014') $+$-                 text "Goal:" <+> goal $+$-                 doc)+                 ctx)   return Nothing  -- | Displays the current goal and context.  cmd_goal_type_context :: B.Rewrite -> GoalCommand-cmd_goal_type_context norm ii rng s = Interaction False $+cmd_goal_type_context norm ii rng s = Interaction Nothing $   cmd_goal_type_context_and P.empty norm ii rng s  -- | Displays the current goal and context /and/ infers the type of an -- expression.  cmd_goal_type_context_infer :: B.Rewrite -> GoalCommand-cmd_goal_type_context_infer norm ii rng s = Interaction False $ do+cmd_goal_type_context_infer norm ii rng s = Interaction Nothing $ do   typ <- B.withInteractionId ii $-           prettyA =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s+           prettyATop =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s   cmd_goal_type_context_and (text "Have:" <+> typ) norm ii rng s +-- | Shows all the top-level names in the given module, along with+-- their types.++showModuleContents :: Range -> String -> TCM ()+showModuleContents rng s = do+  (modules, types) <- B.moduleContents rng s+  types' <- mapM (\(x, t) -> do+                    t <- prettyTCM t+                    return (show x, text ":" <+> t))+                 types+  display_infoD "*Module contents*" $+    text "Modules" $$+    nest 2 (vcat $ map (text . show) modules) $$+    text "Names" $$+    nest 2 (align 10 types')++-- | Shows all the top-level names in the given module, along with+-- their types. Uses the scope of the given goal.++cmd_show_module_contents :: GoalCommand+cmd_show_module_contents ii rng s = Interaction Nothing $ do+  B.withInteractionId ii $ showModuleContents rng s+  return Nothing++-- | Shows all the top-level names in the given module, along with+-- their types. Uses the top-level scope.++cmd_show_module_contents_toplevel :: String -> Interaction+cmd_show_module_contents_toplevel s = Interaction Nothing $ do+  B.atTopLevel $ showModuleContents noRange s+  return Nothing+ -- | Sets the command line options and updates the status information.  setCommandLineOptions :: CommandLineOptions -> TCM () setCommandLineOptions opts = do-  TM.setCommandLineOptions PersistentOptions opts+  TM.setCommandLineOptions opts   liftIO . displayStatus =<< status  -- | Status information.@@ -581,23 +661,13 @@ response :: Lisp String -> String response l = show (text "agda2_mode_code" <+> pretty l) --- | Formats a response string.--responseString :: Lisp String -> String-responseString s = response $-  L [A "setq", A "agda2-response", s]---- | Responds to a query.--respond :: Lisp String -> IO ()-respond = LocIO.putStrLn . responseString--data Lisp a = A a | L [Lisp a] | Q (Lisp a)+data Lisp a = A a | L [Lisp a] | Q (Lisp a) | Cons (Lisp a) (Lisp a)  instance Pretty a => Pretty (Lisp a) where-  pretty (A a ) = pretty a-  pretty (L xs) = parens (sep (List.map pretty xs))-  pretty (Q x)  = text "'"<>pretty x+  pretty (A a )     = pretty a+  pretty (L xs)     = parens (sep (List.map pretty xs))+  pretty (Q x)      = text "'" <> pretty x+  pretty (Cons a b) = parens (pretty a <+> text "." <+> pretty b)  instance Pretty String where pretty = text @@ -624,21 +694,26 @@ nameModifiers = "" : "'" : "''" : [show i | i <-[3..]]  cmd_make_case :: GoalCommand-cmd_make_case ii rng s = Interaction False $ do+cmd_make_case ii rng s = Interaction Nothing $ do   cs <- makeCase ii rng s   B.withInteractionId ii $ do     pcs <- mapM prettyA cs     liftIO $ LocIO.putStrLn $ response $-      L [ A "agda2-make-case-action",-          Q $ L $ List.map (A . quote . renderStyle (style { mode = OneLineMode })) pcs-        ]+      Cons (A "last")+           (L [ A "agda2-make-case-action"+              , Q $ L $ List.map (A . quote . render) pcs+              ])   return Nothing+  where render = renderStyle (style { mode = OneLineMode })  cmd_solveAll :: Interaction-cmd_solveAll = Interaction False $ do+cmd_solveAll = Interaction Nothing $ do   out <- getInsts   liftIO $ LocIO.putStrLn $ response $-    L[ A"agda2-solveAll-action" , Q . L $ concatMap prn out]+    Cons (A "last")+         (L [ A "agda2-solveAll-action"+            , Q . L $ concatMap prn out+            ])   return Nothing   where   getInsts = mapM lowr =<< B.getSolvedInteractionPoints@@ -681,13 +756,15 @@       SC.OpApp r x es	-> SC.OpApp r x (lowerMeta es)       SC.Rec r fs	-> SC.Rec r (List.map (id -*- lowerMeta) fs)       SC.HiddenArg r e	-> SC.HiddenArg r (lowerMeta e)+      SC.QuoteGoal r x e  -> SC.QuoteGoal r x (lowerMeta e)+      SC.Quote r        -> SC.Quote r  instance LowerMeta SC.LamBinding where   lowerMeta b@(SC.DomainFree _ _) = b   lowerMeta (SC.DomainFull tb)    = SC.DomainFull (lowerMeta tb)  instance LowerMeta SC.TypedBindings where-  lowerMeta (SC.TypedBindings r h bs) = SC.TypedBindings r h (lowerMeta bs)+  lowerMeta (SC.TypedBindings r bs) = SC.TypedBindings r (lowerMeta bs)  instance LowerMeta SC.TypedBinding where   lowerMeta (SC.TBind r ns e) = SC.TBind r ns (lowerMeta e)@@ -701,13 +778,14 @@   lowerMeta = go where     go d = case d of       TypeSig n e1                  -> TypeSig n (lowerMeta e1)-      SC.Field h n e1               -> SC.Field h n (lowerMeta e1)+      SC.Field n e1                 -> SC.Field n (lowerMeta e1)       FunClause lhs rhs whcl        -> FunClause lhs (lowerMeta rhs) (lowerMeta whcl)       Data r ind n tel e1 cs        -> Data r ind n                                          (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)       SC.Record r n c tel e1 cs     -> SC.Record r n c                                          (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)       Infix _ _                     -> d+      Syntax _ _                     -> d       Mutual r ds                   -> Mutual r (lowerMeta ds)       Abstract r ds                 -> Abstract r (lowerMeta ds)       Private r ds                  -> Private r (lowerMeta ds)@@ -740,12 +818,12 @@  cmd_compute :: Bool -- ^ Ignore abstract?                -> GoalCommand-cmd_compute ignore ii rng s = Interaction False $ do+cmd_compute ignore ii rng s = Interaction Nothing $ do   e <- B.parseExprIn ii rng s   d <- B.withInteractionId ii $ do          let c = B.evalInCurrent e          v <- if ignore then ignoreAbstractMode c else c-         prettyA v+         prettyATop v   display_info "*Normal Form*" (show d)   return Nothing @@ -757,23 +835,14 @@   :: (SA.Expr -> TCM SA.Expr)      -- ^ The command to perform.   -> String-     -- ^ The name to used for the buffer displaying the output.+     -- ^ The name to use for the buffer displaying the output.   -> String      -- ^ The expression to parse.   -> Interaction-parseAndDoAtToplevel cmd title s = Interaction False $ do+parseAndDoAtToplevel cmd title s = Interaction Nothing $ do   e <- liftIO $ parse exprParser s-  display_info title =<< do-    mCurrent <- stCurrentModule <$> get-    case mCurrent of-      Nothing      -> return "Error: First load the file."-      Just current -> do-        r <- getVisitedModule (SA.toTopLevelModuleName current)-        case r of-          Nothing -> __IMPOSSIBLE__-          Just mi -> do-            setScope $ iInsideScope $ miInterface mi-            showA =<< cmd =<< concreteToAbstract_ e+  display_info title =<<+    B.atTopLevel (showA =<< cmd =<< concreteToAbstract_ e)   return Nothing  -- | Parse the given expression (as if it were defined at the@@ -792,68 +861,46 @@ cmd_compute_toplevel :: Bool -- ^ Ignore abstract?                      -> String -> Interaction cmd_compute_toplevel ignore =-  parseAndDoAtToplevel (if ignore then ignoreAbstractMode . c else c)+  parseAndDoAtToplevel (if ignore then ignoreAbstractMode . c+                                  else inConcreteMode . c)                        "*Normal Form*"   where c = B.evalInCurrent  ------------------------------------------------------------------------ -- Syntax highlighting --- | @cmd_write_highlighting_info source target@ writes syntax--- highlighting information for the module in @source@ into @target@.--- If the module does not exist, or its module name is malformed or--- cannot be determined, or the module has not already been visited,--- or the cached info is out of date, then the representation of \"no--- highlighting information available\" is instead written to--- @target@.--cmd_write_highlighting_info :: FilePath -> FilePath -> Interaction-cmd_write_highlighting_info source target = Interaction True $ do-  liftIO . UTF8.writeFile target . showHighlightingInfo =<< do-    ex <- liftIO $ doesFileExist source-    case ex of-      False -> return Nothing-      True  -> do-        mmi <- (getVisitedModule =<< Imp.moduleName source)-                 `catchError`-               \_ -> return Nothing-        case mmi of-          Nothing     -> return Nothing-          Just mi -> do-            sourceT <- liftIO $ getModificationTime source-            if sourceT <= miTimeStamp mi-             then do-              modFile <- stModuleToSource <$> get-              return $ Just (iHighlighting $ miInterface mi, modFile)-             else-              return Nothing-  return Nothing---- | Returns the interaction ids for all goals in the current module,--- in the order in which they appear in the module. If there is no--- current module, then an empty list of goals is returned.+-- | @cmd_write_highlighting_info includes source target@ writes+-- syntax highlighting information for the module in @source@ into+-- @target@; @includes@ is the include directories. If the module does+-- not exist, or its module name is malformed or cannot be determined,+-- or the module has not already been visited, or the cached info is+-- out of date, then the representation of \"no highlighting+-- information available\" is instead written to @target@. -cmd_goals :: FilePath-             -- ^ If the module name in this file does not match that-             -- of the current module (or the module name cannot be-             -- determined), then an empty list of goals is returned.-          -> Interaction-cmd_goals f = Interaction True $ do-  is <- do-    ex <- liftIO $ doesFileExist f-    case ex of-      False -> return []-      True  -> do-        mm       <- (Just <$> Imp.moduleName f)-                      `catchError`-                    \_ -> return Nothing-        mCurrent <- stCurrentModule <$> get-        if mm == (SA.toTopLevelModuleName <$> mCurrent) then-          theInteractionPoints <$> liftIO (readIORef theState)-         else-          return []-  liftIO $ respond $ Q $ L $ List.map showNumIId is-  return Nothing+cmd_write_highlighting_info ::+  [FilePath] -> FilePath -> FilePath -> Interaction+cmd_write_highlighting_info includes source target =+  Interaction (Just includes) $ do+    liftIO . UTF8.writeFile target . showHighlightingInfo =<< do+      ex <- liftIO $ doesFileExist source+      case ex of+        False -> return Nothing+        True  -> do+          mmi <- (getVisitedModule =<<+                    moduleName =<< liftIO (absolute source))+                   `catchError`+                 \_ -> return Nothing+          case mmi of+            Nothing -> return Nothing+            Just mi -> do+              sourceT <- liftIO $ getModificationTime source+              if sourceT <= miTimeStamp mi+               then do+                modFile <- stModuleToSource <$> get+                return $ Just (iHighlighting $ miInterface mi, modFile)+               else+                return Nothing+    return Nothing  -- | Tells the Emacs mode to go to the first error position (if any). @@ -875,18 +922,22 @@  showImplicitArgs :: Bool -- ^ Show them?                  -> Interaction-showImplicitArgs showImpl = Interaction False $ do+showImplicitArgs showImpl = Interaction Nothing $ do   opts <- commandLineOptions-  setCommandLineOptions (opts { optShowImplicit = showImpl })+  setCommandLineOptions $+    opts { optPragmaOptions =+             (optPragmaOptions opts) { optShowImplicit = showImpl } }   return Nothing  -- | Toggle display of implicit arguments.  toggleImplicitArgs :: Interaction-toggleImplicitArgs = Interaction False $ do+toggleImplicitArgs = Interaction Nothing $ do   opts <- commandLineOptions-  setCommandLineOptions (opts { optShowImplicit =-                                  not $ optShowImplicit opts })+  let ps = optPragmaOptions opts+  setCommandLineOptions $+    opts { optPragmaOptions =+             ps { optShowImplicit = not $ optShowImplicit ps } }   return Nothing  ------------------------------------------------------------------------@@ -923,3 +974,43 @@                -- does not really matter if it is displayed                -- incorrectly when an unexpected error has occurred.              }++-- | Raises an error if the given file is not the one currently+-- loaded.++ensureFileLoaded :: AbsolutePath -> TCM ()+ensureFileLoaded current = do+  f <- theCurrentFile <$> liftIO (readIORef theState)+  when (Just current /= (fst <$> f)) $+    typeError $ GenericError "Error: First load the file."++-- Helpers for testing ----------------------------------------------------++getCurrentFile :: IO FilePath+getCurrentFile = do+  mf <- theCurrentFile <$> readIORef theState+  case mf of+    Nothing     -> error "command: No file loaded!"+    Just (f, _) -> return (filePath f)++-- | Changes the 'Interaction' so that its first action is to turn off+-- all debug messages.++makeSilent :: Interaction -> Interaction+makeSilent i = i { command = do+  opts <- commandLineOptions+  TM.setCommandLineOptions $ opts+    { optPragmaOptions =+        (optPragmaOptions opts)+          { optVerbose = Trie.singleton [] 0 }+    }+  command i }++top_command' :: FilePath -> Interaction -> IO ()+top_command' f cmd = ioTCM f Nothing $ makeSilent cmd++goal_command :: InteractionId -> GoalCommand -> String -> IO ()+goal_command i cmd s = do+  f <- getCurrentFile+  -- TODO: Test with other ranges as well.+  ioTCM f Nothing $ makeSilent $ cmd i noRange s
src/full/Agda/Interaction/Highlighting/Generate.hs view
@@ -152,6 +152,7 @@       tokenToFile (T.TokLiteral (L.LitFloat  r _)) = aToF Number r       tokenToFile (T.TokLiteral (L.LitString r _)) = aToF String r       tokenToFile (T.TokLiteral (L.LitChar   r _)) = aToF String r+      tokenToFile (T.TokLiteral (L.LitQName  r _)) = aToF String r       tokenToFile (T.TokComment (i, _))            = aToF Comment (P.getRange i)       tokenToFile (T.TokTeX (i, _))                = aToF Comment (P.getRange i)       tokenToFile (T.TokId {})                     = mempty@@ -240,7 +241,7 @@       getFieldDecl (A.RecDef _ _ _ _ _ fs) = Fold.foldMap extractField fs         where         extractField (A.ScopedDecl _ ds) = Fold.foldMap extractField ds-        extractField (A.Field _ _ x _)   = field (concreteQualifier x)+        extractField (A.Field _ x _)     = field (concreteQualifier x)                                                  (concreteBase x)         extractField _                   = mempty       getFieldDecl _                   = mempty@@ -301,9 +302,9 @@    getDef :: A.Definition -> Map A.QName NameKind   getDef (A.FunDef  _ q _)       = Map.singleton q Function-  getDef (A.DataDef _ q i _ cs)  = Map.singleton q Datatype `union`+  getDef (A.DataDef _ q _ cs)    = Map.singleton q Datatype `union`                                    (Map.unions $-                                    map (\q -> Map.singleton q (Constructor i)) $+                                    map (\q -> Map.singleton q (Constructor SC.Inductive)) $                                     map getAxiomName cs)   getDef (A.RecDef  _ q c _ _ _) = Map.singleton q Record `union`                                    case c of@@ -315,7 +316,7 @@    getDecl :: A.Declaration -> Map A.QName NameKind   getDecl (A.Axiom _ q _)     = Map.singleton q Postulate-  getDecl (A.Field _ _ q _)   = Map.singleton q Field+  getDecl (A.Field _ q _)     = Map.singleton q Field   getDecl (A.Primitive _ q _) = Map.singleton q Primitive   getDecl (A.Definition {})   = Map.empty   getDecl (A.Section {})      = Map.empty@@ -372,8 +373,8 @@   getConstructor _           = return Seq.empty    getConstructorP :: I.Pattern -> TCM (Seq A.QName)-  getConstructorP (I.ConP q _) = return $ Seq.singleton q-  getConstructorP _            = return Seq.empty+  getConstructorP (I.ConP q _ _) = return $ Seq.singleton q+  getConstructorP _              = return Seq.empty    retrieveCoconstructor :: A.QName -> TCM (Seq A.QName)   retrieveCoconstructor c = do@@ -383,10 +384,11 @@       NotDelayed -> return Seq.empty        Delayed -> do-        clauses <- R.instantiateFull $ defClauses def+        clauses <- R.instantiateFull $ map I.originalClause $+                     defClauses def         case clauses of           [I.Clause{ I.clauseBody = body }] -> case getRHS body of-            Just (I.Con c args) -> do+            Just (I.Def c args) -> do               s <- everything' (liftM2 (><)) query args               return $ Seq.singleton c >< s @@ -461,13 +463,13 @@               -- if possible.            -> File nameToFile modMap file xs x m mR =-  -- Make sure that we don't get any funny ranges.-  if all (== Just file) $ catMaybes $-     map (fmap P.srcFile . P.rStart . P.getRange) (x : xs) then+  -- We don't care if we get any funny ranges.+  if all (== Just file) fileNames then     several rs' ((m isOp) { definitionSite = mFilePos })    else-    __IMPOSSIBLE__+    mempty   where+  fileNames  = catMaybes $ map (fmap P.srcFile . P.rStart . P.getRange) (x : xs)   (rs, isOp) = getRanges x   rs'        = rs ++ concatMap (fst . getRanges) xs   mFilePos   = do
src/full/Agda/Interaction/Highlighting/Precise.hs view
@@ -29,7 +29,7 @@ import Agda.Utils.QuickCheck import Data.Map (Map) import qualified Data.Map as Map-import Data.Generics+import Data.Generics (Typeable, Data)  import qualified Agda.Syntax.Abstract.Name as A import qualified Agda.Syntax.Common as C
src/full/Agda/Interaction/Highlighting/Range.hs view
@@ -15,7 +15,7 @@  import Agda.Utils.QuickCheck import Data.List-import Data.Generics+import Data.Generics (Typeable, Data) import Agda.Utils.TestHelpers import qualified Agda.Syntax.Abstract as A import qualified Agda.Syntax.Concrete as C
src/full/Agda/Interaction/Highlighting/Vim.hs view
@@ -66,8 +66,8 @@ toVim :: NamesInScope -> String toVim ns = unlines $ matches mcons micons mdefs midefs     where-	cons = [ x | (x, [def]) <- Map.toList ns, anameKind def == ConName ]-	defs = [ x | (x, [def]) <- Map.toList ns, anameKind def == DefName ]+	cons = [ x | (x, def:_) <- Map.toList ns, anameKind def == ConName ]+	defs = [ x | (x, def:_) <- Map.toList ns, anameKind def == DefName ]  	mcons = map show cons 	mdefs = map show defs
src/full/Agda/Interaction/Imports.hs view
@@ -13,8 +13,8 @@ import qualified Data.List as List import qualified Data.Set as Set import qualified Data.ByteString.Lazy as BS-import Data.Generics import Data.List+import Data.Maybe import Data.Map (Map) import Data.Set (Set) import System.Directory@@ -23,6 +23,7 @@ import System.FilePath hiding (splitPath)  import Agda.Syntax.Position+import qualified Agda.Syntax.Abstract as A import qualified Agda.Syntax.Concrete as C import Agda.Syntax.Abstract.Name import Agda.Syntax.Parser@@ -55,35 +56,6 @@ import Agda.Utils.Impossible #include "../undefined.h" --- | Which directory should form the base of relative include paths?--data RelativeTo-  = ProjectRoot-    -- ^ The root directory of the \"project\" containing the current-    -- file.-  | CurrentDir-    -- ^ The current working directory.---- | A variant of 'moduleName'' which raises an error if the file name--- does not match the module name.------ The file name is interpreted relative to the current working--- directory (unless it is absolute).--moduleName :: FilePath -> TCM C.TopLevelModuleName-moduleName file = do-  file <- liftIO (absolute file)-  m <- moduleName' file-  checkModuleName m file-  return m---- | Computes the module name of the top-level module in the given--- file.--moduleName' :: AbsolutePath -> TCM C.TopLevelModuleName-moduleName' file = liftIO $ do-  C.topLevelModuleName <$> parseFile' moduleParser file- -- | Merge an interface into the current proof state. mergeInterface :: Interface -> TCM () mergeInterface i = do@@ -195,37 +167,10 @@ warningsToError (Warnings w@(_:_) _ _) = TerminationCheckFailed w  -- | Type checks the given module (if necessary).------ The function also makes relative directories absolute, based on the--- 'RelativeTo' argument. If this argument is 'ProjectRoot', then the--- \"current file\" is taken to be the one given as the first--- argument. -typeCheck :: FilePath-          -- ^ The file name is interpreted relative to the current-          -- working directory (unless it is absolute).-          -> RelativeTo-          -> Maybe [AbsolutePath]-          -- ^ If this argument is given, and it does not coincide-          -- with the new value of the include directories (after-          -- making them absolute), the state is reset (but the-          -- command-line options are preserved).-          -> TCM (Interface, Maybe Warnings)-typeCheck f relativeTo oldIncs = do-  f <- liftIO (absolute f)-  m <- moduleName' f--  makeIncludeDirsAbsolute =<< case relativeTo of-    CurrentDir  -> liftIO (absolute =<< getCurrentDirectory)-    ProjectRoot -> return $ C.projectRoot f m--  -- If the include directories have changed the state is reset.-  incs <- getIncludeDirs-  case oldIncs of-    Just incs' | incs' /= incs -> resetState-    _                          -> return ()--  checkModuleName m f+typeCheck :: AbsolutePath -> TCM (Interface, Maybe Warnings)+typeCheck f = do+  m <- moduleName f    (i, wt) <- getInterface' m True   return (i, case wt of@@ -256,10 +201,9 @@ getInterface' x includeStateChanges =   -- Preserve the pragma options unless includeStateChanges is True.   bracket (stPragmaOptions <$> get)-          (unless includeStateChanges .-             setCommandLineOptions PragmaOptions) $ \_ -> do+          (unless includeStateChanges . setPragmaOptions) $ \_ -> do    -- Forget the pragma options (locally).-   setCommandLineOptions PersistentOptions . stPersistentOptions =<< get+   setCommandLineOptions . stPersistentOptions =<< get     alreadyVisited x $ addImportCycleCheck x $ do     file <- findFile x  -- requires source to exist@@ -278,7 +222,7 @@       (if uptodate then "" else "not ") ++ "up-to-date."      (stateChangesIncluded, (i, wt)) <--      if uptodate then skip x file else typeCheck file+      if uptodate then skip file else typeCheck file      -- Ensure that the given module name matches the one in the file.     let topLevelName = toTopLevelModuleName $ iModuleName i@@ -301,7 +245,7 @@     return (i, wt)      where-	skip x file = do+	skip file = do 	    -- Examine the mtime of the interface file. If it is newer than the 	    -- stored version (in stDecodedModules), or if there is no stored version, 	    -- read and decode it. Otherwise use the stored version.@@ -340,6 +284,10 @@ 			    reportSLn "" 1 $                               "Skipping " ++ render (pretty x) ++                                 " (" ++ (if cached then "cached" else ifile) ++ ")."+                            -- We set the pragma options of the skipped file here,+                            -- because if the top-level file is skipped we want the+                            -- pragmas to apply to interactive commands in the UI.+                            mapM_ setOptionsFromPragma (iPragmaOptions i) 			    return (False, (i, Right t))  	typeCheck file = do@@ -361,15 +309,13 @@               vs       <- getVisitedModules               ds       <- getDecodedModules               opts     <- stPersistentOptions <$> get-              trace    <- getTrace               isig     <- getImportedSignature               ibuiltin <- gets stImportedBuiltins               -- Every interface is treated in isolation.               r <- liftIO $ runTCM $                      withImportPath ms $ do                        setDecodedModules ds-                       setTrace trace-                       setCommandLineOptions PersistentOptions opts+                       setCommandLineOptions opts                        modify $ \s -> s { stModuleToSource = mf }                        setVisitedModules vs                        addImportedThings isig ibuiltin Set.empty@@ -461,7 +407,10 @@      pragmas <- concat <$> concreteToAbstract_ pragmas                -- identity for top-level pragmas at the moment-    setOptionsFromPragmas pragmas+    let getOptions (A.OptionsPragma opts) = Just opts+        getOptions _                      = Nothing+        options = catMaybes $ map getOptions pragmas+    mapM_ setOptionsFromPragma options     topLevel <- concreteToAbstract_ (TopLevel top)      termErrs <- catchError (do@@ -469,7 +418,7 @@       checkDecls (topLevelDecls topLevel)        -- Termination checking.-      termErrs <- ifM (optTerminationCheck <$> commandLineOptions)+      termErrs <- ifM (optTerminationCheck <$> pragmaOptions)                       (termDecls $ topLevelDecls topLevel)                       (return [])       mapM_ (\e -> reportSLn "term.warn.no" 2@@ -503,14 +452,14 @@     -- Check if there are unsolved meta-variables...     unsolvedMetas <- List.nub <$> (mapM getMetaRange =<< getOpenMetas)     unless (null unsolvedMetas) $ do-      unsolvedOK <- optAllowUnsolved <$> commandLineOptions+      unsolvedOK <- optAllowUnsolved <$> pragmaOptions       unless unsolvedOK $         typeError $ UnsolvedMetas unsolvedMetas      -- ...or unsolved constraints     unsolvedConstraints <- getConstraints     unless (null unsolvedConstraints) $ do-      unsolvedOK <- optAllowUnsolved <$> commandLineOptions+      unsolvedOK <- optAllowUnsolved <$> pragmaOptions       unless unsolvedOK $         typeError $ UnsolvedConstraints unsolvedConstraints @@ -518,7 +467,7 @@      reportSLn "scope.top" 50 $ "SCOPE " ++ show (insideScope topLevel) -    i <- buildInterface topLevel syntaxInfo previousHsImports+    i <- buildInterface topLevel syntaxInfo previousHsImports options      if and [ null termErrs, null unsolvedMetas, null unsolvedConstraints ]      then do@@ -539,8 +488,10 @@                -> Set String                   -- ^ Haskell modules imported in imported modules                   -- (transitively).+               -> [OptionsPragma]+                  -- ^ Options set in @OPTIONS@ pragmas.                -> TCM Interface-buildInterface topLevel syntaxInfo previousHsImports = do+buildInterface topLevel syntaxInfo previousHsImports pragmas = do     reportSLn "import.iface" 5 "Building interface..."     scope'  <- getScope     let scope = scope' { scopeCurrent = m }@@ -560,6 +511,7 @@                         , iHaskellImports  = Set.difference hsImps                                                             previousHsImports                         , iHighlighting    = syntaxInfo+                        , iPragmaOptions   = pragmas 			}     reportSLn "import.iface" 7 "  interface complete"     return i
src/full/Agda/Interaction/MakeCase.hs view
@@ -20,6 +20,7 @@ import Agda.Syntax.Scope.Base (emptyScopeInfo)  import Agda.TypeChecking.Monad+import qualified Agda.TypeChecking.Monad.Context as Context import Agda.TypeChecking.Coverage import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce@@ -33,19 +34,34 @@ #include "../undefined.h" import Agda.Utils.Impossible --- | Find the clause whose right hand side is the given meta.---   Raises an error if there is no such clause.+-- | Find the clause whose right hand side is the given meta +-- BY SEARCHING THE WHOLE SIGNATURE. Returns+-- the original clause, before record patterns have been translated+-- away. Raises an error if there is no matching clause.+--+-- Andreas, 2010-09-21: This looks like a SUPER UGLY HACK to me. You are+-- walking through the WHOLE signature to find an information you have+-- thrown away earlier.  (shutter with disgust).+-- This code fails for record rhs because they have been eta-expanded, +-- so the MVar is gone. findClause :: MetaId -> TCM (QName, Clause) findClause m = do   sig <- getImportedSignature   let res = do         def <- Map.elems $ sigDefinitions sig         Function{funClauses = cs} <- [theDef def]-        c <- cs+        c <- map originalClause cs         unless (rhsIsm $ clauseBody c) []         return (defName def, c)   case res of-    []  -> typeError $ GenericError "Right hand side must be a single hole when making a case distinction."+    []  -> do+      reportSDoc "interaction.case" 10 $ vcat $+        [ text "Interaction.MakeCase.findClause fails"+        , text "expected rhs to be meta var" <+> (text $ show m)+        , text "but could not find it in the signature" +        ] +      reportSDoc "interaction.case" 20 $ vcat $ map (text . show) (Map.elems $ sigDefinitions sig)  -- you asked for it!+      typeError $ GenericError "Right hand side must be a single hole when making a case distinction."     [r] -> return r     _   -> __IMPOSSIBLE__   where@@ -80,6 +96,12 @@ prettySplitError err = case err of   NotADatatype t -> fsep $     pwords "Cannot pattern match on non-datatype" ++ [prettyTCM t]+  IrrelevantDatatype t -> fsep $+    pwords "Cannot pattern match on datatype" ++ [prettyTCM t] +++    pwords "since it is declared irrelevant" +  NoRecordConstructor t -> fsep $+    pwords "Cannot pattern match on record" ++ [prettyTCM t] +++    pwords "because it has no constructor"   CantSplit c tel cIxs gIxs flex -> addCtxTel tel $ vcat     [ fsep $ pwords "Cannot pattern match on constructor" ++ [prettyTCM c <> text ","] ++              pwords "since the inferred indices"@@ -94,7 +116,7 @@ makeAbsurdClause :: QName -> SplitClause -> TCM A.Clause makeAbsurdClause f (SClause tel perm ps _) = do   reportSDoc "interaction.case" 10 $ vcat-    [ text "split clause:"+    [ text "Interaction.MakeCase.makeCase: split clause:"     , nest 2 $ vcat       [ text "context =" <+> (prettyTCM =<< getContextTelescope)       , text "tel =" <+> prettyTCM tel@@ -119,7 +141,9 @@  deBruijnIndex :: A.Expr -> TCM Nat deBruijnIndex e = do-  (v, _) <- inferExpr e+  (v, _) <- -- Andreas, 2010-09-21 allow splitting on irrelevant (record) vars+            Context.wakeIrrelevantVars $ +              inferExpr e   case v of     Var n _ -> return n     _       -> typeError . GenericError . show =<< (fsep $
src/full/Agda/Interaction/Options.hs view
@@ -1,13 +1,15 @@-{-# LANGUAGE CPP #-}- module Agda.Interaction.Options     ( CommandLineOptions(..)+    , PragmaOptions(..)+    , OptionsPragma     , Flag+    , Verbosity     , checkOpts     , parseStandardOptions     , parsePragmaOptions     , parsePluginOptions     , defaultOptions+    , defaultVerbosity     , standardOptions_     , isLiterate     , mapFlag@@ -15,6 +17,7 @@     , tests     ) where +import Control.Monad            ( when ) import Control.Monad.Error	( MonadError(catchError) ) import Data.List		( isSuffixOf ) import System.Console.GetOpt	(getOpt, usageInfo, ArgOrder(ReturnInOrder)@@ -22,8 +25,10 @@ 				) import Agda.Utils.TestHelpers   ( runTests ) import Agda.Utils.QuickCheck    ( quickCheck' )+import Agda.Utils.FileName      ( AbsolutePath ) import Agda.Utils.Monad		( readM ) import Agda.Utils.List               ( wordsBy )+import Agda.Utils.String             ( indent ) import Agda.Utils.Trie               ( Trie ) import qualified Agda.Utils.Trie as Trie @@ -41,76 +46,108 @@     fmap f (ReqArg p s) = ReqArg (f . p) s     fmap f (OptArg p s) = OptArg (f . p) s +type Verbosity = Trie String Int+ data CommandLineOptions =     Options { optProgramName          :: String 	    , optInputFile            :: Maybe FilePath-	    , optIncludeDirs          :: [FilePath]+	    , optIncludeDirs          :: 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'). 	    , optShowVersion          :: Bool 	    , optShowHelp             :: Bool 	    , optInteractive          :: Bool-	    , optVerbose              :: Trie String Int-	    , optProofIrrelevance     :: Bool-	    , optAllowUnsolved        :: Bool-	    , optShowImplicit         :: Bool 	    , optRunTests             :: Bool 	    , optCompile              :: Bool+            , optCompileDir           :: Maybe FilePath+              -- ^ In the absence of a path the project root is used. 	    , optGenerateVimFile      :: Bool 	    , optGenerateHTML         :: Bool 	    , optHTMLDir              :: FilePath 	    , optCSSFile              :: Maybe FilePath 	    , optIgnoreInterfaces     :: Bool-	    , optDisablePositivity    :: Bool-	    , optCompileAlonzo        :: Bool-            , optCompileMAlonzo       :: Bool-            , optMAlonzoDir           :: Maybe FilePath-              -- ^ In the absence of a path the project root is used.-	    , optTerminationCheck     :: Bool-	    , optCompletenessCheck    :: Bool-            , optUnreachableCheck     :: Bool-	    , optUniverseCheck        :: Bool-            , optSizedTypes           :: Bool-            , optUniversePolymorphism :: Bool+            , optForcing              :: Bool             , optGhcFlags             :: [String]+            , optPragmaOptions        :: PragmaOptions 	    }     deriving Show +-- | Options which can be set in a pragma.++data PragmaOptions = PragmaOptions+  { optShowImplicit              :: Bool+  , optVerbose                   :: Verbosity+  , optProofIrrelevance          :: Bool+  , optAllowUnsolved             :: Bool+  , optDisablePositivity         :: Bool+  , optTerminationCheck          :: Bool+  , optTerminationDepth          :: Int+  , optCompletenessCheck         :: Bool+  , optUnreachableCheck          :: Bool+  , optUniverseCheck             :: Bool+  , optSizedTypes                :: Bool+  , optInjectiveTypeConstructors :: Bool+  , optGuardingTypeConstructors  :: Bool+  , optUniversePolymorphism      :: Bool+  }+  deriving Show++-- | The options from an @OPTIONS@ pragma.+--+-- In the future it might be nice to switch to a more structured+-- representation. Note that, currently, there is not a one-to-one+-- correspondence between list elements and options.+type OptionsPragma = [String]+ -- | Map a function over the long options. Also removes the short options. --   Will be used to add the plugin name to the plugin options. mapFlag :: (String -> String) -> OptDescr a -> OptDescr a mapFlag f (Option _ long arg descr) = Option [] (map f long) arg descr +defaultVerbosity :: Verbosity+defaultVerbosity = Trie.singleton [] 1+ defaultOptions :: CommandLineOptions defaultOptions =     Options { optProgramName          = "agda" 	    , optInputFile            = Nothing-	    , optIncludeDirs          = []+	    , optIncludeDirs          = Left [] 	    , optShowVersion          = False 	    , optShowHelp             = False 	    , optInteractive          = False-	    , optVerbose              = Trie.singleton [] 1-	    , optProofIrrelevance     = False-	    , optAllowUnsolved        = False-	    , optShowImplicit         = False 	    , optRunTests             = False 	    , optCompile              = False+            , optCompileDir           = Nothing 	    , optGenerateVimFile      = False 	    , optGenerateHTML         = False 	    , optHTMLDir              = defaultHTMLDir 	    , optCSSFile              = Nothing 	    , optIgnoreInterfaces     = False-	    , optDisablePositivity    = False-	    , optCompileAlonzo        = False-	    , optCompileMAlonzo       = False-            , optMAlonzoDir           = Nothing-            , optTerminationCheck     = True-            , optCompletenessCheck    = True-            , optUnreachableCheck     = True-            , optUniverseCheck        = True-            , optSizedTypes           = False-            , optUniversePolymorphism = False+            , optForcing              = True             , optGhcFlags             = []+            , optPragmaOptions        = defaultPragmaOptions 	    } +defaultPragmaOptions :: PragmaOptions+defaultPragmaOptions = PragmaOptions+  { optShowImplicit              = False+  , optVerbose                   = defaultVerbosity+  , optProofIrrelevance          = False+  , optAllowUnsolved             = False+  , optDisablePositivity         = False+  , optTerminationCheck          = True+  , optTerminationDepth          = 0    -- this is the cutoff value+  , optCompletenessCheck         = True+  , optUnreachableCheck          = True+  , optUniverseCheck             = True+  , optSizedTypes                = False+  , optInjectiveTypeConstructors = False+  , optGuardingTypeConstructors  = False+  , optUniversePolymorphism      = False+  }+ -- | The default output directory for HTML.  defaultHTMLDir = "html"@@ -123,72 +160,71 @@      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 -> Either String opts  -- | Checks that the given options are consistent.  checkOpts :: Flag CommandLineOptions checkOpts opts-  | not (atMostOne compilerOpts) =-    Left "At most one compiler may be used.\n"-  | not (atMostOne $ optAllowUnsolved : compilerOpts) = Left+  | not (atMostOne [optAllowUnsolved . p, optCompile]) = Left       "Unsolved meta variables are not allowed when compiling.\n"-  | not (atMostOne $ optInteractive : compilerOpts) =+  | not (atMostOne [optInteractive, optCompile]) =       Left "Choose at most one: compiler or interactive mode.\n"   | not (atMostOne [optGenerateHTML, optInteractive]) =       Left "Choose at most one: HTML generator or interactive mode.\n"-  | not (atMostOne [optUniversePolymorphism, not . optUniverseCheck]) =+  | not (atMostOne [ optUniversePolymorphism . p+                   , not . optUniverseCheck . p+                   ]) =       Left "Cannot have both universe polymorphism and type in type.\n"   | otherwise = Right opts   where   atMostOne bs = length (filter ($ opts) bs) <= 1 -  compilerOpts =-    [ optCompile-    , optCompileAlonzo-    , optCompileMAlonzo-    ]+  p = optPragmaOptions -inputFlag :: FilePath -> CommandLineOptions -> Either String CommandLineOptions-inputFlag f o	    =+inputFlag :: FilePath -> Flag CommandLineOptions+inputFlag f o =     case optInputFile o of-	Nothing  -> checkOpts $ o { optInputFile = Just f }+	Nothing  -> return $ o { optInputFile = Just f } 	Just _	 -> fail "only one input file allowed" -versionFlag               o = checkOpts $ o { optShowVersion          = True  }-helpFlag                  o = checkOpts $ o { optShowHelp             = True  }-proofIrrelevanceFlag      o = checkOpts $ o { optProofIrrelevance     = True  }-ignoreInterfacesFlag      o = checkOpts $ o { optIgnoreInterfaces     = True  }-allowUnsolvedFlag         o = checkOpts $ o { optAllowUnsolved        = True  }-showImplicitFlag          o = checkOpts $ o { optShowImplicit         = True  }-runTestsFlag              o = checkOpts $ o { optRunTests             = True  }-vimFlag                   o = checkOpts $ o { optGenerateVimFile      = True  }-noPositivityFlag          o = checkOpts $ o { optDisablePositivity    = True  }-dontTerminationCheckFlag  o = checkOpts $ o { optTerminationCheck     = False }-dontCompletenessCheckFlag o = checkOpts $ o { optCompletenessCheck    = False }-noUnreachableCheckFlag    o = checkOpts $ o { optUnreachableCheck     = False }-dontUniverseCheckFlag     o = checkOpts $ o { optUniverseCheck        = False }-sizedTypes                o = checkOpts $ o { optSizedTypes           = True  }-universePolymorphismFlag  o = checkOpts $ o { optUniversePolymorphism = True  }+versionFlag                  o = return $ o { optShowVersion               = True  }+helpFlag                     o = return $ o { optShowHelp                  = True  }+proofIrrelevanceFlag         o = return $ o { optProofIrrelevance          = True  }+ignoreInterfacesFlag         o = return $ o { optIgnoreInterfaces          = True  }+allowUnsolvedFlag            o = return $ o { optAllowUnsolved             = True  }+showImplicitFlag             o = return $ o { optShowImplicit              = True  }+runTestsFlag                 o = return $ o { optRunTests                  = True  }+vimFlag                      o = return $ o { optGenerateVimFile           = True  }+noPositivityFlag             o = return $ o { optDisablePositivity         = True  }+dontTerminationCheckFlag     o = return $ o { optTerminationCheck          = False }+dontCompletenessCheckFlag    o = return $ o { optCompletenessCheck         = False }+noUnreachableCheckFlag       o = return $ o { optUnreachableCheck          = False }+dontUniverseCheckFlag        o = return $ o { optUniverseCheck             = False }+sizedTypes                   o = return $ o { optSizedTypes                = True  }+injectiveTypeConstructorFlag o = return $ o { optInjectiveTypeConstructors = True  }+guardingTypeConstructorFlag  o = return $ o { optGuardingTypeConstructors  = True  }+universePolymorphismFlag     o = return $ o { optUniversePolymorphism      = True  }+noForcingFlag                o = return $ o { optForcing                   = False } -interactiveFlag o = checkOpts $ o { optInteractive   = True-			          , optAllowUnsolved = True-			          }-compileFlag      o = checkOpts $ o { optCompileMAlonzo = True }-agateFlag        o = checkOpts $ o { optCompile        = True }-alonzoFlag       o = checkOpts $ o { optCompileAlonzo  = True }-malonzoFlag      o = checkOpts $ o { optCompileMAlonzo = True }-malonzoDirFlag f o = checkOpts $ o { optMAlonzoDir     = Just f }-ghcFlag        f o = checkOpts $ o { optGhcFlags       = f : optGhcFlags o }+interactiveFlag  o = return $ o { optInteractive    = True+                                , optPragmaOptions  = (optPragmaOptions o)+                                                        { optAllowUnsolved = True }+		                }+compileFlag      o = return $ o { optCompile    = True }+compileDirFlag f o = return $ o { optCompileDir = Just f }+ghcFlag        f o = return $ o { optGhcFlags   = f : optGhcFlags o } -htmlFlag      o = checkOpts $ o { optGenerateHTML = True }-htmlDirFlag d o = checkOpts $ o { optHTMLDir      = d }-cssFlag     f o = checkOpts $ o { optCSSFile      = Just f }+htmlFlag      o = return $ o { optGenerateHTML = True }+htmlDirFlag d o = return $ o { optHTMLDir      = d }+cssFlag     f o = return $ o { optCSSFile      = Just f } -includeFlag d o	    = checkOpts $ o { optIncludeDirs   = d : optIncludeDirs o   }-verboseFlag s o	    =+includeFlag d o = return $ o { optIncludeDirs = Left (d : ds) }+  where ds = either id (const []) $ optIncludeDirs o++verboseFlag s o =     do	(k,n) <- parseVerbose s-	checkOpts $ o { optVerbose = Trie.insert k n $ optVerbose o }+	return $ o { optVerbose = Trie.insert k n $ optVerbose o }   where     parseVerbose s = case wordsBy (`elem` ":.") s of       []  -> usage@@ -197,6 +233,12 @@         return (init ss, n)     usage = fail "argument to verbose should be on the form x.y.z:N or N" +terminationDepthFlag s o =+    do k <- readM s `catchError` \_ -> usage+       when (k < 1) $ usage -- or: turn termination checking off for 0+       return $ o { optTerminationDepth = k-1 }+    where usage = fail "argument to termination-depth should be >= 1"+ integerArgument :: String -> String -> Either String Int integerArgument flag s =     readM s `catchError` \_ ->@@ -210,7 +252,7 @@ 		    "start in interactive mode"     , Option ['c']  ["compile"] (NoArg compileFlag)                     "compile program (experimental)"-    , Option []     ["compile-dir"] (ReqArg malonzoDirFlag "DIR")+    , 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"@@ -229,14 +271,21 @@ 		    "ignore interface files (re-type check everything)"     , Option ['i']  ["include-path"] (ReqArg includeFlag "DIR") 		    "look for imports in DIR"-    ] ++ pragmaOptions+    , Option []     ["no-forcing"] (NoArg noForcingFlag)+                    "disable the forcing optimisation"+    ] ++ map (fmap lift) pragmaOptions+  where+  lift :: Flag PragmaOptions -> Flag CommandLineOptions+  lift f = \opts -> do+    ps <- f (optPragmaOptions opts)+    return (opts { optPragmaOptions = ps }) -pragmaOptions :: [OptDescr (Flag CommandLineOptions)]+pragmaOptions :: [OptDescr (Flag PragmaOptions)] pragmaOptions =-    [ Option ['v']  ["verbose"]	(ReqArg verboseFlag "N")-		    "set verbosity level to N"-    , Option []	    ["show-implicit"] (NoArg showImplicitFlag)+    [ Option []	    ["show-implicit"] (NoArg showImplicitFlag) 		    "show implicit arguments when printing"+    , Option ['v']  ["verbose"]	(ReqArg verboseFlag "N")+                    "set verbosity level to N"     -- , Option []	    ["proof-irrelevance"] (NoArg proofIrrelevanceFlag)     --     	    "enable proof irrelevance (experimental feature)"     , Option []	    ["allow-unsolved-metas"] (NoArg allowUnsolvedFlag)@@ -245,6 +294,8 @@ 		    "do not warn about not strictly positive data types"     , Option []	    ["no-termination-check"] (NoArg dontTerminationCheckFlag) 		    "do not warn about possibly nonterminating code"+    , 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"     , Option []	    ["no-unreachable-check"] (NoArg noUnreachableCheckFlag)@@ -253,6 +304,10 @@ 		    "ignore universe levels (this makes Agda inconsistent)"     , Option []     ["sized-types"] (NoArg sizedTypes)                     "use sized datatypes"+    , Option []     ["injective-type-constructors"] (NoArg injectiveTypeConstructorFlag)+                    "enable injective type constructors (makes Agda anti-classical and possibly inconsistent)"+    , Option []     ["guardedness-preserving-type-constructors"] (NoArg guardingTypeConstructorFlag)+                    "treat type constructors as inductive constructors when checking productivity"     , Option []     ["universe-polymorphism"] (NoArg universePolymorphismFlag)                     "enable universe polymorphism (experimental feature)"     ]@@ -263,43 +318,45 @@  -- | Don't export parseOptions' ::-    String -> [String] -> opts ->-    [OptDescr (Flag opts)] -> (String -> Flag opts) -> Either String opts-parseOptions' progName argv defaults opts fileArg =-    case (getOpt (ReturnInOrder fileArg) opts argv) of+  [String] -> [OptDescr (Flag opts)] -> (String -> Flag opts) -> Flag opts+parseOptions' argv opts fileArg = \defaults ->+    case getOpt (ReturnInOrder fileArg) opts argv of 	(o,_,[])    -> foldl (>>=) (return defaults) o 	(_,_,errs)  -> fail $ concat errs  -- | Parse the standard options.-parseStandardOptions :: String -> [String] -> Either String CommandLineOptions-parseStandardOptions progName argv =-    parseOptions' progName argv defaultOptions standardOptions inputFlag+parseStandardOptions :: [String] -> Either String CommandLineOptions+parseStandardOptions argv =+  checkOpts =<<+    parseOptions' argv standardOptions inputFlag defaultOptions  -- | Parse options from an options pragma.-parsePragmaOptions :: [String] -> CommandLineOptions -> Either String CommandLineOptions-parsePragmaOptions argv opts =-    parseOptions' progName argv opts pragmaOptions $-    \s _ -> fail $ "Bad option in pragma: " ++ s-    where-	progName = optProgramName opts+parsePragmaOptions+  :: [String]+     -- ^ Pragma options.+  -> CommandLineOptions+     -- ^ Command-line options which should be updated.+  -> Either String PragmaOptions+parsePragmaOptions argv opts = do+  ps <- parseOptions' argv pragmaOptions+          (\s _ -> fail $ "Bad option in pragma: " ++ s)+          (optPragmaOptions opts)+  checkOpts (opts { optPragmaOptions = ps })+  return ps  -- | Parse options for a plugin.-parsePluginOptions ::-    String -> [String] ->-    opts -> [OptDescr (Flag opts)] ->-    Either String opts-parsePluginOptions progName argv defaults opts =-    parseOptions'-	progName argv defaults opts-	(\s _ -> fail $ "Internal error: Flag " ++ s ++ " passed to a plugin")+parsePluginOptions :: [String] -> [OptDescr (Flag opts)] -> Flag opts+parsePluginOptions argv opts =+  parseOptions' argv opts+    (\s _ -> fail $ "Internal error: Flag " ++ s ++ " passed to a plugin")  -- | The usage info message. The argument is the program name (probably---   agdaLight).+--   agda). usage :: [OptDescr ()] -> [(String, String, [String], [OptDescr ()])] -> String -> String usage options pluginInfos progName = 	usageInfo (header progName) options ++ 	"\nPlugins:\n" ++-        indent (concatMap pluginMsg pluginInfos)+        indent 2 (concatMap pluginMsg pluginInfos)      where 	header progName = unlines [ "Agda"@@ -307,8 +364,6 @@ 				  , "Usage: " ++ progName ++ " [OPTIONS...] FILE" 				  ] -	indent = unlines . map ("  " ++) . lines-         pluginMsg (name, help, inherited, opts)             | null opts && null inherited = optHeader             | otherwise = usageInfo (optHeader ++@@ -316,7 +371,7 @@ 				     inheritedOptions inherited 				     ) opts             where-		optHeader = "\n" ++ name ++ "-plugin:\n" ++ indent help+		optHeader = "\n" ++ name ++ "-plugin:\n" ++ indent 2 help 		inheritedOptions [] = "" 		inheritedOptions pls = 		    "\n    Inherits options from: " ++ unwords pls
src/full/Agda/Main.hs view
@@ -47,8 +47,6 @@ import Agda.TypeChecking.Serialise import Agda.TypeChecking.SizedTypes -import Agda.Compiler.Agate.Main as Agate-import Agda.Compiler.Alonzo.Main as Alonzo import Agda.Compiler.MAlonzo.Compiler as MAlonzo  import Agda.Termination.TermCheck@@ -60,6 +58,8 @@ import Agda.Tests import Agda.Version +import qualified System.IO as IO+ #include "undefined.h" import Agda.Utils.Impossible @@ -68,7 +68,7 @@ runAgda = do   progName <- liftIO getProgName   argv   <- liftIO getArgs-  let opts = parseStandardOptions progName argv+  let opts = parseStandardOptions argv   case opts of     Left err -> liftIO $ optionError err     Right opts@@ -81,15 +81,13 @@           && not (optInteractive opts)                             -> liftIO printUsage       | otherwise           -> do-          setCommandLineOptions PersistentOptions opts+          setCommandLineOptions opts           checkFile   where     checkFile :: TCM ()     checkFile = do-      i       <- optInteractive    <$> liftTCM commandLineOptions-      compile <- optCompile        <$> liftTCM commandLineOptions-      alonzo  <- optCompileAlonzo  <$> liftTCM commandLineOptions-      malonzo <- optCompileMAlonzo <$> liftTCM commandLineOptions+      i       <- optInteractive <$> liftTCM commandLineOptions+      compile <- optCompile     <$> liftTCM commandLineOptions       when i $ liftIO $ LocIO.putStr splashScreen       let failIfNoInt (Just i) = return i           -- The allowed combinations of command-line@@ -98,18 +96,16 @@            interaction :: TCM (Maybe Interface) -> TCM ()           interaction | i         = runIM . interactionLoop-                      | compile   = Agate.compilerMain         . (() <$)-                      | alonzo    = Alonzo.compilerMain        . (() <$)-                      | malonzo   = (MAlonzo.compilerMain =<<) . (failIfNoInt =<<)+                      | compile   = (MAlonzo.compilerMain =<<) . (failIfNoInt =<<)                       | otherwise = (() <$)       interaction $ do         hasFile <- hasInputFile         resetState         if not hasFile then return Nothing else do           file    <- getInputFile-          (i, mw) <- Imp.typeCheck file Imp.CurrentDir Nothing+          (i, mw) <- Imp.typeCheck file -          unsolvedOK <- optAllowUnsolved <$> commandLineOptions+          unsolvedOK <- optAllowUnsolved <$> pragmaOptions            result <- case mw of             Just (Imp.Warnings [] [] []) -> __IMPOSSIBLE__@@ -132,11 +128,8 @@               mapM_ (\ (s,n) -> LocIO.putStrLn $ s ++ " : " ++ show n) $                 sortBy (\x y -> compare (snd x) (snd y)) stats -          whenM (optGenerateHTML <$> commandLineOptions) $ do-            case mw of-              Nothing -> generateHTML $ iModuleName i-              Just _  -> reportSLn "" 1-                "HTML is not generated (unsolved meta-variables)."+          whenM (optGenerateHTML <$> commandLineOptions) $+            generateHTML $ iModuleName i            return result @@ -161,6 +154,10 @@ -- | Main main :: IO () main = do+#if MIN_VERSION_base(4,2,0)+    -- Ensure that UTF-8 is used for functions in Agda.Utils.IO.Locale+    IO.hSetEncoding IO.stdout IO.utf8+#endif     r <- runTCM $ runAgda `catchError` \err -> do       s <- prettyError err       liftIO $ LocIO.putStrLn s
+ src/full/Agda/Packaging/Config.hs view
@@ -0,0 +1,23 @@+module Agda.Packaging.Config where+-- FIXME: proper exports++{-+-- External Library Imports+import qualified Distribution.InstalledPackageInfo+  as Cabal+    ( InstalledPackageInfo )++-- Local Library Imports+import Agda.Packaging.Types++--------------------------------------------------------------------------------++-- Parametric in `opt' only so that the environment can be decoupled+-- from the concrete CLI tool+data AgdaPkgConfig opt+  =  AgdaPkgConfig+  { configOpts       :: [opt]+  , configOrigBroken :: [Cabal.InstalledPackageInfo]+  , configPkgDBStack :: [NamedPackageDB]+  , configProgName   :: String }+-}
+ src/full/Agda/Packaging/Database.hs view
@@ -0,0 +1,234 @@+module Agda.Packaging.Database where+-- FIXME: proper exports+{-+-- Standard Library Imports+import           Control.Applicative+import qualified Control.Exception+import           Control.Monad.Cont+import           Control.Monad.Error+import           Data.List+  ( foldl'+  , intersperse+  , isSuffixOf+  , partition )+import           Data.Maybe+  ( fromJust )+import           System.Directory+  ( createDirectoryIfMissing+  , getAppUserDataDirectory+  , getDirectoryContents+  , removeFile )+import           System.FilePath+import           System.IO+  ( IOMode (ReadMode)+  , hGetContents+  , hSetEncoding+  , openFile+  , utf8 )+import           System.IO.Error+  ( isPermissionError+  , try )++-- External Library Imports+import qualified Distribution.InstalledPackageInfo+  as Cabal+    ( InstalledPackageInfo+    , exposed+    , exposedModules+    , depends+    , hiddenModules+    , installedPackageId+    , parseInstalledPackageInfo+    , showInstalledPackageInfo )+import qualified Distribution.Package+  as Cabal+    ( PackageIdentifier+    , packageId )+import qualified Distribution.ParseUtils+  as Cabal+    ( ParseResult (..)+    , locatedErrorMsg )+import qualified Distribution.Simple.Utils+  as Cabal+    ( die+    , writeUTF8File )+import qualified Distribution.Text+  as Cabal+    ( display+    , simpleParse )++-- Local Imports+import Agda.Packaging.Config+import Agda.Packaging.Monad+import Agda.Packaging.Types+import Paths_Agda+  ( getDataDir )++-------------------------------------------------------------------------------++--------------------------+-- Getting the DB paths --+--------------------------++getPkgDBPathGlobal :: IO FilePath+getPkgDBPathGlobal = do+  result <- try action+  case result of+    Left  ioErr    -> Cabal.die $ show ioErr+    Right filePath -> return filePath+  where+    action =  pure (</>)+          <*> getDataDir+          <*> pure "package.conf.d"++getPkgDBPathUser :: IO FilePath+getPkgDBPathUser = do+  result <- try action+  case result of+    Left  ioErr    -> Cabal.die $ show ioErr+    Right filePath -> return filePath+  where+    action =  pure (</>)+          <*> getAppUserDataDirectory "Agda"+          <*> pure "package.conf.d"++++---------------------------------+-- Loading the DBs into memory --+---------------------------------++getPkgDBs :: [FilePath] -> IO PackageDBStack+getPkgDBs givenPkgDBNames = do+  pkgDBNames <-+    -- If no package databases are specified, default to getting the+    -- global and user packages.+    if null givenPkgDBNames+    then+          pure (\ db1 db2 -> db1 : db2 : [])+      <*> getPkgDBPathGlobal+      <*> getPkgDBPathUser+    else+      return givenPkgDBNames+  mapM readParsePkgDB pkgDBNames++readParsePkgDB :: PackageDBName -> IO NamedPackageDB+readParsePkgDB dbName = do+  result <- try $ getDirectoryContents dbName+  case result of+    Left  ioErr     -> Cabal.die $ show ioErr+    Right filePaths -> do+      pkgInfos <- mapM parseSingletonPkgConf $ map (dbName </>) dbEntries+      return $ NamedPackageDB+        { dbName = dbName+        , db     = pkgInfos }+      where+        dbEntries = filter (".conf" `isSuffixOf`) filePaths++parseSingletonPkgConf :: FilePath -> IO Cabal.InstalledPackageInfo+parseSingletonPkgConf = (parsePkgInfo =<<) . readUTF8File+  where+    readUTF8File :: FilePath -> IO String+    readUTF8File file = do+      handle <- openFile file ReadMode+      hSetEncoding handle utf8+      hGetContents handle++parsePkgInfo :: String -> IO Cabal.InstalledPackageInfo+parsePkgInfo pkgInfoStr =+  case Cabal.parseInstalledPackageInfo pkgInfoStr of+    Cabal.ParseOk     warnings pkgInfo ->+      return pkgInfo+    Cabal.ParseFailed err              ->+      case Cabal.locatedErrorMsg err of+        (Nothing     , msg) -> Cabal.die msg+        (Just  lineNo, msg) -> Cabal.die (show lineNo ++ ": " ++ msg)+++-------------------+-- DB operations --+-------------------++data DBOp+  = PkgAdd    Cabal.InstalledPackageInfo+  | PkgModify Cabal.InstalledPackageInfo+  | PkgRemove Cabal.InstalledPackageInfo+++----------------------------------+-- Processing the DBs in memory --+----------------------------------++brokenPkgs :: PackageDB -> PackageDB+brokenPkgs = snd . transClos []+  where+    -- Calculate the transitive closure of 'ok' packages, i.e.,+    -- packages with all of their dependencies available.+    transClos :: PackageDB -> PackageDB -> (PackageDB, PackageDB)+    transClos okPkgs pkgs =+      case partition (ok okPkgs) pkgs of+        ([]     , pkgs') -> (okPkgs, pkgs')+        (okPkgs', pkgs') -> transClos (okPkgs' ++ okPkgs) pkgs'+      where+        -- A package is 'ok' with respect to a package database if the+        -- packages dependencies are available in the database.+        ok :: PackageDB -> Cabal.InstalledPackageInfo -> Bool+        ok okPkgs pkg = null dangling+          where+            dangling = filter (`notElem` pkgIds) (Cabal.depends pkg)+            pkgIds   = map Cabal.installedPackageId okPkgs++flattenPkgDBs :: PackageDBStack -> PackageDB+flattenPkgDBs = concatMap db++modifyDBWithOps :: PackageDB -> [DBOp] -> PackageDB+modifyDBWithOps pkgDB dbOps = foldl' applyOp pkgDB dbOps+  where+    applyOp :: PackageDB -> DBOp -> PackageDB+    applyOp pkgInfos (PkgAdd    pkgInfo) = pkgInfo : pkgInfos+    applyOp pkgInfos (PkgModify pkgInfo) = applyOp pkgDB' $ PkgAdd pkgInfo+      where+        pkgDB' = applyOp pkgInfos $ PkgRemove pkgInfo+    applyOp pkgInfos (PkgRemove pkgInfo) = filter fpred pkgInfos+      where+        fpred  = (Cabal.installedPackageId pkgInfo /=)+               .  Cabal.installedPackageId+++-------------------------------+-- Modifying the DBs on disk --+-------------------------------++modifyAndWriteDBWithOps :: NamedPackageDB -> [DBOp] -> IO ()+modifyAndWriteDBWithOps npkgDB dbOps = do+  createDirectoryIfMissing True $ dbName npkgDB+  writeDBWithOps npkgDB{ db = db' } dbOps+  where+    db' = db npkgDB `modifyDBWithOps` dbOps++writeDBWithOps :: NamedPackageDB -> [DBOp] -> IO ()+writeDBWithOps npkgDB = mapM_ doOp+  where+    fileNameOf      pkgInfo  =  dbName npkgDB+                            </> Cabal.display (Cabal.installedPackageId pkgInfo)+                            <.> "conf"++    doOp (PkgAdd    pkgInfo) = Cabal.writeUTF8File (fileNameOf pkgInfo)+                             $ Cabal.showInstalledPackageInfo  pkgInfo+    doOp (PkgModify pkgInfo) = doOp                   $ PkgAdd pkgInfo+    doOp (PkgRemove pkgInfo) = removeFile          (fileNameOf pkgInfo)++modifyPkgInfoAndWriteDBWithFun :: Cabal.PackageIdentifier+                               -> (Cabal.InstalledPackageInfo -> DBOp)+                               -> AgdaPkg opt ()+modifyPkgInfoAndWriteDBWithFun pkgId funToOp = asksM (rec . configPkgDBStack)+  where+    rec :: PackageDBStack -> AgdaPkg opt ()+    rec = liftIO . mapM_ (\ npkgDB -> modifyAndWriteDBWithOps npkgDB (generateOps $ db npkgDB))+      where+        generateOps :: PackageDB -> [DBOp]+        generateOps []                       = []+        generateOps (pkgInfo:pkgInfos)+          | Cabal.packageId pkgInfo == pkgId = funToOp pkgInfo : generateOps pkgInfos+          | otherwise                        =                   generateOps pkgInfos+-}
+ src/full/Agda/Packaging/Monad.hs view
@@ -0,0 +1,38 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}++module Agda.Packaging.Monad where++{-+  ( module Control.Monad.Reader+  , AgdaPkg (..)+  , asksM ) where++-- Standard Library Imports+import Control.Applicative+import Control.Monad.Error+import Control.Monad.Reader++-- Local Imports+import Agda.Packaging.Config++--------------------------------------------------------------------------------++-- Parametric in `opt' only so that the environment can be decoupled+-- from the concrete CLI tool+newtype AgdaPkg opt a+  =     AgdaPkg+  { runAgdaPkg :: ReaderT (AgdaPkgConfig opt) IO a }+  deriving+    ( Functor+    , Monad+    , MonadError IOError+    , MonadReader (AgdaPkgConfig opt)+    , MonadIO )++instance Applicative (AgdaPkg opt) where+  pure  = return+  (<*>) = ap ++asksM :: (MonadReader r m) => (r -> m a) -> m a+asksM = join . asks+-}
+ src/full/Agda/Packaging/Types.hs view
@@ -0,0 +1,20 @@+module Agda.Packaging.Types where++{-+-- External Library Imports+import qualified Distribution.InstalledPackageInfo+  as Cabal+    ( InstalledPackageInfo )++-------------------------------------------------------------------------------++type PackageDBName = FilePath+type PackageDB     = [Cabal.InstalledPackageInfo]++data NamedPackageDB+  =  NamedPackageDB+  { dbName :: PackageDBName+  , db     :: PackageDB }++type PackageDBStack = [NamedPackageDB]+-}
src/full/Agda/Syntax/Abstract.hs view
@@ -18,6 +18,7 @@ import Data.Generics (Typeable, Data)  import qualified Agda.Syntax.Concrete as C+import Agda.Syntax.Concrete.Pretty () import Agda.Syntax.Info import Agda.Syntax.Common import Agda.Syntax.Position@@ -49,13 +50,16 @@         | ETel Telescope                     -- ^ only used when printing telescopes 	| Rec  ExprInfo [(C.Name, Expr)]     -- ^ record construction 	| ScopedExpr ScopeInfo Expr	     -- ^ scope annotation+        | QuoteGoal ExprInfo Name Expr       -- ^+        | Quote ExprInfo                     -- ^+        | DontCare                           -- ^ for printing DontCare from Syntax.Internal   deriving (Typeable, Data, Show)  data Declaration-	= Axiom      DefInfo        QName Expr			-- ^ postulate-	| Field      DefInfo Hiding QName Expr			-- ^ record field-	| Primitive  DefInfo        QName Expr			-- ^ primitive function-	| Definition DeclInfo [TypeSignature] [Definition]	-- ^ a bunch of mutually recursive definitions+	= Axiom      DefInfo QName Expr			   -- ^ postulate+	| Field      DefInfo QName (Arg Expr)		   -- ^ record field+	| Primitive  DefInfo QName Expr			   -- ^ primitive function+	| Definition DeclInfo [TypeSignature] [Definition] -- ^ a bunch of mutually recursive definitions 	| Section    ModuleInfo ModuleName [TypedBindings] [Declaration] 	| Apply	     ModuleInfo ModuleName [TypedBindings] ModuleName [NamedArg Expr] (Map QName QName) (Map ModuleName ModuleName) 	| Import     ModuleInfo ModuleName@@ -70,17 +74,18 @@             | CompiledPragma QName String             | CompiledTypePragma QName String             | CompiledDataPragma QName String [String]+            | EtaPragma QName   deriving (Typeable, Data, Show)  data LetBinding = LetBind LetInfo Name Expr Expr    -- ^ LetBind info name type defn                 | LetApply ModuleInfo ModuleName [TypedBindings] ModuleName [NamedArg Expr] (Map QName QName) (Map ModuleName ModuleName)-                | LetOpen ModuleInfo ModuleName  -- ^ only for highlighting+                | LetOpen ModuleInfo ModuleName     -- ^ only for highlighting and abstractToConcrete   deriving (Typeable, Data, Show)  -- | A definition without its type signature. data Definition 	= FunDef     DefInfo QName [Clause]-	| DataDef    DefInfo QName Induction [LamBinding] [Constructor]+	| DataDef    DefInfo QName [LamBinding] [Constructor] 	    -- ^ the 'LamBinding's are 'DomainFree' and binds the parameters of the datatype. 	| RecDef     DefInfo QName (Maybe Constructor) [LamBinding] Expr [Declaration] 	    -- ^ The 'Expr' gives the constructor type telescope, @(x1 : A1)..(xn : An) -> Prop@,@@ -99,7 +104,7 @@   deriving (Typeable, Data, Show)  -- | Typed bindings with hiding information.-data TypedBindings = TypedBindings Range Hiding [TypedBinding]+data TypedBindings = TypedBindings Range (Arg [TypedBinding]) 	    -- ^ . @(xs:e;..;ys:e')@ or @{xs:e;..;ys:e'}@   deriving (Typeable, Data, Show) @@ -194,7 +199,7 @@     getRange (DomainFull b)   = getRange b  instance HasRange TypedBindings where-    getRange (TypedBindings r _ _) = r+    getRange (TypedBindings r _) = r  instance HasRange TypedBinding where     getRange (TBind r _ _) = r@@ -219,10 +224,13 @@     getRange (Rec i _)		= getRange i     getRange (ETel tel)         = getRange tel     getRange (ScopedExpr _ e)	= getRange e+    getRange (QuoteGoal _ _ e)	= getRange e+    getRange (Quote i)  	= getRange i+    getRange (DontCare)         = noRange  instance HasRange Declaration where     getRange (Axiom      i _ _	       ) = getRange i-    getRange (Field      i _ _ _       ) = getRange i+    getRange (Field      i _ _         ) = getRange i     getRange (Definition i _ _	       ) = getRange i     getRange (Section    i _ _ _       ) = getRange i     getRange (Apply	 i _ _ _ _ _ _ ) = getRange i@@ -234,7 +242,7 @@  instance HasRange Definition where     getRange (FunDef  i _ _    )   = getRange i-    getRange (DataDef i _ _ _ _  ) = getRange i+    getRange (DataDef i _ _ _  )   = getRange i     getRange (RecDef  i _ _ _ _ _) = getRange i     getRange (ScopedDef _ d)       = getRange d @@ -271,7 +279,7 @@   killRange (DomainFull b)   = killRange1 DomainFull b  instance KillRange TypedBindings where-  killRange (TypedBindings r h b) = TypedBindings (killRange r) h (killRange b)+  killRange (TypedBindings r b) = TypedBindings (killRange r) (killRange b)  instance KillRange TypedBinding where   killRange (TBind r xs e) = killRange3 TBind r xs e@@ -296,10 +304,13 @@   killRange (Rec i fs)       = Rec (killRange i) (map (id -*- killRange) fs)   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 (Quote i)        = killRange1 Quote i+  killRange (DontCare)       = DontCare  instance KillRange Declaration where   killRange (Axiom      i a b         ) = killRange3 Axiom      i a b-  killRange (Field      i h a b       ) = killRange4 Field      i h a b+  killRange (Field      i a b         ) = killRange3 Field      i a b   killRange (Definition i a b         ) = killRange3 Definition i a b   killRange (Section    i a b c       ) = killRange4 Section    i a b c   killRange (Apply      i a b c d e f ) = killRange5 Apply      i a b c d e f@@ -311,7 +322,7 @@  instance KillRange Definition where   killRange (FunDef  i a b    )   = killRange3 FunDef  i a b-  killRange (DataDef i a b c d)   = killRange5 DataDef i a b c d+  killRange (DataDef i a b c)     = killRange4 DataDef i a b c   killRange (RecDef  i a b c d e) = killRange6 RecDef  i a b c d e   killRange (ScopedDef s a)       = killRange1 (ScopedDef s) a @@ -353,13 +364,13 @@  allNames :: Declaration -> Seq QName allNames (Axiom     _   q _)   = Seq.singleton q-allNames (Field     _ _ q _)   = Seq.singleton q+allNames (Field     _   q _)   = Seq.singleton q allNames (Primitive _   q _)   = Seq.singleton q allNames (Definition _ _ defs) = Fold.foldMap allNamesD defs   where   allNamesD :: Definition -> Seq QName   allNamesD (FunDef _ q cls)         = q <| Fold.foldMap allNamesC cls-  allNamesD (DataDef _ q _ _ decls)  = q <| Fold.foldMap allNames decls+  allNamesD (DataDef _ q _ decls)    = q <| Fold.foldMap allNames decls   allNamesD (ScopedDef _ def)        = allNamesD def   allNamesD (RecDef _ q c _ _ decls) =     q <| Fold.foldMap allNames c >< Fold.foldMap allNames decls
src/full/Agda/Syntax/Abstract/Name.hs view
@@ -18,6 +18,8 @@ import Agda.Utils.Size import Agda.Utils.Suffix +import Agda.Syntax.Notation+ #include "../../undefined.h" import Agda.Utils.Impossible @@ -27,7 +29,7 @@ data Name = Name { nameId	   :: NameId 		 , nameConcrete	   :: C.Name 		 , nameBindingSite :: Range-		 , nameFixity	   :: Fixity+		 , nameFixity	   :: Fixity' 		 }     deriving (Typeable, Data) @@ -101,7 +103,7 @@ -- site.  mkName :: Range -> NameId -> String -> Name-mkName r i s = Name i (C.Name noRange (parseName s)) r defaultFixity+mkName r i s = Name i (C.Name noRange (parseName s)) r defaultFixity'   where     parseName ""      = []     parseName ('_':s) = C.Hole : parseName s@@ -118,6 +120,16 @@ qnameFromList [] = __IMPOSSIBLE__ qnameFromList xs = QName (mnameFromList $ init xs) (last xs) +qnameToMName :: QName -> ModuleName+qnameToMName = mnameFromList . qnameToList++showQNameId :: QName -> String+showQNameId q = show ns ++ "@" ++ show m+  where+    is = map nameId $ mnameToList (qnameModule q) ++ [qnameName q]+    ns = [ n | NameId n _ <- is ]+    m  = head [ m | NameId _ m <- is ]+ -- | Turn a qualified name into a concrete name. This should only be used as a --   fallback when looking up the right concrete name in the scope fails. qnameToConcrete :: QName -> C.QName@@ -173,7 +185,7 @@ freshNoName :: (MonadState s m, HasFresh NameId s) => 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 defaultFixity'  freshNoName_ :: (MonadState s m, HasFresh NameId s) => m Name freshNoName_ = freshNoName noRange
src/full/Agda/Syntax/Abstract/Pretty.hs view
@@ -5,6 +5,7 @@  import Agda.Syntax.Abstract import Agda.Syntax.Concrete.Pretty ()+import Agda.Syntax.Fixity import Agda.Syntax.Translation.AbstractToConcrete import Agda.TypeChecking.Monad import Agda.Utils.Pretty@@ -15,3 +16,12 @@ prettyA :: (Pretty c, ToConcrete a c, MonadTCM tcm) => a -> tcm Doc prettyA x = pretty <$> abstractToConcrete_ x +-- | Variant of 'showA' which does not insert outermost parentheses.++showATop :: (Show c, ToConcrete a c, MonadTCM tcm) => a -> tcm String+showATop x = show <$> abstractToConcreteCtx TopCtx x++-- | Variant of 'prettyA' which does not insert outermost parentheses.++prettyATop :: (Pretty c, ToConcrete a c, MonadTCM tcm) => a -> tcm Doc+prettyATop x = pretty <$> abstractToConcreteCtx TopCtx x
src/full/Agda/Syntax/Common.hs view
@@ -23,21 +23,66 @@ data Hiding  = Hidden | NotHidden     deriving (Typeable, Data, Show, Eq, Ord) +-- | A function argument can be relevant or irrelevant.+data Relevance+  = Relevant    -- ^ the argument is (possibly) relevant at compile-time+  | Irrelevant  -- ^ the argument is irrelevant at compile- and runtime+  | Forced      -- ^ the argument can be skipped during equality checking+    deriving (Typeable, Data, Show, Eq, Ord)++-- | For comparing @Relevance@ ignoring @Forced@.+ignoreForced :: Relevance -> Relevance+ignoreForced Forced     = Relevant+ignoreForced Relevant   = Relevant+ignoreForced Irrelevant = Irrelevant+ instance KillRange Induction where killRange = id instance KillRange Hiding    where killRange = id --- | A function argument can be hidden.-data Arg e  = Arg { argHiding :: Hiding, unArg :: e }-    deriving (Typeable, Data, Eq, Ord)+-- | A function argument can be hidden and/or irrelevant.+data Arg e  = Arg+  { argHiding    :: Hiding+  , argRelevance :: Relevance+  , unArg :: e+  } deriving (Typeable, Data, Ord) +instance Eq a => Eq (Arg a) where+  Arg h1 _ x1 == Arg h2 _ x2 = (h1, x1) == (h2, x2)++hide :: Arg a -> Arg a+hide a = a { argHiding = Hidden }++defaultArg :: a -> Arg a+defaultArg = Arg NotHidden Relevant++isHiddenArg :: Arg a -> Bool+isHiddenArg arg = argHiding arg == Hidden++makeIrrelevant :: Arg a -> Arg a+makeIrrelevant a = a { argRelevance = Irrelevant }++makeRelevant :: Arg a -> Arg a+makeRelevant a = if argRelevance a == Irrelevant+                  then a { argRelevance = Relevant }+                  else a++-- | @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 b] -> [Arg a]+xs `withArgsFrom` args =+  zipWith (\x arg -> fmap (const x) arg) xs args+ instance Functor Arg where-    fmap f (Arg h x) = Arg h $ f x+    fmap f a = a { unArg = f (unArg a) }  instance Foldable Arg where-    foldr f z (Arg _ x) = f x z+    foldr f z a = f (unArg a) z  instance Traversable Arg where-    traverse f (Arg h x) = Arg h <$> f x+    traverse f (Arg h r x) = Arg h r <$> f x  instance HasRange a => HasRange (Arg a) where     getRange = getRange . unArg@@ -49,8 +94,13 @@   size = size . unArg  instance Show a => Show (Arg a) where-    show (Arg Hidden x)    = "{" ++ show x ++ "}"-    show (Arg NotHidden x) = "(" ++ show x ++ ")"+    show (Arg h r x) = showR r $ showH h $ show x+      where+        showH Hidden     s = "{" ++ s ++ "}"+        showH NotHidden  s = "(" ++ s ++ ")"+        showR Irrelevant s = "." ++ s+        showR Forced     s = "!" ++ s+        showR Relevant   s = "r" ++ s -- Andreas: I want to see it explicitly  data Named name a =     Named { nameOf     :: Maybe name
src/full/Agda/Syntax/Concrete.hs view
@@ -33,11 +33,12 @@     )     where -import Data.Generics hiding (Fixity, Infix)+import Data.Generics (Typeable, Data)  import Agda.Syntax.Position import Agda.Syntax.Common import Agda.Syntax.Fixity+import Agda.Syntax.Notation import Agda.Syntax.Literal  import Agda.Syntax.Concrete.Name@@ -58,7 +59,7 @@ 	| HiddenArg !Range (Named String Expr) -- ^ ex: @{e}@ or @{x=e}@ 	| Lam !Range [LamBinding] Expr	       -- ^ ex: @\\x {y} -> e@ or @\\(x:A){y:B} -> e@         | AbsurdLam !Range Hiding              -- ^ ex: @\\ ()@-	| Fun !Range Expr Expr		       -- ^ ex: @e -> e@ or @{e} -> e@+	| 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@@@ -70,7 +71,9 @@ 	| 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-    deriving (Typeable, Data, Eq)+        | QuoteGoal !Range Name Expr           -- ^ ex: @quoteGoal x in e@+        | Quote !Range                         -- ^ ex: @quote@, should be applied to a name+    deriving (Typeable, Data)   -- | Concrete patterns. No literals in patterns at the moment.@@ -86,46 +89,42 @@ 	| AsP !Range Name Pattern 	| DotP !Range Expr 	| LitP Literal-    deriving (Typeable, Data, Eq)+    deriving (Typeable, Data)   -- | A lambda binding is either domain free or typed. data LamBinding 	= DomainFree Hiding BoundName -- ^ . @x@ or @{x}@ 	| DomainFull TypedBindings    -- ^ . @(xs:e,..,ys:e')@ or @{xs:e,..,ys:e'}@-    deriving (Typeable, Data, Eq)+    deriving (Typeable, Data)   -- | A sequence of typed bindings with hiding information. Appears in dependent --   function spaces, typed lambdas, and telescopes.-data TypedBindings = TypedBindings !Range Hiding [TypedBinding]+data TypedBindings = TypedBindings !Range (Arg [TypedBinding]) 	-- ^ . @(xs:e;..;ys:e')@ or @{xs:e;..;ys:e'}@-    deriving (Typeable, Data, Eq)+    deriving (Typeable, Data)   data BoundName = BName { boundName   :: Name-                       , bnameFixity :: Fixity+                       , bnameFixity :: Fixity'                        }-    deriving (Typeable, Data, Eq)+    deriving (Typeable, Data)  mkBoundName_ :: Name -> BoundName-mkBoundName_ x = BName x defaultFixity+mkBoundName_ x = BName x defaultFixity'  -- | A typed binding. data TypedBinding 	= TBind !Range [BoundName] Expr   -- Binding @x1,..,xn:A@ 	| TNoBind Expr		    -- No binding @A@, equivalent to @_ : A@.-    deriving (Typeable, Data, Eq)+    deriving (Typeable, Data)   -- | A telescope is a sequence of typed bindings. Bound variables are in scope---   in later types. Or it's the mysterious Thierry-function-telescope. Only it's not.+--   in later types.  type Telescope = [TypedBindings]--- data Telescope = TeleBind [TypedBindings]--- 	       | TeleFun Telescope Telescope---     deriving (Typeable, Data, Eq) - {-| Left hand sides can be written in infix style. For example:      > n + suc m = suc (n + m)@@ -137,17 +136,17 @@          -- ^ original pattern, with-patterns, rewrite equations and with-expressions          | Ellipsis Range [Pattern] [RewriteEqn] [WithExpr]          -- ^ new with-patterns, rewrite equations and with-expressions-  deriving (Typeable, Data, Eq)+  deriving (Typeable, Data)  type RewriteEqn = Expr type WithExpr   = Expr  data RHS = AbsurdRHS 	 | RHS Expr-    deriving (Typeable, Data, Eq)+    deriving (Typeable, Data)  data WhereClause = NoWhere | AnyWhere [Declaration] | SomeWhere Name [Declaration]-  deriving (Typeable, Data, Eq)+  deriving (Typeable, Data)   -- | The things you are allowed to say when you shuffle names between name@@ -159,7 +158,7 @@ 	    , renaming		:: [Renaming] 	    , publicOpen	:: Bool	-- ^ Only for @open@. Exports the opened names from the current module. 	    }-    deriving (Typeable, Data, Eq)+    deriving (Typeable, Data)  defaultImportDir :: ImportDirective defaultImportDir = ImportDirective noRange (Hiding []) [] False@@ -167,7 +166,7 @@ data UsingOrHiding 	= Hiding [ImportedName] 	| Using  [ImportedName]-    deriving (Typeable, Data, Eq)+    deriving (Typeable, Data)  -- | An imported name can be a module or a defined name data ImportedName = ImportedModule  { importedName :: Name }@@ -186,7 +185,7 @@                            -- ^ The range of the \"to\" keyword. Retained                            --   for highlighting purposes.                          }-    deriving (Eq, Typeable, Data)+    deriving (Typeable, Data)  data AsName = AsName { asName  :: Name                        -- ^ The \"as\" name.@@ -194,7 +193,7 @@                        -- ^ The range of the \"as\" keyword. Retained                        --   for highlighting purposes.                      }-    deriving (Eq, Typeable, Data)+    deriving (Typeable, Data)  {--------------------------------------------------------------------------     Declarations@@ -212,12 +211,13 @@ -} data Declaration 	= TypeSig Name Expr-        | Field Hiding Name Expr+        | Field Name (Arg Expr) 	| FunClause LHS RHS WhereClause 	| Data        !Range Induction Name [TypedBindings] Expr [Constructor] 	| Record      !Range Name (Maybe Name) [TypedBindings] Expr [Declaration]           -- ^ The optional name is a name for the record constructor. 	| Infix Fixity [Name]+        | Syntax      Name Notation -- ^ notation declaration for a name 	| Mutual      !Range [Declaration] 	| Abstract    !Range [Declaration] 	| Private     !Range [Declaration]@@ -228,10 +228,10 @@ 	| ModuleMacro !Range  Name [TypedBindings] Expr OpenShortHand ImportDirective 	| Module      !Range QName [TypedBindings] [Declaration] 	| Pragma      Pragma-    deriving (Eq, Typeable, Data)+    deriving (Typeable, Data)  data OpenShortHand = DoOpen | DontOpen-    deriving (Eq, Typeable, Data, Show)+    deriving (Typeable, Data, Show)  -- Pragmas ---------------------------------------------------------------- @@ -244,7 +244,8 @@               -- ^ Invariant: The string must be a valid Haskell               -- module name.             | ImpossiblePragma !Range-    deriving (Eq, Typeable, Data)+            | EtaPragma !Range QName+    deriving (Typeable, Data)  --------------------------------------------------------------------------- @@ -275,8 +276,8 @@ 	vApp (AppView e es) arg = AppView e (es ++ [arg]) appView (RawApp _ (e:es)) = AppView e $ map arg es     where-	arg (HiddenArg _ e) = Arg Hidden e-	arg e		    = Arg NotHidden (unnamed e)+	arg (HiddenArg _ e) = Arg Hidden    Relevant e+	arg e		    = Arg NotHidden Relevant (unnamed e) appView e = AppView e []  {--------------------------------------------------------------------------@@ -309,13 +310,15 @@ 	    HiddenArg r _	-> r 	    Rec r _		-> r             ETel tel            -> getRange tel+            QuoteGoal r _ _     -> r+            Quote r             -> r  -- instance HasRange Telescope where --     getRange (TeleBind bs) = getRange bs --     getRange (TeleFun x y) = fuseRange x y  instance HasRange TypedBindings where-    getRange (TypedBindings r _ _) = r+    getRange (TypedBindings r _) = r  instance HasRange TypedBinding where     getRange (TBind r _ _) = r@@ -335,7 +338,7 @@  instance HasRange Declaration where     getRange (TypeSig x t)		= fuseRange x t-    getRange (Field _ x t)              = fuseRange x t+    getRange (Field x t)              = fuseRange x t     getRange (FunClause lhs rhs wh)	= fuseRange lhs rhs `fuseRange` wh     getRange (Data r _ _ _ _ _)		= r     getRange (Record r _ _ _ _ _)	= r@@ -349,6 +352,7 @@     getRange (Primitive r _)		= r     getRange (Module r _ _ _)		= r     getRange (Infix f _)		= getRange f+    getRange (Syntax n _)          = getRange n     getRange (Pragma p)			= getRange p  instance HasRange LHS where@@ -367,6 +371,7 @@     getRange (CompiledPragma r _ _)       = r     getRange (ImportPragma r _)           = r     getRange (ImpossiblePragma r)         = r+    getRange (EtaPragma r _)              = r  instance HasRange UsingOrHiding where     getRange (Using xs)	    = getRange xs
src/full/Agda/Syntax/Concrete/Definitions.hs view
@@ -13,7 +13,7 @@  import Control.Applicative -import Data.Generics (Data, Typeable)+import Data.Generics (Typeable, Data) import qualified Data.Map as Map import Control.Monad.Error import Data.List@@ -24,6 +24,7 @@ import Agda.Syntax.Common import Agda.Syntax.Position import Agda.Syntax.Fixity+import Agda.Syntax.Notation import Agda.Syntax.Concrete.Pretty import Agda.Utils.Pretty @@ -40,9 +41,9 @@     modifiers have been distributed to the individual declarations. -} data NiceDeclaration-	= Axiom Range Fixity Access IsAbstract Name Expr-        | NiceField Range Fixity Access IsAbstract Hiding Name Expr-	| PrimitiveFunction Range Fixity Access IsAbstract Name Expr+	= Axiom Range Fixity' Access IsAbstract Name Expr+        | NiceField Range Fixity' Access IsAbstract Name (Arg Expr)+	| PrimitiveFunction Range Fixity' Access IsAbstract Name Expr 	| NiceDef Range [Declaration] [NiceTypeSignature] [NiceDefinition] 	    -- ^ A bunch of mutually recursive functions\/datatypes. 	    --   The last two lists have the same length. The first list is the@@ -56,9 +57,9 @@  -- | A definition without its type signature. data NiceDefinition-	= FunDef  Range [Declaration] Fixity Access IsAbstract Name [Clause]-	| DataDef Range Induction Fixity Access IsAbstract Name [LamBinding] [NiceConstructor]-	| RecDef Range Fixity Access IsAbstract Name (Maybe NiceConstructor) [LamBinding] [NiceDeclaration]+	= FunDef  Range [Declaration] Fixity' Access IsAbstract Name [Clause]+	| DataDef Range Fixity' Access IsAbstract Name [LamBinding] [NiceConstructor]+	| RecDef Range Fixity' Access IsAbstract Name (Maybe NiceConstructor) [LamBinding] [NiceDeclaration]           -- ^ The 'NiceConstructor' has a dummy type field (the           --   record constructor type has not been computed yet).     deriving (Typeable, Data)@@ -76,12 +77,13 @@  -- | The exception type. data DeclarationException-	= MultipleFixityDecls [(Name, [Fixity])]+	= MultipleFixityDecls [(Name, [Fixity'])] 	| MissingDefinition Name         | MissingWithClauses Name 	| MissingTypeSignature LHS 	| NotAllowedInMutual NiceDeclaration 	| UnknownNamesInFixityDecl [Name]+        | Codata Range 	| DeclarationPanic String     deriving (Typeable) @@ -92,11 +94,12 @@     getRange (MissingTypeSignature x)	   = getRange x     getRange (NotAllowedInMutual x)	   = getRange x     getRange (UnknownNamesInFixityDecl xs) = getRange . head $ xs+    getRange (Codata r)                    = r     getRange (DeclarationPanic _)	   = noRange  instance HasRange NiceDeclaration where     getRange (Axiom r _ _ _ _ _)	       = r-    getRange (NiceField r _ _ _ _ _ _)	       = r+    getRange (NiceField r _ _ _ _ _)	       = r     getRange (NiceDef r _ _ _)		       = r     getRange (NiceModule r _ _ _ _ _)	       = r     getRange (NiceModuleMacro r _ _ _ _ _ _ _) = r@@ -106,9 +109,9 @@     getRange (PrimitiveFunction r _ _ _ _ _)   = r  instance HasRange NiceDefinition where-  getRange (FunDef r _ _ _ _ _ _)    = r-  getRange (DataDef r _ _ _ _ _ _ _) = r-  getRange (RecDef r _ _ _ _ _ _ _)  = r+  getRange (FunDef r _ _ _ _ _ _)   = r+  getRange (DataDef r _ _ _ _ _ _)  = r+  getRange (RecDef r _ _ _ _ _ _ _) = r  instance Error DeclarationException where   noMsg  = strMsg ""@@ -132,15 +135,18 @@   show (NotAllowedInMutual nd) = show $ fsep $     [text $ decl nd] ++ pwords "are not allowed in mutual blocks"     where-      decl (Axiom _ _ _ _ _ _)		     = "Postulates"-      decl (NiceField _ _ _ _ _ _ _)         = "Fields"-      decl (NiceDef _ _ _ _)		     = "Record types"-      decl (NiceModule _ _ _ _ _ _)	     = "Modules"-      decl (NiceModuleMacro _ _ _ _ _ _ _ _) = "Modules"-      decl (NiceOpen _ _ _)		     = "Open declarations"-      decl (NiceImport _ _ _ _ _)	     = "Import statements"-      decl (NicePragma _ _)		     = "Pragmas"-      decl (PrimitiveFunction _ _ _ _ _ _)   = "Primitive declarations"+      decl (Axiom{})		 = "Postulates"+      decl (NiceField{})         = "Fields"+      decl (NiceDef{})		 = "Record types"+      decl (NiceModule{})	 = "Modules"+      decl (NiceModuleMacro{})   = "Modules"+      decl (NiceOpen{})		 = "Open declarations"+      decl (NiceImport{})	 = "Import statements"+      decl (NicePragma{})	 = "Pragmas"+      decl (PrimitiveFunction{}) = "Primitive declarations"+  show (Codata _) =+    "The codata construction has been removed. " +++    "Use the INFINITY builtin instead."   show (DeclarationPanic s) = s  {--------------------------------------------------------------------------@@ -161,8 +167,8 @@     where  	-- If no fixity is given we return the default fixity.-	fixity :: Name -> Map.Map Name Fixity -> Fixity-	fixity = Map.findWithDefault defaultFixity+	fixity :: Name -> Map.Map Name Fixity' -> Fixity'+	fixity = Map.findWithDefault defaultFixity'  	-- We forget all fixities in recursive calls. This is because 	-- fixity declarations have to appear at the same level as the@@ -173,13 +179,14 @@ 	declaredNames :: Declaration -> [Name] 	declaredNames d = case d of 	  TypeSig x _				       -> [x]-          Field _ x _                                  -> [x]+          Field x _                                    -> [x] 	  FunClause (LHS p [] _ _) _ _             | IdentP (QName x) <- noSingletonRawAppP p -> [x] 	  FunClause{}				       -> [] 	  Data _ _ x _ _ cs			       -> x : concatMap declaredNames cs 	  Record _ x c _ _ _			       -> x : maybeToList c 	  Infix _ _				       -> []+          Syntax _ _                                   -> [] 	  Mutual _ ds				       -> concatMap declaredNames ds 	  Abstract _ ds				       -> concatMap declaredNames ds 	  Private _ ds				       -> concatMap declaredNames ds@@ -219,11 +226,11 @@ 		_   -> liftM2 (++) nds (nice fixs ds) 		    where 			nds = case d of-                            Field h x t             -> return $ niceAxioms fixs [ Field h x t ]-			    Data   r ind x tel t cs -> dataOrRec (flip DataDef ind) niceAx r x tel t cs-			    Record r x c tel t cs   -> do-                              let dummyType = Prop noRange-                                  c'        = (\c -> niceAxiom fixs (TypeSig c dummyType)) <$> c+                            Field x t                     -> return $ niceAxioms fixs [ d ]+			    Data r CoInductive x tel t cs -> throwError (Codata r)+			    Data r Inductive   x tel t cs -> dataOrRec DataDef niceAx r x tel t cs+			    Record r x c tel t cs         -> do+                              let c' = (\c -> niceAxiom fixs (TypeSig c t)) <$> c                               dataOrRec (\x1 x2 x3 x4 x5 -> RecDef x1 x2 x3 x4 x5 c')                                         (const niceDeclarations) r x tel t cs 			    Mutual r ds -> do@@ -247,6 +254,7 @@ 				[ NiceModuleMacro r PublicAccess ConcreteDef x tel e op is ]  			    Infix _ _		-> return []+			    Syntax _ _		-> return [] 			    Open r x is		-> return [NiceOpen r x is] 			    Import r x as op is	-> return [NiceImport r x as op is] @@ -272,7 +280,7 @@                                 ]                               where                                 f = fixity x fixs-                                binding (TypedBindings _ h bs) =+                                binding (TypedBindings _ (Arg h rel bs)) =                                     concatMap (bind h) bs                                 bind h (TBind _ xs _) =                                     map (DomainFree h) xs@@ -284,14 +292,14 @@ 	-- Translate axioms         niceAx fixs ds = return $ niceAxioms fixs ds -	niceAxioms :: Map.Map Name Fixity -> [TypeSignature] -> [NiceDeclaration]+	niceAxioms :: Map.Map Name Fixity' -> [TypeSignature] -> [NiceDeclaration] 	niceAxioms fixs ds = map (niceAxiom fixs) ds -        niceAxiom :: Map.Map Name Fixity -> TypeSignature -> NiceDeclaration+        niceAxiom :: Map.Map Name Fixity' -> TypeSignature -> NiceDeclaration         niceAxiom fixs d@(TypeSig x t) =             Axiom (getRange d) (fixity x fixs) PublicAccess ConcreteDef x t-        niceAxiom fixs d@(Field h x t) =-            NiceField (getRange d) (fixity x fixs) PublicAccess ConcreteDef h x t+        niceAxiom fixs d@(Field x argt) =+            NiceField (getRange d) (fixity x fixs) PublicAccess ConcreteDef x argt         niceAxiom _ _ = __IMPOSSIBLE__  	toPrim :: NiceDeclaration -> NiceDeclaration@@ -371,7 +379,7 @@ 	-- Make a mutual declaration 	mkMutual :: Range -> [Declaration] -> [NiceDeclaration] -> Nice NiceDeclaration 	mkMutual r cs ds = do-            when (length ds > 1) $ mapM_ checkMutual ds+            mapM_ checkMutual ds             setConcrete cs <$> foldM smash (NiceDef r [] [] []) ds 	  where             setConcrete cs (NiceDef r _ ts ds)  = NiceDef r cs ts ds@@ -393,7 +401,7 @@ 	mkAbstract d = 	    case d of 		Axiom r f a _ x e		    -> Axiom r f a AbstractDef x e-		NiceField r f a _ h x e		    -> NiceField r f a AbstractDef h x e+		NiceField r f a _ x e		    -> NiceField r f a AbstractDef x e 		PrimitiveFunction r f a _ x e	    -> PrimitiveFunction r f a AbstractDef x e 		NiceDef r cs ts ds		    -> NiceDef r cs (map mkAbstract ts) 								 (map mkAbstractDef ds)@@ -405,10 +413,9 @@  	mkAbstractDef d = 	    case d of-		FunDef r ds f a _ x cs      -> FunDef r ds f a AbstractDef x-						  (map mkAbstractClause cs)-		DataDef r ind f a _ x ps cs -> DataDef r ind f a AbstractDef x ps $ map mkAbstract cs-		RecDef r f a _ x c ps cs    -> RecDef r f a AbstractDef x (mkAbstract <$> c) ps $ map mkAbstract cs+		FunDef r ds f a _ x cs   -> FunDef r ds f a AbstractDef x (map mkAbstractClause cs)+		DataDef r f a _ x ps cs  -> DataDef r f a AbstractDef x ps $ map mkAbstract cs+		RecDef r f a _ x c ps cs -> RecDef r f a AbstractDef x (mkAbstract <$> c) ps $ map mkAbstract cs  	mkAbstractClause (Clause x lhs rhs wh with) = 	    Clause x lhs rhs (mkAbstractWhere wh) (map mkAbstractClause with)@@ -421,7 +428,7 @@ 	mkPrivate d = 	    case d of 		Axiom r f _ a x e		    -> Axiom r f PrivateAccess a x e-		NiceField r f _ a h x e		    -> NiceField r f PrivateAccess a h x e+		NiceField r f _ a x e		    -> NiceField r f PrivateAccess a x e 		PrimitiveFunction r f _ a x e	    -> PrimitiveFunction r f PrivateAccess a x e 		NiceDef r cs ts ds		    -> NiceDef r cs (map mkPrivate ts) 								    (map mkPrivateDef ds)@@ -433,10 +440,9 @@  	mkPrivateDef d = 	    case d of-		FunDef r ds f _ a x cs      -> FunDef r ds f PrivateAccess a x-						  (map mkPrivateClause cs)-		DataDef r ind f _ a x ps cs -> DataDef r ind f PrivateAccess a x ps (map mkPrivate cs)-		RecDef r f _ a x c ps cs    -> RecDef r f PrivateAccess a x (mkPrivate <$> c) ps cs+		FunDef r ds f _ a x cs   -> FunDef r ds f PrivateAccess a x (map mkPrivateClause cs)+		DataDef r f _ a x ps cs  -> DataDef r f PrivateAccess a x ps (map mkPrivate cs)+		RecDef r f _ a x c ps cs -> RecDef r f PrivateAccess a x (mkPrivate <$> c) ps cs  	mkPrivateClause (Clause x lhs rhs wh with) = 	    Clause x lhs rhs (mkPrivateWhere wh) (map mkPrivateClause with)@@ -446,23 +452,33 @@ 	mkPrivateWhere (SomeWhere m ds) = SomeWhere m [Private (getRange ds) ds]  -- | Add more fixities. Throw an exception for multiple fixity declarations.-plusFixities :: Map.Map Name Fixity -> Map.Map Name Fixity -> Nice (Map.Map Name Fixity)+plusFixities :: Map.Map Name Fixity' -> Map.Map Name Fixity' -> Nice (Map.Map Name Fixity') plusFixities m1 m2-    | Map.null isect	= return $ Map.union m1 m2-    | otherwise		=-	throwError $ MultipleFixityDecls $ map decls (Map.keys isect)-    where-	isect	= Map.intersection m1 m2-	decls x = (x, map (Map.findWithDefault __IMPOSSIBLE__ x) [m1,m2])+    | not (null isect) = throwError $ MultipleFixityDecls isect+    | otherwise = return $ Map.unionWithKey mergeFixites m1 m2+    where mergeFixites name (Fixity' f1 s1) (Fixity' f2 s2) = Fixity' f s+              where f | f1 == noFixity = f2+                      | f2 == noFixity = f1+                      | otherwise = __IMPOSSIBLE__+                    s | s1 == noNotation = s2+                      | s2 == noNotation = s1+                      | otherwise = __IMPOSSIBLE__+ 	  isect	= [decls x | (x,compat) <- Map.assocs (Map.intersectionWith compatible m1 m2), not compat]++	  decls x = (x, map (Map.findWithDefault __IMPOSSIBLE__ x) [m1,m2]) 				-- cpp doesn't know about primes+          compatible (Fixity' f1 s1) (Fixity' f2 s2) = (f1 == noFixity || f2 == noFixity) &&+                                                       (s1 == noNotation || s2 == noNotation)  -- | Get the fixities from the current block. Doesn't go inside /any/ blocks. --   The reason for this is that fixity declarations have to appear at the same --   level (or possibly outside an abstract or mutual block) as its target --   declaration.-fixities :: [Declaration] -> Nice (Map.Map Name Fixity)+fixities :: [Declaration] -> Nice (Map.Map Name Fixity') fixities (d:ds) = case d of-  Infix f xs -> plusFixities (Map.fromList [ (x,f) | x <- xs ]) =<< fixities ds+  Syntax x syn -> do fs <- fixities ds+                     plusFixities fs (Map.singleton x (Fixity' noFixity syn))+  Infix f xs -> plusFixities (Map.fromList [ (x,Fixity' f noNotation) | x <- xs ]) =<< fixities ds   _          -> fixities ds fixities [] = return $ Map.empty @@ -470,7 +486,7 @@ notSoNiceDeclarations = concatMap notNice   where     notNice (Axiom _ _ _ _ x e)                   = [TypeSig x e]-    notNice (NiceField _ _ _ _ h x e)             = [Field h x e]+    notNice (NiceField _ _ _ _ x argt)            = [Field x argt]     notNice (PrimitiveFunction r _ _ _ x e)       = [Primitive r [TypeSig x e]]     notNice (NiceDef _ ds _ _)                    = ds     notNice (NiceModule r _ _ x tel ds)           = [Module r x tel ds]
src/full/Agda/Syntax/Concrete/Operators.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, ScopedTypeVariables #-}  {-| The parser doesn't know about operators and parses everything as normal     function application. This module contains the functions that parses the@@ -32,6 +32,7 @@ import qualified Agda.Syntax.Abstract.Name as A import Agda.Syntax.Position import Agda.Syntax.Fixity+import Agda.Syntax.Notation import Agda.Syntax.Scope.Base import Agda.Syntax.Scope.Monad @@ -43,6 +44,8 @@ import Agda.Utils.Monad import Agda.Utils.Tuple +import Debug.Trace+ #include "../../undefined.h" import Agda.Utils.Impossible @@ -52,15 +55,16 @@  partsInScope :: ScopeM (Set Name) partsInScope = do-    xs <- uncurry (++) . (id -*- map fst) <$> localNames-    return $ Set.fromList $ concatMap parts xs+    (names, ops) <- localNames+    let xs = concatMap parts names ++ concatMap notationNames ops+    return $ Set.fromList xs     where         parts (NoName _ _)   = []         parts x@(Name _ [_]) = [x]         parts x@(Name _ xs)  = x : [ Name noRange [i] | i@(Id {}) <- xs ]  -- | Compute all unqualified defined names in scope and their fixities.-getDefinedNames :: [KindOfName] -> ScopeM [(Name, Fixity)]+getDefinedNames :: [KindOfName] -> ScopeM [(Name, Fixity')] getDefinedNames kinds = do   names <- nsNames . everythingInScope <$> getScope   reportSLn "scope.operators" 20 $ "everythingInScope: " ++ show names@@ -72,7 +76,7 @@  -- | Compute all names (first component) and operators (second component) in --   scope.-localNames :: ScopeM ([Name], [(Name, Fixity)])+localNames :: ScopeM ([Name], [NewNotation]) localNames = do   defs   <- getDefinedNames [DefName, ConName]   locals <- scopeLocals <$> getScope@@ -83,19 +87,27 @@         where             zs = concatMap opOrNot ops -    opOrNot (x@(Name _ [_]), fx) = [Left x]-    opOrNot (x, fx)              = [Left x, Right (x, fx)]-+    opOrNot (x, Fixity' fx syn) = Left x +                                :  case x of+                                      Name _ [_] -> []+                                      _ -> [Right (x, fx, syntaxOf x)]+                                ++ case syn of+                                    [] -> []+                                    _ -> [Right (x, fx, syn)]+         data UseBoundNames = UseBoundNames | DontUseBoundNames ++++ {-| Builds parser for operator applications from all the operators and function-    symbols in scope. When parsing a pattern we 'DontUseBoundNames' since a-    pattern binds new variables, but when parsing an expression we-    'UseBoundNames' and refute application of things that aren't in scope. The-    reason for this is to disambiguate things like @x + y@. This could mean-    both @_+_@ applied to @x@ and @y@, and @x@ applied to @+@ and @y@, but if there-    is no @+@ in scope it could only be the first.+    symbols in scope. When parsing a pattern we use 'DontUseBoundNames'. +    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.+     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@@ -116,61 +128,91 @@     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. -    TODO: Clean up (too many fst and snd) -}-buildParser :: IsExpr e => Range -> UseBoundNames -> ScopeM (ReadP e e)++data NotationStyle = InfixS | Prefix | Postfix | Nonfix | None+   deriving (Eq)++fixStyle :: Notation -> NotationStyle+fixStyle [] = None+fixStyle syn = case (isAHole (head syn), isAHole (last syn)) of+  (True,True) -> InfixS+  (True,False) -> Postfix+  (False,True) -> Prefix+  (False,False) -> Nonfix+  ++notationNames :: NewNotation -> [Name]+notationNames (_, _, ps) = [Name noRange [Id x] | IdPart x <- ps ]  ++buildParser :: forall e. IsExpr e => Range -> UseBoundNames -> ScopeM (ReadP e e) buildParser r use = do     (names, ops) <- localNames     cons         <- getDefinedNames [ConName]-    let conparts   = Set.fromList $ concatMap (parts . fst) cons+    let conparts   = Set.fromList $ concatMap notationNames $ map oldToNewNotation cons+        opsparts   = Set.fromList $ concatMap notationNames $ ops+        allParts   = Set.union conparts opsparts         connames   = Set.fromList $ map fst cons         (non, fix) = partition nonfix ops         set        = Set.fromList names-        isLocal    = case use of-            UseBoundNames     -> \x -> Set.member x set-            DontUseBoundNames -> \x -> Set.member x connames || not (Set.member x conparts)-    return $ recursive $ \p ->-        concatMap (mkP p) (order fix)-        ++ [ appP p ]-        ++ map (nonfixP . opP p . fst) non-        ++ [ const $ atomP isLocal ]+        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+        -- 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.+    return $ -- traceShow ops $ +           recursive $ \p -> -- p is a parser for an arbitrary expression+        concatMap (mkP p) (order fix) -- for infix operators (with outer "holes")+        ++ [ appP p ] -- parser for simple applications+        ++ map (nonfixP . opP p) non -- for things with no outer "holes"+        ++ [ const $ atomP isAtom ]     where-        parts (NoName _ _) = []-        parts (Name _ [_]) = []-        parts (Name _ xs)  = [ Name noRange [i] | i@(Id {}) <- xs ]+         -        level = fixityLevel . snd+        level :: NewNotation -> Nat+        level (_name, fixity, _syn) = fixityLevel fixity -        isinfixl (op, LeftAssoc _ _)  = isInfix op-        isinfixl _                    = False+        on f g x y = f (g x) (g y) -        isinfixr (op, RightAssoc _ _) = isInfix op+        isinfixl, isinfixr, isinfix, nonfix, isprefix, ispostfix :: NewNotation -> Bool++        isinfixl (_, LeftAssoc _ _, syn)  = isInfix syn+        isinfixl _                    = False ++        isinfixr (_, RightAssoc _ _, syn) = isInfix syn         isinfixr _                    = False -        isinfix (op, NonAssoc _ _)    = isInfix op+        isinfix (_, NonAssoc _ _,syn)    = isInfix syn         isinfix _                     = False -        on f g x y = f (g x) (g y)+        nonfix (_,_,syn) = fixStyle syn == Nonfix+        isprefix (_,_,syn) = fixStyle syn == Prefix+        ispostfix (_,_,syn) = fixStyle syn == Postfix+        isInfix :: Notation -> Bool+        isInfix syn = fixStyle syn == InfixS -        nonfix = isNonfix . fst+        -- | Group operators by precedence level+        order :: [NewNotation] -> [[NewNotation]]         order = groupBy ((==) `on` level) . sortBy (compare `on` level) +        -- | 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             where-                choice' = foldr1 (++++)-                f ++++ g = \p -> f p +++ g p                 inlfx   = fixP infixlP  isinfixl                 inrfx   = fixP infixrP  isinfixr                 infx    = fixP infixP   isinfix-                prefx   = fixP prefixP  (isPrefix . fst)-                postfx  = fixP postfixP (isPostfix . fst)+                prefx   = fixP prefixP  isprefix+                postfx  = fixP postfixP ispostfix -                fixP f g =+                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 . fst) ops ]+                        ops -> [ f $ choice $ map (opP p0) ops ]  --------------------------------------------------------------------------- -- * Expression instances@@ -183,6 +225,7 @@         OpApp r d es    -> OpAppV d es         HiddenArg _ e   -> HiddenArgV e         Paren _ e       -> ParenV e+        Lam _ bs    e   -> LamV bs e         _               -> OtherV e     unExprView e = case e of         LocalV x      -> Ident (QName x)@@ -190,6 +233,7 @@         OpAppV d es   -> OpApp (fuseRange d es) d es         HiddenArgV e  -> HiddenArg (getRange e) e         ParenV e      -> Paren (getRange e) e+        LamV bs e     -> Lam (fuseRange bs e) bs e         OtherV e      -> e  instance IsExpr Pattern where@@ -206,6 +250,7 @@         OpAppV d es      -> OpAppP (fuseRange d es) d es         HiddenArgV e     -> HiddenP (getRange e) e         ParenV e         -> ParenP (getRange e) e+        LamV _ _         -> __IMPOSSIBLE__         OtherV e         -> e  ---------------------------------------------------------------------------@@ -215,7 +260,7 @@ -- | Returns the list of possible parses. parsePattern :: ReadP Pattern Pattern -> Pattern -> [Pattern] parsePattern prs p = case p of-    AppP p (Arg h q) -> fullParen' <$> (AppP <$> parsePattern prs p <*> (Arg h <$> traverse (parsePattern prs) q))+    AppP p (Arg h r q) -> fullParen' <$> (AppP <$> parsePattern prs p <*> (Arg h r <$> traverse (parsePattern prs) q))     RawAppP _ ps     -> fullParen' <$> (parsePattern prs =<< parse prs ps)     OpAppP r d ps    -> fullParen' . OpAppP r d <$> mapM (parsePattern prs) ps     HiddenP _ _      -> fail "bad hidden argument"@@ -259,7 +304,7 @@          appView :: Pattern -> [Pattern]         appView p = case p of-            AppP p (Arg _ q) -> appView p ++ [namedThing q]+            AppP p a         -> appView p ++ [namedThing (unArg a)]             OpAppP _ op ps   -> IdentP (QName op) : ps             ParenP _ p       -> appView p             RawAppP _ _      -> __IMPOSSIBLE__@@ -269,21 +314,20 @@ parseApplication :: [Expr] -> ScopeM Expr parseApplication [e] = return e parseApplication es = do--    -- Check that all parts of the application are in scope (else it won't-    -- parse and we can just as well give a nice error).-    inScope <- partsInScope-    case [ QName x | Ident (QName x) <- es, not (Set.member x inScope) ] of-        []  -> return ()-        xs  -> typeError $ NotInScope xs-     -- Build the parser     p <- buildParser (getRange es) UseBoundNames      -- Parse     case parse p es of         [e] -> return e-        []  -> typeError $ NoParseForApplication es+        []  -> do+          -- When the parser fails and a name is not in scope, it is more+          -- useful to say that to the user rather than just "failed".+          inScope <- partsInScope+          case [ QName x | Ident (QName x) <- es, not (Set.member x inScope) ] of+               []  -> typeError $ NoParseForApplication es+               xs  -> typeError $ NotInScope xs+         es' -> typeError $ AmbiguousParseForApplication es $ map fullParen es'  -- Inserting parenthesis --------------------------------------------------@@ -299,12 +343,13 @@     OtherV _     -> e     HiddenArgV _ -> e     ParenV _     -> e-    AppV e1 (Arg h e2) -> par $ unExprView $ AppV (fullParen' e1) (Arg h e2')+    AppV e1 (Arg h r e2) -> par $ unExprView $ AppV (fullParen' e1) (Arg h r e2')         where             e2' = case h of                 Hidden    -> e2                 NotHidden -> fullParen' <$> e2     OpAppV x es -> par $ unExprView $ OpAppV x $ map fullParen' es+    LamV bs e -> par $ unExprView $ LamV bs (fullParen e)     where         par = unExprView . ParenV @@ -332,6 +377,9 @@ paren _   e@(ETel _)           = return $ \p -> e paren _   e@(RawApp _ _)       = __IMPOSSIBLE__ paren _   e@(HiddenArg _ _)    = __IMPOSSIBLE__+paren _   e@(QuoteGoal _ _ _)  = return $ \p -> mparen (lamBrackets p) e+paren _   e@(Quote _)          = return $ \p -> e+  mparen :: Bool -> Expr -> Expr mparen True  e = Paren (getRange e) e
src/full/Agda/Syntax/Concrete/Operators/Parser.hs view
@@ -1,10 +1,12 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, ScopedTypeVariables #-}  module Agda.Syntax.Concrete.Operators.Parser where  import Agda.Syntax.Position import Agda.Syntax.Common import Agda.Syntax.Fixity+import Agda.Syntax.Notation+import Agda.Syntax.Concrete import Agda.Syntax.Concrete.Name import Agda.Utils.ReadP import Agda.Utils.Monad@@ -18,8 +20,9 @@     | AppV e (NamedArg e)     | OpAppV Name [e]     | HiddenArgV (Named String e)+    | LamV [LamBinding] e     | ParenV e-    deriving (Show)+--    deriving (Show)  class HasRange e => IsExpr e where     exprView   :: e -> ExprView e@@ -36,7 +39,28 @@ 	fs = f p0 	p0 = foldr ( $ ) p0 fs +-- | Variant of chainr1+chainr1' :: ReadP t a -> ReadP t (a -> a -> ReadP t a) -> ReadP t a+chainr1' p op = scan+  where scan   = p >>= rest+        rest x = do f <- op+                    y <- scan+                    f x y+                 +++ return x++-- | Variant of chainl1+chainl1' :: ReadP t a -> ReadP t (a -> a -> ReadP t a) -> ReadP t a+chainl1' p op = p >>= rest+  where rest x = do f <- op+                    y <- p+                    fxy <- f x y+                    rest fxy+                 +++ return x++---------------------------- -- Specific combinators++-- | Parse a specific identifier as a NamePart partP :: IsExpr e => String -> ReadP e (Range, NamePart) partP s = do     tok <- get@@ -48,65 +72,99 @@ 	    LocalV (Name r [Id y]) | x == y -> Just (r, Id y) 	    _			            -> Nothing -binop :: IsExpr e => ReadP e e -> ReadP e (e -> e -> e)-binop opP = do-    OpAppV (Name r ps) es <- exprView <$> opP-    return $ \x y -> unExprView $-      OpAppV (Name r ([Hole] ++ ps ++ [Hole])) ([x] ++ es ++ [y])+binop :: IsExpr e => ReadP e (NewNotation,Range,[e]) -> ReadP e (e -> e -> ReadP a e)+binop middleP = do+  (nsyn,r,es) <- middleP+  return $ \x y -> rebuild nsyn r (x : es ++ [y]) -preop :: IsExpr e => ReadP e e -> ReadP e (e -> e)-preop opP = do-    OpAppV (Name r ps) es <- exprView <$> opP-    return $ \x -> unExprView $-      OpAppV (Name r (ps ++ [Hole])) (es ++ [x])+preop, postop :: IsExpr e => ReadP e (NewNotation,Range,[e]) -> ReadP e (e -> ReadP a e)+preop middleP = do+  (nsyn,r,es) <- middleP+  return $ \x -> rebuild nsyn r (es ++ [x]) -postop :: IsExpr e => ReadP e e -> ReadP e (e -> e)-postop opP = do-    OpAppV (Name r ps) es <- exprView <$> opP-    return $ \x -> unExprView $-      OpAppV (Name r ([Hole] ++ ps)) ([x] ++ es)+postop middleP = do+  (nsyn,r,es) <- middleP+  return $ \x -> rebuild nsyn r (x : es) -opP :: IsExpr e => ReadP e e -> Name -> ReadP e e-opP p (NoName _ _) = pfail-opP p (Name _ xs)  = do-    (r, ps, es) <- mix [ x | Id x <- xs ]-    return $ unExprView $ OpAppV (Name r ps) es-    where-	mix []	   = __IMPOSSIBLE__-	mix [x]	   = do (r, part) <- partP x; return (r, [part], [])-	mix (x:xs) = do-	    (r1, part)    <- partP x+++-- | Parse the "operator part" of the given syntax.+-- holes at beginning and end are IGNORED.++-- 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@(_,_,syn) = do+  (range,es) <- worker $ removeExternalHoles syn+  return (nsyn,range,es)+ where worker [IdPart x] = do (r, part) <- partP x; return (r,[])+       worker (IdPart x : _ : xs) = do+            (r1, part)    <- partP x 	    e             <- p-	    (r2 , ps, es) <- mix xs-	    return (fuseRanges r1 r2, part : Hole : ps, e : es)+	    (r2 , es) <- worker xs+            return (fuseRanges r1 r2, e : es)+       worker x = __IMPOSSIBLE__ -- holes and non-holes must be alternated. -prefixP :: IsExpr e => ReadP e e -> ReadP e e -> ReadP e e+       removeExternalHoles = reverse . removeLeadingHoles . reverse . removeLeadingHoles+           where removeLeadingHoles = dropWhile isAHole++-- | Given a name with a syntax spec, and a list of parsed expressions+-- fitting it, rebuild the expression.+-- Note that this function must not parse any input (as guaranteed by the type)+rebuild :: forall a e. IsExpr e => NewNotation -> Range -> [e] -> ReadP a e+rebuild (name,_,syn) r es = do+  exprs <- mapM findExprFor [0..lastHole]+  return $ unExprView $ OpAppV (setRange r name) exprs+  where filledHoles = zip es (filter isAHole syn)+        lastHole = maximum [t | Just t <- map holeTarget syn]+        findExprFor :: Int -> ReadP a e+        findExprFor n = case  [ e | (e,NormalHole m) <- filledHoles, m == n] of+                          [] -> fail $ "no expression for hole " ++ show n+                          [x] -> case [ e | (e,BindHole m) <- filledHoles, m == n] of+                                   [] -> return x -- no variable to bind+                                   vars -> do bs <- mapM rebuildBinding $ map exprView vars+                                              return $ unExprView $ LamV bs x+                          _ -> fail $ "more than one expression for hole " ++ show n++rebuildBinding :: ExprView e -> ReadP a LamBinding+rebuildBinding (LocalV name) = return $ DomainFree NotHidden (mkBoundName_ name)+rebuildBinding _ = fail "variable name expected"++($$$) :: (e -> ReadP a e) -> ReadP a e -> ReadP a e+f $$$ x = do+   x' <- x+   f x'++-- | 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+    foldr (($$$)) (return e) fs -postfixP :: IsExpr e => ReadP e e -> ReadP e e -> ReadP e e postfixP op p = do     e <- p     fs <- many (postop op)-    return $ foldl (flip ( $ )) e fs+    foldl (flip ( $$$ )) (return e) fs -infixP, infixrP, infixlP :: IsExpr e => ReadP e e -> ReadP e e -> ReadP e e-infixlP op p = chainl1 p (binop op)-infixrP op p = chainr1 p (binop op)+infixlP op p = chainl1' p (binop op)+infixrP op p = chainr1' p (binop op) infixP  op p = do     e <- p-    f <- restP-    return $ f e+    restP e     where-	restP = return id +++ do+	restP x = return x +++ do 	    f <- binop op 	    e <- p-	    return $ flip f e+	    f x e  -nonfixP :: IsExpr e => ReadP e e -> ReadP e e -> ReadP e e-nonfixP op p = op +++ p+nonfixP op p = (do+  (nsyn,r,es) <- op+  rebuild nsyn r es)+ +++ p  appP :: IsExpr e => ReadP e e -> ReadP e e -> ReadP e e appP top p = do@@ -120,7 +178,7 @@ 	isHidden (HiddenArgV _) = True 	isHidden _	       = False -	nothidden = Arg NotHidden . unnamed <$> do+	nothidden = Arg NotHidden Relevant . unnamed <$> do 	    e <- p 	    case exprView e of 		HiddenArgV _ -> pfail@@ -128,7 +186,7 @@  	hidden = do 	    HiddenArgV e <- exprView <$> satisfy (isHidden . exprView)-	    return $ Arg Hidden e+	    return $ Arg Hidden Relevant e  atomP :: IsExpr e => (Name -> Bool) -> ReadP e e atomP p = do
src/full/Agda/Syntax/Concrete/Pretty.hs view
@@ -27,13 +27,32 @@ instance Show Pragma	      where show = show . pretty instance Show RHS	      where show = show . pretty +braces' d = case render d of+  -- Add space to avoid starting a comment+  '-':_ -> braces (text " " <> d)+  _     -> braces d+ arrow  = text "\x2192" lambda = text "\x03bb"+underscore = text "_"  pHidden :: Pretty a => Hiding -> a -> Doc-pHidden Hidden	    = braces . pretty+pHidden Hidden	    = braces' . pretty pHidden NotHidden   = pretty +pRelevance :: Pretty a => Relevance -> a -> Doc+pRelevance Forced     a = pretty a+pRelevance Relevant   a = pretty a+pRelevance Irrelevant a = +  let d = pretty a +  in  if render d == "_" then d else text "." <> d++{- UNUSED+-- | Use for printing non-dependent function types+prettyWithRelevance :: Pretty a => Arg a -> Doc+prettyWithRelevance a = pRelevance (argRelevance a) a+-}+ instance Pretty Name where     pretty = text . show @@ -46,6 +65,7 @@     pretty (LitFloat _ x)   = text $ show x     pretty (LitString _ s)  = text $ showString' s ""     pretty (LitChar _ c)    = text $ "'" ++ showChar' c "" ++ "'"+    pretty (LitQName _ x)   = text $ show x  showString' :: String -> ShowS showString' s =@@ -59,6 +79,11 @@     where 	escapeMe c = not (isPrint c) || c == '\\' +instance Pretty Relevance where+  pretty Forced     = empty+  pretty Relevant   = empty+  pretty Irrelevant = text "."+ instance Pretty Induction where   pretty Inductive = text "data"   pretty CoInductive = text "codata"@@ -69,7 +94,7 @@ 	    Ident x	     -> pretty x 	    Lit l	     -> pretty l 	    QuestionMark _ n -> text "?" <> maybe empty (text . show) n-	    Underscore _ n   -> text "_" <> maybe empty (text . show) n+	    Underscore _ n   -> underscore <> maybe empty (text . show) n 	    App _ _ _	     -> 		case appView e of 		    AppView e1 args	->@@ -89,7 +114,7 @@ 	    WithApp _ e es -> fsep $ 	      pretty e : map ((text "|" <+>) . pretty) es -	    HiddenArg _ e -> braces $ pretty e+	    HiddenArg _ e -> braces' $ pretty e 	    Lam _ bs e -> 		sep [ lambda <+> fsep (map pretty bs) <+> arrow 		    , nest 2 $ pretty e@@ -101,7 +126,7 @@ 		    , pretty e2 		    ] 	    Pi tel e ->-		sep [ fsep (map pretty tel ++ [arrow])+		sep [ fsep (map pretty (smashTel tel) ++ [arrow]) 		    , pretty e 		    ] 	    Set _   -> text "Set"@@ -115,16 +140,18 @@ 	    As _ x e  -> pretty x <> text "@" <> pretty e 	    Dot _ e   -> text "." <> pretty e 	    Absurd _  -> text "()"-	    Rec _ xs  -> sep-	      [ text "record"-	      , nest 2 $ braces $ fsep $ punctuate (text ";") $ map pr xs-	      ]+	    Rec _ xs  -> sep (+	      [ text "record {" ] +++	      punctuate (text ";") (map pr xs)) <+> text "}" 	      where 		pr (x, e) = sep [ pretty x <+> text "=" 				, nest 2 $ pretty e 				]             ETel []  -> text "()"             ETel tel -> fsep $ map pretty tel+            QuoteGoal _ x e -> sep [text "quoteGoal" <+> pretty x <+> text "in",+                                    nest 2 $ pretty e]+            Quote _ -> text "quote"  instance Pretty BoundName where   pretty = pretty . boundName@@ -134,26 +161,36 @@     pretty (DomainFull b)   = pretty b  instance Pretty TypedBindings where-    pretty (TypedBindings _ h bs) =-	bracks $ fsep $ punctuate semi $ map pretty bs+    pretty (TypedBindings _ (Arg h rel bs)) =+	pRelevance rel $ bracks $ fsep $ punctuate semi $ map pretty bs 	where 	    bracks = case h of-			Hidden	    -> braces+			Hidden	    -> braces' 			NotHidden   -> parens  instance Pretty TypedBinding where     pretty (TNoBind e) = pretty e     pretty (TBind _ xs e) =-	sep [ fsep (punctuate comma $ map pretty xs)+	sep [ fsep (map pretty xs) 	    , text ":" <+> pretty e 	    ] +smashTel :: Telescope -> Telescope+smashTel (TypedBindings r (Arg h  rel  [TBind r' xs e]) :+          TypedBindings _ (Arg h' rel' [TBind _  ys e']) : tel)+  | h == h' && rel == rel' && show e == show e' =+    smashTel (TypedBindings r (Arg h rel [TBind r' (xs ++ ys) e]) : tel)+smashTel (b : tel) = b : smashTel tel+smashTel [] = []+ instance Pretty RHS where     pretty (RHS e)   = text "=" <+> pretty e     pretty AbsurdRHS = empty  instance Pretty WhereClause where   pretty  NoWhere = empty+  pretty (AnyWhere [Module _ x [] ds]) | isNoName (unqualify x)+                       = vcat [ text "where", nest 2 (vcat $ map pretty ds) ]   pretty (AnyWhere ds) = vcat [ text "where", nest 2 (vcat $ map pretty ds) ]   pretty (SomeWhere m ds) =     vcat [ hsep [ text "module", pretty m, text "where" ]@@ -184,9 +221,10 @@ 	    TypeSig x e	-> sep [ pretty x <+> text ":" 			       , nest 2 $ pretty e 			       ]-            Field h x e -> sep [ text "field"-                               , nest 2 $ pHidden h (TypeSig x e)-                               ]+            Field x (Arg h rel e) -> +                sep [ text "field"+                    , nest 2 $ pRelevance rel $ pHidden h (TypeSig x e)+                    ] 	    FunClause lhs rhs wh -> 		sep [ pretty lhs 		    , nest 2 $ pretty rhs@@ -217,7 +255,7 @@                                         map pretty cs) 	    Infix f xs	-> 		pretty f <+> (fsep $ punctuate comma $ map pretty xs)-+            Syntax n xs -> text "syntax" <+> pretty n <+> text "..." 	    Mutual _ ds	    -> namedBlock "mutual" ds 	    Abstract _ ds   -> namedBlock "abstract" ds 	    Private _ ds    -> namedBlock "private" ds@@ -229,6 +267,11 @@ 		     , fcat (map pretty tel) 		     , text "where" 		     ] $$ nest 2 (vcat $ map pretty ds)+	    ModuleMacro _ x [] e DoOpen i | isNoName x ->+		sep [ pretty DoOpen+                    , nest 2 $ pretty e+                    , nest 4 $ pretty i+                    ] 	    ModuleMacro _ x tel e open i -> 		sep [ pretty open <+> text "module" <+> pretty x <+> fcat (map pretty tel) 		    , nest 2 $ text "=" <+> pretty e <+> pretty i@@ -263,6 +306,8 @@       hsep $ [text "IMPORT", text i]     pretty (ImpossiblePragma _) =       hsep $ [text "IMPOSSIBLE"]+    pretty (EtaPragma _ x) =+      hsep $ [text "ETA", pretty x]  instance Pretty Fixity where     pretty (LeftAssoc _ n)  = text "infixl" <+> text (show n)@@ -270,7 +315,10 @@     pretty (NonAssoc _ n)   = text "infix" <+> text (show n)  instance Pretty e => Pretty (Arg e) where-    pretty (Arg h e) = pHidden h e+ -- Andreas 2010-09-21: do not print relevance in general, only in function types! + -- Andreas 2010-09-24: and in record fields+    pretty (Arg h r e) = -- pRelevance r $+                         pHidden h e  instance Pretty e => Pretty (Named String e) where     pretty (Named Nothing e) = pretty e@@ -293,9 +341,9 @@ 		    prOp []	     []       = [] 		    prOp []	     (_ : _)  = __IMPOSSIBLE__ 	    OpAppP _ (NoName _ _) _ -> __IMPOSSIBLE__-	    HiddenP _ p	       -> braces $ pretty p+	    HiddenP _ p	       -> braces' $ pretty p 	    ParenP _ p	       -> parens $ pretty p-	    WildP _	       -> text "_"+	    WildP _	       -> underscore 	    AsP _ x p	       -> pretty x <> text "@" <> pretty p 	    DotP _ p	       -> text "." <> pretty p 	    AbsurdP _	       -> text "()"
src/full/Agda/Syntax/Fixity.hs view
@@ -9,7 +9,37 @@ import Agda.Syntax.Position import Agda.Syntax.Common import Agda.Syntax.Concrete.Name+import Agda.Syntax.Notation +-- | The notation is handled as the fixity in the renamer. Hence they+-- are grouped together in this type.+data Fixity' = Fixity' +    {theFixity :: Fixity,+     theNotation :: Notation}+  deriving (Typeable, Data, Show, Eq)++-- | All the notation information related to a name.+type NewNotation = (Name, Fixity, Notation)++-- | If an operator has no specific notation, recover it from its name.+oldToNewNotation :: (Name, Fixity') -> NewNotation+oldToNewNotation (name, Fixity' f []) = (name, f, syntaxOf name)+oldToNewNotation (name, Fixity' f syn) = (name, f, syn)++syntaxOf :: Name -> Notation+syntaxOf (NoName _ _) = []+syntaxOf (Name _ [_]) = []+syntaxOf (Name _ xs)  = mkSyn 0 xs+ where mkSyn :: Int -> [NamePart] -> Notation+       mkSyn n [] = []+       mkSyn n (Hole:xs) = NormalHole n : mkSyn (1+n) xs+       mkSyn n (Id x:xs) = IdPart x : mkSyn n xs+++defaultFixity' = Fixity' defaultFixity defaultNotation++noFixity = NonAssoc noRange (negate 666) + -- | Fixity of operators. data Fixity = LeftAssoc  Range Nat 	    | RightAssoc Range Nat@@ -27,7 +57,7 @@ fixityLevel (RightAssoc _ n) = n fixityLevel (NonAssoc	_ n) = n --- | The default fixity. Currently defined to be @'LeftAssoc' 20@.+-- | The default fixity. Currently defined to be @'NonAssoc' 20@. defaultFixity :: Fixity defaultFixity = NonAssoc noRange 20 
src/full/Agda/Syntax/Info.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveDataTypeable, StandaloneDeriving, FlexibleContexts, UndecidableInstances #-} {-| An info object contains additional information about a piece of abstract     syntax that isn't part of the actual syntax. For instance, it might contain     the source code posisiton of an expression or the concrete syntax that@@ -7,7 +7,7 @@  module Agda.Syntax.Info where -import Data.Generics(Data,Typeable)+import Data.Generics (Typeable, Data) import Text.Show.Functions  import qualified Agda.Syntax.Concrete.Name as C@@ -73,9 +73,14 @@                    , minfoAsName   :: Maybe C.Name                      -- The \"as\" module name, if any. Retained for                      -- highlighting purposes.+                   , minfoOpenShort :: Maybe OpenShortHand+                   , minfoDirective :: Maybe ImportDirective+                     -- Retained for abstractToConcrete of ModuleMacro 		   }-  deriving (Typeable, Data, Show)+  deriving (Typeable, Data) +deriving instance (Show OpenShortHand, Show ImportDirective) => Show ModuleInfo+ instance HasRange ModuleInfo where   getRange = minfoRange @@ -100,14 +105,14 @@  --------------------------------------------------------------------------}  data DefInfo =-	DefInfo	{ defFixity   :: Fixity+	DefInfo	{ defFixity   :: Fixity' 		, defAccess   :: Access 		, defAbstract :: IsAbstract 		, defInfo     :: DeclInfo 		}   deriving (Typeable, Data, Show) -mkDefInfo :: Name -> Fixity -> Access -> IsAbstract -> Range -> DefInfo+mkDefInfo :: Name -> Fixity' -> Access -> IsAbstract -> Range -> DefInfo mkDefInfo x f a ab r = DefInfo f a ab (DeclInfo x r)  instance HasRange DefInfo where@@ -124,7 +129,7 @@ 	DeclInfo { declName  :: Name 		 , declRange :: Range 		 }-  deriving (Eq, Typeable, Data, Show)+  deriving (Typeable, Data, Show)  instance HasRange DeclInfo where   getRange = declRange
src/full/Agda/Syntax/Internal.hs view
@@ -7,7 +7,7 @@  import Prelude hiding (foldr) import Control.Applicative-import Data.Generics+import Data.Generics (Typeable, Data) import Data.Foldable import Data.Traversable import Data.Function@@ -40,13 +40,15 @@ 	  | Fun (Arg Type) Type 	  | Sort Sort 	  | MetaV MetaId Args+          | DontCare               -- ^ nuked irrelevant and other stuff   deriving (Typeable, Data, Eq, Ord, Show)+-- Andreas 2010-09-21: @DontCare@ replaces the hack @Sort Prop@  data Type = El Sort Term   deriving (Typeable, Data, Eq, Ord, Show) -data Sort = Type Term   -- A term of type Nat-	  | Prop+data Sort = Type Term   -- A term of type Level+	  | Prop  -- ignore me 	  | Lub Sort Sort 	  | Suc Sort 	  | MetaS MetaId Args@@ -95,6 +97,7 @@     Pi a b     -> 1 + size a + size b     Fun a b    -> 1 + size a + size b     Sort s     -> 1+    DontCare   -> 1  instance Sized Type where   size = size . unEl@@ -110,6 +113,7 @@     Pi a b     -> killRange2 Pi a b     Fun a b    -> killRange2 Fun a b     Sort s     -> killRange1 Sort s+    DontCare   -> DontCare  instance KillRange Type where   killRange (El s v) = killRange2 El s v@@ -124,9 +128,14 @@     DLub s1 s2 -> killRange2 DLub s1 s2     MetaS x as -> killRange1 (MetaS x) as -instance KillRange Telescope where+instance KillRange a => KillRange (Tele a) where+  killRange = fmap killRange++{-+-- instance KillRange Telescope where   killRange EmptyTel = EmptyTel-  killRange (ExtendTel a tel) = killRange2 ExtendTel a tel+  killRange (ExtendTel a tel) = ExtendTel (killRange a) (killRange tel) -- killRange2 ExtendTel a tel+-}  instance KillRange a => KillRange (Blocked a) where   killRange = fmap killRange@@ -140,11 +149,17 @@  -- | Sequence of types. An argument of the first type is bound in later types --   and so on.-data Telescope = EmptyTel-	       | ExtendTel (Arg Type) (Abs Telescope)+data Tele a = EmptyTel+	    | ExtendTel a (Abs (Tele a))   deriving (Typeable, Data, Show, Eq, Ord) -instance Sized Telescope where+type Telescope = Tele (Arg Type)++instance Functor Tele where+  fmap f  EmptyTel         = EmptyTel+  fmap f (ExtendTel a tel) = ExtendTel (f a) (fmap (fmap f) tel)++instance Sized (Tele a) where   size  EmptyTel	 = 0   size (ExtendTel _ tel) = 1 + size tel @@ -177,7 +192,7 @@   size = size . absBody  telFromList :: [Arg (String, Type)] -> Telescope-telFromList = foldr (\(Arg h (x, a)) -> ExtendTel (Arg h a) . Abs x) EmptyTel+telFromList = foldr (\(Arg h r (x, a)) -> ExtendTel (Arg h r a) . Abs x) EmptyTel  telToList :: Telescope -> [Arg (String, Type)] telToList EmptyTel = []@@ -187,16 +202,38 @@ -- Definitions -- +-- | Pairs consisting of original and translated clauses.+data Clauses = Clauses+  { maybeOriginalClause :: Maybe Clause+    -- ^ The original clause, before translation of record patterns.+    -- 'Nothing' if the translated clause is identical to the original+    -- one.+  , translatedClause :: Clause+    -- ^ The translated clause.+  }+  deriving (Typeable, Data, Show)++-- | The original clause, before translation of record patterns.+originalClause :: Clauses -> Clause+originalClause Clauses{ maybeOriginalClause = Just c } = c+originalClause Clauses{ maybeOriginalClause = Nothing+                      , translatedClause    = c      } = c++instance HasRange Clauses where+  getRange = getRange . translatedClause+ -- | A clause is a list of patterns and the clause body should @Bind@ or -- @NoBind@ in the order the variables occur in the patterns. The @NoBind@ -- constructor is an optimisation to avoid substituting for variables that--- aren't used.+-- aren't used. (Note: This optimisation has been disabled.) -- --  The telescope contains the types of the pattern variables and the---  permutation is how to get from the order the variables occur in the---  patterns to the order they occur in the telescope.  For the purpose of the---  permutation dot patterns counts as variables.---  TODO: change this!+--  permutation is 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.+--+--  For the purpose of the permutation and the body dot patterns count+--  as variables. TODO: Change this! data Clause = Clause     { clauseRange     :: Range     , clauseTel       :: Telescope@@ -208,7 +245,8 @@ data ClauseBody = Body Term 		| Bind (Abs ClauseBody) 		| NoBind ClauseBody-		| NoBody    -- for absurd clauses+		| NoBody    -- ^ for absurd clauses.  A @NoBody@ is never+                            -- preceded by any @Bind@ or @NoBind@.   deriving (Typeable, Data, Show)  instance HasRange Clause where@@ -222,7 +260,11 @@ -- data Pattern = VarP String  -- name suggestion              | DotP Term-	     | ConP QName [Arg Pattern]+	     | ConP QName (Maybe (Arg Type)) [Arg Pattern]+               -- ^ The type is @'Just' t@' iff the pattern is a+               -- record pattern. The scope used for the type is given+               -- by any outer scope plus the clause's telescope+               -- ('clauseTel'). 	     | LitP Literal   deriving (Typeable, Data, Show) 
src/full/Agda/Syntax/Internal/Generic.hs view
@@ -48,6 +48,7 @@     MetaV m xs -> f $ MetaV m $ traverseTerm f xs     Lit _    -> f t     Sort _   -> f t+    DontCare -> f t    traverseTermM f t = case t of     Var i xs -> f =<< Var i <$> traverseTermM f xs@@ -59,6 +60,7 @@     MetaV m xs -> f =<< MetaV m <$> traverseTermM f xs     Lit _    -> f t     Sort _   -> f t+    DontCare -> f t    foldTerm f t = f t `mappend` case t of     Var i xs   -> foldTerm f xs@@ -70,6 +72,7 @@     MetaV m xs -> foldTerm f xs     Lit _      -> mempty     Sort _     -> mempty+    DontCare   -> mempty  instance TermLike Type where   traverseTerm f (El s t) = El s $ traverseTerm f t
src/full/Agda/Syntax/Internal/Pattern.hs view
@@ -8,14 +8,19 @@ data OneHolePatterns = OHPats [Arg Pattern] (Arg OneHolePattern) [Arg Pattern]   deriving (Show) data OneHolePattern  = Hole-		     | OHCon QName OneHolePatterns+		     | OHCon QName (Maybe (Arg Type)) OneHolePatterns+                       -- ^ The type serves the same role as the type+                       -- argument to 'ConP'.+                       --+                       -- TODO: If a hole is plugged this type may+                       -- have to be updated in some way.   deriving (Show)  plugHole :: Pattern -> OneHolePatterns -> [Arg Pattern] plugHole p (OHPats ps hole qs) = ps ++ [fmap (plug p) hole] ++ qs   where-    plug p Hole	       = p-    plug p (OHCon c h) = ConP c $ plugHole p h+    plug p Hole           = p+    plug p (OHCon c mt h) = ConP c mt $ plugHole p h  allHoles :: [Arg Pattern] -> [OneHolePatterns] allHoles = map snd . allHolesWithContents@@ -25,15 +30,13 @@ allHolesWithContents (p : ps) = map left phs ++ map (right p) (allHolesWithContents ps)   where     phs :: [(Pattern, Arg OneHolePattern)]-    phs = map (id -*- Arg (argHiding p)) (holes $ unArg p)+    phs = map (id -*- Arg (argHiding p) Relevant) (holes $ unArg p)      holes :: Pattern -> [(Pattern, OneHolePattern)]-    holes p@(VarP _)  = [(p, Hole)]-    holes p@(DotP _)  = [(p, Hole)]-    holes (ConP c qs) = map (id -*- OHCon c) $ allHolesWithContents qs-    holes _           = []+    holes p@(VarP _)     = [(p, Hole)]+    holes p@(DotP _)     = [(p, Hole)]+    holes (ConP c mt qs) = map (id -*- OHCon c mt) $ allHolesWithContents qs+    holes _              = []      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,14 +2,15 @@ module Agda.Syntax.Literal where  import Data.Generics (Typeable, Data)- import Agda.Syntax.Position+import Agda.Syntax.Abstract.Name  data Literal = LitInt    Range Integer              | LitLevel  Range Integer 	     | LitFloat  Range Double 	     | LitString Range String 	     | LitChar   Range Char+             | LitQName  Range QName   deriving (Typeable, Data, Show)  instance Eq Literal where@@ -18,6 +19,7 @@   LitFloat _ x  == LitFloat _ y  = x == y   LitString _ s == LitString _ t = s == t   LitChar _ c   == LitChar _ d   = c == d+  LitQName _ x  == LitQName _ y  = x == y   _             == _             = False  instance Ord Literal where@@ -34,6 +36,8 @@   compare _ LitFloat{} = GT   compare LitString{} _ = LT   compare _ LitString{} = GT+  compare LitQName{} _  = LT+  compare _ LitQName{}  = GT  instance HasRange Literal where   getRange (LitLevel  r _) = r@@ -41,6 +45,7 @@   getRange (LitFloat  r _) = r   getRange (LitString r _) = r   getRange (LitChar   r _) = r+  getRange (LitQName  r _) = r  instance SetRange Literal where   setRange r (LitLevel  _ x) = LitLevel  r x@@ -48,6 +53,7 @@   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  instance KillRange Literal where   killRange (LitLevel  r x) = LitLevel  (killRange r) x@@ -55,4 +61,5 @@   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) = LitQName  (killRange r) x 
+ src/full/Agda/Syntax/Notation.hs view
@@ -0,0 +1,97 @@+{-# LANGUAGE CPP, DeriveDataTypeable #-}+++module Agda.Syntax.Notation where++import Control.Applicative+import Control.Monad (when)+import Data.List+import Data.Maybe+import Data.Generics (Typeable, Data)++import System.FilePath++import Test.QuickCheck++import Agda.Syntax.Common+import Agda.Syntax.Position+import Agda.Utils.FileName+import Agda.Utils.Pretty++#include "../undefined.h"+import Agda.Utils.Impossible++{-| A name is a non-empty list of alternating 'Id's and 'Hole's. A normal name+    is represented by a singleton list, and operators are represented by a list+    with 'Hole's where the arguments should go. For instance: @[Hole,Id "+",Hole]@+    is infix addition.++    Equality and ordering on @Name@s are defined to ignore range so same names+    in different locations are equal.+-}++-- | Data type constructed in the Happy parser; converted to 'GenPart'+-- before it leaves the Happy code.+data HoleName = LambdaHole String String -- ^ (\x -> y) ; 1st argument is the bound name (unused for now)+              | ExprHole String          -- ^ simple named hole++-- | Target of a hole  +holeName (LambdaHole _ n) = n+holeName (ExprHole n) = n++type Notation = [GenPart] ++-- | Part of a Notation+data GenPart = BindHole Int  -- ^ Argument is the position of the hole (with binding) where the binding should occur.+             | NormalHole Int -- ^ Argument is where the expression should go+             | IdPart String+  deriving (Data, Typeable, Show, Eq)++-- | Target argument position of a part (Nothing if it is not a hole)+holeTarget (BindHole n) = Just n+holeTarget (NormalHole n) = Just n+holeTarget (IdPart _) = Nothing++-- | Is the part a hole?+isAHole :: GenPart -> Bool+isAHole = isJust . holeTarget++isBindingHole (BindHole _) = True+isBindingHole _ = False++isLambdaHole (LambdaHole _ _) = True+isLambdaHole _ = False+++-- | From notation with names to notation with indices.+mkNotation :: [HoleName] -> [String] -> Either String Notation+mkNotation _ [] = fail "empty notation is disallowed"+mkNotation holes ids = do+  xs <- mapM mkPart ids+  when (not (isAlternating xs)) $ fail "syntax must alternate holes and non-holes"+  when (not (isExprLinear xs)) $ fail "syntax must use holes exactly once"+  when (not (isLambdaLinear xs)) $ fail "syntax must use binding holes exactly once"+  return xs+    where mkPart ident = +             case (findIndices (\x -> ident == holeName x) holes, +                   findIndices (\x -> case x of LambdaHole ident' _ -> ident == ident';_ -> False) holes)  of+                           ([],[x])   -> return $ BindHole x+                           ([x], [])  -> return $ NormalHole x+                           ([], []) -> return $ IdPart ident+                           _ -> fail "hole names must be unique"++          isExprLinear   xs = sort [ x | NormalHole x <- xs] == [ i | (i,h) <- zip [0..] holes ]+          isLambdaLinear xs = sort [ x | BindHole   x <- xs] == [ i | (i,h) <- zip [0..] holes, isLambdaHole h ]+++          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 = []++
src/full/Agda/Syntax/Parser/Comments.hs view
@@ -10,6 +10,8 @@ module Agda.Syntax.Parser.Comments     where +import Data.List+ import {-# SOURCE #-} Agda.Syntax.Parser.LexActions import Agda.Syntax.Parser.Monad import Agda.Syntax.Parser.Tokens@@ -46,7 +48,7 @@               i = Interval p1 p2               s = case (p1, p2) of                     (Pn { posPos = p1 }, Pn { posPos = p2 }) ->-                      take (p2 - p1) $ lexInput inp+                      genericTake (p2 - p1) $ lexInput inp           return $ TokComment (i, s)          else 	  lexToken
src/full/Agda/Syntax/Parser/Lexer.x view
@@ -80,6 +80,7 @@ <pragma_>   "COMPILED"	        { keyword KwCOMPILED } <pragma_>   "IMPORT"	        { keyword KwIMPORT } <pragma_>   "IMPOSSIBLE"	{ keyword KwIMPOSSIBLE }+<pragma_>   "ETA"               { keyword KwETA } <pragma_>   "LINE"		{ keyword KwLINE } <pragma_>   . # [ $white ] +    { withInterval $ TokString } @@ -145,6 +146,9 @@ <0,code> Prop		{ keyword KwProp } <0,code> forall		{ keyword KwForall } <0,code> Set @number	{ withInterval' (read . drop 3) TokSetN }+<0,code> quoteGoal	{ keyword KwQuoteGoal }+<0,code> quote		{ keyword KwQuote }+<0,code> syntax         { keyword KwSyntax }  -- The parser is responsible to put the lexer in the imp_dir_ state when it -- expects an import directive keyword. This means that if you run the
src/full/Agda/Syntax/Parser/Monad.hs view
@@ -30,6 +30,7 @@  import Control.Exception import Data.Char+import Data.Int import Data.Typeable  import Control.Monad.State@@ -75,8 +76,8 @@ -- | We need to keep track of the context to do layout. The context --   specifies the indentation (if any) of a layout block. See --   "Agda.Syntax.Parser.Layout" for more informaton.-data LayoutContext  = NoLayout	    -- ^ no layout-		    | Layout Int    -- ^ layout at specified column+data LayoutContext  = NoLayout	      -- ^ no layout+		    | Layout Int32    -- ^ layout at specified column     deriving Show  -- | There aren't any parser flags at the moment.
src/full/Agda/Syntax/Parser/Parser.y view
@@ -26,6 +26,7 @@ import Agda.Syntax.Concrete.Pretty import Agda.Syntax.Common import Agda.Syntax.Fixity+import Agda.Syntax.Notation import Agda.Syntax.Literal  import Agda.Utils.Monad@@ -77,13 +78,17 @@     'Prop'          { TokKeyword KwProp $$ }     'Set'           { TokKeyword KwSet $$ }     'forall'        { TokKeyword KwForall $$ }+    'syntax'        { TokKeyword KwSyntax $$ }     'OPTIONS'       { TokKeyword KwOPTIONS $$ }     'BUILTIN'       { TokKeyword KwBUILTIN $$ }     'IMPORT'        { TokKeyword KwIMPORT $$ }     'IMPOSSIBLE'    { TokKeyword KwIMPOSSIBLE $$ }+    'ETA'           { TokKeyword KwETA $$ }     'COMPILED'      { TokKeyword KwCOMPILED $$ }     'COMPILED_DATA' { TokKeyword KwCOMPILED_DATA $$ }     'COMPILED_TYPE' { TokKeyword KwCOMPILED_TYPE $$ }+    'quoteGoal'     { TokKeyword KwQuoteGoal $$ }+    'quote'         { TokKeyword KwQuote $$ }      setN	{ TokSetN $$ }     tex		{ TokTeX $$ }@@ -164,12 +169,17 @@     | 'Prop'	    { TokKeyword KwProp $1 }     | 'Set'	    { TokKeyword KwSet $1 }     | 'forall'	    { TokKeyword KwForall $1 }+    | 'syntax'      { TokKeyword KwSyntax $1 }     | 'OPTIONS'	    { TokKeyword KwOPTIONS $1 }     | 'BUILTIN'     { TokKeyword KwBUILTIN $1 }     | 'IMPORT'      { TokKeyword KwIMPORT $1 }     | 'COMPILED'    { TokKeyword KwCOMPILED $1 }     | 'COMPILED_DATA'{ TokKeyword KwCOMPILED_DATA $1 }     | 'COMPILED_TYPE'{ TokKeyword KwCOMPILED_TYPE $1 }+    | 'IMPOSSIBLE'    { TokKeyword KwIMPOSSIBLE $1 }+    | 'ETA'           { TokKeyword KwETA $1 }+    | 'quoteGoal'     { TokKeyword KwQuoteGoal $1 }+    | 'quote'         { TokKeyword KwQuote $1 }      | setN	    { TokSetN $1 }     | tex	    { TokTeX $1 }@@ -282,17 +292,40 @@     : Id SpaceIds { $1 : $2 }     | Id	  { [$1] } +{- UNUSED -- Space separated list of one or more identifiers, some of which may -- be surrounded by braces.-HiddenIds :: { [(Hiding, Name)] }+HiddenIds :: { [Arg Name] } HiddenIds-    : Id HiddenIds               { (NotHidden, $1) : $2 }-    | Id	                 { [(NotHidden, $1)] }-    | '{' SpaceIds '}' HiddenIds { map ((,) Hidden) $2 ++ $4 }-    | '{' SpaceIds '}'           { map ((,) Hidden) $2 }+    : Id HiddenIds               { defaultArg $1 : $2 }+    | Id	                 { [defaultArg $1] }+    | '{' SpaceIds '}' HiddenIds { map (Arg Hidden Relevant) $2 ++ $4 }+    | '{' SpaceIds '}'           { map (Arg Hidden Relevant) $2 }+-} --- Qualified operators are treated as identifiers, i.e. they have to be back--- quoted to appear infix.+-- A possibly dotted identifier.+MaybeDottedId :: { Arg Name }+MaybeDottedId +  : '.' Id { Arg NotHidden Irrelevant $2 }+  | Id     { defaultArg $1 }++-- Space separated list of one or more possibly dotted identifiers.+MaybeDottedIds :: { [Arg Name] }+MaybeDottedIds+    : MaybeDottedId MaybeDottedIds { $1 : $2 }+    | MaybeDottedId                { [$1] }++-- Space separated list of one or more identifiers, some of which may+-- be surrounded by braces or dotted.+ArgIds :: { [Arg Name] }+ArgIds+    : MaybeDottedId ArgIds          { $1 : $2 }+    | MaybeDottedId                 { [$1] }+    | '{' MaybeDottedIds '}' ArgIds { map hide $2 ++ $4 }+    | '{' MaybeDottedIds '}'        { map hide $2 }+    | '.' '{' SpaceIds '}' ArgIds   { map (Arg Hidden Irrelevant) $3 ++ $5 }+    | '.' '{' SpaceIds '}'          { map (Arg Hidden Irrelevant) $3 }+ QId :: { QName } QId : q_id  {% mkQName $1 }     | Id    { QName $1 }@@ -316,8 +349,10 @@     : BId SpaceBIds { $1 : $2 }     | BId	    { [$1] } --- Comma separated list of binding identifiers. Used in dependent--- function spaces: (x,y,z : Nat) -> ...+-- Space-separated list of binding identifiers. Used in dependent+-- function spaces: (x y z : Nat) -> ...+-- (Used to be comma-separated; hence the name)+-- QUESTION: Should this be replaced by SpaceBIds above? CommaBIds :: { [Name] } CommaBIds : Application {%     let getName (Ident (QName x)) = Just x@@ -363,10 +398,10 @@ -- Top level: Function types. Expr :: { Expr } Expr-    : TeleArrow Expr		{ Pi $1 $2 }-    | 'forall' LamBindings Expr	{ forallPi $2 $3 }-    | Application3 '->' Expr	{ Fun (fuseRange $1 $3) (RawApp (getRange $1) $1) $3 }-    | Expr1 %prec LOWEST	{ $1 }+  : TeleArrow Expr                      { Pi $1 $2 }+  | 'forall' ForallBindings Expr        { forallPi $2 $3 }+  | Application3 '->' Expr              { Fun (fuseRange $1 $3) (RawApp (getRange $1) $1) $3 }+  | Expr1 %prec LOWEST                  { $1 }  -- Level 1: Application Expr1  : WithExprs {% case $1 of@@ -395,6 +430,7 @@                                    }     | 'let' Declarations 'in' Expr { Let (fuseRange $1 $4) $2 $4 }     | Expr3			   { $1 }+    | 'quoteGoal' Id 'in' Expr     { QuoteGoal (getRange ($1,$4)) $2 $4}  Application3 :: { [Expr] } Application3@@ -409,6 +445,7 @@     | '_'				{ Underscore (getRange $1) Nothing }     | 'Prop'				{ Prop (getRange $1) }     | 'Set'				{ Set (getRange $1) }+    | 'quote'                           { Quote (getRange $1) }     | setN				{ SetN (getRange (fst $1)) (snd $1) }     | '{' Expr '}'			{ HiddenArg (fuseRange $1 $3) (unnamed $2) }     | '{' Id '=' Expr '}'		{ HiddenArg (fuseRange $1 $5) (named (show $2) $4) }@@ -450,11 +487,11 @@     | TypedBindings		   { [$1] }  --- A typed binding is either (x1,..,xn:A;..;y1,..,ym:B) or {x1,..,xn:A;..;y1,..,ym:B}.+-- A typed binding is either (x1 .. xn:A;..;y1 .. ym:B) or {x1 .. xn:A;..;y1 .. ym:B}. TypedBindings :: { TypedBindings } TypedBindings-    : '(' TBinds ')' { TypedBindings (fuseRange $1 $3) NotHidden $2 }-    | '{' TBinds '}' { TypedBindings (fuseRange $1 $3) Hidden    $2 }+    : '(' TBinds ')' { TypedBindings (fuseRange $1 $3) (Arg NotHidden Relevant $2) }+    | '{' TBinds '}' { TypedBindings (fuseRange $1 $3) (Arg Hidden    Relevant $2) }   -- A semicolon separated list of TypedBindings@@ -468,7 +505,7 @@ 	| Expr		   { [TNoBind $1] }  --- x1,..,xn:A+-- x1 .. xn:A TBind :: { TypedBinding } TBind : CommaBIds ':' Expr  { TBind (fuseRange $1 $3) (map mkBoundName_ $1) $3 } @@ -490,6 +527,7 @@       Left h  -> return ([ b | Right b <- init $1], h)     } +-- absurd lambda is represented by Left hiding LamBinds :: { [Either Hiding LamBinding] } LamBinds   : DomainFreeBinding LamBinds	{ map Right $1 ++ $2 }@@ -499,13 +537,27 @@   | '(' ')'                     { [Left NotHidden] }   | '{' '}'                     { [Left Hidden] } --- A possibly empty sequence of lambda bindings.-LamBindings0 :: { [LamBinding] }-LamBindings0-  : DomainFreeBinding LamBindings0	{ $1 ++ $2 }-  | TypedBindings LamBindings0	        { DomainFull $1 : $2 }-  |             		        { [] } +ForallBindings :: { [LamBinding] }+ForallBindings+  : TypedUntypedBindings1 '->' { $1 }++-- A non-empty sequence of possibly untyped bindings.+TypedUntypedBindings1 :: { [LamBinding] }+TypedUntypedBindings1 +  : DomainFreeBinding TypedUntypedBindings1 { $1 ++ $2 }+  | TypedBindings TypedUntypedBindings1	    { DomainFull $1 : $2 }+  | DomainFreeBinding                       { $1 }+  | TypedBindings                           { [DomainFull $1] }++-- A possibly empty sequence of possibly untyped bindings.+-- This is used as telescope in data and record decls.+TypedUntypedBindings :: { [LamBinding] }+TypedUntypedBindings+  : DomainFreeBinding TypedUntypedBindings { $1 ++ $2 }+  | TypedBindings TypedUntypedBindings	   { DomainFull $1 : $2 }+  |                                        { [] }+ -- A domain free binding is either x or {x1 .. xn} DomainFreeBinding :: { [LamBinding] } DomainFreeBinding@@ -536,20 +588,20 @@  ImportDirective2 :: { ImportDirective } ImportDirective2-    : UsingOrHiding RenamingDir	{ ImportDirective (fuseRange $1 $2) $1 $2 False }-    | RenamingDir		{ ImportDirective (getRange $1) (Hiding []) $1 False }-    | UsingOrHiding		{ ImportDirective (getRange $1) $1 [] False }+    : UsingOrHiding RenamingDir	{ ImportDirective (fuseRange (snd $1) (snd $2)) (fst $1) (fst $2) False }+    | RenamingDir		{ ImportDirective (getRange (snd $1)) (Hiding []) (fst $1) False }+    | UsingOrHiding		{ ImportDirective (getRange (snd $1)) (fst $1) [] False }     | {- empty -}		{ ImportDirective noRange (Hiding []) [] False } -UsingOrHiding :: { UsingOrHiding }+UsingOrHiding :: { (UsingOrHiding , Range) } UsingOrHiding-    : 'using' '(' CommaImportNames ')'   { Using $3 }+    : 'using' '(' CommaImportNames ')'   { (Using $3 , fuseRange $1 $4) } 	-- only using can have an empty list-    | 'hiding' '(' CommaImportNames1 ')' { Hiding $3 }+    | 'hiding' '(' CommaImportNames1 ')' { (Hiding $3 , fuseRange $1 $4) } -RenamingDir :: { [Renaming] }+RenamingDir :: { ([Renaming] , Range) } RenamingDir-    : 'renaming' '(' Renamings ')'	{ $3 }+    : 'renaming' '(' Renamings ')'	{ ($3 , fuseRange $1 $4) }  -- Renamings of the form 'x to y' Renamings :: { [Renaming] }@@ -572,6 +624,7 @@ ImportName : Id  	 { ImportedName $1 } 	   | 'module' Id { ImportedModule $2 } +-- Actually semi-colon separated CommaImportNames :: { [ImportedName] } CommaImportNames     : {- empty -}	{ [] }@@ -643,6 +696,7 @@     | ModuleMacro   { [$1] }     | Module	    { [$1] }     | Pragma	    { [$1] }+    | Syntax        { [$1] }   {--------------------------------------------------------------------------@@ -660,9 +714,10 @@ TypeSigs : SpaceIds ':' Expr { map (flip TypeSig $3) $1 }  -- A variant of TypeSigs where any sub-sequence of names can be marked--- as hidden using braces: {n1 n2} n3 n4 {n5} {n6} ... : Type.-HiddenTypeSigs :: { [(Hiding, Declaration)] }-HiddenTypeSigs : HiddenIds ':' Expr { map (id *** flip TypeSig $3) $1 }+-- as hidden or irrelevant using braces and dots: +-- {n1 .n2} n3 .n4 {n5} .{n6 n7} ... : Type.+ArgTypeSigs :: { [Arg Declaration] }+ArgTypeSigs : ArgIds ':' Expr { map (fmap (flip TypeSig $3)) $1 }  -- Function declarations. The left hand side is parsed as an expression to allow -- declarations like 'x::xs ++ ys = e', when '::' has higher precedence than '++'.@@ -675,15 +730,15 @@  -- Data declaration. Can be local. Data :: { Declaration }-Data : 'data' Id LamBindings0 ':' Expr 'where'+Data : 'data' Id TypedUntypedBindings ':' Expr 'where' 	    Constructors	{ Data (getRange ($1, $6, $7)) Inductive $2 (map addType $3) $5 $7 }-     | 'codata' Id LamBindings0 ':' Expr 'where'+     | 'codata' Id TypedUntypedBindings ':' Expr 'where' 	    Constructors	{ Data (getRange ($1, $6, $7)) CoInductive $2 (map addType $3) $5 $7 }   -- Record declarations. Record :: { Declaration }-Record : 'record' Id LamBindings0 ':' Expr 'where'+Record : 'record' Id TypedUntypedBindings ':' Expr 'where' 	    RecordDeclarations          { Record (getRange ($1, $6, $7)) $2 (fst $7) (map addType $3) $5 (snd $7) } @@ -699,8 +754,9 @@  -- Field declarations. Fields :: { [Declaration] }-Fields : 'field' HiddenTypeSignatures-            { let toField (h, TypeSig x t) = Field h x t in map toField $2 }+Fields : 'field' ArgTypeSignatures+            { let toField (Arg h rel (TypeSig x t)) = Field x (Arg h rel t) in map toField $2 }+--REM            { let toField (h, TypeSig x t) = Field h x t in map toField $2 }  -- Mutually recursive declarations. Mutual :: { Declaration }@@ -725,6 +781,34 @@ Primitive :: { Declaration } Primitive : 'primitive' TypeSignatures	{ Primitive (fuseRange $1 $2) $2 } +-- Syntax declaration (To declare eg. mixfix binders) +Syntax :: { Declaration }+Syntax : 'syntax' Id HoleNames '=' SimpleIds  {%+  case $2 of +    Name _ [_] -> case mkNotation $3 $5 of+      Left err -> parseError $ "malformed syntax declaration: " ++ err+      Right n -> return $ Syntax $2 n+    _ -> parseError "syntax declarations are allowed only for simple names (without holes)"+}++SimpleIds :: { [String] }+SimpleIds : SimpleId { [$1] }+          | SimpleIds SimpleId {$1 ++ [$2]}++HoleNames :: { [HoleName] }+HoleNames : HoleName { [$1] }+          | HoleNames HoleName {$1 ++ [$2]}++HoleName :: { HoleName }+HoleName : SimpleId { ExprHole $1}+         | '(' '\\' SimpleId '->' SimpleId ')' { LambdaHole $3 $5 }+-- Variable name hole to be implemented later. ++-- Discard the interval.+SimpleId :: { String }+SimpleId : id  { snd $1 } ++ -- Open Open :: { Declaration } Open : 'open' ModuleName OpenArgs ImportDirective {@@ -732,7 +816,7 @@     { m   = $2     ; es  = $3     ; dir = $4-    ; r   = getRange ($1, m, dir)+    ; r   = getRange ($1, m, es, dir)     } in     case es of     { []  -> Open r m dir@@ -748,9 +832,9 @@  -- Module instantiation ModuleMacro :: { Declaration }-ModuleMacro : 'module' Id LamBindings0 '=' Expr ImportDirective+ModuleMacro : 'module' Id TypedUntypedBindings '=' Expr ImportDirective 		    { ModuleMacro (getRange ($1, $5, $6)) $2 (map addType $3) $5 DontOpen $6 }-	    | 'open' 'module' Id LamBindings0 '=' Expr ImportDirective+	    | 'open' 'module' Id TypedUntypedBindings '=' Expr ImportDirective 		    { ModuleMacro (getRange ($1, $6, $7)) $3 (map addType $4) $6 DoOpen $7 }  -- Import@@ -762,7 +846,7 @@  -- Module Module :: { Declaration }-Module : 'module' Id LamBindings0 'where' Declarations0+Module : 'module' Id TypedUntypedBindings 'where' Declarations0 		    { Module (getRange ($1,$4,$5)) (QName $2) (map addType $3) $5 }  -- The top-level consist of a bunch of import and open followed by a top-level module.@@ -773,7 +857,7 @@  -- The top-level module can have a qualified name. TopModule :: { Declaration }-TopModule : 'module' ModuleName LamBindings0 'where' Declarations0+TopModule : 'module' ModuleName TypedUntypedBindings 'where' Declarations0 		    { Module (getRange ($1,$4,$5)) $2 (map addType $3) $5 }  Pragma :: { Declaration }@@ -791,6 +875,7 @@   | CompiledTypePragma { $1 }   | ImportPragma       { $1 }   | ImpossiblePragma   { $1 }+  | RecordEtaPragma    { $1 }  OptionsPragma :: { Pragma } OptionsPragma : '{-#' 'OPTIONS' PragmaStrings '#-}' { OptionsPragma (fuseRange $1 $4) $3 }@@ -815,6 +900,11 @@   : '{-#' 'COMPILED_DATA' PragmaName string PragmaStrings '#-}'     { CompiledDataPragma (fuseRange $1 $6) $3 (snd $4) $5 } +RecordEtaPragma :: { Pragma }+RecordEtaPragma+  : '{-#' 'ETA' PragmaName '#-}'+    { EtaPragma (fuseRange $1 $4) $3 }+ ImportPragma :: { Pragma } ImportPragma   : '{-#' 'IMPORT' string '#-}'@@ -843,17 +933,17 @@     : TypeSignatures1 semi TeX TypeSigs { reverse $4 ++ $1 }     | TeX TypeSigs			{ reverse $2 } --- A variant of TypeSignatures which uses HiddenTypeSigs instead of+-- A variant of TypeSignatures which uses ArgTypeSigs instead of -- TypeSigs.-HiddenTypeSignatures :: { [(Hiding, TypeSignature)] }-HiddenTypeSignatures-    : TeX vopen HiddenTypeSignatures1 TeX close   { reverse $3 }+ArgTypeSignatures :: { [Arg TypeSignature] }+ArgTypeSignatures+    : TeX vopen ArgTypeSignatures1 TeX close   { reverse $3 }  -- Inside the layout block.-HiddenTypeSignatures1 :: { [(Hiding, TypeSignature)] }-HiddenTypeSignatures1-    : HiddenTypeSignatures1 semi TeX HiddenTypeSigs { reverse $4 ++ $1 }-    | TeX HiddenTypeSigs		            { reverse $2 }+ArgTypeSignatures1 :: { [Arg TypeSignature] }+ArgTypeSignatures1+    : ArgTypeSignatures1 semi TeX ArgTypeSigs { reverse $4 ++ $1 }+    | TeX ArgTypeSigs		              { reverse $2 }  -- Constructors are type signatures. But constructor lists can be empty. Constructors :: { [Constructor] }@@ -935,7 +1025,7 @@ 	    ParseOk _ (TokId _) -> return () 	    _			-> fail $ "in the name " ++ s ++ ", the part " ++ x ++ " is not valid" -	-- we know that there aren't two Ids in a row+	-- we know that there are no two Ids in a row 	alternating (Hole : Hole : _) = False 	alternating (_ : xs)	      = alternating xs 	alternating []		      = True@@ -959,7 +1049,7 @@ -- | Converts lambda bindings to typed bindings. addType :: LamBinding -> TypedBindings addType (DomainFull b)	 = b-addType (DomainFree h x) = TypedBindings r h [TBind r [x] $ Underscore r Nothing]+addType (DomainFree h x) = TypedBindings r $ Arg h Relevant [TBind r [x] $ Underscore r Nothing]   where r = getRange x  -- | Check that an import directive doesn't contain repeated names
src/full/Agda/Syntax/Parser/Tokens.hs view
@@ -19,7 +19,7 @@ 	| KwHiding | KwUsing | KwRenaming | KwTo | KwPublic 	| KwOPTIONS | KwBUILTIN | KwLINE         | KwCOMPILED_DATA | KwCOMPILED_TYPE | KwCOMPILED | KwIMPORT-        | KwIMPOSSIBLE+        | KwIMPOSSIBLE | KwETA | KwQuoteGoal | KwQuote | KwSyntax     deriving (Eq, Show)  layoutKeywords :: [Keyword]
src/full/Agda/Syntax/Position.hs view
@@ -41,11 +41,12 @@   , tests   ) where -import Data.Generics (Data, Typeable)+import Data.Generics (Typeable, Data) import Data.List import Data.Function import Data.Set (Set, (\\)) import qualified Data.Set as Set+import Data.Int import Agda.Utils.QuickCheck import Control.Applicative import Control.Monad@@ -59,8 +60,7 @@     Types and classes  --------------------------------------------------------------------------} --- | Represents a point in the input (file, position, line, col).--- Positions and line and column numbers start from 1.+-- | Represents a point in the input. -- -- If two positions have the same 'srcFile' and 'posPos' components, -- then the final two components should be the same as well, but since@@ -70,9 +70,13 @@ -- -- Note the invariant which positions have to satisfy: 'positionInvariant'. data Position = Pn { srcFile :: Maybe AbsolutePath-                   , posPos  :: !Int-		   , posLine :: !Int-		   , posCol  :: !Int+                     -- ^ File.+                   , posPos  :: !Int32+                     -- ^ Position.+		   , posLine :: !Int32+                     -- ^ Line number, counting from 1.+		   , posCol  :: !Int32+                     -- ^ Column number, counting from 1. 		   }     deriving (Typeable, Data) @@ -101,7 +105,7 @@  -- | The length of an interval, assuming that the start and end -- positions are in the same file.-iLength :: Interval -> Int+iLength :: Interval -> Int32 iLength i = posPos (iEnd i) - posPos (iStart i)  -- | A range is a list of intervals. The intervals should be@@ -136,6 +140,9 @@ instance (HasRange a, HasRange b, HasRange c) => HasRange (a,b,c) where     getRange (x,y,z) = getRange (x,(y,z)) +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)))+ instance HasRange a => HasRange (Maybe a) where     getRange Nothing  = noRange     getRange (Just a) = getRange a@@ -243,7 +250,7 @@ -- -- Precondition: The string must not be too long for the interval. takeI :: String -> Interval -> Interval-takeI s i | length s > iLength i = __IMPOSSIBLE__+takeI s i | genericLength s > iLength i = __IMPOSSIBLE__           | otherwise = i { iEnd = movePosByString (iStart i) s }  -- | Removes the interval corresponding to the given string from the@@ -252,7 +259,7 @@ -- -- Precondition: The string must not be too long for the interval. dropI :: String -> Interval -> Interval-dropI s i | length s > iLength i = __IMPOSSIBLE__+dropI s i | genericLength s > iLength i = __IMPOSSIBLE__           | otherwise = i { iStart = movePosByString (iStart i) s }  -- | Converts two positions to a range.@@ -331,17 +338,17 @@ -- 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.-iPositions :: Interval -> Set Int+iPositions :: Interval -> 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.-rPositions :: Range -> Set Int+rPositions :: Range -> Set Int32 rPositions (Range is) = Set.unions (map iPositions is)  -- | Constructs the least interval containing all the elements in the -- set.-makeInterval :: Set Int -> Set Int+makeInterval :: Set Int32 -> Set Int32 makeInterval s   | Set.null s = Set.empty   | otherwise  = Set.fromList [Set.findMin s .. Set.findMax s]@@ -353,8 +360,8 @@ prop_noRange = rangeInvariant noRange  prop_takeI_dropI i =-  forAll (choose (0, iLength i)) $ \n ->-    let s = replicate n ' '+  forAll (choose (0, toInteger $ iLength i)) $ \n ->+    let s = genericReplicate n ' '         t = takeI s i         d = dropI s i     in
src/full/Agda/Syntax/Scope/Base.hs view
@@ -312,6 +312,10 @@ allNamesInScope :: InScope a => Scope -> ThingsInScope a allNamesInScope = namesInScope [scopePublic, scopeImported, scopePrivate] +-- | Returns the scope's non-private names.+exportedNamesInScope :: InScope a => Scope -> ThingsInScope a+exportedNamesInScope = namesInScope [scopePublic, scopeImported]+ namesInScope :: InScope a => [Scope -> NameSpace] -> Scope -> ThingsInScope a namesInScope fs s =   foldr1 mergeNames [ inNameSpace (f s) | f <- fs ]@@ -456,7 +460,7 @@  -- | Look up a name in the scope scopeLookup :: forall a. InScope a => C.QName -> ScopeInfo -> [a]-scopeLookup q scope = findName q root ++ imports+scopeLookup q scope = nub $ findName q root ++ imports   where     this    = scopeCurrent scope     current = moduleScope this@@ -491,8 +495,13 @@      findName (C.QName x)  s = lookupName x s     findName (C.Qual x q) s = do-      m <- amodName <$> lookupName x s-      findName q (restrictPrivate $ moduleScope m)+        m <- nub $ mods ++ defs -- record types will appear bot as a mod and a def+        Just s' <- return $ Map.lookup m (scopeModules scope)+        findName q (restrictPrivate s')+      where+        mods = amodName <$> lookupName x s+        -- Qualified constructors are qualified by their datatype rather than a module+        defs = mnameFromList . qnameToList . anameName <$> lookupName x s   -- * Inverse look-up 
src/full/Agda/Syntax/Scope/Monad.hs view
@@ -9,6 +9,7 @@ import Control.Applicative import Control.Monad hiding (mapM) import Control.Monad.Writer hiding (mapM)+import Control.Monad.State hiding (mapM) import Data.Map (Map) import Data.Traversable import Data.List@@ -17,6 +18,7 @@ import Agda.Syntax.Common import Agda.Syntax.Position import Agda.Syntax.Fixity+import Agda.Syntax.Notation import Agda.Syntax.Abstract.Name as A import Agda.Syntax.Concrete as C import Agda.Syntax.Scope.Base@@ -60,6 +62,14 @@   setCurrentModule old   return x +withCurrentModule' :: (MonadTrans t, Monad (t ScopeM)) => A.ModuleName -> t ScopeM a -> t ScopeM a+withCurrentModule' new action = do+  old <- lift getCurrentModule+  lift $ setCurrentModule new+  x   <- action+  lift $ setCurrentModule old+  return x+ getNamedScope :: A.ModuleName -> ScopeM Scope getNamedScope m = do   scope <- getScope@@ -127,7 +137,6 @@       PrivateNS  -> (id, f, id)       ImportedNS -> (id, id, f) --- | Set context precedence setContextPrecedence :: Precedence -> ScopeM () setContextPrecedence p = modifyScopeInfo $ \s -> s { scopePrecedence = p } @@ -159,17 +168,17 @@ -- * Names  -- | Create a fresh abstract name from a concrete name.-freshAbstractName :: Fixity -> C.Name -> ScopeM A.Name+freshAbstractName :: Fixity' -> C.Name -> ScopeM A.Name freshAbstractName fx x = do   i <- fresh   return $ A.Name i x (getRange x) fx  -- | @freshAbstractName_ = freshAbstractName defaultFixity@ freshAbstractName_ :: C.Name -> ScopeM A.Name-freshAbstractName_ = freshAbstractName defaultFixity+freshAbstractName_ = freshAbstractName defaultFixity'  -- | Create a fresh abstract qualified name.-freshAbstractQName :: Fixity -> C.Name -> ScopeM A.QName+freshAbstractQName :: Fixity' -> C.Name -> ScopeM A.QName freshAbstractQName fx x = do   y <- freshAbstractName fx x   m <- getCurrentModule@@ -212,7 +221,7 @@     ms            -> typeError $ AmbiguousModule x (map amodName ms)  -- | Get the fixity of a name. The name is assumed to be in scope.-getFixity :: C.QName -> ScopeM Fixity+getFixity :: C.QName -> ScopeM Fixity' getFixity x = do   r <- resolveName x   case r of@@ -221,7 +230,7 @@     ConstructorName ds       | null fs        -> __IMPOSSIBLE__       | allEqual fs    -> return $ head fs-      | otherwise      -> return defaultFixity+      | otherwise      -> return defaultFixity'       where         fs = map (nameFixity . qnameName . anameName) ds     UnknownName        -> __IMPOSSIBLE__@@ -244,9 +253,12 @@     ConstructorName [] -> __IMPOSSIBLE__     ConstructorName ds       | kind == ConName && all ((==ConName) . anameKind) ds -> return [ AbsName y kind ]-      | otherwise -> typeError $ ClashingDefinition (C.QName x) $ anameName (head ds) -- TODO: head+      | otherwise -> typeError $ ClashingDefinition (C.QName x) $ anameName (head' ds)     UnknownName        -> return [AbsName y kind]   modifyCurrentScope $ addNamesToScope (localNameSpace acc) x ys+  where+    head' []    = {- ' -} __IMPOSSIBLE__+    head' (x:_) = x  -- | Bind a module name. bindModule :: Access -> C.Name -> A.ModuleName -> ScopeM ()@@ -268,60 +280,25 @@     stripN m  = Map.filterWithKey (const . notNoName) m     notNoName = not . isNoName --- | @renamedCanonicalNames old new s@ returns a renaming replacing all---   (abstract) names @old.m.x@ with @new.m.x@. Any other names are left---   untouched.-renamedCanonicalNames :: ModuleName -> ModuleName -> Scope ->-                       ScopeM (Map A.QName A.QName, Map A.ModuleName A.ModuleName)-renamedCanonicalNames old new s = (,) <$> renamedNames names <*> renamedMods mods-  where-    ns    = allThingsInScope s-    names = nsNames ns-    mods  = nsModules ns--    renamedNames ds = Map.fromList <$> zip xs <$> mapM renName xs-      where-        xs = filter (`isInModule` old) $ map anameName $ concat $ Map.elems ds--    renamedMods ms = Map.fromList <$> zip xs <$> mapM renMod xs-      where-        xs = filter (`isSubModuleOf` old) $ map amodName $ concat $ Map.elems ms--    -- Change a binding M.x -> old.M'.y to M.x -> new.M'.y-    renName :: A.QName -> ScopeM A.QName-    renName y = do-      i <- fresh-      return . qualifyQ new . dequalify-             $ y { qnameName = (qnameName y) { nameId = i } }-      where-        dequalify = A.qnameFromList . drop (size old) . A.qnameToList--    -- Change a binding M.x -> old.M'.y to M.x -> new.M'.y-    renMod :: A.ModuleName -> ScopeM A.ModuleName-    renMod = return . qualifyM new . dequalify-      where-        dequalify = A.mnameFromList . drop (size old) . A.mnameToList- type Ren a = Map a a-type Out = [Either (Ren A.ModuleName) (Ren A.QName)]-type WSM = WriterT Out ScopeM+type Out = (Ren A.ModuleName, Ren A.QName)+type WSM = StateT Out ScopeM  -- | 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.-copyScope :: A.ModuleName -> Scope -> ScopeM (Scope, Ren A.ModuleName, Ren A.QName)-copyScope new s = do-  s0 <- getNamedScope new-  (s', rho) <- runWriterT $ mapScopeM copyD copyM s-  let s'' = s' { scopeName    = scopeName s0-               , scopeParents = scopeParents s0-               }-  return (s'', modRenaming rho, defRenaming rho)+copyScope :: A.ModuleName -> Scope -> ScopeM (Scope, (Ren A.ModuleName, Ren A.QName))+copyScope new s = runStateT (copy new s) (Map.empty, Map.empty)   where+    copy new s = do+      s0 <- lift $ getNamedScope new+      s' <- mapScopeM copyD copyM s+      return $ s' { scopeName    = scopeName s0+                  , scopeParents = scopeParents s0+                  }+     new' = killRange new     old  = scopeName s-    modRenaming rho = Map.unions [ m | Left m  <- rho ]-    defRenaming rho = Map.unions [ m | Right m <- rho ]      copyM :: NameSpaceId -> ModulesInScope -> WSM ModulesInScope     copyM ImportedNS ms = return ms@@ -341,33 +318,49 @@       x <- f $ anameName d       return d { anameName = x } +    addName x y = addNames (Map.singleton x y)+    addMod  x y = addMods (Map.singleton x y)++    addNames rd' = modify $ \(rm, rd) -> (rm, Map.union rd rd')+    addMods  rm' = modify $ \(rm, rd) -> (Map.union rm rm', rd)++    findName x = Map.lookup x <$> gets snd+    findMod  x = Map.lookup x <$> gets fst+     -- Change a binding M.x -> old.M'.y to M.x -> new.M'.y     renName :: A.QName -> WSM A.QName     renName x = do-      i <- lift fresh-      let y = qualifyQ new' . dequalify-            $ x { qnameName = (qnameName x) { nameId = i } }-      tell [Right $ Map.singleton x y]-      return y+      -- Check if we've seen it already+      my <- findName x+      case my of+        Just y -> return y+        Nothing -> do+          -- First time, generate a fresh name for it+          i <- lift fresh+          let y = qualifyQ new' . dequalify+                $ x { qnameName = (qnameName x) { nameId = i } }+          addName x y+          return y       where         dequalify = A.qnameFromList . drop (size old) . A.qnameToList      -- Change a binding M.x -> old.M'.y to M.x -> new.M'.y     renMod :: A.ModuleName -> WSM A.ModuleName     renMod x = do--      -- Create the name of the new module-      let y = qualifyM new' $ dequalify x-      tell [Left $ Map.singleton x y]+      -- Check if we've seen it already+      my <- findMod x+      case my of+        Just y -> return y+        Nothing -> do+          -- Create the name of the new module+          let y = qualifyM new' $ dequalify x+          addMod x y -      -- We need to copy the contents of included modules recursively-      (s, renM, renD) <- lift $ do-        createModule y-        s0 <- getNamedScope x-        withCurrentModule y $ copyScope y s0-      lift $ modifyNamedScope y (const s)-      tell [Left renM, Right renD]-      return y+          -- We need to copy the contents of included modules recursively+          s0 <- lift $ createModule y >> getNamedScope x+          s  <- withCurrentModule' y $ copy y s0+          lift $ modifyNamedScope y (const s)+          return y       where         dequalify = A.mnameFromList . drop (size old) . A.mnameToList @@ -378,13 +371,22 @@   xs <- filterM doesntExist names   reportSLn "scope.import.apply" 20 $ "non existing names: " ++ show xs   case xs of-    []  -> return $ applyImportDirective dir scope+    []  -> case targetNames \\ nub targetNames of+      []  -> return $ applyImportDirective dir scope+      dup -> typeError $ DuplicateImports m dup     _   -> typeError $ ModuleDoesntExport m xs   where     names :: [ImportedName]     names = map renFrom (renaming dir) ++ case usingOrHiding dir of       Using  xs -> xs       Hiding xs -> xs++    targetNames :: [ImportedName]+    targetNames = map renName (renaming dir) ++ case usingOrHiding dir of+      Using xs -> xs+      Hiding{} -> []+      where+        renName r = (renFrom r) { importedName = renTo r }      doesntExist (ImportedName x) =       case Map.lookup x (allNamesInScope scope :: ThingsInScope AbstractName) of
src/full/Agda/Syntax/Strict.hs view
@@ -2,7 +2,7 @@  module Agda.Syntax.Strict where -import Data.Generics+import Data.Generics (everything)  import Agda.Syntax.Common import Agda.Syntax.Internal@@ -13,6 +13,7 @@ #include "../undefined.h" import Agda.Utils.Impossible +-- | @force@ is the recursive @const 0@ function, to force Haskell to evaluate. class Strict a where     force :: a -> Int @@ -27,6 +28,7 @@ 	Fun a b    -> force (a,b) 	Sort s	   -> force s 	MetaV _ ts -> force ts+        DontCare   -> 0  instance Strict Type where     force (El s t) = force (s,t)
src/full/Agda/Syntax/Translation/AbstractToConcrete.hs view
@@ -11,6 +11,7 @@ -} module Agda.Syntax.Translation.AbstractToConcrete     ( ToConcrete(..)+    , toConcreteCtx     , abstractToConcrete_     , runAbsToCon     , RangeAndPragma(..)@@ -196,11 +197,11 @@ -- | If a name is defined with a fixity that differs from the default, we have --   to generate a fixity declaration for that name. withInfixDecl :: DefInfo -> C.Name -> AbsToCon [C.Declaration] -> AbsToCon [C.Declaration]-withInfixDecl i x m-    | defFixity i == defaultFixity = m-    | otherwise                    = do-        ds <- m-        return $ C.Infix (defFixity i) [x] : ds+withInfixDecl i x m = do+  ds <- m+  return $ fixDecl ++ synDecl ++ ds+ where fixDecl = [C.Infix (theFixity $ defFixity i) [x] | theFixity (defFixity i) /= defaultFixity]+       synDecl = [C.Syntax x (theNotation (defFixity i))]  withInfixDecls :: [(DefInfo, C.Name)] -> AbsToCon [C.Declaration] -> AbsToCon [C.Declaration] withInfixDecls = foldr (.) id . map (uncurry withInfixDecl)@@ -261,10 +262,10 @@             reorder (x,(y,z)) = (x,y,z)  instance ToConcrete a c => ToConcrete (Arg a) (Arg c) where-    toConcrete (Arg h@Hidden    x) = Arg h <$> toConcreteCtx TopCtx x-    toConcrete (Arg h@NotHidden x) = Arg h <$> toConcrete x+    toConcrete (Arg h@Hidden    r x) = Arg h r <$> toConcreteCtx TopCtx x+    toConcrete (Arg h@NotHidden r x) = Arg h r <$> toConcrete x -    bindToConcrete (Arg h x) ret = bindToConcreteCtx (hiddenArgumentCtx h) x $ ret . Arg h+    bindToConcrete (Arg h r x) ret = bindToConcreteCtx (hiddenArgumentCtx h) x $ ret . Arg h r  instance ToConcrete a c => ToConcrete (Named name a) (Named name c) where     toConcrete (Named n x) = Named n <$> toConcrete x@@ -357,10 +358,11 @@         bracket piBrackets         $ do a' <- toConcreteCtx FunctionSpaceDomainCtx a              b' <- toConcreteCtx TopCtx b-             return $ C.Fun (getRange i) (mkArg a') b'+             return $ C.Fun (getRange i) (addDot a' $ mkArg a') b'         where-            mkArg (Arg Hidden    e) = HiddenArg (getRange e) (unnamed e)-            mkArg (Arg NotHidden e) = e+            addDot a e = if (argRelevance a == Irrelevant) then Dot (getRange a) e else e+            mkArg (Arg Hidden    r e) = HiddenArg (getRange e) (unnamed e)+            mkArg (Arg NotHidden r e) = e      toConcrete (A.Set i 0)  = return $ C.Set (getRange i)     toConcrete (A.Set i n)  = return $ C.SetN (getRange i) n@@ -384,6 +386,16 @@      toConcrete (A.ScopedExpr _ e) = toConcrete e +    toConcrete (A.QuoteGoal i x e) =+      bracket lamBrackets $+        bindToConcrete x $ \ x' -> do+            e' <- toConcrete e+            return $ C.QuoteGoal (getRange i) x' e'+    toConcrete (A.Quote i) = return $ C.Quote (getRange i)++    -- Andreas, 2010-09-21 abuse C.Underscore to print irrelevant things+    toConcrete (A.DontCare) = return $ C.Underscore noRange Nothing+ -- Binder instances -------------------------------------------------------  instance ToConcrete A.LamBinding C.LamBinding where@@ -391,9 +403,9 @@     bindToConcrete (A.DomainFull b)   ret = bindToConcrete b $ ret . C.DomainFull  instance ToConcrete A.TypedBindings C.TypedBindings where-    bindToConcrete (A.TypedBindings r h bs) ret =+    bindToConcrete (A.TypedBindings r bs) ret =         bindToConcrete bs $ \bs ->-        ret (C.TypedBindings r h bs)+        ret (C.TypedBindings r bs)  instance ToConcrete A.TypedBinding C.TypedBinding where     bindToConcrete (A.TBind r xs e) ret =@@ -413,20 +425,46 @@                               e C.NoWhere                 ]     bindToConcrete (LetApply i x tel y es _ _) ret = do-      x  <- unsafeQNameToName <$> toConcrete x-      y  <- toConcrete y+      x' <- unqualify <$> toConcrete x+      y' <- toConcrete y       bindToConcrete tel $ \tel -> do-      es <- toConcrete es-      let r = fuseRange y es-      ret [ C.ModuleMacro (getRange i) x tel-                  (foldl (C.App r) (C.Ident y) es) DontOpen-                  (ImportDirective r (Hiding []) [] False)-          ]+      es' <- toConcrete es+      let r = fuseRange y' es'+          open = maybe DontOpen id $ minfoOpenShort i+          dir  = maybe (ImportDirective r (Hiding []) [] False) id $ minfoDirective i+      -- This is no use since toAbstract LetDefs is in localToAbstract.+      local (openModule' x dir id) $+        ret [ C.ModuleMacro (getRange i) x' tel+                  (foldl (C.App r) (C.Ident y') es') open dir ]     bindToConcrete (LetOpen i x) ret = do-      x <- toConcrete x-      ret [ C.Open (getRange i) x defaultImportDir ]+      x' <- toConcrete x+      let dir = maybe defaultImportDir id $ minfoDirective i+      local (openModule' x dir restrictPrivate) $+            ret [ C.Open (getRange i) x' dir ] +data AsWhereDecls = AsWhereDecls [A.Declaration] +instance ToConcrete AsWhereDecls WhereClause where+  bindToConcrete (AsWhereDecls []) ret = ret C.NoWhere+  bindToConcrete (AsWhereDecls ds@[Section _ am _ _]) ret = do+    ds' <- toConcrete ds+    cm  <- unqualify <$> lookupModule am+    let wh' = (if isNoName cm then AnyWhere else SomeWhere cm) $ ds'+    local (openModule' am defaultImportDir id) $ ret wh'+  bindToConcrete (AsWhereDecls ds) ret = ret . AnyWhere =<< toConcrete ds++openModule' :: A.ModuleName -> ImportDirective -> (Scope -> Scope) -> Env -> Env+openModule' x dir restrict env = env{currentScope = sInfo{scopeModules = mods'}}+  where sInfo = currentScope env+        amod  = scopeCurrent sInfo+        mods  = scopeModules sInfo+        news  = setScopeAccess PrivateNS+                $ applyImportDirective dir+                $ maybe emptyScope restrict+                $ Map.lookup x mods+        mods' = Map.update (Just . (`mergeScope` news)) amod mods++ -- Declaration instances --------------------------------------------------  instance ToConcrete [A.Declaration] [C.Declaration] where@@ -467,17 +505,19 @@     x'  <- unsafeQNameToName <$> toConcrete x     return $ TypeSig x' t' : concat cs' -  toConcrete (TypeAndDef (Axiom _ x t) (DataDef i _ ind bs cs)) =+  toConcrete (TypeAndDef (Axiom _ x t) (DataDef i _ bs cs)) =     withAbstractPrivate i $     bindToConcrete tel $ \tel' -> do       t'       <- toConcreteCtx TopCtx t0       (x',cs') <- (unsafeQNameToName -*- id) <$> toConcrete (x, map Constr cs)-      return [ C.Data (getRange i) ind x' tel' t' cs' ]+      return [ C.Data (getRange i) Inductive x' tel' t' cs' ]     where       (tel, t0) = mkTel (length bs) t+      mkTel n (ScopedExpr _ t) = mkTel n t       mkTel 0 t            = ([], t)       mkTel n (A.Pi _ b t) = (b++) -*- id $ mkTel (n - 1) t       mkTel _ _            = __IMPOSSIBLE__+--      mkTel n t            = error $ "mkTel " ++ show n ++ " " ++ show t    toConcrete (TypeAndDef (Axiom _ x t) (RecDef  i _ c bs _ cs)) =     withAbstractPrivate i $@@ -508,11 +548,8 @@ instance ToConcrete A.Clause [C.Declaration] where   toConcrete (A.Clause lhs rhs wh) =       bindToConcrete lhs $ \(C.LHS p wps _ _) -> do+      bindToConcrete (AsWhereDecls wh)  $ \wh' -> do           (rhs', eqs, with, wcs) <- toConcreteCtx TopCtx rhs-          ds         <- toConcrete wh-          let wh' = case ds of-                []  -> C.NoWhere-                _   -> C.AnyWhere ds           return $ FunClause (C.LHS p wps eqs with) rhs' wh' : wcs  instance ToConcrete A.Declaration [C.Declaration] where@@ -526,12 +563,12 @@       t' <- toConcreteCtx TopCtx t       return [C.Postulate (getRange i) [C.TypeSig x' t']] -  toConcrete (A.Field i h x t) = do+  toConcrete (A.Field i x t) = do     x' <- unsafeQNameToName <$> toConcrete x     withAbstractPrivate i $       withInfixDecl i x'  $ do       t' <- toConcreteCtx TopCtx t-      return [C.Field h x' t']+      return [C.Field x' t']    toConcrete (A.Primitive i x t) = do     x' <- unsafeQNameToName <$> toConcrete x@@ -567,14 +604,18 @@     bindToConcrete tel $ \tel -> do     es <- toConcrete es     let r = fuseRange y es+        open = maybe DontOpen id $ minfoOpenShort i+        dir  = maybe (ImportDirective r (Hiding []) [] False) id $ minfoDirective i     return [ C.ModuleMacro (getRange i) x tel-                (foldl (C.App r) (C.Ident y) es) DontOpen-                (ImportDirective r (Hiding []) [] False)+                (foldl (C.App r) (C.Ident y) es) open+                                                 dir            ]    toConcrete (A.Import i x) = do     x <- toConcrete x-    return [ C.Import (getRange i) x Nothing DontOpen defaultImportDir ]+    let open = maybe DontOpen id $ minfoOpenShort i+        dir  = maybe defaultImportDir id $ minfoDirective i+    return [ C.Import (getRange i) x Nothing open dir]    toConcrete (A.Pragma i p)     = do     p <- toConcrete $ RangeAndPragma (getRange i) p@@ -601,6 +642,7 @@         A.CompiledPragma x hs -> do           x <- toConcrete x           return $ C.CompiledPragma r x hs+        A.EtaPragma x -> C.EtaPragma r <$> toConcrete x  -- Left hand sides -------------------------------------------------------- @@ -687,7 +729,7 @@         HdVar n | isNoName n -> mdefault                 | otherwise  -> do           x <- toConcrete n-          doCName (nameFixity n) x args'+          doCName (theFixity $ nameFixity n) x args'         HdDef qn -> doQName qn args'         HdCon qn -> doQName qn args'     | otherwise -> mdefault@@ -695,13 +737,13 @@    isNoName x = C.isNoName $ A.nameConcrete x -  notHidden (Arg h _) = h == NotHidden+  notHidden a = argHiding a == NotHidden    -- qualified names can't use mixfix syntax   doQName qn as = do     x <- toConcrete qn     case x of-      C.QName x -> doCName (nameFixity $ qnameName qn) x as+      C.QName x -> doCName (theFixity $ nameFixity $ qnameName qn) x as       _         -> mdefault    -- fall-back (wrong number of arguments or no holes)
src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs view
@@ -31,13 +31,16 @@ import qualified Data.Map as Map  import Agda.Syntax.Concrete as C hiding (topLevelModuleName)+import Agda.Syntax.Concrete.Operators import Agda.Syntax.Abstract as A import Agda.Syntax.Position import Agda.Syntax.Common import Agda.Syntax.Info import Agda.Syntax.Concrete.Definitions as C import Agda.Syntax.Concrete.Operators+import Agda.Syntax.Concrete.Pretty import Agda.Syntax.Fixity+import Agda.Syntax.Notation import Agda.Syntax.Scope.Base import Agda.Syntax.Scope.Monad import Agda.Syntax.Strict@@ -54,11 +57,46 @@ import Agda.Utils.Tuple import Agda.Utils.List import Agda.Utils.Fresh+import Agda.Utils.Pretty  #include "../../undefined.h" import Agda.Utils.Impossible  +-- moved here to reduce the probability of line number change+-- in C.ImpossiblePragma  (test/fail/Impossible.agda)+instance ToAbstract C.Pragma [A.Pragma] where+    toAbstract (C.ImpossiblePragma _) = __IMPOSSIBLE__+    toAbstract (C.OptionsPragma _ opts) = return [ A.OptionsPragma opts ]+    toAbstract (C.CompiledTypePragma _ x hs) = do+      e <- toAbstract $ OldQName x+      case e of+        A.Def x -> return [ A.CompiledTypePragma x hs ]+        _       -> fail $ "Bad compiled type: " ++ show x  -- TODO: error message+    toAbstract (C.CompiledDataPragma _ x hs hcs) = do+      e <- toAbstract $ OldQName x+      case e of+        A.Def x -> return [ A.CompiledDataPragma x hs hcs ]+        _       -> fail $ "Not a datatype: " ++ show x  -- TODO: error message+    toAbstract (C.CompiledPragma _ x hs) = do+      e <- toAbstract $ OldQName x+      y <- case e of+            A.Def x -> return x+            A.Con _ -> fail "Use COMPILED_DATA for constructors" -- TODO+            _       -> __IMPOSSIBLE__+      return [ A.CompiledPragma y hs ]+    toAbstract (C.BuiltinPragma _ b e) = 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+      case e of+        A.Def x -> return [ A.EtaPragma x ]+        _       -> fail "Bad ETA pragma"+ {--------------------------------------------------------------------------     Exceptions  --------------------------------------------------------------------------}@@ -86,11 +124,11 @@  lhsArgs :: C.Pattern -> (C.Name, [NamedArg C.Pattern]) lhsArgs p = case appView p of-    Arg _ (Named _ (IdentP (C.QName x))) : ps -> (x, ps)+    Arg _ _ (Named _ (IdentP (C.QName x))) : ps -> (x, ps)     _                                         -> __IMPOSSIBLE__     where-        mkHead    = Arg NotHidden . unnamed-        notHidden = Arg NotHidden . unnamed+        mkHead    = Arg NotHidden Relevant . unnamed+        notHidden = Arg NotHidden Relevant . unnamed         appView p = case p of             AppP p arg    -> appView p ++ [arg]             OpAppP _ x ps -> mkHead (IdentP $ C.QName x) : map notHidden ps@@ -152,12 +190,11 @@     notField NiceField{} = False     notField _           = True -    build (NiceField r f _ _ h x e : fs) = C.Pi [C.TypedBindings r h-                                                  [C.TBind r [BName x f] e]-                                                ] $ build fs+    build (NiceField r f _ _ x (Arg h rel e) : fs) = +        C.Pi [C.TypedBindings r $ Arg h rel [C.TBind r [BName x f] e]] $ build fs       where r = getRange x     build (d : fs)                     = C.Let noRange (notSoNiceDeclarations [d]) $ build fs-    build []                           = C.Prop noRange+    build []                           = C.SetN noRange 0 -- todo: nicer  checkModuleMacro apply r p x tel m args open dir = withLocalVars $ do     notPublicWithoutOpen open dir@@ -177,13 +214,14 @@      (renD, renM) <- withCurrentModule m0 $ do       s  <- getNamedScope m1-      (s', renM, renD) <- copyScope m0 =<< getNamedScope m1+      (s', (renM, renD)) <- copyScope m0 =<< getNamedScope m1       s' <- applyImportDirectiveM (C.QName x) dir' s'       modifyCurrentScope $ const s'       printScope "mod.inst" 20 "copied source module"+      reportSLn "scope.mod.inst" 30 $ "renamings:\n  " ++ show renD ++ "\n  " ++ show renM       return (renD, renM)     bindModule p x m0-    printScope "mod.inst" 20 "after copying"+    printScope "mod.inst.copy.after" 20 "after copying"     case open of       DoOpen   -> openModule_ (C.QName x) dir       DontOpen -> return ()@@ -196,6 +234,8 @@              { minfoRange  = r              , minfoAsName = Nothing              , minfoAsTo   = renamingRange dir+             , minfoOpenShort = Just open+             , minfoDirective = Just dir              }  -- | The @public@ keyword must only be used together with @open@.@@ -347,12 +387,17 @@ freshQModule :: A.ModuleName -> C.Name -> ScopeM A.ModuleName freshQModule m x = A.qualifyM m . mnameFromList . (:[]) <$> freshAbstractName_ x +checkForModuleClash :: C.Name -> ScopeM ()+checkForModuleClash x = do+  ms <- scopeLookup (C.QName x) <$> getScope+  unless (null ms) $+    setCurrentRange (getRange x) $+    typeError $ ShadowedModule $+                map ((`withRangeOf` x) . amodName) ms+ instance ToAbstract NewModuleName A.ModuleName where   toAbstract (NewModuleName x) = do-    ms <- scopeLookup (C.QName x) <$> getScope-    unless (null ms) $ -      typeError $ ShadowedModule $-                  map ((`withRangeOf` x) . amodName) ms+    checkForModuleClash x     m <- getCurrentModule     y <- freshQModule m x     createModule y@@ -376,17 +421,45 @@  -- | Peel off 'C.HiddenArg' and represent it as an 'NamedArg'. mkNamedArg :: C.Expr -> NamedArg C.Expr-mkNamedArg (C.HiddenArg _ e) = Arg Hidden e-mkNamedArg e                 = Arg NotHidden $ unnamed e+mkNamedArg (C.HiddenArg _ e) = Arg Hidden    Relevant e+mkNamedArg e                 = Arg NotHidden Relevant $ unnamed e  -- | Peel off 'C.HiddenArg' and represent it as an 'Arg', throwing away any name.+mkArg' :: Relevance -> C.Expr -> Arg C.Expr+mkArg' r (C.HiddenArg _ e) = Arg Hidden    r $ namedThing e+mkArg' r e                 = Arg NotHidden r e++-- | By default, arguments are @Relevant@. mkArg :: C.Expr -> Arg C.Expr-mkArg (C.HiddenArg _ e) = Arg Hidden $ namedThing e-mkArg e                 = Arg NotHidden e+-- mkArg (C.Dot _ e) = mkArg' Irrelevant e +mkArg e           = mkArg' Relevant e  ++-- | Parse a possibly dotted C.Expr as A.Expr.  Bool = True if dotted.+toAbstractDot :: Precedence -> C.Expr -> ScopeM (A.Expr, Bool)+toAbstractDot prec e = do+    reportSLn "scope.irrelevance" 100 $ "toAbstractDot: " ++ (render $ pretty e)  +    traceCall (ScopeCheckExpr e) $ case e of+    -- annotateExpr e = ScopedExpr <scope from Monad> e+      C.Dot _ e -> do+        e <- toAbstractCtx prec e+        return (e, True)++      C.RawApp r es -> do+        e <- parseApplication es+        toAbstractDot prec e++      C.Paren _ e -> toAbstractDot TopCtx e++      e -> do +        e <- toAbstractCtx prec e+        return (e, False)+ instance ToAbstract C.Expr A.Expr where   toAbstract e =     traceCall (ScopeCheckExpr e) $ annotateExpr $ case e of+    -- annotateExpr e = ScopedExpr <scope from Monad> e+    -- Names       Ident x -> toAbstract (OldQName x) @@ -414,6 +487,15 @@         e <- parseApplication es         toAbstract e +{- Andreas, 2010-09-06 STALE COMMENT+  -- Dots are used in dot patterns and in irrelevant function space .A n -> B+  -- we propagate dots out from the head of applications+  +      C.Dot r e1 -> do+        t1 <- toAbstract e1+        return $ A.Dot t1+-}+   -- Application       C.App r e1 e2 -> do         e1 <- toAbstractCtx FunctionCtx e1@@ -443,12 +525,24 @@         where             mkLam b e = A.Lam (ExprRange $ fuseRange b e) b e -  -- Function types+-- Irrelevant non-dependent function type+       C.Fun r e1 e2 -> do+        Arg h rel (e0, dotted) <- fmapM (toAbstractDot FunctionSpaceDomainCtx) $ mkArg e1+        let e1 = Arg h (if dotted then Irrelevant else rel) e0+        e2 <- toAbstractCtx TopCtx e2+        let info = ExprRange r+        return $ A.Fun info e1 e2+  +{-+-- Other function types++      C.Fun r e1 e2 -> do         e1 <- toAbstractCtx FunctionSpaceDomainCtx $ mkArg e1         e2 <- toAbstractCtx TopCtx e2         let info = ExprRange r         return $ A.Fun info e1 e2+-}        e0@(C.Pi tel e) ->         localToAbstract tel $ \tel -> do@@ -478,19 +572,26 @@       C.Paren _ e -> toAbstractCtx TopCtx e    -- Pattern things-      C.As _ _ _ -> notAnExpression e       C.Dot _ _  -> notAnExpression e+      C.As _ _ _ -> notAnExpression e       C.Absurd _ -> notAnExpression e    -- Impossible things       C.ETel _   -> __IMPOSSIBLE__ +  -- Quoting+      C.QuoteGoal _ x e -> do+        x' <- toAbstract (NewName x)+        e' <- toAbstract e+        return $ A.QuoteGoal (ExprRange $ getRange e) x' e'+      C.Quote r -> return $ A.Quote (ExprRange r)+ instance ToAbstract C.LamBinding A.LamBinding where   toAbstract (C.DomainFree h x) = A.DomainFree h <$> toAbstract (NewName x)   toAbstract (C.DomainFull tb)  = A.DomainFull <$> toAbstract tb  instance ToAbstract C.TypedBindings A.TypedBindings where-  toAbstract (C.TypedBindings r h bs) = A.TypedBindings r h <$> toAbstract bs+  toAbstract (C.TypedBindings r bs) = A.TypedBindings r <$> toAbstract bs  instance ToAbstract C.TypedBinding A.TypedBinding where   toAbstract (C.TBind r xs t) = do@@ -521,7 +622,7 @@   printScope "module" 20 $ "after module " ++ show x   return res   where-    info = ModuleInfo r noRange Nothing+    info = ModuleInfo r noRange Nothing Nothing Nothing  newtype TopLevel a = TopLevel a @@ -582,8 +683,11 @@                                    { minfoRange  = r                                    , minfoAsName = Nothing                                    , minfoAsTo   = renamingRange dirs+                                   , minfoOpenShort = Nothing+                                   , minfoDirective = Just dirs                                    })-                                m]+                                m+                     ]              NiceModuleMacro r p a x tel e open dir | not (C.publicOpen dir) -> case appView e of               AppView (Ident m) args -> checkModuleMacro LetApply r p x tel m args open dir@@ -599,42 +703,19 @@             letToAbstract _ = notAValidLetBinding d              -- Named patterns not allowed in let definitions-            lambda e (Arg h (Named Nothing (A.VarP x))) = return $ A.Lam i (A.DomainFree h x) e+            lambda e (Arg h r (Named Nothing (A.VarP x))) = return $ A.Lam i (A.DomainFree h x) e                 where                     i = ExprRange (fuseRange x e)-            lambda e (Arg h (Named Nothing (A.WildP i))) =+            lambda e (Arg h r (Named Nothing (A.WildP i))) =                 do  x <- freshNoName (getRange i)                     return $ A.Lam i' (A.DomainFree h x) e                 where                     i' = ExprRange (fuseRange i e)             lambda _ _ = notAValidLetBinding d -instance ToAbstract C.Pragma [A.Pragma] where-    toAbstract (C.OptionsPragma _ opts) = return [ A.OptionsPragma opts ]-    toAbstract (C.CompiledTypePragma _ x hs) = do-      e <- toAbstract $ OldQName x-      case e of-        A.Def x -> return [ A.CompiledTypePragma x hs ]-        _       -> fail $ "Bad compiled type: " ++ show x  -- TODO: error message-    toAbstract (C.CompiledDataPragma _ x hs hcs) = do-      e <- toAbstract $ OldQName x-      case e of-        A.Def x -> return [ A.CompiledDataPragma x hs hcs ]-        _       -> fail $ "Not a datatype: " ++ show x  -- TODO: error message-    toAbstract (C.CompiledPragma _ x hs) = do-      e <- toAbstract $ OldQName x-      y <- case e of-            A.Def x -> return x-            A.Con _ -> fail "Use HASKELL_DATA for constructors" -- TODO-            _       -> __IMPOSSIBLE__-      return [ A.CompiledPragma y hs ]-    toAbstract (C.BuiltinPragma _ b e) = do-        e <- toAbstract e-        return [ A.BuiltinPragma b e ]-    toAbstract (C.ImportPragma _ i) = do-      addHaskellImport i-      return []-    toAbstract (C.ImpossiblePragma _) = __IMPOSSIBLE__+-- instance ToAbstract C.Pragma [A.Pragma] +-- moved higher up to reduce the probability of line number change+-- in C.ImpossiblePragma  (test/fail/Impossible.agda)  -- Only constructor names are bound by definitions. instance ToAbstract NiceDefinition Definition where@@ -648,7 +729,7 @@           return $ A.FunDef (mkDefInfo x f p a r) x' cs'      -- Data definitions-      C.DataDef r ind f p a x pars cons ->+      C.DataDef r f p a x pars cons ->         traceCall (ScopeCheckDefinition d) $         withLocalVars $ do @@ -661,10 +742,17 @@                   typeError $ DuplicateConstructors dups            pars <- toAbstract pars-          cons <- toAbstract (map Constr cons)           x'   <- toAbstract (OldName x)+          -- Create the module for the qualified constructors+          checkForModuleClash x -- disallow shadowing previously defined modules+          let m = mnameFromList $ qnameToList x'+          createModule m+          bindModule p x m  -- make it a proper module+          cons <- toAbstract (map (ConstrDecl m) cons)+          -- Open the module+          -- openModule_ (C.QName x) defaultImportDir{ publicOpen = True }           printScope "data" 20 $ "Checked data " ++ show x-          return $ A.DataDef (mkDefInfo x f p a r) x' ind pars cons+          return $ A.DataDef (mkDefInfo x f p a r) x' pars cons         where           conName (C.Axiom _ _ _ _ c _) = c           conName _ = __IMPOSSIBLE__@@ -673,23 +761,23 @@       C.RecDef r f p a x c pars fields ->         traceCall (ScopeCheckDefinition d) $         withLocalVars $ do+          -- Check that the generated module doesn't clash with a previously+          -- defined module+          checkForModuleClash x           pars   <- toAbstract pars           x'     <- toAbstract (OldName x)           contel <- toAbstract $ recordConstructorType fields           m0     <- getCurrentModule           let m = A.qualifyM m0 $ mnameFromList $ (:[]) $ last $ qnameToList x'           printScope "rec" 15 "before record"-          -- pushScope m           createModule m           afields <- withCurrentModule m $ do             afields <- toAbstract fields             printScope "rec" 15 "checked fields"             return afields-            -- qm <- getCurrentModule-          -- popScope p           bindModule p x m+          c' <- mapM (toAbstract . ConstrDecl m) c           printScope "rec" 15 "record complete"-          c' <- mapM (toAbstract . Constr) c           return $ A.RecDef (mkDefInfo x f p a r) x' c' pars contel afields  -- The only reason why we return a list is that open declarations disappears.@@ -708,11 +796,14 @@       return [ A.Axiom (mkDefInfo x f p a r) y t' ]    -- Fields-    C.NiceField r f p a h x t -> do+    C.NiceField r f p a x t -> do       t' <- toAbstractCtx TopCtx t       y  <- freshAbstractQName f x-      bindName p DefName x y-      return [ A.Field (mkDefInfo x f p a r) h y t' ]+      unless (argRelevance t == Irrelevant) $  +        -- Andreas, 2010-09-24: irrelevant fields are not in scope+        -- this ensures that projections out of irrelevant fields cannot occur+        bindName p DefName x y+      return [ A.Field (mkDefInfo x f p a r) y t' ]    -- Primitive function     PrimitiveFunction r f p a x t -> do@@ -749,6 +840,8 @@                         { minfoRange  = r                         , minfoAsName = Nothing                         , minfoAsTo   = renamingRange dir+                        , minfoOpenShort = Nothing+                        , minfoDirective = Just dir                         })                      m] @@ -801,14 +894,22 @@                            , minfoAsName = theAsName                            , minfoAsTo   =                                getRange (theAsSymbol, renamingRange dir)+                           , minfoOpenShort = Just open+                           , minfoDirective = Just dir                            })                         m ] -instance ToAbstract (Constr C.NiceDeclaration) A.Declaration where-    toAbstract (Constr (C.Axiom r f p a x t)) = do+data ConstrDecl = ConstrDecl A.ModuleName C.NiceDeclaration++instance ToAbstract ConstrDecl A.Declaration where+    toAbstract (ConstrDecl m (C.Axiom r f p a x t)) = do         t' <- toAbstractCtx TopCtx t-        y  <- freshAbstractQName f x+        -- The abstract name is the qualified one+        y  <- withCurrentModule m $ freshAbstractQName f x+        -- Bind it twice, once unqualified and once qualified         bindName p' ConName x y+        withCurrentModule m $ bindName p' ConName x y+        printScope "con" 15 "bound constructor"         return $ A.Axiom (mkDefInfo x f p a r) y t'         where             -- An abstract constructor is private (abstract constructor means@@ -921,7 +1022,7 @@         return $ A.LHS (LHSRange $ getRange (lhs, wps)) x args wps  instance ToAbstract c a => ToAbstract (Arg c) (Arg a) where-    toAbstract (Arg h e) = Arg h <$> toAbstractCtx (hiddenArgumentCtx h) e+    toAbstract (Arg h r e) = Arg h r <$> toAbstractCtx (hiddenArgumentCtx h) e  instance ToAbstract c a => ToAbstract (Named name c) (Named name a) where     toAbstract (Named n e) = Named n <$> toAbstract e@@ -957,8 +1058,8 @@         p <- toAbstract (IdentP $ C.QName op)         ps <- toAbstract ps         case p of-          ConP _ x as -> return $ ConP info x (as ++ map (Arg NotHidden . unnamed) ps)-          DefP _ x as -> return $ DefP info x (as ++ map (Arg NotHidden . unnamed) ps)+          ConP _ x as -> return $ ConP info x (as ++ map (Arg NotHidden Relevant . unnamed) ps)+          DefP _ x as -> return $ DefP info x (as ++ map (Arg NotHidden Relevant. unnamed) ps)           _           -> __IMPOSSIBLE__         where             r = getRange p0@@ -990,34 +1091,34 @@ -- right precedences for the various arguments. toAbstractOpApp :: C.Name -> [C.Expr] -> ScopeM A.Expr toAbstractOpApp op@(C.NoName _ _) es = __IMPOSSIBLE__-toAbstractOpApp op@(C.Name _ xs) es = do+toAbstractOpApp op@(C.Name _ _) es = do     f  <- getFixity (C.QName op)+    let (_,_,parts) = oldToNewNotation $ (op, f)     op <- toAbstract (OldQName $ C.QName op)-    foldl app op <$> left f xs es+    foldl app op <$> left (theFixity f) [p | p <- parts, not (isBindingHole p)] es     where         app e arg = A.App (ExprRange (fuseRange e arg)) e-                  $ Arg NotHidden $ unnamed arg+                  $ Arg NotHidden Relevant $ unnamed arg -        left f (Hole : xs) (e : es) = do+        left f (IdPart _ : xs) es = inside f xs es+        left f (_ : xs) (e : es) = do             e  <- toAbstractCtx (LeftOperandCtx f) e             es <- inside f xs es             return (e : es)-        left f (Id {} : xs) es = inside f xs es-        left f (Hole  : _)  [] = __IMPOSSIBLE__-        left f []           _  = __IMPOSSIBLE__+        left f (_  : _)  [] = __IMPOSSIBLE__+        left f []        _  = __IMPOSSIBLE__          inside f [x]          es       = right f x es-        inside f (Id {} : xs) es       = inside f xs es-        inside f (Hole  : xs) (e : es) = do+        inside f (IdPart _ : xs) es       = inside f xs es+        inside f (_  : xs) (e : es) = do             e  <- toAbstractCtx InsideOperandCtx e             es <- inside f xs es             return (e : es)-        inside _ (Hole : _) [] = __IMPOSSIBLE__+        inside _ (_ : _) [] = __IMPOSSIBLE__         inside _ []         _  = __IMPOSSIBLE__ -        right f Hole [e] = do+        right _ (IdPart _)  [] = return []+        right f _          [e] = do             e <- toAbstractCtx (RightOperandCtx f) e             return [e]-        right _ (Id {})  [] = return []-        right _ Hole     _  = __IMPOSSIBLE__-        right _ (Id {})  _  = __IMPOSSIBLE__+        right _ _     _  = __IMPOSSIBLE__
src/full/Agda/Syntax/Translation/InternalToAbstract.hs view
@@ -8,10 +8,10 @@      TODO -	- numbers on metas-	- fake dependent functions to independent functions-	- meta parameters-	- shadowing+        - numbers on metas+        - fake dependent functions to independent functions+        - meta parameters+        - shadowing -} module Agda.Syntax.Translation.InternalToAbstract where @@ -44,6 +44,9 @@ import Agda.TypeChecking.DisplayForm import Agda.TypeChecking.Level import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Datatypes+import Agda.TypeChecking.Free+import Agda.TypeChecking.Substitute  import Agda.Utils.Monad import Agda.Utils.Tuple@@ -54,12 +57,12 @@ import Agda.Utils.Impossible  apps :: MonadTCM tcm => (Expr, [Arg Expr]) -> tcm Expr-apps (e, [])		    = return e-apps (e, arg@(Arg Hidden _) : args) =-    do	showImp <- showImplicitArguments-	if showImp then apps (App exprInfo e (unnamed <$> arg), args)-		   else apps (e, args)-apps (e, arg:args)	    =+apps (e, []) = return e+apps (e, arg : args) | isHiddenArg arg =+    do  showImp <- showImplicitArguments+        if showImp then apps (App exprInfo e (unnamed <$> arg), args)+                   else apps (e, args)+apps (e, arg:args)          =     apps (App exprInfo e (unnamed <$> arg), args)  exprInfo :: ExprInfo@@ -83,7 +86,7 @@               case lookup x iis of                 Just ii@(InteractionId n)                         -> return $ A.QuestionMark $ mi' {metaNumber = Just n}-                Nothing	-> return $ A.Underscore mi'+                Nothing -> return $ A.Underscore mi'           ) (return $ A.Underscore mi')  instance Reify DisplayTerm Expr where@@ -92,8 +95,8 @@     DWithApp us vs -> do       us <- reify us       let wapp [e] = e-	  wapp (e : es) = A.WithApp exprInfo e es-	  wapp [] = __IMPOSSIBLE__+          wapp (e : es) = A.WithApp exprInfo e es+          wapp [] = __IMPOSSIBLE__       reifyApp (wapp us) vs  reifyDisplayForm :: MonadTCM tcm => QName -> Args -> tcm A.Expr -> tcm A.Expr@@ -110,9 +113,10 @@ reifyDisplayFormP :: A.LHS -> TCM A.LHS reifyDisplayFormP lhs@(A.LHS i x ps wps) =   ifM (not <$> displayFormsEnabled) (return lhs) $ do-    let vs = [ Arg h $ I.Var n [] | (n, h) <- zip [0..] $ map argHiding ps]+    let vs = [ Arg h Relevant $ I.Var n [] | (n, h) <- zip [0..] $ map argHiding ps]     md <- liftTCM $ displayForm x vs-    reportSLn "syntax.reify.display" 20 $ "display form of " ++ show x ++ ": " ++ show md+    reportSLn "syntax.reify.display" 20 $+      "display form of " ++ show x ++ " " ++ show ps ++ " " ++ show wps ++ ":\n  " ++ show md     case md of       Just d  | okDisplayForm d ->         reifyDisplayFormP =<< displayLHS (map (namedThing . unArg) ps) wps d@@ -170,47 +174,50 @@   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)  instance Reify Term Expr where-    reify v =-	do  v <- instantiate v-	    case v of-		I.Var n vs   -> do-                    x  <- liftTCM $ nameOfBV n `catchError` \_ -> freshName_ ("@" ++ show n)-                    reifyApp (A.Var x) vs-		I.Def x vs   -> reifyDisplayForm x vs $ do-		    n <- getDefFreeVars x-		    reifyApp (A.Def x) $ genericDrop n vs-		I.Con x vs   -> do-		  isR <- isRecord x-		  case isR of-		    True -> do-		      showImp <- showImplicitArguments-                      let keep ((h, x), v) = showImp || h == NotHidden-		      xs <- getRecordFieldNames x-		      vs <- reify $ map unArg vs-		      return $ A.Rec exprInfo $ map (snd *** id) $ filter keep $ zip xs vs-		    False -> reifyDisplayForm x vs $ do-                      let hide (Arg _ x) = Arg Hidden x-                      Constructor{conPars = np} <- theDef <$> getConstInfo x-		      scope <- getScope-                      let whocares = A.Underscore (Info.MetaInfo noRange scope Nothing)-                          us = replicate (fromIntegral np) $ Arg Hidden whocares-                      n  <- getDefFreeVars x-                      es <- reify vs-                      apps (A.Con (AmbQ [x]), genericDrop n $ us ++ es)-		I.Lam h b    ->-		    do	(x,e) <- reify b-			return $ A.Lam exprInfo (DomainFree h x) e-		I.Lit l	     -> reify l-		I.Pi a b     ->-		    do	Arg h a <- reify a-			(x,b)   <- reify b-			return $ A.Pi exprInfo [TypedBindings noRange h [TBind noRange [x] a]] b-		I.Fun a b    -> uncurry (A.Fun $ exprInfo)-				<$> reify (a,b)-		I.Sort s     -> reify s-		I.MetaV x vs -> apps =<< reify (x,vs)+  reify v = do+    v <- instantiate v+    case v of+      I.Var n vs   -> do+          x  <- liftTCM $ nameOfBV n `catchError` \_ -> freshName_ ("@" ++ show n)+          reifyApp (A.Var x) vs+      I.Def x vs   -> reifyDisplayForm x vs $ do+          n <- getDefFreeVars x+          reifyApp (A.Def x) $ genericDrop n vs+      I.Con x vs   -> do+        isR <- isGeneratedRecordConstructor x+        case isR of+          True -> do+            showImp <- showImplicitArguments+            let keep (a, v) = showImp || argHiding a == NotHidden+            r  <- getConstructorData x+            xs <- getRecordFieldNames r+            vs <- reify $ map unArg vs+            return $ A.Rec exprInfo $ map (unArg *** id) $ filter keep $ zip xs vs+          False -> reifyDisplayForm x vs $ do+            -- let hide a = a { argHiding = Hidden }+            Constructor{conPars = np} <- theDef <$> getConstInfo x+            scope <- getScope+            let whocares = A.Underscore (Info.MetaInfo noRange scope Nothing)+                us = replicate (fromIntegral np) $ Arg Hidden Irrelevant whocares+            n  <- getDefFreeVars x+            es <- reify vs+            apps (A.Con (AmbQ [x]), genericDrop n $ us ++ es)+      I.Lam h b    -> do+        (x,e) <- reify b+        return $ A.Lam exprInfo (DomainFree h x) e+      I.Lit l        -> reify l+      I.Pi a b       -> do+        Arg h r a <- reify a+        (x,b)     <- reify b+        return $ A.Pi exprInfo [TypedBindings noRange $ Arg h r [TBind noRange [x] a]] b+      I.Fun a b    -> uncurry (A.Fun $ exprInfo)+                      <$> reify (a,b)+      I.Sort s     -> reify s+      I.MetaV x vs -> apps =<< reify (x,vs)+      I.DontCare   -> return A.DontCare  data NamedClause = NamedClause QName I.Clause -- Named clause does not need 'Recursion' flag since I.Clause has it@@ -233,7 +240,7 @@     , "  wps  = " ++ show wps     , "  vars = " ++ show vars     ]-  let allps       = ps ++ map (Arg NotHidden . unnamed) wps+  let allps       = ps ++ map (defaultArg . unnamed) wps       sps         = foldl (.) (strip vars) (map rearrangeBinding $ Set.toList vars) $ allps       (ps', wps') = splitAt (length sps - length wps) sps   reportSLn "syntax.reify.implicit" 30 $ unlines@@ -303,8 +310,7 @@   dotVars :: a -> Set Name  instance DotVars a => DotVars (Arg a) where-  dotVars (Arg Hidden _)    = Set.empty-  dotVars (Arg NotHidden x) = dotVars x+  dotVars a = if isHiddenArg a then Set.empty else dotVars (unArg a)  instance DotVars a => DotVars (Named s a) where   dotVars = dotVars . namedThing@@ -340,16 +346,19 @@     A.WithApp _ e es -> dotVars (e, es)     A.Lam _ _ e      -> dotVars e     A.AbsurdLam _ _  -> Set.empty-    A.Pi _ tel e     ->  dotVars (tel, e)+    A.Pi _ tel e     -> dotVars (tel, e)     A.Fun _ a b      -> dotVars (a, b)     A.Set _ _        -> Set.empty     A.Prop _         -> Set.empty     A.Let _ _ _      -> __IMPOSSIBLE__     A.Rec _ es       -> dotVars $ map snd es     A.ETel _         -> __IMPOSSIBLE__+    A.QuoteGoal {}   -> __IMPOSSIBLE__+    A.Quote {}       -> __IMPOSSIBLE__+    A.DontCare       -> __IMPOSSIBLE__  -- Set.empty  instance DotVars TypedBindings where-  dotVars (TypedBindings _ _ bs) = dotVars bs+  dotVars (TypedBindings _ bs) = dotVars bs  instance DotVars TypedBinding where   dotVars (TBind _ _ e) = dotVars e@@ -382,7 +391,7 @@           else lift $ A.DotP i <$> reify v       I.LitP (LitLevel {}) -> __IMPOSSIBLE__       I.LitP l             -> return (A.LitP l)-      I.ConP c ps -> A.ConP i (AmbQ [c]) <$> reifyArgs ps+      I.ConP c _ ps -> A.ConP i (AmbQ [c]) <$> reifyArgs ps         where         i = PatRange noRange         mi = MetaInfo noRange emptyScopeInfo Nothing@@ -407,45 +416,45 @@  instance Reify Sort Expr where     reify s =-	do  s <- instantiateFull s-	    case s of+        do  s <- instantiateFull s+            case s of                 I.Type (I.Lit (LitLevel _ n)) -> return $ A.Set exprInfo n                 I.Type a -> do                   a <- reify a                   return $ A.App exprInfo (A.Set exprInfo 0)-                                          (Arg NotHidden (unnamed a))-		I.Prop	     -> return $ A.Prop exprInfo-		I.MetaS x as -> apps =<< reify (x, as)-		I.Suc s	     ->-		    do	suc <- freshName_ "suc"	-- TODO: hack-			e   <- reify s-			return $ A.App exprInfo (A.Var suc) (Arg NotHidden $ unnamed e)+                                          (defaultArg (unnamed a))+                I.Prop       -> return $ A.Prop exprInfo+                I.MetaS x as -> apps =<< reify (x, as)+                I.Suc s      ->+                    do  suc <- freshName_ "suc" -- TODO: hack+                        e   <- reify s+                        return $ A.App exprInfo (A.Var suc) (defaultArg $ unnamed e)                 I.Inf       -> A.Var <$> freshName_ "Setω"                 I.DLub s1 s2 -> do                   lub <- freshName_ "dLub" -- TODO: hack                   (e1,e2) <- reify (s1, I.Lam NotHidden $ fmap Sort s2)-                  let app x y = A.App exprInfo x (Arg NotHidden $ unnamed y)+                  let app x y = A.App exprInfo x (defaultArg $ unnamed y)                   return $ A.Var lub `app` e1 `app` e2-		I.Lub s1 s2 ->-		    do	lub <- freshName_ "\\/"	-- TODO: hack-			(e1,e2) <- reify (s1,s2)-			let app x y = A.App exprInfo x (Arg NotHidden $ unnamed y)-			return $ A.Var lub `app` e1 `app` e2+                I.Lub s1 s2 ->+                    do  lub <- freshName_ "\\/" -- TODO: hack+                        (e1,e2) <- reify (s1,s2)+                        let app x y = A.App exprInfo x (defaultArg $ unnamed y)+                        return $ A.Var lub `app` e1 `app` e2  instance Reify i a => Reify (Abs i) (Name, a) where     reify (Abs s v) =-	do  x <- freshName_ s-	    e <- addCtx x (Arg NotHidden $ sort I.Prop) -- type doesn't matter-		 $ reify v-	    return (x,e)+        do  x <- freshName_ s+            e <- addCtx x (defaultArg $ sort I.Prop) -- type doesn't matter+                 $ reify v+            return (x,e)  instance Reify I.Telescope A.Telescope where   reify EmptyTel = return []   reify (ExtendTel arg tel) = do-    Arg h e <- reify arg+    Arg h rel e <- reify arg     (x,bs)  <- reify $ betterName tel     let r = getRange e-    return $ TypedBindings r h [TBind r [x] e] : bs+    return $ TypedBindings r (Arg h rel [TBind r [x] e]) : bs     where       betterName (Abs "_" x) = Abs "z" x       betterName (Abs s   x) = Abs s   x
src/full/Agda/Termination/CallGraph.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE CPP, ImplicitParams #-}+ -- | Call graphs and related concepts, more or less as defined in --     \"A Predicative Analysis of Structural Recursion\" by --     Andreas Abel and Thorsten Altenkirch.@@ -6,9 +8,10 @@  module Agda.Termination.CallGraph   ( -- * Structural orderings-    Order(..)+    Order(Mat), decr   , (.*.)-  , supremum+  , supremum, infimum+  , decreasing, le, lt, unknown, orderMat     -- * Call matrices   , Index   , CallMatrix(..)@@ -26,17 +29,19 @@   , union   , insert   , complete-  , showBehaviour+  -- , showBehaviour -- RETIRED+  , prettyBehaviour     -- * Tests   , Agda.Termination.CallGraph.tests   ) where  import Agda.Utils.QuickCheck import Agda.Utils.Function-import Agda.Utils.List+import Agda.Utils.List hiding (tests)+import Agda.Utils.Pretty hiding (empty) import Agda.Utils.TestHelpers-import Agda.Termination.Matrix as Matrix-import Agda.Termination.Semiring (Semiring)+import Agda.Termination.SparseMatrix as Matrix hiding (tests)+import Agda.Termination.Semiring (HasZero(..),SemiRing,Semiring) import qualified Agda.Termination.Semiring as Semiring import Data.Set (Set) import qualified Data.Set as Set@@ -47,92 +52,222 @@ import Data.Array (elems) import Data.Function +#include "../undefined.h"+import Agda.Utils.Impossible+ ------------------------------------------------------------------------ -- Structural orderings --- | The order called R in the paper referred to above. Note that+-- | In the paper referred to above, there is an order R with -- @'Unknown' '<=' 'Le' '<=' 'Lt'@. --+-- This is generalized to @'Unknown' '<=' 'Decr k'@ where+-- @Decr 1@ replaces @Lt@ and @Decr 0@ replaces @Le@.+-- A negative decrease means an increase.  The generalization+-- allows the termination checker to record an increase by 1 which+-- can be compensated by a following decrease by 2 which results in+-- an overall decrease.  +--+-- However, the termination checker of the paper itself terminates because+-- there are only finitely many different call-matrices.  To maintain+-- termination of the terminator we set a @cutoff@ point which determines+-- how high the termination checker can count.  This value should be+-- set by a global or file-wise option.+-- -- See 'Call' for more information. -- -- TODO: document orders which are call-matrices themselves. data Order-  = Lt | Le | Unknown | Mat (Matrix Integer Order)+  = Decr Int | Unknown | Mat (Matrix Integer Order)   deriving (Eq,Ord)  instance Show Order where-  show Lt      = "<"-  show Le      = "="-  show Unknown = "?"-  show (Mat m) = "Mat " ++ show m+  show (Decr k) = show (- k)+  show Unknown  = "."+  show (Mat m)  = "Mat " ++ show m +instance HasZero Order where+  zeroElement = Unknown++-- | Smart constructor for @Decr k :: Order@ which cuts off too big values.+--+-- Possible values for @k@: @- ?cutoff '<=' k '<=' ?cutoff + 1@. +--+decr :: (?cutoff :: Int) => Int -> Order+decr k | k < - ?cutoff = Unknown+       | k > ?cutoff = Decr (?cutoff + 1)+       | otherwise   = Decr k ++-- | Smart constructor for matrix shaped orders, avoiding empty and singleton matrices. +orderMat :: Matrix Integer Order -> Order+orderMat m | Matrix.isEmpty m  = Decr 0                -- 0x0 Matrix = neutral element+           | otherwise         = case isSingleton m of        +                                   Just o -> o         -- 1x1 Matrix+                                   Nothing -> Mat m    -- nxn Matrix++isOrder :: (?cutoff :: Int) => Order -> Bool+isOrder (Decr k) = k >= - ?cutoff && k <= ?cutoff + 1+isOrder Unknown = True+isOrder (Mat m) = False  -- TODO: extend to matrices++prop_decr :: (?cutoff :: Int) => Int -> Bool+prop_decr = isOrder . decr++-- | @le@, @lt@, @decreasing@, @unknown@: for backwards compatibility, and for external use.+le :: Order+le = Decr 0++lt :: Order+lt = Decr 1++unknown :: Order+unknown = Unknown++decreasing :: Order -> Bool+decreasing (Decr k) | k > 0 = True+decreasing _ = False++instance Pretty Order where+  pretty (Decr 0) = text "="+  pretty (Decr k) = text $ show k+  pretty Unknown  = text "?"+  pretty (Mat m)  = text "Mat" <+> pretty m+ --instance Ord Order where --    max = maxO +{- instances cannot have implicit arguments?! GHC manual says:++7.8.3.1. Implicit-parameter type constraints++You can't have an implicit parameter in the context of a class or instance declaration. For example, both these declarations are illegal:++  class (?x::Int) => C a where ...+  instance (?x::a) => Foo [a] where ...++Reason: exactly which implicit parameter you pick up depends on+exactly where you invoke a function. But the ``invocation'' of+instance declarations is done behind the scenes by the compiler, so+it's hard to figure out exactly where it is done. Easiest thing is to+outlaw the offending types.++instance (?cutoff :: Int) => Arbitrary Order where+  arbitrary = frequency +    [(20, return Unknown)+    ,(80, elements [- ?cutoff .. ?cutoff + 1] >>= Decr)+    ] -- no embedded matrices generated for now.+-} instance Arbitrary Order where-  arbitrary = elements [Lt, Le, Unknown]+  arbitrary = frequency +    [(30, return Unknown)+    ,(70, elements [0,1] >>= return . Decr)+    ] -- no embedded matrices generated for now.  instance CoArbitrary Order where-  coarbitrary Lt      = variant 0-  coarbitrary Le      = variant 1-  coarbitrary Unknown = variant 2-  coarbitrary (Mat m) = variant 3+  coarbitrary (Decr k) = variant 0+  coarbitrary Unknown  = variant 1+  coarbitrary (Mat m)  = variant 2  -- | Multiplication of 'Order's. (Corresponds to sequential -- composition.) -(.*.) :: Order -> Order -> Order-Lt      .*. Unknown   = Unknown-Lt      .*. (Mat m)   = Lt .*. (collapse m)-Lt      .*. _         = Lt-Le      .*. o         = o-Unknown .*. _         = Unknown+-- I think this funny pattern matching is because overlapping patterns+-- are producing a warning and thus an error (strict compilation settings)+(.*.) :: (?cutoff :: Int) => Order -> Order -> Order+Unknown  .*. _         = Unknown+(Mat m)  .*. Unknown   = Unknown+(Decr k) .*. Unknown   = Unknown+(Decr k) .*. (Decr l)  = decr (k + l)+(Decr 0) .*. (Mat m)   = Mat m+(Decr k) .*. (Mat m)   = (Decr k) .*. (collapse m) (Mat m1) .*. (Mat m2) = if (okM m1 m2) then                             Mat $ mul orderSemiring m1 m2                         else                             (collapse m1) .*. (collapse m2)-(Mat m) .*. Le        = Mat m-(Mat m) .*. Unknown   = Unknown-(Mat m) .*. Lt        = (collapse m) .*. Lt+(Mat m) .*. (Decr 0)  = Mat m+(Mat m) .*. (Decr k)  = (collapse m) .*. (Decr k) -collapse :: Matrix Integer Order -> Order-collapse m = foldl (.*.) Le (Data.Array.elems $ diagonal m)+{- collapse m +We assume that m codes a permutation:  each row has at most one column+that is not Un. ++To collapse a matrix into a single value, we take the best value of+each column and multiply them.  That means if one column is all Un,+i.e., no argument relates to that parameter, than the collapsed value+is also Un.++This makes order multiplication associative.++-}+collapse :: (?cutoff :: Int) => Matrix Integer Order -> Order+collapse m = case (toLists (Matrix.transpose m)) of+   [] -> __IMPOSSIBLE__   -- This can never happen if order matrices are generated by the smart constructor+   m' -> foldl1 (.*.) $ map (foldl1 maxO) m'++{- OLD CODE, does not give associative matrix multiplication:+collapse :: (?cutoff :: Int) => Matrix Integer Order -> Order+collapse m = foldl (.*.) le (Data.Array.elems $ diagonal m)+-}+ okM :: Matrix Integer Order -> Matrix Integer Order -> Bool okM m1 m2 = (rows $ size m2) == (cols $ size m1)  -- | The supremum of a (possibly empty) list of 'Order's. -supremum :: [Order] -> Order+supremum :: (?cutoff :: Int) => [Order] -> Order supremum = foldr maxO Unknown -maxO :: Order -> Order -> Order+maxO :: (?cutoff :: Int) => Order -> Order -> Order maxO o1 o2 = case (o1,o2) of-               (_,Lt) -> Lt-               (Lt,_) -> Lt+               (Decr k, Decr l) -> Decr (max k l) -- cut off not needed                (Unknown,_) -> o2                (_,Unknown) -> o1-               (Mat m1, Mat m2) -> Mat (Matrix.zipWith maxO m1 m2)+               (Mat m1, Mat m2) -> Mat (Matrix.add maxO m1 m2)                (Mat m,_) -> maxO (collapse m) o2                (_,Mat m) ->  maxO o1 (collapse m)-               (Le,Le) -> Le --- | The infimum of a (possibly empty) list of 'Order's.+-- | @('Order', 'max', '.*.')@ forms a semiring, with 'Unknown' as+-- zero and 'Le' as one. --- infimum :: [Order] -> Order--- infimum = foldr min Lt -- DELETE ?+-- | The infimum of a (non empty) list of 'Order's. --- | @('Order', 'max', '.*.')@ forms a semiring, with 'Unknown' as zero--- and 'Le' as one.+infimum :: (?cutoff :: Int) => [Order] -> Order+infimum (o:l) = foldl minO o l+infimum [] = __IMPOSSIBLE__  -orderSemiring :: Semiring Order+minO :: (?cutoff :: Int) => Order -> Order -> Order+minO o1 o2 = case (o1,o2) of+               (Unknown,_) -> Unknown+               (_,Unknown) -> Unknown+               (Decr k, Decr l) -> decr (min k l)+               (Mat m1, Mat m2) -> if (size m1 == size m2) then+                                       Mat $ Matrix.intersectWith minO m1 m2+                                   else+                                       minO (collapse m1) (collapse m2)+               (Mat m1,_) -> minO (collapse m1) o2+               (_,Mat m2) -> minO o1 (collapse m2)+++{- Cannot have implicit arguments in instances.  Too bad!++instance Monoid Order where+  mempty = Unknown+  mappend = maxO++instance (cutoff :: Int) => SemiRing Order where+  multiply = (.*.)+-}++orderSemiring :: (?cutoff :: Int) => Semiring Order orderSemiring =   Semiring.Semiring { Semiring.add = maxO                     , Semiring.mul = (.*.)                     , Semiring.zero = Unknown-                    , Semiring.one = Le+--                    , Semiring.one = Le                     } +prop_orderSemiring :: (?cutoff :: Int) => Order -> Order -> Order -> Bool prop_orderSemiring = Semiring.semiringInvariant orderSemiring  ------------------------------------------------------------------------@@ -190,9 +325,9 @@  -- | Call matrix multiplication. ----- Precondition: see 'mul'.+-- Precondition: see 'Matrix.mul'. -(<*>) :: CallMatrix -> CallMatrix -> CallMatrix+(<*>) :: (?cutoff :: Int) => CallMatrix -> CallMatrix -> CallMatrix cm1 <*> cm2 =   CallMatrix { mat = mul orderSemiring (mat cm1) (mat cm2) } @@ -255,7 +390,7 @@ -- Precondition: see '<*>'; furthermore the 'source' of the first -- argument should be equal to the 'target' of the second one. -(>*<) :: Call -> Call -> Call+(>*<) :: (?cutoff :: Int) => Call -> Call -> Call c1 >*< c2 =   Call { source    = source c2        , target    = target c1@@ -334,7 +469,7 @@ -- Precondition: see '<*>'.  combine-  :: Monoid meta => CallGraph meta -> CallGraph meta -> CallGraph meta+  :: (Monoid meta, ?cutoff :: Int) => CallGraph meta -> CallGraph meta -> CallGraph meta combine s1 s2 = fromList $   [ (c1 >*< c2, m1 `mappend` m2)   | (c1, m1) <- toList s1, (c2, m2) <- toList s2@@ -345,7 +480,7 @@ -- complete if it contains all indirect calls; if @f -> g@ and @g -> -- h@ are present in the graph, then @f -> h@ should also be present. -complete :: Monoid meta => CallGraph meta -> CallGraph meta+complete :: (?cutoff :: Int) => Monoid meta => CallGraph meta -> CallGraph meta complete cs = complete' safeCS   where   safeCS = ensureCompletePrecondition cs@@ -356,13 +491,14 @@     cs' = cs `union` combine cs safeCS     (.==.) = ((==) `on` (Map.keys . cg)) +prop_complete :: (?cutoff :: Int) => Property prop_complete =   forAll (callGraph :: Gen (CallGraph [Integer])) $ \cs ->     isComplete (complete cs)  -- | Returns 'True' iff the call graph is complete. -isComplete :: (Ord meta, Monoid meta) => CallGraph meta -> Bool+isComplete :: (Ord meta, Monoid meta, ?cutoff :: Int) => CallGraph meta -> Bool isComplete s = all (`Map.member` cg s) combinations   where   calls = toList s@@ -429,6 +565,7 @@  -- | Displays the recursion behaviour corresponding to a call graph. +{- RETIRED CODE showBehaviour :: Show meta => CallGraph meta -> String showBehaviour = concatMap showCall . toList   where@@ -438,13 +575,39 @@     , "Behaviour: " ++ show (elems $ diagonal $ mat $ cm c)     , "Meta info: " ++ show meta     ]+-} +instance Show meta => Pretty (CallGraph meta) where+  pretty = vcat . map prettyCall . toList+    where+    prettyCall (c, meta) = align 20+      [ ("Source:",    text $ show $ source c)+      , ("Target:",    text $ show $ target c)+      , ("Matrix:",    pretty (mat $ cm c))+      , ("Meta info:", text $ show meta)+      ]++-- | Displays the recursion behaviour corresponding to a call graph.++prettyBehaviour :: Show meta => CallGraph meta -> Doc+prettyBehaviour = vcat . map prettyCall . filter (toSelf . fst) . toList+  where+  toSelf c = source c == target c++  prettyCall (c, meta) = vcat $ map text+    [ "Function:  " ++ show (source c)+    , "Behaviour: " ++ show (elems $ diagonal $ mat $ cm c)+    , "Meta info: " ++ show meta+    ]+ ------------------------------------------------------------------------ -- All tests  tests :: IO Bool-tests = runTests "Agda.Termination.CallGraph"-  [ quickCheck' prop_orderSemiring+tests = runTests "Agda.Termination.CallGraph" +  [ quickCheck' callMatrixInvariant+  , quickCheck' prop_decr+  , quickCheck' prop_orderSemiring   , quickCheck' prop_Arbitrary_CallMatrix   , quickCheck' prop_callMatrix   , quickCheck' prop_cmMul@@ -453,3 +616,4 @@   , quickCheck' prop_complete   , quickCheck' prop_ensureCompletePrecondition   ]+  where ?cutoff = 2
src/full/Agda/Termination/Lexicographic.hs view
@@ -140,12 +140,12 @@ -- at least one strictly decreasing).  okColumn :: Column call -> Bool-okColumn col = any (== Lt) col' && all (/= Unknown) col'+okColumn col = any decreasing col' && all (/= unknown) col'   where col' = Map.elems col  -- | @'newBehaviour' n rb@ computes a new recursion behaviour from -- @rb@ by removing all \"rows\" (calls) for which the @n@-th element--- is 'Lt', and also completely removing the @n@-th column.+-- is 'decreasing', and also completely removing the @n@-th column. -- -- Precondition: there has to be an @n@-th column. @@ -161,7 +161,7 @@      }   where   Just colN       = Map.lookup n $ columns rb-  indicesToRemove = map fst $ filter ((== Lt) . snd) $ Map.toList colN+  indicesToRemove = map fst $ filter (decreasing . snd) $ Map.toList colN   remove colJ     = foldr Map.delete colJ indicesToRemove  prop_newBehaviour :: RecBehaviour Integer Integer -> Property
src/full/Agda/Termination/Matrix.hs view
@@ -35,7 +35,7 @@ import Data.List as List import Agda.Utils.QuickCheck import Agda.Utils.TestHelpers-import Agda.Termination.Semiring (Semiring)+import Agda.Termination.Semiring (Semiring,SemiRing) import qualified Agda.Termination.Semiring as Semiring  ------------------------------------------------------------------------@@ -218,11 +218,11 @@       matrixInvariant m' &&       size m' == size m1 --- | @'mul' semiring m1 m2@ multiplies @m1@ and @m2@. Uses the--- operations of the semiring @semiring@ to perform the--- multiplication.+-- | @'mul' m1 m2@ multiplies @m1@ and @m2@. Uses the operations of+-- the semiring to perform the multiplication. -- -- Precondition: @'cols' ('size' m1) == rows ('size' m2)@.+  mul :: (Enum i, Num i, Ix i)     => Semiring a -> Matrix i a -> Matrix i a -> Matrix i a
src/full/Agda/Termination/Semiring.hs view
@@ -1,23 +1,44 @@+-- {-# LANGUAGE UndecidableInstances #-}+ -- | Semirings.  module Agda.Termination.Semiring-  ( Semiring(..)+  ( HasZero(..), SemiRing(..)+  , Semiring(..)   , semiringInvariant   , integerSemiring   , boolSemiring   , Agda.Termination.Semiring.tests   ) where +import Data.Monoid+ import Agda.Utils.QuickCheck import Agda.Utils.TestHelpers +{- | SemiRing type class.  Additive monoid with multiplication operation.+Inherit addition and zero from Monoid. -}++class (Eq a, Monoid a) => SemiRing a where+--  isZero   :: a -> Bool+  multiply :: a -> a -> a+++-- | @HasZero@ is needed for sparse matrices, to tell which is the element+--   that does not have to be stored.+--   It is a cut-down version of @SemiRing@ which is definable+--   without the implicit @?cutoff@.+class Eq a => HasZero a where+  zeroElement :: a+ -- | Semirings.  data Semiring a   = Semiring { add  :: a -> a -> a  -- ^ Addition.              , mul  :: a -> a -> a  -- ^ Multiplication.              , zero :: a            -- ^ Zero.-             , one  :: a            -- ^ One.+-- The one is never used in matrix multiplication+--             , one  :: a            -- ^ One.              }  -- | Semiring invariant.@@ -29,12 +50,13 @@                   => Semiring a                   -> a -> a -> a -> Bool semiringInvariant (Semiring { add = (+), mul = (*)-                            , zero = zero, one = one}) = \x y z ->+                            , zero = zero --, one = one+                            }) = \x y z ->   associative (+)           x y z &&   identity zero (+)         x     &&   commutative (+)           x y   &&   associative (*)           x y z &&-  identity one (*)          x     &&+--  identity one (*)          x     &&   leftDistributive (*) (+)  x y z &&   rightDistributive (*) (+) x y z &&   isZero zero (*)           x@@ -44,8 +66,19 @@  -- | The standard semiring on 'Integer's. +instance HasZero Integer where+  zeroElement = 0++instance Monoid Integer where+  mempty = 0+  mappend = (+)++instance SemiRing Integer where +  multiply = (*)+    + integerSemiring :: Semiring Integer-integerSemiring = Semiring { add = (+), mul = (*), zero = 0, one = 1 }+integerSemiring = Semiring { add = (+), mul = (*), zero = 0 } -- , one = 1 }  prop_integerSemiring = semiringInvariant integerSemiring @@ -53,7 +86,7 @@  boolSemiring :: Semiring Bool boolSemiring =-  Semiring { add = (||), mul = (&&), zero = False, one = True }+  Semiring { add = (||), mul = (&&), zero = False } --, one = True }  prop_boolSemiring = semiringInvariant boolSemiring 
+ src/full/Agda/Termination/SparseMatrix.hs view
@@ -0,0 +1,432 @@+{-# LANGUAGE CPP #-}++{- | Sparse matrices.++We assume the matrices to be very sparse, so we just implement them as+sorted association lists.++ -}++module Agda.Termination.SparseMatrix+  ( -- * Basic data types+    Matrix+  , matrixInvariant+  , Size(..)+  , sizeInvariant+  , MIx (..)+  , mIxInvariant+    -- * Generating and creating matrices+  , fromLists+  , fromIndexList+  , toLists+--  , Agda.Termination.Matrix.zipWith+  , matrix+  , matrixUsingRowGen+    -- * Combining and querying matrices+  , size+  , square+  , isEmpty+  , isSingleton+  , add, intersectWith+  , mul+  , transpose+  , diagonal+    -- * Modifying matrices+  , addRow+  , addColumn+    -- * Tests+  , Agda.Termination.SparseMatrix.tests+  ) where++import Data.Array+import qualified Data.List as List+import Agda.Utils.Pretty hiding (isEmpty)+import Data.Monoid+import Agda.Utils.QuickCheck+import Agda.Utils.TestHelpers+import Agda.Termination.Semiring (HasZero(..), SemiRing, Semiring)+import qualified Agda.Termination.Semiring as Semiring++#include "../undefined.h"+import Agda.Utils.Impossible++------------------------------------------------------------------------+-- Basic data types++-- | This matrix type is used for tests.++type TM = Matrix Integer Integer++-- | Size of a matrix.++data Size i = Size { rows :: i, cols :: i }+  deriving (Eq, Ord, Show)++sizeInvariant :: (Ord i, Num i) => Size i -> Bool+sizeInvariant sz = rows sz >= 0 && cols sz >= 0++instance (Arbitrary i, Integral i) => Arbitrary (Size i) where+  arbitrary = do+    r <- natural+    c <- natural+    return $ Size { rows = fromInteger r, cols = fromInteger c }++instance CoArbitrary i => CoArbitrary (Size i) where+  coarbitrary (Size rs cs) = coarbitrary rs . coarbitrary cs++prop_Arbitrary_Size :: Size Integer -> Bool+prop_Arbitrary_Size = sizeInvariant++-- | Converts a size to a set of bounds suitable for use with+-- the matrices in this module.++toBounds :: Num i => Size i -> (MIx i, MIx i)+toBounds sz = (MIx { row = 1, col = 1 }, MIx { row = rows sz, col = cols sz })++-- | Type of matrix indices (row, column).++data MIx i = MIx { row, col :: i }+  deriving (Eq, Show, Ix, Ord)++instance (Arbitrary i, Integral i) => Arbitrary (MIx i) where+  arbitrary = do+    r <- positive+    c <- positive+    return $ MIx { row = r, col = c }++instance CoArbitrary i => CoArbitrary (MIx i) where+  coarbitrary (MIx r c) = coarbitrary r . coarbitrary c++-- | No nonpositive indices are allowed.++mIxInvariant :: (Ord i, Num i) => MIx i -> Bool+mIxInvariant i = row i >= 1 && col i >= 1++prop_Arbitrary_MIx :: MIx Integer -> Bool+prop_Arbitrary_MIx = mIxInvariant++-- | Type of matrices, parameterised on the type of values.++data Matrix i b = M { size :: Size i, unM :: [(MIx i, b)] }+  deriving (Eq, Ord)++matrixInvariant :: (Num i, Ix i) => Matrix i b -> Bool+matrixInvariant m = all (\ (MIx i j, b) -> 1 <= i && i <= rows sz +                                        && 1 <= j && j <= cols sz) (unM m)+  && strictlySorted (MIx 0 0) (unM m)+  && sizeInvariant sz+  where sz = size m++-- matrix indices are lexicographically sorted with no duplicates+-- Ord MIx should be the lexicographic one already (Haskell report)++strictlySorted :: (Ord i) => i -> [(i, b)] -> Bool+strictlySorted i [] = True+strictlySorted i ((i', b) : l) = i < i' && strictlySorted i' l+{-+strictlySorted (MIx i j) [] = True+strictlySorted (MIx i j) ((MIx i' j', b) : l) = +  (i < i' || i == i' &&  j < j' ) && strictlySorted (MIx i' j') b +-}++instance (Ord i, Integral i, Enum i, Show i, Show b, HasZero b) => Show (Matrix i b) where+  showsPrec _ m =+    showString "Agda.Termination.Matrix.fromLists " . shows (size m) .+    showString " " . shows (toLists m)++instance (Integral i, HasZero b, Pretty b) =>+         Pretty (Matrix i b) where+  pretty = vcat . map (hsep . map pretty) . toLists++instance (Arbitrary i, Num i, Integral i, Arbitrary b, HasZero b)+         => Arbitrary (Matrix i b) where+  arbitrary     = matrix =<< arbitrary++instance (Ord i, Integral i, Enum i, CoArbitrary b, HasZero b) => CoArbitrary (Matrix i b) where+  coarbitrary m = coarbitrary (toLists m)+++prop_Arbitrary_Matrix :: TM -> Bool+prop_Arbitrary_Matrix = matrixInvariant+++------------------------------------------------------------------------+-- Generating and creating matrices++-- | Generates a matrix of the given size, using the given generator+-- to generate the rows.++matrixUsingRowGen :: (Arbitrary i, Integral i, Arbitrary b, HasZero b)+  => Size i+  -> (i -> Gen [b])+     -- ^ The generator is parameterised on the size of the row.+  -> Gen (Matrix i b)+matrixUsingRowGen sz rowGen = do+  rows <- vectorOf (fromIntegral $ rows sz) (rowGen $ cols sz)+  return $ fromLists sz rows++-- | Generates a matrix of the given size.++matrix :: (Arbitrary i, Integral i, Arbitrary b, HasZero b)+  => Size i -> Gen (Matrix i b)+matrix sz = matrixUsingRowGen sz (\n -> vectorOf (fromIntegral n) arbitrary)++prop_matrix sz = forAll (matrix sz :: Gen TM) $ \m ->+--  matrixInvariant m &&+  size m == sz++-- | Constructs a matrix from a list of (index, value)-pairs.++-- compareElt = (\ (i,_) (j,_) -> compare i j)+-- normalize = filter (\ (i,b) -> b /= zeroElement)++fromIndexList :: (Ord i, HasZero b) => Size i -> [(MIx i, b)] -> Matrix i b+fromIndexList sz = M sz . List.sortBy (\ (i,_) (j,_) -> compare i j) . filter (\ (i,b) -> b /= zeroElement)++prop_fromIndexList :: TM -> Bool+prop_fromIndexList m = matrixInvariant m' && m' == m+  where vs = unM m+        m' = fromIndexList (size m) vs++-- | @'fromLists' sz rs@ constructs a matrix from a list of lists of+-- values (a list of rows).+--+-- Precondition: @'length' rs '==' 'rows' sz '&&' 'all' (('==' 'cols' sz) . 'length') rs@.++fromLists :: (Ord i, Num i, Enum i, HasZero b) => Size i -> [[b]] -> Matrix i b+fromLists sz bs = fromIndexList sz $ zip ([ MIx i j | i <- [1..rows sz]+                                                    , j <- [1..cols sz]]) (concat bs)++-- | Converts a sparse matrix to a sparse list of rows++toSparseRows :: (Num i, Enum i) => Matrix i b -> [(i,[(i,b)])]+toSparseRows m = aux 1 [] (unM m)  +  where aux i' [] []  = []+        aux i' row [] = [(i', reverse row)]+        aux i' row ((MIx i j, b) : m) +            | i' == i   = aux i' ((j,b):row) m+            | otherwise = (i', reverse row) : aux i [(j,b)] m++-- sparse vectors cannot have two entries in one column+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) []+        aux i ((j,b):l) | i <= n && j == i = b : aux (succ i) l+        aux i ((j,b):l) | i <= n && j >= i = zero : aux (succ i) ((j,b):l)+        aux i l = error $ "blowUpSparseVec (n = " ++ show n ++ ") aux i=" ++ show i ++ " j=" ++ show (fst (head l)) ++ " length l = " ++ show (length l)+-- __IMPOSSIBLE__++-- | Converts a matrix to a list of row lists.++toLists :: (Ord i, Integral i, Enum i, HasZero b) => Matrix i b -> [[b]]+toLists m = blowUpSparseVec emptyRow (rows sz) $ +    map (\ (i,r) -> (i, blowUpSparseVec zeroElement (cols sz) r)) $ toSparseRows m +--            [ [ maybe zeroElement id $ lookup (MIx { row = r, col = c }) (unM m)+--            | c <- [1 .. cols sz] ] | r <- [1 .. rows sz] ]+  where sz = size m+        emptyRow = take (fromIntegral (cols sz)) $ repeat zeroElement++prop_fromLists_toLists :: TM -> Bool+prop_fromLists_toLists m = fromLists (size m) (toLists m) == m++------------------------------------------------------------------------+-- Combining and querying matrices++-- | The size of a matrix.++{-+size :: Ix i => Matrix i b -> Size i+size m = Size { rows = row b, cols = col b }+  where (_, b) = bounds $ unM m+-}++prop_size :: TM -> Bool+prop_size m = sizeInvariant (size m)+++prop_size_fromIndexList :: Size Int -> Bool+prop_size_fromIndexList sz =+  size (fromIndexList sz ([] :: [(MIx Int, Integer)])) == sz++-- | 'True' iff the matrix is square.++square :: Ix i => Matrix i b -> Bool+square m = rows (size m) == cols (size m)++-- | Returns 'True' iff the matrix is empty.++isEmpty :: (Num i, Ix i) => Matrix i b -> Bool+isEmpty m = rows sz <= 0 || cols sz <= 0+  where sz = size m++-- | Returns 'Just b' iff it is a 1x1 matrix with just one entry 'b'.++isSingleton :: (Num i, Ix i) => Matrix i b -> Maybe b+isSingleton m = if (rows sz == 1 || cols sz == 1) then +    case unM m of +      [(_,b)] -> Just b+      _ -> __IMPOSSIBLE__+  else Nothing+  where sz = size m++-- | Transposition+transposeSize (Size { rows = n, cols = m }) = Size { rows = m, cols = n } +transpose m = M { size = transposeSize (size m)+                , unM  = List.sortBy (\ (i,a) (j,b) -> compare i j) $ +                           map (\(MIx i j, b) -> (MIx j i, b)) $ unM m }++-- | @'add' (+) m1 m2@ adds @m1@ and @m2@. Uses @(+)@ to add values.+--+-- Precondition: @'size' m1 == 'size' m2@.++add :: (Ord i) => (a -> a -> a) -> Matrix i a -> Matrix i a -> Matrix i a+add plus m1 m2 = M (size m1) $ mergeAssocWith plus (unM m1) (unM m2)++-- | assoc list union+mergeAssocWith :: (Ord i) => (a -> a -> a) -> [(i,a)] -> [(i,a)] -> [(i,a)]  +mergeAssocWith f [] m = m+mergeAssocWith f l [] = l+mergeAssocWith f l@((i,a):l') m@((j,b):m') +    | i < j = (i,a) : mergeAssocWith f l' m+    | i > j = (j,b) : mergeAssocWith f l m'+    | otherwise = (i, f a b) : mergeAssocWith f l' m'++-- | @'intersectWith' f m1 m2@ build the pointwise conjunction @m1@ and @m2@. +--   Uses @f@ to combine non-zero values.+--+-- Precondition: @'size' m1 == 'size' m2@.++intersectWith :: (Ord i) => (a -> a -> a) -> Matrix i a -> Matrix i a -> Matrix i a+intersectWith f m1 m2 = M (size m1) $ interAssocWith f (unM m1) (unM m2)++-- | assoc list intersection+interAssocWith :: (Ord i) => (a -> a -> a) -> [(i,a)] -> [(i,a)] -> [(i,a)]  +interAssocWith f [] m = []+interAssocWith f l [] = []+interAssocWith f l@((i,a):l') m@((j,b):m') +    | i < j = interAssocWith f l' m+    | i > j = interAssocWith f l m'+    | otherwise = (i, f a b) : interAssocWith f l' m'++prop_add sz =+  forAll (vectorOf 3 (matrix sz :: Gen TM)) $ \[m1, m2, m3] ->+    let m' = add (+) m1 m2 in+      associative (add (+)) m1 m2 m3 &&+      commutative (add (+)) m1 m2 &&+      matrixInvariant m' &&+      size m' == size m1++-- | @'mul' semiring m1 m2@ multiplies @m1@ and @m2@. Uses the+-- operations of the semiring @semiring@ to perform the+-- multiplication.+--+-- Precondition: @'cols' ('size' m1) == rows ('size' m2)@.++{- mul A B works as follows:+* turn A into a list of sparse rows and the transposed B as well+* form the crossproduct using the inner vector product to compute els+* the inner vector product is summing up +  after intersecting with the muliplication op of the semiring+-}++mul :: (Enum i, Num i, Ix i, Eq a)+    => Semiring a -> Matrix i a -> Matrix i a -> Matrix i a +mul semiring m1 m2 = M (Size { rows = rows (size m1), cols = cols (size m2) }) $+  filter (\ (i,b) -> b /= Semiring.zero semiring) $+  [ (MIx i j, foldl (Semiring.add semiring) (Semiring.zero semiring) $ +                map snd $ interAssocWith (Semiring.mul semiring) v w)+    | (i,v) <- toSparseRows m1+    , (j,w) <- toSparseRows $ transpose m2 ]++prop_mul sz =+  sized $ \n -> resize (n `div` 2) $+  forAll (vectorOf 2 natural) $ \[c2, c3] ->+  forAll (matrix sz :: Gen TM) $ \m1 ->+  forAll (matrix (Size { rows = cols sz, cols = c2 })) $ \m2 ->+  forAll (matrix (Size { rows = c2, cols = c3 })) $ \m3 ->+    let m' = mult m1 m2 in+      associative mult m1 m2 m3 &&+      matrixInvariant m' &&+      size m' == Size { rows = rows sz, cols = c2 }+  where mult = mul Semiring.integerSemiring++-- | @'diagonal' m@ extracts the diagonal of @m@.+--+-- Precondition: @'square' m@.++diagonal :: (Enum i, Num i, Ix i, HasZero b) => Matrix i b -> Array i b+diagonal m = listArray (1, rows sz) $ blowUpSparseVec zeroElement (rows sz) $+  map (\ ((MIx i j),b) -> (i,b)) $ filter (\ ((MIx i j),b) -> i==j) (unM m)+  where sz = size m++prop_diagonal =+  forAll natural $ \n ->+  forAll (matrix (Size n n) :: Gen TM) $ \m ->+    bounds (diagonal m) == (1, n)++------------------------------------------------------------------------+-- Modifying matrices++-- | @'addColumn' x m@ adds a new column to @m@, after the columns+-- already existing in the matrix. All elements in the new column get+-- set to @x@.++addColumn :: (Num i, HasZero b) => b -> Matrix i b -> Matrix i b+addColumn x m | x == zeroElement = m { size = (size m) { cols = cols (size m) + 1 }}+              | otherwise = __IMPOSSIBLE__++prop_addColumn :: TM -> Bool+prop_addColumn m =+  matrixInvariant m'+  &&+  map init (toLists m') == toLists m+  where+  m' = addColumn zeroElement m++-- | @'addRow' x m@ adds a new row to @m@, after the rows already+-- existing in the matrix. All elements in the new row get set to @x@.++addRow :: (Num i, HasZero b) => b -> Matrix i b -> Matrix i b+addRow x m | x == zeroElement = m { size = (size m) { rows = rows (size m) + 1 }}+           | otherwise = __IMPOSSIBLE__++prop_addRow :: TM -> Bool+prop_addRow m =+  matrixInvariant m'+  &&+  init (toLists m') == toLists m+  where+  m' = addRow zeroElement m++------------------------------------------------------------------------+-- Zipping (assumes non-empty matrices)++{- use mergeAssocList or interAssocList instead+zipWith :: (a -> b -> c) ->+           Matrix Integer a -> Matrix Integer b -> Matrix Integer c+zipWith f m1 m2+  = fromLists (Size { rows = toInteger $ length ll,+                      cols = toInteger $ length (head ll) }) ll+    where ll = List.zipWith (List.zipWith f) (toLists m1) (toLists m2)+-}++------------------------------------------------------------------------+-- All tests++tests :: IO Bool+tests = runTests "Agda.Termination.Matrix"+  [ quickCheck' prop_Arbitrary_Size+  , quickCheck' prop_Arbitrary_Matrix+  , quickCheck' prop_Arbitrary_MIx+  , quickCheck' prop_fromIndexList+  , quickCheck' prop_matrix+  , quickCheck' prop_size+  , quickCheck' prop_size_fromIndexList+  , quickCheck' prop_fromLists_toLists+  , quickCheck' prop_add+  , quickCheck' prop_mul+  , quickCheck' prop_diagonal+  , quickCheck' prop_addColumn+  , quickCheck' prop_addRow+  ]
src/full/Agda/Termination/TermCheck.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP, PatternGuards #-}+{-# LANGUAGE CPP, PatternGuards, ImplicitParams #-}  {- Checking for Structural recursion    Authors: Andreas Abel, Nils Anders Danielsson, Ulf Norell,@@ -29,12 +29,13 @@ import Agda.Syntax.Literal (Literal(LitString))  import Agda.Termination.CallGraph   as Term-import qualified Agda.Termination.Matrix      as Term-import qualified Agda.Termination.Termination as Term+import qualified Agda.Termination.SparseMatrix as Term+import qualified Agda.Termination.Termination  as Term  import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce (reduce, normalise, instantiate, instantiateFull)+import Agda.TypeChecking.Rules.Builtin.Coinduction import Agda.TypeChecking.Rules.Term (isType_) import Agda.TypeChecking.Substitute (abstract,raise,substs) import Agda.TypeChecking.Telescope@@ -46,7 +47,6 @@ import Agda.Interaction.Options  import Agda.Utils.Size-import Agda.Utils.String import Agda.Utils.Monad (thread, (<$>), ifM)  #include "../undefined.h"@@ -113,7 +113,12 @@   do -- get list of sets of mutually defined names from the TCM      -- this includes local and auxiliary functions introduced      -- during type-checking-     reportSLn "term.top" 20 $ "Termination checking " ++ show names ++ "..."++     cutoff <- optTerminationDepth <$> pragmaOptions+     let ?cutoff = cutoff++     reportSLn "term.top" 10 $ "Termination checking " ++ show names +++       " with cutoff=" ++ show cutoff ++ "..."      mutualBlock <- findMutualBlock (head names)      let allNames = Set.elems mutualBlock @@ -123,31 +128,49 @@      -- Get the name of size suc (if sized types are enabled)      suc <- sizeSuc +     -- The name of sharp (if available).+     sharp <- fmap nameOfSharp <$> coinductionKit++     guardingTypeConstructors <-+       optGuardingTypeConstructors <$> pragmaOptions+      -- first try to termination check ignoring the dot patterns-     let conf = DBPConf { useDotPatterns = False, withSizeSuc = suc }+     let conf = DBPConf+           { useDotPatterns           = False+           , guardingTypeConstructors = guardingTypeConstructors+           , withSizeSuc              = suc+           , sharp                    = sharp+           }      calls1 <- collect conf{ useDotPatterns = False }-     reportS "term.lex" 30 $ unlines+     reportS "term.lex" 20 $ unlines        [ "Calls (no dot patterns): " ++ show calls1        ]-     reportS "term.behaviours" 30 $ unlines-       [ "Recursion behaviours (no dot patterns):"-       , indent 2 $ Term.showBehaviour (Term.complete calls1)+     reportSDoc "term.behaviours" 20 $ vcat+       [ text "Recursion behaviours (no dot patterns):"+       , nest 2 $ return $ Term.prettyBehaviour (Term.complete calls1)        ]+     reportSDoc "term.matrices" 30 $ vcat+       [ text "Call matrices (no dot patterns):"+       , nest 2 $ pretty $ Term.complete calls1+       ]      r <- do let r = Term.terminates calls1              case r of                Right _ -> return r                Left _  -> do-     -- now try to termination check regarding the dot patterns+                 -- Try again, but include the dot patterns this time.                  calls2 <- collect conf{ useDotPatterns = True }-                 reportS "term.lex" 30 $ unlines-                   [ "Calls    (dot patterns): " ++ show calls2+                 reportS "term.lex" 20 $ unlines+                   [ "Calls (dot patterns): " ++ show calls2                    ]-                 reportS "term.behaviours" 30 $ unlines-                   [ "Recursion behaviours (no dot patterns):"-                   , indent 2 $ Term.showBehaviour (Term.complete calls1)-                   , "Recursion behaviours (dot patterns):"-                   , indent 2 $ Term.showBehaviour (Term.complete calls2)+                 reportSDoc "term.behaviours" 20 $ vcat+                   [ text "Recursion behaviours (dot patterns):"+                   , nest 2 $ return $+                       Term.prettyBehaviour (Term.complete calls2)                    ]+                 reportSDoc "term.matrices" 30 $ vcat+                   [ text "Call matrices (dot patterns):"+                   , nest 2 $ pretty $ Term.complete calls2+                   ]                  return $ Term.terminates calls2      case r of        Left  errDesc -> do@@ -194,13 +217,14 @@         def <- getConstInfo name         -- returns a TC.Monad.Base.Definition -	reportSDoc "term.def.fun" 10 $+	reportSDoc "term.def.fun" 5 $ 	  sep [ text "termination checking body of" <+> prettyTCM name 	      , nest 2 $ text ":" <+> (prettyTCM $ defType def) 	      ]         case (theDef def) of           Function{ funClauses = cls } ->-            collectCalls (termClause use names name) cls+            collectCalls (termClause use names name) $+              map translatedClause cls           _ -> return Term.empty  @@ -257,8 +281,14 @@  {- | Configuration parameters to termination checker. -}-data DBPConf = DBPConf { useDotPatterns :: Bool-                       , withSizeSuc    :: Maybe QName+data DBPConf = DBPConf { useDotPatterns           :: Bool+                       , guardingTypeConstructors :: Bool+                         -- ^ Do we assume that record and data type+                         --   constructors preserve guardedness?+                       , withSizeSuc              :: Maybe QName+                       , sharp                    :: Maybe QName+                         -- ^ The name of the sharp constructor, if+                         --   any.                        }  {- | Convert a term (from a dot pattern) to a DeBruijn pattern.@@ -314,7 +344,7 @@   return $ Just (i - 1, t, absBody b) stripBind conf i (DotP _) (Body b)   = __IMPOSSIBLE__ stripBind conf i (LitP l) b          = return $ Just (i, LitDBP l, b)-stripBind conf i (ConP c args) b     = do+stripBind conf i (ConP c _ args) b   = do     r <- stripBinds conf i (map unArg args) b     case r of       Just (i', dbps, b') -> return $ Just (i', ConDBP c dbps, b')@@ -351,7 +381,7 @@        Nothing -> return Term.empty        Just (-1, dbpats, Body t) -> do           dbpats <- mapM (stripCoConstructors use) dbpats-          termTerm names name dbpats t+          termTerm use names name dbpats t           -- note: convert dB levels into dB indices        Just (n, dbpats, Body t) -> internalError $ "termClause: misscalculated number of vars: guess=" ++ show nVars ++ ", real=" ++ show (nVars - 1 - n)        Just (n, dbpats, b)  -> internalError $ "termClause: not a Body" -- ++ show b@@ -363,111 +393,196 @@     boundVars (Body _)   = 0  -- | Extract recursive calls from a term.-termTerm :: MutualNames -> QName -> [DeBruijnPat] -> Term -> TCM Calls-termTerm names f pats0 t0 = do-  reportSDoc "term.check.clause" 11+termTerm :: DBPConf -> MutualNames -> QName -> [DeBruijnPat] -> Term -> TCM Calls+termTerm conf names f pats0 t0 = do+ cutoff <- optTerminationDepth <$> pragmaOptions+ let ?cutoff = cutoff+ do+  reportSDoc "term.check.clause" 6     (sep [ text "termination checking clause of" <+> prettyTCM f          , nest 2 $ text "lhs:" <+> hsep (map prettyTCM pats0)          , nest 2 $ text "rhs:" <+> prettyTCM t0          ])-  loop pats0 Le t0+  loop pats0 Term.le t0   where        Just fInd = toInteger <$> List.elemIndex f names-       loop :: [DeBruijnPat] -> Order -> Term -> TCM Calls++       -- sorts can contain arb. terms of type Nat,+       -- so look for recursive calls also+       -- in sorts.  Ideally, Sort would not be its own datatype but just+       -- a subgrammar of Term, then we would not need this boilerplate.+       loopSort :: (?cutoff :: Int) => [DeBruijnPat] -> Sort -> TCM Calls+       loopSort pats s = do+         case s of+           Type t -> loop pats Term.unknown t+           Prop   -> return Term.empty+           Inf    -> return Term.empty+           Lub s1 s2 -> liftM2 Term.union+             (loopSort pats s1)+             (loopSort pats s2)+           DLub s1 (Abs x s2) -> liftM2 Term.union+             (loopSort pats s1)+             (loopSort (map liftDBP pats) s2)+           Suc s -> loopSort pats s+           MetaS _ _ -> return Term.empty  -- see comment on MetaV below++       loopType :: (?cutoff :: Int) => [DeBruijnPat] -> Order -> Type -> TCM Calls+       loopType pats guarded (El s t) = liftM2 Term.union+         (loopSort pats s)+         (loop pats guarded t)++       loop :: (?cutoff :: Int) => [DeBruijnPat] -> Order -> Term -> TCM Calls        loop pats guarded t = do          t <- instantiate t          -- instantiate top-level MetaVar          suc <- sizeSuc-         case t of -            -- call to defined function-            Def g args0 ->-               do let args1 = map unArg args0-                  args2 <- mapM instantiateFull args1+             -- Handles constructor applications.+         let constructor+               :: QName+                  -- ^ Constructor name.+               -> Induction+                  -- ^ Should the constructor be treated as+                  --   inductive or coinductive?+               -> [(Arg Term, Bool)]+                  -- ^ All the arguments, and for every+                  --   argument a boolean which is 'True' iff the+                  --   argument should be viewed as preserving+                  --   guardedness.+               -> TCM Calls+             constructor c ind args = collectCalls loopArg args+               where+               loopArg (arg , preserves) = do+                 loop pats g' (unArg arg)+                 where g' = case (preserves, ind) of+                              (True,  Inductive)   -> guarded+                              (True,  CoInductive) -> Term.lt .*. guarded+                              (False, _)           -> Term.unknown -                  -- We have to reduce constructors in case they're reexported.-                  let reduceCon t@(Con _ _) = reduce t-                      reduceCon t           = return t-                  args2 <- mapM reduceCon args2-                  args  <- mapM etaContract args2+             -- Handles function applications.+             function g args0 = do+               let args1 = map unArg args0+               args2 <- mapM instantiateFull args1 -                  -- collect calls in the arguments of this call-                  calls <- collectCalls (loop pats Unknown) args+               -- We have to reduce constructors in case they're reexported.+               let reduceCon t@(Con _ _) = reduce t+                   reduceCon t           = return t+               args2 <- mapM reduceCon args2+               args  <- mapM etaContract args2 +               -- collect calls in the arguments of this call+               calls <- collectCalls (loop pats Term.unknown) args -                  reportSDoc "term.found.call" 10-                          (sep [ text "found call from" <+> prettyTCM f-                               , nest 2 $ text "to" <+> prettyTCM g-                	       ]) -                  -- insert this call into the call list-                  case List.elemIndex g names of+               reportSDoc "term.found.call" 20+                       (sep [ text "found call from" <+> prettyTCM f+                            , nest 2 $ text "to" <+> prettyTCM g+                            ]) -                     -- call leads outside the mutual block and can be ignored-                     Nothing   -> return calls+               -- insert this call into the call list+               case List.elemIndex g names of -                     -- call is to one of the mutally recursive functions-                     Just gInd' -> do+                  -- call leads outside the mutual block and can be ignored+                  Nothing   -> return calls -                        matrix <- compareArgs suc pats args-                        let ncols   = genericLength pats + 1-                            nrows   = genericLength args + 1-                            matrix' = addGuardedness guarded (ncols - 1) matrix+                  -- call is to one of the mutally recursive functions+                  Just gInd' -> do -                        reportSDoc "term.kept.call" 10-                          (sep [ text "kept call from" <+> prettyTCM f-                                  <+> hsep (map prettyTCM pats)-                               , nest 2 $ text "to" <+> prettyTCM g <+>-                                           hsep (map (parens . prettyTCM) args)-                               , nest 2 $ text ("call matrix: " ++ show matrix)-                	       ])+                     matrix <- compareArgs suc pats args+                     let (nrows, ncols, matrix') = addGuardedness guarded+                            (genericLength args) -- number of rows+                            (genericLength pats) -- number of cols+                            matrix -                        return-                          (Term.insert-                            (Term.Call { Term.source = fInd-                                       , Term.target = toInteger gInd'-                                       , Term.cm     = makeCM ncols nrows matrix'-                                       })-                            -- Note that only the base part of the-                            -- name is collected here.-                            (Set.fromList $ fst $ R.getRangesA g)-                            calls) +                     reportSDoc "term.kept.call" 5+                       (sep [ text "kept call from" <+> prettyTCM f+                               <+> hsep (map prettyTCM pats)+                            , nest 2 $ text "to" <+> prettyTCM g <+>+                                        hsep (map (parens . prettyTCM) args)+                            , nest 2 $ text ("call matrix (with guardeness): " ++ show matrix')+                            ])++                     return+                       (Term.insert+                         (Term.Call { Term.source = fInd+                                    , Term.target = toInteger gInd'+                                    , Term.cm     = makeCM ncols nrows matrix'+                                    })+                         -- Note that only the base part of the+                         -- name is collected here.+                         (Set.fromList $ fst $ R.getRangesA g)+                         calls)+++         case t of++            -- Constructed value.+            Con c args ->+              constructor c Inductive $ zip args (repeat True)++            Def g args0+              | Just g == sharp conf ->+                constructor g CoInductive $ zip args0 (repeat True)+              | guardingTypeConstructors conf -> do+                gDef <- theDef <$> getConstInfo g+                case gDef of+                  Datatype {dataArgOccurrences = occs} -> con occs+                  Record   {recArgOccurrences  = occs} -> con occs+                  _                                    -> fun+              | otherwise -> fun+              where+              -- Data or record type constructor.+              con occs =+                constructor g Inductive $+                  zip args0 (map preserves occs ++ repeat False)+                where+                preserves Positive = True+                preserves Negative = False+                preserves Unused   = True++              -- Call to defined function.+              fun = function g args0+             -- abstraction-            Lam _ (Abs _ t) -> loop (map liftDBP pats) guarded t+            Lam h (Abs x t) -> loop (map liftDBP pats) guarded t              -- variable-            Var i args -> collectCalls (loop pats Unknown) (map unArg args)--            -- constructed value-            Con c args -> do-              ind <- whatInduction c-              let g' = case ind of-                        Inductive   -> guarded-                        CoInductive -> Lt .*. guarded-              collectCalls (loop pats g') (map unArg args)+            Var i args -> collectCalls (loop pats Term.unknown) (map unArg args)              -- dependent function space-            Pi (Arg _ (El _ a)) (Abs _ (El _ b)) ->-               do g1 <- loop pats guarded a-                  g2 <- loop (map liftDBP pats) guarded b+            Pi a (Abs _ b) ->+               do g1 <- loopType pats Term.unknown (unArg a)+                  g2 <- loopType (map liftDBP pats) piArgumentGuarded b                   return $ g1 `Term.union` g2              -- non-dependent function space-            Fun (Arg _ (El _ a)) (El _ b) ->-               do g1 <- loop pats guarded a-                  g2 <- loop pats guarded b+            Fun a b ->+               do g1 <- loopType pats Term.unknown (unArg a)+                  g2 <- loopType pats piArgumentGuarded b                   return $ g1 `Term.union` g2              -- literal             Lit l -> return Term.empty              -- sort-            Sort s -> return Term.empty+            Sort s -> loopSort pats s  	    -- Unsolved metas are not considered termination problems, there 	    -- will be a warning for them anyway.             MetaV x args -> return Term.empty +            -- erased proof+            DontCare -> return Term.empty++         where+         -- Should function and Π type constructors be treated as+         -- preserving guardedness in their right arguments?+         piArgumentGuarded =+           if guardingTypeConstructors conf then+             guarded+            else+             Term.unknown+ {- | compareArgs suc pats ts       compare a list of de Bruijn patterns (=parameters) @pats@@@ -476,7 +591,7 @@       If sized types are enabled, @suc@ is the name of the size successor.  -}-compareArgs :: Maybe QName -> [DeBruijnPat] -> [Term] -> TCM [[Term.Order]]+compareArgs ::  (?cutoff :: Int) => Maybe QName -> [DeBruijnPat] -> [Term] -> TCM [[Term.Order]] compareArgs suc pats ts = mapM (\t -> mapM (compareTerm suc t) pats) ts  -- | 'makeCM' turns the result of 'compareArgs' into a proper call matrix@@ -487,11 +602,19 @@                             })                  matrix +{- To turn off guardedness, restore this code.+-- | 'addGuardedness' does nothing.+addGuardedness :: Integral n => Order -> n -> n -> [[Term.Order]] -> (n, n, [[Term.Order]])+addGuardedness g nrows ncols m = (nrows, ncols, m)+-}+ -- | 'addGuardedness' adds guardedness flag in the upper left corner (0,0).-addGuardedness :: Integral n => Order -> n -> [[Term.Order]] -> [[Term.Order]]-addGuardedness g ncols m =-  (g : genericReplicate ncols Unknown) : map (Unknown :) m+addGuardedness :: Integral n => Order -> n -> n -> [[Term.Order]] -> (n, n, [[Term.Order]])+addGuardedness g nrows ncols m =+  (nrows + 1, ncols + 1,+   (g : genericReplicate ncols Term.unknown) : map (Term.unknown :) m) + -- | Compute the sub patterns of a 'DeBruijnPat'. subPatterns :: DeBruijnPat -> [DeBruijnPat] subPatterns p = case p of@@ -499,33 +622,41 @@   ConDBP c ps -> ps ++ concatMap subPatterns ps   LitDBP _    -> [] -compareTerm :: Maybe QName -> Term -> DeBruijnPat -> TCM Term.Order+compareTerm :: (?cutoff :: Int) => Maybe QName -> Term -> DeBruijnPat -> TCM Term.Order compareTerm suc t p = compareTerm' suc t p {- compareTerm t p = Term.supremum $ compareTerm' t p : map cmp (subPatterns p)   where-    cmp p' = (Term..*.) Term.Lt (compareTerm' t p')+    cmp p' = (Term..*.) Term.lt (compareTerm' t p') -}  -- | compareTerm t dbpat --   Precondition: top meta variable resolved-compareTerm' :: Maybe QName -> Term -> DeBruijnPat -> TCM Term.Order+compareTerm' :: (?cutoff :: Int) => Maybe QName -> Term -> DeBruijnPat -> TCM Term.Order compareTerm' _ (Var i _)  p              = compareVar i p compareTerm' _ (Lit l)    (LitDBP l')-  | l == l'   = return Term.Le-  | otherwise = return Term.Unknown+  | l == l'   = return Term.le+  | otherwise = return Term.unknown compareTerm' suc (Lit l) p = do   t <- constructorForm (Lit l)   case t of-    Lit _ -> return Term.Unknown+    Lit _ -> return Term.unknown     _     -> compareTerm' suc t p compareTerm' suc (Con c ts) (ConDBP c' ps)   | c == c' = compareConArgs suc ts ps compareTerm' suc (Def s ts) (ConDBP s' ps)   | s == s' && Just s == suc = compareConArgs suc ts ps compareTerm' _ t@Con{} (ConDBP _ ps)-  | any (isSubTerm t) ps = return Lt-compareTerm' _ _ _ = return Term.Unknown+  | any (isSubTerm t) ps = return Term.lt+-- new cases for counting constructors+-- register also increase+compareTerm' suc (Def s ts) p | Just s == suc = do+    os <- mapM (\ t -> compareTerm' suc (unArg t) p) ts+    return $ decr (-1) .*. infimum os+compareTerm' suc (Con c ts) p = do+    os <- mapM (\ t -> compareTerm' suc (unArg t) p) ts+    return $ if (null os) then Term.unknown else decr (-1) .*. infimum os+compareTerm' _ _ _ = return Term.unknown  isSubTerm :: Term -> DeBruijnPat -> Bool isSubTerm t p = equal t p || properSubTerm t p@@ -541,19 +672,19 @@     properSubTerm t (ConDBP _ ps) = any (isSubTerm t) ps     properSubTerm _ _ = False -compareConArgs :: Maybe QName -> Args -> [DeBruijnPat] -> TCM Term.Order+compareConArgs :: (?cutoff :: Int) => Maybe QName -> Args -> [DeBruijnPat] -> TCM Term.Order compareConArgs suc ts ps =   -- we may assume |ps| >= |ts|, otherwise c ps would be of functional type   -- which is impossible       case (length ts, length ps) of-        (0,0) -> return Term.Le        -- c <= c-        (0,1) -> return Term.Unknown   -- c not<= c x+        (0,0) -> return Term.le        -- c <= c+        (0,1) -> return Term.unknown   -- c not<= c x         (1,0) -> __IMPOSSIBLE__         (1,1) -> compareTerm' suc (unArg (head ts)) (head ps)         (_,_) -> do -- build "call matrix"           m <- mapM (\t -> mapM (compareTerm' suc (unArg t)) ps) ts           let m2 = makeCM (genericLength ps) (genericLength ts) m-          return $ Term.Mat (Term.mat m2)+          return $ Term.orderMat (Term.mat m2) {- --    if null ts then Term.Le --               else Term.infimum (zipWith compareTerm' (map unArg ts) ps)@@ -562,10 +693,10 @@        -- allows examples like (x, y) < (Succ x, y) -} -compareVar :: Nat -> DeBruijnPat -> TCM Term.Order-compareVar i (VarDBP j)    = return $ if i == j then Term.Le else Term.Unknown-compareVar i (LitDBP _)    = return $ Term.Unknown+compareVar :: (?cutoff :: Int) => Nat -> DeBruijnPat -> TCM Term.Order+compareVar i (VarDBP j)    = return $ if i == j then Term.le else Term.unknown+compareVar i (LitDBP _)    = return $ Term.unknown compareVar i (ConDBP c ps) = do   os <- mapM (compareVar i) ps   let o = Term.supremum os-  return $ (Term..*.) Term.Lt o+  return $ (Term..*.) Term.lt o
src/full/Agda/Termination/Termination.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE ImplicitParams #-}+ -- | Termination checker, based on --     \"A Predicative Analysis of Structural Recursion\" by --     Andreas Abel and Thorsten Altenkirch (JFP'01),@@ -12,7 +14,7 @@  import Agda.Termination.Lexicographic import Agda.Termination.CallGraph-import Agda.Termination.Matrix+import Agda.Termination.SparseMatrix import Agda.Utils.Either import Agda.Utils.TestHelpers import Control.Arrow@@ -50,12 +52,12 @@ -- This criterion is strictly more liberal than searching for a -- lexicographic order (and easier to implement, but harder to justify). -terminates :: (Ord meta, Monoid meta) => CallGraph meta -> Either meta ()+terminates :: (Ord meta, Monoid meta, ?cutoff :: Int) => CallGraph meta -> Either meta () terminates cs = let ccs = complete cs                 in                   checkIdems $ toList ccs -checkIdems :: (Ord meta,Monoid meta) => [(Call,meta)] -> Either meta ()+checkIdems :: (Ord meta, Monoid meta, ?cutoff :: Int) => [(Call,meta)] -> Either meta () checkIdems [] = Right () checkIdems ((c,m):xs) = if (checkIdem c) then checkIdems xs else Left m @@ -65,7 +67,7 @@    The examples below do not include the guardedness flag, though.  -} -checkIdem :: Call -> Bool+checkIdem :: (?cutoff :: Int) => Call -> Bool checkIdem c = let   b = target c == source c   idem = (c >*< c) == c@@ -74,12 +76,11 @@   in     (not b) || (not idem) || hasDecr --- | Matrix is decreasing if any diagonal element is 'Lt'.+-- | Matrix is decreasing if any diagonal element is decreasing.  isDecr :: Order -> Bool-isDecr Lt = True isDecr (Mat m) = any isDecr $ Array.elems $ diagonal m-isDecr _ = False+isDecr o = decreasing o  ------------------------------------------------------------------------ -- Some examples@@ -101,16 +102,17 @@   flat = 1   aux  = 2   c1 = Call { source = flat, target = aux-            , cm = CallMatrix $ fromLists (Size 2 1) [[Lt], [Lt]]+            , cm = CallMatrix $ fromLists (Size 2 1) [[lt], [lt]]             }   c2 = Call { source = aux,  target = aux-            , cm = CallMatrix $ fromLists (Size 2 2) [ [Lt, Unknown]-                                                     , [Unknown, Le]]+            , cm = CallMatrix $ fromLists (Size 2 2) [ [lt, unknown]+                                                     , [unknown, le]]             }   c3 = Call { source = aux,  target = flat-            , cm = CallMatrix $ fromLists (Size 1 2) [[Unknown, Le]]+            , cm = CallMatrix $ fromLists (Size 1 2) [[unknown, le]]             } +prop_terminates_example1 ::  (?cutoff :: Int) => Bool prop_terminates_example1 = isRight $ terminates example1  -- | An example which is now handled by this algorithm: argument@@ -125,10 +127,11 @@   where   plus = 1   c = Call { source = plus, target = plus-           , cm = CallMatrix $ fromLists (Size 2 2) [ [Unknown, Le]-                                                    , [Lt, Unknown] ]+           , cm = CallMatrix $ fromLists (Size 2 2) [ [unknown, le]+                                                    , [lt, unknown] ]            } +prop_terminates_example2 ::  (?cutoff :: Int) => Bool prop_terminates_example2 = isRight $ terminates example2  -- | A related example which is anyway handled: argument swapping addition@@ -148,10 +151,11 @@   plus  = 1   plus' = 2   c f g = Call { source = f, target = g-               , cm = CallMatrix $ fromLists (Size 2 2) [ [Unknown, Le]-                                                        , [Lt, Unknown] ]+               , cm = CallMatrix $ fromLists (Size 2 2) [ [unknown, le]+                                                        , [lt, unknown] ]                } +prop_terminates_example3 ::  (?cutoff :: Int) => Bool prop_terminates_example3 = isRight $ terminates example3  -- | A contrived example.@@ -171,18 +175,19 @@   f = 1   g = 2   c1 = Call { source = f, target = f-            , cm = CallMatrix $ fromLists (Size 2 2) [ [Le, Unknown]-                                                     , [Unknown, Le] ]+            , cm = CallMatrix $ fromLists (Size 2 2) [ [le, unknown]+                                                     , [unknown, le] ]             }   c2 = Call { source = f, target = g-            , cm = CallMatrix $ fromLists (Size 2 2) [ [Lt, Unknown]-                                                     , [Unknown, Le] ]+            , cm = CallMatrix $ fromLists (Size 2 2) [ [lt, unknown]+                                                     , [unknown, le] ]             }   c3 = Call { source = g, target = f-            , cm = CallMatrix $ fromLists (Size 2 2) [ [Le, Unknown]-                                                     , [Unknown, Le] ]+            , cm = CallMatrix $ fromLists (Size 2 2) [ [le, unknown]+                                                     , [unknown, le] ]             } +prop_terminates_example4 ::  (?cutoff :: Int) => Bool prop_terminates_example4 = isLeft $ terminates example4  -- | This should terminate.@@ -197,22 +202,23 @@   f = 1   g = 2   c1 = Call { source = f, target = g-            , cm = CallMatrix $ fromLists (Size 2 2) [ [Lt, Unknown]-                                                     , [Unknown, Le] ]+            , cm = CallMatrix $ fromLists (Size 2 2) [ [lt, unknown]+                                                     , [unknown, le] ]             }   c2 = Call { source = f, target = f-            , cm = CallMatrix $ fromLists (Size 2 2) [ [Unknown, Unknown]-                                                     , [Unknown, Lt] ]+            , cm = CallMatrix $ fromLists (Size 2 2) [ [unknown, unknown]+                                                     , [unknown, lt] ]             }   c3 = Call { source = g, target = f-            , cm = CallMatrix $ fromLists (Size 2 2) [ [Le, Unknown]-                                                     , [Unknown, Le] ]+            , cm = CallMatrix $ fromLists (Size 2 2) [ [le, unknown]+                                                     , [unknown, le] ]             }   c4 = Call { source = g, target = g-            , cm = CallMatrix $ fromLists (Size 2 2) [ [Lt, Unknown]-                                                     , [Unknown, Le] ]+            , cm = CallMatrix $ fromLists (Size 2 2) [ [lt, unknown]+                                                     , [unknown, le] ]             } +prop_terminates_example5 ::  (?cutoff :: Int) => Bool prop_terminates_example5 = isRight $ terminates example5  -- | Another example which should fail.@@ -229,15 +235,16 @@   where   f = 1   c1 = Call { source = f, target = f-            , cm = CallMatrix $ fromLists (Size 1 1) [ [Lt] ]+            , cm = CallMatrix $ fromLists (Size 1 1) [ [lt] ]             }   c2 = Call { source = f, target = f-            , cm = CallMatrix $ fromLists (Size 1 1) [ [Le] ]+            , cm = CallMatrix $ fromLists (Size 1 1) [ [le] ]             }   c3 = Call { source = f, target = f-            , cm = CallMatrix $ fromLists (Size 1 1) [ [Le] ]+            , cm = CallMatrix $ fromLists (Size 1 1) [ [le] ]             } +prop_terminates_example6 ::  (?cutoff :: Int) => Bool prop_terminates_example6 = isLeft $ terminates example6  ------------------------------------------------------------------------@@ -252,3 +259,4 @@   , quickCheck' prop_terminates_example5   , quickCheck' prop_terminates_example6   ]+  where ?cutoff = 0 -- all these examples are with just lt,le,unknown
src/full/Agda/Tests.hs view
@@ -17,6 +17,7 @@ import Agda.Termination.Lexicographic         as TermLex    (tests) import Agda.Termination.Matrix                as TermMatrix (tests) import Agda.Termination.Semiring	      as TermRing   (tests)+import Agda.Termination.SparseMatrix          as TermSparse (tests) import Agda.TypeChecking.Tests                as TypeChck   (tests) import Agda.Utils.Either	              as UtilEith   (tests) import Agda.Utils.FileName                    as UtilFile   (tests)@@ -34,10 +35,11 @@   , SyntPars.tests   , SyntPosi.tests   , TermTerm.tests-  , TermRing.tests-  , TermMatrix.tests-  , TermLex.tests   , TermCall.tests+  , TermLex.tests+  , TermMatrix.tests+  , TermRing.tests+  , TermSparse.tests   , TypeChck.tests   , UtilEith.tests   , UtilFile.tests
src/full/Agda/TypeChecking/Abstract.hs view
@@ -14,7 +14,7 @@ piAbstractTerm :: Term -> Type -> Type -> Type piAbstractTerm v a b = fun a (abstractTerm v b)   where-    fun a b = El s $ Pi (Arg NotHidden a) $ Abs "w" b+    fun a b = El s $ Pi (Arg NotHidden Relevant a) $ Abs "w" b       where s = (sLub `on` getSort) a b  class AbstractTerm a where@@ -31,13 +31,25 @@     Pi a b      -> uncurry Pi $ absT (a, b)     Fun a b      -> uncurry Fun $ absT (a, b)     Lit l       -> Lit l-    Sort s      -> Sort s+    Sort s      -> Sort $ absT s     MetaV m vs  -> MetaV m $ absT vs+    DontCare    -> DontCare     where       absT x = abstractTerm u x  instance AbstractTerm Type where   abstractTerm u (El s v) = El s $ abstractTerm u v++instance AbstractTerm Sort where+  abstractTerm u s = case s of+    Type n     -> Type $ absS n+    Prop       -> Prop+    Suc s      -> Suc $ absS s+    Lub s1 s2  -> Lub (absS s1) (absS s2)+    MetaS m as -> MetaS m (absS as)+    Inf        -> Inf+    DLub s1 s2 -> DLub (absS s1) (absS s2)+    where absS x = abstractTerm u x  instance AbstractTerm a => AbstractTerm (Arg a) where   abstractTerm = fmap . abstractTerm
+ src/full/Agda/TypeChecking/CompiledClause.hs view
@@ -0,0 +1,117 @@+{-# LANGUAGE TypeOperators, CPP, DeriveDataTypeable #-}+module Agda.TypeChecking.CompiledClause where++import qualified Data.Map as Map+import Data.Map (Map)+import Data.Monoid+import Data.Generics++import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.Syntax.Literal+import Agda.Utils.List+import Agda.Utils.Pretty++import Agda.Utils.Impossible+#include "../undefined.h"++type key :-> value = Map key value++data Case c = Branches { conBranches    :: QName   :-> c+                       , litBranches    :: Literal :-> c+                       , catchAllBranch :: Maybe c+                       }+  deriving (Typeable, Data)++data CompiledClauses+  = Case Int (Case CompiledClauses)+  | Done Int Term+  | Fail+  deriving (Typeable, Data)++-- | Note that it is the /translated/ clauses which are compiled, not+-- the original ones.++compileClauses :: [Clauses] -> CompiledClauses+compileClauses cs =+  compile [ (clausePats c, clauseBody c)+          | Clauses { translatedClause = c } <- cs+          ]++type Cl  = ([Arg Pattern], ClauseBody)+type Cls = [Cl]++compile :: Cls -> CompiledClauses+compile cs = case nextSplit cs of+  Just n  -> Case n $ fmap compile $ splitOn n cs+  Nothing -> case map getBody cs of+    [Just (m, t)] -> Done m t+    _             -> Fail+  where+    getBody (_, b) = body b+    body (Bind b)   = inc $ body (absBody b)+    body (NoBind b) = body b+    body (Body t)   = Just (0, t)+    body NoBody     = Nothing+    inc Nothing       = Nothing+    inc (Just (n, t)) = Just (n + 1, t)++nextSplit :: Cls -> Maybe Int+nextSplit [] = __IMPOSSIBLE__+nextSplit ((ps, _):_) = mhead [ n | (a, n) <- zip ps [0..], isPat (unArg a) ]+  where+    isPat VarP{} = False+    isPat DotP{} = False+    isPat ConP{} = True+    isPat LitP{} = True++splitOn :: Int -> Cls -> Case Cls+splitOn n cs = mconcat $ map (fmap (:[]) . splitC n) cs++splitC :: Int -> Cl -> Case Cl+splitC n (ps, b) = case unArg p of+  ConP c _ qs -> conCase c (ps0 ++ qs ++ ps1, b)+  LitP l      -> litCase l (ps0 ++ ps1, b)+  _           -> catchAll (ps, b)+  where+    (ps0, p, ps1) = extractNthElement' n ps++litCase l x = Branches Map.empty (Map.singleton l x) Nothing+conCase c x = Branches (Map.singleton c x) Map.empty Nothing+catchAll x  = Branches Map.empty Map.empty (Just x)++instance Functor Case where+  fmap f (Branches cs ls m) = Branches (fmap f cs) (fmap f ls) (fmap f m)++instance Monoid m => Monoid (Case m) where+  mempty = Branches Map.empty Map.empty Nothing+  mappend (Branches cs  ls  m)+          (Branches cs' ls' m') =+    Branches (Map.unionWith mappend cs cs')+             (Map.unionWith mappend ls ls')+             (mappend m m')++instance Pretty a => Show (Case a) where+  show = show . pretty+instance Show CompiledClauses where+  show = show . pretty++instance Pretty a => Pretty (Case a) where+  prettyPrec p (Branches cs ls m) =+    mparens (p > 0) $ vcat $+      pr cs ++ pr ls ++ prC m+    where+      prC Nothing = []+      prC (Just x) = [text "_ ->" <+> pretty x]+      pr m = [ sep [ text (show x ++ " ->")+                   , nest 2 $ pretty v ]+             | (x, v) <- Map.toList m ]++instance Pretty CompiledClauses where+  pretty (Done m t)  = text ("done[" ++ show m ++ "]") <+> text (show t)+  pretty Fail        = text "fail"+  pretty (Case n bs) =+    sep [ text ("case " ++ show n ++ " of")+        , nest 2 $ pretty bs+        ]+
+ src/full/Agda/TypeChecking/CompiledClause/Match.hs view
@@ -0,0 +1,69 @@+{-# LANGUAGE CPP, PatternGuards #-}+module Agda.TypeChecking.CompiledClause.Match where++import Control.Applicative+import qualified Data.Map as Map+import Data.Traversable++import Agda.Syntax.Internal+import Agda.Syntax.Common+import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Primitive++import Agda.Utils.List++import Agda.Utils.Impossible+#include "../../undefined.h"++matchCompiled :: CompiledClauses -> Args -> TCM (Reduced (Blocked Args) Term)+matchCompiled c args = match c args id []++type Stack = [(CompiledClauses, Args, Args -> Args)]++-- TODO: literal/constructor pattern conflict (for Nat)++match :: CompiledClauses -> Args -> (Args -> Args) -> Stack -> TCM (Reduced (Blocked Args) Term)+match Fail args patch stack = return $ NoReduction $ NotBlocked (patch args)+match (Done _ t) args _ _ =+  return $ YesReduction $ substs (reverse $ map unArg args) t+match (Case n bs) args patch stack = do+  let (args0, Arg h r v, args1) = extractNthElement' n args+  w  <- unfoldCorecursion =<< reduceB v+  cv <- constructorForm $ ignoreBlocking w+  let v      = ignoreBlocking w+      args'  = args0 ++ [Arg h r v] ++ args1+      stack' = maybe [] (\c -> [(c, args', patch)]) (catchAllBranch bs)+               ++ stack+      patchLit args = patch (args0 ++ [Arg h r v] ++ args1)+        where (args0, args1) = splitAt n args+      patchCon c m args = patch (args0 ++ [Arg h r $ Con c vs] ++ args1)+        where (args0, args1') = splitAt n args+              (vs, args1)     = splitAt m args1'+  case w of+    Blocked x _            -> return $ NoReduction $ Blocked x (patch args')+    NotBlocked (MetaV x _) -> return $ NoReduction $ Blocked x (patch args')+    NotBlocked (Lit l) -> case Map.lookup l (litBranches bs) of+      Nothing -> match' stack''+      Just cc -> match cc (args0 ++ args1) patchLit stack''+      where+        stack'' = (++ stack') $ case cv of+          Con c vs -> case Map.lookup c (conBranches bs) of+            Nothing -> []+            Just cc -> [(cc, args0 ++ vs ++ args1, patchCon c (length vs))]+          _        -> []+    NotBlocked (Con c vs) -> case Map.lookup c (conBranches bs) of+      Nothing -> match' stack'+      Just cc -> match cc (args0 ++ vs ++ args1) (patchCon c (length vs)) stack'+    NotBlocked _ -> return $ NoReduction $ NotBlocked (patch args')++match' :: Stack -> TCM (Reduced (Blocked Args) Term)+match' ((c, args, patch):stack) = match c args patch stack+match' [] = typeError $ GenericError "Incomplete pattern matching"++unfoldCorecursion (NotBlocked (Def f args)) =+  unfoldDefinition True reduceB (Def f []) f args+unfoldCorecursion w = return w+
+ src/full/Agda/TypeChecking/CompiledClause/Match.hs-boot view
@@ -0,0 +1,9 @@++module Agda.TypeChecking.CompiledClause.Match where++import Agda.Syntax.Internal+import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.CompiledClause++matchCompiled :: CompiledClauses -> Args -> TCM (Reduced (Blocked Args) Term)+
src/full/Agda/TypeChecking/Constraints.hs view
@@ -21,6 +21,7 @@ import {-# SOURCE #-} Agda.TypeChecking.Conversion import {-# SOURCE #-} Agda.TypeChecking.MetaVars import {-# SOURCE #-} Agda.TypeChecking.Empty+import {-# SOURCE #-} Agda.TypeChecking.UniversePolymorphism import Agda.TypeChecking.Free  import Agda.Utils.Fresh@@ -32,7 +33,7 @@ -- catchConstraint :: MonadTCM tcm => Constraint -> TCM Constraints -> tcm Constraints catchConstraint c v = liftTCM $-   catchError v $ \err ->+   catchError_ v $ \err ->    case errError err of        PatternErr s -> put s >> buildConstraint c        _	    -> throwError err@@ -58,7 +59,9 @@     where 	isNonBlocking = isNB . clValue 	isNB SortCmp{}        = True+        isNB LevelCmp{}       = True 	isNB ValueCmp{}       = False+        isNB ArgsCmp{}        = False 	isNB TypeCmp{}        = False 	isNB TelCmp{}         = False 	isNB (Guarded c _)    = isNB c@@ -83,7 +86,9 @@     cs <- concat <$> mapM (withConstraint solveConstraint) cs     n' <- length <$> getInstantiatedMetas     reportSDoc "tc.constr.solve" 70 $-      sep [ text "new constraints", nest 2 $ prettyTCM cs ]+      sep [ text "new constraints", nest 2 $ prettyTCM cs+          , nest 2 $ text $ "progress: " ++ show n' ++ " --> " ++ show n+          ]     cs <- if (n' > n) 	then solveConstraints cs -- Go again if we made progress 	else return cs@@ -92,9 +97,11 @@  solveConstraint :: MonadTCM tcm => Constraint -> tcm Constraints solveConstraint (ValueCmp cmp a u v) = compareTerm cmp a u v+solveConstraint (ArgsCmp cmp a u v)  = compareArgs cmp a u v solveConstraint (TypeCmp cmp a b)    = compareType cmp a b solveConstraint (TelCmp cmp a b)     = compareTel  cmp a b solveConstraint (SortCmp cmp s1 s2)  = compareSort cmp s1 s2+solveConstraint (LevelCmp cmp a b)   = compareLevel cmp a b solveConstraint (Guarded c cs)       = guardConstraint (return cs) c solveConstraint (IsEmpty t)          = isEmptyTypeC t solveConstraint (UnBlock m)          = do
src/full/Agda/TypeChecking/Conversion.hs view
@@ -6,7 +6,6 @@ import Control.Monad import Control.Monad.State import Control.Monad.Error-import Data.Generics import Data.Traversable hiding (mapM, sequence) import Data.List hiding (sort) import qualified Data.List as List@@ -28,6 +27,8 @@ import Agda.TypeChecking.SizedTypes import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Level+import Agda.TypeChecking.EtaContract+import Agda.TypeChecking.UniversePolymorphism  import Agda.Utils.Monad @@ -44,8 +45,8 @@ sameVars :: Args -> Args -> Bool sameVars xs ys = and $ zipWith same xs ys     where-	same (Arg _ (Var n [])) (Arg _ (Var m [])) = n == m-	same _ _				   = False+	same (Arg _ _ (Var n [])) (Arg _ _ (Var m [])) = n == m+	same _ _				       = False  equalTerm :: MonadTCM tcm => Type -> Term -> Term -> tcm Constraints equalTerm = compareTerm CmpEq@@ -63,6 +64,7 @@ -- compareTerm :: MonadTCM tcm => Comparison -> Type -> Term -> Term -> tcm Constraints compareTerm cmp a m n =+  verboseBracket "tc.conv.term" 5 "compareTerm" $   catchConstraint (ValueCmp cmp a m n) $ do     a'       <- reduce a     reportSDoc "tc.conv.term" 10 $ fsep@@ -70,12 +72,12 @@     proofIrr <- proofIrrelevance     isSize   <- isSizeType a'     s        <- reduce $ getSort a'-    mlvl     <- liftTCM $ (Just <$> primLevel) `catchError` \_ -> return Nothing+    mlvl     <- mlevel     case s of       Prop | proofIrr -> return []       _    | isSize   -> compareSizes cmp m n       _               -> case unEl a' of-        a | Just a == mlvl && cmp == CmpEq -> equalLevel m n+        a | Just a == mlvl -> equalLevel m n         Pi a _    -> equalFun (a,a') m n         Fun a _   -> equalFun (a,a') m n         MetaV x _ -> do@@ -85,7 +87,7 @@             else buildConstraint (ValueCmp cmp a m n)         Lam _ _   -> __IMPOSSIBLE__         Def r ps  -> do-          isrec <- isRecord r+          isrec <- isEtaRecord r           if isrec             then do               m <- reduceB m@@ -118,12 +120,13 @@  compareTel :: MonadTCM tcm => Comparison -> Telescope -> Telescope -> tcm Constraints compareTel cmp tel1 tel2 =+  verboseBracket "tc.conv.tel" 5 "compareTel" $   catchConstraint (TelCmp cmp tel1 tel2) $ case (tel1, tel2) of     (EmptyTel, EmptyTel) -> return []     (EmptyTel, _)        -> bad     (_, EmptyTel)        -> bad-    (ExtendTel arg1@(Arg h1 a1) tel1, ExtendTel arg2@(Arg h2 a2) tel2)-      | h1 /= h2  -> bad+    (ExtendTel arg1@(Arg h1 r1 a1) tel1, ExtendTel arg2@(Arg h2 r2 a2) tel2)+      | h1 /= h2 -> bad       | otherwise -> do           let (tel1', tel2') = raise 1 (tel1, tel2)               arg            = Var 0 []@@ -132,7 +135,7 @@           let c = TelCmp cmp (absApp tel1' arg) (absApp tel2' arg)  	  let dependent = 0 `freeIn` absBody tel2-	  +           if dependent 	    then addCtx name arg1 $ guardConstraint (return cs) c 	    else do cs' <- addCtx name arg1 $ solveConstraint c@@ -147,9 +150,10 @@ -- compareAtom :: MonadTCM tcm => Comparison -> Type -> Term -> Term -> tcm Constraints compareAtom cmp t m n =+    verboseBracket "tc.conv.atom" 5 "compareAtom" $     catchConstraint (ValueCmp cmp t m n) $ do-      mb <- traverse constructorForm =<< reduceB m-      nb <- traverse constructorForm =<< reduceB n+      mb <- traverse constructorForm =<< etaExpandBlocked =<< reduceB m+      nb <- traverse constructorForm =<< etaExpandBlocked =<< reduceB n       let m = ignoreBlocking mb           n = ignoreBlocking nb       reportSDoc "tc.conv.atom" 10 $ fsep@@ -224,10 +228,15 @@ 		compareArgs pol a xArgs yArgs 	    (Con x xArgs, Con y yArgs) 		| x == y -> do-		    -- The type is a datatype.+		    -- The type is a datatype or a record. 		    Def d args <- reduce $ unEl t-		    -- Get the number of parameters to the datatype-		    Datatype{dataPars = npars} <- theDef <$> getConstInfo d+		    -- Get the number of parameters to the datatype (or record)+                    npars <- do+                      def <- theDef <$> getConstInfo d+                      case def of+		        Datatype{dataPars = npars} -> return npars+                        Record{recPars = npars}    -> return npars+                        _                          -> __IMPOSSIBLE__ 		    -- The type to compare the arguments at is obtained by 		    -- instantiating the parameters. 		    a <- defType <$> getConstInfo x@@ -237,11 +246,13 @@                     compareArgs [] a' xArgs yArgs             _ -> typeError $ UnequalTerms cmp m n t     where-	equalFun (FunV arg1@(Arg h1 a1) t1) (FunV (Arg h2 a2) t2)+	equalFun (FunV arg1@(Arg h1 r1 a1) t1) (FunV (Arg h2 r2 a2) t2) 	    | h1 /= h2	= typeError $ UnequalHiding ty1 ty2+            -- Andreas 2010-09-21 compare r1 and r2, but ignore forcing annotations!+	    | ignoreForced r1 /= ignoreForced r2 = typeError $ UnequalRelevance ty1 ty2 	    | otherwise = do 		    let (ty1',ty2') = raise 1 (ty1,ty2)-			arg	    = Arg h1 (Var 0 [])+			arg	    = Arg h1 r1 (Var 0 []) 		    name <- freshName_ (suggest t1 t2) 		    cs   <- compareType cmp a2 a1 		    let c = TypeCmp cmp (piApply ty1' [arg]) (piApply ty2' [arg])@@ -277,9 +288,11 @@ compareArgs _ _ [] [] = return [] compareArgs _ _ [] (_:_) = __IMPOSSIBLE__ compareArgs _ _ (_:_) [] = __IMPOSSIBLE__-compareArgs pols0 a (arg1 : args1) (arg2 : args2) = do+compareArgs pols0 a (arg1 : args1) (arg2 : args2) =+    verboseBracket "tc.conv.args" 5 "compareArgs" $ do     let (pol, pols) = nextPolarity pols0     a <- reduce a+    catchConstraint (ArgsCmp pols0 a (arg1 : args1) (arg2 : args2)) $ do     reportSDoc "tc.conv.args" 30 $       sep [ text "compareArgs"           , nest 2 $ sep [ prettyTCM (arg1 : args1)@@ -288,9 +301,9 @@           , nest 2 $ text ":" <+> prettyTCM a           ]     case funView (unEl a) of-	FunV (Arg _ b) _ -> do+	FunV (Arg _ r b) _ -> do 	    reportSDoc "tc.conv.args" 10 $-              sep [ text "compareArgs" <+> parens (text $ show pol)+              sep [ text "compareArgs" <+> parens (text $ show pol ++ " " ++ show r)                   , nest 2 $ sep [ prettyTCM arg1                                  , text "~~" <+> prettyTCM arg2                                  , text ":" <+> prettyTCM b@@ -300,10 +313,18 @@                             Invariant     -> compareTerm CmpEq b x y                             Covariant     -> compareTerm CmpLeq b x y                             Contravariant -> compareTerm CmpLeq b y x-            cs1 <- cmp (unArg arg1) (unArg arg2)+            cs1 <- case r of+                    Forced     -> return []+                    Irrelevant -> return [] -- Andreas: ignore irr. func. args.+                    Relevant   -> cmp (unArg arg1) (unArg arg2)+            -- mlvl <- mlevel 	    case (cs1, unEl a) of-                                -- We can safely ignore sort annotations here.-		(_:_, Pi _ c) | 0 `freeInIgnoringSorts` absBody c+                                -- We can safely ignore sort annotations here+                                -- (except it's not, we risk leaving unsolved sorts)+                                -- We're also ignoring levels which isn't quite as+                                -- safe (it would be if we disallowed matching on levels?)+		(_:_, Pi (Arg _ _ (El _ lvl')) c) | 0 `freeInIgnoringSorts` absBody c+                                                  -- && Just lvl' /= mlvl 		    -> do                         reportSDoc "tc.conv.args" 15 $ sep                           [ text "aborting compareArgs" <+> parens (text $ show pol)@@ -314,13 +335,13 @@                               , text "--->" <+> prettyTCM cs1                               ]                           ]-                        patternViolation   -- TODO: will duplicate work (all arguments checked so far)+                        patternViolation 		_   -> do                     reportSDoc "tc.conv.args" 15 $ sep                       [ text "compareArgs" <+> parens (text $ show pol)                       , nest 2 $ sep-                        [ prettyTCM arg1-                        , text "~~" <+> prettyTCM arg2+                        [ prettyTCM args1+                        , text "~~" <+> prettyTCM args2                         , text ":" <+> prettyTCM (piApply a [arg1])                         ]                       ]@@ -331,6 +352,7 @@ -- | Equality on Types compareType :: MonadTCM tcm => Comparison -> Type -> Type -> tcm Constraints compareType cmp ty1@(El s1 a1) ty2@(El s2 a2) =+    verboseBracket "tc.conv.type" 5 "compareType" $     catchConstraint (TypeCmp cmp ty1 ty2) $ do 	reportSDoc "tc.conv.type" 9 $ vcat           [ hsep [ text "compareType", prettyTCM ty1, prettyTCM cmp, prettyTCM ty2 ]@@ -338,6 +360,13 @@           ] 	cs1 <- compareSort CmpEq s1 s2 `catchError` \err -> case errError err of                   TypeError _ _ -> do+                    reportSDoc "tc.conv.type" 10 $ vcat+                      [ text "sort comparison failed"+                      , nest 2 $ vcat+                        [ text "s1 =" <+> prettyTCM s1+                        , text "s2 =" <+> prettyTCM s2+                        ]+                      ]                     -- This error will probably be more informative                     compareTerm cmp (sort s1) a1 a2                     -- Throw the original error if the above doesn't@@ -379,16 +408,20 @@               ] 	case (s1,s2) of -	    (Prop    , Prop    )	     -> return []-	    (Type _  , Prop    )	     -> notLeq s1 s2-	    (Suc _   , Prop    )	     -> notLeq s1 s2+            -- New universe polymorphism+--             (Type a  , Type b  )             -> compareLevel CmpLeq a b -	    (Prop    , Type _  )	     -> return [] 	    (Type (Lit (LitLevel _ n)), Type (Lit (LitLevel _ m)))               | n <= m    -> return [] 	      | otherwise -> notLeq s1 s2             (Type a, Type b) -> leqLevel a b +	    (Prop    , Prop    )	     -> return []+	    (Type _  , Prop    )	     -> notLeq s1 s2+	    (Suc _   , Prop    )	     -> notLeq s1 s2++	    (Prop    , Type _  )	     -> return []+ 	    (Suc s   , Type (Lit (LitLevel _ n)))               | 1 <= n    -> leqSort s (mkType $ n - 1) 	    (Suc s   , Type b  ) -> notLeq s1 s2  -- TODO@@ -469,14 +502,15 @@  equalLevel :: MonadTCM tcm => Term -> Term -> tcm Constraints equalLevel a b = do+  lvl    <- primLevel   Max as <- levelView a   Max bs <- levelView b   a <- unLevelView (Max as)   b <- unLevelView (Max bs)-  liftTCM $ check a b as bs+  liftTCM $ catchConstraint (ValueCmp CmpEq (El (mkType 0) lvl) a b)+          $ check a b as bs   where     check a b as bs = do-      let getLvl = El (mkType 0) <$> primLevel       reportSDoc "tc.conv.nat" 20 $         sep [ text "equalLevel"             , nest 2 $ sep [ prettyTCM a <+> text "=="@@ -514,16 +548,13 @@         -- meta == any         ([Plus n (MetaLevel x as)], _)           | any (isThisMeta x) bs -> postpone-          | otherwise             -> do-            bs' <- mapM (subtr n) bs-            lvl <- getLvl-            assignV lvl x as =<< unLevelView (Max bs')         (_, [Plus n (MetaLevel x bs)])           | any (isThisMeta x) as -> postpone-          | otherwise             -> do-            as' <- mapM (subtr n) as-            lvl <- getLvl-            assignV lvl x bs =<< unLevelView (Max as')+        ([Plus n (MetaLevel x as')], [Plus m (MetaLevel y bs')])+          | (n, y) < (m, x)            -> meta n x as' bs+          | otherwise                  -> meta m y bs' as+        ([Plus n (MetaLevel x as)], _) -> meta n x as bs+        (_, [Plus n (MetaLevel x bs)]) -> meta n x bs as          -- any other metas         _ | any isMeta (as ++ bs) -> postpone@@ -539,6 +570,13 @@         notok    = typeError $ UnequalSorts (Type a) (Type b)         postpone = patternViolation +        getLvl = El (mkType 0) <$> primLevel++        meta n x as bs = do+          bs' <- mapM (subtr n) bs+          lvl <- getLvl+          assignV lvl x as =<< unLevelView (Max bs')+         -- Make sure to give a sensible error message         wrap m = m `catchError` \err ->           case errError err of@@ -552,7 +590,7 @@           | m >= n    = return $ Plus (m - n) a         subtr _ (Plus _ BlockedLevel{}) = postpone         subtr _ (Plus _ MetaLevel{})    = postpone-        subtr _ (Plus _ NeutralLevel{}) = notok+        subtr _ (Plus _ NeutralLevel{}) = postpone          isNeutral (Plus _ NeutralLevel{}) = True         isNeutral _                       = False@@ -585,6 +623,14 @@               ] 	case (s1,s2) of +            -- New universe polymorphism+--             (Type a, Type b) -> compareLevel CmpEq a b++            (Type (Lit n), Type (Lit m))+              | n == m           -> return []+              | otherwise        -> notEq s1 s2+            (Type a  , Type b  ) -> equalLevel a b+ 	    (MetaS x us , MetaS y vs) -> do               s1 <- normalise s1               s2 <- normalise s2@@ -600,10 +646,6 @@ 	    (Type _  , Prop    ) -> notEq s1 s2 	    (Prop    , Type _  ) -> notEq s1 s2 -            (Type (Lit n), Type (Lit m))-              | n == m           -> return []-              | otherwise        -> notEq s1 s2-            (Type a  , Type b  ) -> equalLevel a b 	    (Suc s   , Prop    ) -> notEq s1 s2 	    (Suc s   , Type (Lit (LitLevel _ 0))) -> notEq s1 s2 	    (Suc s   , Type (Lit (LitLevel _ 1))) -> buildConstraint (SortCmp CmpEq s1 s2)
src/full/Agda/TypeChecking/Conversion.hs-boot view
@@ -1,7 +1,6 @@  module Agda.TypeChecking.Conversion where -import Data.Generics import Agda.Syntax.Internal import Agda.TypeChecking.Monad 
src/full/Agda/TypeChecking/Coverage.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, FlexibleContexts, TupleSections #-}  module Agda.TypeChecking.Coverage where @@ -52,10 +52,24 @@  type Covering = [SplitClause] -typeOfVar :: Telescope -> Nat -> Type+data SplitError = NotADatatype Type         -- ^ neither data type nor record+                | IrrelevantDatatype Type   -- ^ data type, but in irrelevant position+                | NoRecordConstructor Type  -- ^ record type, but no constructor+                | CantSplit QName Telescope Args Args [Term]+                | GenericSplitError String+  deriving (Show)++instance Error SplitError where+  noMsg  = strMsg ""+  strMsg = GenericSplitError++type CoverM = ExceptionT SplitError TCM++typeOfVar :: Telescope -> Nat -> Arg Type typeOfVar tel n   | n >= len  = __IMPOSSIBLE__-  | otherwise = snd . unArg $ ts !! fromIntegral n+  | otherwise = fmap snd  -- throw away name, keep Arg Type+                  $ ts !! fromIntegral n    where     len = genericLength ts     ts  = reverse $ telToList tel@@ -64,12 +78,12 @@ checkCoverage :: QName -> TCM () checkCoverage f = do   d <- getConstInfo f-  t <- normalise $ defType d+  TelV gamma _ <- telView $ defType d   let defn = theDef d   case defn of-    Function{ funClauses = cs@(_:_) } -> do-      let n            = genericLength $ clausePats $ head cs-          TelV gamma _ = telView t+    Function{ funClauses = cs'@(_:_) } -> do+      let cs           = map translatedClause cs'+          n            = genericLength $ clausePats $ head cs           gamma'       = telFromList $ genericTake n $ telToList gamma           xs           = map (fmap $ const $ VarP "_") $ telToList gamma'       reportSDoc "tc.cover.top" 10 $ vcat@@ -77,13 +91,13 @@         , nest 2 $ vcat $ map (text . show . clausePats) cs         ]       (used, pss) <- cover cs $ SClause gamma' (idP n) xs (idSub gamma')-      whenM (optCompletenessCheck <$> commandLineOptions) $+      whenM (optCompletenessCheck <$> pragmaOptions) $         case pss of           []  -> return ()           _   ->             setCurrentRange (getRange cs) $               typeError $ CoverageFailure f pss-      whenM (optUnreachableCheck <$> commandLineOptions) $+      whenM (optUnreachableCheck <$> pragmaOptions) $         case Set.toList $ Set.difference (Set.fromList [0..genericLength cs - 1]) used of           []  -> return ()           is  -> do@@ -115,35 +129,34 @@       r <- split tel perm ps x       case r of         Left err  -> case err of-          CantSplit c _ _ _ _ -> typeError $ CoverageCantSplitOn c-          NotADatatype a      -> typeError $ CoverageCantSplitType a-          GenericSplitError s -> fail $ "failed to split: " ++ s+          CantSplit c _ _ _ _   -> typeError $ CoverageCantSplitOn c+          NotADatatype a        -> typeError $ CoverageCantSplitType a+          IrrelevantDatatype a  -> typeError $ CoverageCantSplitType a+          NoRecordConstructor a -> typeError $ CoverageCantSplitType a+          GenericSplitError s   -> fail $ "failed to split: " ++ s         Right scs -> (Set.unions -*- concat) . unzip <$> mapM (cover cs) scs --- | Check that a type is a datatype-isDatatype :: MonadTCM tcm => Type -> tcm (Maybe (QName, [Arg Term], [Arg Term], [QName]))-isDatatype t = do-  t <- normalise t-  case unEl t of+-- | Check that a type is a non-irrelevant datatype or a record with named constructor.+isDatatype :: (MonadTCM tcm, MonadException SplitError tcm) => +              Arg Type -> tcm (QName, [Arg Term], [Arg Term], [QName])+isDatatype at = do+  let t = unArg at+  t' <- normalise t+  case unEl t' of     Def d args -> do       def <- theDef <$> getConstInfo d       case def of-        Datatype{dataPars = np, dataCons = cs} -> do-          let (ps, is) = genericSplitAt np args-          return $ Just (d, ps, is, cs)-        _ -> return Nothing-    _ -> return Nothing--data SplitError = NotADatatype Type-                | CantSplit QName Telescope Args Args [Term]-                | GenericSplitError String-  deriving (Show)--instance Error SplitError where-  noMsg  = strMsg ""-  strMsg = GenericSplitError--type CoverM = ExceptionT SplitError TCM+        Datatype{dataPars = np, dataCons = cs, dataInduction = Inductive} -> +          if argRelevance at == Irrelevant +           then throwException $ IrrelevantDatatype t+           else do+             let (ps, is) = genericSplitAt np args+             return (d, ps, is, cs)+        Record{recPars = np, recCon = c, recNamedCon = hasCon} ->+          if hasCon then return (d, args, [], [c])+           else throwException $ NoRecordConstructor t+        _ -> throwException $ NotADatatype t+    _ -> throwException $ NotADatatype t  -- | @dtype == d pars ixs@ computeNeighbourhood :: Telescope -> Telescope -> Permutation -> QName -> Args -> Args -> Nat -> OneHolePatterns -> QName -> CoverM [SplitClause]@@ -159,7 +172,7 @@   ctype <- defType <$> getConstInfo con    -- Lookup the type of the constructor at the given parameters-  TelV gamma (El _ (Def _ cixs)) <- telView <$> normalise (ctype `piApply` pars)+  TelV gamma (El _ (Def _ cixs)) <- telView (ctype `piApply` pars)    debugInit con ctype pars ixs cixs delta1 delta2 gamma hps hix @@ -195,7 +208,8 @@              ++ [ Var i [] | i <- [size delta2' + size gamma ..] ]        -- Plug the hole with the constructor and apply ρ-      let conp = ConP con $ map (fmap VarP) $ teleArgNames gamma+      -- TODO: Is it really correct to use Nothing here?+      let conp = ConP con Nothing $ map (fmap VarP) $ teleArgNames gamma           ps   = plugHole conp hps           ps'  = substs rho ps      -- Δ₁ΓΔ₂' ⊢ ps'       debugPlugged ps ps'@@ -329,12 +343,9 @@      return (hps, hix) -  -- Check that t is a datatype-  (d, pars, ixs, cons) <- do-    dt <- isDatatype t-    case dt of-      Nothing -> throwException $ NotADatatype t-      Just d  -> return d+  -- Check that t is a datatype or a record+  -- Andreas, 2010-09-21, isDatatype now directly throws an exception if it fails+  (d, pars, ixs, cons) <- isDatatype t    -- Compute the neighbourhoods for the constructors   ns <- concat <$> mapM (computeNeighbourhood delta1 delta2 perm d pars ixs hix hps) cons@@ -343,7 +354,7 @@       let absurd = VarP "()"       return $ Left $ SClause                { scTel  = telFromList $ telToList delta1 ++-                                        [Arg NotHidden ("()", t)] +++                                        [fmap ("()",) t] ++ -- add name "()"                                         telToList delta2                , scPerm = perm                , scPats = plugHole absurd hps@@ -357,7 +368,7 @@     -- Debug printing     debugInit tel perm x ps =       reportSDoc "tc.cover.top" 10 $ vcat-        [ text "split"+        [ text "TypeChecking.Rules.LHS.Coverage.split': split"         , nest 2 $ vcat           [ text "tel  =" <+> prettyTCM tel           , text "perm =" <+> text (show perm)
src/full/Agda/TypeChecking/Coverage/Match.hs view
@@ -30,14 +30,14 @@     xs   = permute (invertP perm) $ reverse [0 .. fromIntegral (size perm) - 1]     tick = do x : xs <- get; put xs; return x -    build (VarP _)      = VarMP <$> tick-    build (ConP con ps) = ConMP con <$> mapM (traverse build) ps-    build (DotP t)      = tick *> buildT t-    build (LitP l)      = return $ LitMP l+    build (VarP _)        = VarMP <$> tick+    build (ConP con _ ps) = ConMP con <$> mapM (traverse build) ps+    build (DotP t)        = tick *> buildT t+    build (LitP l)        = return $ LitMP l -    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 <$> mapM (traverse buildT) args+    buildT (Var i [])     = return (VarMP i)+    buildT _              = return WildMP  -- | If matching is inconclusive (@Block@) we want to know which --   variable is blocking the match. If a dot pattern is blocking a match@@ -109,7 +109,7 @@ matchPat _    (VarP _) _ = Yes () matchPat _    (DotP _) _ = Yes () matchPat mlit (LitP l) q = mlit l q-matchPat mlit (ConP c ps) q = case q of+matchPat mlit (ConP c _ ps) q = case q of   VarMP x -> Block $ Just x   WildMP  -> Block Nothing   ConMP c' qs
+ src/full/Agda/TypeChecking/Datatypes.hs view
@@ -0,0 +1,75 @@+{-# LANGUAGE CPP #-}++module Agda.TypeChecking.Datatypes where++import Data.List++import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Substitute++import Agda.Utils.Impossible++#include "../undefined.h"++-- | Get the name of the datatype constructed by a given constructor.+--   Precondition: The argument must refer to a constructor+getConstructorData :: MonadTCM tcm => QName -> tcm QName+getConstructorData c = do+  def <- getConstInfo c+  case theDef def of+    Constructor{conData = d} -> return d+    _                        -> __IMPOSSIBLE__++-- | Check if a name refers to a datatype or a record with a named constructor.+isDatatype :: MonadTCM tcm => QName -> tcm Bool+isDatatype d = do+  def <- getConstInfo d+  case theDef def of+    Datatype{}                   -> return True+    Record{recNamedCon = namedC} -> return namedC+    _                            -> return False++data DatatypeInfo = DataInfo+  { datatypeName   :: QName+  , datatypeParTel :: Telescope+  , datatypePars   :: Args+  , datatypeIxTel  :: Telescope+  , datatypeIxs    :: Args+  }++-- | Get the name and parameters from a type if it's a datatype or record type+--   with a named constructor.+getDatatypeInfo :: MonadTCM tcm => Type -> tcm (Maybe DatatypeInfo)+getDatatypeInfo t = do+  t <- reduce t+  case unEl t of+    Def d args -> do+      n          <- getDefFreeVars d+      args       <- return $ genericDrop n args+      def        <- instantiateDef =<< getConstInfo d+      TelV tel _ <- telView (defType def)+      let npars  = case theDef def of+            Datatype{dataPars = np} -> Just np+            Record{recPars = np, recNamedCon = True}+              | genericLength args == np -> Just np+              | otherwise                -> __IMPOSSIBLE__+            _                            -> Nothing+      return $ do+        np <- npars+        let (pt, it) = genericSplitAt np $ telToList tel+            parTel   = telFromList pt+            ixTel    = telFromList it+            (ps, is) = genericSplitAt np args+        return $ DataInfo { datatypeName = d+                          , datatypeParTel = parTel+                          , datatypePars   = ps+                          , datatypeIxTel  = ixTel+                          , datatypeIxs    = is+                          }+    _ -> return Nothing++
+ src/full/Agda/TypeChecking/Datatypes.hs-boot view
@@ -0,0 +1,8 @@++module Agda.TypeChecking.Datatypes where++import Agda.TypeChecking.Monad.Base+import Agda.Syntax.Internal++getConstructorData :: MonadTCM tcm => QName -> tcm QName+
src/full/Agda/TypeChecking/DisplayForm.hs view
@@ -53,8 +53,10 @@   | length ps > length vs = Nothing   | otherwise             = do     us <- match n ps $ raise 1 (map unArg vs0)-    return $ substs (reverse us) v `apply` vs1+    return $ substs (reverse us ++ ctx) v `apply` vs1   where+    -- TODO: figure out the length of the context+    ctx = [ Var i [] | i <- [0..] ]     (vs0, vs1) = splitAt (length ps) vs  class Match a where
src/full/Agda/TypeChecking/Empty.hs view
@@ -27,8 +27,8 @@     Blocked{}          -> buildConstraint (IsEmpty t)     _                  -> do       tel0 <- getContextTelescope-      let tel = telFromList $ telToList tel0 ++ [Arg NotHidden ("_", t)]-          ps  = [ Arg h $ VarP x | Arg h (x, _) <- telToList tel ]+      let tel = telFromList $ telToList tel0 ++ [defaultArg ("_", t)]+          ps  = [ Arg h r $ VarP x | Arg h r (x, _) <- telToList tel ]        r <- split tel (idP $ size tel) ps 0 
src/full/Agda/TypeChecking/Errors.hs view
@@ -23,13 +23,13 @@ import qualified Agda.Syntax.Concrete.Pretty as P import Agda.Syntax.Translation.InternalToAbstract import Agda.Syntax.Translation.AbstractToConcrete+import Agda.Syntax.Scope.Base (ScopeInfo(..))  import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty  import Agda.Utils.FileName import Agda.Utils.Monad-import Agda.Utils.Trace import Agda.Utils.Size  #include "../undefined.h"@@ -56,10 +56,9 @@ sayWhere :: (MonadTCM tcm, HasRange a) => a -> tcm Doc -> tcm Doc sayWhere x d = text (show $ getRange x) $$ d -sayWhen :: MonadTCM tcm => CallTrace -> tcm Doc -> tcm Doc-sayWhen tr m = case matchCall interestingCall tr of-  Nothing -> sayWhere tr m-  Just c  -> sayWhere tr (m $$ prettyTCM c)+sayWhen :: MonadTCM tcm => Range -> Maybe (Closure Call) -> tcm Doc -> tcm Doc+sayWhen r Nothing   m = sayWhere r m+sayWhen r (Just cl) m = sayWhere r (m $$ prettyTCM cl)  panic :: MonadTCM tcm => String -> tcm Doc panic s = fwords $ "Panic: " ++ s@@ -80,104 +79,108 @@  errorString :: TypeError -> String errorString err = case err of-    AmbiguousModule _ _			       -> "AmbiguousModule"-    AmbiguousName _ _			       -> "AmbiguousName"-    AmbiguousParseForApplication _ _	       -> "AmbiguousParseForApplication"-    AmbiguousParseForLHS _ _		       -> "AmbiguousParseForLHS"-    AmbiguousTopLevelModuleName {}	       -> "AmbiguousTopLevelModuleName"-    BothWithAndRHS                             -> "BothWithAndRHS"-    BuiltinInParameterisedModule _	       -> "BuiltinInParameterisedModule"-    BuiltinMustBeConstructor _ _               -> "BuiltinMustBeConstructor"-    ClashingDefinition _ _		       -> "ClashingDefinition"-    ClashingFileNamesFor _ _		       -> "ClashingFileNamesFor"-    ClashingImport _ _			       -> "ClashingImport"-    ClashingModule _ _			       -> "ClashingModule"-    ClashingModuleImport _ _		       -> "ClashingModuleImport"-    CompilationError _                         -> "CompilationError"-    ConstructorPatternInWrongDatatype _ _      -> "ConstructorPatternInWrongDatatype"-    CoverageFailure _ _                        -> "CoverageFailure"-    CoverageCantSplitOn _                      -> "CoverageCantSplitOn"-    CoverageCantSplitType _                    -> "CoverageCantSplitType"-    CyclicModuleDependency _		       -> "CyclicModuleDependency"-    DataMustEndInSort _			       -> "DataMustEndInSort"-    DependentPatternMatchingOnCodata           -> "DependentPatternMatchingOnCodata"-    DifferentArities			       -> "DifferentArities"-    DoesNotConstructAnElementOf{}              -> "DoesNotConstructAnElementOf"-    DuplicateBuiltinBinding _ _ _	       -> "DuplicateBuiltinBinding"-    DuplicateFields _			       -> "DuplicateFields"-    DuplicateConstructors _		       -> "DuplicateConstructors"-    FieldOutsideRecord                         -> "FieldOutsideRecord"-    FileNotFound _ _			       -> "FileNotFound"-    GenericError _			       -> "GenericError"-    IlltypedPattern _ _                        -> "IlltypedPattern"-    IncompletePatternMatching _ _	       -> "IncompletePatternMatching"-    InternalError _			       -> "InternalError"-    InvalidPattern _                           -> "InvalidPattern"-    LocalVsImportedModuleClash _	       -> "LocalVsImportedModuleClash"-    MetaCannotDependOn _ _ _		       -> "MetaCannotDependOn"-    MetaOccursInItself _		       -> "MetaOccursInItself"-    ModuleArityMismatch _ _ _                  -> "ModuleArityMismatch"-    ModuleDefinedInOtherFile {}                -> "ModuleDefinedInOtherFile"-    ModuleDoesntExport _ _		       -> "ModuleDoesntExport"-    ModuleNameDoesntMatchFileName {}	       -> "ModuleNameDoesntMatchFileName"-    NoBindingForBuiltin _		       -> "NoBindingForBuiltin"-    NoParseForApplication _		       -> "NoParseForApplication"-    NoParseForLHS _			       -> "NoParseForLHS"-    NoRHSRequiresAbsurdPattern _	       -> "NoRHSRequiresAbsurdPattern"-    NotInductive {}                            -> "NotInductive"-    AbsurdPatternRequiresNoRHS _	       -> "AbsurdPatternRequiresNoRHS"-    NoSuchBuiltinName _			       -> "NoSuchBuiltinName"-    NoSuchModule _			       -> "NoSuchModule"-    NoSuchPrimitiveFunction _		       -> "NoSuchPrimitiveFunction"-    NotAModuleExpr _			       -> "NotAModuleExpr"-    NotAProperTerm			       -> "NotAProperTerm"-    NotAValidLetBinding _		       -> "NotAValidLetBinding"-    NotAnExpression _			       -> "NotAnExpression"-    NotImplemented _			       -> "NotImplemented"-    NotSupported _			       -> "NotSupported"-    NotInScope _			       -> "NotInScope"-    NotLeqSort _ _			       -> "NotLeqSort"-    NotStrictlyPositive _ _		       -> "NotStrictlyPositive"-    NothingAppliedToHiddenArg _		       -> "NothingAppliedToHiddenArg"-    OverlappingProjects {}                     -> "OverlappingProjects"-    PatternShadowsConstructor {}               -> "PatternShadowsConstructor"-    PropMustBeSingleton			       -> "PropMustBeSingleton"-    RepeatedVariablesInPattern _	       -> "RepeatedVariablesInPattern"-    ShadowedModule _                           -> "ShadowedModule"-    ShouldBeASort _			       -> "ShouldBeASort"-    ShouldBeApplicationOf _ _		       -> "ShouldBeApplicationOf"-    ShouldBeAppliedToTheDatatypeParameters _ _ -> "ShouldBeAppliedToTheDatatypeParameters"-    ShouldBeEmpty _ _			       -> "ShouldBeEmpty"-    ShouldBePi _			       -> "ShouldBePi"-    ShouldBeRecordType _		       -> "ShouldBeRecordType"-    ShouldEndInApplicationOfTheDatatype _      -> "ShouldEndInApplicationOfTheDatatype"-    TerminationCheckFailed _		       -> "TerminationCheckFailed"-    TooFewFields _ _			       -> "TooFewFields"-    TooManyArgumentsInLHS _ _                  -> "TooManyArgumentsInLHS"-    TooManyFields _ _			       -> "TooManyFields"-    UnequalHiding _ _			       -> "UnequalHiding"-    UnequalSorts{}			       -> "UnequalSorts"-    UnequalTerms{}			       -> "UnequalTerms"-    UnequalTypes{}			       -> "UnequalTypes"-    UnequalTelescopes{}			       -> "UnequalTelescopes"-    UnexpectedWithPatterns _                   -> "UnexpectedWithPatterns"-    UninstantiatedDotPattern _                 -> "UninstantiatedDotPattern"-    UninstantiatedModule _		       -> "UninstantiatedModule"-    UnreachableClauses{}                       -> "UnreachableClauses"-    UnsolvedConstraints _		       -> "UnsolvedConstraints"-    UnsolvedMetas _			       -> "UnsolvedMetas"-    WithClausePatternMismatch _ _              -> "WithClausePatternMismatch"-    WrongHidingInApplication _		       -> "WrongHidingInApplication"-    WrongHidingInLHS _			       -> "WrongHidingInLHS"-    WrongHidingInLambda _		       -> "WrongHidingInLambda"-    WrongNumberOfConstructorArguments _ _ _    -> "WrongNumberOfConstructorArguments"+    AmbiguousModule{}                        -> "AmbiguousModule"+    AmbiguousName{}                          -> "AmbiguousName"+    AmbiguousParseForApplication{}           -> "AmbiguousParseForApplication"+    AmbiguousParseForLHS{}                   -> "AmbiguousParseForLHS"+    AmbiguousTopLevelModuleName {}           -> "AmbiguousTopLevelModuleName"+    BothWithAndRHS                           -> "BothWithAndRHS"+    BuiltinInParameterisedModule{}           -> "BuiltinInParameterisedModule"+    BuiltinMustBeConstructor{}               -> "BuiltinMustBeConstructor"+    ClashingDefinition{}                     -> "ClashingDefinition"+    ClashingFileNamesFor{}                   -> "ClashingFileNamesFor"+    ClashingImport{}                         -> "ClashingImport"+    ClashingModule{}                         -> "ClashingModule"+    ClashingModuleImport{}                   -> "ClashingModuleImport"+    CompilationError{}                       -> "CompilationError"+    ConstructorPatternInWrongDatatype{}      -> "ConstructorPatternInWrongDatatype"+    CoverageFailure{}                        -> "CoverageFailure"+    CoverageCantSplitOn{}                    -> "CoverageCantSplitOn"+    CoverageCantSplitType{}                  -> "CoverageCantSplitType"+    CyclicModuleDependency{}                 -> "CyclicModuleDependency"+    DataMustEndInSort{}                      -> "DataMustEndInSort"+    DifferentArities                         -> "DifferentArities"+    DoesNotConstructAnElementOf{}            -> "DoesNotConstructAnElementOf"+    DuplicateBuiltinBinding{}                -> "DuplicateBuiltinBinding"+    DuplicateConstructors{}                  -> "DuplicateConstructors"+    DuplicateFields{}                        -> "DuplicateFields"+    DuplicateImports{}                       -> "DuplicateImports"+    FieldOutsideRecord                       -> "FieldOutsideRecord"+    FileNotFound{}                           -> "FileNotFound"+    GenericError{}                           -> "GenericError"+    IlltypedPattern{}                        -> "IlltypedPattern"+    IncompletePatternMatching{}              -> "IncompletePatternMatching"+    InternalError{}                          -> "InternalError"+    InvalidPattern{}                         -> "InvalidPattern"+    LocalVsImportedModuleClash{}             -> "LocalVsImportedModuleClash"+    MetaCannotDependOn{}                     -> "MetaCannotDependOn"+    MetaOccursInItself{}                     -> "MetaOccursInItself"+    ModuleArityMismatch{}                    -> "ModuleArityMismatch"+    ModuleDefinedInOtherFile {}              -> "ModuleDefinedInOtherFile"+    ModuleDoesntExport{}                     -> "ModuleDoesntExport"+    ModuleNameDoesntMatchFileName {}         -> "ModuleNameDoesntMatchFileName"+    NoBindingForBuiltin{}                    -> "NoBindingForBuiltin"+    NoParseForApplication{}                  -> "NoParseForApplication"+    NoParseForLHS{}                          -> "NoParseForLHS"+    NoRHSRequiresAbsurdPattern{}             -> "NoRHSRequiresAbsurdPattern"+    NotInductive {}                          -> "NotInductive"+    AbsurdPatternRequiresNoRHS{}             -> "AbsurdPatternRequiresNoRHS"+    NoSuchBuiltinName{}                      -> "NoSuchBuiltinName"+    NoSuchModule{}                           -> "NoSuchModule"+    NoSuchPrimitiveFunction{}                -> "NoSuchPrimitiveFunction"+    NotAModuleExpr{}                         -> "NotAModuleExpr"+    NotAProperTerm                           -> "NotAProperTerm"+    NotAValidLetBinding{}                    -> "NotAValidLetBinding"+    NotAnExpression{}                        -> "NotAnExpression"+    NotImplemented{}                         -> "NotImplemented"+    NotSupported{}                           -> "NotSupported"+    NotInScope{}                             -> "NotInScope"+    NotLeqSort{}                             -> "NotLeqSort"+    NotStrictlyPositive{}                    -> "NotStrictlyPositive"+    NothingAppliedToHiddenArg{}              -> "NothingAppliedToHiddenArg"+    OverlappingProjects {}                   -> "OverlappingProjects"+    PatternShadowsConstructor {}             -> "PatternShadowsConstructor"+    PropMustBeSingleton                      -> "PropMustBeSingleton"+    RepeatedVariablesInPattern{}             -> "RepeatedVariablesInPattern"+    ShadowedModule{}                         -> "ShadowedModule"+    ShouldBeASort{}                          -> "ShouldBeASort"+    ShouldBeApplicationOf{}                  -> "ShouldBeApplicationOf"+    ShouldBeAppliedToTheDatatypeParameters{} -> "ShouldBeAppliedToTheDatatypeParameters"+    ShouldBeEmpty{}                          -> "ShouldBeEmpty"+    ShouldBePi{}                             -> "ShouldBePi"+    ShouldBeRecordType{}                     -> "ShouldBeRecordType"+    ShouldEndInApplicationOfTheDatatype{}    -> "ShouldEndInApplicationOfTheDatatype"+    TerminationCheckFailed{}                 -> "TerminationCheckFailed"+    TooFewFields{}                           -> "TooFewFields"+    TooManyArgumentsInLHS{}                  -> "TooManyArgumentsInLHS"+    TooManyFields{}                          -> "TooManyFields"+    SplitOnIrrelevant{}                      -> "SplitOnIrrelevant"+    VariableIsIrrelevant{}                   -> "VariableIsIrrelevant"+    UnequalRelevance{}                       -> "UnequalRelevance"+    UnequalHiding{}                          -> "UnequalHiding"+    UnequalLevel{}                           -> "UnequalLevel"+    UnequalSorts{}                           -> "UnequalSorts"+    UnequalTerms{}                           -> "UnequalTerms"+    UnequalTypes{}                           -> "UnequalTypes"+    UnequalTelescopes{}                      -> "UnequalTelescopes"+    UnexpectedWithPatterns{}                 -> "UnexpectedWithPatterns"+    UninstantiatedDotPattern{}               -> "UninstantiatedDotPattern"+    UninstantiatedModule{}                   -> "UninstantiatedModule"+    UnreachableClauses{}                     -> "UnreachableClauses"+    UnsolvedConstraints{}                    -> "UnsolvedConstraints"+    UnsolvedMetas{}                          -> "UnsolvedMetas"+    WithClausePatternMismatch{}              -> "WithClausePatternMismatch"+    WrongHidingInApplication{}               -> "WrongHidingInApplication"+    WrongHidingInLHS{}                       -> "WrongHidingInLHS"+    WrongHidingInLambda{}                    -> "WrongHidingInLambda"+    WrongNumberOfConstructorArguments{}      -> "WrongNumberOfConstructorArguments"  instance PrettyTCM TCErr where     prettyTCM err = case errError err of 	TypeError s e -> do 	    s0 <- get 	    put s-	    d <- sayWhen (clTrace e) $ prettyTCM e+	    d <- sayWhen (envRange $ clEnv e) (envCall $ clEnv e) $ prettyTCM e 	    put s0 	    return d 	Exception r s   -> sayWhere r $ fwords s@@ -187,7 +190,6 @@  instance PrettyTCM TypeError where     prettyTCM err = do-	trace <- getTrace 	case err of 	    InternalError s  -> panic s 	    NotImplemented s -> fwords $ "Not implemented: " ++ s@@ -222,8 +224,6 @@ 		fwords "Found an implicit lambda where an explicit lambda was expected" 	    WrongHidingInApplication t -> do 		fwords "Found an implicit application where an explicit application was expected"-            DependentPatternMatchingOnCodata ->-              fwords "Dependent pattern matching on codata is not allowed"             NotInductive t -> fsep $               [prettyTCM t] ++ pwords "is not an inductive data type"             UninstantiatedDotPattern e -> fsep $@@ -271,11 +271,21 @@ 		[prettyTCM t] ++ pwords "should be a function type, but it isn't" 	    NotAProperTerm -> 		fwords "Found a malformed term"-	    UnequalTerms cmp s t a -> fsep $+            SplitOnIrrelevant p t -> fsep $+                pwords "cannot pattern match" ++ [prettyA p] +++                pwords "against irrelevant type" ++ [prettyTCM t]+            VariableIsIrrelevant x -> fsep $+                text "variable" : prettyTCM x : pwords "is declared irrelevant, so it cannot be used here"+ 	    UnequalTerms cmp s t a -> fsep $ 		[prettyTCM s, f cmp, prettyTCM t] ++ pwords "of type" ++ [prettyTCM a]                 where                   f CmpEq  = text "!="                   f CmpLeq = text "!=<"+	    UnequalLevel cmp s t -> fsep $+		[prettyTCM s, f cmp, prettyTCM t]+                where+                  f CmpEq  = text "!="+                  f CmpLeq = text "!=<" 	    UnequalTelescopes cmp a b -> fsep $ 		[prettyTCM a, f cmp, prettyTCM b]                 where@@ -286,6 +296,11 @@                 where                   f CmpEq  = text "!="                   f CmpLeq = text "!=<"+	    UnequalRelevance a b -> fsep $+		[prettyTCM a] ++ pwords "!=" ++ [prettyTCM b] +++-- Andreas 2010-09-21 to reveal Forced annotations, print also uglily+--		[text $ show a] ++ pwords "!=" ++ [text $ show b] +++		pwords "because one is a relevant function type and the other is an irrelevant function type" 	    UnequalHiding a b -> fsep $ 		[prettyTCM a] ++ pwords "!=" ++ [prettyTCM b] ++ 		pwords "because one is an implicit function type and the other is an explicit function type"@@ -424,6 +439,9 @@ 	    PatternShadowsConstructor x c -> fsep $                 pwords "The pattern variable" ++ [prettyTCM x] ++                 pwords "has the same name as the constructor" ++ [prettyTCM c]+            DuplicateImports m xs -> fsep $+                pwords "Ambiguous imports from module" ++ [pretty m] ++ pwords "for" +++                punctuate comma (map pretty xs) 	    ModuleDoesntExport m xs -> fsep $ 		pwords "The module" ++ [pretty m] ++ pwords "doesn't export the following:" ++ 		punctuate comma (map pretty xs)@@ -515,13 +533,13 @@               | n > 0 && not (null args) = parens               | otherwise                = id -            showArg (Arg Hidden x)    = braces $ showPat 0 x-            showArg (Arg NotHidden x) = showPat 1 x+            showArg (Arg Hidden r x)    = braces $ showPat 0 x+            showArg (Arg NotHidden r x) = showPat 1 x -            showPat _ (I.VarP _)      = text "_"-            showPat _ (I.DotP _)      = text "._"-            showPat n (I.ConP c args) = mpar n args $ prettyTCM c <+> fsep (map showArg args)-            showPat _ (I.LitP l)      = text (show l)+            showPat _ (I.VarP _)        = text "_"+            showPat _ (I.DotP _)        = text "._"+            showPat n (I.ConP c _ args) = mpar n args $ prettyTCM c <+> fsep (map showArg args)+            showPat _ (I.LitP l)        = text (show l)   @@ -592,15 +610,15 @@           pwords "when checking the module application" ++           [prettyA $ A.Apply info m1 ptel m2 args Map.empty Map.empty]           where-            info = A.ModuleInfo noRange noRange Nothing+            info = A.ModuleInfo noRange noRange Nothing Nothing Nothing  	where-	    hPretty a@(Arg h _) = pretty =<< abstractToConcreteCtx (hiddenArgumentCtx h) a+	    hPretty a = pretty =<< abstractToConcreteCtx (hiddenArgumentCtx (argHiding a)) a  	    simpleDef d = case d of 	      D.FunDef _ ds _ _ _ _ _	 -> ds-	      D.DataDef r ind fx p a d bs cs ->-		[ C.Data r ind d (map bind bs) (C.Underscore noRange Nothing)+	      D.DataDef r fx p a d bs cs ->+		[ C.Data r Inductive d (map bind bs) (C.Underscore noRange Nothing) 		    $ map simpleDecl cs 		] 	      D.RecDef r fx p a d c bs cs ->@@ -610,7 +628,7 @@ 	      where 		bind :: C.LamBinding -> C.TypedBindings 		bind (C.DomainFull b) = b-		bind (C.DomainFree h x) = C.TypedBindings r h [C.TBind r [x] (C.Underscore r Nothing)]+		bind (C.DomainFree h x) = C.TypedBindings r $ Arg h Relevant [C.TBind r [x] (C.Underscore r Nothing)] 		  where r = getRange x                  name (D.Axiom _ _ _ _ n _) = n@@ -618,7 +636,7 @@  	    simpleDecl d = case d of 		D.Axiom _ _ _ _ x e		       -> C.TypeSig x e-		D.NiceField _ _ _ _ h x e	       -> C.Field h x e+		D.NiceField _ _ _ _ x e	               -> C.Field x e 		D.PrimitiveFunction r _ _ _ x e	       -> C.Primitive r [C.TypeSig x e] 		D.NiceDef r ds _ _		       -> C.Mutual r ds 		D.NiceModule r _ _ x tel _	       -> C.Module r x tel []@@ -626,12 +644,4 @@ 		D.NiceOpen r x dir		       -> C.Open r x dir 		D.NiceImport r x as op dir	       -> C.Import r x as op dir 		D.NicePragma _ p		       -> C.Pragma p--interestingCall :: Closure Call -> Maybe (Closure Call)-interestingCall cl = case clValue cl of-    InferVar _ _	      -> Nothing-    InferDef _ _ _	      -> Nothing-    CheckArguments _ [] _ _ _ -> Nothing-    SetRange _ _	      -> Nothing-    _			      -> Just cl 
src/full/Agda/TypeChecking/EtaContract.hs view
@@ -9,7 +9,8 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Free import Agda.TypeChecking.Monad-import Agda.TypeChecking.Records+import {-# SOURCE #-} Agda.TypeChecking.Records+import {-# SOURCE #-} Agda.TypeChecking.Datatypes import Agda.Utils.Monad  #include "../undefined.h"@@ -30,21 +31,32 @@   Fun _ _    -> noApp   Sort _     -> noApp   MetaV _ _  -> noApp+  DontCare   -> noApp   where     noApp = NoApp t     app f [] = noApp     app f xs = App (f $ init xs) (last xs)  etaContract :: (MonadTCM tcm, TermLike a) => a -> tcm a-etaContract = traverseTermM eta+etaContract = traverseTermM etaOnce   where-    eta t@(Lam h b) = case binAppView (absBody b) of-      App u (Arg _ (Var 0 []))-        | not (freeIn 0 u)  -> return $ subst __IMPOSSIBLE__ u-      _ -> return t-    eta t@(Con r args) =-      ifM (isRecord r)-          (etaContractRecord r args)++etaOnce :: (MonadTCM tcm) => Term -> tcm Term+etaOnce v = ignoreAbstractMode $ eta v+  where+    eta t@(Lam h b) = do+      imp <- shouldEtaContractImplicit+      case binAppView (absBody b) of+        App u (Arg h' r (Var 0 []))+          | allowed imp h' && not (freeIn 0 u) ->+            return $ subst __IMPOSSIBLE__ u+        _ -> return t+      where+        allowed imp h' = h == h' && (imp || h == NotHidden)+    eta t@(Con c args) = do+      r <- getConstructorData c+      ifM (isEtaRecord r)+          (etaContractRecord r c args)           (return t)     eta t = return t 
+ src/full/Agda/TypeChecking/Forcing.hs view
@@ -0,0 +1,74 @@+{-# LANGUAGE CPP #-}+module Agda.TypeChecking.Forcing where++import Control.Applicative++import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute+import Agda.Utils.Size+import Agda.Utils.Monad+import Agda.Interaction.Options+import Agda.TypeChecking.Monad.Options++import Agda.Utils.Impossible+#include "../undefined.h"++addForcingAnnotations :: Type -> TCM Type+addForcingAnnotations t =+  ifM (not . optForcing <$> commandLineOptions)+      (return t) $ do+  -- t <- normalise t+  let TelV tel (El _ a) = telView' t+      n  = size tel+      indexToLevel x = n - x - 1+  xs <- filter (>=0) . map indexToLevel <$> forcedVariables a+  let t' = force xs t+  reportSLn "tc.force" 10 $ unlines+    [ "Forcing analysis"+    , "  xs = " ++ show xs+    , "  t  = " ++ show t+    , "  t' = " ++ show t'+    ]+  return t'++forcedVariables :: Term -> TCM [Nat]+forcedVariables t = case t of+  Var i [] -> return [i]+  Con _ vs -> forcedArgs vs+  Def d vs ->+    ifM (isInj d)+        (forcedArgs vs)+        (return [])+  Fun a b -> (++) <$> forcedVariables (unEl $ unArg a)+                  <*> forcedVariables (unEl b)+  Pi a b -> (++) <$> forcedVariables (unEl $ unArg a)+                 <*> (underBinder <$> forcedVariables (unEl $ absBody b))+  -- Sorts?+  _ -> return []+  where+    underBinder xs = [ x - 1 | x <- xs, x /= 0 ]+    forcedArgs vs = concat <$> mapM (forcedVariables . unArg) vs+    isInj d = do+      def <- getConstInfo d+      return $ case theDef def of+        Datatype{} -> True+        Record{}   -> True+        Axiom{}    -> True+        _          -> False++force :: [Nat] -> Type -> Type+force xs t = aux 0 t+  where+    m = maximum (-1:xs)+    aux i t | i > m = t+    aux i t = case t of+      El s (Fun a b) -> El s $ Fun (upd a) (aux (i + 1) b)+      El s (Pi  a b) -> El s $ Pi  (upd a) (fmap (aux (i + 1)) b)+      _ -> __IMPOSSIBLE__+      where+        upd a | i `elem` xs = a { argRelevance = Forced }+              | otherwise   = a+
src/full/Agda/TypeChecking/Free.hs view
@@ -52,7 +52,9 @@ 		 , flexibleVars = Set.empty 		 } --- | Doesn't go inside metas.+-- | Doesn't go inside solved metas, but collects the variables from a+-- metavariable application @X ts@ as @flexibleVars@.+ class Free a where   freeVars' :: FreeConf -> a -> FreeVars @@ -75,6 +77,7 @@     Fun a b    -> freeVars' conf (a,b)     Sort s     -> freeVars' conf s     MetaV _ ts -> flexible $ freeVars' conf ts+    DontCare   -> empty  instance Free Type where   freeVars' conf (El s t) = freeVars' conf (s, t)@@ -103,8 +106,8 @@ instance Free a => Free (Abs a) where   freeVars' conf (Abs _ b) = mapFV (subtract 1) $ delete 0 $ freeVars' conf b -instance Free Telescope where-  freeVars' conf EmptyTel	     = empty+instance Free a => Free (Tele a) where+  freeVars' conf EmptyTel	   = empty   freeVars' conf (ExtendTel a tel) = freeVars' conf (a, tel)  instance Free ClauseBody where
src/full/Agda/TypeChecking/Implicit.hs view
@@ -22,21 +22,21 @@  -- | The list should be non-empty. insertImplicit :: NamedArg e -> [Arg String] -> ImplicitInsertion-insertImplicit _		 [] = __IMPOSSIBLE__-insertImplicit (Arg NotHidden _) ts = impInsert $ nofHidden ts+insertImplicit _ [] = __IMPOSSIBLE__+insertImplicit a ts | argHiding a == NotHidden = impInsert $ nofHidden ts   where     nofHidden :: [Arg a] -> Int     nofHidden = length . takeWhile ((Hidden ==) . argHiding)-insertImplicit (Arg _ e) ts@(t : _) =+insertImplicit a ts@(t : _) =   case argHiding t of     NotHidden -> BadImplicits-    Hidden    -> case nameOf e of+    Hidden    -> case nameOf (unArg a) of       Nothing -> impInsert 0       Just x  -> find 0 x ts   where-    find i x (Arg Hidden y : ts)+    find i x (Arg Hidden r y : ts)       | x == y	  = impInsert i       | otherwise = find (i + 1) x ts-    find i x (Arg NotHidden _ : _) = NoSuchName x-    find i x []			   = NoSuchName x+    find i x (Arg NotHidden _ _ : _) = NoSuchName x+    find i x []			     = NoSuchName x 
src/full/Agda/TypeChecking/Injectivity.hs view
@@ -10,6 +10,7 @@ import Control.Monad.Reader hiding (mapM) import Data.Map (Map) import qualified Data.Map as Map+import qualified Data.Set as Set import Data.Maybe import Data.List import Data.Traversable@@ -54,7 +55,14 @@       case def of         Datatype{}  -> return (Just $ ConHead f)         Record{}    -> return (Just $ ConHead f)-        Axiom{}     -> return (Just $ ConHead f)+        Axiom{}     -> do+          -- Don't treat axioms in the current mutual block+          -- as constructors (they might have definitions we+          -- don't know about yet).+          fs <- lookupMutualBlock =<< currentMutualBlock+          if Set.member f fs+            then return Nothing+            else return (Just $ ConHead f)         _           -> return Nothing     Con c _ -> return (Just $ ConHead c)     Sort _  -> return (Just SortHead)@@ -207,6 +215,8 @@      metaPat (DotP v) = dotP v     metaPat (VarP _) = nextMeta-    metaPat (ConP c args) = Con c <$> metaArgs args+    metaPat (ConP c mt args) = do+      args <- metaArgs args+      return $ Con c args     metaPat (LitP l) = return $ Lit l 
src/full/Agda/TypeChecking/Level.hs view
@@ -37,9 +37,11 @@   data LevelKit = LevelKit-  { levelSuc   :: Term -> Term+  { levelType  :: Term+  , levelSuc   :: Term -> Term   , levelMax   :: Term -> Term -> Term   , levelZero  :: Term+  , typeName :: QName   , sucName  :: QName   , maxName  :: QName   , zeroName :: QName@@ -48,24 +50,37 @@ levelSucFunction :: MonadTCM tcm => tcm (Term -> Term) levelSucFunction = do   suc <- primLevelSuc-  return $ \a -> suc `apply` [Arg NotHidden a]+  return $ \a -> suc `apply` [defaultArg a]  builtinLevelKit :: MonadTCM tcm => tcm (Maybe LevelKit) builtinLevelKit = liftTCM $ do+    level@(Def l []) <- primLevel     zero@(Con z []) <- primLevelZero     suc@(Con s []) <- primLevelSuc     max@(Def m []) <- primLevelMax-    let a @@ b = a `apply` [Arg NotHidden b]+    let a @@ b = a `apply` [defaultArg b]     return $ Just $ LevelKit-      { levelSuc = \a -> suc @@ a+      { levelType = level+      , levelSuc = \a -> suc @@ a       , levelMax = \a b -> max @@ a @@ b       , levelZero = zero+      , typeName = l       , sucName = s       , maxName = m       , zeroName = z       }   `catchError` \_ -> return Nothing +-- | Raises an error if no level kit is available.++requireLevels :: TCM LevelKit+requireLevels = do+  mKit <- builtinLevelKit+  case mKit of+    Nothing -> typeError $ GenericError $+      "Some or all of the LEVEL builtins have not been defined."+    Just k  -> return k+ unLevelAtom :: LevelAtom -> Term unLevelAtom (MetaLevel x as) = MetaV x as unLevelAtom (BlockedLevel a) = a@@ -78,7 +93,7 @@     Max [Plus 0 a]    -> return $ unLevelAtom a     Max [a]           -> do       suc <- primLevelSuc-      return $ unPlusV (\n -> suc `apply` [Arg NotHidden n]) a+      return $ unPlusV (\n -> suc `apply` [defaultArg n]) a     Max as -> do       Just LevelKit{ levelSuc = suc, levelMax = max } <- builtinLevelKit       return $ case map (unPlusV suc) as of@@ -108,13 +123,13 @@   mmax <- maybePrimDef primLevelMax   let view a =         case a of-          Con s [Arg NotHidden a]-            | Just s == msuc -> inc <$> view a+          Con s [arg]+            | Just s == msuc -> inc <$> view (unArg arg)           Con z []             | Just z == mzer -> return $ closed 0           Lit (LitLevel _ n)   -> return $ closed n-          Def m [Arg NotHidden a, Arg NotHidden b]-            | Just m == mmax -> lub <$> view a <*> view b+          Def m [arg1, arg2]+            | Just m == mmax -> lub <$> view (unArg arg1) <*> view (unArg arg2)           _                  -> mkAtom a   view =<< normalise a   where@@ -140,7 +155,7 @@           []  -> []           ns  -> [ClosedLevel $ maximum ns]         bs = subsume [ b | b@Plus{} <- as ]-        +         subsume (ClosedLevel{} : _) = __IMPOSSIBLE__         subsume [] = []         subsume (Plus n a : bs)
src/full/Agda/TypeChecking/MetaVars.hs view
@@ -39,6 +39,7 @@ import Agda.Utils.List import Agda.Utils.Monad import Agda.Utils.Size+import Agda.Utils.Permutation  import Agda.TypeChecking.Monad.Debug @@ -64,9 +65,20 @@ 	    InstV{}                        -> False 	    InstS{}                        -> False 	    Open{}                         -> False-    reportSLn "tc.meta.blocked" 12 $ if r then "  yes" else "  no"+    reportSLn "tc.meta.blocked" 12 $ +      if r then "  yes, because " ++ show i else "  no"     return r +isEtaExpandable :: MonadTCM tcm => MetaId -> tcm Bool+isEtaExpandable x = do+    i <- mvInstantiation <$> lookupMeta x+    return $ case i of+      Open{}                         -> True+      InstV{}                        -> False+      InstS{}                        -> False+      BlockedConst{}                 -> False+      PostponedTypeCheckingProblem{} -> False+ class HasMeta t where     metaInstance :: MonadTCM tcm => t -> tcm MetaInstantiation     metaVariable :: MetaId -> Args -> t@@ -119,14 +131,14 @@   ifM typeInType (return $ mkType 0) $   ifM hasUniversePolymorphism (newSortMetaCtx =<< getContextArgs)   $ do i <- createMetaInfo-       x <- newMeta i normalMetaPriority (IsSort())+       x <- newMeta i normalMetaPriority (idP 0) (IsSort())        return $ MetaS x []  newSortMetaCtx :: MonadTCM tcm => Args -> tcm Sort newSortMetaCtx vs =   ifM typeInType (return $ mkType 0) $ do     i <- createMetaInfo-    x <- newMeta i normalMetaPriority (IsSort ())+    x <- newMeta i normalMetaPriority (idP 0) (IsSort ())     return $ MetaS x vs  newTypeMeta :: MonadTCM tcm => Sort -> tcm Type@@ -145,7 +157,6 @@ newValueMetaCtx :: MonadTCM tcm => Type -> Args -> tcm Term newValueMetaCtx t ctx = do   m@(MetaV i _) <- newValueMetaCtx' t ctx-  etaExpandMeta i   instantiateFull m  -- | Create a new value meta without η-expanding.@@ -159,12 +170,15 @@ newValueMetaCtx' :: MonadTCM tcm => Type -> Args -> tcm Term newValueMetaCtx' t vs = do   i <- createMetaInfo-  x <- newMeta i normalMetaPriority (HasType () t)+  let TelV tel _ = telView' t+      perm = idP (size tel)+  x <- newMeta i normalMetaPriority perm (HasType () t)   reportSDoc "tc.meta.new" 50 $ fsep     [ text "new meta:"     , nest 2 $ prettyTCM vs <+> text "|-"     , nest 2 $ text (show x) <+> text ":" <+> prettyTCM t     ]+  etaExpandMeta [SingletonRecords, Levels] x   return $ MetaV x vs  newTelMeta :: MonadTCM tcm => Telescope -> tcm Args@@ -180,10 +194,13 @@ newArgsMetaCtx (El s tm) tel ctx = do   tm <- reduce tm   case funView tm of-      FunV (Arg h a) _  -> do-	  v    <- newValueMetaCtx (telePi_ tel a) ctx-	  args <- newArgsMetaCtx (El s tm `piApply` [Arg h v]) tel ctx-	  return $ Arg h v : args+      FunV (Arg h r a) _  -> do+          -- Andreas, 2010-09-24 skip irrelevant record fields when eta-expanding a meta var+	  arg  <- (Arg h r) <$>  +                    if r == Irrelevant then return DontCare+                     else newValueMetaCtx (telePi_ tel a) ctx+	  args <- newArgsMetaCtx (El s tm `piApply` [arg]) tel ctx+	  return $ arg : args       NoFunV _    -> return []  -- | Create a metavariable of record type. This is actually one metavariable@@ -219,7 +236,8 @@ 	    vs	  <- getContextArgs 	    tel   <- getContextTelescope 	    x	  <- newMeta' (BlockedConst $ abstract tel v)-                              i lowMetaPriority (HasType () $ telePi_ tel t)+                              i lowMetaPriority (idP $ size tel)+                              (HasType () $ telePi_ tel t) 			    -- we don't instantiate blocked terms 	    c <- escapeContext (size tel) $ guardConstraint (return cs) (UnBlock x)             verboseS "tc.meta.blocked" 20 $ do@@ -248,7 +266,8 @@   tel <- getContextTelescope   cl  <- buildClosure (e, t, unblock)   m   <- newMeta' (PostponedTypeCheckingProblem cl)-                  i normalMetaPriority $ HasType () $ telePi_ tel t+                  i normalMetaPriority (idP (size tel))+         $ HasType () $ telePi_ tel t   addConstraints =<< buildConstraint (UnBlock m)   MetaV m <$> getContextArgs @@ -257,42 +276,83 @@ etaExpandListeners m = do   ms <- getMetaListeners m   clearMetaListeners m	-- we don't really have to do this-  mapM_ etaExpandMeta ms+  mapM_ (etaExpandMeta allMetaKinds) ms --- | Eta expand a metavariable.-etaExpandMeta :: MonadTCM tcm => MetaId -> tcm ()-etaExpandMeta m = do-  HasType _ a <- mvJudgement <$> lookupMeta m+-- | Various kinds of metavariables.++data MetaKind =+    Records+    -- ^ Meta variables of record type.+  | SingletonRecords+    -- ^ Meta variables of \"hereditarily singleton\" record type.+  | Levels+    -- ^ Meta variables of level type, if type-in-type is activated.+  deriving (Eq, Enum, Bounded)++-- | All possible metavariable kinds.++allMetaKinds :: [MetaKind]+allMetaKinds = [minBound .. maxBound]++-- | Eta expand a metavariable, if it is of the specified kind.+--   Don't do anything if the metavariable is a blocked term.+etaExpandMeta :: MonadTCM tcm => [MetaKind] -> MetaId -> tcm ()+etaExpandMeta kinds m =+  verboseBracket "tc.meta.eta" 10 ("etaExpandMeta " ++ show m) $+  whenM (isEtaExpandable m) $ do+  meta       <- lookupMeta m+  let HasType _ a = mvJudgement meta   TelV tel b <- telViewM a-  let args	 = [ Arg h $ Var i []-		   | (i, Arg h _) <- reverse $ zip [0..] $ reverse $ telToList tel+  let args	 = [ Arg h r $ Var i []+		   | (i, Arg h r _) <- reverse $ zip [0..] $ reverse $ telToList tel 		   ]   bb <- reduceB b   case unEl <$> bb of-    Blocked x _            -> listenToMeta m x-    NotBlocked (MetaV x _) -> listenToMeta m x-    NotBlocked lvl@(Def r ps)  ->-      ifM (isRecord r) (do-	rng <- getMetaRange m-	u   <- setCurrentRange rng $ newRecordMetaCtx r ps tel args-	inContext [] $ addCtxTel tel $ do-	  verboseS "tc.meta.eta" 20 $ do-	    du <- prettyTCM u-	    liftIO $ LocIO.putStrLn $ "eta expanding: " ++ show m ++ " --> " ++ show du-	  noConstraints $ assignV b m args u  -- should never produce any constraints-      ) $ do-      mlvl <- getBuiltin' builtinLevel-      tt   <- typeInType-      if tt && Just lvl == mlvl-       then do-        reportSLn "tc.meta.eta" 20 $ "Expanding level meta to 0 (type-in-type)"-        noConstraints $ assignV b m args (Lit $ LitLevel noRange 0)-       else-        return ()-    _		-> return ()+    Blocked x _               -> listenToMeta m x+    NotBlocked (MetaV x _)    -> listenToMeta m x+    NotBlocked lvl@(Def r ps) ->+      ifM (isEtaRecord r) (do+	let expand = do+              u <- withMetaInfo (mvInfo meta) $ newRecordMetaCtx r ps tel args+              inContext [] $ addCtxTel tel $ do+                verboseS "tc.meta.eta" 20 $ do+                  du <- prettyTCM u+                  liftIO $ LocIO.putStrLn $ "eta expanding: " ++ show m ++ " --> " ++ show du+                noConstraints $ assignV b m args u  -- should never produce any constraints+        if Records `elem` kinds then+          expand+         else if SingletonRecords `elem` kinds then do+          singleton <- isSingletonRecord r ps+          case singleton of+            Left x      -> listenToMeta m x+            Right False -> return ()+            Right True  -> expand+         else+          return ()+      ) $ when (Levels `elem` kinds) $ do+        mlvl <- getBuiltin' builtinLevel+        tt   <- typeInType+        if tt && Just lvl == mlvl+         then do+          reportSLn "tc.meta.eta" 20 $ "Expanding level meta to 0 (type-in-type)"+          noConstraints $ assignV b m args (Lit $ LitLevel noRange 0)+         else+          return ()+    _ -> return () -  return ()+-- | Eta expand blocking metavariables of record type, and reduce the+-- blocked thing. +etaExpandBlocked+  :: (MonadTCM tcm, Reduce t) => Blocked t -> tcm (Blocked t)+etaExpandBlocked t@NotBlocked{} = return t+etaExpandBlocked (Blocked m t)  = do+  etaExpandMeta [Records] m+  t <- reduceB t+  case t of+    Blocked m' _ | m /= m' -> etaExpandBlocked t+    _                      -> return t+ abortAssign :: MonadTCM tcm => tcm a abortAssign =     do	s <- get@@ -300,14 +360,16 @@  handleAbort :: MonadTCM tcm => TCM a -> TCM a -> tcm a handleAbort h m = liftTCM $-    m `catchError` \e ->+    m `catchError_` \e -> 	case errError e of 	    AbortAssign s -> do put s; h             PatternErr{}  -> do-              reportSLn "tc.meta.assign" 50 "Pattern violation!"+              -- Andreas, 2010-09-17 uncommenting the reportSLn statements+              -- breaks something.  Why?+              -- reportSLn "tc.meta.assign" 50 "handleAbort: Pattern violation!"               throwError e 	    _		  -> do-              reportSLn "tc.meta.assign" 50 "Some exception"+              -- reportSLn "tc.meta.assign" 50 "handleAbort: Some exception"               throwError e  -- | Assign to an open metavar.@@ -329,14 +391,18 @@ 	whenM (isBlockedTerm x) patternViolation	-- TODO: not so nice  	-- Check that the arguments are distinct variables+        -- Andreas, 2010-09-24: Herein, ignore the variables which are not+        -- free in v+        let fvs = allVars $ freeVars v         reportSDoc "tc.meta.assign" 20 $             let pr (Var n []) = text (show n)                 pr (Def c []) = prettyTCM c                 pr _          = text ".."-            in-            text "args:" <+> sep (map (pr . unArg) args)--	ids <- checkArgs x args+            in vcat +                 [ text "mvar args:" <+> sep (map (pr . unArg) args)+                 , text "fvars rhs:" <+> sep (map (text . show) $ Set.toList fvs)+                 ]+	ids <- checkArgs x args fvs  	reportSDoc "tc.meta.assign" 15 $ 	    text "preparing to instantiate: " <+> prettyTCM v@@ -364,16 +430,16 @@ 	    -- then 	    --   v' = (λ a b c d e. v) _ 1 _ 2 0 	    tel  <- getContextTelescope-	    args <- map (Arg NotHidden) <$> getContextTerms+	    args <- map defaultArg <$> getContextTerms 	    let iargs = reverse $ zipWith (rename $ reverse $ map unArg ids) [0..] $ reverse args 		v'    = raise (size ids) (abstract tel v) `apply` iargs 	    return v' -	let extTel (Arg h i) m = do+	let extTel (Arg h r i) m = do 	      tel <- m 	      t	  <- typeOfBV i 	      x	  <- nameOfBV i-	      return $ ExtendTel (Arg h t) (Abs (show x) tel)+	      return $ ExtendTel (Arg h r t) (Abs (show x) tel) 	tel' <- foldr extTel (return EmptyTel) ids  	reportSDoc "tc.meta.assign" 15 $@@ -414,12 +480,12 @@             text "args:" <+> sep (map (pr . unArg) args)          -- TODO Hack-        let fv = flexibleVars $ freeVars s-        when (any (< 0) $ Set.toList fv) $ do+        let fvs = freeVars s+        when (any (< 0) $ Set.toList (flexibleVars fvs)) $ do             reportSLn "tc.meta.assign" 10 "negative variables!"             patternViolation -	ids <- checkArgs x args+	ids <- checkArgs x args (allVars fvs)  	reportSDoc "tc.meta.assign" 15 $ 	    text "preparing to instantiate: " <+> prettyTCM s@@ -446,16 +512,16 @@ 	    -- then 	    --   v' = (λ a b c d e. v) _ 1 _ 2 0 	    tel  <- getContextTelescope-	    args <- map (Arg NotHidden) <$> getContextTerms+	    args <- map defaultArg <$> getContextTerms 	    let iargs = reverse $ zipWith (rename $ reverse $ map unArg ids) [0..] $ reverse args 		v'    = raise (size ids) (abstract tel v) `apply` iargs 	    return v' -	let extTel (Arg h i) m = do+	let extTel (Arg h r i) m = do 	      tel <- m 	      t	  <- typeOfBV i 	      x	  <- nameOfBV i-	      return $ ExtendTel (Arg h t) (Abs (show x) tel)+	      return $ ExtendTel (Arg h r t) (Abs (show x) tel) 	tel' <- foldr extTel (return EmptyTel) ids  	reportSDoc "tc.meta.assign" 15 $@@ -483,6 +549,8 @@             x =: s             return [] +type FVs = Set Nat+ -- | Check that arguments to a metavar are in pattern fragment. --   Assumes all arguments already in whnf. --   Parameters are represented as @Var@s so @checkArgs@ really@@ -492,24 +560,26 @@ -- --   @reverse@ is necessary because we are directly abstracting over this list @ids@. ---checkArgs :: MonadTCM tcm => MetaId -> Args -> tcm [Arg Nat]-checkArgs x args = do-  args <- etaContract =<< instantiateFull args-  case validParameters args of+checkArgs :: MonadTCM tcm => MetaId -> Args -> FVs -> tcm [Arg Nat]+checkArgs x args fvs = do+  args <- instantiateFull args+  case validParameters args fvs of     Just ids -> return $ reverse ids     Nothing  -> patternViolation  -- | Check that the parameters to a meta variable are distinct variables.-validParameters :: Monad m => Args -> m [Arg Nat]-validParameters args-    | all isVar args && distinct (map unArg vars)+-- Andreas, 2010-09-24: Allow non-linear variables that do not appear in @FVs@.+validParameters :: Monad m => Args -> FVs -> m [Arg Nat]+validParameters args fvs+    | all isVar args && distinct (filter (flip Set.member fvs) $ map unArg vars)                 = return $ reverse vars     | otherwise	= fail "invalid parameters"     where-	vars = [ Arg h i | Arg h (Var i []) <- args ]+	vars = [ Arg h r i | Arg h r (Var i []) <- args ]+          isVar :: Arg Term -> Bool-isVar (Arg _ (Var _ [])) = True+isVar (Arg _ _ (Var _ [])) = True isVar _			 = False  
src/full/Agda/TypeChecking/MetaVars/Occurs.hs view
@@ -1,20 +1,39 @@+{-# LANGUAGE CPP #-}  module Agda.TypeChecking.MetaVars.Occurs where  import Control.Applicative import Control.Monad import Control.Monad.Error+import qualified Data.Set as Set  import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.TypeChecking.Monad import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Free+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.EtaContract+import {-# SOURCE #-} Agda.TypeChecking.MetaVars+ import Agda.Utils.Monad+import Agda.Utils.Permutation+import Agda.Utils.Size +import Agda.Utils.Impossible+#include "../../undefined.h"++data OccursCtx = Flex | Rigid+  deriving (Eq)++abort :: OccursCtx -> TypeError -> TCM ()+abort Flex  _   = patternViolation+abort Rigid err = typeError err+ -- | Extended occurs check. class Occurs t where-  occurs :: (TypeError -> TCM ()) -> MetaId -> [Nat] -> t -> TCM t+  occurs :: OccursCtx -> MetaId -> [Nat] -> t -> TCM t  occursCheck :: MonadTCM tcm => MetaId -> [Nat] -> Term -> tcm Term occursCheck m xs v = liftTCM $ do@@ -25,7 +44,7 @@     Sort (MetaS m' _) | m == m' -> patternViolation     _                           ->                               -- Produce nicer error messages-      occurs typeError m xs v `catchError` \err -> case errError err of+      occurs Rigid m xs v `catchError` \err -> case errError err of         TypeError _ cl -> case clValue cl of           MetaOccursInItself{} ->             typeError . GenericError . show =<<@@ -53,57 +72,166 @@         _ -> throwError err  instance Occurs Term where-    occurs abort m xs v = do-	v <- reduceB v-	case v of-	    -- Don't fail on blocked terms or metas-	    Blocked _ v  -> occurs' (const patternViolation) v-	    NotBlocked v -> occurs' abort v-	where-	    occurs' abort v = case v of-		Var i vs   -> do-		  unless (i `elem` xs) $ abort $ MetaCannotDependOn m xs i-		  Var i <$> occ vs-		Lam h f	    -> Lam h <$> occ f-		Lit l	    -> return v-		Def c vs    -> Def c <$> occ vs-		Con c vs    -> Con c <$> occ vs-		Pi a b	    -> uncurry Pi <$> occ (a,b)-		Fun a b	    -> uncurry Fun <$> occ (a,b)-		Sort s	    -> Sort <$> occ s-		MetaV m' vs -> do-		    when (m == m') $ abort $ MetaOccursInItself m-		    -- Don't fail on flexible occurrence-		    MetaV m' <$> occurs (const patternViolation) m xs vs-		where-		    occ x = occurs abort m xs x+  occurs ctx m xs v = do+    v <- reduceB v+    case v of+      -- Don't fail on blocked terms or metas+      Blocked _ v  -> occurs' Flex v+      NotBlocked v -> occurs' ctx v+    where+      occurs' ctx v = case v of+        Var i vs   -> do+          unless (i `elem` xs) $ abort ctx $ MetaCannotDependOn m xs i+          Var i <$> occ vs+        Lam h f	    -> Lam h <$> occ f+        Lit l	    -> return v+        DontCare    -> return v+        Def c vs    -> Def c <$> occ vs+        Con c vs    -> Con c <$> occ vs+        Pi a b	    -> uncurry Pi <$> occ (a,b)+        Fun a b	    -> uncurry Fun <$> occ (a,b)+        Sort s	    -> Sort <$> occ s+        MetaV m' vs -> do+            -- Check for loop+            when (m == m') $ abort ctx $ MetaOccursInItself m +            -- The arguments are in a flexible position+            (MetaV m' <$> occurs Flex m xs vs) `catchError` \err -> do+              case errError err of+                -- On pattern violations try to remove offending+                -- flexible occurrences (if in a rigid context)+                PatternErr{} | ctx == Rigid -> do+                  let kills = map (hasBadRigid xs) $ map unArg vs+                  reportSLn "tc.meta.kill" 20 $+                    "oops, pattern violation for " ++ show m' ++ "\n" +++                    "  kills: " ++ show kills+                  if not (or kills)+                    then throwError err+                    else do+                      reportSDoc "tc.meta.kill" 10 $ vcat+                        [ text "attempting kills"+                        , nest 2 $ vcat+                          [ text "m'    =" <+> text (show m')+                          , text "xs    =" <+> text (show xs)+                          , text "vs    =" <+> prettyList (map prettyTCM vs)+                          , text "kills =" <+> text (show kills)+                          ]+                        ]+                      ok <- killArgs kills m'+                      if ok+                        then occurs Rigid m xs =<< instantiate (MetaV m' vs)+                        else throwError err+                _ -> throwError err+        where+          occ x = occurs ctx m xs x+ instance Occurs Type where-    occurs abort m xs (El s v) = uncurry El <$> occurs abort m xs (s,v)+  occurs ctx m xs (El s v) = uncurry El <$> occurs ctx m xs (s,v)  instance Occurs Sort where-    occurs abort m xs s =-	do  s' <- reduce s-	    case s' of-		MetaS m' args -> do-		  when (m == m') $ abort $ MetaOccursInItself m-		  MetaS m' <$> occurs (const patternViolation) m xs args-		Lub s1 s2  -> uncurry Lub <$> occurs abort m xs (s1,s2)-                DLub s1 s2 -> uncurry DLub <$> occurs abort m xs (s1, s2)-		Suc s      -> Suc <$> occurs abort m xs s-		Type a     -> Type <$> occurs abort m xs a-		Prop       -> return s'-		Inf        -> return s'+  occurs ctx m xs s = do+    s' <- reduce s+    case s' of+      MetaS m' args -> do+        when (m == m') $ abort ctx $ MetaOccursInItself m+        MetaS m' <$> occurs Flex m xs args+      Lub s1 s2  -> uncurry Lub <$> occurs ctx m xs (s1,s2)+      DLub s1 s2 -> uncurry DLub <$> occurs ctx m xs (s1, s2)+      Suc s      -> Suc <$> occurs ctx m xs s+      Type a     -> Type <$> occurs ctx m xs a+      Prop       -> return s'+      Inf        -> return s'  instance Occurs a => Occurs (Abs a) where-    occurs abort m xs (Abs s x) = Abs s <$> occurs abort m (0 : map (1+) xs) x+  occurs ctx m xs (Abs s x) = Abs s <$> occurs ctx m (0 : map (1+) xs) x  instance Occurs a => Occurs (Arg a) where-    occurs abort m xs (Arg h x) = Arg h <$> occurs abort m xs x+  occurs ctx m xs (Arg h r x) = Arg h r <$> occurs ctx m xs x  instance (Occurs a, Occurs b) => Occurs (a,b) where-    occurs abort m xs (x,y) = (,) <$> occurs abort m xs x <*> occurs abort m xs y+  occurs ctx m xs (x,y) = (,) <$> occurs ctx m xs x <*> occurs ctx m xs y  instance Occurs a => Occurs [a] where-    occurs abort m xs ys = mapM (occurs abort m xs) ys+  occurs ctx m xs ys = mapM (occurs ctx m xs) ys++-- Getting rid of flexible occurrences --++hasBadRigid :: [Nat] -> Term -> Bool+hasBadRigid xs v =+  not $ Set.isSubsetOf+    (rigidVars $ freeVars v)+    (Set.fromList xs)++killArgs :: [Bool] -> MetaId -> TCM Bool+killArgs kills _+  | not (or kills) = return False  -- nothing to kill+killArgs kills m = do+  mv <- lookupMeta m+  case mvJudgement mv of+    IsSort _    -> return False+    HasType _ a -> do+      TelV tel b <- telView' <$> instantiateFull a+      let args         = zip (telToList tel) (kills ++ repeat False)+          (kills', a') = killedType args b+      dbg kills' a a'+      when (any unArg kills') $ performKill (reverse kills') m a'+      -- Only successful if all occurrences were killed+      return (map unArg kills' == kills)+  where+    dbg kills' a a' =+      reportSDoc "tc.meta.kill" 10 $ vcat+        [ text "after kill analysis"+        , nest 2 $ vcat+          [ text "kills'  =" <+> text (show kills')+          , text "oldType =" <+> prettyTCM a+          , text "newType =" <+> prettyTCM a'+          ]+        ]++killedType :: [(Arg (String, Type), Bool)] -> Type -> ([Arg Bool], Type)+killedType [] b = ([], b)+killedType ((arg, kill) : kills) b+  | dontKill  = (killed False : args, telePi (telFromList [arg]) b')+  | otherwise = (killed True  : args, subst __IMPOSSIBLE__ b')+  where+    (args, b') = killedType kills b+    killed k = fmap (const k) arg+    dontKill = not kill || 0 `freeIn` b'++-- The list starts with the last argument+performKill :: [Arg Bool] -> MetaId -> Type -> TCM ()+performKill kills m a = do+  mv <- lookupMeta m+  let perm = Perm (size kills)+             [ i | (i, Arg _ _ False) <- zip [0..] (reverse kills) ]+  m' <- newMeta (mvInfo mv) (mvPriority mv) perm (HasType undefined a)+  let vars = reverse [ Arg h r (Var i []) | (i, Arg h r False) <- zip [0..] kills ]+      hs   = reverse [ argHiding a | a <- kills ]+      lam h b = Lam h (Abs "v" b)+      u       = foldr lam (MetaV m' vars) hs+  dbg m' u+  assignTerm m u+  return ()+  where+    dbg m' u = reportSDoc "tc.meta.kill" 10 $ vcat+      [ text "actual killing"+      , nest 2 $ vcat+        [ text "new meta:" <+> text (show m')+        , text "kills   :" <+> text (show kills)+        , text "inst    :" <+> text (show m) <+> text ":=" <+> prettyTCM u+        ]+      ]++{-++  When hitting a meta variable:++  - Compute flex/rigid for its arguments+  - Compare to allowed variables+  - Mark arguments with rigid occurrences of disallowed+    variables for deletion+  - Attempt to delete marked arguments+  - We don't need to check for success, we can just+    continue occurs checking.+-} 
src/full/Agda/TypeChecking/Monad/Base.hs view
@@ -9,6 +9,7 @@ import Control.Monad.State import Control.Monad.Reader import Control.Applicative+import Data.Int import Data.Map as Map import Data.Set as Set import Data.Generics@@ -24,6 +25,8 @@ import Agda.Syntax.Position import Agda.Syntax.Scope.Base +import Agda.TypeChecking.CompiledClause+ import Agda.Interaction.Exceptions import {-# SOURCE #-} Agda.Interaction.FindFile import Agda.Interaction.Options@@ -33,7 +36,7 @@ import Agda.Utils.FileName import Agda.Utils.Fresh import Agda.Utils.Monad-import Agda.Utils.Trace+import Agda.Utils.Permutation  #include "../../undefined.h" import Agda.Utils.Impossible@@ -59,12 +62,10 @@ 	 , stScope	       :: ScopeInfo 	 , stPersistentOptions :: CommandLineOptions            -- ^ Options which apply to all files, unless overridden.-	 , stPragmaOptions     :: CommandLineOptions+	 , stPragmaOptions     :: PragmaOptions            -- ^ Options applying to the current file. @OPTIONS@            -- pragmas only affect this field. 	 , stStatistics	       :: Statistics-	 , stTrace	       :: CallTrace-	     -- ^ record what is happening (for error msgs) 	 , stMutualBlocks      :: Map MutualId (Set QName) 	 , stLocalBuiltins     :: BuiltinThings PrimFun          , stImportedBuiltins  :: BuiltinThings PrimFun@@ -99,9 +100,8 @@          , stCurrentModule     = Nothing 	 , stScope	       = emptyScopeInfo 	 , stPersistentOptions = defaultOptions-	 , stPragmaOptions     = defaultOptions+	 , stPragmaOptions     = optPragmaOptions $ defaultOptions 	 , stStatistics	       = Map.empty-	 , stTrace	       = noTrace 	 , stMutualBlocks      = Map.empty 	 , stLocalBuiltins     = Map.empty 	 , stImportedBuiltins  = Map.empty@@ -142,9 +142,9 @@ 	    i = fInteger s  instance HasFresh i FreshThings => HasFresh i TCState where-    nextFresh s = (i, s { stFreshThings = f })+    nextFresh s = ((,) $! i) $! s { stFreshThings = f } 	where-	    (i,f) = nextFresh $ stFreshThings s+	    (i, f) = nextFresh $ stFreshThings s  --------------------------------------------------------------------------- -- ** Interface@@ -182,6 +182,8 @@                               -- (transitively) imported modules are                               -- not included here.         , iHighlighting    :: HighlightingInfo+        , iPragmaOptions   :: [OptionsPragma]+                              -- ^ Pragma options set in the file. 	}     deriving (Typeable, Data, Show) @@ -192,7 +194,6 @@ data Closure a = Closure { clSignature  :: Signature 			 , clEnv	:: TCEnv 			 , clScope	:: ScopeInfo-			 , clTrace	:: CallTrace 			 , clValue	:: a 			 }     deriving (Typeable, Data)@@ -208,8 +209,7 @@     env   <- ask     sig   <- gets stSignature     scope <- gets stScope-    trace <- gets stTrace-    return $ Closure sig env scope trace x+    return $ Closure sig env scope x  --------------------------------------------------------------------------- -- ** Constraints@@ -218,9 +218,11 @@ type ConstraintClosure = Closure Constraint  data Constraint = ValueCmp Comparison Type Term Term+                | ArgsCmp [Polarity] Type Args Args 		| TypeCmp Comparison Type Type                 | TelCmp Comparison Telescope Telescope 		| SortCmp Comparison Sort Sort+                | LevelCmp Comparison Term Term 		| UnBlock MetaId 		| Guarded Constraint Constraints                 | IsEmpty Type@@ -271,6 +273,10 @@ data MetaVariable = 	MetaVar	{ mvInfo	  :: MetaInfo 		, mvPriority	  :: MetaPriority -- ^ some metavariables are more eager to be instantiated+                , mvPermutation   :: Permutation+                  -- ^ a metavariable doesn't have to depend on all variables+                  --   in the context, this "permutation" will throw away the+                  --   ones it does not depend on 		, mvJudgement	  :: Judgement Type MetaId 		, mvInstantiation :: MetaInstantiation 		, mvListeners	  :: Set MetaId	  -- ^ metavariables interested in what happens to this guy@@ -304,7 +310,8 @@     getRange m = getRange $ getMetaInfo m  instance SetRange MetaVariable where-  setRange r (MetaVar mi p j inst ls) = MetaVar (mi {clValue = r}) p j inst ls+  setRange r (MetaVar mi p perm j inst ls) =+    MetaVar (mi {clValue = r}) p perm j inst ls  normalMetaPriority :: MetaPriority normalMetaPriority = MetaPriority 0@@ -412,7 +419,8 @@             { axHsDef   :: Maybe HaskellRepresentation             } 	  | Function-            { funClauses        :: [Clause]+            { funClauses        :: [Clauses]+            , funCompiled       :: CompiledClauses             , funInv            :: FunctionInverse             , funPolarity       :: [Polarity]             , funArgOccurrences :: [Occurrence]@@ -435,12 +443,14 @@ 	  | Record             { recPars           :: Nat             , recClause         :: Maybe Clause-            , recCon            :: Maybe QName          -- ^ Constructor name.+            , recCon            :: QName                -- ^ Constructor name.+            , recNamedCon       :: Bool             , recConType        :: Type                 -- ^ The record constructor's type.-            , recFields         :: [(Hiding, A.QName)]+            , recFields         :: [Arg A.QName]             , recTel            :: Telescope             , recPolarity       :: [Polarity]             , recArgOccurrences :: [Occurrence]+            , recEtaEquality    :: Bool             , recAbstr          :: IsAbstract             } 	  | Constructor@@ -451,16 +461,23 @@ 	    , conAbstr  :: IsAbstract             , conInd    :: Induction   -- ^ Inductive or coinductive?             }+            -- ^ Note that, currently, the sharp constructor is+            --   represented as a definition ('Def'), but if you look+            --   up the name you will get a @Constructor@. 	  | Primitive             { primAbstr :: IsAbstract             , primName  :: String-            , primClauses :: Maybe [Clause]+            , primClauses :: Maybe [Clauses]               -- ^ 'Nothing' for primitive functions, @'Just'               -- something@ for builtin functions.             }             -- ^ Primitive or builtin functions.     deriving (Typeable, Data, Show) +defIsRecord :: Defn -> Bool+defIsRecord Record{} = True+defIsRecord _        = False+ newtype Fields = Fields [(C.Name, Type)]   deriving (Typeable, Data) @@ -474,13 +491,17 @@ 	}     deriving (Typeable) -defClauses :: Definition -> [Clause]+defClauses :: Definition -> [Clauses] defClauses Defn{theDef = Function{funClauses = cs}}        = cs defClauses Defn{theDef = Primitive{primClauses = Just cs}} = cs-defClauses Defn{theDef = Datatype{dataClause = Just c}}    = [c]-defClauses Defn{theDef = Record{recClause = Just c}}       = [c]+defClauses Defn{theDef = Datatype{dataClause = Just c}}    = [Clauses Nothing c]+defClauses Defn{theDef = Record{recClause = Just c}}       = [Clauses Nothing c] defClauses _                                               = [] +defCompiled :: Definition -> Maybe CompiledClauses+defCompiled Defn{theDef = Function{funCompiled = cc}} = Just cc+defCompiled _ = Nothing+ -- | Used to specify whether something should be delayed. data Delayed = Delayed | NotDelayed   deriving (Typeable, Data, Show, Eq)@@ -517,7 +538,7 @@ -- ** Mutual blocks --------------------------------------------------------------------------- -newtype MutualId = MutId Int+newtype MutualId = MutId Int32   deriving (Typeable, Data, Eq, Ord, Show, Num)  ---------------------------------------------------------------------------@@ -530,11 +551,6 @@ -- ** Trace --------------------------------------------------------------------------- -type CallTrace = Trace (Closure Call)--noTrace :: CallTrace-noTrace = TopLevel []- data Call = CheckClause Type A.Clause (Maybe Clause) 	  | forall a. CheckPattern A.Pattern Telescope Type (Maybe a) 	  | CheckLetBinding A.LetBinding (Maybe ())@@ -571,20 +587,6 @@   toConstr   x  = mkConstr (dataTypeOf x) "Dummy" [] Prefix   gunfold k z _ = __IMPOSSIBLE__ -instance HasRange a => HasRange (Trace a) where-    getRange (TopLevel _)      = noRange-    getRange (Current c par _ _)-      | r == noRange = getRange par-      | otherwise    = r-      where r = getRange c--instance HasRange a => HasRange (ParentCall a) where-  getRange NoParent = noRange-  getRange (Parent c par _)-    | r == noRange = getRange par-    | otherwise	   = r-    where r = getRange c- instance HasRange Call where     getRange (CheckClause _ c _)                   = getRange c     getRange (CheckPattern p _ _ _)                = getRange p@@ -665,6 +667,13 @@           , envReifyInteractionPoints :: Bool                 -- ^ should we try to recover interaction points when reifying?                 --   disabled when generating types for with functions+          , envEtaContractImplicit :: Bool+                -- ^ it's safe to eta contract implicit lambdas as long as we're+                --   not going to reify and retypecheck (like when doing with+                --   abstraction)+          , envRange :: Range+          , envCall  :: Maybe (Closure Call)+                -- ^ what we're doing at the moment 	  }     deriving (Typeable, Data) @@ -679,6 +688,9 @@                 , envReplace             = True                 , envDisplayFormsEnabled = True                 , envReifyInteractionPoints = True+                , envEtaContractImplicit    = True+                , envRange                  = noRange+                , envCall                   = Nothing 		}  ---------------------------------------------------------------------------@@ -698,7 +710,7 @@ -- ** Let bindings --------------------------------------------------------------------------- -type LetBindings = Map Name (Open (Term, Type))+type LetBindings = Map Name (Open (Term, Arg Type))  --------------------------------------------------------------------------- -- ** Abstract mode@@ -756,7 +768,6 @@ 	    -- ^ 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.-	| DependentPatternMatchingOnCodata 	| NotInductive Term           -- ^ The term does not correspond to an inductive data type. 	| UninstantiatedDotPattern A.Expr@@ -770,9 +781,14 @@ 	    -- ^ The given type should have been a pi. 	| ShouldBeRecordType Type 	| NotAProperTerm+        | SplitOnIrrelevant A.Pattern (Arg Type)+        | VariableIsIrrelevant Name+        | UnequalLevel Comparison Term Term 	| UnequalTerms Comparison Term Term Type 	| UnequalTypes Comparison Type Type 	| UnequalTelescopes Comparison Telescope Telescope+	| UnequalRelevance Type Type+	    -- ^ The two function types have different relevance. 	| UnequalHiding Type Type 	    -- ^ The two function types have different hiding. 	| UnequalSorts Sort Sort@@ -833,6 +849,7 @@ 	| ClashingModuleImport C.Name A.ModuleName 	| PatternShadowsConstructor A.Name A.QName 	| ModuleDoesntExport C.QName [C.ImportedName]+        | DuplicateImports C.QName [C.ImportedName] 	| InvalidPattern C.Pattern 	| RepeatedVariablesInPattern [C.Name]     -- Concrete to Abstract errors@@ -885,18 +902,18 @@   show = show . errError  instance Show TCErr' where-    show (TypeError _ e) = show (getRange $ clTrace e) ++ ": " ++ show (clValue e)+    show (TypeError _ e) = show (envRange $ clEnv e) ++ ": " ++ show (clValue e)     show (Exception r s) = show r ++ ": " ++ s     show (IOException r e) = show r ++ ": " ++ show e     show (PatternErr _)  = "Pattern violation (you shouldn't see this)"     show (AbortAssign _) = "Abort assignment (you shouldn't see this)"  instance HasRange TCErr' where-    getRange (TypeError _ cl)  = getRange $ clTrace cl+    getRange (TypeError _ cl)  = envRange $ clEnv cl     getRange (Exception r _)   = r     getRange (IOException r _) = r-    getRange (PatternErr s)    = getRange $ stTrace s-    getRange (AbortAssign s)   = getRange $ stTrace s+    getRange (PatternErr s)    = noRange+    getRange (AbortAssign s)   = noRange  instance HasRange TCErr where     getRange = getRange . errError@@ -907,13 +924,16 @@ -- * Type checking monad transformer --------------------------------------------------------------------------- -newtype TCMT m a = TCM { unTCM :: StateT TCState-			          (ReaderT TCEnv m) a-		       }-    deriving ( MonadState TCState-             , MonadReader TCEnv-             )+newtype TCMT m a = TCM { unTCM :: TCState -> TCEnv -> m (a, TCState) } +instance MonadIO m => MonadReader TCEnv (TCMT m) where+  ask = TCM $ \s e -> return (e, s)+  local f (TCM m) = TCM $ \s e -> m s (f e)++instance MonadIO m => MonadState TCState (TCMT m) where+  get   = TCM $ \s _ -> return (s, s)+  put s = TCM $ \_ _ -> return ((), s)+ type TCM = TCMT IO  class ( Applicative tcm, MonadIO tcm@@ -924,15 +944,19 @@  instance MonadError TCErr (TCMT IO) where   throwError = liftIO . throwIO-  catchError m h = TCM $ StateT $ \s -> ReaderT $ \e ->-    runReaderT (runStateT (unTCM m) s) e-    `E.catch` \err -> runReaderT (runStateT (unTCM (h err)) s) e+  catchError m h = TCM $ \s e ->+    unTCM m s e `E.catch` \err -> unTCM (h err) s e +catchError_ :: TCM a -> (TCErr -> TCM a) -> TCM a+catchError_ m h = TCM $ \s e ->+  unTCM m s e+  `E.catch` \err -> unTCM (h err) (error "catchError_") e+ mapTCMT :: (forall a. m a -> n a) -> TCMT m a -> TCMT n a-mapTCMT f = TCM . mapStateT (mapReaderT f) . unTCM+mapTCMT f (TCM m) = TCM $ \s e -> f (m s e)  pureTCM :: Monad m => (TCState -> TCEnv -> a) -> TCMT m a-pureTCM f = TCM $ StateT $ \s -> ReaderT $ \e -> return (f s e, s)+pureTCM f = TCM $ \s e -> return (f s e, s)  instance MonadIO m => MonadTCM (TCMT m) where     liftTCM = mapTCMT liftIO@@ -941,15 +965,15 @@   liftTCM = lift . liftTCM  instance MonadTrans TCMT where-    lift = TCM . lift . lift+    lift m = TCM $ \s _ -> m >>= \x -> return (x, s)  -- We want a special monad implementation of fail.+{-# SPECIALIZE instance Monad TCM #-} instance MonadIO m => Monad (TCMT m) where-    return  = TCM . return---     m >>= k = TCM $ unTCM m >>= unTCM . k-    m >>= k = TCM $ StateT $ \s -> ReaderT $ \e -> do-                (x, s') <- runReaderT (runStateT (unTCM m) s) e-                runReaderT (runStateT (unTCM (k x)) s') e+    return x = TCM $ \s _ -> return (x, s)+    m >>= k = TCM $ \s e -> do+                (x, s') <- unTCM m s e+                unTCM (k x) s' e     fail    = internalError  instance MonadIO m => Functor (TCMT m) where@@ -960,10 +984,11 @@     (<*>) = ap  instance MonadIO m => MonadIO (TCMT m) where-  liftIO m = TCM $ do r <- gets $ getRange . stTrace-                      liftIO $ wrap r $ do-                        x <- m-                        x `seq` return x+  liftIO m = TCM $ \s e ->+              do let r = envRange e+                 liftIO $ wrap r $ do+                 x <- m+                 x `seq` return (x, s)     where       wrap r m = failOnException handleException                $ E.catch m (handleIOException r)@@ -990,7 +1015,5 @@ runTCM m = (Right <$> runTCM' m) `E.catch` (return . Left)  runTCM' :: Monad m => TCMT m a -> m a-runTCM' m = flip runReaderT initEnv-          $ flip evalStateT initState-          $ unTCM m+runTCM' m = liftM fst (unTCM m initState initEnv) 
src/full/Agda/TypeChecking/Monad/Builtin.hs view
@@ -60,7 +60,13 @@     primList, primNil, primCons, primIO, primNat, primSuc, primZero,     primNatPlus, primNatMinus, primNatTimes, primNatDivSucAux, primNatModSucAux,     primNatEquality, primNatLess, primSize, primSizeSuc, primSizeInf,-    primEquality, primRefl, primLevel, primLevelZero, primLevelSuc, primLevelMax+    primInf, primSharp, primFlat,+    primEquality, primRefl,+    primLevel, primLevelZero, primLevelSuc, primLevelMax,+    -- builtins for reflection:+    primQName, primArg, primArgArg, primAgdaTerm, primAgdaTermVar,+    primAgdaTermLam, primAgdaTermDef, primAgdaTermCon, primAgdaTermPi,+    primAgdaTermSort, primAgdaTermUnsupported     :: MonadTCM tcm => tcm Term primInteger      = getBuiltin builtinInteger primFloat        = getBuiltin builtinFloat@@ -86,12 +92,26 @@ primSize         = getBuiltin builtinSize primSizeSuc      = getBuiltin builtinSizeSuc primSizeInf      = getBuiltin builtinSizeInf+primInf          = getBuiltin builtinInf+primSharp        = getBuiltin builtinSharp+primFlat         = getBuiltin builtinFlat primEquality     = getBuiltin builtinEquality primRefl         = getBuiltin builtinRefl primLevel        = getBuiltin builtinLevel primLevelZero    = getBuiltin builtinLevelZero primLevelSuc     = getBuiltin builtinLevelSuc primLevelMax     = getBuiltin builtinLevelMax+primQName        = getBuiltin builtinQName+primArg          = getBuiltin builtinArg+primArgArg       = getBuiltin builtinArgArg+primAgdaTerm         = getBuiltin builtinAgdaTerm+primAgdaTermVar      = getBuiltin builtinAgdaTermVar+primAgdaTermLam      = getBuiltin builtinAgdaTermLam+primAgdaTermDef      = getBuiltin builtinAgdaTermDef+primAgdaTermCon      = getBuiltin builtinAgdaTermCon+primAgdaTermPi       = getBuiltin builtinAgdaTermPi+primAgdaTermSort     = getBuiltin builtinAgdaTermSort+primAgdaTermUnsupported     = getBuiltin builtinAgdaTermUnsupported  builtinNat          = "NATURAL" builtinSuc          = "SUC"@@ -117,12 +137,26 @@ builtinSize         = "SIZE" builtinSizeSuc      = "SIZESUC" builtinSizeInf      = "SIZEINF"+builtinInf          = "INFINITY"+builtinSharp        = "SHARP"+builtinFlat         = "FLAT" builtinEquality     = "EQUALITY" builtinRefl         = "REFL" builtinLevelMax     = "LEVELMAX" builtinLevel        = "LEVEL" builtinLevelZero    = "LEVELZERO" builtinLevelSuc     = "LEVELSUC"+builtinQName        = "QNAME"+builtinArg          = "ARG"+builtinArgArg       = "ARGARG"+builtinAgdaTerm         = "AGDATERM"+builtinAgdaTermVar      = "AGDATERMVAR"+builtinAgdaTermLam      = "AGDATERMLAM"+builtinAgdaTermDef      = "AGDATERMDEF"+builtinAgdaTermCon      = "AGDATERMCON"+builtinAgdaTermPi       = "AGDATERMPI"+builtinAgdaTermSort     = "AGDATERMSORT"+builtinAgdaTermUnsupported = "AGDATERMUNSUPPORTED"  builtinTypes :: [String] builtinTypes =@@ -133,5 +167,7 @@     , builtinBool     , builtinNat     , builtinLevel+    , builtinQName+    , builtinAgdaTerm     ] 
src/full/Agda/TypeChecking/Monad/Closure.hs view
@@ -8,10 +8,9 @@ import Agda.TypeChecking.Monad.Trace  enterClosure :: MonadTCM tcm => Closure a -> (a -> tcm b) -> tcm b-enterClosure (Closure sig env scope trace x) k =+enterClosure (Closure sig env scope x) k =     withScope_ scope     $ withEnv env-    $ withTrace trace     $ k x  
src/full/Agda/TypeChecking/Monad/Context.hs view
@@ -58,7 +58,7 @@  -- | Go under an abstract without worrying about the type to add to the context. underAbstraction_ :: MonadTCM tcm => Abs a -> (a -> tcm b) -> tcm b-underAbstraction_ = underAbstraction (Arg NotHidden $ sort Prop)+underAbstraction_ = underAbstraction (Arg NotHidden Relevant $ sort Prop)  -- | Add a telescope to the context. addCtxTel :: MonadTCM tcm => Telescope -> tcm a -> tcm a@@ -73,7 +73,7 @@ getContextArgs :: MonadTCM tcm => tcm Args getContextArgs = do   ctx <- getContext-  return $ reverse $ [ Arg h $ Var i [] | (Arg h _, i) <- zip ctx [0..] ]+  return $ reverse $ [ Arg h r $ Var i [] | (Arg h r _, i) <- zip ctx [0..] ]  getContextTerms :: MonadTCM tcm => tcm [Term] getContextTerms = map unArg <$> getContextArgs@@ -82,7 +82,7 @@ getContextTelescope :: MonadTCM tcm => tcm Telescope getContextTelescope = foldr extTel EmptyTel . reverse <$> getContext   where-    extTel (Arg h (x, t)) = ExtendTel (Arg h t) . Abs (show x)+    extTel (Arg h r (x, t)) = ExtendTel (Arg h r t) . Abs (show x)  -- | add a bunch of variables with the same type to the context addCtxs :: MonadTCM tcm => [Name] -> Arg Type -> tcm a -> tcm a@@ -95,17 +95,29 @@  -- | Add a let bound variable addLetBinding :: MonadTCM tcm => Name -> Term -> Type -> tcm a -> tcm a-addLetBinding x v t ret = do+addLetBinding x v t0 ret = do+    let t = defaultArg t0  -- Andreas, 2010-09-06: for now, no irrelevant let     vt <- makeOpen (v, t)     flip local ret $ \e -> e { envLetBindings = Map.insert x vt $ envLetBindings e } +-- | Wake up irrelevant variables and make them relevant.  For instance,+--   in an irrelevant function argument otherwise irrelevant variables+--   may be used, so they are awoken before type checking the argument.+wakeIrrelevantVars :: MonadTCM tcm => tcm a -> tcm a+wakeIrrelevantVars = local $ \ e -> e { envContext = map wakeVar (envContext e) }+  where wakeVar ce = ce { ctxEntry = makeRelevant (ctxEntry ce) }++applyRelevanceToContext :: MonadTCM tcm => Relevance -> tcm a -> tcm a+applyRelevanceToContext Irrelevant cont = wakeIrrelevantVars cont+applyRelevanceToContext _          cont = cont+ -- | get type of bound variable (i.e. deBruijn index) -- typeOfBV' :: MonadTCM tcm => Nat -> tcm (Arg Type) typeOfBV' n =     do	ctx <- getContext-	Arg h (_,t) <- ctx !!! n-	return $ Arg h $ raise (n + 1) t+	Arg h r (_,t) <- ctx !!! n+	return $ Arg h r $ raise (n + 1) t  typeOfBV :: MonadTCM tcm => Nat -> tcm Type typeOfBV i = unArg <$> typeOfBV' i@@ -113,7 +125,7 @@ nameOfBV :: MonadTCM tcm => Nat -> tcm Name nameOfBV n =     do	ctx <- getContext-	Arg _ (x,_) <- ctx !!! n+	Arg _ _ (x,_) <- ctx !!! n 	return x  -- | TODO: move(?)@@ -128,14 +140,14 @@ -- | 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.-getVarInfo :: MonadTCM tcm => Name -> tcm (Term, Type)+getVarInfo :: MonadTCM tcm => Name -> tcm (Term, Arg Type) getVarInfo x =     do	ctx <- getContext 	def <- asks envLetBindings 	case findIndex ((==x) . fst . unArg) ctx of-	    Just n  ->-		do  n <- return $ fromIntegral n-                    t <- typeOfBV n+	    Just n0 ->+		do  let n = fromIntegral n0+                    t <- typeOfBV' n 		    return (Var n [], t) 	    _	    -> 		case Map.lookup x def of
src/full/Agda/TypeChecking/Monad/Debug.hs view
src/full/Agda/TypeChecking/Monad/MetaVars.hs view
@@ -22,6 +22,7 @@  import Agda.Utils.Monad import Agda.Utils.Fresh+import Agda.Utils.Permutation  #include "../../undefined.h" import Agda.Utils.Impossible@@ -52,6 +53,14 @@     HasType{} -> False     IsSort{}  -> True +isInstantiatedMeta :: MonadTCM tcm => MetaId -> tcm Bool+isInstantiatedMeta m = do+  mv <- lookupMeta m+  return $ case mvInstantiation mv of+    InstV{} -> True+    InstS{} -> True+    _       -> False+ createMetaInfo :: MonadTCM tcm => tcm MetaInfo createMetaInfo =     do  r <- getCurrentRange@@ -98,14 +107,14 @@         mvJudgement <$> lookupMeta mi  -- | Generate new meta variable.-newMeta :: MonadTCM tcm => MetaInfo -> MetaPriority -> Judgement Type a -> tcm MetaId+newMeta :: MonadTCM tcm => MetaInfo -> MetaPriority -> Permutation -> Judgement Type a -> tcm MetaId newMeta = newMeta' Open -newMeta' :: MonadTCM tcm => MetaInstantiation -> MetaInfo -> MetaPriority ->+newMeta' :: MonadTCM tcm => MetaInstantiation -> MetaInfo -> MetaPriority -> Permutation ->             Judgement Type a -> tcm MetaId-newMeta' inst mi p j = do+newMeta' inst mi p perm j = do   x <- fresh-  let mv = MetaVar mi p (fmap (const x) j) inst Set.empty+  let mv = MetaVar mi p perm (fmap (const x) j) inst Set.empty   modify $ \st -> st { stMetaStore = Map.insert x mv $ stMetaStore st }   return x @@ -125,12 +134,12 @@        return $ getMetaScope mv  withMetaInfo :: MonadTCM tcm => MetaInfo -> tcm a -> tcm a-withMetaInfo mI m = enterClosure mI $ \_ -> m+withMetaInfo mI m = enterClosure mI $ \r -> setCurrentRange r m  getInstantiatedMetas :: MonadTCM tcm => tcm [MetaId] getInstantiatedMetas = do     store <- getMetaStore-    return [ i | (i, MetaVar _ _ _ mi _) <- Map.assocs store, isInst mi ]+    return [ i | (i, MetaVar{ mvInstantiation = mi }) <- Map.assocs store, isInst mi ]     where 	isInst Open                             = False 	isInst (BlockedConst _)                 = False@@ -141,7 +150,7 @@ getOpenMetas :: MonadTCM tcm => tcm [MetaId] getOpenMetas = do     store <- getMetaStore-    return [ i | (i, MetaVar _ _ _ mi _) <- Map.assocs store, isOpen mi ]+    return [ i | (i, MetaVar{ mvInstantiation = mi }) <- Map.assocs store, isOpen mi ]     where 	isOpen Open                             = True 	isOpen (BlockedConst _)                 = True
src/full/Agda/TypeChecking/Monad/Options.hs view
@@ -10,9 +10,11 @@ import System.Directory import System.FilePath +import Agda.Syntax.Concrete import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.State+import Agda.Interaction.FindFile import Agda.Interaction.Options-import Agda.Syntax.Abstract import Agda.Utils.FileName import Agda.Utils.Monad import Agda.Utils.List@@ -22,60 +24,60 @@ #include "../../undefined.h" import Agda.Utils.Impossible --- | Does the operation apply to the persistent options or only to the--- pragma options? In the former case the pragma options are also--- updated.+-- | Sets the pragma options. -data Target = PersistentOptions | PragmaOptions+setPragmaOptions :: MonadTCM tcm => PragmaOptions -> tcm ()+setPragmaOptions opts = do+  clo <- commandLineOptions+  case checkOpts (clo { optPragmaOptions = opts }) of+    Left err   -> __IMPOSSIBLE__+    Right opts ->+      modify $ \s -> s { stPragmaOptions = optPragmaOptions opts } --- | Sets the command line options.+-- | Sets the command line options (both persistent and pragma options+-- are updated). ----- Ensures that the 'optInputFile' field contains an absolute path.+-- Relative include directories are made absolute with respect to the+-- current working directory. If the include directories have changed,+-- then the state is reset. ----- An empty list of include directories is interpreted as @["."]@.+-- An empty list of relative include directories (@'Left' []@) is+-- interpreted as @["."]@. -setCommandLineOptions-  :: MonadTCM tcm-  => Target-  -> CommandLineOptions-  -> tcm ()-setCommandLineOptions target opts =+setCommandLineOptions :: MonadTCM tcm => CommandLineOptions -> tcm ()+setCommandLineOptions opts =   case checkOpts opts of     Left err   -> __IMPOSSIBLE__     Right opts -> do-      opts <- case optInputFile opts of-        Nothing -> return opts-        Just f  -> do-          -- canonicalizePath seems to return absolute paths.-          f <- liftIO $ canonicalizePath f-          return (opts { optInputFile = Just f })-      let newOpts = opts { optIncludeDirs =-              case optIncludeDirs opts of-                [] -> ["."]-                is -> is-            }-      case target of-        PersistentOptions ->-          modify $ \s -> s { stPersistentOptions = newOpts-                           , stPragmaOptions     = newOpts-                           }-        PragmaOptions ->-          modify $ \s -> s { stPragmaOptions     = newOpts-                           }+      incs <- case optIncludeDirs opts of+        Right is -> return is+        Left  is -> do+          setIncludeDirs is CurrentDir+          getIncludeDirs+      modify $ \s ->+        s { stPersistentOptions = opts { optIncludeDirs = Right incs }+          , stPragmaOptions     = optPragmaOptions opts+          } +-- | Returns the pragma options which are currently in effect.++pragmaOptions :: MonadTCM tcm => tcm PragmaOptions+pragmaOptions = liftTCM $ gets stPragmaOptions++-- | Returns the command line options which are currently in effect.+ commandLineOptions :: MonadTCM tcm => tcm CommandLineOptions-commandLineOptions = liftTCM $ gets stPragmaOptions+commandLineOptions = liftTCM $ do+  p  <- gets stPragmaOptions+  cl <- gets stPersistentOptions+  return $ cl { optPragmaOptions = p } -setOptionsFromPragma :: MonadTCM tcm => Pragma -> tcm ()-setOptionsFromPragma (OptionsPragma xs) = do+setOptionsFromPragma :: MonadTCM tcm => OptionsPragma -> tcm ()+setOptionsFromPragma ps = do     opts <- commandLineOptions-    case parsePragmaOptions xs opts of+    case parsePragmaOptions ps opts of 	Left err    -> typeError $ GenericError err-	Right opts' -> setCommandLineOptions PragmaOptions opts'-setOptionsFromPragma _ = return ()--setOptionsFromPragmas :: MonadTCM tcm => [Pragma] -> tcm ()-setOptionsFromPragmas = foldr (>>) (return ()) . map setOptionsFromPragma+	Right opts' -> setPragmaOptions opts'  -- | Disable display forms. enableDisplayForms :: MonadTCM tcm => tcm a -> tcm a@@ -91,6 +93,17 @@ displayFormsEnabled :: MonadTCM tcm => tcm Bool displayFormsEnabled = asks envDisplayFormsEnabled +-- | Don't eta contract implicit+dontEtaContractImplicit :: MonadTCM tcm => tcm a -> tcm a+dontEtaContractImplicit = local $ \e -> e { envEtaContractImplicit = False }++-- | Do eta contract implicit+doEtaContractImplicit :: MonadTCM tcm => tcm a -> tcm a+doEtaContractImplicit = local $ \e -> e { envEtaContractImplicit = True }++shouldEtaContractImplicit :: MonadTCM tcm => tcm Bool+shouldEtaContractImplicit = asks envEtaContractImplicit+ -- | Don't reify interaction points dontReifyInteractionPoints :: MonadTCM tcm => tcm a -> tcm a dontReifyInteractionPoints =@@ -100,84 +113,128 @@ shouldReifyInteractionPoints = asks envReifyInteractionPoints  -- | Gets the include directories.+--+-- Precondition: 'optIncludeDirs' must be @'Right' something@.  getIncludeDirs :: MonadTCM tcm => tcm [AbsolutePath]-getIncludeDirs =-  map mkAbsolute . optIncludeDirs <$> commandLineOptions+getIncludeDirs = do+  incs <- optIncludeDirs <$> commandLineOptions+  case incs of+    Left  _    -> __IMPOSSIBLE__+    Right incs -> return incs --- | Makes the include directories absolute.+-- | Which directory should form the base of relative include paths?++data RelativeTo+  = ProjectRoot AbsolutePath+    -- ^ The root directory of the \"project\" containing the given+    -- file. The file needs to be syntactically correct, with a module+    -- name matching the file name.+  | CurrentDir+    -- ^ The current working directory.++-- | Makes the given directories absolute and stores them as include+-- directories. ----- Relative directories are made absolute with respect to the given--- path.+-- If the include directories have changed, then the state is reset.+--+-- An empty list is interpreted as @["."]@. -makeIncludeDirsAbsolute :: MonadTCM tcm => AbsolutePath -> tcm ()-makeIncludeDirsAbsolute root = do+setIncludeDirs+  :: MonadTCM tcm+  => [FilePath]+  -- ^ New include directories.+  -> RelativeTo+  -- ^ How should relative paths be interpreted?+  -> tcm ()+setIncludeDirs incs relativeTo = do   opts <- commandLineOptions-  setCommandLineOptions PersistentOptions $-    opts { optIncludeDirs =-             map (filePath root </>) $ optIncludeDirs opts }+  let oldIncs = optIncludeDirs opts +  (root, check) <- case relativeTo of+    CurrentDir -> do+      root <- liftIO (absolute =<< getCurrentDirectory)+      return (root, return ())+    ProjectRoot f -> do+      m <- liftTCM $ moduleName' f+      return (projectRoot f m, liftTCM $ checkModuleName m f)++  modify $ \s -> s { stPersistentOptions =+    (stPersistentOptions s) { optIncludeDirs =+      Right $ map (mkAbsolute . (filePath root </>)) $+        case incs of+          [] -> ["."]+          _  -> incs } }++  incs <- getIncludeDirs+  case oldIncs of+    Right incs' | incs' /= incs -> resetState+    _                           -> return ()++  check+ setInputFile :: MonadTCM tcm => FilePath -> tcm () setInputFile file =     do	opts <- commandLineOptions-	setCommandLineOptions PersistentOptions $+	setCommandLineOptions $           opts { optInputFile = Just file }  -- | Should only be run if 'hasInputFile'.-getInputFile :: MonadTCM tcm => tcm FilePath+getInputFile :: MonadTCM tcm => tcm AbsolutePath getInputFile =     do	mf <- optInputFile <$> commandLineOptions 	case mf of-	    Just file	-> return file-	    Nothing	-> __IMPOSSIBLE__+	    Just file -> liftIO $ absolute file+	    Nothing   -> __IMPOSSIBLE__  hasInputFile :: MonadTCM tcm => tcm Bool hasInputFile = isJust <$> optInputFile <$> commandLineOptions  proofIrrelevance :: MonadTCM tcm => tcm Bool-proofIrrelevance = optProofIrrelevance <$> commandLineOptions+proofIrrelevance = optProofIrrelevance <$> pragmaOptions  hasUniversePolymorphism :: MonadTCM tcm => tcm Bool-hasUniversePolymorphism = optUniversePolymorphism <$> commandLineOptions+hasUniversePolymorphism = optUniversePolymorphism <$> pragmaOptions  showImplicitArguments :: MonadTCM tcm => tcm Bool-showImplicitArguments = optShowImplicit <$> commandLineOptions+showImplicitArguments = optShowImplicit <$> pragmaOptions  setShowImplicitArguments :: MonadTCM tcm => Bool -> tcm a -> tcm a setShowImplicitArguments showImp ret = do-  opts <- commandLineOptions+  opts <- pragmaOptions   let imp = optShowImplicit opts-  setCommandLineOptions PersistentOptions $-    opts { optShowImplicit = showImp }+  setPragmaOptions $ opts { optShowImplicit = showImp }   x <- ret-  opts <- commandLineOptions-  setCommandLineOptions PersistentOptions $-    opts { optShowImplicit = imp }+  opts <- pragmaOptions+  setPragmaOptions $ opts { optShowImplicit = imp }   return x  ignoreInterfaces :: MonadTCM tcm => tcm Bool ignoreInterfaces = optIgnoreInterfaces <$> commandLineOptions  positivityCheckEnabled :: MonadTCM tcm => tcm Bool-positivityCheckEnabled = not . optDisablePositivity <$> commandLineOptions+positivityCheckEnabled = not . optDisablePositivity <$> pragmaOptions  typeInType :: MonadTCM tcm => tcm Bool-typeInType = not . optUniverseCheck <$> commandLineOptions+typeInType = not . optUniverseCheck <$> pragmaOptions  getVerbosity :: MonadTCM tcm => tcm (Trie String Int)-getVerbosity = optVerbose <$> commandLineOptions+getVerbosity = optVerbose <$> pragmaOptions  type VerboseKey = String --- | Precondition: The level must be non-negative.-verboseS :: MonadTCM tcm => VerboseKey -> Int -> tcm () -> tcm ()-verboseS k n action | n < 0     = __IMPOSSIBLE__-                    | otherwise = do+hasVerbosity :: MonadTCM tcm => VerboseKey -> Int -> tcm Bool+hasVerbosity k n | n < 0     = __IMPOSSIBLE__+                 | otherwise = do     t <- getVerbosity     let ks = wordsBy (`elem` ".:") k 	m  = maximum $ 0 : Trie.lookupPath ks t-    when (n <= m) action+    return (n <= m) +-- | Precondition: The level must be non-negative.+verboseS :: MonadTCM tcm => VerboseKey -> Int -> tcm () -> tcm ()+verboseS k n action = whenM (hasVerbosity k n) action+ reportS :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm () reportS k n s = verboseS k n $ liftIO $ LocIO.putStr s @@ -186,4 +243,14 @@  reportSDoc :: MonadTCM tcm => VerboseKey -> Int -> tcm Doc -> tcm () reportSDoc k n d = verboseS k n $ liftIO . LocIO.print =<< d++verboseBracket :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm a -> tcm a+verboseBracket k n s m = do+  v <- hasVerbosity k n+  if not v then m+           else do+    liftIO $ LocIO.putStrLn $ "{ " ++ s+    x <- m+    liftIO $ LocIO.putStrLn "}"+    return x 
+ src/full/Agda/TypeChecking/Monad/Options.hs-boot view
@@ -0,0 +1,6 @@+module Agda.TypeChecking.Monad.Options where++import Agda.TypeChecking.Monad.Base+import Agda.Utils.FileName++getIncludeDirs :: MonadTCM tcm => tcm [AbsolutePath]
src/full/Agda/TypeChecking/Monad/Signature.hs view
@@ -23,6 +23,7 @@ import Agda.TypeChecking.Monad.Mutual import Agda.TypeChecking.Monad.Open import Agda.TypeChecking.Substitute+import Agda.TypeChecking.CompiledClause import {-# SOURCE #-} Agda.TypeChecking.Polarity  import Agda.Utils.Monad@@ -62,20 +63,22 @@ -- | Add a constant to the signature. Lifts the definition to top level. addConstant :: MonadTCM tcm => QName -> Definition -> tcm () addConstant q d = liftTCM $ do+  reportSLn "tc.signature" 20 $ "adding constant " ++ show q ++ " to signature"   tel <- getContextTelescope   let tel' = killRange $ case theDef d of 	      Constructor{} -> hideTel tel 	      _		    -> tel+  let d' = abstract tel' $ d { defName = q }+  reportSLn "tc.signature" 30 $ "lambda-lifted definition = " ++ show d'   modifySignature $ \sig -> sig-    { sigDefinitions = Map.insertWith (+++) q (abstract tel' d') $ sigDefinitions sig }+    { sigDefinitions = Map.insertWith (+++) q d' $ sigDefinitions sig }   i <- currentMutualBlock   setMutualBlock i q   where-    d' = d { defName = q }     new +++ old = new { defDisplay = defDisplay new ++ defDisplay old }      hideTel  EmptyTel		      = EmptyTel-    hideTel (ExtendTel (Arg _ t) tel) = ExtendTel (Arg Hidden t) $ hideTel <$> tel+    hideTel (ExtendTel (Arg _ r t) tel) = ExtendTel (Arg Hidden r t) $ hideTel <$> tel  addHaskellCode :: MonadTCM tcm => QName -> HaskellType -> HaskellCode -> tcm () addHaskellCode q hsTy hsDef =@@ -128,7 +131,7 @@   add args x x []   where     add args top x ps = do-      cs <- defClauses <$> getConstInfo x+      cs <- map originalClause . defClauses <$> getConstInfo x       case cs of 	[ Clause{ clauseBody = b } ] 	  | Just (m, Def y vs) <- strip b@@ -148,7 +151,7 @@ 			| m > length args -> "too many args" 			| otherwise	      -> "args=" ++ unwords (map var args) ++ " vs=" ++ unwords (map var vs) 			  where-			    var (Arg h x) = hid h $ case x of+			    var (Arg h r x) = hid h $ case x of 			      Var i []	-> show i 			      MetaV _ _	-> "?" 			      _		-> "_"@@ -170,11 +173,16 @@ applySection new ptel old ts rd rm = liftTCM $ do   sig  <- getSignature   isig <- getImportedSignature-  let ss = Map.toList $ Map.filterKeys partOfOldM $ sigSections sig `Map.union` sigSections isig-      ds = Map.toList $ Map.filterKeys partOfOldD $ sigDefinitions sig `Map.union` sigDefinitions isig+  let ss = getOld partOfOldM sigSections    [sig, isig]+      ds = getOld partOfOldD sigDefinitions [sig, isig]+  reportSLn "tc.mod.apply" 80 $ "sections:    " ++ show ss ++ "\n" +++                                "definitions: " ++ show ds   mapM_ (copyDef ts) ds   mapM_ (copySec ts) ss   where+    getOld partOfOld fromSig sigs =+      Map.toList $ Map.filterKeys partOfOld $ Map.unions $ map fromSig sigs+     partOfOldM x = x `isSubModuleOf` old     partOfOldD x = x `isInModule`    old @@ -186,7 +194,7 @@ 			      -- we won't need it 	Just y	-> do 	  addConstant y (nd y)-          computePolarity y+          computePolarity y  -- AA: Polarity.sizePolarity needs also constructor names 	  -- Set display form for the old name if it's not a constructor. 	  unless (isCon || size ptel > 0) $ do 	    addDisplayForms y@@ -209,7 +217,8 @@                          , recConType = apply t ts, recTel = apply tel ts                          } 		_ ->-                  Function { funClauses        = [cl]+                  Function { funClauses        = [cl2]+                           , funCompiled       = cc                            , funDelayed        = NotDelayed                            , funInv            = NotInjective                            , funPolarity       = []@@ -222,12 +231,15 @@                     , clausePats  = []                     , clauseBody  = Body $ Def x ts                     }+        cl2 = Clauses Nothing cl+        cc  = compileClauses [cl2]      copySec :: Args -> (ModuleName, Section) -> TCM ()     copySec ts (x, sec) = case Map.lookup x rm of 	Nothing -> return ()  -- if it's not in the renaming it was private and 			      -- we won't need it-	Just y  -> addCtxTel (apply tel ts) $ addSection y 0+	Just y  ->+          addCtxTel (apply tel ts) $ addSection y 0       where 	tel = secTelescope sec @@ -290,19 +302,32 @@ getConstInfo q = liftTCM $ join $ pureTCM $ \st env ->   let defs  = sigDefinitions $ stSignature st       idefs = sigDefinitions $ stImports st-      ab    = treatAbstractly' q env       smash = (++) `on` maybe [] (:[])   in case smash (Map.lookup q defs) (Map.lookup q idefs) of-      []  -> fail $ "Unbound name: " ++ show q-      [d] -> mkAbs ab d+      []  -> fail $ "Unbound name: " ++ show q ++ " " ++ showQNameId q+      [d] -> mkAbs env d       ds  -> fail $ "Ambiguous name: " ++ show q   where-    mkAbs True d =-      case makeAbstract d of-	Just d	-> return d-	Nothing	-> typeError $ NotInScope [qnameToConcrete q]-	  -- the above can happen since the scope checker is a bit sloppy with 'abstract'-    mkAbs False d = return d+    mkAbs env d+      | treatAbstractly' q' env =+        case makeAbstract d of+          Just d	-> return d+          Nothing	-> typeError $ NotInScope [qnameToConcrete q]+            -- the above can happen since the scope checker is a bit sloppy with 'abstract'+      | otherwise = return d+      where+        q' = case theDef d of+          -- Hack to make abstract constructors work properly. The constructors+          -- live in a module with the same name as the datatype, but for 'abstract'+          -- purposes they're considered to be in the same module as the datatype.+          Constructor{} -> dropLastModule q+          _             -> q++        dropLastModule q@QName{ qnameModule = m } =+          q{ qnameModule = mnameFromList $ init' $ mnameToList m }++        init' [] = {-'-} __IMPOSSIBLE__+        init' xs = init xs  -- | Look up the polarity of a definition. getPolarity :: MonadTCM tcm => QName -> tcm [Polarity]
src/full/Agda/TypeChecking/Monad/SizedTypes.hs view
@@ -15,7 +15,7 @@ -- | Check if a type is the 'primSize' type. The argument should be 'reduce'd. isSizeType :: MonadTCM tcm => Type -> tcm Bool isSizeType (El _ v) = liftTCM $-  ifM (not . optSizedTypes <$> commandLineOptions) (return False) $+  ifM (not . optSizedTypes <$> pragmaOptions) (return False) $   case v of     Def x [] -> do       Def size [] <- primSize@@ -28,7 +28,7 @@  sizeSuc :: MonadTCM tcm => tcm (Maybe QName) sizeSuc = liftTCM $-  ifM (not . optSizedTypes <$> commandLineOptions) (return Nothing) $ do+  ifM (not . optSizedTypes <$> pragmaOptions) (return Nothing) $ do     Def x [] <- primSizeSuc     return $ Just x   `catchError` \_ -> return Nothing@@ -50,6 +50,6 @@ -- | Turn a size view into a term. unSizeView :: MonadTCM tcm => SizeView -> tcm Term unSizeView SizeInf       = primSizeInf-unSizeView (SizeSuc v)   = flip apply [Arg NotHidden v] <$> primSizeSuc+unSizeView (SizeSuc v)   = flip apply [Arg NotHidden Relevant v] <$> primSizeSuc unSizeView (OtherSize v) = return v 
src/full/Agda/TypeChecking/Monad/State.hs view
@@ -12,7 +12,6 @@ import Agda.Syntax.Abstract.Name  import Agda.TypeChecking.Monad.Base-import Agda.TypeChecking.Monad.Options  import Agda.Utils.Hash @@ -22,8 +21,7 @@ resetState :: MonadTCM tcm => tcm () resetState = liftTCM $ do     opts <- stPersistentOptions <$> get-    put initState-    setCommandLineOptions PersistentOptions opts+    put $ initState { stPersistentOptions = opts }  -- | Set the current scope. setScope :: MonadTCM tcm => ScopeInfo -> tcm ()
src/full/Agda/TypeChecking/Monad/Trace.hs view
@@ -1,65 +1,52 @@  module Agda.TypeChecking.Monad.Trace where +import Control.Monad.Reader import Control.Monad.State  import Agda.Syntax.Position import Agda.TypeChecking.Monad.Base import Agda.Utils.Monad-import Agda.Utils.Trace  --------------------------------------------------------------------------- -- * Trace --------------------------------------------------------------------------- +interestingCall :: Closure Call -> Bool+interestingCall cl = case clValue cl of+    InferVar _ _	      -> False+    InferDef _ _ _	      -> False+    CheckArguments _ [] _ _ _ -> False+    SetRange _ _	      -> False+    _			      -> True+ -- | Record a function call in the trace.-traceCall :: MonadTCM tcm => (Maybe r -> Call) -> tcm r -> tcm r+traceCall :: MonadTCM tcm => (Maybe r -> Call) -> tcm a -> tcm a traceCall mkCall m = do-    cl <- buildClosure $ mkCall Nothing-    onTrace $ newCall cl-    r <- m-    onTrace $ updateCall $ cl { clValue = mkCall (Just r) }-    return r+  let call = mkCall Nothing+      r | getRange call /= noRange = const $ getRange call+        | otherwise                = id+  cl <- buildClosure call+  let trace | interestingCall cl = local $ \e -> e { envRange = r (envRange e)+                                                   , envCall  = Just cl }+            | otherwise          = local $ \e -> e { envRange = r (envRange e) }+  trace m  traceCall_ :: MonadTCM tcm => (Maybe () -> Call) -> tcm r -> tcm r traceCall_ mkCall = traceCall (mkCall . fmap (const ()))  traceCallCPS :: MonadTCM tcm => (Maybe r -> Call) -> (r -> tcm a) -> ((r -> tcm a) -> tcm b) -> tcm b-traceCallCPS mkCall ret cc = do-    cl <- buildClosure $ mkCall Nothing-    onTrace $ newCall cl-    cc $ \r -> do-	onTrace $ updateCall $ cl { clValue = mkCall (Just r) }-	ret r+traceCallCPS mkCall ret cc = traceCall mkCall (cc ret)  traceCallCPS_ :: MonadTCM tcm => (Maybe () -> Call) -> tcm a -> (tcm a -> tcm b) -> tcm b traceCallCPS_ mkCall ret cc =     traceCallCPS mkCall (const ret) (\k -> cc $ k ()) -getTrace :: MonadTCM tcm => tcm CallTrace-getTrace = liftTCM $ gets stTrace--setTrace :: MonadTCM tcm => CallTrace -> tcm ()-setTrace tr = liftTCM $ modify $ \s -> s { stTrace = tr }- getCurrentRange :: MonadTCM tcm => tcm Range-getCurrentRange = getRange <$> getTrace+getCurrentRange = envRange <$> ask  setCurrentRange :: MonadTCM tcm => Range -> tcm a -> tcm a setCurrentRange r   | r == noRange = id   | otherwise    = traceCall (SetRange r)--onTrace :: MonadTCM tcm => (CallTrace -> CallTrace) -> tcm ()-onTrace f = do-    tr <- getTrace-    setTrace (f tr)--withTrace :: MonadTCM tcm => CallTrace -> tcm a -> tcm a-withTrace tr m = do-    tr0 <- getTrace-    setTrace tr-    x <- m-    setTrace tr0-    return x 
src/full/Agda/TypeChecking/Patterns/Match.hs view
@@ -14,6 +14,7 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Primitive+import Agda.TypeChecking.Pretty  import Agda.Utils.Monad @@ -41,24 +42,39 @@     DontKnow m `mappend` _		  = DontKnow m  matchPatterns :: MonadTCM tcm => [Arg Pattern] -> [Arg Term] -> tcm (Match, [Arg Term])-matchPatterns ps vs =-    do	(ms,vs) <- unzip <$> zipWithM' matchPattern ps vs-	return (mconcat ms, vs)+matchPatterns ps vs = do+    reportSDoc "tc.match" 50 $+      vcat [ text "matchPatterns"+           , nest 2 $ text "ps =" <+> fsep (punctuate comma $ map (text . show) ps)+           , nest 2 $ text "vs =" <+> fsep (punctuate comma $ map prettyTCM vs)+           ] +    (ms,vs) <- unzip <$> zipWithM' matchPattern ps vs+    return (mconcat ms, vs)+ matchPattern :: MonadTCM tcm => Arg Pattern -> Arg Term -> tcm (Match, Arg Term)-matchPattern (Arg h' (VarP _))	  arg@(Arg _ v) = return (Yes [v], arg)-matchPattern (Arg _  (DotP _))    arg@(Arg _ v) = return (Yes [v], arg)-matchPattern (Arg h' (LitP l))	  arg@(Arg h v) = do+matchPattern (Arg h' _  (VarP _)) arg@(Arg _ _ v) = return (Yes [v], arg)+matchPattern (Arg _  _  (DotP _)) arg@(Arg _ _ v) = return (Yes [v], arg)+matchPattern (Arg h' r' (LitP l)) arg@(Arg h r v) = do     w <- reduceB v     let v = ignoreBlocking w     case w of 	NotBlocked (Lit l')-	    | l == l'          -> return (Yes [], Arg h v)-	    | otherwise        -> return (No, Arg h v)-	NotBlocked (MetaV x _) -> return (DontKnow $ Just x, Arg h v)-	Blocked x _            -> return (DontKnow $ Just x, Arg h v)-	_                      -> return (DontKnow Nothing, Arg h v)-matchPattern (Arg h' (ConP c ps))     (Arg h v) =+	    | l == l'          -> return (Yes [], Arg h r v)+	    | otherwise        -> return (No, Arg h r v)+	NotBlocked (MetaV x _) -> return (DontKnow $ Just x, Arg h r v)+	Blocked x _            -> return (DontKnow $ Just x, Arg h r v)+	_                      -> return (DontKnow Nothing, Arg h r v)++matchPattern (Arg h' r' (ConP c _ ps))     (Arg h Irrelevant v) = do+          -- Andreas, 2010-09-07 matching a record constructor against+          -- something irrelevant will just continue matching against+          -- irrelevant stuff+		(m, vs) <- matchPatterns ps $ +                  repeat $ Arg NotHidden Irrelevant $ Sort Prop+		return (m, Arg h Irrelevant $ Con c vs)++matchPattern (Arg h' r' (ConP c _ ps))     (Arg h r v) =     do	w <- traverse constructorForm =<< reduceB v         -- Unfold delayed (corecursive) definitions one step. This is         -- only necessary if c is a coinductive constructor, but@@ -75,12 +91,20 @@                _ -> return w         let v = ignoreBlocking w 	case w of+          -- Andreas, 2010-09-07 matching a record constructor against+          -- something irrelevant will just continue matching against+          -- irrelevant stuff+          -- NotBlocked (Sort Prop)+          _  | r == Irrelevant -> do+		(m, vs) <- matchPatterns ps $ +                  repeat $ Arg NotHidden Irrelevant $ Sort Prop+		return (m, Arg h r $ Con c vs) 	  NotBlocked (Con c' vs) 	    | c == c'             -> do 		(m, vs) <- matchPatterns ps vs-		return (m, Arg h $ Con c' vs)-	    | otherwise           -> return (No, Arg h v)-	  NotBlocked (MetaV x vs) -> return (DontKnow $ Just x, Arg h v)-	  Blocked x _             -> return (DontKnow $ Just x, Arg h v)-          _                       -> return (DontKnow Nothing, Arg h v)+		return (m, Arg h r $ Con c' vs)+	    | otherwise           -> return (No, Arg h r v)+	  NotBlocked (MetaV x vs) -> return (DontKnow $ Just x, Arg h r v)+	  Blocked x _             -> return (DontKnow $ Just x, Arg h r v)+          _                       -> return (DontKnow Nothing, Arg h r v) 
src/full/Agda/TypeChecking/Polarity.hs view
@@ -11,6 +11,7 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.Positivity import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope import Agda.TypeChecking.Reduce import Agda.TypeChecking.Free import Agda.TypeChecking.Monad.Builtin@@ -26,7 +27,7 @@   def <- theDef <$> getConstInfo x   case def of     Axiom{}                                 -> return 0-    Function{ funClauses = c : _ }          -> return $ genericLength (clausePats c)+    Function{ funClauses = c : _ }          -> return $ genericLength (clausePats $ translatedClause c)     Function{ funClauses = [] }             -> return 0     Datatype{ dataPars = np, dataIxs = ni } -> return np     Record{ recPars = n }                   -> return n@@ -59,24 +60,24 @@ -- | Hack for polarity of size indices. sizePolarity :: QName -> TCM [Polarity] sizePolarity d =-  ifM (not . optSizedTypes <$> commandLineOptions) (return []) $ do+  ifM (not . optSizedTypes <$> pragmaOptions) (return []) $ do   def <- getConstInfo d   case theDef def of     Datatype{ dataPars = np, dataCons = cons } -> do-      let TelV tel _      = telView $ defType def+      let TelV tel _      = telView' $ defType def           (parTel, ixTel) = genericSplitAt np $ telToList tel       case ixTel of-        []                -> return []  -- No size index-        Arg _ (_, a) : _  -> ifM (not <$> isSizeType a) (return []) $ do+        []                 -> return []  -- No size index+        Arg _ _ (_, a) : _ -> ifM (not <$> isSizeType a) (return []) $ do           let check c = do-                t <- normalise =<< defType <$> getConstInfo c+                t <- defType <$> getConstInfo c                 addCtxTel (telFromList parTel) $ do-                  let pars = reverse [ Arg NotHidden $ Var i [] | i <- [0..np - 1] ]-                      TelV conTel target = telView $ t `piApply` pars+                  let pars = reverse [ defaultArg $ Var i [] | i <- [0..np - 1] ]+                  TelV conTel target <- telView =<< (t `piApplyM` pars)                   case conTel of                     EmptyTel  -> return False  -- no size argument-                    ExtendTel arg@(Arg _ a) tel ->-                      ifM (not <$> isSizeType a) (return False) $ do -- also no size argument+                    ExtendTel arg  tel ->+                      ifM (not <$> isSizeType (unArg arg)) (return False) $ do -- also no size argument                         -- First constructor argument has type Size                          -- check only positive occurences in tel@@ -104,7 +105,7 @@     SizeSuc (Var j []) -> return $ and [ excl, i == j ]     _                  -> return False   where-    (pars, Arg _ ix : ixs) = genericSplitAt np args+    (pars, Arg _ _ ix : ixs) = genericSplitAt np args checkSizeIndex _ _ _ = __IMPOSSIBLE__  (/\) :: Polarity -> Polarity -> Polarity@@ -161,4 +162,5 @@     Fun a b    -> (++) <$> (map neg <$> polarities i a) <*> polarities i b     Sort _     -> return []     MetaV _ ts -> map (const Invariant) <$> polarities i ts+    DontCare   -> return [] 
src/full/Agda/TypeChecking/Positivity.hs view
@@ -66,15 +66,16 @@       def <- theDef <$> getConstInfo q       return $ case def of         Datatype{dataClause = Nothing} -> True+        Record  {recClause  = Nothing} -> True         _ -> False      getArity q = do       def <- theDef <$> getConstInfo q       return $ case def of-        Function{ funClauses = Clause{ clausePats = ps } : _ } -> size ps-        Datatype{ dataPars = n }                     -> n-        Record{ recPars = n }                        -> n-        _                                            -> 0+        Function{ funClauses = c : _ } -> size $ clausePats $ translatedClause c+        Datatype{ dataPars = n }       -> n+        Record{ recPars = n }          -> n+        _                              -> 0      -- Set the polarity of the arguments to a definition     setArgs g q = do@@ -84,7 +85,7 @@                     [ i + 1 | (ArgNode q1 i) <- Set.toList $ Graph.nodes g                     , q1 == q ]           findOcc i = case Graph.allPaths isNegative (ArgNode q i) (DefNode q) g of-            []                     -> Positive  -- Unused is not good for datatypes+            []                     -> Unused -- Unused is not good for datatypes (why not? let's do it anyway!)             es | any isNegative es -> Negative                | otherwise         -> Positive           args = map findOcc [0..nArgs - 1]@@ -228,7 +229,8 @@  instance ComputeOccurrences Clause where   occurrences vars (Clause{ clausePats = ps, clauseBody = body }) =-    concatOccurs (zipWith match [0..] ps) >+<+    -- We don't treat pattern matching as something dangerous+    -- concatOccurs (zipWith match [0..] ps) >+<     walk vars (patItems ps) body     where       walk _    _         NoBody     = Map.empty@@ -239,18 +241,18 @@       walk _    []        NoBind{}   = __IMPOSSIBLE__       walk _    (_ : _)   Body{}     = __IMPOSSIBLE__ -      match i (Arg _ VarP{}) = Map.empty-      match i _              = Map.singleton (AnArg i) [Unknown]+      match i (Arg _ _ VarP{}) = Map.empty+      match i _                = Map.singleton (AnArg i) [Unknown]        patItems ps = concat $ zipWith patItem [0..] $ map unArg ps       patItem i (VarP _) = [Just (AnArg i)]-      patItem i p        = replicate (nVars p) Nothing+      patItem i p        = replicate (nVars p) (Just (AnArg i)) -- Nothing        nVars p = case p of-        VarP{}    -> 1-        DotP{}    -> 1-        ConP _ ps -> sum $ map (nVars . unArg) ps-        LitP{}    -> 0+        VarP{}      -> 1+        DotP{}      -> 1+        ConP _ _ ps -> sum $ map (nVars . unArg) ps+        LitP{}      -> 0  instance ComputeOccurrences Term where   occurrences vars v = case v of@@ -269,6 +271,7 @@     Lam _ b      -> occurrences vars b     Lit{}        -> Map.empty     Sort{}       -> Map.empty+    DontCare     -> Map.empty     where       vs ! i         | i < length vs = vs !! i@@ -277,7 +280,7 @@ instance ComputeOccurrences Type where   occurrences vars (El _ v) = occurrences vars v -instance ComputeOccurrences Telescope where+instance ComputeOccurrences a => ComputeOccurrences (Tele a) where   occurrences vars EmptyTel        = Map.empty   occurrences vars (ExtendTel a b) = occurrences vars (a, b) @@ -300,7 +303,8 @@   occursAs (InDefOf q) <$> case theDef def of     Function{funClauses = cs} -> do       n  <- arity <$> instantiateFull (defType def)-      cs <- map (etaExpandClause n) <$> instantiateFull cs+      cs <- map (etaExpandClause n) <$>+              instantiateFull (map translatedClause cs)       return         $ concatOccurs         $ zipWith (occursAs . InClause) [0..]@@ -309,7 +313,7 @@     Datatype{dataPars = np, dataCons = cs}       -> do       let conOcc c = do             a <- defType <$> getConstInfo c-            TelV tel _ <- telView <$> normalise a+            TelV tel _ <- telView' <$> normalise a             let tel' = telFromList $ genericDrop np $ telToList tel                 vars = reverse [ Just (AnArg i) | i <- [0..np - 1] ]             return $ occursAs (ConArgType c) $ occurrences vars tel'@@ -332,7 +336,7 @@ etaExpandClause :: Nat -> Clause -> Clause etaExpandClause n c@Clause{ clausePats = ps, clauseBody = b }   | m <= 0    = c-  | otherwise = c { clausePats = ps ++ genericReplicate m (Arg NotHidden $ VarP "_")+  | otherwise = c { clausePats = ps ++ genericReplicate m (defaultArg $ VarP "_")                   , clauseBody = liftBody m b                   }   where@@ -341,7 +345,7 @@     bind 0 = id     bind n = Bind . Abs "_" . bind (n - 1) -    vars = reverse [ Arg NotHidden $ Var i [] | i <- [0..m - 1] ]+    vars = reverse [ defaultArg $ Var i [] | i <- [0..m - 1] ]      liftBody m (Bind b)   = Bind $ fmap (liftBody m) b     liftBody m (NoBind b) = NoBind $ liftBody m b
src/full/Agda/TypeChecking/Pretty.hs view
@@ -71,6 +71,27 @@ instance PrettyTCM Sort where prettyTCM x = prettyA =<< reify x instance PrettyTCM DisplayTerm where prettyTCM x = prettyA =<< reify x +instance PrettyTCM ClauseBody where+  prettyTCM b = do+    (binds, body) <- walk b+    sep [ brackets (fsep binds), return body ]+    where+      walk NoBody = return ([], P.text "()")+      walk (Body v) = (,) [] <$> prettyTCM v+      walk (NoBind b) = do+        (bs, v) <- walk b+        return (text "." : bs, v)+      walk (Bind b) = do+        (bs, v) <- underAbstraction_ b walk+        return (text (absName b) : bs, v)+ +instance (PrettyTCM a, PrettyTCM b) => PrettyTCM (Judgement a b) where+  prettyTCM (HasType a t) = prettyTCM a <+> text ":" <+> prettyTCM t+  prettyTCM (IsSort a)    = text "Sort" <+> prettyTCM a++instance PrettyTCM MetaId where+  prettyTCM = text . show+ instance PrettyTCM a => PrettyTCM (Blocked a) where   prettyTCM (Blocked x a) = text "[" <+> prettyTCM a <+> text "]" <> text (show x)   prettyTCM (NotBlocked x) = prettyTCM x@@ -93,6 +114,19 @@ 		      ] 		, nest 2 $ text ":" <+> prettyTCM ty 		]+        ArgsCmp cmps t us vs ->+          sep [ prettyList+                [ sep [ prettyTCM u+                      , nest 2 $ text "~~" <+> prettyTCM v+                      , nest 2 $ text (show cmp)+                      ] | (cmp, u, v) <- zip3 cmps us vs+                ] +              , nest 2 $ text ":" <+> prettyTCM t+              ]+	LevelCmp cmp a b ->+	    sep [ prettyTCM a+		, prettyTCM cmp <+> prettyTCM b+		] 	TypeCmp cmp a b -> 	    sep [ prettyTCM a 		, prettyTCM cmp <+> prettyTCM b@@ -153,14 +187,17 @@   prettyTCM (PrettyContext ctx) = P.fsep . reverse <$> pr (map ctxEntry ctx)       where           pr []		   = return []-          pr (Arg h (x,t) : ctx) = escapeContext 1 $ do+          pr (Arg h r (x,t) : ctx) = escapeContext 1 $ do               d    <- prettyTCM t               x    <- prettyTCM x               dctx <- pr ctx-              return $ par h (P.hsep [ x, P.text ":", d]) : dctx+              return $ rel r (par h (P.hsep [ x, P.text ":", d])) : dctx             where               par NotHidden = P.parens               par Hidden    = P.braces+              rel Irrelevant x = P.text "." P.<> x+              rel Relevant x   = x+              rel Forced   x   = x  instance PrettyTCM Context where   prettyTCM = prettyTCM . PrettyContext
src/full/Agda/TypeChecking/Primitive.hs view
@@ -46,7 +46,7 @@       | n == 0  = pZero       | n > 0   = do         s <- pSuc-        return $ s `apply` [Arg NotHidden $ Lit $ lit $ n - 1]+        return $ s `apply` [defaultArg $ Lit $ lit $ n - 1]       | otherwise	= return v  ---------------------------------------------------------------------------@@ -89,6 +89,7 @@ instance PrimTerm Str	  where primTerm _ = primString instance PrimTerm Nat	  where primTerm _ = primNat instance PrimTerm Lvl     where primTerm _ = primLevel+instance PrimTerm QName   where primTerm _ = primQName  instance PrimTerm a => PrimTerm [a] where     primTerm _ = list (primTerm (undefined :: a))@@ -107,6 +108,7 @@ 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 Bool where     toTerm = do@@ -116,18 +118,17 @@  -- | @buildList A ts@ builds a list of type @List A@. Assumes that the terms --   @ts@ all have type @A@.-buildList :: MonadTCM tcm => Term -> tcm ([Term] -> Term)-buildList a = do+buildList :: MonadTCM tcm => tcm ([Term] -> Term)+buildList = do     nil'  <- primNil     cons' <- primCons-    let nil       = nil'  `apply` [Arg Hidden a]-	cons x xs = cons' `apply` [Arg Hidden a, Arg NotHidden x, Arg NotHidden xs]+    let nil       = nil'+	cons x xs = cons' `apply` [defaultArg x, defaultArg xs]     return $ foldr cons nil  instance (PrimTerm a, ToTerm a) => ToTerm [a] where     toTerm = do-	a      <- primTerm (undefined :: a)-	mkList <- buildList a+	mkList <- buildList 	fromA  <- toTerm 	return $ mkList . map fromA @@ -168,6 +169,11 @@ 	LitString _ s -> Just $ Str s 	_	      -> Nothing +instance FromTerm QName where+    fromTerm = fromLiteral $ \l -> case l of+	LitQName _ x -> Just x+	_	      -> Nothing+ instance FromTerm Bool where     fromTerm = do 	true  <- primTrue@@ -201,7 +207,7 @@  	    mkList nil cons toA fromA t = do 		t <- reduce t-		let arg = Arg (argHiding t)+		let arg = Arg (argHiding t) (argRelevance t) 		case unArg t of 		    Con c [] 			| c == nil  -> return $ YesReduction []@@ -211,7 +217,7 @@ 				(\x' -> arg $ Con c [x',xs]) $ \y -> 			    redBind 				(mkList nil cons toA fromA xs)-				(\xs' -> arg $ Con c [Arg NotHidden $ fromA y, xs']) $ \ys ->+				(\xs' -> arg $ Con c [defaultArg $ fromA y, xs']) $ \ys -> 			    redReturn (y : ys) 		    _ -> return $ NoReduction t @@ -247,7 +253,7 @@           el (primEquality <#> var 2 <@> var 1 <@> var 0)   return $ PrimImpl t $ PrimFun __IMPOSSIBLE__ 3 $ \[t, a, b] -> liftTCM $ do       noConstraints $ equalTerm (El (mkType 0) $ unArg t) (unArg a) (unArg b)-      rf <- return refl <#> return (unArg t) <#> return (unArg a)+      rf <- return refl -- <#> return (unArg t) <#> return (unArg a)       redReturn rf     `catchError` \_ -> return (NoReduction [t, a, b]) @@ -275,7 +281,7 @@ 	redBind (toA v) 	    (\v' -> [v',w]) $ \x -> 	redBind (toB w)-	    (\w' -> [Arg (argHiding v) (fromA x), w']) $ \y ->+	    (\w' -> [Arg (argHiding v) (argRelevance v) (fromA x), w']) $ \y -> 	redReturn $ fromC $ f x y  mkPrimFun4 :: ( MonadTCM tcm@@ -296,14 +302,14 @@ 	redBind (toA a) 	    (\a' -> [a',b,c,d]) $ \x -> 	redBind (toB b)-	    (\b' -> [Arg (argHiding a) (fromA x), b', c, d]) $ \y ->+	    (\b' -> [Arg (argHiding a) (argRelevance a) (fromA x), b', c, d]) $ \y -> 	redBind (toC c)-	    (\c' -> [ Arg (argHiding a) (fromA x)-                    , Arg (argHiding b) (fromB y), c', d]) $ \z ->+	    (\c' -> [ Arg (argHiding a) (argRelevance a) (fromA x)+                    , Arg (argHiding b) (argRelevance b) (fromB y), c', d]) $ \z -> 	redBind (toD d)-	    (\d' -> [ Arg (argHiding a) (fromA x)-                    , Arg (argHiding b) (fromB y)-                    , Arg (argHiding c) (fromC z)+	    (\d' -> [ Arg (argHiding a) (argRelevance a) (fromA x)+                    , Arg (argHiding b) (argRelevance b) (fromB y)+                    , Arg (argHiding c) (argRelevance c) (fromC z)                     , d']) $ \w -> 	redReturn $ fromE $ f x y z w @@ -323,18 +329,18 @@ a --> b = do     a' <- a     b' <- b-    return $ El (getSort a' `sLub` getSort b') $ Fun (Arg NotHidden a') b'+    return $ El (getSort a' `sLub` getSort b') $ Fun (defaultArg a') b' -gpi :: MonadTCM tcm => Hiding -> String -> tcm Type -> tcm Type -> tcm Type-gpi h name a b = do+gpi :: MonadTCM tcm => Hiding -> Relevance -> String -> tcm Type -> tcm Type -> tcm Type+gpi h r name a b = do     a' <- a     x  <- freshName_ name-    b' <- addCtx x (Arg h a') b-    return $ El (getSort a' `sLub` getSort b') $ Pi (Arg h a') (Abs name b')+    b' <- addCtx x (Arg h r a') b+    return $ El (getSort a' `sLub` getSort b') $ Pi (Arg h r a') (Abs name b')  hPi, nPi :: MonadTCM tcm => String -> tcm Type -> tcm Type -> tcm Type-hPi = gpi Hidden-nPi = gpi NotHidden+hPi = gpi Hidden Relevant+nPi = gpi NotHidden Relevant  var :: MonadTCM tcm => Integer -> tcm Term var n = return $ Var n []@@ -345,7 +351,7 @@ gApply h a b = do     x <- a     y <- b-    return $ x `apply` [Arg h y]+    return $ x `apply` [Arg h Relevant y]  (<@>),(<#>) :: MonadTCM tcm => tcm Term -> tcm Term -> tcm Term (<@>) = gApply NotHidden@@ -363,6 +369,14 @@ tset :: MonadTCM tcm => tcm Type tset = return $ sort (mkType 0) +-- | Abbreviation: @argN = 'Arg' 'NotHidden' 'Relevant'@.++argN = Arg NotHidden Relevant++-- | Abbreviation: @argH = 'Arg' 'Hidden' 'Relevant'@.++argH = Arg Hidden Relevant+ --------------------------------------------------------------------------- -- * The actual primitive functions ---------------------------------------------------------------------------@@ -441,6 +455,7 @@      -- Other stuff     , "primTrustMe"         |-> primTrustMe+    , "primQNameEquality"  |-> mkPrimFun2 ((==) :: Rel QName)     ]     where 	(|->) = (,)
+ src/full/Agda/TypeChecking/Quote.hs view
@@ -0,0 +1,65 @@++module Agda.TypeChecking.Quote where++import Control.Applicative++import Agda.Syntax.Position+import Agda.Syntax.Literal+import Agda.Syntax.Internal+import Agda.Syntax.Common++import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Substitute++quoteTerm :: Term -> TCM Term+quoteTerm v = do+  false <- primFalse+  true <- primTrue+  nil <- primNil+  cons <- primCons+  arg <- primArgArg+  var <- primAgdaTermVar+  lam <- primAgdaTermLam+  def <- primAgdaTermDef+  con <- primAgdaTermCon+  pi <- primAgdaTermPi+  sort <- primAgdaTermSort  +  Con z _ <- primZero+  Con s _ <- primSuc+  unsupported <- primAgdaTermUnsupported+  let t @@ u = apply t [defaultArg u]+      quoteHiding Hidden = true+      quoteHiding NotHidden = false+      list [] = nil+      list (a : as) = cons @@ a @@ list as +      zero = con @@ quoteName z @@ nil+      suc n = con @@ quoteName s @@ list [n]+      quoteArg (Arg h r t) = arg @@ quoteHiding h @@ quote t+      quoteArgs ts = list (map quoteArg ts)+      quote (Var n ts) = var @@ Lit (LitInt noRange n) @@ quoteArgs ts+      quote (Lam h t) = lam @@ quoteHiding h @@ quote (absBody t)+      quote (Def x ts) = def @@ quoteName x @@ quoteArgs ts+      quote (Con x ts) = con @@ quoteName x @@ quoteArgs ts+      quote (Pi t u) = pi @@ quoteArg (fmap unEl t)+                          @@ quote (unEl (absBody u))+      quote (Fun t u) = pi @@ quoteArg (fmap unEl t)+                           @@ quote (raise 1 (unEl u))+      quote (Lit (LitInt _ n)) = iterate suc zero !! fromIntegral n+      quote (Sort _) = sort+      quote _ = unsupported+  return (quote v)++quoteName :: QName -> Term+quoteName x = Lit (LitQName noRange x)++quoteType :: Type -> TCM Term+quoteType (El _ v) = quoteTerm v++agdaTermType :: TCM Type+agdaTermType = El (mkType 0) <$> primAgdaTerm++qNameType :: TCM Type+qNameType = El (mkType 0) <$> primQName+
src/full/Agda/TypeChecking/Rebind.hs view
@@ -13,7 +13,7 @@  -- | Change 'Bind's to 'NoBind' if the variable is not used in the body. --   Also normalises the body in the process. Or not. Disabled.-rebindClause :: Clause -> TCM Clause+rebindClause :: Clauses -> TCM Clauses rebindClause = return {- rebindClause (Clause tel perm ps rec b) = return $ Clause tel perm ps rec b
+ src/full/Agda/TypeChecking/RecordPatterns.hs view
@@ -0,0 +1,408 @@+{-# LANGUAGE CPP, GeneralizedNewtypeDeriving #-}++-- | Code which replaces pattern matching on record constructors with+-- uses of projection functions.++module Agda.TypeChecking.RecordPatterns+  ( translateRecordPatterns+  ) where++import Control.Applicative+import Control.Arrow ((***))+import Control.Monad.Fix+import Control.Monad.Reader+import Control.Monad.State+import Data.List++import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute hiding (Subst)+import Agda.TypeChecking.Telescope+import Agda.Utils.Either+import Agda.Utils.List+import Agda.Utils.Permutation+import Agda.Utils.Size++#include "../undefined.h"+import Agda.Utils.Impossible++-- | Replaces pattern matching on record constructors with uses of+-- projection functions. Does not remove record constructor patterns+-- which have sub-patterns containing non-record constructor or+-- literal patterns.++translateRecordPatterns :: MonadTCM tcm => Clause -> tcm Clauses+translateRecordPatterns clause = do+  -- ps: New patterns, in left-to-right order, in the context of the+  -- old RHS.++  -- s: Partial substitution taking the old pattern variables+  -- (including dot patterns; listed from left to right) to terms in+  -- the context of the new RHS. The terms are functions expecting a+  -- substitution taking things in the old telescope's context to the+  -- context of the new RHS.++  -- cs: List of changes, with types in the context of the old+  -- telescope.++  (ps, s, cs) <- runRecPatM $ translatePatterns $ clausePats clause++  let -- Number of variables + dot patterns in new clause.+      noNewPatternVars = size cs++      -- Substitution used to convert terms in the old RHS's+      -- context to terms in the new RHS's context.+      rhsSubst = map (\t -> t rhsSubst') (reverse s) +++                 [ Var i [] | i <- [noNewPatternVars..] ]++      -- Substitution used to convert terms in the old telescope's+      -- context to terms in the new RHS's context.+      rhsSubst' = permute (reverseP $ clausePerm clause) init ++ rest+        where (init, rest) = genericSplitAt (size s) rhsSubst++      -- The old telescope, flattened and in textual left-to-right+      -- order (i.e. the type signature for the variable which occurs+      -- first in the list of patterns comes first).+      flattenedOldTel =+        permute (invertP $ compactP $ clausePerm clause) $+        zip (teleNames $ clauseTel clause) $+        flattenTel $+        clauseTel clause++      -- The new telescope, still flattened, with types in the context+      -- of the new RHS, in textual left-to-right order, and with+      -- Nothing in place of dot patterns.+      newTel' =+        map (fmap (id *** substs rhsSubst')) $+        translateTel cs $+        flattenedOldTel++      -- Permutation taking the new variable and dot patterns to the+      -- new telescope.+      newPerm = adjustForDotPatterns $+                  reorderTel $ map (maybe dummy snd) newTel'+        where+        -- It is important that dummy does not mention any variable+        -- (see the definition of reorderTel).+        dummy = defaultArg (El Prop (Sort Prop))++        isDotP n = case genericIndex cs n of+                     Left DotP{} -> True+                     _           -> False++        adjustForDotPatterns (Perm n is) =+          Perm n (filter (not . isDotP) is)++      -- Substitution used to convert terms in the new RHS's context+      -- to terms in the new telescope's context.+      lhsSubst' = permToSubst (reverseP newPerm)++      -- Substitution used to convert terms in the old telescope's+      -- context to terms in the new telescope's context.+      lhsSubst = map (substs lhsSubst') rhsSubst'++      -- The new telescope.+      newTel =+        uncurry unflattenTel . unzip $+        map (maybe __IMPOSSIBLE__ id) $+        permute newPerm $+        map (fmap (id *** substs lhsSubst')) $+        newTel'++      -- New clause.+      c = clause+            { clauseTel  = newTel+            , clausePerm = newPerm+            , clausePats = substs lhsSubst ps+            , clauseBody = translateBody cs rhsSubst $ clauseBody clause+            }++  reportSDoc "tc.lhs.top" 10 $+    escapeContext (size $ clauseTel clause) $ vcat+      [ 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)+        ]+      ]++  return $ Clauses { translatedClause    = c+                   , maybeOriginalClause =+                       if all isLeft cs then Nothing else Just clause+                   }++------------------------------------------------------------------------+-- Record pattern monad++-- | A monad used to translate record patterns.+--+-- The state records the number of variables produced so far, the+-- reader records the total number of variables produced by the entire+-- computation. Functions using this monad need to be sufficiently+-- lazy in the reader component.++newtype RecPatM a = RecPatM (TCMT (ReaderT Nat (StateT Nat IO)) a)+  deriving (Functor, Applicative, Monad,+            MonadIO, MonadTCM,+            MonadReader TCEnv, MonadState TCState)++-- | Runs a computation in the 'RecPatM' monad.++runRecPatM :: MonadTCM tcm => RecPatM a -> tcm a+runRecPatM (RecPatM m) = liftTCM $+  mapTCMT (\m -> do+             (x, noVars) <- mfix $ \ ~(_, noVars) ->+                              runStateT (runReaderT m noVars) 0+             return x)+          m++-- | Returns the next pattern variable, and the corresponding term.++nextVar :: RecPatM (Pattern, Term)+nextVar = RecPatM $ do+  n <- lift get+  lift $ put $ succ n+  noVars <- lift ask+  return (VarP "r", Var (noVars - n - 1) [])++------------------------------------------------------------------------+-- Types used to record changes to a clause++-- | @VarPat@ stands for variable patterns, and @DotPat@ for dot+-- patterns.++data Kind = VarPat | DotPat+  deriving Eq++-- | Substitutions (with a twist).+--+-- Some parts of the terms building up the substitution need to have a+-- substitution applied to them (in fact, a variant of the+-- substitution itself), so a functional representation is used.++type Subst = [Substitution -> Term]++-- | @'Left' p@ means that a variable (corresponding to the pattern+-- @p@, a variable or dot pattern) should be kept unchanged. @'Right'+-- (n, x, t)@ means that @n 'VarPat'@ variables, and @n 'DotPat'@ dot+-- patterns, should be removed, and a new variable, with the name @x@,+-- inserted instead. The type of the new variable is @t@.++type Changes = [Either Pattern (Kind -> Nat, String, Arg Type)]++-- | Record pattern trees.++data RecordTree+  = Leaf Pattern+    -- ^ Corresponds to variable and dot patterns; contains the+    -- original pattern.+  | RecCon (Arg Type) [(Substitution -> 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 (parametrised on a substitution) and a tree+    -- for every argument.++------------------------------------------------------------------------+-- Record pattern trees++-- | @projections t@ returns a projection (parametrised on a+-- substitution) for every non-dot leaf pattern in @t@. The term is+-- the composition of the projection functions from the leaf to the+-- root. The substitution is used to build the individual projection+-- functions.+--+-- Every term is tagged with its origin: a variable pattern or a dot+-- pattern.++projections :: RecordTree -> [(Substitution -> Term -> Term, Kind)]+projections (Leaf (DotP{})) = [(flip const, DotPat)]+projections (Leaf (VarP{})) = [(flip const, VarPat)]+projections (Leaf _)        = __IMPOSSIBLE__+projections (RecCon _ args) =+  concatMap (\(p, t) -> map (\(t, k) -> (\s -> t s . p s, k))+                            (projections t))+            args++-- | Converts a record tree to a single pattern along with information+-- about the deleted pattern variables.+--+-- Raises an error if the tree contains dot patterns inside record+-- patterns.++removeTree :: RecordTree -> RecPatM (Pattern, Subst, Changes)+removeTree tree = do+  (pat, x) <- nextVar+  let ps = projections tree+      s  = map (\(p, _) -> \s -> p s x) ps++      count k = genericLength $ filter ((== k) . snd) ps++      dotPatternInside = case tree of+        Leaf {}   -> False+        RecCon {} -> any ((== DotPat) . snd) ps++  if dotPatternInside then+    typeError $ NotSupported $+      "Dot patterns inside record patterns, " +++      "unless accompanied by data type patterns"+   else+    return $ case tree of+      Leaf p     -> (p,   s, [Left p])+      RecCon t _ -> (pat, s, [Right (count, "r", t)])++------------------------------------------------------------------------+-- Translation of patterns++-- | Removes record constructors from patterns.+--+-- Returns the following things:+--+-- * The new pattern.+--+-- * A substitution which maps the /old/ pattern variables (in the+--   order they occurred in the pattern; not including dot patterns)+--   to terms (either the new name of the variable, or a projection+--   applied to a new pattern variable).+--+-- * A list explaining the changes to the variables bound in the+--   pattern.+--+-- Record patterns containing non-record constructor patterns are not+-- translated (though their sub-patterns may be).+--+-- Example: The pattern @rec1 (con1 a) (rec2 b c) (rec3 d)@ should+-- yield the pattern @rec1 (con1 x) y z@, along with a substitution+-- similar to @[x, proj2-1 y, proj2-2 y, proj3-1 z]@.+--+-- This function assumes that literals are never of record type.++translatePattern :: Pattern -> RecPatM (Pattern, Subst, Changes)+translatePattern (ConP c Nothing ps) = do+  (ps, s, cs) <- translatePatterns ps+  return (ConP c Nothing ps, s, cs)+translatePattern p@(ConP _ (Just _) _) = do+  r <- recordTree p+  case r of+    Left  r -> r+    Right t -> removeTree t+translatePattern p@VarP{} = removeTree (Leaf p)+translatePattern p@DotP{} = removeTree (Leaf p)+translatePattern p@LitP{} = return (p, [], [])++-- | 'translatePattern' lifted to lists of arguments.++translatePatterns ::+  [Arg Pattern] -> RecPatM ([Arg Pattern], Subst, Changes)+translatePatterns ps = do+  (ps', ss, cs) <- unzip3 <$> mapM (translatePattern . unArg) ps+  return (ps' `withArgsFrom` ps, concat ss, concat cs)++-- | Traverses a pattern and returns one of two things:+--+-- * If there is no non-record constructor in the pattern, then+--   @'Right' ps@ is returned, where @ps@ contains one projection for+--   every variable in the input pattern (in the order they are+--   encountered).+--+-- * Otherwise the output is a computation returning the same kind of+--   result as that coming from 'translatePattern'. (Computations are+--   returned rather than values to ensure that variable numbers are+--   allocated in the right order.)+--+-- Assumes that literals are never of record type.++recordTree ::+  Pattern ->+  RecPatM (Either (RecPatM (Pattern, Subst, Changes)) RecordTree)+recordTree p@(ConP _ Nothing _) = return $ Left $ translatePattern p+recordTree (ConP c (Just t) ps) = do+  rs <- mapM (recordTree . unArg) ps+  case allRight rs of+    Left rs ->+      return $ Left $ do+        (ps', ss, cs) <- unzip3 <$> mapM (either id removeTree) rs+        return (ConP c (Just t) (ps' `withArgsFrom` ps),+                concat ss, concat cs)+    Right ts -> do+      t <- reduce t+      case t of+        Arg { unArg = El _ (Def r args) } -> do+          rDef <- theDef <$> getConstInfo r+          case rDef of+            Record { recFields = fields } -> do+              let proj p = \s t ->+                    Def (unArg p) (substs s (map hide args) ++ [defaultArg t])+              return $ Right $ RecCon t $ zip (map proj fields) ts+            _ -> __IMPOSSIBLE__+        _ -> __IMPOSSIBLE__+recordTree p@VarP{} = return (Right (Leaf p))+recordTree p@DotP{} = return (Right (Leaf p))+recordTree p@LitP{} = return $ Left $ translatePattern p++------------------------------------------------------------------------+-- Translation of the clause telescope and body++-- | Translates the telescope.++translateTel+  :: Changes+     -- ^ Explanation of how the telescope should be changed. Types+     -- should be in the context of the old telescope.+  -> [(String, Arg Type)]+     -- ^ Old telescope, flattened, in textual left-to-right+     -- order.+  -> [Maybe (String, Arg 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+translateTel (Right (n, x, t) : rest) tel = Just (x, t) :+                                              translateTel rest+                                                (genericDrop (n VarPat) tel)+translateTel (Left _ : rest) (t : tel)    = Just t : translateTel rest tel+translateTel []              []           = []+translateTel (Left _ : _)    []           = __IMPOSSIBLE__+translateTel []              (_ : _)      = __IMPOSSIBLE__++-- | Translates the clause body. The substitution should take things+-- in the context of the old RHS to the new RHS's context.++translateBody :: Changes -> Substitution -> ClauseBody -> ClauseBody+translateBody _                        s NoBody = NoBody+translateBody (Right (n, x, _) : rest) s b      =+  Bind $ Abs x $ translateBody rest s $ dropBinds n' b+  where n' = sum $ map n [VarPat, DotPat]+translateBody (Left _ : rest) s (Bind b)   = Bind $ fmap (translateBody rest s) b+translateBody (Left _ : rest) s (NoBind b) = NoBind $ translateBody rest s b+translateBody []              s (Body t)   = Body $ substs s t+translateBody _               _ _          = __IMPOSSIBLE__++------------------------------------------------------------------------+-- Helper functions++-- | Turns a permutation into a substitution.++permToSubst :: Permutation -> Substitution+permToSubst (Perm n is) =+  [ makeVar i | i <- [0..n-1] ] ++ [ Var i [] | i <- [size is..] ]+  where+  makeVar i = case genericElemIndex i is of+    Nothing -> __IMPOSSIBLE__+    Just k  -> Var k []++-- | @dropBinds n b@ drops the initial @n@ occurrences of 'Bind' or+-- 'NoBind' from @b@.+--+-- Precondition: @b@ has to start with @n@ occurrences of 'Bind' or+-- 'NoBind'.++dropBinds :: Nat -> ClauseBody -> ClauseBody+dropBinds n b          | n == 0 = b+dropBinds n (Bind b)   | n > 0  = dropBinds (pred n) (absBody b)+dropBinds n (NoBind b) | n > 0  = dropBinds (pred n) b+dropBinds _ _                   = __IMPOSSIBLE__
src/full/Agda/TypeChecking/Records.hs view
@@ -15,7 +15,11 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.Substitute import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Datatypes import Agda.Utils.List+import Agda.Utils.Monad  #include "../undefined.h" import Agda.Utils.Impossible@@ -57,9 +61,9 @@     _        -> typeError $ ShouldBeRecordType (El Prop $ Def r [])  -- | Get the field names of a record.-getRecordFieldNames :: MonadTCM tcm => QName -> tcm [(Hiding, C.Name)]+getRecordFieldNames :: MonadTCM tcm => QName -> tcm [Arg C.Name] getRecordFieldNames r =-  map (id *** nameConcrete . qnameName) . recFields <$> getRecordDef r+  map (fmap (nameConcrete . qnameName)) . recFields <$> getRecordDef r  -- | Get the field types of a record. getRecordFieldTypes :: MonadTCM tcm => QName -> tcm Telescope@@ -72,11 +76,7 @@ -- | Returns the given record type's constructor name (with an empty -- range). getRecordConstructor :: MonadTCM tcm => QName -> tcm QName-getRecordConstructor r = killRange <$> do-  c <- recCon <$> getRecordDef r-  case c of-    Nothing -> return r-    Just c  -> return c+getRecordConstructor r = killRange <$> recCon <$> getRecordDef r  -- | Check if a name refers to a record. isRecord :: MonadTCM tcm => QName -> tcm Bool@@ -86,43 +86,103 @@     Record{} -> True     _        -> False +-- | Check if a name refers to an eta expandable record.+isEtaRecord :: MonadTCM tcm => QName -> tcm Bool+isEtaRecord r = do+  def <- theDef <$> getConstInfo r+  return $ case def of+    Record{recEtaEquality = eta} -> eta+    _                            -> False++-- | Check if a constructor name is the internally generated record constructor.+isGeneratedRecordConstructor :: MonadTCM tcm => QName -> tcm Bool+isGeneratedRecordConstructor c = do+  def <- theDef <$> getConstInfo c+  case def of+    Constructor{ conData = r } -> do+      def <- theDef <$> getConstInfo r+      case def of+        Record{ recNamedCon = False } -> return True+        _                             -> return False+    _ -> return False+ {-| Compute the eta expansion of a record. The first argument should be     the name of a record type. Given -    @record R : Set where x : A; y : B@+    @record R : Set where x : A; y : B; .z : C@ -    and @r : R@, @etaExpand R [] r@ is @[R.x r, R.y r]@+    and @r : R@, @etaExpand R [] r@ is @[R.x r, R.y r, DontCare]@ -} etaExpandRecord :: MonadTCM tcm => QName -> Args -> Term -> tcm (Telescope, Args) etaExpandRecord r pars u = do   Record{ recFields = xs, recTel = tel } <- getRecordDef r-  let tel'        = apply tel pars-      proj (h, x) = Arg h $ Def x $ map hide pars ++ [Arg NotHidden u]-  reportSDoc "tc.record.eta" 20 $ vcat-    [ text "eta expanding" <+> prettyTCM u <+> text ":" <+> prettyTCM r-    , nest 2 $ vcat-      [ text "tel' =" <+> prettyTCM tel'-      , text "args =" <+> prettyTCM (map proj xs)-      ]-    ]-  return (tel', map proj xs)+  let tel' = apply tel pars+  case u of+    Con _ args -> return (tel', args)  -- Already expanded.+    _          -> do+      -- irrelevant fields are expanded to DontCare+      let proj (Arg h Irrelevant _) = Arg h Irrelevant DontCare+          proj (Arg h rel x)        = Arg h rel $ +            Def x $ map hide pars ++ [defaultArg u]+      reportSDoc "tc.record.eta" 20 $ vcat+        [ text "eta expanding" <+> prettyTCM u <+> text ":" <+> prettyTCM r+        , nest 2 $ vcat+          [ text "tel' =" <+> prettyTCM tel'+          , text "args =" <+> prettyTCM (map proj xs)+          ]+        ]+      return (tel', map proj xs)   where-    hide (Arg _ x) = Arg Hidden x+    hide a = a { argHiding = Hidden }  -- | The fields should be eta contracted already.-etaContractRecord :: MonadTCM tcm => QName -> Args -> tcm Term-etaContractRecord r args = do+etaContractRecord :: MonadTCM tcm => QName -> QName -> Args -> tcm Term+etaContractRecord r c args = do   Record{ recFields = xs } <- getRecordDef r-  let check (Arg _ v) (_, x) = do-        case v of-          Def y args@(_:_) | x == y -> return (Just $ unArg $ last args)-          _                         -> return Nothing-  unless (length args == length xs) __IMPOSSIBLE__-  cs <- zipWithM check args xs-  let fallBack = Con <$> getRecordConstructor r <*> return args-  case sequence cs of-    Just (c:cs) -> do-      if all (c ==) cs-        then return c-        else fallBack-    _ -> fallBack+  let check a ax = do+        -- skip irrelevant record fields by returning DontCare+        case (argRelevance a, unArg a) of+          (Irrelevant, _)                       -> return $ Just DontCare+          (_, Def y args@(_:_)) | unArg ax == y -> return (Just $ unArg $ last args)+          _                                     -> return Nothing+      fallBack = return (Con c args)+  case compare (length args) (length xs) of+    LT -> fallBack       -- Not fully applied+    GT -> __IMPOSSIBLE__ -- Too many arguments. Impossible.+    EQ -> do+      cs <- zipWithM check args xs+      case sequence cs of+        Just cs -> case filter (DontCare /=) cs of+          (c:cs) -> do+            if all (c ==) cs+              then return c+              else fallBack+          _ -> fallBack -- just DontCares+        _ -> fallBack  -- a Nothing++-- | Is the type a hereditarily singleton record type? May return a+-- blocking metavariable.+--+-- Precondition: The name should refer to a record type, and the+-- arguments should be the parameters to the type.++isSingletonRecord ::+  MonadTCM tcm => QName -> Args -> tcm (Either MetaId Bool)+isSingletonRecord r ps =+  check =<< ((`apply` ps) <$> getRecordFieldTypes r)+  where+  check EmptyTel            = return (Right True)+  check (ExtendTel arg tel) = do+    TelV _ t <- telView $ unArg arg+    t <- reduceB $ unEl t+    case t of+      Blocked m _            -> return (Left m)+      NotBlocked (MetaV m _) -> return (Left m)+      NotBlocked (Def r ps)  ->+        ifM (not <$> isRecord r) (return $ Right False) $ do+          isRec <- isSingletonRecord r ps+          case isRec of+            Left _      -> return isRec+            Right False -> return isRec+            Right True  -> underAbstraction arg tel $ check+      _ -> return (Right False)
src/full/Agda/TypeChecking/Records.hs-boot view
@@ -1,10 +1,14 @@  module Agda.TypeChecking.Records where +import Agda.Syntax.Internal import Agda.Syntax.Abstract.Name-import Agda.Syntax.Common (Hiding)+import Agda.Syntax.Common (Arg) import qualified Agda.Syntax.Concrete.Name as C import Agda.TypeChecking.Monad  isRecord :: MonadTCM tcm => QName -> tcm Bool-getRecordFieldNames :: MonadTCM tcm => QName -> tcm [(Hiding, C.Name)]+isEtaRecord :: MonadTCM tcm => QName -> tcm Bool+getRecordFieldNames :: MonadTCM tcm => QName -> tcm [Arg C.Name]+etaContractRecord :: MonadTCM tcm => QName -> QName -> Args -> tcm Term+isGeneratedRecordConstructor :: MonadTCM tcm => QName -> tcm Bool
src/full/Agda/TypeChecking/Reduce.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, PatternGuards, TypeSynonymInstances #-}  module Agda.TypeChecking.Reduce where @@ -10,7 +10,6 @@ import Data.List as List hiding (sort) import Data.Map as Map import qualified Data.Set as Set-import Data.Generics import Data.Traversable  import Agda.Syntax.Position@@ -24,8 +23,11 @@ import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Substitute import Agda.TypeChecking.Free+import Agda.TypeChecking.EtaContract+import Agda.TypeChecking.CompiledClause  import {-# SOURCE #-} Agda.TypeChecking.Patterns.Match+import {-# SOURCE #-} Agda.TypeChecking.CompiledClause.Match  import Agda.Utils.Monad @@ -120,15 +122,19 @@   instantiate tel = return tel  instance Instantiate Constraint where-    instantiate (ValueCmp cmp t u v) =-	do  (t,u,v) <- instantiate (t,u,v)-	    return $ ValueCmp cmp t u v-    instantiate (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> instantiate (a,b)-    instantiate (TelCmp cmp a b)     = uncurry (TelCmp cmp)  <$> instantiate (a,b)-    instantiate (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> instantiate (a,b)-    instantiate (Guarded c cs)       = uncurry Guarded <$> instantiate (c,cs)-    instantiate (UnBlock m)          = return $ UnBlock m-    instantiate (IsEmpty t)          = IsEmpty <$> instantiate t+  instantiate (ValueCmp cmp t u v) = do+    (t,u,v) <- instantiate (t,u,v)+    return $ ValueCmp cmp t u v+  instantiate (ArgsCmp cmp t as bs) = do+    (t, as, bs) <- instantiate (t, as, bs)+    return $ ArgsCmp cmp t as bs+  instantiate (LevelCmp cmp u v)   = uncurry (LevelCmp cmp) <$> instantiate (u,v)+  instantiate (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> instantiate (a,b)+  instantiate (TelCmp cmp a b)     = uncurry (TelCmp cmp)  <$> instantiate (a,b)+  instantiate (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> instantiate (a,b)+  instantiate (Guarded c cs)       = uncurry Guarded <$> instantiate (c,cs)+  instantiate (UnBlock m)          = return $ UnBlock m+  instantiate (IsEmpty t)          = IsEmpty <$> instantiate t  instance (Ord k, Instantiate e) => Instantiate (Map k e) where     instantiate = traverse instantiate@@ -158,12 +164,12 @@       $ liftTCM $ do         suc  <- do sc <- primLevelSuc                    return $ \x -> case x of-                                    Type n -> Type (sc `apply` [Arg NotHidden n])+                                    Type n -> Type (sc `apply` [Arg NotHidden Relevant n])                                     _      -> sSuc x           `catchError` \_ -> return sSuc         lub <- do mx <- primLevelMax                   return $ \x y -> case (x, y) of-                    (Type n, Type m) -> Type (mx `apply` List.map (Arg NotHidden) [n, m])+                    (Type n, Type m) -> Type (mx `apply` List.map (Arg NotHidden Relevant) [n, m])                     _                -> sLub x y           `catchError` \_ -> return sLub         -- need to instantiate all meta to know if we need a DLub or a Lub@@ -220,7 +226,9 @@ 		Lit _	   -> return $ notBlocked v 		Var _ _    -> return $ notBlocked v 		Lam _ _    -> return $ notBlocked v+		DontCare   -> return $ notBlocked v 	where+            -- NOTE: reduceNat can traverse the entire term. 	    reduceNat v@(Con c []) = do 		mz  <- getBuiltin' builtinZero                 mlz <- getBuiltin' builtinLevelZero@@ -228,7 +236,7 @@                   _ | Just v == mz  -> return $ Lit $ LitInt (getRange c) 0                     | Just v == mlz -> return $ Lit $ LitLevel (getRange c) 0 		  _		    -> return v-	    reduceNat v@(Con c [Arg NotHidden w]) = do+	    reduceNat v@(Con c [Arg NotHidden Relevant w]) = do 		ms  <- getBuiltin' builtinSuc                 mls <- getBuiltin' builtinLevelSuc 		case v of@@ -239,7 +247,7 @@                     inc w = case w of                       Lit (LitInt r n) -> Lit (LitInt (fuseRange c r) $ n + 1)                       Lit (LitLevel r n) -> Lit (LitLevel (fuseRange c r) $ n + 1)-                      _                  -> Con c [Arg NotHidden w]+                      _                  -> Con c [Arg NotHidden Relevant w] 	    reduceNat v = return v  -- | If the first argument is 'True', then a single delayed clause may@@ -255,42 +263,55 @@               return $ notBlocked $ Con (c `withRangeOf` f) args             Primitive ConcreteDef x cls -> do                 pf <- getPrimitive x-                reducePrimitive x v0 f args pf (defDelayed info) (maybe [] id cls)-            _  -> reduceNormal v0 f args (defDelayed info) (defClauses info)+                reducePrimitive x v0 f args pf (defDelayed info)+                                (maybe [] (List.map translatedClause) cls)+                                Nothing+            _  -> reduceNormal v0 f args (defDelayed info)+                               (List.map translatedClause $ defClauses info)+                               (defCompiled info)   where-    reducePrimitive x v0 f args pf delayed cls+    reducePrimitive x v0 f args pf delayed cls mcc         | n < ar    = return $ notBlocked $ v0 `apply` args -- not fully applied         | otherwise = {-# SCC "reducePrimitive" #-} do             let (args1,args2) = genericSplitAt ar args             r <- def args1             case r of                 NoReduction args1' -> reduceNormal v0 f (args1' ++ args2)-                                                   delayed cls+                                                   delayed cls mcc                 YesReduction v	   -> keepGoing $ v `apply` args2         where             n	= genericLength args             ar  = primFunArity pf             def = primFunImplementation pf -    reduceNormal v0 f args delayed def = {-# SCC "reduceNormal" #-} do-        case (delayed, def) of-            (Delayed, _) | not unfoldDelayed -> defaultResult-            (_, []) -> defaultResult -- no definition for head-            (_, cls@(Clause{ clausePats = ps } : _))-                | length ps <= length args ->-                    do  let (args1,args2) = splitAt (length ps) args-                        ev <- appDef v0 cls args1-                        case ev of-                            NoReduction  v -> return    $ v `apply` args2-                            YesReduction v -> keepGoing $ v `apply` args2-                | otherwise	-> defaultResult -- partial application+    reduceNormal v0 f args delayed def mcc = {-# SCC "reduceNormal" #-} do+        case def of+          _ | Delayed <- delayed,+              not unfoldDelayed -> defaultResult+          [] -> defaultResult -- no definition for head+          cls@(Clause{ clausePats = ps } : _)+            | length ps <= length args -> do+                let (args1,args2) = splitAt (length ps) args+                ev <- maybe (appDef' v0 cls args1)+                            (\cc -> appDef v0 cc args1) mcc+                case ev of+                  NoReduction  v -> return    $ v `apply` args2+                  YesReduction v -> keepGoing $ v `apply` args2+            | otherwise	-> defaultResult -- partial application       where defaultResult = return $ notBlocked $ v0 `apply` args      -- Apply a defined function to it's arguments.     --   The original term is the first argument applied to the third.-    appDef :: MonadTCM tcm => Term -> [Clause] -> Args -> tcm (Reduced (Blocked Term) Term)-    appDef v cls args = {-# SCC "appDef" #-} goCls cls args where+    appDef :: MonadTCM tcm => Term -> CompiledClauses -> Args -> tcm (Reduced (Blocked Term) Term)+    appDef v cc args = liftTCM $ do+      r <- matchCompiled cc args+      case r of+        YesReduction t    -> return $ YesReduction t+        NoReduction args' -> return $ NoReduction $ fmap (apply v) args' +    appDef' :: MonadTCM tcm => Term -> [Clause] -> Args -> tcm (Reduced (Blocked Term) Term)+    appDef' v cls args = {-# SCC "appDef" #-} goCls cls args where+         goCls :: MonadTCM tcm => [Clause] -> Args -> tcm (Reduced (Blocked Term) Term)         goCls [] args = typeError $ IncompletePatternMatching v args         goCls (cl@(Clause { clausePats = pats@@ -330,15 +351,19 @@   reduce tel = return tel  instance Reduce Constraint where-    reduce (ValueCmp cmp t u v) =-	do  (t,u,v) <- reduce (t,u,v)-	    return $ ValueCmp cmp t u v-    reduce (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> reduce (a,b)-    reduce (TelCmp  cmp a b)    = uncurry (TelCmp cmp)  <$> reduce (a,b)-    reduce (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> reduce (a,b)-    reduce (Guarded c cs)       = uncurry Guarded <$> reduce (c,cs)-    reduce (UnBlock m)          = return $ UnBlock m-    reduce (IsEmpty t)          = IsEmpty <$> reduce t+  reduce (ValueCmp cmp t u v) = do+    (t,u,v) <- reduce (t,u,v)+    return $ ValueCmp cmp t u v+  reduce (ArgsCmp cmp t us vs) = do+    (t,us,vs) <- reduce (t,us,vs)+    return $ ArgsCmp cmp t us vs+  reduce (LevelCmp cmp u v)   = uncurry (LevelCmp cmp) <$> reduce (u,v)+  reduce (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> reduce (a,b)+  reduce (TelCmp  cmp a b)    = uncurry (TelCmp cmp)  <$> reduce (a,b)+  reduce (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> reduce (a,b)+  reduce (Guarded c cs)       = uncurry Guarded <$> reduce (c,cs)+  reduce (UnBlock m)          = return $ UnBlock m+  reduce (IsEmpty t)          = IsEmpty <$> reduce t  instance (Ord k, Reduce e) => Reduce (Map k e) where     reduce = traverse reduce@@ -378,6 +403,7 @@ 		Sort s	    -> Sort <$> normalise s 		Pi a b	    -> uncurry Pi <$> normalise (a,b) 		Fun a b     -> uncurry Fun <$> normalise (a,b)+                DontCare    -> return v  instance Normalise ClauseBody where     normalise (Body   t) = Body   <$> normalise t@@ -407,27 +433,31 @@ 	x <- enterClosure cl normalise 	return $ cl { clValue = x } -instance Normalise Telescope where-  normalise EmptyTel = return EmptyTel+instance Normalise a => Normalise (Tele a) where+  normalise EmptyTel        = return EmptyTel   normalise (ExtendTel a b) = uncurry ExtendTel <$> normalise (a, b)  instance Normalise Constraint where-    normalise (ValueCmp cmp t u v) =-	do  (t,u,v) <- normalise (t,u,v)-	    return $ ValueCmp cmp t u v-    normalise (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> normalise (a,b)-    normalise (TelCmp cmp a b)     = uncurry (TelCmp cmp)  <$> normalise (a,b)-    normalise (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> normalise (a,b)-    normalise (Guarded c cs)       = uncurry Guarded <$> normalise (c,cs)-    normalise (UnBlock m)          = return $ UnBlock m-    normalise (IsEmpty t)          = IsEmpty <$> normalise t+  normalise (ValueCmp cmp t u v) = do+    (t,u,v) <- normalise (t,u,v)+    return $ ValueCmp cmp t u v+  normalise (ArgsCmp cmp t u v) = do+    (t,u,v) <- normalise (t,u,v)+    return $ ArgsCmp cmp t u v+  normalise (LevelCmp cmp u v)   = uncurry (LevelCmp cmp) <$> normalise (u,v)+  normalise (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> normalise (a,b)+  normalise (TelCmp cmp a b)     = uncurry (TelCmp cmp)  <$> normalise (a,b)+  normalise (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> normalise (a,b)+  normalise (Guarded c cs)       = uncurry Guarded <$> normalise (c,cs)+  normalise (UnBlock m)          = return $ UnBlock m+  normalise (IsEmpty t)          = IsEmpty <$> normalise t  instance Normalise Pattern where   normalise p = case p of-    VarP _    -> return p-    LitP _    -> return p-    ConP c ps -> ConP c <$> normalise ps-    DotP v    -> DotP <$> normalise v+    VarP _       -> return p+    LitP _       -> return p+    ConP c mt ps -> ConP c <$> normalise mt <*> normalise ps+    DotP v       -> DotP <$> normalise v  instance Normalise DisplayForm where   normalise (Display n ps v) = Display n <$> normalise ps <*> return v@@ -435,6 +465,8 @@ instance (Ord k, Normalise e) => Normalise (Map k e) where     normalise = traverse normalise +instance Normalise a => Normalise (Maybe a) where+    normalise = traverse normalise  --------------------------------------------------------------------------- -- * Full instantiation@@ -466,19 +498,26 @@       El <$> instantiateFull s <*> instantiateFull t  instance InstantiateFull Term where-    instantiateFull v = do+    instantiateFull v = etaOnce =<< do       v <- instantiate v       case v of-          Var n vs   -> Var n <$> instantiateFull vs-          Con c vs   -> Con c <$> instantiateFull vs-          Def f vs   -> Def f <$> instantiateFull vs-          MetaV x vs -> MetaV x <$> instantiateFull vs-          Lit _	   -> return v-          Lam h b    -> Lam h <$> instantiateFull b-          Sort s	   -> Sort <$> instantiateFull s-          Pi a b	   -> uncurry Pi <$> instantiateFull (a,b)-          Fun a b    -> uncurry Fun <$> instantiateFull (a,b)+          Var n vs    -> Var n <$> instantiateFull vs+          Con c vs    -> Con c <$> instantiateFull vs+          Def f vs    -> Def f <$> instantiateFull vs+          MetaV x vs  -> MetaV x <$> instantiateFull vs+          Lit _	      -> return v+          Lam h b     -> Lam h <$> instantiateFull b+          Sort s      -> Sort <$> instantiateFull s+          Pi a b      -> uncurry Pi <$> instantiateFull (a,b)+          Fun a b     -> uncurry Fun <$> instantiateFull (a,b)+          DontCare    -> return v +instance InstantiateFull Pattern where+    instantiateFull v@VarP{}       = return v+    instantiateFull (DotP t)       = DotP <$> instantiateFull t+    instantiateFull (ConP n mt ps) = ConP n <$> instantiateFull mt <*> instantiateFull ps+    instantiateFull l@LitP{}       = return l+ instance InstantiateFull ClauseBody where     instantiateFull (Body   t) = Body   <$> instantiateFull t     instantiateFull (Bind   b) = Bind   <$> instantiateFull b@@ -512,6 +551,10 @@     ValueCmp cmp t u v -> do       (t,u,v) <- instantiateFull (t,u,v)       return $ ValueCmp cmp t u v+    ArgsCmp cmp t u v -> do+      (t,u,v) <- instantiateFull (t,u,v)+      return $ ArgsCmp cmp t u v+    LevelCmp cmp u v   -> uncurry (LevelCmp cmp) <$> instantiateFull (u,v)     TypeCmp cmp a b    -> uncurry (TypeCmp cmp) <$> instantiateFull (a,b)     TelCmp cmp a b     -> uncurry (TelCmp cmp)  <$> instantiateFull (a,b)     SortCmp cmp a b    -> uncurry (SortCmp cmp) <$> instantiateFull (a,b)@@ -534,7 +577,7 @@ instance InstantiateFull Section where   instantiateFull (Section tel n) = flip Section n <$> instantiateFull tel -instance InstantiateFull Telescope where+instance InstantiateFull a => InstantiateFull (Tele a) where   instantiateFull EmptyTel = return EmptyTel   instantiateFull (ExtendTel a b) = uncurry ExtendTel <$> instantiateFull (a, b) @@ -559,9 +602,9 @@ instance InstantiateFull Defn where     instantiateFull d = case d of       Axiom{} -> return d-      Function{ funClauses = cs, funInv = inv } -> do-        (cs, inv) <- instantiateFull (cs, inv)-        return $ d { funClauses = cs, funInv = inv }+      Function{ funClauses = cs, funCompiled = cc, funInv = inv } -> do+        (cs, cc, inv) <- instantiateFull (cs, cc, inv)+        return $ d { funClauses = cs, funCompiled = cc, funInv = inv }       Datatype{ dataSort = s, dataClause = cl } -> do 	s  <- instantiateFull s 	cl <- instantiateFull cl@@ -580,21 +623,37 @@   instantiateFull NotInjective = return NotInjective   instantiateFull (Inverse inv) = Inverse <$> instantiateFull inv +instance InstantiateFull a => InstantiateFull (Case a) where+  instantiateFull (Branches cs ls m) =+    Branches <$> instantiateFull cs+             <*> instantiateFull ls+             <*> instantiateFull m++instance InstantiateFull CompiledClauses where+  instantiateFull Fail        = return Fail+  instantiateFull (Done m t)  = Done m <$> instantiateFull t+  instantiateFull (Case n bs) = Case n <$> instantiateFull bs++instance InstantiateFull Clauses where+    instantiateFull (Clauses c tc) =+       Clauses <$> instantiateFull c <*> instantiateFull tc+ instance InstantiateFull Clause where     instantiateFull (Clause r tel perm ps b) =        Clause r <$> instantiateFull tel        <*> return perm-       <*> return ps+       <*> instantiateFull ps        <*> instantiateFull b  instance InstantiateFull Interface where     instantiateFull (Interface ms mod scope inside-                               sig b hsImports highlighting) =+                               sig b hsImports highlighting pragmas) = 	Interface ms mod scope inside 	    <$> instantiateFull sig 	    <*> instantiateFull b             <*> return hsImports             <*> return highlighting+            <*> return pragmas  instance InstantiateFull a => InstantiateFull (Builtin a) where     instantiateFull (Builtin t) = Builtin <$> instantiateFull t
src/full/Agda/TypeChecking/Rules/Builtin.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE PatternGuards, CPP #-} module Agda.TypeChecking.Rules.Builtin where  import Control.Applicative@@ -20,9 +20,13 @@ import Agda.TypeChecking.Pretty  import Agda.TypeChecking.Rules.Term ( checkExpr )+import {-# SOURCE #-} Agda.TypeChecking.Rules.Builtin.Coinduction  import Agda.Utils.Size+import Agda.Utils.Impossible +#include "../..//undefined.h"+ --------------------------------------------------------------------------- -- * Checking builtin pragmas ---------------------------------------------------------------------------@@ -80,34 +84,31 @@             " have to be different types."         _ -> return () -bindBuiltinBool :: String -> A.Expr -> TCM ()+bindBuiltinBool :: String -> A.Expr -> TCM Term bindBuiltinBool b e = do     bool <- primBool-    t    <- checkExpr e $ El (mkType 0) bool-    bindBuiltinName b t+    checkExpr e $ El (mkType 0) bool  -- | Bind something of type @Set -> Set@. bindBuiltinType1 :: String -> A.Expr -> TCM () bindBuiltinType1 thing e = do     let set      = sort (mkType 0)-        setToSet = El (mkType 1) $ Fun (Arg NotHidden set) set+        setToSet = El (mkType 1) $ Fun (defaultArg set) set     f <- checkExpr e setToSet     inductiveCheck thing f     bindBuiltinName thing f -bindBuiltinZero' :: String -> TCM Term -> A.Expr -> TCM ()+bindBuiltinZero' :: String -> TCM Term -> A.Expr -> TCM Term bindBuiltinZero' bZero pNat e = do     nat  <- pNat-    zero <- checkExpr e (El (mkType 0) nat)-    bindBuiltinName bZero zero+    checkExpr e (El (mkType 0) nat) -bindBuiltinSuc' :: String -> TCM Term -> A.Expr -> TCM ()+bindBuiltinSuc' :: String -> TCM Term -> A.Expr -> TCM Term bindBuiltinSuc' bSuc pNat e = do     nat  <- pNat     let nat' = El (mkType 0) nat-        natToNat = El (mkType 0) $ Fun (Arg NotHidden nat') nat'-    suc <- checkExpr e natToNat-    bindBuiltinName bSuc suc+        natToNat = El (mkType 0) $ Fun (defaultArg nat') nat'+    checkExpr e natToNat  bindBuiltinZero e = bindBuiltinZero' builtinZero primNat e bindBuiltinSuc  e = bindBuiltinSuc'  builtinSuc primNat e@@ -124,31 +125,29 @@ typeOfSizeSuc = do     sz  <- primSize     let sz' = El (mkType 0) sz-    return $ El (mkType 0) $ Fun (Arg NotHidden sz') sz'+    return $ El (mkType 0) $ Fun (defaultArg sz') sz'  -- | Built-in nil should have type @{A:Set} -> List A@-bindBuiltinNil :: A.Expr -> TCM ()+bindBuiltinNil :: A.Expr -> TCM Term bindBuiltinNil e = do     list' <- primList     let set     = sort (mkType 0)-        list a  = El (mkType 0) (list' `apply` [Arg NotHidden a])-        nilType = telePi (telFromList [Arg Hidden ("A",set)]) $ list (Var 0 [])-    nil <- checkExpr e nilType-    bindBuiltinName builtinNil nil+        list a  = El (mkType 0) (list' `apply` [defaultArg a])+        nilType = telePi (telFromList [Arg Hidden Relevant ("A",set)]) $ list (Var 0 [])+    checkExpr e nilType  -- | Built-in cons should have type @{A:Set} -> A -> List A -> List A@-bindBuiltinCons :: A.Expr -> TCM ()+bindBuiltinCons :: A.Expr -> TCM Term bindBuiltinCons e = do     list' <- primList     let set       = sort (mkType 0)         el        = El (mkType 0)         a         = Var 0 []-        list x    = el $ list' `apply` [Arg NotHidden x]-        hPi x a b = telePi (telFromList [Arg Hidden (x,a)]) b-        fun a b   = el $ Fun (Arg NotHidden a) b+        list x    = el $ list' `apply` [defaultArg x]+        hPi x a b = telePi (telFromList [Arg Hidden Relevant (x,a)]) b+        fun a b   = el $ Fun (defaultArg a) b         consType  = hPi "A" set $ el a `fun` (list a `fun` list a)-    cons <- checkExpr e consType-    bindBuiltinName builtinCons cons+    checkExpr e consType  bindBuiltinPrimitive :: String -> String -> A.Expr -> (Term -> TCM ()) -> TCM () bindBuiltinPrimitive name builtin (A.ScopedExpr scope e) verify = do@@ -297,41 +296,66 @@             nat  <- El (mkType 0) <$> pNat             zero <- pZero             s    <- pSuc-            let x @@ y = x `apply` [Arg NotHidden y]+            let x @@ y = x `apply` [defaultArg y]                 x == y = noConstraints $ equalTerm nat x y                 suc n  = s @@ n                 choice = foldr1 (\x y -> x `catchError` \_ -> y)             xs <- mapM freshName_ xs-            addCtxs xs (Arg NotHidden nat) $ f (@@) zero suc (==) choice+            addCtxs xs (defaultArg nat) $ f (@@) zero suc (==) choice  bindBuiltinEquality :: A.Expr -> TCM () bindBuiltinEquality e = do   let set       = sort (mkType 0)       el        = El (mkType 0)       a         = Var 0 []-      hPi x a b = telePi (telFromList [Arg Hidden (x,a)]) b-      fun a b   = El (mkType 1) $ Fun (Arg NotHidden a) b+      hPi x a b = telePi (telFromList [Arg Hidden Relevant (x,a)]) b+      fun a b   = El (mkType 1) $ Fun (defaultArg a) b       eqType    = hPi "A" set $ el a `fun` (el a `fun` set)   eq <- checkExpr e eqType   bindBuiltinName builtinEquality eq  -bindBuiltinRefl :: A.Expr -> TCM ()+bindBuiltinRefl :: A.Expr -> TCM Term bindBuiltinRefl e = do   eq' <- primEquality   let set       = sort (mkType 0)       el        = El (mkType 0)       v0        = Var 0 []       v1        = Var 1 []-      hPi x a b = telePi (telFromList [Arg Hidden (x, a)]) b-      fun a b   = el $ Fun (Arg NotHidden a) b-      eq a b c  = el $ eq' `apply` [Arg Hidden a, Arg NotHidden b, Arg NotHidden c]+      hPi x a b = telePi (telFromList [Arg Hidden Relevant (x, a)]) b+      fun a b   = el $ Fun (defaultArg a) b+      eq a b c  = el $ eq' `apply` [Arg Hidden Relevant a, defaultArg b, defaultArg c]       reflType  = hPi "A" set $ hPi "x" (el v0) $ eq v1 v0 v0-  refl <- checkExpr e reflType-  bindBuiltinName builtinRefl refl+  checkExpr e reflType +bindBuiltinDummyConstructor :: A.Expr -> TCM Term+bindBuiltinDummyConstructor (A.ScopedExpr _ e) = bindBuiltinDummyConstructor e+bindBuiltinDummyConstructor (A.Con (AmbQ [c])) = return (Con c [])+bindBuiltinDummyConstructor e = typeError $ GenericError "bad BUILTIN"++-- | @bindPostulatedName builtin e m@ checks that @e@ is a postulated+-- name @q@, and binds the builtin @builtin@ to the term @m q def@,+-- where @def@ is the current 'Definition' of @q@.++bindPostulatedName ::+  String -> A.Expr -> (QName -> Definition -> TCM Term) -> TCM ()+bindPostulatedName builtin e m = do+  q   <- getName e+  def <- ignoreAbstractMode $ getConstInfo q+  case theDef def of+    Axiom {} -> bindBuiltinName builtin =<< m q def+    _        -> err+  where+  err = typeError $ GenericError $+          "The argument to BUILTIN " ++ builtin +++          " must be a postulated name"++  getName (A.Def q)          = return q+  getName (A.ScopedExpr _ e) = getName e+  getName _                  = err+ -- | Builtin constructors-builtinConstructors :: [(String, A.Expr -> TCM ())]+builtinConstructors :: [(String, A.Expr -> TCM Term)] builtinConstructors =   [ (builtinNil,       bindBuiltinNil               )   , (builtinCons,      bindBuiltinCons              )@@ -342,6 +366,14 @@   , (builtinRefl,      bindBuiltinRefl              )   , (builtinLevelZero, bindBuiltinLevelZero         )   , (builtinLevelSuc,  bindBuiltinLevelSuc          )+  , (builtinArgArg,    bindBuiltinDummyConstructor  )+  , (builtinAgdaTermVar,    bindBuiltinDummyConstructor  )+  , (builtinAgdaTermLam,    bindBuiltinDummyConstructor  )+  , (builtinAgdaTermDef,    bindBuiltinDummyConstructor  )+  , (builtinAgdaTermCon,    bindBuiltinDummyConstructor  )+  , (builtinAgdaTermPi,     bindBuiltinDummyConstructor  )+  , (builtinAgdaTermSort,    bindBuiltinDummyConstructor  )+  , (builtinAgdaTermUnsupported,    bindBuiltinDummyConstructor  )   ]  -- | Builtin postulates@@ -354,31 +386,24 @@  -- | Bind a builtin constructor. Pre-condition: argument is an element of --   'builtinConstructors'.-bindConstructor :: String -> (A.Expr -> TCM ()) -> A.Expr -> TCM ()-bindConstructor s bind (A.ScopedExpr scope e) = do+bindConstructor :: String -> (A.Expr -> TCM Term) -> A.Expr -> TCM ()+bindConstructor s check (A.ScopedExpr scope e) = do   setScope scope-  bindConstructor s bind e-bindConstructor s bind e@(A.Con _) = bind e-bindConstructor s _ e              = typeError $ BuiltinMustBeConstructor s e+  bindConstructor s check e+bindConstructor s check e@(A.Con _) = do+  t <- check e+  -- The constructor might have been eta expanded during type checking+  let name (Lam h b) = name (absBody b)+      name (Con c _) = Con c []+      name _         = __IMPOSSIBLE__+  bindBuiltinName s (name t)+bindConstructor s _ e               = typeError $ BuiltinMustBeConstructor s e  -- | Bind a builtin postulate. Pre-condition: argument is an element of --   'builtinPostulates'. bindPostulate :: String -> TCM Type -> A.Expr -> TCM ()-bindPostulate s typ e = do-  t <- typ-  v <- checkExpr e t--  let bad = typeError $ GenericError $ "The builtin " ++ s ++ " must be bound to a postulated identifier."--  case v of-    Def c []  -> ignoreAbstractMode $ do-      defn <- theDef <$> getConstInfo c-      case defn of-        Axiom{} -> return ()-        _       -> bad-    _         -> bad--  bindBuiltinName s v+bindPostulate builtin typ e = bindPostulatedName builtin e $ \q _ ->+  checkExpr (A.Def q) =<< typ  -- | Bind a builtin thing to an expression. bindBuiltin :: String -> A.Expr -> TCM ()@@ -389,10 +414,12 @@     where         bind b e             | elem b builtinTypes                        = bindBuiltinType b e-            | elem b [builtinList]                       = bindBuiltinType1 b e+            | elem b [builtinList,builtinArg]            = bindBuiltinType1 b e             | b == builtinEquality                       = bindBuiltinEquality e+            | b == builtinInf                            = bindBuiltinInf e+            | b == builtinSharp                          = bindBuiltinSharp e+            | b == builtinFlat                           = bindBuiltinFlat e             | Just bind  <- lookup b builtinConstructors = bindConstructor b bind e             | Just (s,v) <- lookup b builtinPrimitives   = bindBuiltinPrimitive s b e v             | Just typ   <- lookup b builtinPostulates   = bindPostulate b typ e             | otherwise                                  = typeError $ NoSuchBuiltinName b-
+ src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs view
@@ -0,0 +1,198 @@+------------------------------------------------------------------------+-- | Handling of the INFINITY, SHARP and FLAT builtins.+------------------------------------------------------------------------++{-# LANGUAGE CPP #-}++module Agda.TypeChecking.Rules.Builtin.Coinduction where++import Control.Applicative+import Control.Monad.Error++import qualified Data.Map as Map++import qualified Agda.Syntax.Abstract as A+import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.Syntax.Literal+import Agda.Syntax.Position++import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.Level+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Primitive+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Rules.Builtin+import Agda.TypeChecking.Rules.Term++import Agda.Utils.Impossible+import Agda.Utils.Permutation++#include "../../../undefined.h"++-- | The type of @&#x221e@.++typeOfInf :: TCM Type+typeOfInf = do+  kit <- requireLevels+  return $+    El Inf (Pi (argH $ El (Type (Lit (LitLevel noRange 0))) (levelType kit))+               (Abs "a" $ El (Type (levelSuc kit (Var 0 [])))+                             (Pi (argN $ El (Type (levelSuc kit (Var 0 [])))+                                            (Sort (Type (Var 0 []))))+                                 (Abs "A" $ El (Type (levelSuc kit (Var 1 [])))+                                               (Sort (Type (Var 1 [])))))))++-- | The type of @&#x266f_@.++typeOfSharp :: TCM Type+typeOfSharp = do+  kit <- requireLevels+  inf <- (\t -> case t of+                  Def q _ -> q+                  _       -> __IMPOSSIBLE__)+         <$> primInf+  return $+    El Inf (Pi (argH $ El (Type (Lit (LitLevel noRange 0))) (levelType kit))+               (Abs "a" $ El (Lub (Type (levelSuc kit (Var 0 []))) (Type (Var 0 [])))+                             (Pi (argH $ El (Type (levelSuc kit (Var 0 []))) (Sort (Type (Var 0 []))))+                                 (Abs "A" $ El (Type (Var 1 []))+                                               (Pi (argN $ El (Type (Var 1 [])) (Var 0 []))+                                                   (Abs "x" $ El (Type (Var 2 []))+                                                                 (Def inf [argH (Var 2 []), argN (Var 1 [])])))))))++-- | The type of @&#x266d@.++typeOfFlat :: TCM Type+typeOfFlat = do+  kit <- requireLevels+  inf <- (\t -> case t of+                  Def q _ -> q+                  _       -> __IMPOSSIBLE__)+         <$> primInf+  return $+    El Inf (Pi (argH $ El (Type (Lit (LitLevel noRange 0))) (levelType kit))+               (Abs "a" $ El (Lub (Type (levelSuc kit (Var 0 []))) (Type (Var 0 [])))+                             (Pi (argH $ El (Type (levelSuc kit (Var 0 []))) (Sort (Type (Var 0 []))))+                                 (Abs "A" $ El (Type (Var 1 []))+                                               (Fun (argN $ El (Type (Var 1 []))+                                                               (Def inf [argH (Var 1 []), argN (Var 0 [])]))+                                                    (El (Type (Var 1 [])) (Var 0 [])))))))++-- | Binds the INFINITY builtin, but does not change the type's+-- definition.++bindBuiltinInf :: A.Expr -> TCM ()+bindBuiltinInf e = bindPostulatedName builtinInf e $ \inf _ ->+  instantiateFull =<< checkExpr (A.Def inf) =<< typeOfInf++-- | Binds the SHARP builtin, and changes the definitions of INFINITY+-- and SHARP.++-- The following (no longer supported) definition is used:+--+-- codata &#x221e {a} (A : Set a) : Set a where+--   &#x266f_ : (x : A) → &#x221e A++bindBuiltinSharp :: A.Expr -> TCM ()+bindBuiltinSharp e =+  bindPostulatedName builtinSharp e $ \sharp sharpDefn -> do+    sharpE  <- instantiateFull =<< checkExpr (A.Def sharp) =<< typeOfSharp+    inf     <- primInf+    infDefn <- case inf of+      Def inf _ -> getConstInfo inf+      _         -> __IMPOSSIBLE__+    addConstant (defName infDefn) $+      infDefn { theDef = Datatype+                  { dataPars           = 2+                  , dataIxs            = 0+                  , dataInduction      = CoInductive+                  , dataClause         = Nothing+                  , dataCons           = [sharp]+                  , dataSort           = Type (Var 1 [])+                  , dataPolarity       = [Invariant, Invariant]+                  , dataArgOccurrences = [Unused, Positive]+                  , dataHsType         = Nothing+                  , dataAbstr          = ConcreteDef+                  }+              }+    addConstant sharp $+      sharpDefn { theDef = Constructor+                    { conPars   = 2+                    , conSrcCon = sharp+                    , conData   = defName infDefn+                    , conHsCode = Nothing+                    , conAbstr  = ConcreteDef+                    , conInd    = CoInductive+                    }+                }+    return sharpE++-- | Binds the FLAT builtin, and changes its definition.++-- The following (no longer supported) definition is used:+--+--   &#x266d : ∀ {a} {A : Set a} → &#x221e A → A+--   &#x266d (&#x266f x) = x++bindBuiltinFlat :: A.Expr -> TCM ()+bindBuiltinFlat e =+  bindPostulatedName builtinFlat e $ \flat flatDefn -> do+    flatE  <- instantiateFull =<< checkExpr (A.Def flat) =<< typeOfFlat+    sharp  <- (\t -> case t of+                 Def q _ -> q+                 _       -> __IMPOSSIBLE__)+              <$> primSharp+    kit    <- requireLevels+    let clause = Clause { clauseRange = noRange+                        , clauseTel   = ExtendTel (argH (El (Type (Lit (LitLevel noRange 0))) (Def (typeName kit) [])))+                                                  (Abs "a" (ExtendTel (argH (El (Type (Con (sucName kit) [argN (Var 0 [])]))+                                                                                (Sort (Type (Var 0 [])))))+                                                                      (Abs "A" (ExtendTel (argN (El (Type (Var 1 [])) (Var 0 [])))+                                                                                          (Abs "x" EmptyTel)))))+                        , clausePerm  = idP 3+                        , clausePats  = [ argH (VarP "a")+                                        , argH (VarP "A")+                                        , argN (ConP sharp Nothing [argN (VarP "x")])+                                        ]+                        , clauseBody  = Bind $ Abs "h0" $+                                        Bind $ Abs "h1" $+                                        Bind $ Abs "h2" $ Body (Var 0 [])+                        }+    addConstant flat $+      flatDefn { theDef = Function+                   { funClauses        = [Clauses Nothing clause]+                   , funCompiled       = Case 2 (Branches (Map.singleton sharp (Done 3 (Var 0 [])))+                                                          Map.empty+                                                          Nothing)+                   , funInv            = NotInjective+                   , funPolarity       = [Invariant, Invariant, Invariant]+                   , funArgOccurrences = [Unused, Unused, Positive]+                   , funAbstr          = ConcreteDef+                   , funDelayed        = NotDelayed+                   }+                }+    return flatE++-- | The coinductive primitives.++data CoinductionKit = CoinductionKit+  { nameOfInf   :: QName+  , nameOfSharp :: QName+  , nameOfFlat  :: QName+  }++-- | Tries to build a 'CoinductionKit'.++coinductionKit :: TCM (Maybe CoinductionKit)+coinductionKit = (do+  Def inf   _ <- primInf+  Def sharp _ <- primSharp+  Def flat  _ <- primFlat+  return $ Just $ CoinductionKit+    { nameOfInf   = inf+    , nameOfSharp = sharp+    , nameOfFlat  = flat+    })+    `catchError` \_ -> return Nothing
+ src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs-boot view
@@ -0,0 +1,15 @@+module Agda.TypeChecking.Rules.Builtin.Coinduction where++import Agda.Syntax.Abstract+import Agda.TypeChecking.Monad++bindBuiltinInf   :: Expr -> TCM ()+bindBuiltinSharp :: Expr -> TCM ()+bindBuiltinFlat  :: Expr -> TCM ()++data CoinductionKit+nameOfInf   :: CoinductionKit -> QName+nameOfSharp :: CoinductionKit -> QName+nameOfFlat  :: CoinductionKit -> QName++coinductionKit :: TCM (Maybe CoinductionKit)
src/full/Agda/TypeChecking/Rules/Data.hs view
@@ -21,6 +21,7 @@ import Agda.TypeChecking.Pretty import Agda.TypeChecking.Polarity import Agda.TypeChecking.Free+import Agda.TypeChecking.Forcing  import Agda.TypeChecking.Rules.Term ( isType_ ) @@ -39,11 +40,14 @@  -- | Type check a datatype definition. Assumes that the type has already been --   checked.-checkDataDef :: Info.DefInfo -> Induction -> QName -> [A.LamBinding] -> [A.Constructor] -> TCM ()-checkDataDef i ind name ps cs =+checkDataDef :: Info.DefInfo -> QName -> [A.LamBinding] -> [A.Constructor] -> TCM ()+checkDataDef i name ps cs =     traceCall (CheckDataDef (getRange i) (qnameName name) ps cs) $ do -- TODO!! (qnameName) 	let npars = size ps +        -- Add the datatype module+        addSection (qnameToMName name) 0+ 	-- Look up the type of the datatype. 	t <- instantiateFull =<< typeOfConst name @@ -78,7 +82,7 @@ 	    -- Change the datatype from an axiom to a datatype with no constructors.             let dataDef = Datatype { dataPars           = npars                                    , dataIxs            = nofIxs-                                   , dataInduction      = ind+                                   , dataInduction      = Inductive                                    , dataClause         = Nothing                                    , dataCons           = []     -- Constructors are added later 				   , dataSort           = s@@ -92,7 +96,7 @@ 	      addConstant name ( Defn name t (defaultDisplayForm name) 0 dataDef )  	    -- Check the types of the constructors-	    mapM_ (checkConstructor name tel' nofIxs s ind) cs+	    mapM_ (checkConstructor name tel' nofIxs s) cs  	    -- Return the data definition 	    return dataDef@@ -123,7 +127,7 @@ 	cname _			   = __IMPOSSIBLE__ -- constructors are axioms  	hideTel  EmptyTel		  = EmptyTel-	hideTel (ExtendTel (Arg _ t) tel) = ExtendTel (Arg Hidden t) $ hideTel <$> tel+	hideTel (ExtendTel (Arg _ r t) tel) = ExtendTel (Arg Hidden r t) $ hideTel <$> tel  	splitType (El _ (Pi _ b))  = ((+ 1) -*- id) <$> splitType (absBody b) 	splitType (El _ (Fun _ b)) = ((+ 1) -*- raise 1) <$> splitType b@@ -133,52 +137,57 @@ -- | Type check a constructor declaration. Checks that the constructor targets --   the datatype and that it fits inside the declared sort. checkConstructor :: QName -> Telescope -> Nat -> Sort-                 -> Induction -- ^ Is the constructor inductive or coinductive?                  -> A.Constructor -> TCM ()-checkConstructor d tel nofIxs s ind (A.ScopedDecl scope [con]) = do+checkConstructor d tel nofIxs s (A.ScopedDecl scope [con]) = do   setScope scope-  checkConstructor d tel nofIxs s ind con-checkConstructor d tel nofIxs s ind con@(A.Axiom i c e) =+  checkConstructor d tel nofIxs s con+checkConstructor d tel nofIxs s con@(A.Axiom i c e) =     traceCall (CheckConstructor d tel s con) $ do 	t <- isType_ e 	n <- size <$> getContextTelescope-	reportSDoc "tc.data.con" 15 $ vcat-          [ sep [ text "checking that"-                , nest 2 $ prettyTCM t-                , text "ends in" <+> prettyTCM d-                ]-	  , nest 2 $ text "nofPars =" <+> text (show n)-          ]+        debugEndsIn t d n 	constructs n t d-	reportSDoc "tc.data.con" 15 $ sep-          [ text "checking that the type fits in"-          , nest 2 $ prettyTCM s-          ]+        debugFitsIn s 	t `fitsIn` s+        t' <- addForcingAnnotations t 	escapeContext (size tel) 	    $ addConstant c-	    $ Defn c (telePi tel t) (defaultDisplayForm c) 0-	    $ Constructor (size tel) c d Nothing (Info.defAbstract i) ind-checkConstructor _ _ _ _ _ _ = __IMPOSSIBLE__ -- constructors are axioms+	    $ Defn c (telePi tel t') (defaultDisplayForm c) 0+	    $ Constructor (size tel) c d Nothing (Info.defAbstract i) Inductive+  where+    debugEndsIn t d n =+      reportSDoc "tc.data.con" 15 $ vcat+        [ sep [ text "checking that"+              , nest 2 $ prettyTCM t+              , text "ends in" <+> prettyTCM d+              ]+        , nest 2 $ text "nofPars =" <+> text (show n)+        ]+    debugFitsIn s =+      reportSDoc "tc.data.con" 15 $ sep+        [ text "checking that the type fits in"+        , nest 2 $ prettyTCM s+        ]+checkConstructor _ _ _ _ _ = __IMPOSSIBLE__ -- constructors are axioms   -- | Bind the parameters of a datatype. The bindings should be domain free. bindParameters :: [A.LamBinding] -> Type -> (Telescope -> Type -> TCM a) -> TCM a bindParameters [] a ret = ret EmptyTel a-bindParameters (A.DomainFree h x : ps) (El _ (Pi (Arg h' a) b)) ret+bindParameters (A.DomainFree h x : ps) (El _ (Pi (Arg h' Relevant a) b)) ret     | h /= h'	= 	__IMPOSSIBLE__     | otherwise = addCtx x arg $ bindParameters ps (absBody b) $ \tel s -> 		    ret (ExtendTel arg $ Abs (show x) tel) s   where-    arg = Arg h a-bindParameters (A.DomainFree h x : ps) (El _ (Fun (Arg h' a) b)) ret+    arg = Arg h Relevant a+bindParameters (A.DomainFree h x : ps) (El _ (Fun (Arg h' Relevant a) b)) ret     | h /= h'	= 	__IMPOSSIBLE__     | otherwise = addCtx x arg $ bindParameters ps (raise 1 b) $ \tel s -> 		    ret (ExtendTel arg $ Abs (show x) tel) s   where-    arg = Arg h a+    arg = Arg h Relevant a bindParameters _ _ _ = __IMPOSSIBLE__  @@ -197,12 +206,12 @@   -- to be indexed by the universe level. --   noConstraints $ s' `leqSort` s   case funView $ unEl t of-    FunV arg@(Arg h a) _ -> do+    FunV arg@(Arg h r a) _ -> do       let s' = getSort a       cs <- s' `leqSort` s       addConstraints cs       x <- freshName_ (argName t)-      let v  = Arg h $ Var 0 []+      let v  = Arg h r $ Var 0 []           t' = piApply (raise 1 t) [v]       addCtx x arg $ fitsIn t' (raise 1 s)     _		     -> return ()@@ -230,7 +239,7 @@  	checkParams n vs = zipWithM_ sameVar (map unArg vs) ps 	    where-		ps = reverse [ i | (i,Arg h _) <- zip [n..] vs ]+		ps = reverse [ i | (i,_) <- zip [n..] vs ]  		sameVar v i = do 		    t <- typeOfBV i@@ -249,7 +258,7 @@ 	MetaV m vs	    -> do 	    Defn _ t _ _ Datatype{dataSort = s} <- getConstInfo d 	    ps <- newArgsMeta t-	    noConstraints $ equalType (El s0 t') (El s (Def d ps)) -- TODO: too strict?+	    noConstraints $ leqType (El s0 t') (El s (Def d ps)) -- TODO: need equalType? 	    reduce $ El s0 t' 	_ -> typeError $ ShouldBeApplicationOf (El s0 t) d @@ -278,3 +287,4 @@     Fun   {} -> return (Just False)     Sort  {} -> return (Just False)     MetaV {} -> return Nothing+    DontCare -> __IMPOSSIBLE__
src/full/Agda/TypeChecking/Rules/Decl.hs view
@@ -25,6 +25,7 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Reduce import Agda.TypeChecking.SizedTypes+import Agda.TypeChecking.Forcing  import Agda.TypeChecking.Rules.Term import Agda.TypeChecking.Rules.Data    ( checkDataDef )@@ -50,7 +51,7 @@ checkDecl d = do     case d of 	A.Axiom i x e		     -> checkAxiom i x e-        A.Field _ _ _ _              -> typeError FieldOutsideRecord+        A.Field{}                    -> typeError FieldOutsideRecord 	A.Primitive i x e	     -> checkPrimitive i x e 	A.Definition i ts ds	     -> checkMutual i ts ds 	A.Section i x tel ds	     -> checkSection i x tel ds@@ -72,6 +73,8 @@     [ text "checked axiom"     , nest 2 $ prettyTCM x <+> text ":" <+> (prettyTCM =<< instantiateFull t)     ]+  -- Not safe. See Issue 330+  -- t <- addForcingAnnotations t   addConstant x (Defn x t (defaultDisplayForm x) 0 $ Axiom Nothing)   solveSizeConstraints @@ -153,6 +156,15 @@               addHaskellCode x ty hs             _   -> typeError $ GenericError "COMPILED directive only works on postulates." 	A.OptionsPragma _   -> __IMPOSSIBLE__	-- not allowed here+        A.EtaPragma r -> modifySignature eta+          where+            eta sig = sig { sigDefinitions = Map.adjust setEta r defs }+              where+                setEta def = def { theDef = setEtad $ theDef def }+                setEtad d   = case d of+                  Record{}   -> d { recEtaEquality = True }+                  _          -> d+                defs	  = sigDefinitions sig  -- | Type check a bunch of mutual inductive recursive definitions. checkMutual :: Info.DeclInfo -> [A.TypeSignature] -> [A.Definition] -> TCM ()@@ -180,7 +192,7 @@ checkDefinition d =     case d of 	A.FunDef i x cs          -> abstract (Info.defAbstract i) $ checkFunDef NotDelayed i x cs-	A.DataDef i x ind ps cs  -> abstract (Info.defAbstract i) $ checkDataDef i ind x ps cs+	A.DataDef i x ps cs      -> abstract (Info.defAbstract i) $ checkDataDef i x ps cs 	A.RecDef i x c ps tel cs -> abstract (Info.defAbstract i) $ checkRecDef i x c ps tel cs         A.ScopedDef scope d      -> setScope scope >> checkDefinition d     where@@ -192,7 +204,7 @@ -- | Type check a module. checkSection :: Info.ModuleInfo -> ModuleName -> A.Telescope -> [A.Declaration] -> TCM () checkSection i x tel ds =-  checkTelescope tel $ \tel' -> do+  checkTelescope_ tel $ \tel' -> do     addSection x (size tel')     verboseS "tc.section.check" 10 $ do       dx   <- prettyTCM x@@ -209,7 +221,7 @@      check eta []             = return eta     check EmptyTel (_:_)     = bad-    check (ExtendTel (Arg h _) (Abs y tel)) args0@(Arg h' (Named name _) : args) =+    check (ExtendTel (Arg h _ _) (Abs y tel)) args0@(Arg h' _ (Named name _) : args) =       case (h, h', name) of         (Hidden, NotHidden, _)    -> check tel args0         (Hidden, Hidden, Nothing) -> check tel args@@ -225,7 +237,7 @@   Map QName QName -> Map ModuleName ModuleName -> TCM () checkSectionApplication i m1 ptel m2 args rd rm =   traceCall (CheckSectionApplication (getRange i) m1 ptel m2 args) $-  checkTelescope ptel $ \ptel -> do+  checkTelescope_ ptel $ \ptel -> do   tel <- lookupSection m2   vs  <- freeVarsToApply $ qnameFromList $ mnameToList m2   let tel' = apply tel vs
src/full/Agda/TypeChecking/Rules/Def.hs view
@@ -41,8 +41,10 @@ import Agda.TypeChecking.Injectivity import Agda.TypeChecking.Polarity import Agda.TypeChecking.SizedTypes+import Agda.TypeChecking.RecordPatterns+import Agda.TypeChecking.CompiledClause -import Agda.TypeChecking.Rules.Term                ( checkExpr, inferExpr, checkTelescope, isType_ )+import Agda.TypeChecking.Rules.Term                ( checkExpr, inferExpr, checkTelescope_, isType_ ) import Agda.TypeChecking.Rules.LHS                 ( checkLeftHandSide ) import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl ( checkDecls ) import Agda.TypeChecking.Rules.Data                ( isCoinductive )@@ -86,18 +88,23 @@         cs <- mapM check cs          -- Check that all clauses have the same number of arguments-        unless (allEqual $ map npats cs) $ typeError DifferentArities+        unless (allEqual $ map (npats . translatedClause) cs) $+               typeError DifferentArities          -- Annotate the clauses with which arguments are actually used.-        cs <- mapM rebindClause cs+        cs <- instantiateFull =<< mapM rebindClause cs          -- Check if the function is injective-        inv <- checkInjectivity name cs+        inv <- checkInjectivity name $ map translatedClause cs +        -- Compile the clauses+        let cc = compileClauses cs+         -- Add the definition         addConstant name $ Defn name t (defaultDisplayForm name) 0                          $ Function                             { funClauses        = cs+                            , funCompiled       = cc                             , funDelayed        = delayed                             , funInv            = inv                             , funAbstr          = Info.defAbstract i@@ -105,13 +112,16 @@                             , funArgOccurrences = []                             }         computePolarity name-        verboseS "tc.def.fun" 10 $ do-          dx <- prettyTCM name-          t' <- prettyTCM . defType =<< getConstInfo name-          liftIO $ LocIO.putStrLn $ "added " ++ show dx ++ " : " ++ show t'+        reportSDoc "tc.def.fun" 10 $ do+          sep [ text "added " <+> prettyTCM name <+> text ":"+              , nest 2 $ prettyTCM . defType =<< getConstInfo name+              ]          -- Check pattern coverage         checkCoverage name++        reportSLn "tc.def.fun.compile" 10 $+          "compiled clauses for " ++ show name ++ ":\n" ++ show cc     where         npats = size . clausePats @@ -119,7 +129,7 @@ -- | 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 x aps ps) rhs ds) +    where insertToClause (A.Clause (A.LHS i x aps ps) rhs ds) --              = A.Clause (A.LHS i x (aps ++ map (Arg NotHidden . unnamed) pats) (ps)) (insertPatterns pats rhs) ds               = A.Clause (A.LHS i x aps (pats ++ ps)) (insertPatterns pats rhs) ds insertPatterns pats (A.RewriteRHS qs eqs rhs wh) = A.RewriteRHS qs eqs (insertPatterns pats rhs) wh@@ -141,7 +151,7 @@                      [A.Clause]     -- the given clauses for the with function  -- | Type check a function clause.-checkClause :: Type -> A.Clause -> TCM Clause+checkClause :: Type -> A.Clause -> TCM Clauses checkClause t c@(A.Clause (A.LHS i x aps []) rhs0 wh) =     traceCall (CheckClause t c) $     checkLeftHandSide c aps t $ \gamma delta sub xs ps t' perm -> do@@ -168,40 +178,42 @@                      t' <- reduce =<< instantiateFull t                      equality <- primEquality >>= \eq -> return $ case eq of                         Lam Hidden (Abs _ (Def equality _)) -> equality+                        Def equality _                      -> equality                         _                                   -> __IMPOSSIBLE__                      reflCon <- primRefl >>= \refl -> return $ case refl of-                         Lam Hidden (Abs _typ (Lam Hidden (Abs _val (Con reflCon [])))) -> reflCon-                         _ -> __IMPOSSIBLE__+                         Con reflCon [] -> reflCon+                         _              -> __IMPOSSIBLE__                      (rewriteType,rewriteFrom,rewriteTo) <- case t' of-                         El _Set0 (Def equality' [Arg Hidden rewriteType,-                                                  Arg NotHidden rewriteFrom, Arg NotHidden rewriteTo])+                         El _Set0 (Def equality' [Arg Hidden Relevant rewriteType,+                                                  Arg NotHidden Relevant rewriteFrom, Arg NotHidden Relevant rewriteTo])                             | equality' == equality ->                               return (rewriteType, rewriteFrom, rewriteTo)                          -- Universe polymorphic equality-                         El _Set0 (Def equality' [_level,Arg Hidden rewriteType,-                                                  Arg NotHidden rewriteFrom, Arg NotHidden rewriteTo])+                         El _Set0 (Def equality' [_level, Arg Hidden Relevant rewriteType,+                                                  Arg NotHidden Relevant rewriteFrom, Arg NotHidden Relevant rewriteTo])                             | equality' == equality ->                               return (rewriteType, rewriteFrom, rewriteTo)                          _ -> do                           err <- text "Cannot rewrite by equation of type" <+> prettyTCM t'                           typeError $ GenericError $ show err-                         +                      let info = PatRange noRange                          metaInfo = Info.MetaInfo noRange emptyScopeInfo Nothing                          underscore = A.Underscore metaInfo-                         -                     [rewriteFromExpr,rewriteToExpr,rewriteTypeExpr, proofExpr] <- setShowImplicitArguments True $ reify-                      [rewriteFrom,   rewriteTo,    rewriteType    , proof]++                     [rewriteFromExpr,rewriteToExpr,rewriteTypeExpr, proofExpr] <-+                      disableDisplayForms $ setShowImplicitArguments True $ reify+                        [rewriteFrom,   rewriteTo,    rewriteType    , proof]                      let (inner, outer) -- the where clauses should go on the inner-most with                            | null eqs  = ([], wh)                            | otherwise = (wh, [])-                         newRhs = A.WithRHS qname [rewriteFromExpr, proofExpr] +                         newRhs = A.WithRHS qname [rewriteFromExpr, proofExpr]                                   [A.Clause (A.LHS i x aps pats)                                     (A.RewriteRHS names eqs (insertPatterns pats rhs) inner)                                     outer]                          pats = [A.DotP info underscore, -- rewriteToExpr,                                  A.ConP info (AmbQ [reflCon]) []]-                     reportSDoc "tc.rewrite.top" 25 $ vcat +                     reportSDoc "tc.rewrite.top" 25 $ vcat                                          [ text "from = " <+> prettyTCM rewriteFromExpr,                                            text "to = " <+> prettyTCM rewriteToExpr,                                            text "typ = " <+> prettyTCM rewriteType,@@ -211,7 +223,8 @@                 A.WithRHS aux es cs -> do                   -- Infer the types of the with expressions                   vas <- mapM inferExpr es-                  (vs, as) <- instantiateFull $ unzip vas+                  (vs0, as) <- instantiateFull (unzip vas)+                  (vs, as)  <- normalise (vs0, as)                    -- Invent a clever name for the with function                   m <- currentModule@@ -219,7 +232,7 @@                    -- Split the telescope into the part needed to type the with arguments                   -- and all the other stuff-                  let fv = allVars $ freeVars vs+                  let fv = allVars $ freeVars (vs, as)                       SplitTel delta1 delta2 perm' = splitTelescope fv delta                       finalPerm = composeP perm' perm @@ -227,16 +240,18 @@                     [ text "delta  =" <+> prettyTCM delta                     , text "delta1 =" <+> prettyTCM delta1                     , text "delta2 =" <+> addCtxTel delta1 (prettyTCM delta2)+                    , text "vs     =" <+> prettyTCM vs+                    , text "as     =" <+> prettyTCM as                     ]                    -- Create the body of the original function                   ctx <- getContextTelescope                   let n    = size ctx                       m    = size delta-                      us   = [ Arg h (Var i []) | (i, Arg h _) <- zip [n - 1,n - 2..0] $ telToList ctx ]+                      us   = [ Arg h r (Var i []) | (i, Arg h r _) <- zip [n - 1,n - 2..0] $ telToList ctx ]                       (us0, us1') = genericSplitAt (n - m) us                       (us1, us2)  = genericSplitAt (size delta1) $ permute perm' us1'-                      v    = Def aux $ us0 ++ us1 ++ (map (Arg NotHidden) vs) ++ us2+                      v    = Def aux $ us0 ++ us1 ++ (map defaultArg vs0) ++ us2                    -- We need Δ₁Δ₂ ⊢ t'                   t' <- return $ rename (reverseP perm') t'@@ -254,28 +269,32 @@                     , text "           context" <+> (prettyTCM =<< getContextTelescope)                     , text "             delta" <+> prettyTCM delta                     , text "                fv" <+> text (show fv)+                    , text "              body" <+> (addCtxTel delta $ prettyTCM $ mkBody v)                     ]                    return (mkBody v, WithFunction x aux gamma delta1 delta2 vs as t' ps finalPerm cs)           in handleRHS rhs0       escapeContext (size delta) $ checkWithFunction with -      reportSDoc "tc.lhs.top" 10 $ vcat-        [ text "Final clause:"+      reportSDoc "tc.lhs.top" 10 $ escapeContext (size delta) $ vcat+        [ text "Clause before translation:"         , nest 2 $ vcat           [ text "delta =" <+> prettyTCM delta           , text "perm  =" <+> text (show perm)           , text "ps    =" <+> text (show ps)           , text "body  =" <+> text (show body)+          , text "body  =" <+> prettyTCM body           ]         ]-      return $ Clause { clauseRange = getRange i-                      , clauseTel   = killRange delta  -- TODO: make sure delta and perm are what we want-                      , clausePerm  = perm-                      , clausePats  = ps-                      , clauseBody  = body-                      } +      translateRecordPatterns $+        Clause { clauseRange = getRange i+               , clauseTel   = killRange delta+               , clausePerm  = perm+               , clausePats  = ps+               , clauseBody  = body+               }+ checkClause t (A.Clause (A.LHS _ _ _ ps@(_ : _)) _ _) = typeError $ UnexpectedWithPatterns ps  checkWithFunction :: WithFunctionProblem -> TCM ()@@ -288,8 +307,8 @@       [ text "delta1 =" <+> prettyTCM delta1       , text "delta2 =" <+> prettyTCM delta2       , text "gamma  =" <+> prettyTCM gamma-      , text "as     =" <+> prettyTCM as-      , text "vs     =" <+> prettyTCM vs+      , text "as     =" <+> addCtxTel delta1 (prettyTCM as)+      , text "vs     =" <+> addCtxTel delta1 (prettyTCM vs)       , text "b      =" <+> prettyTCM b       , text "qs     =" <+> text (show qs)       , text "perm   =" <+> text (show perm)@@ -339,7 +358,7 @@   checkFunDef NotDelayed info aux cs    where-    info = Info.mkDefInfo (nameConcrete $ qnameName aux) defaultFixity PublicAccess ConcreteDef (getRange cs)+    info = Info.mkDefInfo (nameConcrete $ qnameName aux) defaultFixity' PublicAccess ConcreteDef (getRange cs)  -- | Type check a where clause. The first argument is the number of variables --   bound in the left hand side.@@ -347,7 +366,7 @@ checkWhere _ []                      ret = ret checkWhere n [A.ScopedDecl scope ds] ret = withScope_ scope $ checkWhere n ds ret checkWhere n [A.Section _ m tel ds]  ret = do-  checkTelescope tel $ \tel' -> do+  checkTelescope_ tel $ \tel' -> do     reportSDoc "tc.def.where" 10 $       text "adding section:" <+> prettyTCM m <+> text (show (size tel')) <+> text (show n)     addSection m (size tel' + n)  -- the variables bound in the lhs@@ -620,6 +639,6 @@             Con c _ -> return c             Lam h b -> do                 x <- freshName_ $ absName b-                addCtx x (Arg h $ sort Prop) $ stripLambdas (absBody b)+                addCtx x (Arg h Relevant $ sort Prop) $ stripLambdas (absBody b)             _       -> typeError $ GenericError $ "Not a constructor: " ++ show c 
src/full/Agda/TypeChecking/Rules/LHS.hs view
@@ -3,6 +3,8 @@ module Agda.TypeChecking.Rules.LHS where  import Data.Maybe+import qualified Data.List as List+ import Control.Applicative import Control.Monad @@ -15,8 +17,10 @@  import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Records -- isRecord import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Substitute hiding (Substitution)+import Agda.TypeChecking.Telescope import Agda.TypeChecking.Conversion import Agda.TypeChecking.Constraints import Agda.TypeChecking.Primitive (constructorForm)@@ -107,29 +111,29 @@     merge Nothing   ps = ps     merge (Just qs) ps = zipWith mergeA qs ps       where-        mergeA (Arg h p) (Arg _ q) = Arg h $ mergeP p q+        mergeA a1 a2 = a1 { unArg = mergeP (unArg a1) (unArg a2) }         mergeP (DotP s)  (DotP t)-          | s == t                 = DotP s-          | otherwise              = __IMPOSSIBLE__-        mergeP (DotP t)  (VarP _)  = DotP t-        mergeP (VarP _)  (DotP t)  = DotP t-        mergeP (DotP _)  _         = __IMPOSSIBLE__-        mergeP _         (DotP _)  = __IMPOSSIBLE__-        mergeP (ConP c1 ps) (ConP c2 qs)-          | c1 == c2               = ConP (c1 `withRangeOf` c2) $ zipWith mergeA ps qs-          | otherwise              = __IMPOSSIBLE__+          | s == t                    = DotP s+          | otherwise                 = __IMPOSSIBLE__+        mergeP (DotP t)  (VarP _)     = DotP t+        mergeP (VarP _)  (DotP t)     = DotP t+        mergeP (DotP _)  _            = __IMPOSSIBLE__+        mergeP _         (DotP _)     = __IMPOSSIBLE__+        mergeP (ConP c1 mt1 ps) (ConP c2 mt2 qs)+          | c1 == c2                  = ConP (c1 `withRangeOf` c2) (mplus mt1 mt2) $ zipWith mergeA ps qs+          | otherwise                 = __IMPOSSIBLE__         mergeP (LitP l1) (LitP l2)-          | l1 == l2               = LitP (l1 `withRangeOf` l2)-          | otherwise              = __IMPOSSIBLE__+          | 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__+          | 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__  -- | Check if a problem is solved. That is, if the patterns are all variables. isSolvedProblem :: Problem -> Bool@@ -201,6 +205,7 @@       Lam   {} -> __IMPOSSIBLE__       Lit   {} -> __IMPOSSIBLE__       Con   {} -> __IMPOSSIBLE__+      DontCare -> __IMPOSSIBLE__  -- | Check that a dot pattern matches it's instantiation. checkDotPattern :: DotPatternInst -> TCM Constraints@@ -255,7 +260,7 @@ useNamesFromPattern ps = telFromList . zipWith ren (toPats ps ++ repeat dummy) . telToList   where     dummy = A.WildP __IMPOSSIBLE__-    ren (A.VarP x) (Arg NotHidden (_, a)) = Arg NotHidden (show x, a)+    ren (A.VarP x) (Arg NotHidden r (_, a)) = Arg NotHidden r (show x, a)     ren _ a = a     toPats = map (namedThing . unArg) @@ -272,8 +277,7 @@      -- ^ Continuation.   -> TCM a checkLeftHandSide c ps a ret = do-  a <- normalise a-  let TelV tel0' b0 = telView a+  TelV tel0' b0 <- telView a   ps <- insertImplicitPatterns ps tel0'   unless (size tel0' >= size ps) $ typeError $ TooManyArgumentsInLHS (size ps) a   let tel0     = useNamesFromPattern ps tel0'@@ -290,7 +294,7 @@     vcat [ text "checking lhs:" 	 , nest 2 $ vcat 	   [ text "ps    =" <+> fsep (map prettyA ps)-	   , text "a     =" <+> prettyTCM a+	   , text "a     =" <+> (prettyTCM =<< normalise a) 	   , text "a'    =" <+> prettyTCM (telePi tel0  b0) 	   , text "a''   =" <+> prettyTCM (telePi tel0' b0)            , text "xs    =" <+> text (show $ map (fst . unArg) as)@@ -306,8 +310,7 @@   (Problem ps (perm, qs) delta, sigma, dpi, asb) <- checkLHS problem idsub [] []   let b' = substs sigma b -  noPatternMatchingOnCodata $-    zip (map (not . (== "_") . fst . unArg) as) qs+  noPatternMatchingOnCodata qs    reportSDoc "tc.lhs.top" 10 $     vcat [ text "checked lhs:"@@ -329,7 +332,7 @@      let rho = renamingR perm -- I'm not certain about this...         Perm n _ = perm-        xs  = replicate (fromIntegral n) "h"+        xs  = [ "h" ++ show n | n <- [0..n - 1] ]     ret gamma delta rho xs qs b' perm   where     checkLHS :: Problem -> [Term] -> [DotPatternInst] -> [AsBinding] ->@@ -347,7 +350,7 @@           Left (SplitPanic err) -> __IMPOSSIBLE__            -- Split on literal pattern-          Right (Split p0 xs (Arg h (LitFocus lit iph hix a)) p1) -> do+          Right (Split p0 xs (Arg _ _ (LitFocus lit iph hix a)) p1) -> do              -- plug the hole with a lit pattern             let ip    = plugHole (LitP lit) iph@@ -374,7 +377,7 @@             checkLHS problem' sigma' dpi' asb'            -- Split on constructor pattern-          Right (Split p0 xs (Arg h+          Right (Split p0 xs (Arg h rel                   ( Focus { focusCon      = c                           , focusConArgs  = qs                           , focusRange    = r@@ -383,6 +386,7 @@                           , focusDatatype = d                           , focusParams   = vs                           , focusIndices  = ws+                          , focusType     = a                           }                   )) p1                 ) -> traceCall (CheckPattern (A.ConP (PatRange r) (A.AmbQ [c]) qs)@@ -390,16 +394,20 @@                                              (El Prop $ Def d $ vs ++ ws)) $ do              let delta1 = problemTel p0+            let typeOfSplitVar = Arg h rel a              reportSDoc "tc.lhs.top" 10 $ sep               [ text "checking lhs"               , nest 2 $ text "tel =" <+> prettyTCM (problemTel problem)+              , nest 2 $ text "rel =" <+> (text $ show rel)               ]              reportSDoc "tc.lhs.split" 15 $ sep               [ 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)                 ]               ]@@ -415,14 +423,29 @@               ]              -- Lookup the type of the constructor at the given parameters-            a <- normalise =<< (`piApply` vs) . defType <$> getConstInfo c+            a <- (`piApply` vs) . defType <$> getConstInfo c              -- It will end in an application of the datatype-            let TelV gamma' ca@(El _ (Def d' us)) = telView a+            TelV gamma' ca@(El _ (Def d' us)) <- telView a              -- This should be the same datatype as we split on             unless (d == d') $ typeError $ ShouldBeApplicationOf ca d' +{-+            reportSDoc "tc.lhs.top" 20 $ nest 2 $ vcat+              [ text "gamma' =" <+> text (show gamma')+              ]+-}++            -- Andreas 2010-09-07  propagate relevance info to new vars+            gamma' <- return $ if rel == Irrelevant then+                                fmap makeIrrelevant gamma'+                               else gamma'+{-+            reportSDoc "tc.lhs.top" 20 $ nest 2 $ vcat+              [ text "gamma' =" <+> text (show gamma')+              ]+-}             -- Insert implicit patterns             qs' <- insertImplicitPatterns qs gamma' @@ -432,7 +455,7 @@             let gamma = useNamesFromPattern qs' gamma'              -- Get the type of the datatype.-            da <- normalise =<< (`piApply` vs) . defType <$> getConstInfo d+            da <- (`piApply` vs) . defType <$> getConstInfo d              -- Compute the flexible variables             let flex = flexiblePatterns (problemInPat p0 ++ qs')@@ -475,9 +498,18 @@                 , text "asb0 = " <+> brackets (fsep $ punctuate comma $ map prettyTCM asb0)                 ] +            -- Andreas, 2010-09-09, save the type a of record pattern.+            -- 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).+            storedPatternType <- ifM (isRecord d)+              (return $ Just $ raise (1 + size delta2) $ typeOfSplitVar)+              (return $ Nothing)+             -- Plug the hole in the out pattern with c ys             let ysp = map (fmap (VarP . fst)) $ telToList gamma-                ip  = plugHole (ConP c ysp) iph+                ip  = plugHole (ConP c storedPatternType ysp) iph                 ip0 = substs rho0 ip              -- Δ₁Γ ⊢ sub0, we need something in Δ₁ΓΔ₂@@ -490,9 +522,12 @@             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  =" <+> text (show ip)-              , text "ip0  = " <+> text (show ip0)+              , text "ip   =" <+> text (show ip)+              , text "ip0  =" <+> text (show ip0)               ]+            reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat+              [ text "rho0 =" <+> text (show $ take (size delta1 + size gamma + size delta2) rho0)+              ]  -- Andreas, this is showing some inital segment of rho0, not necessarily the most meaningful one              -- Instantiate the new telescope with the given substitution             (delta', perm, rho, instTypes) <- instantiateTel sub newTel@@ -508,6 +543,11 @@                    , 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)                 newDpi = dotPatternInsts ps0' (substs rho sub) instTypes@@ -568,22 +608,22 @@             -- Continue splitting             checkLHS problem' sigma' dpi' asb' --- Ensures that we are not performing dependent pattern matching on--- codata.+-- Ensures that we are not performing pattern matching on codata.  noPatternMatchingOnCodata   :: MonadTCM tcm-  => [(Bool, Arg Pattern)]  -- ^ True stands for dependent pattern matching.+  => [Arg Pattern]   -> tcm ()-noPatternMatchingOnCodata = mapM_ check . map (unArg . snd) . filter fst+noPatternMatchingOnCodata = mapM_ (check . unArg)   where   check (VarP {})   = return ()   check (DotP {})   = return ()   check (LitP {})   = return ()  -- Literals are assumed not to be coinductive.-  check (ConP q ps) = do-    TelV _ t <- telView . defType <$> getConstInfo q+  check (ConP q _ ps) = do+    TelV _ t <- telView' . defType <$> getConstInfo q     c <- isCoinductive t     case c of       Nothing    -> __IMPOSSIBLE__       Just False -> mapM_ (check . unArg) ps-      Just True  -> typeError DependentPatternMatchingOnCodata+      Just True  -> typeError $+        GenericError "Pattern matching on codata is not allowed"
src/full/Agda/TypeChecking/Rules/LHS/Implicit.hs view
@@ -47,7 +47,7 @@       Just n	-> insertImplicitPatterns (replicate n implicitP ++ p : ps) tel       Nothing	-> (p :) <$> insertImplicitPatterns ps (absBody tel')   where-    dummy = Arg NotHidden $ unnamed ()+    dummy = defaultArg $ unnamed ()      insImp x tel = case insertImplicit x $ map (fmap fst) $ telToList tel of       BadImplicits   -> typeError $ WrongHidingInLHS (telePi tel $ sort Prop)@@ -55,5 +55,5 @@       ImpInsert n    -> return $ Just n       NoInsertNeeded -> return Nothing -    implicitP = Arg Hidden . unnamed . A.ImplicitP . PatRange $ noRange+    implicitP = Arg Hidden Relevant . unnamed . A.ImplicitP . PatRange $ noRange 
src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs view
@@ -7,7 +7,7 @@ import qualified Agda.Syntax.Abstract as A  import Agda.TypeChecking.Monad-import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Substitute hiding (Substitution) import Agda.TypeChecking.Free import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce@@ -32,7 +32,7 @@    reportSDoc "tc.lhs.inst" 10 $ sep     [ text "instantiateTel "-    , nest 2 $ fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) s+    , nest 2 $ addCtxTel tel $ fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) s     , nest 2 $ prettyTCM tel     ] 
src/full/Agda/TypeChecking/Rules/LHS/Problem.hs view
@@ -30,6 +30,7 @@ 			      , focusDatatype :: QName 			      , focusParams   :: [Arg Term] 			      , focusIndices  :: [Arg Term]+                              , focusType     :: Type -- type of variable we are splitting, kept for record patterns (Andreas, 2010-09-09) 			      } 		    | LitFocus Literal OneHolePatterns Int Type data SplitProblem   = Split ProblemPart [Name] (Arg Focus) (Abs ProblemPart)
src/full/Agda/TypeChecking/Rules/LHS/Split.hs view
@@ -51,7 +51,7 @@           Con z _ <- primZero           Con s _ <- primSuc           let zero  = A.ConP info (A.AmbQ [setRange r z]) []-              suc p = A.ConP info (A.AmbQ [setRange r s]) [Arg NotHidden $ unnamed p]+              suc p = A.ConP info (A.AmbQ [setRange r s]) [defaultArg $ unnamed p]               info  = A.PatRange r               p'    = foldr ($) zero $ genericReplicate n suc           return $ foldr (A.AsP info) p' xs@@ -73,7 +73,10 @@     splitP (p : ps) ((i, q) : qs) tel0@(ExtendTel a tel) = do       p <- lift $ expandLitPattern p       case asView $ namedThing $ unArg p of-	(xs, A.LitP lit)  -> do+	(xs, p@(A.LitP lit))  -> do+          -- Andreas, 2010-09-07 cannot split on irrelevant args+          when (argRelevance a == Irrelevant) $+            typeError $ SplitOnIrrelevant p a 	  b <- lift $ litType lit 	  ok <- lift $ do 	      noConstraints (equalType (unArg a) b)@@ -91,14 +94,26 @@ 	  case unEl a' of 	    Def d vs	-> do 	      def <- theDef <$> getConstInfo d-	      case def of-		Datatype{dataPars = np} ->+              unless (defIsRecord def) $+                when (argRelevance a == Irrelevant) $+                  typeError $ SplitOnIrrelevant p a+              let mp = case def of+                        Datatype{dataPars = np} -> Just np+                        Record{recPars = np}    -> Just np+                        _                       -> Nothing+              case mp of+                Nothing -> keepGoing+                Just np -> 		  traceCall (CheckPattern p EmptyTel (unArg a)) $ do  -- TODO: wrong telescope                   -- Check that we construct something in the right datatype                   c <- do                       cs' <- mapM canonicalName cs                       d'  <- canonicalName d-                      Datatype{dataCons = cs0} <- theDef <$> getConstInfo d'+                      let cons def = case theDef def of+                            Datatype{dataCons = cs} -> cs+                            Record{recCon = c}      -> [c]+                            _                       -> __IMPOSSIBLE__+                      cs0 <- cons <$> getConstInfo d'                       case [ c | (c, c') <- zip cs cs', elem c' cs0 ] of                         c : _ -> return c   -- if there are more than one they will                                             -- all have the same canonical form@@ -113,11 +128,8 @@ 			 ] 		  return $ Split mempty 				 xs-				 (fmap (const $ Focus c args (getRange p) q i d pars ixs) a)+				 (fmap (Focus c args (getRange p) q i d pars ixs) a) 				 (fmap (Problem ps ()) tel)-		-- TODO: record patterns-		Record{} -> typeError $ NotImplemented "Pattern matching for records"-		_ -> keepGoing 	    _	-> keepGoing 	p -> keepGoing       where
src/full/Agda/TypeChecking/Rules/LHS/Unify.hs view
@@ -22,12 +22,14 @@ import Agda.TypeChecking.Constraints import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty-import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Substitute hiding (Substitution)+import Agda.TypeChecking.Telescope import Agda.TypeChecking.Free import Agda.TypeChecking.Records import Agda.TypeChecking.Primitive (constructorForm) import Agda.TypeChecking.MetaVars (assignV, newArgsMetaCtx) import Agda.TypeChecking.EtaContract+import Agda.Interaction.Options (optInjectiveTypeConstructors)  import Agda.TypeChecking.Rules.LHS.Problem @@ -112,7 +114,7 @@  -- | Apply the current substitution on a term and reduce to weak head normal form. ureduce :: Term -> Unify Term-ureduce u = do+ureduce u = doEtaContractImplicit $ do   rho <- onSub makeSubstitution   liftTCM $ etaContract =<< reduce (substs rho u) @@ -174,7 +176,7 @@     unifyArgs _ (_ : _) [] = __IMPOSSIBLE__     unifyArgs _ [] (_ : _) = __IMPOSSIBLE__     unifyArgs _ [] [] = return ()-    unifyArgs a us0@(arg@(Arg _ u) : us) vs0@(Arg _ v : vs) = do+    unifyArgs a us0@(arg@(Arg _ _ u) : us) vs0@(Arg _ _ v : vs) = do       reportSDoc "tc.lhs.unify" 15 $ sep         [ text "unifyArgs" 	, nest 2 $ parens (prettyTCM a)@@ -183,8 +185,8 @@         ]       a <- reduce a       case funView $ unEl a of-	FunV (Arg _ b) _  -> do-	  unify b u v+	FunV b _  -> do+	  unify (unArg b) u v           arg <- traverse ureduce arg 	  unifyArgs (a `piApply` [arg]) us vs 	_	  -> __IMPOSSIBLE__@@ -205,6 +207,7 @@       su <- sizeView u       sv <- 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         _                    -> unifyAtom sz u v@@ -245,7 +248,8 @@                     Record{}   -> True                     Axiom{}    -> True                     _          -> False-              if ok+              inj <- optInjectiveTypeConstructors <$> pragmaOptions+              if inj && ok                 then unifyArgs (defType def) us vs                 else addEquality a u v         (Lit l1, Lit l2)@@ -290,10 +294,9 @@                -- Only generate metas for the arguments v' is actually applied to               -- (in case of partial application)-              let b' = telePi tel (sort Prop)-                    where-                      TelV tel0 _ = telView b-                      tel = telFromList $ take (length vs) $ telToList tel0+              TelV tel0 _ <- telView b+              let tel = telFromList $ take (length vs) $ telToList tel0+                  b'  = telePi tel (sort Prop)               withMetaInfo mi $ do                 tel <- getContextTelescope                 -- important: create the meta in the same environment as the original meta@@ -330,7 +333,7 @@                  -> Type -> tcm Type dataOrRecordType c a = do   -- The telescope ends with a datatype or a record.-  TelV _ (El _ (Def d args)) <- telView <$> reduce a+  TelV _ (El _ (Def d args)) <- telView a   def <- theDef <$> getConstInfo d   (n, a')  <- case def of     Datatype{dataPars = n} -> ((,) n) . defType <$> getConstInfo c
src/full/Agda/TypeChecking/Rules/Record.hs view
@@ -5,7 +5,6 @@ import Control.Applicative import Control.Monad.Trans import Control.Monad.Reader-import qualified Agda.Utils.IO.Locale as LocIO  import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Common@@ -18,6 +17,7 @@ import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty import Agda.TypeChecking.Polarity+import Agda.TypeChecking.CompiledClause  import Agda.TypeChecking.Rules.Data ( bindParameters, fitsIn ) import Agda.TypeChecking.Rules.Term ( isType_ )@@ -36,7 +36,6 @@ checkRecDef :: Info.DefInfo -> QName -> Maybe A.Constructor ->                [A.LamBinding] -> A.Expr -> [A.Constructor] -> TCM () checkRecDef i name con ps contel fields =-  noMutualBlock $ -- records can't be recursive anyway   traceCall (CheckRecDef (getRange i) (qnameName name) ps fields) $ do     reportSDoc "tc.rec" 10 $ vcat       [ text "checking record def" <+> prettyTCM name@@ -44,25 +43,27 @@       , nest 2 $ text "contel =" <+> prettyA contel       , nest 2 $ text "fields =" <+> prettyA fields       ]+    -- get type of record     t <- instantiateFull =<< typeOfConst name     bindParameters ps t $ \tel t0 -> do+      -- t = tel -> t0 where t0 must be a sort s        t0' <- normalise t0       s <- case unEl t0' of 	Sort s	-> return s 	_	-> typeError $ ShouldBeASort t0       gamma <- getContextTelescope-      let m = mnameFromList $ qnameToList name-	  hide (Arg _ x) = Arg Hidden x+      let m = qnameToMName name 	  htel		 = map hide $ telToList tel 	  rect		 = El s $ Def name $ reverse-			   [ Arg h (Var i [])-			   | (i, Arg h _) <- zip [0..] $ reverse $ telToList gamma+			   [ Arg h r (Var i [])+			   | (i, Arg h r _) <- zip [0..] $ reverse $ telToList gamma 			   ]-	  tel'		 = telFromList $ htel ++ [Arg NotHidden ("r", rect)]-          extWithR ret   = underAbstraction (Arg NotHidden rect) (Abs "r" ()) $ \_ -> ret-          ext (Arg h (x, t)) = addCtx x (Arg h t)+	  tel'		 = telFromList $ htel ++ [defaultArg ("r", rect)]+          extWithR ret   = underAbstraction (defaultArg rect) (Abs "r" ()) $ \_ -> ret+          ext (Arg h r (x, t)) = addCtx x (Arg h r t) -      let getName (A.Field _ h x _)    = [(h, x)]+      let getName :: A.Declaration -> [Arg QName]+          getName (A.Field _ x arg)    = [fmap (const x) arg] 	  getName (A.ScopedDecl _ [f]) = getName f 	  getName _		       = [] @@ -71,9 +72,41 @@       -- We have to rebind the parameters to make them hidden       -- Check the field telescope       contype <- killRange <$> (instantiateFull =<< isType_ contel)-      let TelV ftel _ = telView contype+      let TelV ftel _ = telView' contype       let contype = telePi ftel (raise (size ftel) rect) +      (hasNamedCon, conName, conInfo) <- case con of+        Just (A.Axiom i c _) -> return (True, c, i)+        Just _               -> __IMPOSSIBLE__+        Nothing              -> do+          m <- killRange <$> currentModule+          c <- qualify m <$> freshName_ "recCon-NOT-PRINTED"+          return (False, c, i)++      addConstant name $ Defn name t0 (defaultDisplayForm name) 0+		       $ Record { recPars           = 0+                                , recClause         = Nothing+                                , recCon            = conName+                                , recNamedCon       = hasNamedCon+                                , recConType        = contype+				, recFields         = concatMap getName fields+                                , recTel            = ftel+				, recAbstr          = Info.defAbstract i+                                , recEtaEquality    = True+                                , recPolarity       = []+                                , recArgOccurrences = []+                                }++      addConstant conName $+        Defn conName contype (defaultDisplayForm conName) 0 $+             Constructor { conPars   = 0+                         , conSrcCon = conName+                         , conData   = name+                         , conHsCode = Nothing+                         , conAbstr  = Info.defAbstract conInfo+                         , conInd    = Inductive+                         }+       escapeContext (size tel) $ flip (foldr ext) ctx $ extWithR $ do 	reportSDoc "tc.rec.def" 10 $ sep 	  [ text "record section:"@@ -90,34 +123,7 @@         -- Check the types of the fields         -- ftel <- checkRecordFields m name tel s [] (size fields) fields         withCurrentModule m $-          checkRecordProjections m (maybe name A.axiomName con)-                                 tel' (raise 1 ftel) fields--      addConstant name $ Defn name t0 (defaultDisplayForm name) 0-		       $ Record { recPars           = 0-                                , recClause         = Nothing-                                , recCon            = A.axiomName <$> con-                                , recConType        = contype-				, recFields         = concatMap getName fields-                                , recTel            = ftel-				, recAbstr          = Info.defAbstract i-                                , recPolarity       = []-                                , recArgOccurrences = []-                                }-      case con of-        Nothing              -> return ()-        Just (A.Axiom i c _) -> do-          addConstant c $-            Defn c contype (defaultDisplayForm name) 0 $-                 Constructor { conPars   = 0-                             , conSrcCon = c-                             , conData   = name-                             , conHsCode = Nothing-                             , conAbstr  = Info.defAbstract i-                             , conInd    = Inductive-                             }-          verboseS "tc.rec.def" 20 $ liftIO . LocIO.print =<< getConstInfo c-        Just _ -> __IMPOSSIBLE__+          checkRecordProjections m conName tel' (raise 1 ftel) fields        -- Check that the fields fit inside the sort       let dummy = Var 0 []  -- We're only interested in the sort here@@ -146,7 +152,7 @@     checkProjs _ _ [] = return ()     checkProjs ftel1 ftel2 (A.ScopedDecl scope fs' : fs) =       setScope scope >> checkProjs ftel1 ftel2 (fs' ++ fs)-    checkProjs ftel1 (ExtendTel (Arg _ _) ftel2) (A.Field info h x t : fs) = do+    checkProjs ftel1 (ExtendTel _ ftel2) (A.Field info x (Arg h rel t) : fs) = do       -- check the type (in the context of the telescope)       -- the previous fields will be free in       reportSDoc "tc.rec.proj" 5 $ sep@@ -160,6 +166,13 @@ 	]       t <- isType_ t ++      -- Andreas, 2010-09-09 The following comments are misleading, TODO: update+      -- in fact, tel includes the variable of record type as last one+      -- e.g. for cartesion product it is+      --+      --   tel = {A' : Set} {B' : Set} (r : Prod A' B')+       -- create the projection functions (instantiate the type with the values       -- of the previous fields) @@ -173,7 +186,8 @@       -- The type of the projection function should be       --  {tel} -> (r : R Δ) -> t       -- where Δ = Γ, tel is the current context-      delta <- getContextTelescope++       let finalt   = telePi tel t 	  projname = qualify m $ qnameName x @@ -184,29 +198,37 @@        -- The body should be       --  P.xi {tel} (r _ .. x .. _) = x-      let ptel   = telFromList $ take (size tel - 1) $ telToList tel-          hps	 = map (fmap $ VarP . fst) $ telToList ptel-	  conp	 = Arg NotHidden-		 $ ConP q $ zipWith Arg++      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+          (ptel,[rt]) = splitAt (size tel - 1) $ telToList tel+          hps	 = map (fmap $ VarP . fst) $ ptel+	  conp	 = defaultArg+		 $ ConP q (Just (fmap snd rt))+                   $ zipWith3 Arg                               (map argHiding (telToList ftel))+                              (map argRelevance (telToList ftel)) 			      [ VarP "x" | _ <- [1..size ftel] ] 	  nobind 0 = id-	  nobind n = NoBind . nobind (n - 1)+	  nobind n = Bind . Abs "_" . nobind (n - 1) 	  body	 = nobind (size tel - 1) 		 $ nobind (size ftel1) 		 $ Bind . Abs "x" 		 $ nobind (size ftel2)-		 $ Body $ Var 0 []-          cltel  = ptel `abstract` ftel+		 $ Body $ Var (size ftel2) []+          cltel  = (telFromList ptel) `abstract` ftel 	  clause = Clause { clauseRange = getRange info                           , clauseTel   = killRange cltel                           , clausePerm  = idP $ size ptel + size ftel                           , clausePats  = hps ++ [conp]                           , clauseBody  = body                           }+          clause2 = Clauses Nothing clause       escapeContext (size tel) $ do 	addConstant projname $ Defn projname (killRange finalt) (defaultDisplayForm projname) 0-          $ Function { funClauses        = [clause]+          $ Function { funClauses        = [clause2]+                     , funCompiled       = compileClauses [clause2]                      , funDelayed        = NotDelayed                      , funInv            = NotInjective                      , funAbstr          = ConcreteDef@@ -215,7 +237,7 @@                      }         computePolarity projname -      checkProjs (abstract ftel1 $ ExtendTel (Arg h t)+      checkProjs (abstract ftel1 $ ExtendTel (Arg h Relevant t)                                  $ Abs (show $ qnameName projname) EmptyTel                  ) (absBody ftel2) fs     checkProjs ftel1 ftel2 (d : fs) = do
src/full/Agda/TypeChecking/Rules/Term.hs view
@@ -3,6 +3,7 @@ module Agda.TypeChecking.Rules.Term where  import Control.Applicative+import Control.Arrow ((***), (&&&)) import Control.Monad.Trans import Control.Monad.Reader import Control.Monad.Error@@ -15,6 +16,7 @@ import qualified Agda.Syntax.Abstract as A import qualified Agda.Syntax.Abstract.Views as A import qualified Agda.Syntax.Info as A+import Agda.Syntax.Concrete.Pretty () -- just Pretty instances import Agda.Syntax.Common import Agda.Syntax.Fixity import Agda.Syntax.Internal@@ -22,6 +24,7 @@ import Agda.Syntax.Position import Agda.Syntax.Literal import Agda.Syntax.Abstract.Views+import Agda.Syntax.Scope.Base (emptyScopeInfo)  import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin@@ -34,6 +37,12 @@ import Agda.TypeChecking.Primitive import Agda.TypeChecking.Constraints import Agda.TypeChecking.Free+import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Datatypes+import Agda.TypeChecking.EtaContract+import Agda.TypeChecking.Quote+import Agda.TypeChecking.CompiledClause+import {-# SOURCE #-} Agda.TypeChecking.Rules.Builtin.Coinduction  import Agda.Utils.Fresh import Agda.Utils.Tuple@@ -67,9 +76,9 @@     s <- newSortMeta     isType e s - -- | Force a type to be a Pi. Instantiates if necessary. The 'Hiding' is only --   used when instantiating a meta variable.+{- forcePi :: MonadTCM tcm => Hiding -> String -> Type -> tcm (Type, Constraints) forcePi h name (El s t) =     do	t' <- reduce t@@ -83,42 +92,69 @@                  a <- newTypeMeta sa                 x <- freshName_ name-		let arg = Arg h a+		let arg = Arg h Relevant a                 b <- addCtx x arg $ newTypeMeta sb                 let ty = El s' $ Pi arg (Abs (show x) b)                 cs <- equalType (El s t') ty                 ty' <- reduce ty                 return (ty', cs)-+-}  --------------------------------------------------------------------------- -- * Telescopes ---------------------------------------------------------------------------  -- | Type check a telescope. Binds the variables defined by the telescope.-checkTelescope :: A.Telescope -> (Telescope -> TCM a) -> TCM a-checkTelescope [] ret = ret EmptyTel-checkTelescope (b : tel) ret =-    checkTypedBindings b $ \tel1 ->-    checkTelescope tel   $ \tel2 ->+checkTelescope :: A.Telescope -> Sort -> (Telescope -> TCM a) -> TCM a+checkTelescope [] s ret = ret EmptyTel+checkTelescope (b : tel) s ret =+    checkTypedBindings b s $ \tel1 ->+    checkTelescope tel s   $ \tel2 -> 	ret $ abstract tel1 tel2 +-- | Check a typed binding and extends the context with the bound variables.+--   The telescope passed to the continuation is valid in the original context.+checkTypedBindings :: A.TypedBindings -> Sort -> (Telescope -> TCM a) -> TCM a+checkTypedBindings (A.TypedBindings i (Arg h rel bs)) s ret =+    thread (checkTypedBinding h s) bs $ \bss ->+    ret $ foldr (\(x,t) -> ExtendTel (Arg h rel t) . Abs x) EmptyTel (concat bss) +checkTypedBinding :: Hiding -> Sort -> A.TypedBinding -> ([(String,Type)] -> TCM a) -> TCM a+checkTypedBinding h s (A.TBind i xs e) ret = do+    t <- isType e s+    addCtxs xs (Arg h Relevant t) $ ret $ mkTel xs t+    where+	mkTel [] t     = []+	mkTel (x:xs) t = (show $ nameConcrete x,t) : mkTel xs (raise 1 t)+checkTypedBinding h s (A.TNoBind e) ret = do+    t <- isType e s+    ret [("_",t)]+++-- | Type check a telescope. Binds the variables defined by the telescope.+checkTelescope_ :: A.Telescope -> (Telescope -> TCM a) -> TCM a+checkTelescope_ [] ret = ret EmptyTel+checkTelescope_ (b : tel) ret =+    checkTypedBindings_ b $ \tel1 ->+    checkTelescope_ tel   $ \tel2 ->+	ret $ abstract tel1 tel2++ -- | Check a typed binding and extends the context with the bound variables. --   The telescope passed to the continuation is valid in the original context.-checkTypedBindings :: A.TypedBindings -> (Telescope -> TCM a) -> TCM a-checkTypedBindings (A.TypedBindings i h bs) ret =-    thread (checkTypedBinding h) bs $ \bss ->-    ret $ foldr (\(x,t) -> ExtendTel (Arg h t) . Abs x) EmptyTel (concat bss)+checkTypedBindings_ :: A.TypedBindings -> (Telescope -> TCM a) -> TCM a+checkTypedBindings_ (A.TypedBindings i (Arg h rel bs)) ret =+    thread (checkTypedBinding_ h) bs $ \bss ->+    ret $ foldr (\(x,t) -> ExtendTel (Arg h rel t) . Abs x) EmptyTel (concat bss) -checkTypedBinding :: Hiding -> A.TypedBinding -> ([(String,Type)] -> TCM a) -> TCM a-checkTypedBinding h (A.TBind i xs e) ret = do+checkTypedBinding_ :: Hiding -> A.TypedBinding -> ([(String,Type)] -> TCM a) -> TCM a+checkTypedBinding_ h (A.TBind i xs e) ret = do     t <- isType_ e-    addCtxs xs (Arg h t) $ ret $ mkTel xs t+    addCtxs xs (Arg h Relevant t) $ ret $ mkTel xs t     where 	mkTel [] t     = [] 	mkTel (x:xs) t = (show $ nameConcrete x,t) : mkTel xs (raise 1 t)-checkTypedBinding h (A.TNoBind e) ret = do+checkTypedBinding_ h (A.TNoBind e) ret = do     t <- isType_ e     ret [("_",t)] @@ -140,6 +176,7 @@     LitFloat _ _  -> el <$> primFloat     LitChar _ _   -> el <$> primChar     LitString _ _ -> el <$> primString+    LitQName _ _  -> el <$> primQName   where     el t = El (mkType 0) t @@ -169,6 +206,7 @@ -- | Type check an expression. checkExpr :: A.Expr -> Type -> TCM Term checkExpr e t =+    verboseBracket "tc.term.expr.top" 5 "checkExpr" $     traceCall (CheckExpr e t) $ localScope $ do     reportSDoc "tc.term.expr.top" 15 $         text "Checking" <+> sep@@ -189,7 +227,7 @@  	-- Insert hidden lambda if appropriate 	_   | not (hiddenLambdaOrHole e)-	    , FunV (Arg Hidden _) _ <- funView (unEl t) -> do+	    , FunV (Arg Hidden _ _) _ <- funView (unEl t) -> do 		x <- freshName r (argName t)                 reportSLn "tc.term.expr.impl" 15 $ "Inserting implicit lambda" 		checkExpr (A.Lam (A.ExprRange $ getRange e) (A.DomainFree Hidden x) e) t@@ -200,7 +238,7 @@                  hiddenLambdaOrHole (A.AbsurdLam _ Hidden)                                  = True 		hiddenLambdaOrHole (A.Lam _ (A.DomainFree Hidden _) _)			   = True-		hiddenLambdaOrHole (A.Lam _ (A.DomainFull (A.TypedBindings _ Hidden _)) _) = True+		hiddenLambdaOrHole (A.Lam _ (A.DomainFull (A.TypedBindings _ (Arg Hidden _ _))) _) = True 		hiddenLambdaOrHole (A.QuestionMark _)					   = True 		hiddenLambdaOrHole _							   = False @@ -213,55 +251,79 @@                 let getData Constructor{conData = d} = d                     getData _                        = __IMPOSSIBLE__                 reportSLn "tc.check.term" 40 $ "  ranges before: " ++ show (getRange cs)-                cs  <- zipWith setRange (map getRange cs) <$> mapM reduceCon cs+                -- We use the reduced constructor when disambiguating, but+                -- the original constructor for type checking. This is important+                -- since they may have different types (different parameters).+                -- See issue 279.+                cs  <- zip cs . zipWith setRange (map getRange cs) <$> mapM reduceCon cs                 reportSLn "tc.check.term" 40 $ "  ranges after: " ++ show (getRange cs)                 reportSLn "tc.check.term" 40 $ "  reduced: " ++ show cs-                dcs <- mapM (\c -> (getData /\ const c) . theDef <$> getConstInfo c) cs+                dcs <- mapM (\(c0, c1) -> (getData /\ const c0) . theDef <$> getConstInfo c1) cs +                -- Type error+                let badCon t = typeError $ DoesNotConstructAnElementOf+                                            (fst $ head cs) t+                 -- Lets look at the target type at this point                 let getCon = do-                      t <- normalise t-                      let TelV _ t1 = telView t+                      TelV _ t1 <- telView t                       t1 <- reduceB $ unEl t1                       reportSDoc "tc.check.term.con" 40 $ nest 2 $                         text "target type: " <+> prettyTCM t1                       case t1 of                         NotBlocked (Def d _) -> do                           let dataOrRec = case [ c | (d', c) <- dcs, d == d' ] of-                                c:_ -> return (Just c)-                                []  -> typeError $ DoesNotConstructAnElementOf-                                                     (head cs) (Def d [])+                                c:_ -> do+                                  reportSLn "tc.check.term" 40 $ "  decided on: " ++ show c+                                  return (Just c)+                                []  -> badCon (Def d [])                           defn <- theDef <$> getConstInfo d                           case defn of                             Datatype{} -> dataOrRec                             Record{}   -> dataOrRec-                            _ -> typeError $ DoesNotConstructAnElementOf (head cs) (ignoreBlocking t1)+                            _ -> badCon (ignoreBlocking t1)                         NotBlocked (MetaV _ _)  -> return Nothing                         Blocked{} -> return Nothing-                        _ -> typeError $ DoesNotConstructAnElementOf (head cs) (ignoreBlocking t1)+                        _ -> badCon (ignoreBlocking t1)                 let unblock = isJust <$> getCon                 mc <- getCon                 case mc of-                  Just c  -> checkHeadApplication e t (HeadCon [c]) args+                  Just c  -> checkConstructorApplication e t c args                   Nothing -> postponeTypeCheckingProblem e t unblock -            | Application hd args <- appView e -> checkHeadApplication e t hd args+            | Application (HeadCon [c]) args <- appView e ->+                checkConstructorApplication e t c args+            | Application hd args <- appView e ->+                checkHeadApplication e t hd args  	A.WithApp _ e es -> typeError $ NotImplemented "type checking of with application" -        A.App i s (Arg NotHidden l)+        A.App i s (Arg NotHidden r l)           | A.Set _ 0 <- unScope s ->           ifM (not <$> hasUniversePolymorphism)               (typeError $ GenericError "Use --universe-polymorphism to enable level arguments to Set")           $ do             lvl <- primLevel             suc <- do s <- primLevelSuc-                      return $ \x -> s `apply` [Arg NotHidden x]+                      return $ \x -> s `apply` [defaultArg x]             n   <- checkExpr (namedThing l) (El (mkType 0) lvl)             reportSDoc "tc.univ.poly" 10 $               text "checking Set " <+> prettyTCM n <+> text "against" <+> prettyTCM t             blockTerm t (Sort $ Type n) $ leqType (sort $ Type $ suc n) t +        A.App i q (Arg NotHidden r e)+          | A.Quote _ <- unScope q -> do+          let quoted (A.Def x) = return x+              quoted (A.Con (AmbQ [x])) = return x+              quoted (A.Con (AmbQ xs))  = typeError $ GenericError $ "quote: Ambigous name: " ++ show xs+              quoted (A.ScopedExpr _ e) = quoted e+              quoted _                  = typeError $ GenericError $ "quote: not a defined name"+          x <- quoted (namedThing e)+          ty <- qNameType+          blockTerm t (quoteName x) $ leqType ty t++        A.Quote _ -> typeError $ GenericError "quote must be applied to a defined name"+ 	A.App i e arg -> do 	    (v0, t0)	 <- inferExpr e 	    checkArguments' ExpandLast (getRange e) [arg] t0 t e $ \vs t1 cs ->@@ -273,7 +335,7 @@             Blocked{}                 -> postponeTypeCheckingProblem_ e $ ignoreBlocking t             NotBlocked (El _ MetaV{}) -> postponeTypeCheckingProblem_ e $ ignoreBlocking t             NotBlocked t' -> case funView $ unEl t' of-              FunV (Arg h' a) _+              FunV (Arg h' _ a) _                 | h == h' && not (null $ foldTerm metas a) ->                     postponeTypeCheckingProblem e (ignoreBlocking t) $                       null . foldTerm metas <$> instantiateFull a@@ -290,13 +352,15 @@                   addConstant aux $ Defn aux t' (defaultDisplayForm aux) 0                                   $ Function                                     { funClauses        =-                                        [Clause { clauseRange = getRange e-                                                , clauseTel   = EmptyTel-                                                , clausePerm  = Perm 0 []-                                                , clausePats  = [Arg h $ VarP "()"]-                                                , clauseBody  = NoBody-                                                }+                                        [Clauses Nothing+                                                 (Clause { clauseRange = getRange e+                                                         , clauseTel   = EmptyTel+                                                         , clausePerm  = Perm 0 []+                                                         , clausePats  = [Arg h Relevant $ VarP "()"]+                                                         , clauseBody  = NoBody+                                                         })                                         ]+                                    , funCompiled       = Fail                                     , funDelayed        = NotDelayed                                     , funInv            = NotInjective                                     , funAbstr          = ConcreteDef@@ -311,14 +375,14 @@             metas _           = []  	A.Lam i (A.DomainFull b) e -> do-	    (v, cs) <- checkTypedBindings b $ \tel -> do+	    (v, cs) <- checkTypedBindings_ b $ \tel -> do 	        t1 <- newTypeMeta_                 cs <- escapeContext (size tel) $ leqType (telePi tel t1) t                 v <- checkExpr e t1                 return (teleLam tel v, cs) 	    blockTerm t v (return cs) 	    where-		name (Arg h (x,_)) = Arg h x+		name (Arg h r (x,_)) = Arg h r x  	A.Lam i (A.DomainFree h x) e0 -> do 	    -- (t',cs) <- forcePi h (show x) t@@ -327,10 +391,10 @@               Blocked{}                 -> postponeTypeCheckingProblem_ e $ ignoreBlocking t               NotBlocked (El _ MetaV{}) -> postponeTypeCheckingProblem_ e $ ignoreBlocking t               NotBlocked t' -> case funView $ unEl t' of-		FunV arg0@(Arg h' a) _+		FunV arg0@(Arg h' r a) _ 		    | h == h' -> do 			v <- addCtx x arg0 $ do-                              let arg = Arg h (Var 0 [])+                              let arg = Arg h r (Var 0 [])                                   tb  = raise 1 t' `piApply` [arg]                               v <- checkExpr e0 tb                               return $ Lam h $ Abs (show x) v@@ -350,7 +414,7 @@ 	A.Lit lit    -> checkLiteral lit t 	A.Let i ds e -> checkLetBindings ds $ checkExpr e t 	A.Pi _ tel e -> do-	    t' <- checkTelescope tel $ \tel -> do+	    t' <- checkTelescope_ tel $ \tel -> do                     t   <- instantiateFull =<< isType_ e                     tel <- instantiateFull tel                     return $ telePi_ tel t@@ -361,31 +425,34 @@                    , nest 2 $ text "cxt =" <+> (prettyTCM =<< getContextTelescope)                    ] 	    blockTerm t (unEl t') $ leqType (sort s) t-	A.Fun _ (Arg h a) b -> do+	A.Fun _ (Arg h r a) b -> do 	    a' <- isType_ a 	    b' <- isType_ b 	    let s = getSort a' `sLub` getSort b'-	    blockTerm t (Fun (Arg h a') b') $ leqType (sort s) t+	    blockTerm t (Fun (Arg h r a') b') $ leqType (sort s) t 	A.Set _ n    -> do           n <- ifM typeInType (return 0) (return n) 	  blockTerm t (Sort (mkType n)) $ leqType (sort $ mkType $ n + 1) t 	A.Prop _     -> do-          s <- ifM typeInType (return $ mkType 0) (return Prop)-	  blockTerm t (Sort Prop) $ leqType (sort $ mkType 1) t+          typeError $ GenericError "Prop is no longer supported"+          -- s <- ifM typeInType (return $ mkType 0) (return Prop)+	  -- blockTerm t (Sort Prop) $ leqType (sort $ mkType 1) t  	A.Rec _ fs  -> do-	  t <- normalise t+	  t <- reduce t 	  case unEl t of 	    Def r vs  -> do-	      (hs, xs) <- unzip <$> getRecordFieldNames r-	      ftel     <- getRecordFieldTypes r-              con      <- getRecordConstructor r-              scope    <- getScope+	      axs    <- getRecordFieldNames r+              let xs = map unArg axs+	      ftel   <- getRecordFieldTypes r+              con    <- getRecordConstructor r+              scope  <- getScope               let meta = A.Underscore $ A.MetaInfo (getRange e) scope Nothing 	      es   <- orderFields r meta xs fs 	      let tel = ftel `apply` vs 	      (args, cs) <- checkArguments_ ExpandLast (getRange e)-			      (zipWith (\h e -> Arg h (unnamed e)) hs es) tel+			      (zipWith (\ax e -> fmap (const (unnamed e)) ax) axs es)+                              tel 	      blockTerm t (Con con args) $ return cs             MetaV _ _ -> do               reportSDoc "tc.term.expr.rec" 10 $ sep@@ -401,13 +468,30 @@          A.ETel _   -> __IMPOSSIBLE__ +	A.DontCare -> __IMPOSSIBLE__+ 	A.ScopedExpr scope e -> setScope scope >> checkExpr e t+        e0@(A.QuoteGoal _ x e) -> do+          t' <- etaContract =<< normalise t+          let metas = foldTerm (\v -> case v of+                                       MetaV m _ -> [m]+                                       _         -> []+                               ) t'+          case metas of+            _:_ -> postponeTypeCheckingProblem e0 t' $ and <$> mapM isInstantiatedMeta metas+            []  -> do+              quoted <- quoteType t'+              tmType <- agdaTermType+              (v,ty) <- addLetBinding x quoted tmType (inferExpr e)+              blockTerm t' v $ leqType ty t'  -- | Infer the type of a head thing (variable, function symbol, or constructor) inferHead :: Head -> TCM (Args -> Term, Type) inferHead (HeadVar x) = do -- traceCall (InferVar x) $ do   (u, a) <- getVarInfo x-  return (apply u, a)+  when (argRelevance a == Irrelevant) $+    typeError $ VariableIsIrrelevant x+  return (apply u, unArg a) inferHead (HeadDef x) = do   (u, a) <- inferDef Def x   return (apply u, a)@@ -442,6 +526,138 @@       liftIO $ LocIO.putStrLn $ "inferred def " ++ unwords (show dx : map show ds) ++ " : " ++ show dt     return (mkTerm x vs, defType d) +-- | 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 -> QName -> [NamedArg A.Expr] -> TCM Term+checkConstructorApplication org t c args = do+  checkHead t args+{-+  TelV gamma d <- telView t++  -- Eta expand the constructor applications so it's fully applied+  let realName "_" = "carg"+      realName  x  = x+      gamma' = telToList gamma++    -- Generate fresh names for eta expansion variables+  vars <- sequence [ Arg h <$> freshName_ (realName x)+                   | Arg h (x, _) <- gamma' ]++    -- Compute the context of the variables+  let cxt = [ (unArg x, fmap snd t) | (x, t) <- zip vars gamma' ]+      extendCxt cxt m = foldr (uncurry addCtx) m cxt+      etaExpansion t = foldr lam t gamma'+        where lam (Arg h (x, _)) t = Lam h (Abs x t)++  -- Go inside the lambdas generated by the expansion+  extendCxt cxt $ do++  -- Make sure to shadow some things we shouldn't use+  t        <- return d+  args     <- return $ args ++ map (fmap (unnamed . A.Var)) vars+  fallback <- return $ etaExpansion <$> checkHead t args++  -- Make sure we're checking against the right datatype+  d   <- getConstructorData c+  mdi <- getDatatypeInfo t+  case mdi of+    Nothing -> fallback+    Just dinfo@DataInfo{ datatypeName   = d'+                       , datatypeParTel = parTel+                       , datatypePars   = dpars+                       , datatypeIxTel  = ixTel+                       , datatypeIxs    = indices+                       }+      | d /= d'   -> fallback+      | otherwise -> do++      -- Split the given arguments into explicitly given parameters and normal+      -- arguments+      (pars, args) <- return $ splitArgs (map (fst . unArg) $ telToList parTel)+                                         args++      reportSDoc "tc.term.con" 30 $ vcat+        [ text "checking constructor application"+        , nest 2 $ vcat+          [ text "c      =" <+> prettyTCM c+          , text "A.pars =" <+> prettyList (map prettyA pars)+          , text "A.args =" <+> prettyList (map prettyA args)+          , text "ptel   =" <+> prettyTCM parTel+          , text "itel   =" <+> addCtxTel parTel (prettyTCM ixTel)+          , text "pars   =" <+> prettyTCM dpars+          , text "ixs    =" <+> prettyTCM indices+          ]+        ]++      -- Check the parameters. Just means checking that any given+      -- parameters are equal to the expected parameters.+      -- checkParams pars parTel $ do++      fallback++  -- Plan+  --  * Check the parameters+  --    + if they're present type check and compare to the parameters to the+  --      datatype, otherwise just continue+  --  * Insert implicit constructor arguments (not counting parameters)+  --  * Check the arguments+  --  * Compare the computed indices from the constructor with the given+  --    indices+-}+  where+    checkHead t args = checkHeadApplication org t (HeadCon [c]) args++    -- Split the arguments to a constructor into those corresponding+    -- to parameters and those that don't. Dummy underscores are inserted+    -- for parameters that are not given explicitly.+    splitArgs [] args = ([], args)+    splitArgs ps []   =+          (map (const dummyUnderscore) ps, args)+    splitArgs ps args@(Arg NotHidden _ _ : _) =+          (map (const dummyUnderscore) ps, args)+    splitArgs (p:ps) (arg : args)+      | elem mname [Nothing, Just p] =+          (arg :) *** id $ splitArgs ps args+      | otherwise =+          (dummyUnderscore :) *** id $ splitArgs ps (arg:args)+      where+        mname = nameOf (unArg arg)++    dummyUnderscore = Arg Hidden Relevant (unnamed $ A.Underscore $ A.MetaInfo noRange emptyScopeInfo Nothing)++--   TelV _ (El _ (Def d dargs)) <- telView t+--   condef  <- getConstInfo c+--   let pars = map unArg $ genericTake (conPars $ theDef condef) dargs+--   (_, contype) <- inferHead (HeadCon [c])+--   TelV contel _ <- telView contype+--   let args' = insertParams contel pars args+--   reportSDoc "tc.term.con" 10 $ vcat+--     [ text "Checking constructor application"+--     , nest 2 $ vcat+--       [ text "args  =" <+> prettyList (map prettyA args)+--       , text "args' =" <+> prettyList (map prettyA args')+--       ]+--     ]+--   checkHeadApplication org t (HeadCon [c]) args'+--   where+--     insertParams :: Telescope -> [Term] -> [NamedArg A.Expr] -> [NamedArg A.Expr]+--     insertParams _ [] args = args+--     insertParams (ExtendTel a tel) (p:ps) (arg:args)+--       | argHiding arg == NotHidden ||+--         notElem argname [Nothing, telname] =+--           Arg Hidden (unnamed $ A.TypeChecked p) :+--           insertParams (absBody tel) ps (arg:args)+--       | otherwise =+--           arg : insertParams (absBody tel) ps args+--       where+--         argname = nameOf (unArg arg)+--         telname = Just (absName tel)+--     insertParams (ExtendTel a tel) (p:ps) [] =+--           Arg Hidden (unnamed $ A.TypeChecked p) :+--           insertParams (absBody tel) ps []+--     insertParams EmptyTel (_:_) _ = __IMPOSSIBLE__+ -- | @checkHeadApplication e t hd args@ checks that @e@ has type @t@, -- assuming that @e@ has the form @hd args@. The corresponding -- type-checked term is returned.@@ -456,86 +672,84 @@ checkHeadApplication :: A.Expr -> Type -> A.Head -> [NamedArg A.Expr] -> TCM Term checkHeadApplication e t hd args = do   replacing <- envReplace <$> ask+  kit       <- coinductionKit   if not replacing    then local (\e -> e { envReplace = True }) defaultResult    else case hd of     HeadCon [c] -> do-      info <- getConstInfo c-      case conInd $ theDef info of-        Inductive   -> do-          (f, t0) <- inferHead hd-          checkArguments' ExpandLast (getRange hd) args t0 t e $ \vs t1 cs -> do-            TelV eTel eType <- telView <$> normalise t-            TelV fTel fType <- telView <$> normalise t1-            blockTerm t (f vs) $ (cs ++) <$> do-              -- We know that the target type of the constructor (fType)-              -- does not depend on fTel so we can compare fType and eType-              -- first.-                                             -- This will fail-              when (size eTel > size fTel) $ compareTel CmpLeq eTel fTel >> return ()+      (f, t0) <- inferHead hd+      checkArguments' ExpandLast (getRange hd) args t0 t e $ \vs t1 cs -> do+        TelV eTel eType <- telView t+        TelV fTel fType <- telView t1+        blockTerm t (f vs) $ (cs ++) <$> do+          -- We know that the target type of the constructor (fType)+          -- does not depend on fTel so we can compare fType and eType+          -- first.+                                         -- This will fail+          when (size eTel > size fTel) $ compareTel CmpLeq eTel fTel >> return () -              -- If the expected type is a metavariable we have to make-              -- sure it's instantiated to the proper pi type-              let (fTel0, fTel1) = telFromList -*- telFromList-                                 $ splitAt (size eTel)-                                 $ telToList fTel-                  fType' = abstract fTel1 fType+          -- If the expected type is a metavariable we have to make+          -- sure it's instantiated to the proper pi type+          let (fTel0, fTel1) = telFromList -*- telFromList+                             $ splitAt (size eTel)+                             $ telToList fTel+              fType' = abstract fTel1 fType -              cs1 <- addCtxTel eTel $ leqType fType' eType-              cs2 <- compareTel CmpLeq eTel fTel0-              return $ cs1 ++ cs2-        CoInductive -> 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"+          cs1 <- addCtxTel eTel $ leqType fType' eType+          cs2 <- compareTel CmpLeq eTel fTel0+          return $ cs1 ++ cs2+    HeadDef 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" -          -- The name of the fresh function.-          i <- fresh :: TCM Integer-          let name = filter (/= '_') (show $ A.qnameName c) ++ "-" ++ show i-          c' <- liftM2 qualify currentModule (freshName_ name)+      -- The name of the fresh function.+      i <- fresh :: TCM Integer+      let name = filter (/= '_') (show $ A.qnameName c) ++ "-" ++ show i+      c' <- liftM2 qualify currentModule (freshName_ name) -          -- The application of the fresh function to the relevant-          -- arguments.-          e' <- Def c' <$> getContextArgs+      -- The application of the fresh function to the relevant+      -- arguments.+      e' <- Def c' <$> getContextArgs -          -- Add the type signature of the fresh function to the-          -- signature.-          i   <- currentMutualBlock-          tel <- getContextTelescope-          addConstant c' (Defn c' t (defaultDisplayForm c') i $ Axiom Nothing)+      -- Add the type signature of the fresh function to the+      -- signature.+      i   <- currentMutualBlock+      tel <- getContextTelescope+      addConstant c' (Defn c' t (defaultDisplayForm c') i $ Axiom Nothing) -          -- Define and type check the fresh function.-          ctx <- getContext-          let info   = A.mkDefInfo (A.nameConcrete $ A.qnameName c') defaultFixity-                                   PublicAccess ConcreteDef noRange-              pats   = map (fmap $ \(n, _) -> Named Nothing (A.VarP n)) $-                           reverse ctx-              clause = A.Clause (A.LHS (A.LHSRange noRange) c' pats [])-                                (A.RHS $ unAppView (A.Application hd args))-                                []+      -- Define and type check the fresh function.+      ctx <- getContext+      let info   = A.mkDefInfo (A.nameConcrete $ A.qnameName c') defaultFixity'+                               PublicAccess ConcreteDef noRange+          pats   = map (fmap $ \(n, _) -> Named Nothing (A.VarP n)) $+                       reverse ctx+          clause = A.Clause (A.LHS (A.LHSRange noRange) c' pats [])+                            (A.RHS $ unAppView (A.Application hd args))+                            [] -          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 c' <+> text ":"-              , nest 4 $ prettyTCM (telePi tel t)-              , nest 2 $ prettyA clause <> text "."-              ]+      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 c' <+> text ":"+          , nest 4 $ prettyTCM (telePi tel t)+          , nest 2 $ prettyA clause <> text "."+          ] -          local (\e -> e { envReplace = False }) $-            escapeContext (size ctx) $ checkFunDef Delayed info c' [clause]+      local (\e -> e { envReplace = False }) $+        escapeContext (size ctx) $ checkFunDef Delayed info c' [clause] -          reportSDoc "tc.term.expr.coind" 15 $ do-            def <- theDef <$> getConstInfo c'-            text "The definition is" <+> text (show $ funDelayed def) <>-              text "."+      reportSDoc "tc.term.expr.coind" 15 $ do+        def <- theDef <$> getConstInfo c'+        text "The definition is" <+> text (show $ funDelayed def) <>+          text "." -          return e'+      return e'     HeadCon _  -> __IMPOSSIBLE__     HeadVar {} -> defaultResult     HeadDef {} -> defaultResult@@ -567,25 +781,26 @@ --   make this happen. Returns @t0'@ and any constraints that have to be --   solve for everything to be well-formed. --   TODO: doesn't do proper blocking of terms-checkArguments :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type -> ErrorT Type TCM (Args, Type, Constraints)+checkArguments :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type ->+                  ErrorT Type TCM (Args, Type, Constraints) checkArguments DontExpandLast _ [] t0 t1 = return ([], t0, []) checkArguments exh r [] t0 t1 =     traceCallE (CheckArguments r [] t0 t1) $ do 	t0' <- lift $ reduce t0 	t1' <- lift $ reduce t1 	case funView $ unEl t0' of -- TODO: clean-	    FunV (Arg Hidden a) _ | notHPi $ unEl t1'  -> do-		v  <- lift $ newValueMeta a-		let arg = Arg Hidden v+	    FunV (Arg Hidden rel a) _ | notHPi $ unEl t1'  -> do+		v  <- lift $ applyRelevanceToContext rel $ newValueMeta a+		let arg = Arg Hidden rel v 		(vs, t0'',cs) <- checkArguments exh r [] (piApply t0' [arg]) t1' 		return (arg : vs, t0'',cs) 	    _ -> return ([], t0', [])     where-	notHPi (Pi  (Arg Hidden _) _) = False-	notHPi (Fun (Arg Hidden _) _) = False-	notHPi _		      = True+	notHPi (Pi  (Arg Hidden _ _) _) = False+	notHPi (Fun (Arg Hidden _ _) _) = False+	notHPi _		        = True -checkArguments exh r args0@(Arg h e : args) t0 t1 =+checkArguments exh r args0@(Arg h _ e : args) t0 t1 =     traceCallE (CheckArguments r args0 t0 t1) $ do       t0b <- lift $ reduceB t0       case t0b of@@ -595,26 +810,30 @@           -- (t0', cs) <- forcePi h (name e) t0           e' <- return $ namedThing e           case (h, funView $ unEl t0') of-              (NotHidden, FunV (Arg Hidden a) _) -> insertUnderscore-              (Hidden, FunV (Arg Hidden a) _)-                  | not $ sameName (nameOf e) (nameInPi $ unEl t0') -> insertUnderscore-              (_, FunV (Arg h' a) _) | h == h' -> do-                  u  <- lift $ checkExpr e' a-                  let arg = Arg h u+              (NotHidden, FunV (Arg Hidden rel a) _) -> insertUnderscore rel+              (Hidden, FunV (Arg Hidden rel a) _)+                  | not $ sameName (nameOf e) (nameInPi $ unEl t0') -> insertUnderscore rel+              (_, FunV (Arg h' rel a) _) | h == h' -> do+                  u  <- lift $ applyRelevanceToContext rel $ checkExpr e' a+                  let arg = Arg h rel u  -- save relevance info in argument                   (us, t0'', cs') <- checkArguments exh (fuseRange r e) args (piApply t0' [arg]) t1-                  return (arg : us, t0'', cs')-              (Hidden, FunV (Arg NotHidden _) _) ->+                  return (nukeIfIrrelevant arg : us, t0'', cs')+                         where nukeIfIrrelevant arg =+                                 if argRelevance arg == Irrelevant then+                                   arg { unArg = DontCare }+                                  else arg+              (Hidden, FunV (Arg NotHidden _ _) _) ->                   lift $ typeError $ WrongHidingInApplication t0'               _ -> lift $ typeError $ ShouldBePi t0'     where-	insertUnderscore = do+	insertUnderscore rel = do 	  scope <- lift $ getScope 	  let m = A.Underscore $ A.MetaInfo 		  { A.metaRange  = r 		  , A.metaScope  = scope 		  , A.metaNumber = Nothing 		  }-	  checkArguments exh r (Arg Hidden (unnamed m) : args0) t0 t1+	  checkArguments exh r (Arg Hidden rel (unnamed m) : args0) t0 t1  	name (Named _ (A.Var x)) = show x 	name (Named (Just x) _)    = x
src/full/Agda/TypeChecking/Serialise.hs view
@@ -32,7 +32,6 @@ import Data.Bits (shiftR) import Data.Word import Data.ByteString.Lazy as L-import Data.Char (ord, chr) import Data.HashTable (HashTable) import qualified Data.HashTable as H import Data.Int (Int32, Int64)@@ -45,7 +44,6 @@ import qualified Data.Binary.Get as B import qualified Data.List as List import Data.Function-import Data.Generics import Data.Typeable import qualified Codec.Compression.GZip as G @@ -58,12 +56,14 @@ import qualified Agda.Syntax.Position as P import Agda.Syntax.Common import Agda.Syntax.Fixity+import Agda.Syntax.Notation import Agda.Syntax.Literal import qualified Agda.Interaction.Highlighting.Range   as HR import qualified Agda.Interaction.Highlighting.Precise as HP import Agda.Interaction.FindFile  import Agda.TypeChecking.Monad+import Agda.TypeChecking.CompiledClause import Agda.Utils.FileName import Agda.Utils.Monad import Agda.Utils.Tuple@@ -77,29 +77,29 @@ -- 32-bit machines). Word64 does not have these problems.  currentInterfaceVersion :: Word64-currentInterfaceVersion = 20091123 * 10 + 0+currentInterfaceVersion = 20100927 * 10 + 0 -type Node = [Int] -- constructor tag (maybe omitted) and arg indices+type Node = [Int32] -- constructor tag (maybe omitted) and arg indices -data Dict = Dict{ nodeD     :: !(HashTable Node    Int)-                , stringD   :: !(HashTable String  Int)-                , integerD  :: !(HashTable Integer Int)-                , doubleD   :: !(HashTable Double  Int)-                , nodeC     :: !(IORef Int)  -- counters for fresh indexes-                , stringC   :: !(IORef Int)-                , integerC  :: !(IORef Int)-                , doubleC   :: !(IORef Int)+data Dict = Dict{ nodeD     :: !(HashTable Node    Int32)+                , stringD   :: !(HashTable String  Int32)+                , integerD  :: !(HashTable Integer Int32)+                , doubleD   :: !(HashTable Double  Int32)+                , nodeC     :: !(IORef Int32)  -- counters for fresh indexes+                , stringC   :: !(IORef Int32)+                , integerC  :: !(IORef Int32)+                , doubleC   :: !(IORef Int32)                 , fileMod   :: !SourceToModule                 } -data U    = forall a . Data a => U !a-type Memo = HashTable (Int, Int) U    -- (node index, type rep key)+data U    = forall a . Typeable a => U !a+type Memo = HashTable (Int32, Int32) U    -- (node index, type rep key)  data St = St-  { nodeE     :: !(Array Int Node)-  , stringE   :: !(Array Int String)-  , integerE  :: !(Array Int Integer)-  , doubleE   :: !(Array Int Double)+  { nodeE     :: !(Array Int32 Node)+  , stringE   :: !(Array Int32 String)+  , integerE  :: !(Array Int32 Integer)+  , doubleE   :: !(Array Int32 Double)   , nodeMemo  :: !Memo   , modFile   :: !ModuleToSource     -- ^ Maps module names to file names. This is the only component@@ -125,9 +125,9 @@ malformed :: R a malformed = throwError $ GenericError "Malformed input." -class Data a => EmbPrj a where-  icode :: a -> S Int-  value :: Int -> R a+class Typeable a => EmbPrj a where+  icode :: a -> S Int32+  value :: Int32 -> R a  -- | Encodes something. To ensure relocatability file paths in -- positions are replaced with module names.@@ -187,7 +187,7 @@   return x    where-  ar l = listArray (0, List.length l - 1) l+  ar l = listArray (0, List.genericLength l - 1) l    noResult = return (Nothing, Nothing) @@ -219,13 +219,17 @@   icode   = icodeX integerD integerC   value i = (! i) `fmap` gets integerE -instance EmbPrj Int where+instance EmbPrj Int32 where   icode i = return i   value i = return i +instance EmbPrj Int where+  icode i = return (fromIntegral i)+  value i = return (fromIntegral i)+ instance EmbPrj Char where-  icode c = return (ord c)-  value i = return (chr i)+  icode c = return (fromIntegral $ fromEnum c)+  value i = return (toEnum $ fromInteger $ toInteger i)  instance EmbPrj Double where   icode   = icodeX doubleD doubleC@@ -378,6 +382,20 @@                            valu [2, a, b] = valu2 NonAssoc   a b                            valu _         = malformed +instance EmbPrj Agda.Syntax.Fixity.Fixity' where+  icode (Fixity' a b) = icode2' a b+  value = vcase valu where valu [a,b] = valu2 Fixity' a b+                           valu _ = malformed++instance EmbPrj GenPart where+    icode (BindHole a)   = icode1 0 a+    icode (NormalHole a) = icode1 1 a+    icode (IdPart a)     = icode1 2 a+    value = vcase valu where valu [0, a] = valu1 BindHole a+                             valu [1, a] = valu1 NormalHole a+                             valu [2, a] = valu1 IdPart a+                             valu _      = malformed+ instance EmbPrj A.QName where   icode (A.QName a b) = icode2' a b   value = vcase valu where valu [a, b] = valu2 A.QName a b@@ -420,9 +438,9 @@                            valu _      = malformed  instance (EmbPrj a) => EmbPrj (Agda.Syntax.Common.Arg a) where-  icode (Arg a b) = icode2' a b-  value = vcase valu where valu [a, b] = valu2 Arg a b-                           valu _      = malformed+  icode (Arg a b c) = icode3' a b c+  value = vcase valu where valu [a, b, c] = valu3 Arg a b c+                           valu _         = malformed  instance EmbPrj Agda.Syntax.Common.Induction where   icode Inductive   = icode0 0@@ -438,15 +456,20 @@                            valu [1] = valu0 NotHidden                            valu _   = malformed +instance EmbPrj Agda.Syntax.Common.Relevance where+  icode Relevant   = icode0 0+  icode Irrelevant = icode0 1+  icode Forced     = icode0 2+  value = vcase valu where valu [0] = valu0 Relevant+                           valu [1] = valu0 Irrelevant+                           valu [2] = valu0 Forced+                           valu _   = malformed+ instance EmbPrj I.Type where   icode (El a b) = icode2' a b   value = vcase valu where valu [a, b] = valu2 El a b                            valu _      = malformed -instance EmbPrj I.MetaId where-  icode (MetaId a) = icode a-  value n = MetaId `fmap` value n- instance (EmbPrj a) => EmbPrj (I.Abs a) where   icode (Abs a b) = icode2' a b   value = vcase valu where valu [a, b] = valu2 Abs a b@@ -461,7 +484,8 @@   icode (Pi       a b) = icode2 5 a b   icode (Fun      a b) = icode2 6 a b   icode (Sort     a  ) = icode1 7 a-  icode (MetaV    a b) = icode2 8 a b+  icode (MetaV    a b) = __IMPOSSIBLE__+  icode (DontCare    ) = icode0 8   value = vcase valu where valu [0, a, b] = valu2 Var   a b                            valu [1, a, b] = valu2 Lam   a b                            valu [2, a]    = valu1 Lit   a@@ -470,7 +494,7 @@                            valu [5, a, b] = valu2 Pi    a b                            valu [6, a, b] = valu2 Fun   a b                            valu [7, a]    = valu1 Sort  a-                           valu [8, a, b] = valu2 MetaV a b+                           valu [8]       = valu0 DontCare                            valu _         = malformed  instance EmbPrj I.Sort where@@ -478,16 +502,15 @@   icode Prop        = icode0 1   icode (Lub   a b) = icode2 2 a b   icode (Suc   a  ) = icode1 3 a-  icode (MetaS a b) = icode2 4 a b-  icode Inf         = icode0 5-  icode (DLub a b)  = icode2 6 a b+  icode (MetaS a b) = __IMPOSSIBLE__+  icode Inf         = icode0 4+  icode (DLub a b)  = icode2 5 a b   value = vcase valu where valu [0, a]    = valu1 Type  a                            valu [1]       = valu0 Prop                            valu [2, a, b] = valu2 Lub   a b                            valu [3, a]    = valu1 Suc   a-                           valu [4, a, b] = valu2 MetaS a b-                           valu [5]       = valu0 Inf-                           valu [6, a, b] = valu2 DLub a b+                           valu [4]       = valu0 Inf+                           valu [5, a, b] = valu2 DLub a b                            valu _         = malformed  instance EmbPrj Agda.Syntax.Literal.Literal where@@ -496,11 +519,13 @@   icode (LitString a b) = icode2 2 a b   icode (LitChar   a b) = icode2 3 a b   icode (LitLevel  a b) = icode2 4 a b+  icode (LitQName  a b) = icode2 5 a b   value = vcase valu where valu [0, 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 [4, a, b] = valu2 LitLevel  a b+                           valu [5, a, b] = valu2 LitQName  a b                            valu _         = malformed  instance EmbPrj DisplayForm where@@ -565,21 +590,39 @@     valu _   = malformed  instance EmbPrj Defn where-  icode (Axiom       a)                   = icode1 0 a-  icode (Function    a b c d e f)         = icode6 1 a b c d e f-  icode (Datatype    a b c d e f g h i j) = icode10 2 a b c d e f g h i j-  icode (Record      a b c d e f g h i)   = icode9 3 a b c d e f g h i-  icode (Constructor a b c d e f)         = icode6 4 a b c d e f-  icode (Primitive   a b c)               = icode3 5 a b c+  icode (Axiom       a)                     = icode1 0 a+  icode (Function    a b c d e f g)         = icode7 1 a b c d e f g+  icode (Datatype    a b c d e f g h i j)   = icode10 2 a b c d e f g h i j+  icode (Record      a b c d e f g h i j k) = icode11 3 a b c d e f g h i j k+  icode (Constructor a b c d e f)           = icode6 4 a b c d e f+  icode (Primitive   a b c)                 = icode3 5 a b c   value = vcase valu where-    valu [0, a]                            = valu1 Axiom       a-    valu [1, a, b, c, d, e, f]             = valu6 Function    a b c d e f-    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]    = valu9 Record      a b c d e f g h i-    valu [4, a, b, c, d, e, f]             = valu6 Constructor a b c d e f-    valu [5, a, b, c]                      = valu3 Primitive   a b c-    valu _                                 = malformed+    valu [0, a]                               = valu1 Axiom       a+    valu [1, a, b, c, d, e, f, g]             = valu7 Function    a b c d e f g+    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] = valu11 Record     a b c d e f g h i j k+    valu [4, a, b, c, d, e, f]                = valu6 Constructor a b c d e f+    valu [5, a, b, c]                         = valu3 Primitive   a b c+    valu _                                    = malformed +instance EmbPrj a => EmbPrj (Case a) where+  icode (Branches a b c) = icode3' a b c++  value = vcase valu where+    valu [a, b, c] = valu3 Branches a b c+    valu _         = malformed++instance EmbPrj CompiledClauses where+  icode Fail       = icode0 0+  icode (Done a b) = icode2 1 a b+  icode (Case a b) = icode2 2 a b++  value = vcase valu where+    valu [0]       = valu0 Fail+    valu [1, a, b] = valu2 Done a b+    valu [2, a, b] = valu2 Case a b+    valu _         = malformed+ instance EmbPrj FunctionInverse where   icode NotInjective = icode0'   icode (Inverse a)  = icode1' a@@ -603,6 +646,11 @@                            valu [1] = valu0 ConcreteDef                            valu _   = malformed +instance EmbPrj I.Clauses where+  icode (Clauses a b) = icode2' a b+  value = vcase valu where valu [a, b] = valu2 Clauses a b+                           valu _      = malformed+ instance EmbPrj I.Clause where   icode (Clause a b c d e) = icode5' a b c d e   value = vcase valu where valu [a, b, c, d, e] = valu5 Clause a b c d e@@ -627,15 +675,15 @@                            valu _   = malformed  instance EmbPrj I.Pattern where-  icode (VarP a  ) = icode1 0 a-  icode (ConP a b) = icode2 1 a b-  icode (LitP a  ) = icode1 2 a-  icode (DotP a  ) = icode1 3 a-  value = vcase valu where valu [0, a]    = valu1 VarP a-                           valu [1, a, b] = valu2 ConP a b-                           valu [2, a]    = valu1 LitP a-                           valu [3, a]    = valu1 DotP a-                           valu _         = malformed+  icode (VarP a    ) = icode1 0 a+  icode (ConP a b c) = icode3 1 a b c+  icode (LitP a    ) = icode1 2 a+  icode (DotP a    ) = icode1 3 a+  value = vcase valu where valu [0, a]       = valu1 VarP a+                           valu [1, a, b, c] = valu3 ConP a b c+                           valu [2, a]       = valu1 LitP a+                           valu [3, a]       = valu1 DotP a+                           valu _            = malformed  instance EmbPrj a => EmbPrj (Builtin a) where   icode (Prim    a) = icode1 0 a@@ -739,14 +787,14 @@                            valu _            = malformed  instance EmbPrj Interface where-  icode (Interface a b c d e f g h) = icode8' a b c d e f g h-  value = vcase valu where valu [a, b, c, d, e, f, g, h] = valu8 Interface a b c d e f g h-                           valu _                        = malformed+  icode (Interface a b c d e f g h i) = icode9' a b c d e f g h i+  value = vcase valu where valu [a, b, c, d, e, f, g, h, i] = valu9 Interface a b c d e f g h i+                           valu _                           = malformed   -icodeX :: (Dict -> HashTable k Int) -> (Dict -> IORef Int) ->-          k -> S Int+icodeX :: (Dict -> HashTable k Int32) -> (Dict -> IORef Int32) ->+          k -> S Int32 icodeX dict counter key = do   d     <- asks dict   c     <- asks counter@@ -760,55 +808,67 @@  icodeN = icodeX nodeD nodeC -vcase :: forall a . EmbPrj a => ([Int] -> R a) -> Int -> R a+vcase :: forall a . EmbPrj a => (Node -> R a) -> Int32 -> R a vcase valu ix = do     memo <- gets nodeMemo     (aTyp, maybeU) <- liftIO $ do       aTyp   <- typeRepKey $ typeOf (undefined :: a)-      maybeU <- H.lookup memo (ix, aTyp)-      return (aTyp, maybeU)+      -- The following tests try to ensure that conversion to Int32+      -- won't truncate the key. The tests can perhaps give erroneous+      -- results if Int is "larger" than Int64.+      when ((convert aTyp :: Int64) > convert (maxBound :: Int32)) __IMPOSSIBLE__+      when ((convert aTyp :: Int64) < convert (minBound :: Int32)) __IMPOSSIBLE__+      let aTyp' = convert aTyp :: Int32+      maybeU <- H.lookup memo (ix, aTyp')+      return (aTyp', maybeU)     case maybeU of       Just (U u) -> maybe malformed return (cast u)       Nothing    -> do           v <- valu . (! ix) =<< gets nodeE           liftIO $ H.insert memo (ix, aTyp) (U v)           return v+    where+    convert :: (Integral b, Integral c) => b -> c+    convert = fromInteger . toInteger -icode0  tag                     = icodeN [tag]-icode1  tag a                   = icodeN . (tag :) =<< sequence [icode a]-icode2  tag a b                 = icodeN . (tag :) =<< sequence [icode a, icode b]-icode3  tag a b c               = icodeN . (tag :) =<< sequence [icode a, icode b, icode c]-icode4  tag a b c d             = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d]-icode5  tag a b c d e           = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e]-icode6  tag a b c d e f         = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f]-icode7  tag a b c d e f g       = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g]-icode8  tag a b c d e f g h     = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h]-icode9  tag a b c d e f g h i   = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i]-icode10 tag a b c d e f g h i j = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j]+icode0  tag                       = icodeN [tag]+icode1  tag a                     = icodeN . (tag :) =<< sequence [icode a]+icode2  tag a b                   = icodeN . (tag :) =<< sequence [icode a, icode b]+icode3  tag a b c                 = icodeN . (tag :) =<< sequence [icode a, icode b, icode c]+icode4  tag a b c d               = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d]+icode5  tag a b c d e             = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e]+icode6  tag a b c d e f           = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f]+icode7  tag a b c d e f g         = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g]+icode8  tag a b c d e f g h       = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h]+icode9  tag a b c d e f g h i     = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i]+icode10 tag a b c d e f g h i j   = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j]+icode11 tag a b c d e f g h i j k = 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] -icode0'                      = icodeN []-icode1'  a                   = icodeN =<< sequence [icode a]-icode2'  a b                 = icodeN =<< sequence [icode a, icode b]-icode3'  a b c               = icodeN =<< sequence [icode a, icode b, icode c]-icode4'  a b c d             = icodeN =<< sequence [icode a, icode b, icode c, icode d]-icode5'  a b c d e           = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e]-icode6'  a b c d e f         = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f]-icode7'  a b c d e f g       = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g]-icode8'  a b c d e f g h     = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h]-icode9'  a b c d e f g h i   = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i]-icode10' a b c d e f g h i j = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j]+icode0'                        = icodeN []+icode1'  a                     = icodeN =<< sequence [icode a]+icode2'  a b                   = icodeN =<< sequence [icode a, icode b]+icode3'  a b c                 = icodeN =<< sequence [icode a, icode b, icode c]+icode4'  a b c d               = icodeN =<< sequence [icode a, icode b, icode c, icode d]+icode5'  a b c d e             = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e]+icode6'  a b c d e f           = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f]+icode7'  a b c d e f g         = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g]+icode8'  a b c d e f g h       = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h]+icode9'  a b c d e f g h i     = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i]+icode10' a b c d e f g h i j   = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j]+icode11' a b c d e f g h i j k = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k] -valu0  z                     = return z-valu1  z a                   = valu0 z                   `ap` value a-valu2  z a b                 = valu1 z a                 `ap` value b-valu3  z a b c               = valu2 z a b               `ap` value c-valu4  z a b c d             = valu3 z a b c             `ap` value d-valu5  z a b c d e           = valu4 z a b c d           `ap` value e-valu6  z a b c d e f         = valu5 z a b c d e         `ap` value f-valu7  z a b c d e f g       = valu6 z a b c d e f       `ap` value g-valu8  z a b c d e f g h     = valu7 z a b c d e f g     `ap` value h-valu9  z a b c d e f g h i   = valu8 z a b c d e f g h   `ap` value i-valu10 z a b c d e f g h i j = valu9 z a b c d e f g h i `ap` value j+valu0  z                       = return z+valu1  z a                     = valu0 z                      `ap` value a+valu2  z a b                   = valu1 z a                    `ap` value b+valu3  z a b c                 = valu2 z a b                  `ap` value c+valu4  z a b c d               = valu3 z a b c                `ap` value d+valu5  z a b c d e             = valu4 z a b c d              `ap` value e+valu6  z a b c d e f           = valu5 z a b c d e            `ap` value f+valu7  z a b c d e f g         = valu6 z a b c d e f          `ap` value g+valu8  z a b c d e f g h       = valu7 z a b c d e f g        `ap` value h+valu9  z a b c d e f g h i     = valu8 z a b c d e f g h      `ap` value i+valu10 z a b c d e f g h i j   = valu9 z a b c d e f g h i    `ap` value j+valu11 z a b c d e f g h i j k = valu10 z a b c d e f g h i j `ap` value k  -- | Creates an empty dictionary. @@ -828,7 +888,7 @@   <*> newIORef 0   <*> return fileMod -hashNode :: [ Int ] -> Int32+hashNode :: Node -> Int32 hashNode is = List.foldl' f golden is    where f m c = fromIntegral c * magic + hashInt32 m          magic  = 0xdeadbeef@@ -840,5 +900,5 @@              where r :: Int64                    r = fromIntegral a * fromIntegral b -hashInt2 :: (Int, Int) -> Int32+hashInt2 :: (Int32, Int32) -> Int32 hashInt2 (ix, rep) = hashNode [ix , rep]
src/full/Agda/TypeChecking/SizedTypes.hs view
@@ -15,6 +15,7 @@ import Agda.TypeChecking.Reduce import Agda.TypeChecking.MetaVars import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope import {-# SOURCE #-} Agda.TypeChecking.Conversion import qualified Agda.Utils.Warshall as W import Agda.Utils.List@@ -87,7 +88,7 @@         mi <- lookupMeta m         case mvJudgement mi of           HasType _ a -> do-            TelV tel b <- telView <$> instantiateFull a+            TelV tel b <- telView =<< instantiateFull a             if b /= sz               then return []               else return [(m, size tel)]@@ -97,6 +98,7 @@ data SizeExpr = SizeMeta MetaId [CtxId]               | Rigid CtxId +-- Leq a n b = (a =< b + n) data SizeConstraint = Leq SizeExpr Int SizeExpr  instance Show SizeExpr where@@ -137,10 +139,10 @@       MetaV m args         | all isVar args && distinct args -> do           cxt <- getContextId-          return (SizeMeta m [ cxt !! fromIntegral i | Arg _ (Var i []) <- args ], 0)+          return (SizeMeta m [ cxt !! fromIntegral i | Arg _ _ (Var i []) <- args ], 0)       _ -> patternViolation   where-    isVar (Arg _ (Var _ [])) = True+    isVar (Arg _ _ (Var _ [])) = True     isVar _ = False  flexibleVariables :: SizeConstraint -> [(MetaId, [CtxId])]@@ -154,7 +156,7 @@     Def _ [] <- primSize     Def _ [] <- primSizeInf     Def _ [] <- primSizeSuc-    optSizedTypes <$> commandLineOptions+    optSizedTypes <$> pragmaOptions   `catchError` \_ -> return False  solveSizeConstraints :: MonadTCM tcm => tcm ()@@ -201,7 +203,7 @@       reportSLn "tc.size.solve" 10 $ "Solved constraints: " ++ show sol       inf <- primSizeInf       s <- primSizeSuc-      let suc v = s `apply` [Arg NotHidden v]+      let suc v = s `apply` [defaultArg v]           plus v 0 = v           plus v n = suc $ plus v (n - 1) 
src/full/Agda/TypeChecking/Substitute.hs view
@@ -1,9 +1,8 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, TypeSynonymInstances #-} module Agda.TypeChecking.Substitute where  import Control.Monad.Identity import Control.Monad.Reader-import Data.Generics import Data.List hiding (sort) import Data.Map (Map) import qualified Data.Map as Map@@ -14,6 +13,7 @@  import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Free+import Agda.TypeChecking.CompiledClause  import Agda.Utils.Monad import Agda.Utils.Size@@ -29,17 +29,18 @@  instance Apply Term where     apply m [] = m-    apply m args@(Arg _ v:args0) =-	case m of-	    Var i args'   -> Var i (args' ++ args)-	    Def c args'   -> Def c (args' ++ args)-	    Con c args'   -> Con c (args' ++ args)-	    Lam _ u	  -> absApp u v `apply` args0-	    MetaV x args' -> MetaV x (args' ++ args)-	    Lit l	  -> __IMPOSSIBLE__-	    Pi _ _	  -> __IMPOSSIBLE__-	    Fun _ _	  -> __IMPOSSIBLE__-	    Sort _	  -> __IMPOSSIBLE__+    apply m args@(a:args0) =+        case m of+            Var i args'   -> Var i (args' ++ args)+            Def c args'   -> Def c (args' ++ args)+            Con c args'   -> Con c (args' ++ args)+            Lam _ u       -> absApp u (unArg a) `apply` args0+            MetaV x args' -> MetaV x (args' ++ args)+            Lit l         -> __IMPOSSIBLE__+            Pi _ _        -> __IMPOSSIBLE__+            Fun _ _       -> __IMPOSSIBLE__+            Sort _        -> __IMPOSSIBLE__+            DontCare      -> __IMPOSSIBLE__   instance Apply Type where   apply = piApply@@ -48,9 +49,9 @@   apply s [] = s   apply s _  = __IMPOSSIBLE__ -instance Apply Telescope where-  apply tel		  []	   = tel-  apply EmptyTel	  _	   = __IMPOSSIBLE__+instance Subst a => Apply (Tele a) where+  apply tel               []       = tel+  apply EmptyTel          _        = __IMPOSSIBLE__   apply (ExtendTel _ tel) (t : ts) = absApp tel (unArg t) `apply` ts  instance Apply Definition where@@ -59,8 +60,9 @@ instance Apply Defn where   apply d args = case d of     Axiom{} -> d-    Function{ funClauses = cs, funInv = inv } ->-      d { funClauses = apply cs args, funInv = apply inv args }+    Function{ funClauses = cs, funCompiled = cc, funInv = inv } ->+      d { funClauses = apply cs args, funCompiled = apply cc args+        , funInv = apply inv args }     Datatype{ dataPars = np, dataClause = cl } ->       d { dataPars = np - size args, dataClause = apply cl args }     Record{ recPars = np, recConType = t, recClause = cl, recTel = tel } ->@@ -75,24 +77,46 @@ instance Apply PrimFun where     apply (PrimFun x ar def) args   = PrimFun x (ar - size args) $ \vs -> def (args ++ vs) +instance Apply Clauses where+    apply (Clauses c tc) args =+      Clauses (apply c args) (apply tc args)+ instance Apply Clause where     apply (Clause r tel perm ps b) args =       Clause r (apply tel args) (apply perm args)              (drop (size args) ps) (apply b args) +instance Apply CompiledClauses where+  apply cc args = case cc of+    Fail     -> Fail+    Done m t+      | m >= len  -> Done (m - len) (substs ([ Var (fromIntegral i) []+                                             | i <- [0..m - len - 1]] +++                                             map unArg args) t)+      | otherwise -> __IMPOSSIBLE__+    Case n bs+      | n >= len  -> Case (n - len) (apply bs args)+      | otherwise -> __IMPOSSIBLE__+    where+      len = length args++instance Apply a => Apply (Case a) where+  apply (Branches cs ls m) args =+    Branches (apply cs args) (apply ls args) (apply m args)+ instance Apply FunctionInverse where   apply NotInjective  args = NotInjective   apply (Inverse inv) args = Inverse $ apply inv args  instance Apply ClauseBody where-    apply  b		   []		  = b-    apply (Bind (Abs _ b)) (Arg _ v:args) = subst v b `apply` args-    apply (NoBind b)	   (_:args)	  = b `apply` args-    apply (Body _)	   (_:_)	  = __IMPOSSIBLE__-    apply  NoBody	    _		  = NoBody+    apply  b               []       = b+    apply (Bind (Abs _ b)) (a:args) = subst (unArg a) b `apply` args+    apply (NoBind b)       (_:args) = b `apply` args+    apply (Body _)         (_:_)    = __IMPOSSIBLE__+    apply  NoBody           _       = NoBody  instance Apply DisplayTerm where-  apply (DTerm v)	   args = DTerm $ apply v args+  apply (DTerm v)          args = DTerm $ apply v args   apply (DWithApp v args') args = DWithApp v $ args' ++ args  instance Apply t => Apply [t] where@@ -127,10 +151,10 @@ -- | The type must contain the right number of pis without have to perform any -- reduction. piApply :: Type -> Args -> Type-piApply t []				= t-piApply (El _ (Pi  _ b)) (Arg _ v:args) = absApp b v `piApply` args-piApply (El _ (Fun _ b)) (_:args)	= b `piApply` args-piApply _ _				= __IMPOSSIBLE__+piApply t []                      = t+piApply (El _ (Pi  _ b)) (a:args) = absApp b (unArg a) `piApply` args+piApply (El _ (Fun _ b)) (_:args) = b `piApply` args+piApply _ _                       = __IMPOSSIBLE__  -- | @(abstract args v) args --> v[args]@. class Abstract t where@@ -144,10 +168,10 @@  instance Abstract Sort where     abstract EmptyTel s = s-    abstract _	      s = __IMPOSSIBLE__+    abstract _        s = __IMPOSSIBLE__  instance Abstract Telescope where-  abstract  EmptyTel	        tel = tel+  abstract  EmptyTel            tel = tel   abstract (ExtendTel arg tel') tel = ExtendTel arg $ fmap (`abstract` tel) tel'  instance Abstract Definition where@@ -156,8 +180,9 @@ instance Abstract Defn where   abstract tel d = case d of     Axiom{} -> d-    Function{ funClauses = cs, funInv = inv } ->-      d { funClauses = abstract tel cs, funInv = abstract tel inv }+    Function{ funClauses = cs, funCompiled = cc, funInv = inv } ->+      d { funClauses = abstract tel cs, funCompiled = abstract tel cc+        , funInv = abstract tel inv }     Datatype{ dataPars = np, dataClause = cl } ->       d { dataPars = np + size tel, dataClause = abstract tel cl }     Record{ recPars = np, recConType = t, recClause = cl, recTel = tel' } ->@@ -171,14 +196,28 @@  instance Abstract PrimFun where     abstract tel (PrimFun x ar def) = PrimFun x (ar + n) $ \ts -> def $ genericDrop n ts-	where n = size tel+        where n = size tel +instance Abstract Clauses where+  abstract tel (Clauses c tc) =+    Clauses (abstract tel c) (abstract tel tc)+ instance Abstract Clause where   abstract tel (Clause r tel' perm ps b) =     Clause r (abstract tel tel') (abstract tel perm)            (telVars tel ++ ps) (abstract tel b) -telVars EmptyTel		    = []+instance Abstract CompiledClauses where+  abstract tel Fail = Fail+  abstract tel (Done m t) = Done (m + fromIntegral (size tel)) t+  abstract tel (Case n bs) =+    Case (n + fromIntegral (size tel)) (abstract tel bs)++instance Abstract a => Abstract (Case a) where+  abstract tel (Branches cs ls m) =+    Branches (abstract tel cs) (abstract tel ls) (abstract tel m)++telVars EmptyTel                    = [] telVars (ExtendTel arg (Abs x tel)) = fmap (const $ VarP x) arg : telVars tel  instance Abstract FunctionInverse where@@ -186,11 +225,11 @@   abstract tel (Inverse inv) = Inverse $ abstract tel inv  instance Abstract ClauseBody where-    abstract EmptyTel		 b = b-    abstract (ExtendTel _ tel)	 b = Bind $ fmap (`abstract` b) tel+  abstract EmptyTel          b = b+  abstract (ExtendTel _ tel) b = Bind $ fmap (`abstract` b) tel  instance Abstract t => Abstract [t] where-    abstract tel = map (abstract tel)+  abstract tel = map (abstract tel)  instance Abstract t => Abstract (Maybe t) where   abstract tel x = fmap (abstract tel) x@@ -201,17 +240,21 @@ abstractArgs :: Abstract a => Args -> a -> a abstractArgs args x = abstract tel x     where-	tel   = foldr (\(Arg h x) -> ExtendTel (Arg h $ sort Prop) . Abs x) EmptyTel-	      $ zipWith (fmap . const) names args-	names = cycle $ map (:[]) ['a'..'z']+        tel   = foldr (\(Arg h r x) -> ExtendTel (Arg h r $ sort Prop) . Abs x) EmptyTel+              $ zipWith (fmap . const) names args+        names = cycle $ map (:[]) ['a'..'z'] +-- | Substitutions.++type Substitution = [Term]+ -- | Substitute a term for the nth free variable. -- class Subst t where-    substs     :: [Term] -> t -> t+    substs     :: Substitution -> t -> t     substUnder :: Nat -> Term -> t -> t -idSub :: Telescope -> [Term]+idSub :: Telescope -> Substitution idSub tel = [ Var i [] | i <- [0..size tel - 1] ]  subst :: Subst t => Term -> t -> t@@ -219,34 +262,36 @@  instance Subst Term where     substs us t =-	case t of-	    Var i vs   -> (us !!! i) `apply` substs us vs-	    Lam h m    -> Lam h $ substs us m-	    Def c vs   -> Def c $ substs us vs-	    Con c vs   -> Con c $ substs us vs-	    MetaV x vs -> MetaV x $ substs us vs-	    Lit l      -> Lit l-	    Pi a b     -> uncurry Pi $ substs us (a,b)-	    Fun a b    -> uncurry Fun $ substs us (a,b)-	    Sort s     -> Sort $ substs us s+        case t of+            Var i vs   -> (us !!! i) `apply` substs us vs+            Lam h m    -> Lam h $ substs us m+            Def c vs   -> Def c $ substs us vs+            Con c vs   -> Con c $ substs us vs+            MetaV x vs -> MetaV x $ substs us vs+            Lit l      -> Lit l+            Pi a b     -> uncurry Pi $ substs us (a,b)+            Fun a b    -> uncurry Fun $ substs us (a,b)+            Sort s     -> Sort $ substs us s+            DontCare   -> DontCare         where-            []     !!! n = error "unbound variable"+            []     !!! n = __IMPOSSIBLE__             (x:xs) !!! 0 = x             (_:xs) !!! n = xs !!! (n - 1)     substUnder n u t =-	case t of-	    Var i vs-	      | i == n	  -> raise n u `apply` substUnder n u vs-	      | i < n	  -> Var i $ substUnder n u vs-	      | otherwise -> Var (i - 1) $ substUnder n u vs-	    Lam h m    -> Lam h $ substUnder n u m-	    Def c vs   -> Def c $ substUnder n u vs-	    Con c vs   -> Con c $ substUnder n u vs-	    MetaV x vs -> MetaV x $ substUnder n u vs-	    Lit l      -> Lit l-	    Pi a b     -> uncurry Pi $ substUnder n u (a,b)-	    Fun a b    -> uncurry Fun $ substUnder n u (a,b)-	    Sort s     -> Sort $ substUnder n u s+        case t of+            Var i vs+              | i == n    -> raise n u `apply` substUnder n u vs+              | i < n     -> Var i $ substUnder n u vs+              | otherwise -> Var (i - 1) $ substUnder n u vs+            Lam h m    -> Lam h $ substUnder n u m+            Def c vs   -> Def c $ substUnder n u vs+            Con c vs   -> Con c $ substUnder n u vs+            MetaV x vs -> MetaV x $ substUnder n u vs+            Lit l      -> Lit l+            Pi a b     -> uncurry Pi $ substUnder n u (a,b)+            Fun a b    -> uncurry Fun $ substUnder n u (a,b)+            Sort s     -> Sort $ substUnder n u s+            DontCare   -> DontCare  instance Subst Type where     substs us (El s t) = substs us s `El` substs us t@@ -275,57 +320,57 @@  instance Subst Pattern where   substs us p = case p of-    VarP s    -> VarP s-    LitP l    -> LitP l-    ConP c ps -> ConP c $ substs us ps-    DotP t    -> DotP $ substs us t+    VarP s       -> VarP s+    LitP l       -> LitP l+    ConP c mt ps -> ConP c (substs us mt) $ substs us ps+    DotP t       -> DotP $ substs us t   substUnder n u p = case p of-    VarP s    -> VarP s-    LitP l    -> LitP l-    ConP c ps -> ConP c $ substUnder n u ps-    DotP t    -> DotP $ substUnder n u t+    VarP s       -> VarP s+    LitP l       -> LitP l+    ConP c mt ps -> ConP c (substUnder n u mt) $ substUnder n u ps+    DotP t       -> DotP $ substUnder n u t  instance Subst t => Subst (Blocked t) where-    substs us b	     = fmap (substs us) b+    substs us b      = fmap (substs us) b     substUnder n u b = fmap (substUnder n u) b  instance Subst DisplayTerm where-  substs us	 (DTerm v)	  = DTerm $ substs us v-  substs us	 (DWithApp vs ws) = uncurry DWithApp $ substs us (vs, ws)-  substUnder n u (DTerm v)	  = DTerm $ substUnder n u v+  substs us      (DTerm v)        = DTerm $ substs us v+  substs us      (DWithApp vs ws) = uncurry DWithApp $ substs us (vs, ws)+  substUnder n u (DTerm v)        = DTerm $ substUnder n u v   substUnder n u (DWithApp vs ws) = uncurry DWithApp $ substUnder n u (vs, ws) -instance Subst Telescope where-  substs us  EmptyTel		   = EmptyTel-  substs us (ExtendTel t tel)	   = uncurry ExtendTel $ substs us (t, tel)-  substUnder n u  EmptyTel	   = EmptyTel+instance Subst a => Subst (Tele a) where+  substs us  EmptyTel              = EmptyTel+  substs us (ExtendTel t tel)      = uncurry ExtendTel $ substs us (t, tel)+  substUnder n u  EmptyTel         = EmptyTel   substUnder n u (ExtendTel t tel) = uncurry ExtendTel $ substUnder n u (t, tel) -instance (Data a, Subst a) => Subst (Abs a) where-    substs us	   (Abs x t) = Abs x $ substs (Var 0 [] : raise 1 us) t+instance Subst a => Subst (Abs a) where+    substs us      (Abs x t) = Abs x $ substs (Var 0 [] : raise 1 us) t     substUnder n u (Abs x t) = Abs x $ substUnder (n + 1) u t  instance Subst a => Subst (Arg a) where-    substs us	   = fmap (substs us)+    substs us      = fmap (substs us)     substUnder n u = fmap (substUnder n u)  instance Subst a => Subst (Maybe a) where-  substs us	 = fmap (substs us)+  substs us      = fmap (substs us)   substUnder n u = fmap (substUnder n u)  instance Subst a => Subst [a] where-    substs us	   = map (substs us)+    substs us      = map (substs us)     substUnder n u = map (substUnder n u)  instance (Subst a, Subst b) => Subst (a,b) where-    substs us (x,y)	 = (substs us x, substs us y)+    substs us (x,y)      = (substs us x, substs us y)     substUnder n u (x,y) = (substUnder n u x, substUnder n u y)  instance Subst ClauseBody where-    substs us (Body t)	      = Body $ substs us t-    substs us (Bind b)	      = Bind $ substs us b+    substs us (Body t)        = Body $ substs us t+    substs us (Bind b)        = Bind $ substs us b     substs us (NoBind b)      = NoBind $ substs us b-    substs _   NoBody	      = NoBody+    substs _   NoBody         = NoBody     substUnder n u (Body t)   = Body $ substUnder n u t     substUnder n u (Bind b)   = Bind $ substUnder n u b     substUnder n u (NoBind b) = NoBind $ substUnder n u b@@ -341,20 +386,21 @@  instance Raise Term where     raiseFrom m k v =-	case v of-	    Var i vs-		| i < m	    -> Var i $ rf vs-		| otherwise -> Var (i + k) $ rf vs-	    Lam h m	    -> Lam h $ rf m-	    Def c vs	    -> Def c $ rf vs-	    Con c vs	    -> Con c $ rf vs-	    MetaV x vs	    -> MetaV x $ rf vs-	    Lit l	    -> Lit l-	    Pi a b	    -> uncurry Pi $ rf (a,b)-	    Fun a b	    -> uncurry Fun $ rf (a,b)-	    Sort s	    -> Sort $ rf s-	where-	    rf x = raiseFrom m k x+        case v of+            Var i vs+                | i < m     -> Var i $ rf vs+                | otherwise -> Var (i + k) $ rf vs+            Lam h m         -> Lam h $ rf m+            Def c vs        -> Def c $ rf vs+            Con c vs        -> Con c $ rf vs+            MetaV x vs      -> MetaV x $ rf vs+            Lit l           -> Lit l+            Pi a b          -> uncurry Pi $ rf (a,b)+            Fun a b         -> uncurry Fun $ rf (a,b)+            Sort s          -> Sort $ rf s+            DontCare        -> DontCare+        where+            rf x = raiseFrom m k x  instance Raise Type where     raiseFrom m k (El s t) = raiseFrom m k s `El` raiseFrom m k t@@ -370,17 +416,25 @@       DLub s1 s2 -> DLub (rf s1) (rf s2)       where rf x = raiseFrom m k x -instance Raise Telescope where-    raiseFrom m k EmptyTel	    = EmptyTel+-- Andreas, 2010-09-09 raise dot patterns and type info embedded in a pattern+instance Raise Pattern where+    raiseFrom m k p = case p of+      DotP t -> DotP $ raiseFrom m k t+      ConP c mt ps -> ConP c (raiseFrom m k mt) (raiseFrom m k ps)+      VarP x -> p+      LitP l -> p++instance Raise a => Raise (Tele a) where+    raiseFrom m k EmptyTel          = EmptyTel     raiseFrom m k (ExtendTel a tel) = uncurry ExtendTel $ raiseFrom m k (a, tel)  instance Raise DisplayForm where   raiseFrom m k (Display n ps v) = Display n (raiseFrom (m + 1) k ps)-					     (raiseFrom (m + n) k v)+                                             (raiseFrom (m + n) k v)  instance Raise DisplayTerm where   raiseFrom m k (DWithApp xs ys) = uncurry DWithApp $ raiseFrom m k (xs, ys)-  raiseFrom m k (DTerm v)	 = DTerm $ raiseFrom m k v+  raiseFrom m k (DTerm v)        = DTerm $ raiseFrom m k v  instance Raise t => Raise (Abs t) where     raiseFrom m k = fmap (raiseFrom (m + 1) k)@@ -408,16 +462,16 @@  data TelView = TelV Telescope Type -telView :: Type -> TelView-telView t = case unEl t of-  Pi a (Abs x b)  -> absV a x $ telView b-  Fun a b	  -> absV a "_" $ telView (raise 1 b)-  _		  -> TelV EmptyTel t+telView' :: Type -> TelView+telView' t = case unEl t of+  Pi a (Abs x b)  -> absV a x $ telView' b+  Fun a b         -> absV a "_" $ telView' (raise 1 b)+  _               -> TelV EmptyTel t   where     absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t  telePi :: Telescope -> Type -> Type-telePi  EmptyTel	 t = t+telePi  EmptyTel         t = t telePi (ExtendTel u tel) t = el $ fn u b   where     el = El (dLub s1 s2)@@ -427,11 +481,11 @@      fn a b       | 0 `freeIn` absBody b = Pi a b-      | otherwise	     = Fun a $ absApp b __IMPOSSIBLE__+      | otherwise            = Fun a $ absApp b __IMPOSSIBLE__  -- | Everything will be a pi. telePi_ :: Telescope -> Type -> Type-telePi_  EmptyTel	 t = t+telePi_  EmptyTel        t = t telePi_ (ExtendTel u tel) t = el $ Pi u b   where     el = El (dLub s1 s2)
src/full/Agda/TypeChecking/Telescope.hs view
@@ -2,6 +2,7 @@  module Agda.TypeChecking.Telescope where +import Control.Applicative import Data.Set (Set) import qualified Data.Set as Set import Data.List@@ -10,6 +11,7 @@ import Agda.Syntax.Internal  import Agda.TypeChecking.Monad+import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute import Agda.TypeChecking.Free @@ -76,7 +78,7 @@  teleArgs :: Telescope -> Args teleArgs tel =-  reverse [ Arg h (Var i []) | (i, Arg h _) <- zip [0..] $ reverse (telToList tel) ]+  reverse [ Arg h r (Var i []) | (i, Arg h r _) <- zip [0..] $ reverse (telToList tel) ]  -- | A telescope split in two. data SplitTel = SplitTel@@ -117,3 +119,25 @@     m         = genericLength $ takeWhile (`notElem` is) (reverse js)     (tel1, tel2) = telFromList -*- telFromList $ genericSplitAt (n - m) $ telToList tel' +-- | A safe variant of telView.++telView :: MonadTCM tcm => Type -> tcm TelView+telView t = do+  t <- reduce t+  case unEl t of+    Pi a (Abs x b) -> absV a x   <$> telView b+    Fun a b	   -> absV a "_" <$> telView (raise 1 b)+    _		   -> return $ TelV EmptyTel t+  where+    absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t++-- | A safe variant of piApply.++piApplyM :: MonadTCM tcm => Type -> Args -> tcm Type+piApplyM t []           = return t+piApplyM t (arg : args) = do+  t <- reduce t+  case (t, arg) of+    (El _ (Pi  _ b), arg) -> absApp b (unArg arg) `piApplyM` args+    (El _ (Fun _ b), _  ) -> b `piApplyM` args+    _                     -> __IMPOSSIBLE__
src/full/Agda/TypeChecking/Test/Generators.hs view
@@ -150,7 +150,7 @@ 			{ nameId	  = NameId n 1 			, nameConcrete	  = C.Name noRange [C.Id s] 			, nameBindingSite = noRange-			, nameFixity	  = defaultFixity+			, nameFixity	  = defaultFixity' 			} 		      } @@ -192,7 +192,8 @@ 	hiddenFreqs $ tcFrequencies conf  instance GenC a => GenC (Arg a) where-  genC conf = uncurry Arg <$> genC conf+  genC conf = (\ (h, a) -> Arg h Relevant a) <$> genC conf+--   genC conf = uncurry Arg <$> genC conf  instance GenC a => GenC (Abs a) where   genC conf = Abs "x" <$> genC (extendConf conf)@@ -387,6 +388,7 @@       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 -> []   noShrink = id  instance ShrinkC Char Char where@@ -404,7 +406,8 @@   noShrink = fmap noShrink  instance ShrinkC a b => ShrinkC (Arg a) (Arg b) where-  shrinkC conf (Arg h x) = uncurry Arg <$> shrinkC conf (h, x)+  shrinkC conf (Arg h r x) = (\ (h,x) -> Arg h r x) <$> shrinkC conf (h, x)+--  shrinkC conf (Arg h x) = uncurry Arg <$> shrinkC conf (h, x)   noShrink = fmap noShrink  instance ShrinkC a b => ShrinkC (Blocked a) (Blocked b) where@@ -412,6 +415,7 @@   shrinkC conf (NotBlocked x) = NotBlocked <$> shrinkC conf x   noShrink = fmap noShrink +-- Andreas 2010-09-21: simplify? since Sort Prop is no longer abused as DontCare instance ShrinkC Sort Sort where   shrinkC conf Prop = []   shrinkC conf s = Prop : case s of@@ -435,8 +439,9 @@   noShrink = id  instance ShrinkC Term Term where+  shrinkC conf (DontCare)  = []   shrinkC conf (Sort Prop) = []-  shrinkC conf t	   = filter validType $ Sort Prop : case t of+  shrinkC conf t	   = filter validType $ DontCare : case t of     Var i args   -> map unArg args ++ 		    (uncurry Var <$> shrinkC conf (VarName i, NoType args))     Def d args   -> map unArg args ++@@ -451,6 +456,7 @@ 		    (uncurry Fun <$> shrinkC conf (a, b))     Sort s       -> Sort <$> shrinkC conf s     MetaV m args -> map unArg args ++ (MetaV m <$> shrinkC conf (NoType args))+    DontCare     -> __IMPOSSIBLE__     where       validType t 	| not (tcIsType conf) = True@@ -469,7 +475,7 @@  instance KillVar Term where   killVar i t = case t of-    Var j args | j == i	   -> Sort Prop+    Var j args | j == i	   -> DontCare 	       | j >  i	   -> Var (j - 1) $ killVar i args 	       | otherwise -> Var j	  $ killVar i args     Def c args		   -> Def c	  $ killVar i args@@ -480,6 +486,7 @@     Pi a b		   -> uncurry Pi  $ killVar i (a, b)     Fun a b		   -> uncurry Fun $ killVar i (a, b)     MetaV m args	   -> MetaV m	  $ killVar i args+    DontCare               -> DontCare  instance KillVar Type where   killVar i (El s t) = El s $ killVar i t
+ src/full/Agda/TypeChecking/UniversePolymorphism.hs view
@@ -0,0 +1,89 @@+{-# LANGUAGE CPP #-}++module Agda.TypeChecking.UniversePolymorphism where++import Control.Applicative+import Control.Monad.Error+import Data.List++import Agda.Syntax.Internal+import Agda.Syntax.Common+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Level+import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Monad.Builtin+import qualified Agda.Utils.Warshall as W++import Agda.Utils.Impossible++#include "../undefined.h"++mlevel :: MonadTCM tcm => tcm (Maybe Term)+mlevel = liftTCM $ (Just <$> primLevel) `catchError` \_ -> return Nothing++compareLevel :: MonadTCM tcm => Comparison -> Term -> Term -> tcm Constraints+compareLevel cmp u v = do+  reportSDoc "tc.conv.level" 10 $ vcat+    [ text "Comparing levels"+    , nest 2 $ sep [ prettyTCM u <+> prettyTCM cmp+                   , prettyTCM v+                   ]+    ]+  u <- reduce u+  v <- reduce v+  reportSDoc "tc.conv.level" 15 $+      nest 2 $ sep [ text (show u) <+> prettyTCM cmp+                   , text (show v)+                   ]+  let unMax (Max [a]) = a+      unMax _         = __IMPOSSIBLE__+  l1' <- unMax <$> levelView u+  l2' <- unMax <$> levelView v++  let bad = typeError $ UnequalLevel cmp u v++  let c  = min (constant l1') (constant l2')+      l1 = minus l1 c+      l2 = minus l2 c++  case (cmp, l1, l2) of+    (cmp, ClosedLevel n, ClosedLevel m) ->+      case cmp of+        CmpEq  | n == m -> return []+        CmpLeq | n <= m -> return []+        _               -> bad+    (CmpLeq, ClosedLevel 0, _) -> return []+    _ -> buildConstraint $ LevelCmp cmp u v+  where+    constant (ClosedLevel n) = n+    constant (Plus n _)      = n++    minus (ClosedLevel n) m = ClosedLevel (n - m)+    minus (Plus n l) m      = Plus (n - m) l++isLevelConstraint LevelCmp{} = True+isLevelConstraint _          = False++warshallConstraint :: Constraint -> TCM [W.Constraint]+warshallConstraint (LevelCmp cmp a b) = do+  -- produce constraints+  return []+warshallConstraint _ = __IMPOSSIBLE__++solveLevelConstraints :: TCM ()+solveLevelConstraints = do+  cs <- takeConstraints+  let (lcs, rest) = partition (isLevelConstraint . clValue) cs++  lcs <- concat <$> mapM warshallConstraint (map clValue lcs)++  let msol = W.solve lcs++  case msol of+    Nothing  -> typeError $ GenericError "Bad universe levels! No further information provided. You suck!"+    Just sol -> do+      -- do something interesting with the solution+      addConstraints rest+      return ()+
+ src/full/Agda/TypeChecking/UniversePolymorphism.hs-boot view
@@ -0,0 +1,8 @@++module Agda.TypeChecking.UniversePolymorphism where++import Agda.Syntax.Internal+import Agda.TypeChecking.Monad++compareLevel :: MonadTCM tcm => Comparison -> Term -> Term -> tcm Constraints+
src/full/Agda/TypeChecking/With.hs view
@@ -22,6 +22,7 @@ import Agda.TypeChecking.Rules.LHS.Split (expandLitPattern) import Agda.TypeChecking.Abstract import Agda.TypeChecking.EtaContract+import Agda.TypeChecking.Telescope  import Agda.Utils.Permutation import Agda.Utils.Size@@ -29,15 +30,19 @@ #include "../undefined.h" import Agda.Utils.Impossible -showPat (VarP x)    = text x-showPat (DotP t)    = comma <> text (showsPrec 10 t "")-showPat (ConP c ps) = parens $ prettyTCM c <+> fsep (map (showPat . unArg) ps)-showPat (LitP l)    = text (show l)+showPat (VarP x)              = text x+showPat (DotP t)              = comma <> text (showsPrec 10 t "")+showPat (ConP c Nothing ps)   = parens $ prettyTCM c <+> fsep (map (showPat . unArg) ps)+showPat (ConP c (Just t) ps)  = parens $ prettyTCM c <+> fsep (map (showPat . unArg) ps) <+> text ":" <+> prettyTCM t+showPat (LitP l)              = text (show l)  withFunctionType :: Telescope -> [Term] -> [Type] -> Telescope -> Type -> TCM Type-withFunctionType delta1 vs as delta2 b = do-  vas <- etaContract =<< normalise (zip vs as)-  b   <- etaContract =<< normalise (telePi_ delta2 b)+withFunctionType delta1 vs as delta2 b = {-dontEtaContractImplicit $-} do+  (vas, b) <- addCtxTel delta1 $ do+    vs <- etaContract =<< normalise vs+    as <- etaContract =<< normalise as+    b  <- etaContract =<< normalise (telePi_ delta2 b)+    return (zip vs as, b)   return $ telePi_ delta1 $ foldr (uncurry piAbstractTerm) b vas  -- | Compute the clauses for the with-function given the original patterns.@@ -47,10 +52,14 @@   where     buildWithClause (A.Clause (LHS i _ ps wps) rhs wh) = do       let (wps0, wps1) = genericSplitAt n wps-          ps0          = map (Arg NotHidden . unnamed) wps0+          ps0          = map (defaultArg . unnamed) wps0       rhs <- buildRHS rhs       (ps1, ps2)  <- genericSplitAt n1 <$> stripWithClausePatterns gamma qs perm ps-      return $ A.Clause (LHS i aux (ps1 ++ ps0 ++ ps2) wps1) rhs wh+      let result = A.Clause (LHS i aux (ps1 ++ ps0 ++ ps2) wps1) rhs wh+      reportSDoc "tc.with" 20 $ vcat+        [ text "buildWithClause returns" <+> prettyA result+        ]+      return result      buildRHS rhs@(RHS _)               = return rhs     buildRHS rhs@AbsurdRHS             = return rhs@@ -82,12 +91,12 @@     , nest 2 $ text "qs  = " <+> fsep (punctuate comma $ map (showPat . unArg) qs)     ]   ps' <- strip gamma psi qs+  let psp = permute perm ps'   reportSDoc "tc.with.strip" 10 $ vcat     [ nest 2 $ text "ps' = " <+> fsep (punctuate comma $ map prettyA ps')-    , nest 2 $ text "psp = " <+> fsep (punctuate comma $ map prettyA $ permute perm ps')+    , nest 2 $ text "psp = " <+> fsep (punctuate comma $ map prettyA $ psp)     ]--  return $ permute perm ps'+  return psp   where     -- implicit args inserted at top level     -- all three arguments should have the same size@@ -125,7 +134,7 @@               ps <- strip (tel `absApp` v) ps qs               return $ p : ps -        ConP c qs' -> case namedThing $ unArg p of+        ConP c _ qs' -> case namedThing $ unArg p of           A.ConP _ (A.AmbQ cs') ps' -> do              Con c' [] <- constructorForm =<< reduce (Con c [])@@ -142,10 +151,8 @@             -- Compute the argument telescope for the constructor             Con c []    <- constructorForm =<< normalise (Con c [])             Defn _ ct _ _ Constructor{conPars = np}  <- getConstInfo c-            ct <- normalise ct-            let ct'         = flip apply (genericTake np us) ct-                TelV tel' _ = telView ct'-+            let ct' = ct `apply` genericTake np us+            TelV tel' _ <- telView ct'              reportSDoc "tc.with.strip" 20 $               vcat [ text "ct  = " <+> prettyTCM ct@@ -156,7 +163,7 @@                    ]              -- Compute the new telescope-            let v     = Con c $ reverse [ Arg h (Var i []) | (i, Arg h _) <- zip [0..] $ reverse qs' ]+            let v     = Con c $ reverse [ Arg h r (Var i []) | (i, Arg h r _) <- zip [0..] $ reverse qs' ]                 tel'' = tel' `abstract` absApp (raise (size tel') tel) v              reportSDoc "tc.with.strip" 15 $ sep@@ -210,6 +217,8 @@       , text "perm   =" <+> text (show perm)       , text "dt     =" <+> prettyTCM dt       , text "raw    =" <+> text (show display)+      , text "qsToTm =" <+> prettyTCM (patsToTerms qs)+      , text "sub qs =" <+> prettyTCM (substs (sub wild) $ patsToTerms qs)       ]     ] @@ -219,10 +228,28 @@     sub wild = map term [0..] -- m - 1]       where         Perm m xs = reverseP perm+        -- Perm m xs = perm    -- thinking required.. but ignored+                            -- dropping the reverse seems to work better+                            -- Andreas, 2010-09-09: I DISAGREE.         term i = case findIndex (i ==) xs of           Nothing -> wild           Just j  -> Var (fromIntegral j) [] +{- example (test/fail/Issue295.agda)++  aux  = aux d w a b c+  delta1 = d+  delta2 = a b c+  perm = x0,x1,x2,x3 -> x3,x0,x1,x2+  perm = a,b,c,d -> d,a,b,c+WIHOUT reverseP IS:+  dt   = (@0 ⟶ @4) ﹔ (@2 ⟶ @1) | @3+  dt   = (c ⟶ d) ﹔ (a ⟶ b) | w+WITH reverseP IS, AS IT SHOULD:+  dt   = (a ⟶ b) ﹔ (c ⟶ d) | w+  dt   = (@2 ⟶ @1) ﹔ (@0 ⟶ @4) | @3+-}+ patsToTerms :: [Arg Pattern] -> [Arg Term] patsToTerms ps = evalState (toTerms ps) 0   where@@ -242,10 +269,10 @@      toTerm :: Pattern -> State Nat Term     toTerm p = case p of-      VarP _    -> var >>= \i -> return $ Var i []-      DotP t    -> return t-      ConP c ps -> Con c <$> toTerms ps-      LitP l    -> return $ Lit l+      VarP _      -> var >>= \i -> return $ Var i []+      DotP t      -> return t+      ConP c _ ps -> Con c <$> toTerms ps+      LitP l      -> return $ Lit l  data ConPos = Here             | ArgPat Int ConPos
src/full/Agda/Utils/Either.hs view
@@ -4,10 +4,12 @@  module Agda.Utils.Either   ( isLeft, isRight+  , allRight   , tests   ) where  import Control.Arrow+import Agda.Utils.QuickCheck import Agda.Utils.TestHelpers  -- | Returns 'True' iff the argument is @'Right' x@ for some @x@.@@ -22,8 +24,35 @@ isLeft (Right _) = False isLeft (Left _)  = True +-- | Returns @'Right' <input with tags stripped>@ if all elements are+-- to the right, and otherwise @Left <input>@:+--+-- @+--  allRight xs ==+--    if all isRight xs then+--      Right (map (\(Right x) -> x) xs)+--     else+--      Left xs+-- @++allRight :: [Either a b] -> Either [Either a b] [b]+allRight []              = Right []+allRight xs@(Left _ : _) = Left xs+allRight (Right b : xs)  = case allRight xs of+  Left  xs -> Left (Right b : xs)+  Right bs -> Right (b : bs)++prop_allRight xs =+  allRight xs ==+    if all isRight xs then+      Right (map (\(Right x) -> x) xs)+     else+      Left xs+ ------------------------------------------------------------------------ -- All tests  tests :: IO Bool-tests = runTests "Agda.Utils.Either" []+tests = runTests "Agda.Utils.Either"+  [ quickCheck' (prop_allRight :: [Either Integer Bool] -> Bool)+  ]
src/full/Agda/Utils/FileName.hs view
@@ -13,7 +13,7 @@ import Agda.Utils.TestHelpers import Agda.Utils.QuickCheck import Data.Function-import Data.Generics+import Data.Generics (Typeable, Data) import Data.List import Data.Maybe import Control.Applicative@@ -44,7 +44,7 @@  -- | Constructs 'AbsolutePath's. ----- Precondition: The path must be absolute.+-- Precondition: The path must be absolute and valid.  mkAbsolute :: FilePath -> AbsolutePath mkAbsolute f@@ -53,26 +53,46 @@   | otherwise    = __IMPOSSIBLE__  prop_mkAbsolute f =-  absolutePathInvariant $ mkAbsolute (pathSeparator : f)+  let path = rootPath ++ f+  in+#if mingw32_HOST_OS+      isValid path ==>+#endif+      absolutePathInvariant $ mkAbsolute $ path +#if mingw32_HOST_OS+rootPath = joinDrive "C:" [pathSeparator]+#else+rootPath = [pathSeparator]+#endif+ -- | Makes the path absolute. ----- This function raises an @\_\_IMPOSSIBLE\_\_@ error if+-- This function may raise an @\_\_IMPOSSIBLE\_\_@ error if -- 'canonicalizePath' does not return an absolute path.  absolute :: FilePath -> IO AbsolutePath-absolute f = mkAbsolute <$> canonicalizePath f+absolute f = mkAbsolute <$> do+  -- canonicalizePath sometimes truncates paths pointing to+  -- non-existing files/directories.+  ex <- doesFileExist f .||. doesDirectoryExist f+  if ex then+    canonicalizePath f+   else do+    cwd <- getCurrentDirectory+    return (cwd </> f)+  where+  m1 .||. m2 = do+    b1 <- m1+    if b1 then return True else m2  -- | Tries to establish if the two file paths point to the same file -- (or directory).  infix 4 === -(===) :: FilePath -> FilePath -> IO Bool-p1 === p2 = do-  p1 <- canonicalizePath p1-  p2 <- canonicalizePath p2-  return $ equalFilePath p1 p2+(===) :: AbsolutePath -> AbsolutePath -> Bool+(===) = equalFilePath `on` filePath  ------------------------------------------------------------------------ -- Generators@@ -80,7 +100,7 @@ instance Arbitrary AbsolutePath where   arbitrary = mk . take 3 . map (take 2) <$>                 listOf (listOf1 (elements "a1"))-    where mk ps = AbsolutePath (joinPath $ [pathSeparator] : ps)+    where mk ps = AbsolutePath (joinPath $ rootPath : ps)  ------------------------------------------------------------------------ -- All tests
src/full/Agda/Utils/IO/Locale.hs view
@@ -6,9 +6,8 @@ -- specifies under base 4.2 (and later?; only if the locale is -- supported, see "System.IO"). ----- Note that @'hSetEncoding' 'stdin'@ and @'hSetEncoding' 'stdout'@--- can be used to change the behaviour of the functions below if base--- 4.2 (or later?) is used.+-- Note that 'hSetEncoding' can be used to change the behaviour of the+-- functions below if base 4.2 (or later?) is used.  module Agda.Utils.IO.Locale   ( print
src/full/Agda/Utils/List.hs view
@@ -9,8 +9,13 @@  import Text.Show.Functions import Data.List+import Data.Maybe import Data.Function +mhead :: [a] -> Maybe a+mhead []    = Nothing+mhead (x:_) = Just x+ type Prefix a = [a] type Suffix a = [a] @@ -95,10 +100,15 @@ -- | @'extractNthElement' n xs@ gives the @n@-th element in @xs@ -- (counting from 0), plus the remaining elements (preserving order). +extractNthElement' :: Integral i => i -> [a] -> ([a], a, [a])+extractNthElement' n xs = (left, el, right)+  where+  (left, el : right) = genericSplitAt n xs+ extractNthElement :: Integral i => i -> [a] -> (a, [a])-extractNthElement n xs = (elem, left ++ right)+extractNthElement n xs = (el, left ++ right)   where-  (left, elem : right) = genericSplitAt n xs+  (left, el, right) = extractNthElement' n xs  prop_extractNthElement :: Integer -> [Integer] -> Property prop_extractNthElement n xs =@@ -106,6 +116,21 @@     genericTake n rest ++ [elem] ++ genericDrop n rest == xs   where (elem, rest) = extractNthElement n xs +-- A generalised variant of 'elemIndex'.++genericElemIndex :: (Eq a, Integral i) => a -> [a] -> Maybe i+genericElemIndex x xs =+  listToMaybe $+  map fst $+  filter snd $+  zip [0..] $+  map (== x) xs++prop_genericElemIndex :: Integer -> [Integer] -> Property+prop_genericElemIndex x xs =+  classify (x `elem` xs) "members" $+    genericElemIndex x xs == elemIndex x xs+ ------------------------------------------------------------------------ -- All tests @@ -113,4 +138,5 @@ tests = runTests "Agda.Utils.List"   [ quickCheck' prop_groupBy'   , quickCheck' prop_extractNthElement+  , quickCheck' prop_genericElemIndex   ]
src/full/Agda/Utils/Monad.hs view
@@ -86,6 +86,9 @@ commuteM :: (Traversable f, Applicative m) => f (m a) -> m (f a) commuteM = traverse id +fmapM :: (Traversable f, Applicative m) => (a -> m b) -> f a -> m (f b)+fmapM f = commuteM . fmap f+ type Cont r a = (a -> r) -> r  -- | 'Control.Monad.mapM' for the continuation monad. Terribly useful.
src/full/Agda/Utils/Permutation.hs view
@@ -1,22 +1,44 @@-{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveDataTypeable, CPP #-} module Agda.Utils.Permutation where  import Data.Generics (Typeable, Data) import Data.List import Agda.Utils.Size+import Agda.Utils.Impossible +#include "../undefined.h"+ -- | @permute [2,3,1] [x,y,z] = [y,z,x]@ data Permutation = Perm Integer [Integer]-  deriving (Show, Eq, Data, Typeable)+  deriving (Eq, Data, Typeable) +instance Show Permutation where+  show (Perm n xs) = showx [0..n - 1] ++ " -> " ++ showx xs+    where showx = showList "," (\ i -> "x" ++ show i)+          showList :: String -> (a -> String) -> [a] -> String+          showList sep f [] = ""+          showList sep f [e] = f e+          showList sep f (e:es) = f e ++ sep ++ showList sep f es + instance Sized Permutation where   size (Perm _ xs) = size xs +-- | @permute [2,3,1] [x1,x2,x3] = [x2,x3,x1]@+--   More precisely, @permute indices list = sublist@, generates @sublist@+--   from @list@ by picking the elements of list as indicated by @indices@. +--   @permute [2,4,1] [x1,x2,x3,x4] = [x2,x4,x1]@ permute :: Permutation -> [a] -> [a]-permute (Perm _ is) xs = map ((xs !!) . fromIntegral) is+permute (Perm _ is) xs = map (xs !!!) is+  where+    []     !!! _ = __IMPOSSIBLE__+    (x:xs) !!! 0 = x+    (x:xs) !!! n = xs !!! (n - 1)  idP :: Integer -> Permutation idP n = Perm n [0..n - 1]++takeP :: Integer -> Permutation -> Permutation+takeP n (Perm m xs) = Perm n $ filter (< n) xs  -- | @permute (compose p1 p2) == permute p1 . permute p2@ composeP :: Permutation -> Permutation -> Permutation
src/full/Agda/Utils/Pretty.hs view
@@ -27,3 +27,14 @@ mparens True  = parens mparens False = id +-- | @align max rows@ lays out the elements of @rows@ in two columns,+-- with the second components aligned. The alignment column of the+-- second components is at most @max@ characters to the right of the+-- left-most column.+--+-- Precondition: @max > 0@.++align :: Int -> [(String, Doc)] -> Doc+align max rows =+  vcat $ map (\(s, d) -> text s $$ nest (maxLen + 1) d) $ rows+  where maxLen = maximum $ 0 : filter (< max) (map (length . fst) rows)
− src/full/Agda/Utils/Trace.hs
@@ -1,48 +0,0 @@-{-# LANGUAGE DeriveDataTypeable #-}-module Agda.Utils.Trace where--import Control.Monad-import Data.Monoid-import Data.Generics (Typeable, Data)--type Trace = CurrentCall-type SiblingCall = ChildCall--data CurrentCall a-    = Current a (ParentCall a) [SiblingCall a] [ChildCall a]-    | TopLevel [ChildCall a]-  deriving (Typeable, Data)-data ParentCall a-    = Parent  a (ParentCall a) [SiblingCall a]-    | NoParent-  deriving (Typeable, Data)-data ChildCall a = Child a [ChildCall a]-  deriving (Typeable, Data)--newCall :: a -> Trace a -> Trace a-newCall c (TopLevel cs)	       = Current c NoParent cs []-newCall c (Current c' p ss cs) = Current c (Parent c' p ss) cs []--updateCall :: a -> Trace a -> Trace a-updateCall c (TopLevel _)	 = error $ "updateCall: no a in progress"-updateCall c (Current _ p ss cs) = case p of-    NoParent	     -> TopLevel $ Child c cs : ss-    Parent c' p' ss' -> Current c' p' ss' $ Child c cs : ss--matchCall :: (call -> Maybe a) -> Trace call -> Maybe a-matchCall f tr = case matchTrace f' tr of-    []	  -> Nothing-    x : _ -> Just x-    where-	f' (Child c _) = maybe [] (:[]) $ f c--matchCalls :: (call -> Maybe a) -> Trace call -> [a]-matchCalls f = matchTrace f'-  where-    f' (Child c _) = maybe [] (:[]) $ f c--matchTrace :: Monoid m => (ChildCall call -> m) -> Trace call -> m-matchTrace f (TopLevel _) = mempty-matchTrace f t@(Current c _ _ cs) =-    f (Child c cs) `mappend` matchTrace f (updateCall c t)-
src/full/Agda/Utils/Warshall.hs view
@@ -238,7 +238,7 @@ emptySolution = Map.empty extendSolution subst k v = Map.insert k v subst -data SizeExpr = SizeVar Int Int   -- e.g. x + 5+data SizeExpr = SizeVar RigidId Int   -- e.g. x + 5               | SizeConst Weight  -- a number or infinity  instance Show SizeExpr where