diff --git a/experiment/parse/Cabal-edit.cabal b/experiment/parse/Cabal-edit.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..18654e3ecfdc4649ebc16ce99bfdc9ff1198c8fa
--- /dev/null
+++ b/experiment/parse/Cabal-edit.cabal
@@ -0,0 +1,170 @@
+Name: Cabal
+Version: 1.15.0
+x-revision: 1
+Copyright: 2003-2006, Isaac Jones
+           2005-2011, Duncan Coutts
+License: BSD3
+License-File: LICENSE
+Author: Isaac Jones <ijones@syntaxpolice.org>
+        Duncan Coutts <duncan@community.haskell.org>
+Maintainer: cabal-devel@haskell.org
+Homepage: http://www.haskell.org/cabal/
+bug-reports: http://hackage.haskell.org/trac/hackage/
+Synopsis: A framework for packaging Haskell software
+Description:
+        The Haskell Common Architecture for Building Applications and
+        Libraries: a framework defining a common interface for authors to more
+        easily build their Haskell applications in a portable way.
+        .
+        The Haskell Cabal is part of a larger infrastructure for distributing,
+        organizing, and cataloging Haskell libraries and tools.
+Category: Distribution
+cabal-version: >=1.10
+Build-Type: Custom
+-- Even though we do use the default Setup.lhs it's vital to bootstrapping
+-- that we build Setup.lhs using our own local Cabal source code.
+
+Extra-Source-Files:
+        README changelog
+
+source-repository head
+  type:     darcs
+  location: http://darcs.haskell.org/cabal/
+  subdir:   Cabal
+
+Flag base4
+    Description: Choose the even newer, even smaller, split-up base package.
+
+Flag base3
+    Description: Choose the new smaller, split-up base package.
+
+Library
+  build-depends:   base       >= 2   && < 5,
+                   filepath   >= 1   && < 1.4
+  if flag(base4) { build-depends: base >= 4 } else { build-depends: base < 4 }
+  if flag(base3) { build-depends: base >= 3 } else { build-depends: base < 3 }
+  if flag(base3)
+    Build-Depends: directory  >= 1   && < 1.2,
+                   process    >= 1   && < 1.2,
+                   old-time   >= 1   && < 1.2,
+                   containers >= 0.1 && < 0.6,
+                   array      >= 0.1 && < 0.5,
+                   pretty     >= 1   && < 1.3
+
+  if !os(windows)
+    Build-Depends: unix       >= 2.0 && < 2.6
+
+  ghc-options: -Wall -fno-ignore-asserts
+  if impl(ghc >= 6.8)
+    ghc-options: -fwarn-tabs
+  nhc98-Options: -K4M
+
+  Exposed-Modules:
+        Distribution.Compiler,
+        Distribution.InstalledPackageInfo,
+        Distribution.License,
+        Distribution.Make,
+        Distribution.ModuleName,
+        Distribution.Package,
+        Distribution.PackageDescription,
+        Distribution.PackageDescription.Configuration,
+        Distribution.PackageDescription.Parse,
+        Distribution.PackageDescription.Check,
+        Distribution.PackageDescription.PrettyPrint,
+        Distribution.ParseUtils,
+        Distribution.ReadE,
+        Distribution.Simple,
+        Distribution.Simple.Build,
+        Distribution.Simple.Build.Macros,
+        Distribution.Simple.Build.PathsModule,
+        Distribution.Simple.BuildPaths,
+        Distribution.Simple.Bench,
+        Distribution.Simple.Command,
+        Distribution.Simple.Compiler,
+        Distribution.Simple.Configure,
+        Distribution.Simple.GHC,
+        Distribution.Simple.LHC,
+        Distribution.Simple.Haddock,
+        Distribution.Simple.Hpc,
+        Distribution.Simple.Hugs,
+        Distribution.Simple.Install,
+        Distribution.Simple.InstallDirs,
+        Distribution.Simple.JHC,
+        Distribution.Simple.LocalBuildInfo,
+        Distribution.Simple.NHC,
+        Distribution.Simple.PackageIndex,
+        Distribution.Simple.PreProcess,
+        Distribution.Simple.PreProcess.Unlit,
+        Distribution.Simple.Program,
+        Distribution.Simple.Program.Ar,
+        Distribution.Simple.Program.Builtin,
+        Distribution.Simple.Program.Db,
+        Distribution.Simple.Program.GHC,
+        Distribution.Simple.Program.HcPkg,
+        Distribution.Simple.Program.Hpc,
+        Distribution.Simple.Program.Ld,
+        Distribution.Simple.Program.Run,
+        Distribution.Simple.Program.Script,
+        Distribution.Simple.Program.Types,
+        Distribution.Simple.Register,
+        Distribution.Simple.Setup,
+        Distribution.Simple.SrcDist,
+        Distribution.Simple.Test,
+        Distribution.Simple.UHC,
+        Distribution.Simple.UserHooks,
+        Distribution.Simple.Utils,
+        Distribution.System,
+        Distribution.TestSuite,
+        Distribution.Text,
+        Distribution.Verbosity,
+        Distribution.Version,
+        Distribution.Compat.ReadP,
+        Language.Haskell.Extension
+
+  Other-Modules:
+        Distribution.GetOpt,
+        Distribution.Compat.Exception,
+        Distribution.Compat.CopyFile,
+        Distribution.Compat.TempFile,
+        Distribution.Simple.GHC.IPI641,
+        Distribution.Simple.GHC.IPI642,
+        Paths_Cabal
+
+  Default-Language: Haskell98
+  Default-Extensions: CPP
+
+test-suite unit-tests
+  type: exitcode-stdio-1.0
+  main-is: suite.hs
+  other-modules: PackageTests.BuildDeps.GlobalBuildDepsNotAdditive1.Check,
+                 PackageTests.BuildDeps.GlobalBuildDepsNotAdditive2.Check,
+                 PackageTests.BuildDeps.InternalLibrary0.Check,
+                 PackageTests.BuildDeps.InternalLibrary1.Check,
+                 PackageTests.BuildDeps.InternalLibrary2.Check,
+                 PackageTests.BuildDeps.InternalLibrary3.Check,
+                 PackageTests.BuildDeps.InternalLibrary4.Check,
+                 PackageTests.BuildDeps.TargetSpecificDeps1.Check,
+                 PackageTests.BuildDeps.TargetSpecificDeps2.Check,
+                 PackageTests.BuildDeps.TargetSpecificDeps3.Check,
+                 PackageTests.BuildDeps.SameDepsAllRound.Check,
+                 PackageTests.TestOptions.Check,
+                 PackageTests.TestStanza.Check,
+                 PackageTests.TestSuiteExeV10.Check,
+                 PackageTests.BenchmarkStanza.Check,
+                 PackageTests.PackageTester
+  hs-source-dirs: tests
+  build-depends:
+        base,
+        test-framework,
+        test-framework-quickcheck2,
+        test-framework-hunit,
+        HUnit,
+        QuickCheck >= 2.1.0.1,
+        Cabal,
+        process,
+        directory,
+        filepath,
+        extensible-exceptions,
+        bytestring,
+        unix
+  Default-Language: Haskell98
diff --git a/experiment/parse/Cabal.cabal b/experiment/parse/Cabal.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..675f3c6a354b312863dc5c9e27f95f72c4e23bb8
--- /dev/null
+++ b/experiment/parse/Cabal.cabal
@@ -0,0 +1,169 @@
+Name: Cabal
+Version: 1.15.0
+Copyright: 2003-2006, Isaac Jones
+           2005-2011, Duncan Coutts
+License: BSD3
+License-File: LICENSE
+Author: Isaac Jones <ijones@syntaxpolice.org>
+        Duncan Coutts <duncan@community.haskell.org>
+Maintainer: cabal-devel@haskell.org
+Homepage: http://www.haskell.org/cabal/
+bug-reports: http://hackage.haskell.org/trac/hackage/
+Synopsis: A framework for packaging Haskell software
+Description:
+        The Haskell Common Architecture for Building Applications and
+        Libraries: a framework defining a common interface for authors to more
+        easily build their Haskell applications in a portable way.
+        .
+        The Haskell Cabal is part of a larger infrastructure for distributing,
+        organizing, and cataloging Haskell libraries and tools.
+Category: Distribution
+cabal-version: >=1.10
+Build-Type: Custom
+-- Even though we do use the default Setup.lhs it's vital to bootstrapping
+-- that we build Setup.lhs using our own local Cabal source code.
+
+Extra-Source-Files:
+        README changelog
+
+source-repository head
+  type:     darcs
+  location: http://darcs.haskell.org/cabal/
+  subdir:   Cabal
+
+Flag base4
+    Description: Choose the even newer, even smaller, split-up base package.
+
+Flag base3
+    Description: Choose the new smaller, split-up base package.
+
+Library
+  build-depends:   base       >= 2   && < 5,
+                   filepath   >= 1   && < 1.4
+  if flag(base4) { build-depends: base >= 4 } else { build-depends: base < 4 }
+  if flag(base3) { build-depends: base >= 3 } else { build-depends: base < 3 }
+  if flag(base3)
+    Build-Depends: directory  >= 1   && < 1.2,
+                   process    >= 1   && < 1.2,
+                   old-time   >= 1   && < 1.2,
+                   containers >= 0.1 && < 0.6,
+                   array      >= 0.1 && < 0.5,
+                   pretty     >= 1   && < 1.2
+
+  if !os(windows)
+    Build-Depends: unix       >= 2.0 && < 2.6
+
+  ghc-options: -Wall -fno-ignore-asserts
+  if impl(ghc >= 6.8)
+    ghc-options: -fwarn-tabs
+  nhc98-Options: -K4M
+
+  Exposed-Modules:
+        Distribution.Compiler,
+        Distribution.InstalledPackageInfo,
+        Distribution.License,
+        Distribution.Make,
+        Distribution.ModuleName,
+        Distribution.Package,
+        Distribution.PackageDescription,
+        Distribution.PackageDescription.Configuration,
+        Distribution.PackageDescription.Parse,
+        Distribution.PackageDescription.Check,
+        Distribution.PackageDescription.PrettyPrint,
+        Distribution.ParseUtils,
+        Distribution.ReadE,
+        Distribution.Simple,
+        Distribution.Simple.Build,
+        Distribution.Simple.Build.Macros,
+        Distribution.Simple.Build.PathsModule,
+        Distribution.Simple.BuildPaths,
+        Distribution.Simple.Bench,
+        Distribution.Simple.Command,
+        Distribution.Simple.Compiler,
+        Distribution.Simple.Configure,
+        Distribution.Simple.GHC,
+        Distribution.Simple.LHC,
+        Distribution.Simple.Haddock,
+        Distribution.Simple.Hpc,
+        Distribution.Simple.Hugs,
+        Distribution.Simple.Install,
+        Distribution.Simple.InstallDirs,
+        Distribution.Simple.JHC,
+        Distribution.Simple.LocalBuildInfo,
+        Distribution.Simple.NHC,
+        Distribution.Simple.PackageIndex,
+        Distribution.Simple.PreProcess,
+        Distribution.Simple.PreProcess.Unlit,
+        Distribution.Simple.Program,
+        Distribution.Simple.Program.Ar,
+        Distribution.Simple.Program.Builtin,
+        Distribution.Simple.Program.Db,
+        Distribution.Simple.Program.GHC,
+        Distribution.Simple.Program.HcPkg,
+        Distribution.Simple.Program.Hpc,
+        Distribution.Simple.Program.Ld,
+        Distribution.Simple.Program.Run,
+        Distribution.Simple.Program.Script,
+        Distribution.Simple.Program.Types,
+        Distribution.Simple.Register,
+        Distribution.Simple.Setup,
+        Distribution.Simple.SrcDist,
+        Distribution.Simple.Test,
+        Distribution.Simple.UHC,
+        Distribution.Simple.UserHooks,
+        Distribution.Simple.Utils,
+        Distribution.System,
+        Distribution.TestSuite,
+        Distribution.Text,
+        Distribution.Verbosity,
+        Distribution.Version,
+        Distribution.Compat.ReadP,
+        Language.Haskell.Extension
+
+  Other-Modules:
+        Distribution.GetOpt,
+        Distribution.Compat.Exception,
+        Distribution.Compat.CopyFile,
+        Distribution.Compat.TempFile,
+        Distribution.Simple.GHC.IPI641,
+        Distribution.Simple.GHC.IPI642,
+        Paths_Cabal
+
+  Default-Language: Haskell98
+  Default-Extensions: CPP
+
+test-suite unit-tests
+  type: exitcode-stdio-1.0
+  main-is: suite.hs
+  other-modules: PackageTests.BuildDeps.GlobalBuildDepsNotAdditive1.Check,
+                 PackageTests.BuildDeps.GlobalBuildDepsNotAdditive2.Check,
+                 PackageTests.BuildDeps.InternalLibrary0.Check,
+                 PackageTests.BuildDeps.InternalLibrary1.Check,
+                 PackageTests.BuildDeps.InternalLibrary2.Check,
+                 PackageTests.BuildDeps.InternalLibrary3.Check,
+                 PackageTests.BuildDeps.InternalLibrary4.Check,
+                 PackageTests.BuildDeps.TargetSpecificDeps1.Check,
+                 PackageTests.BuildDeps.TargetSpecificDeps2.Check,
+                 PackageTests.BuildDeps.TargetSpecificDeps3.Check,
+                 PackageTests.BuildDeps.SameDepsAllRound.Check,
+                 PackageTests.TestOptions.Check,
+                 PackageTests.TestStanza.Check,
+                 PackageTests.TestSuiteExeV10.Check,
+                 PackageTests.BenchmarkStanza.Check,
+                 PackageTests.PackageTester
+  hs-source-dirs: tests
+  build-depends:
+        base,
+        test-framework,
+        test-framework-quickcheck2,
+        test-framework-hunit,
+        HUnit,
+        QuickCheck >= 2.1.0.1,
+        Cabal,
+        process,
+        directory,
+        filepath,
+        extensible-exceptions,
+        bytestring,
+        unix
+  Default-Language: Haskell98
diff --git a/experiment/parse/IndexUtils.hs b/experiment/parse/IndexUtils.hs
new file mode 100644
index 0000000000000000000000000000000000000000..d540690004a6a4f26e89f0dcdc59d8b5a6c09ac4
--- /dev/null
+++ b/experiment/parse/IndexUtils.hs
@@ -0,0 +1,58 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Distribution.Client.IndexUtils
+-- Copyright   :  (c) Duncan Coutts 2008
+-- License     :  BSD-like
+--
+-- Maintainer  :  duncan@haskell.org
+-- Stability   :  provisional
+-- Portability :  portable
+--
+-- Extra utils related to the package indexes.
+-----------------------------------------------------------------------------
+module IndexUtils (
+  readPackageIndexFile,
+  parseRepoIndex,
+  ) where
+
+import qualified Tar
+
+import qualified Data.ByteString.Lazy as BS
+import Data.ByteString.Lazy (ByteString)
+import System.FilePath (takeExtension)
+
+-- | Read a compressed \"00-index.tar.gz\" file into a 'PackageIndex'.
+--
+-- This is supposed to be an \"all in one\" way to easily get at the info in
+-- the hackage package index.
+--
+-- It takes a function to map a 'GenericPackageDescription' into any more
+-- specific instance of 'Package' that you might want to use. In the simple
+-- case you can just use @\_ p -> p@ here.
+--
+readPackageIndexFile :: FilePath -> IO [ByteString]
+readPackageIndexFile indexFile =
+      either fail return
+    . parseRepoIndex
+  =<< BS.readFile indexFile
+
+-- | Parse an uncompressed \"00-index.tar\" repository index file represented
+-- as a 'ByteString'.
+--
+parseRepoIndex :: ByteString
+               -> Either String [ByteString]
+parseRepoIndex = foldlTarball (\pkgs -> maybe pkgs (:pkgs) . extractPkg) []
+
+extractPkg :: Tar.Entry -> Maybe ByteString
+extractPkg entry
+  | takeExtension (Tar.fileName entry) == ".cabal"
+  = Just (Tar.fileContent entry)
+  | otherwise = Nothing
+
+foldlTarball :: (a -> Tar.Entry -> a) -> a
+             -> ByteString -> Either String a
+foldlTarball f z = either Left (Right . foldl f z) . check [] . Tar.read
+  where
+    check _  (Tar.Fail err)  = Left  err
+    check ok Tar.Done        = Right ok
+    check ok (Tar.Next e es) = check (e:ok) es
diff --git a/experiment/parse/InstalledPackageInfo.hs b/experiment/parse/InstalledPackageInfo.hs
new file mode 100644
index 0000000000000000000000000000000000000000..6ab73eefbe0b0eebb21ee378acc868f09bd77c72
--- /dev/null
+++ b/experiment/parse/InstalledPackageInfo.hs
@@ -0,0 +1,296 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Distribution.InstalledPackageInfo
+-- Copyright   :  (c) The University of Glasgow 2004
+--
+-- Maintainer  :  libraries@haskell.org
+-- Portability :  portable
+--
+-- This is the information about an /installed/ package that
+-- is communicated to the @ghc-pkg@ program in order to register
+-- a package.  @ghc-pkg@ now consumes this package format (as of version
+-- 6.4). This is specific to GHC at the moment.
+--
+-- The @.cabal@ file format is for describing a package that is not yet
+-- installed. It has a lot of flexibility, like conditionals and dependency
+-- ranges. As such, that format is not at all suitable for describing a package
+-- that has already been built and installed. By the time we get to that stage,
+-- we have resolved all conditionals and resolved dependency version
+-- constraints to exact versions of dependent packages. So, this module defines
+-- the 'InstalledPackageInfo' data structure that contains all the info we keep
+-- about an installed package. There is a parser and pretty printer. The
+-- textual format is rather simpler than the @.cabal@ format: there are no
+-- sections, for example.
+
+{- All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of the University nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -}
+
+-- This module is meant to be local-only to Distribution...
+
+module Distribution.InstalledPackageInfo (
+        InstalledPackageInfo_(..), InstalledPackageInfo,
+        ParseResult(..), PError(..), PWarning,
+        emptyInstalledPackageInfo,
+        parseInstalledPackageInfo,
+        showInstalledPackageInfo,
+        showInstalledPackageInfoField,
+        fieldsInstalledPackageInfo,
+  ) where
+
+import Distribution.ParseUtils
+         ( FieldDescr(..), ParseResult(..), PError(..), PWarning
+         , simpleField, listField, parseLicenseQ
+         , showFields, showSingleNamedField, parseFieldsFlat
+         , parseFilePathQ, parseTokenQ, parseModuleNameQ, parsePackageNameQ
+         , showFilePath, showToken, boolField, parseOptVersion
+         , parseFreeText, showFreeText )
+import Distribution.License     ( License(..) )
+import Distribution.Package
+         ( PackageName(..), PackageIdentifier(..), PackageId, InstalledPackageId(..)
+         , packageName, packageVersion )
+import qualified Distribution.Package as Package
+         ( Package(..) )
+import Distribution.ModuleName
+         ( ModuleName )
+import Distribution.Version
+         ( Version(..) )
+import Distribution.Text
+         ( Text(disp, parse) )
+
+-- -----------------------------------------------------------------------------
+-- The InstalledPackageInfo type
+
+--TODO share PackageMetadata with PackageDescription
+
+data InstalledPackageInfo_ m
+   = InstalledPackageInfo {
+        -- these parts are exactly the same as PackageDescription
+        installedPackageId :: InstalledPackageId,
+        sourcePackageId    :: PackageId,
+        license           :: License,
+        copyright         :: String,
+        maintainer        :: String,
+        author            :: String,
+        stability         :: String,
+        homepage          :: String,
+        pkgUrl            :: String,
+        synopsis          :: String,
+        description       :: String,
+        category          :: String,
+        -- these parts are required by an installed package only:
+        exposed           :: Bool,
+        exposedModules    :: [m],
+        hiddenModules     :: [m],
+        trusted           :: Bool,
+        importDirs        :: [FilePath],  -- contain sources in case of Hugs
+        libraryDirs       :: [FilePath],
+        hsLibraries       :: [String],
+        extraLibraries    :: [String],
+        extraGHCiLibraries:: [String],    -- overrides extraLibraries for GHCi
+        includeDirs       :: [FilePath],
+        includes          :: [String],
+        depends           :: [InstalledPackageId],
+        hugsOptions       :: [String],
+        ccOptions         :: [String],
+        ldOptions         :: [String],
+        frameworkDirs     :: [FilePath],
+        frameworks        :: [String],
+        haddockInterfaces :: [FilePath],
+        haddockHTMLs      :: [FilePath]
+    }
+    deriving (Read, Show)
+
+instance Package.Package          (InstalledPackageInfo_ str) where
+   packageId = sourcePackageId
+
+type InstalledPackageInfo = InstalledPackageInfo_ ModuleName
+
+emptyInstalledPackageInfo :: InstalledPackageInfo_ m
+emptyInstalledPackageInfo
+   = InstalledPackageInfo {
+        installedPackageId = InstalledPackageId "",
+        sourcePackageId    = PackageIdentifier (PackageName "") noVersion,
+        license           = AllRightsReserved,
+        copyright         = "",
+        maintainer        = "",
+        author            = "",
+        stability         = "",
+        homepage          = "",
+        pkgUrl            = "",
+        synopsis          = "",
+        description       = "",
+        category          = "",
+        exposed           = False,
+        exposedModules    = [],
+        hiddenModules     = [],
+        trusted           = False,
+        importDirs        = [],
+        libraryDirs       = [],
+        hsLibraries       = [],
+        extraLibraries    = [],
+        extraGHCiLibraries= [],
+        includeDirs       = [],
+        includes          = [],
+        depends           = [],
+        hugsOptions       = [],
+        ccOptions         = [],
+        ldOptions         = [],
+        frameworkDirs     = [],
+        frameworks        = [],
+        haddockInterfaces = [],
+        haddockHTMLs      = []
+    }
+
+noVersion :: Version
+noVersion = Version{ versionBranch=[], versionTags=[] }
+
+-- -----------------------------------------------------------------------------
+-- Parsing
+
+parseInstalledPackageInfo :: String -> ParseResult InstalledPackageInfo
+parseInstalledPackageInfo =
+    parseFieldsFlat fieldsInstalledPackageInfo emptyInstalledPackageInfo
+
+-- -----------------------------------------------------------------------------
+-- Pretty-printing
+
+showInstalledPackageInfo :: InstalledPackageInfo -> String
+showInstalledPackageInfo = showFields fieldsInstalledPackageInfo
+
+showInstalledPackageInfoField :: String -> Maybe (InstalledPackageInfo -> String)
+showInstalledPackageInfoField = showSingleNamedField fieldsInstalledPackageInfo
+
+-- -----------------------------------------------------------------------------
+-- Description of the fields, for parsing/printing
+
+fieldsInstalledPackageInfo :: [FieldDescr InstalledPackageInfo]
+fieldsInstalledPackageInfo = basicFieldDescrs ++ installedFieldDescrs
+
+basicFieldDescrs :: [FieldDescr InstalledPackageInfo]
+basicFieldDescrs =
+ [ simpleField "name"
+                           disp                   parsePackageNameQ
+                           packageName            (\name pkg -> pkg{sourcePackageId=(sourcePackageId pkg){pkgName=name}})
+ , simpleField "version"
+                           disp                   parseOptVersion
+                           packageVersion         (\ver pkg -> pkg{sourcePackageId=(sourcePackageId pkg){pkgVersion=ver}})
+ , simpleField "id"
+                           disp                   parse
+                           installedPackageId     (\ipid pkg -> pkg{installedPackageId=ipid})
+ , simpleField "license"
+                           disp                   parseLicenseQ
+                           license                (\l pkg -> pkg{license=l})
+ , simpleField "copyright"
+                           showFreeText           parseFreeText
+                           copyright              (\val pkg -> pkg{copyright=val})
+ , simpleField "maintainer"
+                           showFreeText           parseFreeText
+                           maintainer             (\val pkg -> pkg{maintainer=val})
+ , simpleField "stability"
+                           showFreeText           parseFreeText
+                           stability              (\val pkg -> pkg{stability=val})
+ , simpleField "homepage"
+                           showFreeText           parseFreeText
+                           homepage               (\val pkg -> pkg{homepage=val})
+ , simpleField "package-url"
+                           showFreeText           parseFreeText
+                           pkgUrl                 (\val pkg -> pkg{pkgUrl=val})
+ , simpleField "synopsis"
+                           showFreeText           parseFreeText
+                           synopsis               (\val pkg -> pkg{synopsis=val})
+ , simpleField "description"
+                           showFreeText           parseFreeText
+                           description            (\val pkg -> pkg{description=val})
+ , simpleField "category"
+                           showFreeText           parseFreeText
+                           category               (\val pkg -> pkg{category=val})
+ , simpleField "author"
+                           showFreeText           parseFreeText
+                           author                 (\val pkg -> pkg{author=val})
+ ]
+
+installedFieldDescrs :: [FieldDescr InstalledPackageInfo]
+installedFieldDescrs = [
+   boolField "exposed"
+        exposed            (\val pkg -> pkg{exposed=val})
+ , listField   "exposed-modules"
+        disp               parseModuleNameQ
+        exposedModules     (\xs    pkg -> pkg{exposedModules=xs})
+ , listField   "hidden-modules"
+        disp               parseModuleNameQ
+        hiddenModules      (\xs    pkg -> pkg{hiddenModules=xs})
+ , boolField   "trusted"
+        trusted            (\val pkg -> pkg{trusted=val})
+ , listField   "import-dirs"
+        showFilePath       parseFilePathQ
+        importDirs         (\xs pkg -> pkg{importDirs=xs})
+ , listField   "library-dirs"
+        showFilePath       parseFilePathQ
+        libraryDirs        (\xs pkg -> pkg{libraryDirs=xs})
+ , listField   "hs-libraries"
+        showFilePath       parseTokenQ
+        hsLibraries        (\xs pkg -> pkg{hsLibraries=xs})
+ , listField   "extra-libraries"
+        showToken          parseTokenQ
+        extraLibraries     (\xs pkg -> pkg{extraLibraries=xs})
+ , listField   "extra-ghci-libraries"
+        showToken          parseTokenQ
+        extraGHCiLibraries (\xs pkg -> pkg{extraGHCiLibraries=xs})
+ , listField   "include-dirs"
+        showFilePath       parseFilePathQ
+        includeDirs        (\xs pkg -> pkg{includeDirs=xs})
+ , listField   "includes"
+        showFilePath       parseFilePathQ
+        includes           (\xs pkg -> pkg{includes=xs})
+ , listField   "depends"
+        disp               parse
+        depends            (\xs pkg -> pkg{depends=xs})
+ , listField   "hugs-options"
+        showToken          parseTokenQ
+        hugsOptions        (\path  pkg -> pkg{hugsOptions=path})
+ , listField   "cc-options"
+        showToken          parseTokenQ
+        ccOptions          (\path  pkg -> pkg{ccOptions=path})
+ , listField   "ld-options"
+        showToken          parseTokenQ
+        ldOptions          (\path  pkg -> pkg{ldOptions=path})
+ , listField   "framework-dirs"
+        showFilePath       parseFilePathQ
+        frameworkDirs      (\xs pkg -> pkg{frameworkDirs=xs})
+ , listField   "frameworks"
+        showToken          parseTokenQ
+        frameworks         (\xs pkg -> pkg{frameworks=xs})
+ , listField   "haddock-interfaces"
+        showFilePath       parseFilePathQ
+        haddockInterfaces  (\xs pkg -> pkg{haddockInterfaces=xs})
+ , listField   "haddock-html"
+        showFilePath       parseFilePathQ
+        haddockHTMLs       (\xs pkg -> pkg{haddockHTMLs=xs})
+ ]
diff --git a/experiment/parse/Lexer.hs b/experiment/parse/Lexer.hs
new file mode 100644
index 0000000000000000000000000000000000000000..71b562d9ba0028ac3cd9e28352338cf8889f6ddb
--- /dev/null
+++ b/experiment/parse/Lexer.hs
@@ -0,0 +1,552 @@
+{-# LANGUAGE CPP,MagicHash #-}
+{-# LINE 1 "Lexer.x" #-}
+
+{-# LANGUAGE BangPatterns #-}
+module Lexer (ltest, lexToken, Token(..), LToken(..)
+              ,bol_section, in_section, in_field_layout, in_field_braces
+              ,mkLexState) where
+
+import LexerMonad
+import Control.Monad
+import Data.ByteString (ByteString)
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Char8 as B.Char8
+import Data.Word (Word8)
+import qualified Data.Char
+import Data.Char (chr, ord)
+import Data.List (stripPrefix)
+--import Distribution.Simple.Utils (fromUTF8) --don't decode, keep as ByteString
+
+-- testing only:
+import Debug.Trace
+import Control.Exception (assert)
+import qualified Data.Vector as V
+import qualified Data.Text   as T
+import qualified Data.Text.Encoding as T
+import qualified Data.Text.Encoding.Error as T
+
+#if __GLASGOW_HASKELL__ >= 603
+#include "ghcconfig.h"
+#elif defined(__GLASGOW_HASKELL__)
+#include "config.h"
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import Data.Array
+import Data.Char (ord)
+import Data.Array.Base (unsafeAt)
+#else
+import Array
+import Char (ord)
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import GHC.Exts
+#else
+import GlaExts
+#endif
+alex_base :: AlexAddr
+alex_base = AlexA# "\x12\xff\xff\xff\xf9\xff\xff\xff\xfb\xff\xff\xff\x01\x00\x00\x00\x5f\x00\x00\x00\x4b\x01\x00\x00\x37\x02\x00\x00\x48\xff\xff\xff\xdc\xff\xff\xff\x8f\x02\x00\x00\x51\xff\xff\xff\x8a\x02\x00\x00\x0a\x03\x00\x00\x8a\x03\x00\x00\x0a\x04\x00\x00\x8a\x04\x00\x00\x0a\x05\x00\x00\x8a\x05\x00\x00\x0a\x06\x00\x00\x8a\x06\x00\x00\xfb\x06\x00\x00\x00\x00\x00\x00\x7b\x07\x00\x00\x00\x00\x00\x00\xec\x07\x00\x00\x00\x00\x00\x00\x5d\x08\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\xce\x08\x00\x00\x00\x00\x00\x00\x3f\x09\x00\x00\x00\x00\x00\x00\x0b\x01\x00\x00\x00\x00\x00\x00\x80\x09\x00\x00\x80\x0a\x00\x00\x40\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x0a\x00\x00\x00\x00\x00\x00\xc2\x0a\x00\x00\xc2\x0b\x00\x00\x82\x0b\x00\x00\x00\x00\x00\x00\x82\x0c\x00\x00\x42\x0c\x00\x00\x00\x00\x00\x00\x22\x0d\x00\x00\xf7\x0d\x00\x00\xec\x0e\x00\x00\xe1\x0c\x00\x00\x00\x00\x00\x00\x6c\x0f\x00\x00\xb6\x0d\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\xe3\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\xcf\x10\x00\x00\x9d\x11\x00\x00\x00\x00\x00\x00\xf8\x11\x00\x00\xc6\x12\x00\x00\x20\x13\x00\x00\x7c\x13\x00\x00\xd8\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x37\x14\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x23\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00"#
+
+alex_table :: AlexAddr
+alex_table = AlexA# "\x00\x00\x0a\x00\x3a\x00\x3c\x00\x02\x00\x3c\x00\x3d\x00\x3b\x00\x3d\x00\x3e\x00\x03\x00\x3c\x00\x07\x00\x3c\x00\x3d\x00\x4e\x00\x3a\x00\x3c\x00\x41\x00\x00\x00\x3d\x00\x51\x00\x56\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x3a\x00\x08\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x56\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x54\x00\x53\x00\x55\x00\x53\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x2c\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2d\x00\x0e\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x13\x00\x17\x00\x17\x00\x17\x00\x18\x00\x50\x00\x51\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x2f\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x30\x00\x0d\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x24\x00\x12\x00\x19\x00\x19\x00\x19\x00\x1a\x00\x41\x00\x4e\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x49\x00\x33\x00\x49\x00\x49\x00\x49\x00\x49\x00\x09\x00\x4a\x00\x4a\x00\x49\x00\x49\x00\x49\x00\x47\x00\x48\x00\x49\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x4b\x00\x00\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x4a\x00\x49\x00\x4a\x00\x49\x00\x09\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x4c\x00\x49\x00\x4d\x00\x49\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x09\x00\x00\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x37\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x34\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x2f\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x2c\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x0b\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x0c\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x0d\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x0e\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x33\x00\x45\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x26\x00\x11\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1c\x00\x16\x00\x15\x00\x15\x00\x15\x00\x14\x00\x33\x00\x33\x00\x44\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x26\x00\x11\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1c\x00\x16\x00\x15\x00\x15\x00\x15\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x38\x00\x0b\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2b\x00\x0f\x00\x1f\x00\x1f\x00\x1f\x00\x20\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x35\x00\x0c\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x10\x00\x1d\x00\x1d\x00\x1d\x00\x1e\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x43\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x33\x00\x33\x00\x44\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x26\x00\x11\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1c\x00\x16\x00\x15\x00\x15\x00\x15\x00\x14\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x46\x00\x00\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x49\x00\x00\x00\x49\x00\x49\x00\x49\x00\x49\x00\x09\x00\x00\x00\x00\x00\x49\x00\x49\x00\x49\x00\x42\x00\x48\x00\x49\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x00\x00\x00\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x49\x00\x00\x00\x49\x00\x09\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x09\x00\x00\x00\x00\x00\x49\x00\x49\x00\x49\x00\x48\x00\x48\x00\x49\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x00\x00\x00\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x49\x00\x00\x00\x49\x00\x09\x00\x00\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x00\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x00\x00\x00\x00\x00\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x49\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x30\x00\x0d\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x24\x00\x12\x00\x19\x00\x19\x00\x19\x00\x1a\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x53\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2d\x00\x0e\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x22\x00\x13\x00\x17\x00\x17\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+alex_check :: AlexAddr
+alex_check = AlexA# "\xff\xff\xef\x00\x09\x00\x0a\x00\x09\x00\x0a\x00\x0d\x00\xbf\x00\x0d\x00\x2d\x00\x09\x00\x0a\x00\xbb\x00\x0a\x00\x0d\x00\x0a\x00\x09\x00\x0a\x00\x09\x00\xff\xff\x0d\x00\x0a\x00\x0a\x00\xff\xff\xff\xff\x20\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x20\x00\x2d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\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\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\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\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\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\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\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\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\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\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1b\x00\xff\xff\x21\x00\x21\x00\x23\x00\x23\x00\x27\x00\x27\x00\x28\x00\x28\x00\x2a\x00\x2a\x00\x2e\x00\x2e\x00\x31\x00\x31\x00\x33\x00\x33\x00\x33\x00\x36\x00\x36\x00\x39\x00\x39\x00\x53\x00\x53\x00\x53\x00\x50\x00\x50\x00\x50\x00\xff\xff\xff\xff\x42\x00\x42\x00\x42\x00\x3e\x00\x3e\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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,87) [AlexAccSkip,AlexAcc (alex_action_21),AlexAcc (alex_action_18),AlexAcc (alex_action_4),AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAccSkip,AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_9),AlexAcc (alex_action_10),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_13),AlexAcc (alex_action_14),AlexAcc (alex_action_15),AlexAcc (alex_action_16),AlexAcc (alex_action_17),AlexAcc (alex_action_17),AlexAcc (alex_action_19),AlexAcc (alex_action_20),AlexAcc (alex_action_20),AlexAcc (alex_action_22),AlexAcc (alex_action_23),AlexAcc (alex_action_24),AlexAcc (alex_action_25),AlexAcc (alex_action_25)]
+{-# LINE 119 "Lexer.x" #-}
+
+
+data Token = TokSym   !ByteString
+           | TokStr   !String
+           | TokNum   !ByteString
+           | TokOther !ByteString
+           | Indent   !Int
+           | TokFieldLine !ByteString
+           | Colon
+           | OpenBrace
+           | CloseBrace
+           | EOF
+           | LexicalError InputStream --TODO: add separate string lexical error
+  deriving Show
+
+data LToken = L !Position !Token
+  deriving Show
+
+toki t pos len input = return $! L pos (t (B.take len input))
+tokl t pos len input = return $! L pos (t len)
+tok  t pos len input = return $! L pos t
+
+-- -----------------------------------------------------------------------------
+-- The input type
+
+type AlexInput = InputStream
+
+alexInputPrevChar :: AlexInput -> Char
+alexInputPrevChar _ = error "alexInputPrevChar not used"
+
+alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)
+alexGetByte = B.uncons
+
+lexicalError :: Position -> InputStream -> Lex LToken
+lexicalError pos inp = do
+  setInput B.empty
+  return $! L pos (LexicalError inp)
+
+lexToken :: Lex LToken
+lexToken = do
+  pos <- getPos
+  inp <- getInput
+  st  <- getStartCode
+  case alexScan inp st of
+    AlexEOF -> return (L pos EOF)
+    AlexError inp' -> 
+        let !len_bytes = B.length inp - B.length inp' in
+            --FIXME: we want len_chars here really
+            -- need to decode utf8 up to this point
+        lexicalError (incPos len_bytes pos) inp'
+    AlexSkip  inp' len_chars -> do
+        checkPosition pos inp inp' len_chars
+        adjustPos (incPos len_chars)
+        setInput inp'
+        lexToken
+    AlexToken inp' len_chars action -> do
+        checkPosition pos inp inp' len_chars
+        adjustPos (incPos len_chars)
+        setInput inp'
+        let !len_bytes = B.length inp - B.length inp'
+        tok <- action pos len_bytes inp
+        --traceShow tok $ return tok
+        return tok
+
+checkPosition pos@(Position lineno colno) inp inp' len_chars = do
+    text_lines <- getDbgText
+    let len_bytes = B.length inp - B.length inp'
+        pos_txt   | lineno-1 < V.length text_lines = T.take len_chars (T.drop (colno-1) (text_lines V.! (lineno-1)))
+                  | otherwise = T.empty
+        real_txt  = B.take len_bytes inp
+    when (pos_txt /= T.decodeUtf8 real_txt) $
+      traceShow (pos, pos_txt, T.decodeUtf8 real_txt) $
+      traceShow (take 3 (V.toList text_lines)) $ return ()
+  where
+    getDbgText = Lex $ \s@LexState{ dbgText = txt } -> LexResult s txt
+
+lexAll :: Lex [LToken]
+lexAll = do
+  t <- lexToken
+  case t of
+    L _ EOF -> return [t]
+    _       -> do ts <- lexAll
+                  return (t : ts)
+
+ltest :: Int -> String -> IO ()
+ltest code s =
+  let xs = execLexer (setStartCode code >> lexAll) (B.Char8.pack s)
+   in mapM_ print xs
+
+
+mkLexState :: B.ByteString -> LexState
+mkLexState input = LexState {
+                     curPos   = Position 1 1,
+                     curInput = input,
+                     curCode  = bol_section,
+                     dbgText  = V.fromList . lines' . T.decodeUtf8With T.lenientDecode $ input
+                   }
+
+lines' s1
+  | T.null s1 = []
+  | otherwise = case T.break (\c -> c == '\r' || c == '\n') s1 of
+                  (l, s2) | Just (c,s3) <- T.uncons s2
+                         -> case T.uncons s3 of
+                              Just ('\n', s4) | c == '\r' -> l `T.snoc` '\r' `T.snoc` '\n' : lines' s4
+                              _                           -> l `T.snoc` c : lines' s3
+
+                          | otherwise
+                         -> [l]
+
+{-
+lex_string :: String -> Lex Token
+lex_string s = do
+  i <- getInput
+  case alexGetChar i of
+    Nothing -> lit_error i
+
+    Just ('"',i)  -> do
+        setInput i
+        return $! TokSym $! (reverse s)
+
+    Just (c, i) -> do
+        case c of
+          '\\' -> do setInput i
+                     c' <- lex_escape
+                     lex_string (c':s)
+          c | isAny c -> do setInput i
+                            lex_string (c:s)
+          _other -> lit_error i
+
+isAny :: Char -> Bool
+isAny c | c >= '\x7f' = Data.Char.isPrint c
+        | otherwise   = c > ' '
+
+lex_escape :: Lex Char
+lex_escape = do
+  i0 <- getInput
+  c <- getCharOrFail i0
+  case c of
+        'a'   -> return '\a'
+        'b'   -> return '\b'
+        'f'   -> return '\f'
+        'n'   -> return '\n'
+        'r'   -> return '\r'
+        't'   -> return '\t'
+        'v'   -> return '\v'
+        '\\'  -> return '\\'
+        '"'   -> return '\"'
+        '\''  -> return '\''
+        '^'   -> do i1 <- getInput
+                    c <- getCharOrFail i1
+                    if c >= '@' && c <= '_'
+                        then return (chr (ord c - ord '@'))
+                        else lit_error i1
+
+        'x'   -> readNum is_hexdigit 16 hexDigit
+        'o'   -> readNum is_octdigit  8 octDecDigit
+        x | is_decdigit x -> readNum2 is_decdigit 10 octDecDigit (octDecDigit x)
+
+        c1 ->  do
+           i <- getInput
+           case alexGetChar i of
+            Nothing -> lit_error i0
+            Just (c2,i2) ->
+              case alexGetChar i2 of
+                Nothing -> do lit_error i0
+                Just (c3,i3) ->
+                   let str = [c1,c2,c3] in
+                   case [ (c,rest) | (p,c) <- silly_escape_chars,
+                                     Just rest <- [stripPrefix p str] ] of
+                          (escape_char,[]):_ -> do
+                                setInput i3
+                                return escape_char
+                          (escape_char,_:_):_ -> do
+                                setInput i2
+                                return escape_char
+                          [] -> lit_error i0
+
+readNum :: (Char -> Bool) -> Int -> (Char -> Int) -> Lex Char
+readNum is_digit base conv = do
+  i <- getInput
+  c <- getCharOrFail i
+  if is_digit c
+        then readNum2 is_digit base conv (conv c)
+        else lit_error i
+
+readNum2 :: (Char -> Bool) -> Int -> (Char -> Int) -> Int -> Lex Char
+readNum2 is_digit base conv i = do
+  input <- getInput
+  read i input
+  where read i input = do
+          case alexGetChar input of
+            Just (c,input') | is_digit c -> do
+               let i' = i*base + conv c
+               if i' > 0x10ffff
+                  then setInput input >> lexError "numeric escape sequence out of range"
+                  else read i' input'
+            _other -> do
+              setInput input; return (chr i)
+
+silly_escape_chars :: [(String, Char)]
+silly_escape_chars = [
+        ("NUL", '\NUL'),
+        ("SOH", '\SOH'),
+        ("STX", '\STX'),
+        ("ETX", '\ETX'),
+        ("EOT", '\EOT'),
+        ("ENQ", '\ENQ'),
+        ("ACK", '\ACK'),
+        ("BEL", '\BEL'),
+        ("BS", '\BS'),
+        ("HT", '\HT'),
+        ("LF", '\LF'),
+        ("VT", '\VT'),
+        ("FF", '\FF'),
+        ("CR", '\CR'),
+        ("SO", '\SO'),
+        ("SI", '\SI'),
+        ("DLE", '\DLE'),
+        ("DC1", '\DC1'),
+        ("DC2", '\DC2'),
+        ("DC3", '\DC3'),
+        ("DC4", '\DC4'),
+        ("NAK", '\NAK'),
+        ("SYN", '\SYN'),
+        ("ETB", '\ETB'),
+        ("CAN", '\CAN'),
+        ("EM", '\EM'),
+        ("SUB", '\SUB'),
+        ("ESC", '\ESC'),
+        ("FS", '\FS'),
+        ("GS", '\GS'),
+        ("RS", '\RS'),
+        ("US", '\US'),
+        ("SP", '\SP'),
+        ("DEL", '\DEL')
+        ]
+
+hexDigit :: Char -> Int
+hexDigit c | is_decdigit c = ord c - ord '0'
+           | otherwise     = ord (to_lower c) - ord 'a' + 10
+
+octDecDigit :: Char -> Int
+octDecDigit c = ord c - ord '0'
+
+is_decdigit :: Char -> Bool
+is_decdigit c
+        =  c >= '0' && c <= '9'
+
+is_hexdigit :: Char -> Bool
+is_hexdigit c
+        =  is_decdigit c
+        || (c >= 'a' && c <= 'f')
+        || (c >= 'A' && c <= 'F')
+
+is_octdigit :: Char -> Bool
+is_octdigit c = c >= '0' && c <= '7'
+
+to_lower :: Char -> Char
+to_lower c
+  | c >=  'A' && c <= 'Z' = chr (ord c - (ord 'A' - ord 'a'))
+
+
+-- before calling lit_error, ensure that the current input is pointing to
+-- the position of the error in the buffer.  This is so that we can report
+-- a correct location to the user, but also so we can detect UTF-8 decoding
+-- errors if they occur.
+lit_error :: AlexInput -> Lex a
+lit_error i = do setInput i; lexError "lexical error in string/character literal"
+
+lexError :: String -> Lex a
+lexError = error
+
+getCharOrFail :: AlexInput -> Lex Char
+getCharOrFail i =  do
+  case alexGetChar i of
+        Nothing -> lexError "unexpected end-of-file in string/character literal"
+        Just (c,i)  -> do setInput i; return c
+
+-- This version does not squash unicode characters, it is used when
+-- lexing strings.
+alexGetChar :: AlexInput -> Maybe (Char,AlexInput)
+alexGetChar = undefined
+-}
+
+
+
+bol_field_braces,bol_field_layout,bol_section,in_field_braces,in_field_layout,in_section :: Int
+bol_field_braces = 1
+bol_field_layout = 2
+bol_section = 3
+in_field_braces = 4
+in_field_layout = 5
+in_section = 6
+alex_action_2 =  \_ _ _ -> adjustPos retPos >> lexToken 
+alex_action_4 =  \pos len inp -> if B.length inp == len
+                                       then return (L pos EOF)
+                                       else setStartCode in_section
+                                         >> return (L pos (Indent len)) 
+alex_action_5 =  tok  OpenBrace 
+alex_action_6 =  tok  CloseBrace 
+alex_action_9 =  toki TokSym 
+alex_action_10 =  \p l i -> case reads (B.Char8.unpack (B.take l i)) of
+                             [(str,[])] -> return (L p (TokStr str))
+                             _          -> lexicalError p i 
+alex_action_11 =  toki TokNum 
+alex_action_12 =  toki TokOther 
+alex_action_13 =  toki TokOther 
+alex_action_14 =  tok  Colon 
+alex_action_15 =  tok  OpenBrace 
+alex_action_16 =  tok  CloseBrace 
+alex_action_17 =  \_ _ _ -> adjustPos retPos >> setStartCode bol_section >> lexToken 
+alex_action_18 =  \pos len inp -> if B.length inp == len
+                                    then return (L pos EOF)
+                                    else setStartCode in_field_layout
+                                      >> return (L pos (Indent len)) 
+alex_action_19 =  toki TokFieldLine 
+alex_action_20 =  \_ _ _ -> adjustPos retPos >> setStartCode bol_field_layout >> lexToken 
+alex_action_21 =  \_ _ _ -> setStartCode in_field_braces >> lexToken 
+alex_action_22 =  toki TokFieldLine 
+alex_action_23 =  tok  OpenBrace  
+alex_action_24 =  tok  CloseBrace 
+alex_action_25 =  \_ _ _ -> adjustPos retPos >> setStartCode bol_field_braces >> lexToken 
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "<built-in>" #-}
+{-# LINE 1 "<command-line>" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+-- -----------------------------------------------------------------------------
+-- ALEX TEMPLATE
+--
+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use
+-- it for any purpose whatsoever.
+
+-- -----------------------------------------------------------------------------
+-- INTERNALS and main scanner engine
+
+{-# LINE 35 "templates/GenericTemplate.hs" #-}
+
+{-# LINE 45 "templates/GenericTemplate.hs" #-}
+
+
+data AlexAddr = AlexA# Addr#
+
+#if __GLASGOW_HASKELL__ < 503
+uncheckedShiftL# = shiftL#
+#endif
+
+{-# INLINE alexIndexInt16OffAddr #-}
+alexIndexInt16OffAddr (AlexA# arr) off =
+#ifdef WORDS_BIGENDIAN
+  narrow16Int# i
+  where
+        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)
+        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
+        low  = int2Word# (ord# (indexCharOffAddr# arr off'))
+        off' = off *# 2#
+#else
+  indexInt16OffAddr# arr off
+#endif
+
+
+
+
+
+{-# INLINE alexIndexInt32OffAddr #-}
+alexIndexInt32OffAddr (AlexA# arr) off = 
+#ifdef WORDS_BIGENDIAN
+  narrow32Int# i
+  where
+   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`
+		     (b2 `uncheckedShiftL#` 16#) `or#`
+		     (b1 `uncheckedShiftL#` 8#) `or#` b0)
+   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))
+   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))
+   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
+   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))
+   off' = off *# 4#
+#else
+  indexInt32OffAddr# arr off
+#endif
+
+
+
+
+
+#if __GLASGOW_HASKELL__ < 503
+quickIndex arr i = arr ! i
+#else
+-- GHC >= 503, unsafeAt is available from Data.Array.Base.
+quickIndex = unsafeAt
+#endif
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- Main lexing routines
+
+data AlexReturn a
+  = AlexEOF
+  | AlexError  !AlexInput
+  | AlexSkip   !AlexInput !Int
+  | AlexToken  !AlexInput !Int a
+
+-- alexScan :: AlexInput -> StartCode -> AlexReturn a
+alexScan input (I# (sc))
+  = alexScanUser undefined input (I# (sc))
+
+alexScanUser user input (I# (sc))
+  = case alex_scan_tkn user input 0# input sc AlexNone of
+	(AlexNone, input') ->
+		case alexGetByte input of
+			Nothing -> 
+
+
+
+				   AlexEOF
+			Just _ ->
+
+
+
+				   AlexError input'
+
+	(AlexLastSkip input'' len, _) ->
+
+
+
+		AlexSkip input'' len
+
+	(AlexLastAcc k input''' len, _) ->
+
+
+
+		AlexToken input''' len k
+
+
+-- Push the input through the DFA, remembering the most recent accepting
+-- state it encountered.
+
+alex_scan_tkn user orig_input len input s last_acc =
+  input `seq` -- strict in the input
+  let 
+	new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))
+  in
+  new_acc `seq`
+  case alexGetByte input of
+     Nothing -> (new_acc, input)
+     Just (c, new_input) -> 
+
+
+
+      case fromIntegral c of { (I# (ord_c)) ->
+        let
+                base   = alexIndexInt32OffAddr alex_base s
+                offset = (base +# ord_c)
+                check  = alexIndexInt16OffAddr alex_check offset
+		
+                new_s = if (offset >=# 0#) && (check ==# ord_c)
+			  then alexIndexInt16OffAddr alex_table offset
+			  else alexIndexInt16OffAddr alex_deflt s
+	in
+        case new_s of
+	    -1# -> (new_acc, input)
+		-- on an error, we want to keep the input *before* the
+		-- character that failed, not after.
+    	    _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)
+                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)
+			new_input new_s new_acc
+      }
+  where
+	check_accs (AlexAccNone) = last_acc
+	check_accs (AlexAcc a  ) = AlexLastAcc a input (I# (len))
+	check_accs (AlexAccSkip) = AlexLastSkip  input (I# (len))
+{-# LINE 191 "templates/GenericTemplate.hs" #-}
+
+data AlexLastAcc a
+  = AlexNone
+  | AlexLastAcc a !AlexInput !Int
+  | AlexLastSkip  !AlexInput !Int
+
+instance Functor AlexLastAcc where
+    fmap f AlexNone = AlexNone
+    fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z
+    fmap f (AlexLastSkip x y) = AlexLastSkip x y
+
+data AlexAcc a user
+  = AlexAccNone
+  | AlexAcc a
+  | AlexAccSkip
+{-# LINE 235 "templates/GenericTemplate.hs" #-}
+
+-- used by wrappers
+iUnbox (I# (i)) = i
diff --git a/experiment/parse/Lexer.hs.correct b/experiment/parse/Lexer.hs.correct
new file mode 100644
index 0000000000000000000000000000000000000000..f469be55f8e6210303b683bd84040b7b69b5cbc5
--- /dev/null
+++ b/experiment/parse/Lexer.hs.correct
@@ -0,0 +1,540 @@
+{-# LANGUAGE CPP,MagicHash #-}
+{-# LINE 1 "Lexer.x" #-}
+
+module Lexer (ltest, lexToken, Token(..), LToken(..)
+              ,bol_section, in_section, in_field_layout, in_field_braces
+              ,mkLexState) where
+
+import LexerMonad
+import Control.Monad
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Char8 as B.Char8
+import Data.Word (Word8)
+import qualified Data.Char
+import Data.Char (chr, ord)
+import Data.List (stripPrefix)
+
+import Debug.Trace
+
+#if __GLASGOW_HASKELL__ >= 603
+#include "ghcconfig.h"
+#elif defined(__GLASGOW_HASKELL__)
+#include "config.h"
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import Data.Array
+import Data.Char (ord)
+import Data.Array.Base (unsafeAt)
+#else
+import Array
+import Char (ord)
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import GHC.Exts
+#else
+import GlaExts
+#endif
+alex_base :: AlexAddr
+alex_base = AlexA# "\x12\xff\xff\xff\xf9\xff\xff\xff\xfb\xff\xff\xff\x59\x00\x00\x00\x45\x01\x00\x00\x31\x02\x00\x00\x48\xff\xff\xff\xdc\xff\xff\xff\x89\x02\x00\x00\x4f\xff\xff\xff\x84\x02\x00\x00\x04\x03\x00\x00\x84\x03\x00\x00\x04\x04\x00\x00\x84\x04\x00\x00\x04\x05\x00\x00\x84\x05\x00\x00\x04\x06\x00\x00\x84\x06\x00\x00\xf5\x06\x00\x00\x00\x00\x00\x00\x75\x07\x00\x00\x00\x00\x00\x00\xe6\x07\x00\x00\x00\x00\x00\x00\x57\x08\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\xc8\x08\x00\x00\x00\x00\x00\x00\x39\x09\x00\x00\x00\x00\x00\x00\x05\x01\x00\x00\x00\x00\x00\x00\x7a\x09\x00\x00\x7a\x0a\x00\x00\x3a\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x0a\x00\x00\x00\x00\x00\x00\xbc\x0a\x00\x00\xbc\x0b\x00\x00\x7c\x0b\x00\x00\x00\x00\x00\x00\x7c\x0c\x00\x00\x3c\x0c\x00\x00\x00\x00\x00\x00\x1c\x0d\x00\x00\xf1\x0d\x00\x00\xe6\x0e\x00\x00\xdb\x0c\x00\x00\x00\x00\x00\x00\x66\x0f\x00\x00\xb0\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xdd\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\xc9\x10\x00\x00\x97\x11\x00\x00\x00\x00\x00\x00\xf2\x11\x00\x00\xc0\x12\x00\x00\x1a\x13\x00\x00\x76\x13\x00\x00\xf2\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\xe8\x13\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00"#
+
+alex_table :: AlexAddr
+alex_table = AlexA# "\x00\x00\x09\x00\x01\x00\x3a\x00\x02\x00\x3a\x00\x3b\x00\x39\x00\x3b\x00\x3c\x00\x06\x00\x3a\x00\x3f\x00\x00\x00\x4c\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x01\x00\x00\x00\x02\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x2b\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2c\x00\x0d\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x21\x00\x12\x00\x16\x00\x16\x00\x16\x00\x17\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x2e\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x2f\x00\x0c\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x23\x00\x11\x00\x18\x00\x18\x00\x18\x00\x19\x00\x3f\x00\x4c\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x47\x00\x32\x00\x47\x00\x47\x00\x47\x00\x47\x00\x08\x00\x48\x00\x48\x00\x47\x00\x47\x00\x47\x00\x45\x00\x46\x00\x47\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x49\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x48\x00\x47\x00\x48\x00\x47\x00\x08\x00\x00\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x4a\x00\x47\x00\x4b\x00\x47\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x08\x00\x00\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x2e\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x2b\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x0a\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x0b\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x24\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x0c\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x0d\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x32\x00\x32\x00\x43\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x24\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x25\x00\x10\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1b\x00\x15\x00\x14\x00\x14\x00\x14\x00\x13\x00\x32\x00\x32\x00\x42\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x24\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x25\x00\x10\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1b\x00\x15\x00\x14\x00\x14\x00\x14\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x0a\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x0e\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x0b\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x28\x00\x0f\x00\x1c\x00\x1c\x00\x1c\x00\x1d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x41\x00\x00\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x32\x00\x32\x00\x42\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x25\x00\x10\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1b\x00\x15\x00\x14\x00\x14\x00\x14\x00\x13\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x44\x00\x00\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x47\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x08\x00\x00\x00\x00\x00\x47\x00\x47\x00\x47\x00\x40\x00\x46\x00\x47\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x00\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00\x47\x00\x00\x00\x47\x00\x08\x00\x00\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x08\x00\x00\x00\x00\x00\x47\x00\x47\x00\x47\x00\x46\x00\x46\x00\x47\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x00\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x00\x00\x47\x00\x00\x00\x47\x00\x08\x00\x00\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x4e\x00\x47\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x2f\x00\x0c\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x23\x00\x11\x00\x18\x00\x18\x00\x18\x00\x19\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\xef\x00\x09\x00\x0a\x00\x09\x00\x0a\x00\x0d\x00\xbf\x00\x0d\x00\x2d\x00\xbb\x00\x0a\x00\x09\x00\xff\xff\x0a\x00\x0a\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x20\x00\xff\xff\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\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\xff\xff\x7c\x00\xff\xff\x7e\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\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\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\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\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x09\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1a\x00\xff\xff\x20\x00\x20\x00\x22\x00\x22\x00\x26\x00\x26\x00\x27\x00\x27\x00\x29\x00\x29\x00\x2d\x00\x2d\x00\x30\x00\x30\x00\x32\x00\x32\x00\x32\x00\x35\x00\x35\x00\x38\x00\x38\x00\x03\x00\x03\x00\x03\x00\x4e\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\x40\x00\x40\x00\x40\x00\x3c\x00\x3c\x00\x3c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+alex_accept = listArray (0::Int,80) [[(AlexAccSkip)],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_21))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_2))],[(AlexAccSkip)],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_6))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))]]
+{-# LINE 111 "Lexer.x" #-}
+
+
+data Token = TokSym String | TokStr String | TokNum String | TokOther String
+           | Indent !Int
+           | TokFieldLine String
+           | Colon
+--         | Comment String
+           | OpenBrace | CloseBrace
+--         | SemiColon
+           | EOF
+           | LexicalError InputStream --TODO: add separate string lexical error
+  deriving Show
+
+data LToken = L !Position !Token
+  deriving Show
+
+alexEOF :: Lex Token
+alexEOF = return EOF
+
+toki t pos len input = return $! L pos (t (B.Char8.unpack (B.take len input)))
+tokl t pos len input = return $! L pos (t len)
+tok  t pos len input = return $! L pos t
+
+-- -----------------------------------------------------------------------------
+-- The input type
+
+type AlexInput = InputStream
+
+alexInputPrevChar :: AlexInput -> Char
+alexInputPrevChar _ = error "alexInputPrevChar not used"
+
+alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)
+alexGetByte = B.uncons
+
+lexicalError :: Position -> InputStream -> Lex LToken
+lexicalError pos inp = do
+  setInput B.empty
+  return $! L pos (LexicalError inp)
+
+lexToken :: Lex LToken
+lexToken = do
+  pos <- getPos
+  inp <- getInput
+  st  <- getStartCode
+  case alexScan inp st of
+    AlexEOF -> return (L pos EOF)
+    AlexError inp' -> lexicalError (incPos (B.length inp - B.length inp') pos) inp'
+    AlexSkip  inp' len -> do
+        adjustPos (incPos len)
+        setInput inp'
+        lexToken
+    AlexToken inp' len action -> do
+        adjustPos (incPos len)
+        setInput inp'
+        tok <- action pos len inp
+        --traceShow tok $ return tok
+        return tok
+
+
+lexAll :: Lex [LToken]
+lexAll = do
+  t <- lexToken
+  case t of
+    L _ EOF -> return [t]
+    _       -> do ts <- lexAll
+                  return (t : ts)
+
+ltest :: Int -> String -> IO ()
+ltest code s =
+  let xs = execLexer (setStartCode code >> lexAll) (B.Char8.pack s)
+   in mapM_ print xs
+
+
+mkLexState :: B.ByteString -> LexState
+mkLexState input = LexState {
+                     curPos   = Position 1 1,
+                     curInput = input,
+                     curCode  = in_section
+                   }
+
+{-
+lex_string :: String -> Lex Token
+lex_string s = do
+  i <- getInput
+  case alexGetChar i of
+    Nothing -> lit_error i
+
+    Just ('"',i)  -> do
+        setInput i
+        return $! TokSym $! (reverse s)
+
+    Just (c, i) -> do
+        case c of
+          '\\' -> do setInput i
+                     c' <- lex_escape
+                     lex_string (c':s)
+          c | isAny c -> do setInput i
+                            lex_string (c:s)
+          _other -> lit_error i
+
+isAny :: Char -> Bool
+isAny c | c >= '\x7f' = Data.Char.isPrint c
+        | otherwise   = c > ' '
+
+lex_escape :: Lex Char
+lex_escape = do
+  i0 <- getInput
+  c <- getCharOrFail i0
+  case c of
+        'a'   -> return '\a'
+        'b'   -> return '\b'
+        'f'   -> return '\f'
+        'n'   -> return '\n'
+        'r'   -> return '\r'
+        't'   -> return '\t'
+        'v'   -> return '\v'
+        '\\'  -> return '\\'
+        '"'   -> return '\"'
+        '\''  -> return '\''
+        '^'   -> do i1 <- getInput
+                    c <- getCharOrFail i1
+                    if c >= '@' && c <= '_'
+                        then return (chr (ord c - ord '@'))
+                        else lit_error i1
+
+        'x'   -> readNum is_hexdigit 16 hexDigit
+        'o'   -> readNum is_octdigit  8 octDecDigit
+        x | is_decdigit x -> readNum2 is_decdigit 10 octDecDigit (octDecDigit x)
+
+        c1 ->  do
+           i <- getInput
+           case alexGetChar i of
+            Nothing -> lit_error i0
+            Just (c2,i2) ->
+              case alexGetChar i2 of
+                Nothing -> do lit_error i0
+                Just (c3,i3) ->
+                   let str = [c1,c2,c3] in
+                   case [ (c,rest) | (p,c) <- silly_escape_chars,
+                                     Just rest <- [stripPrefix p str] ] of
+                          (escape_char,[]):_ -> do
+                                setInput i3
+                                return escape_char
+                          (escape_char,_:_):_ -> do
+                                setInput i2
+                                return escape_char
+                          [] -> lit_error i0
+
+readNum :: (Char -> Bool) -> Int -> (Char -> Int) -> Lex Char
+readNum is_digit base conv = do
+  i <- getInput
+  c <- getCharOrFail i
+  if is_digit c
+        then readNum2 is_digit base conv (conv c)
+        else lit_error i
+
+readNum2 :: (Char -> Bool) -> Int -> (Char -> Int) -> Int -> Lex Char
+readNum2 is_digit base conv i = do
+  input <- getInput
+  read i input
+  where read i input = do
+          case alexGetChar input of
+            Just (c,input') | is_digit c -> do
+               let i' = i*base + conv c
+               if i' > 0x10ffff
+                  then setInput input >> lexError "numeric escape sequence out of range"
+                  else read i' input'
+            _other -> do
+              setInput input; return (chr i)
+
+silly_escape_chars :: [(String, Char)]
+silly_escape_chars = [
+        ("NUL", '\NUL'),
+        ("SOH", '\SOH'),
+        ("STX", '\STX'),
+        ("ETX", '\ETX'),
+        ("EOT", '\EOT'),
+        ("ENQ", '\ENQ'),
+        ("ACK", '\ACK'),
+        ("BEL", '\BEL'),
+        ("BS", '\BS'),
+        ("HT", '\HT'),
+        ("LF", '\LF'),
+        ("VT", '\VT'),
+        ("FF", '\FF'),
+        ("CR", '\CR'),
+        ("SO", '\SO'),
+        ("SI", '\SI'),
+        ("DLE", '\DLE'),
+        ("DC1", '\DC1'),
+        ("DC2", '\DC2'),
+        ("DC3", '\DC3'),
+        ("DC4", '\DC4'),
+        ("NAK", '\NAK'),
+        ("SYN", '\SYN'),
+        ("ETB", '\ETB'),
+        ("CAN", '\CAN'),
+        ("EM", '\EM'),
+        ("SUB", '\SUB'),
+        ("ESC", '\ESC'),
+        ("FS", '\FS'),
+        ("GS", '\GS'),
+        ("RS", '\RS'),
+        ("US", '\US'),
+        ("SP", '\SP'),
+        ("DEL", '\DEL')
+        ]
+
+hexDigit :: Char -> Int
+hexDigit c | is_decdigit c = ord c - ord '0'
+           | otherwise     = ord (to_lower c) - ord 'a' + 10
+
+octDecDigit :: Char -> Int
+octDecDigit c = ord c - ord '0'
+
+is_decdigit :: Char -> Bool
+is_decdigit c
+        =  c >= '0' && c <= '9'
+
+is_hexdigit :: Char -> Bool
+is_hexdigit c
+        =  is_decdigit c
+        || (c >= 'a' && c <= 'f')
+        || (c >= 'A' && c <= 'F')
+
+is_octdigit :: Char -> Bool
+is_octdigit c = c >= '0' && c <= '7'
+
+to_lower :: Char -> Char
+to_lower c
+  | c >=  'A' && c <= 'Z' = chr (ord c - (ord 'A' - ord 'a'))
+
+
+-- before calling lit_error, ensure that the current input is pointing to
+-- the position of the error in the buffer.  This is so that we can report
+-- a correct location to the user, but also so we can detect UTF-8 decoding
+-- errors if they occur.
+lit_error :: AlexInput -> Lex a
+lit_error i = do setInput i; lexError "lexical error in string/character literal"
+
+lexError :: String -> Lex a
+lexError = error
+
+getCharOrFail :: AlexInput -> Lex Char
+getCharOrFail i =  do
+  case alexGetChar i of
+        Nothing -> lexError "unexpected end-of-file in string/character literal"
+        Just (c,i)  -> do setInput i; return c
+
+-- This version does not squash unicode characters, it is used when
+-- lexing strings.
+alexGetChar :: AlexInput -> Maybe (Char,AlexInput)
+alexGetChar = undefined
+-}
+
+
+
+bol_field_layout,bol_section,in_field_braces,in_field_layout,in_section :: Int
+bol_field_layout = 1
+bol_section = 2
+in_field_braces = 3
+in_field_layout = 4
+in_section = 5
+alex_action_2 =  \_ _ _ -> adjustPos retPos >> lexToken 
+alex_action_4 =  \pos len inp -> if B.length inp == len
+                                       then return (L pos EOF)
+                                       else setStartCode in_section
+                                         >> return (L pos (Indent len)) 
+alex_action_5 =  tok  OpenBrace 
+alex_action_6 =  tok  CloseBrace 
+alex_action_9 =  toki TokSym 
+alex_action_10 =  \p l i -> case reads (B.Char8.unpack (B.take l i)) of
+                             [(str,[])] -> return (L p (TokStr str))
+                             _          -> lexicalError p i 
+alex_action_11 =  toki TokNum 
+alex_action_12 =  toki TokOther 
+alex_action_13 =  toki TokOther 
+alex_action_14 =  tok  Colon 
+alex_action_15 =  tok  OpenBrace 
+alex_action_16 =  tok  CloseBrace 
+alex_action_17 =  \_ _ _ -> adjustPos retPos >> setStartCode bol_section >> lexToken 
+alex_action_18 =  \pos len inp -> if B.length inp == len
+                                    then return (L pos EOF)
+                                    else setStartCode in_field_layout
+                                      >> return (L pos (Indent len)) 
+alex_action_19 =  toki TokFieldLine 
+alex_action_20 =  \_ _ _ -> adjustPos retPos >> setStartCode bol_field_layout >> lexToken 
+alex_action_21 =  toki TokFieldLine 
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "<built-in>" #-}
+{-# LINE 1 "<command-line>" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+-- -----------------------------------------------------------------------------
+-- ALEX TEMPLATE
+--
+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use
+-- it for any purpose whatsoever.
+
+-- -----------------------------------------------------------------------------
+-- INTERNALS and main scanner engine
+
+{-# LINE 37 "templates/GenericTemplate.hs" #-}
+
+{-# LINE 47 "templates/GenericTemplate.hs" #-}
+
+
+data AlexAddr = AlexA# Addr#
+
+#if __GLASGOW_HASKELL__ < 503
+uncheckedShiftL# = shiftL#
+#endif
+
+{-# INLINE alexIndexInt16OffAddr #-}
+alexIndexInt16OffAddr (AlexA# arr) off =
+#ifdef WORDS_BIGENDIAN
+  narrow16Int# i
+  where
+        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)
+        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
+        low  = int2Word# (ord# (indexCharOffAddr# arr off'))
+        off' = off *# 2#
+#else
+  indexInt16OffAddr# arr off
+#endif
+
+
+
+
+
+{-# INLINE alexIndexInt32OffAddr #-}
+alexIndexInt32OffAddr (AlexA# arr) off = 
+#ifdef WORDS_BIGENDIAN
+  narrow32Int# i
+  where
+   !i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`
+		     (b2 `uncheckedShiftL#` 16#) `or#`
+		     (b1 `uncheckedShiftL#` 8#) `or#` b0)
+   !b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))
+   !b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))
+   !b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
+   !b0   = int2Word# (ord# (indexCharOffAddr# arr off'))
+   !off' = off *# 4#
+#else
+  indexInt32OffAddr# arr off
+#endif
+
+
+
+
+
+#if __GLASGOW_HASKELL__ < 503
+quickIndex arr i = arr ! i
+#else
+-- GHC >= 503, unsafeAt is available from Data.Array.Base.
+quickIndex = unsafeAt
+#endif
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- Main lexing routines
+
+data AlexReturn a
+  = AlexEOF
+  | AlexError  !AlexInput
+  | AlexSkip   !AlexInput !Int
+  | AlexToken  !AlexInput !Int a
+
+-- alexScan :: AlexInput -> StartCode -> AlexReturn a
+alexScan input (I# (sc))
+  = alexScanUser undefined input (I# (sc))
+
+alexScanUser user input (I# (sc))
+  = case alex_scan_tkn user input 0# input sc AlexNone of
+	(AlexNone, input') ->
+		case alexGetByte input of
+			Nothing -> 
+
+
+
+				   AlexEOF
+			Just _ ->
+
+
+
+				   AlexError input'
+
+	(AlexLastSkip input'' len, _) ->
+
+
+
+		AlexSkip input'' len
+
+	(AlexLastAcc k input''' len, _) ->
+
+
+
+		AlexToken input''' len k
+
+
+-- Push the input through the DFA, remembering the most recent accepting
+-- state it encountered.
+
+alex_scan_tkn user orig_input len input s last_acc =
+  input `seq` -- strict in the input
+  let 
+	new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))
+  in
+  new_acc `seq`
+  case alexGetByte input of
+     Nothing -> (new_acc, input)
+     Just (c, new_input) -> 
+
+
+
+	let
+		(base) = alexIndexInt32OffAddr alex_base s
+		((I# (ord_c))) = fromIntegral c
+		(offset) = (base +# ord_c)
+		(check)  = alexIndexInt16OffAddr alex_check offset
+		
+		(new_s) = if (offset >=# 0#) && (check ==# ord_c)
+			  then alexIndexInt16OffAddr alex_table offset
+			  else alexIndexInt16OffAddr alex_deflt s
+	in
+	case new_s of 
+	    -1# -> (new_acc, input)
+		-- on an error, we want to keep the input *before* the
+		-- character that failed, not after.
+    	    _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)
+                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)
+			new_input new_s new_acc
+
+  where
+	check_accs [] = last_acc
+	check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))
+	check_accs (AlexAccSkip : _)  = AlexLastSkip  input (I# (len))
+	check_accs (AlexAccPred a predx : rest)
+	   | predx user orig_input (I# (len)) input
+	   = AlexLastAcc a input (I# (len))
+	check_accs (AlexAccSkipPred predx : rest)
+	   | predx user orig_input (I# (len)) input
+	   = AlexLastSkip input (I# (len))
+	check_accs (_ : rest) = check_accs rest
+
+data AlexLastAcc a
+  = AlexNone
+  | AlexLastAcc a !AlexInput !Int
+  | AlexLastSkip  !AlexInput !Int
+
+instance Functor AlexLastAcc where
+    fmap f AlexNone = AlexNone
+    fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z
+    fmap f (AlexLastSkip x y) = AlexLastSkip x y
+
+data AlexAcc a user
+  = AlexAcc a
+  | AlexAccSkip
+  | AlexAccPred a (AlexAccPred user)
+  | AlexAccSkipPred (AlexAccPred user)
+
+type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool
+
+-- -----------------------------------------------------------------------------
+-- Predicates on a rule
+
+alexAndPred p1 p2 user in1 len in2
+  = p1 user in1 len in2 && p2 user in1 len in2
+
+--alexPrevCharIsPred :: Char -> AlexAccPred _ 
+alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input
+
+alexPrevCharMatches f _ input _ _ = f (alexInputPrevChar input)
+
+--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _ 
+alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input
+
+--alexRightContext :: Int -> AlexAccPred _
+alexRightContext (I# (sc)) user _ _ input = 
+     case alex_scan_tkn user input 0# input sc AlexNone of
+	  (AlexNone, _) -> False
+	  _ -> True
+	-- TODO: there's no need to find the longest
+	-- match when checking the right context, just
+	-- the first match will do.
+
+-- used by wrappers
+iUnbox (I# (i)) = i
diff --git a/experiment/parse/Lexer.x b/experiment/parse/Lexer.x
new file mode 100644
index 0000000000000000000000000000000000000000..8a83ad1beec768b2d41f19a15de2410c23ab4615
--- /dev/null
+++ b/experiment/parse/Lexer.x
@@ -0,0 +1,404 @@
+{
+{-# LANGUAGE BangPatterns #-}
+module Lexer (ltest, lexToken, Token(..), LToken(..)
+              ,bol_section, in_section, in_field_layout, in_field_braces
+              ,mkLexState) where
+
+import LexerMonad
+import Control.Monad
+import Data.ByteString (ByteString)
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Char8 as B.Char8
+import Data.Word (Word8)
+import qualified Data.Char
+import Data.Char (chr, ord)
+import Data.List (stripPrefix)
+--import Distribution.Simple.Utils (fromUTF8) --don't decode, keep as ByteString
+
+-- testing only:
+import Debug.Trace
+import Control.Exception (assert)
+import qualified Data.Vector as V
+import qualified Data.Text   as T
+import qualified Data.Text.Encoding as T
+import qualified Data.Text.Encoding.Error as T
+}
+
+-- Various character classes
+
+$space           = \          -- single space char
+$digit           = 0-9        -- digits
+$alpha           = [a-z A-Z]  -- alphabetic characters
+$symbol          = [\= \< \> \+ \* \- \& \| \! \$ \% \^ \@ \# \? \/ \\ \~]
+$ctlchar         = [\x0-\x1f \x7f]
+$printable       = \x0-\x10ffff # $ctlchar   -- so no \n \r
+$spacetab        = [$space \t]
+$bom             = \xfeff
+
+$paren           = [ \( \) \[ \] ]
+$field_layout    = [$printable \t]
+$field_braces    = [$printable \t] # [\{ \}]
+$comment         = [$printable \t]
+$namecore        = [$alpha]
+$nameextra       = [$namecore $digit \- \_ \. \']
+$instr           = [$printable $space] # [\"]
+$instresc        = $printable
+
+@nl          = \n | \r\n | \r
+@name        = $nameextra* $namecore $nameextra*
+@string      = \" ( $instr | \\ $instresc )* \"
+@numlike     = $digit [$digit \.]*
+@oplike      = [ \, \. \= \< \> \+ \* \- \& \| \! \$ \% \^ \@ \# \? \/ \\ \~ ]+
+
+tokens :-
+
+<0> {
+  $bom   ;
+  ()     ;
+}
+
+<bol_section, bol_field_layout, bol_field_braces> {
+  $spacetab* @nl                        { \_ _ _ -> adjustPos retPos >> lexToken }
+  -- no @nl here to allow for comments on last line of the file with no trailing \n
+  $spacetab* "--" $comment*             ;  -- TODO: check the lack of @nl works here
+                                        -- including counting line numbers
+}
+
+<bol_section> {
+  $spacetab*  --TODO prevent or record leading tabs
+                   { \pos len inp -> if B.length inp == len
+                                       then return (L pos EOF)
+                                       else setStartCode in_section
+                                         >> return (L pos (Indent len)) }
+  $spacetab* \{    { tok  OpenBrace }
+  $spacetab* \}    { tok  CloseBrace }
+}
+
+<in_section> {
+  $spacetab+   ; --TODO: don't allow tab as leading space
+
+  "--" $comment* ;
+
+  @name        { toki TokSym }
+  @string      { \p l i -> case reads (B.Char8.unpack (B.take l i)) of
+                             [(str,[])] -> return (L p (TokStr str))
+                             _          -> lexicalError p i }
+  @numlike     { toki TokNum }
+  @oplike      { toki TokOther }
+  $paren       { toki TokOther }
+  \:           { tok  Colon }
+  \{           { tok  OpenBrace }
+  \}           { tok  CloseBrace }
+  @nl          { \_ _ _ -> adjustPos retPos >> setStartCode bol_section >> lexToken }
+}
+
+<bol_field_layout> {
+  $spacetab*   --TODO prevent or record leading tabs
+                { \pos len inp -> if B.length inp == len
+                                    then return (L pos EOF)
+                                    else setStartCode in_field_layout
+                                      >> return (L pos (Indent len)) }
+}
+
+<in_field_layout> {
+  $field_layout+  { toki TokFieldLine }  --TODO prevent or record leading tabs
+  @nl             { \_ _ _ -> adjustPos retPos >> setStartCode bol_field_layout >> lexToken }
+}
+
+<bol_field_braces> {
+   ()                { \_ _ _ -> setStartCode in_field_braces >> lexToken }
+}
+
+<in_field_braces> {
+  $field_braces+    { toki TokFieldLine }
+  \{                { tok  OpenBrace  }
+  \}                { tok  CloseBrace }
+  @nl               { \_ _ _ -> adjustPos retPos >> setStartCode bol_field_braces >> lexToken }
+}
+
+{
+
+data Token = TokSym   !ByteString
+           | TokStr   !String
+           | TokNum   !ByteString
+           | TokOther !ByteString
+           | Indent   !Int
+           | TokFieldLine !ByteString
+           | Colon
+           | OpenBrace
+           | CloseBrace
+           | EOF
+           | LexicalError InputStream --TODO: add separate string lexical error
+  deriving Show
+
+data LToken = L !Position !Token
+  deriving Show
+
+toki t pos len input = return $! L pos (t (B.take len input))
+tokl t pos len input = return $! L pos (t len)
+tok  t pos len input = return $! L pos t
+
+-- -----------------------------------------------------------------------------
+-- The input type
+
+type AlexInput = InputStream
+
+alexInputPrevChar :: AlexInput -> Char
+alexInputPrevChar _ = error "alexInputPrevChar not used"
+
+alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)
+alexGetByte = B.uncons
+
+lexicalError :: Position -> InputStream -> Lex LToken
+lexicalError pos inp = do
+  setInput B.empty
+  return $! L pos (LexicalError inp)
+
+lexToken :: Lex LToken
+lexToken = do
+  pos <- getPos
+  inp <- getInput
+  st  <- getStartCode
+  case alexScan inp st of
+    AlexEOF -> return (L pos EOF)
+    AlexError inp' -> 
+        let !len_bytes = B.length inp - B.length inp' in
+            --FIXME: we want len_chars here really
+            -- need to decode utf8 up to this point
+        lexicalError (incPos len_bytes pos) inp'
+    AlexSkip  inp' len_chars -> do
+        checkPosition pos inp inp' len_chars
+        adjustPos (incPos len_chars)
+        setInput inp'
+        lexToken
+    AlexToken inp' len_chars action -> do
+        checkPosition pos inp inp' len_chars
+        adjustPos (incPos len_chars)
+        setInput inp'
+        let !len_bytes = B.length inp - B.length inp'
+        tok <- action pos len_bytes inp
+        --traceShow tok $ return tok
+        return tok
+
+checkPosition pos@(Position lineno colno) inp inp' len_chars = do
+    text_lines <- getDbgText
+    let len_bytes = B.length inp - B.length inp'
+        pos_txt   | lineno-1 < V.length text_lines = T.take len_chars (T.drop (colno-1) (text_lines V.! (lineno-1)))
+                  | otherwise = T.empty
+        real_txt  = B.take len_bytes inp
+    when (pos_txt /= T.decodeUtf8 real_txt) $
+      traceShow (pos, pos_txt, T.decodeUtf8 real_txt) $
+      traceShow (take 3 (V.toList text_lines)) $ return ()
+  where
+    getDbgText = Lex $ \s@LexState{ dbgText = txt } -> LexResult s txt
+
+lexAll :: Lex [LToken]
+lexAll = do
+  t <- lexToken
+  case t of
+    L _ EOF -> return [t]
+    _       -> do ts <- lexAll
+                  return (t : ts)
+
+ltest :: Int -> String -> IO ()
+ltest code s =
+  let xs = execLexer (setStartCode code >> lexAll) (B.Char8.pack s)
+   in mapM_ print xs
+
+
+mkLexState :: B.ByteString -> LexState
+mkLexState input = LexState {
+                     curPos   = Position 1 1,
+                     curInput = input,
+                     curCode  = bol_section,
+                     dbgText  = V.fromList . lines' . T.decodeUtf8With T.lenientDecode $ input
+                   }
+
+lines' s1
+  | T.null s1 = []
+  | otherwise = case T.break (\c -> c == '\r' || c == '\n') s1 of
+                  (l, s2) | Just (c,s3) <- T.uncons s2
+                         -> case T.uncons s3 of
+                              Just ('\n', s4) | c == '\r' -> l `T.snoc` '\r' `T.snoc` '\n' : lines' s4
+                              _                           -> l `T.snoc` c : lines' s3
+
+                          | otherwise
+                         -> [l]
+
+{-
+lex_string :: String -> Lex Token
+lex_string s = do
+  i <- getInput
+  case alexGetChar i of
+    Nothing -> lit_error i
+
+    Just ('"',i)  -> do
+        setInput i
+        return $! TokSym $! (reverse s)
+
+    Just (c, i) -> do
+        case c of
+          '\\' -> do setInput i
+                     c' <- lex_escape
+                     lex_string (c':s)
+          c | isAny c -> do setInput i
+                            lex_string (c:s)
+          _other -> lit_error i
+
+isAny :: Char -> Bool
+isAny c | c >= '\x7f' = Data.Char.isPrint c
+        | otherwise   = c > ' '
+
+lex_escape :: Lex Char
+lex_escape = do
+  i0 <- getInput
+  c <- getCharOrFail i0
+  case c of
+        'a'   -> return '\a'
+        'b'   -> return '\b'
+        'f'   -> return '\f'
+        'n'   -> return '\n'
+        'r'   -> return '\r'
+        't'   -> return '\t'
+        'v'   -> return '\v'
+        '\\'  -> return '\\'
+        '"'   -> return '\"'
+        '\''  -> return '\''
+        '^'   -> do i1 <- getInput
+                    c <- getCharOrFail i1
+                    if c >= '@' && c <= '_'
+                        then return (chr (ord c - ord '@'))
+                        else lit_error i1
+
+        'x'   -> readNum is_hexdigit 16 hexDigit
+        'o'   -> readNum is_octdigit  8 octDecDigit
+        x | is_decdigit x -> readNum2 is_decdigit 10 octDecDigit (octDecDigit x)
+
+        c1 ->  do
+           i <- getInput
+           case alexGetChar i of
+            Nothing -> lit_error i0
+            Just (c2,i2) ->
+              case alexGetChar i2 of
+                Nothing -> do lit_error i0
+                Just (c3,i3) ->
+                   let str = [c1,c2,c3] in
+                   case [ (c,rest) | (p,c) <- silly_escape_chars,
+                                     Just rest <- [stripPrefix p str] ] of
+                          (escape_char,[]):_ -> do
+                                setInput i3
+                                return escape_char
+                          (escape_char,_:_):_ -> do
+                                setInput i2
+                                return escape_char
+                          [] -> lit_error i0
+
+readNum :: (Char -> Bool) -> Int -> (Char -> Int) -> Lex Char
+readNum is_digit base conv = do
+  i <- getInput
+  c <- getCharOrFail i
+  if is_digit c
+        then readNum2 is_digit base conv (conv c)
+        else lit_error i
+
+readNum2 :: (Char -> Bool) -> Int -> (Char -> Int) -> Int -> Lex Char
+readNum2 is_digit base conv i = do
+  input <- getInput
+  read i input
+  where read i input = do
+          case alexGetChar input of
+            Just (c,input') | is_digit c -> do
+               let i' = i*base + conv c
+               if i' > 0x10ffff
+                  then setInput input >> lexError "numeric escape sequence out of range"
+                  else read i' input'
+            _other -> do
+              setInput input; return (chr i)
+
+silly_escape_chars :: [(String, Char)]
+silly_escape_chars = [
+        ("NUL", '\NUL'),
+        ("SOH", '\SOH'),
+        ("STX", '\STX'),
+        ("ETX", '\ETX'),
+        ("EOT", '\EOT'),
+        ("ENQ", '\ENQ'),
+        ("ACK", '\ACK'),
+        ("BEL", '\BEL'),
+        ("BS", '\BS'),
+        ("HT", '\HT'),
+        ("LF", '\LF'),
+        ("VT", '\VT'),
+        ("FF", '\FF'),
+        ("CR", '\CR'),
+        ("SO", '\SO'),
+        ("SI", '\SI'),
+        ("DLE", '\DLE'),
+        ("DC1", '\DC1'),
+        ("DC2", '\DC2'),
+        ("DC3", '\DC3'),
+        ("DC4", '\DC4'),
+        ("NAK", '\NAK'),
+        ("SYN", '\SYN'),
+        ("ETB", '\ETB'),
+        ("CAN", '\CAN'),
+        ("EM", '\EM'),
+        ("SUB", '\SUB'),
+        ("ESC", '\ESC'),
+        ("FS", '\FS'),
+        ("GS", '\GS'),
+        ("RS", '\RS'),
+        ("US", '\US'),
+        ("SP", '\SP'),
+        ("DEL", '\DEL')
+        ]
+
+hexDigit :: Char -> Int
+hexDigit c | is_decdigit c = ord c - ord '0'
+           | otherwise     = ord (to_lower c) - ord 'a' + 10
+
+octDecDigit :: Char -> Int
+octDecDigit c = ord c - ord '0'
+
+is_decdigit :: Char -> Bool
+is_decdigit c
+        =  c >= '0' && c <= '9'
+
+is_hexdigit :: Char -> Bool
+is_hexdigit c
+        =  is_decdigit c
+        || (c >= 'a' && c <= 'f')
+        || (c >= 'A' && c <= 'F')
+
+is_octdigit :: Char -> Bool
+is_octdigit c = c >= '0' && c <= '7'
+
+to_lower :: Char -> Char
+to_lower c
+  | c >=  'A' && c <= 'Z' = chr (ord c - (ord 'A' - ord 'a'))
+
+
+-- before calling lit_error, ensure that the current input is pointing to
+-- the position of the error in the buffer.  This is so that we can report
+-- a correct location to the user, but also so we can detect UTF-8 decoding
+-- errors if they occur.
+lit_error :: AlexInput -> Lex a
+lit_error i = do setInput i; lexError "lexical error in string/character literal"
+
+lexError :: String -> Lex a
+lexError = error
+
+getCharOrFail :: AlexInput -> Lex Char
+getCharOrFail i =  do
+  case alexGetChar i of
+        Nothing -> lexError "unexpected end-of-file in string/character literal"
+        Just (c,i)  -> do setInput i; return c
+
+-- This version does not squash unicode characters, it is used when
+-- lexing strings.
+alexGetChar :: AlexInput -> Maybe (Char,AlexInput)
+alexGetChar = undefined
+-}
+
+}
+
diff --git a/experiment/parse/LexerMonad.hs b/experiment/parse/LexerMonad.hs
new file mode 100644
index 0000000000000000000000000000000000000000..4e6e38797d66077bbd2dbef4f5a4568a583c60f6
--- /dev/null
+++ b/experiment/parse/LexerMonad.hs
@@ -0,0 +1,103 @@
+module LexerMonad (
+    InputStream,
+    LexState(..),
+    LexResult(..),
+    Position(..),
+    incPos,
+    retPos,
+
+    Lex(..),
+    execLexer,
+
+    getPos,
+    setPos,
+    adjustPos,
+
+    getInput,
+    setInput,
+
+    getStartCode,
+    setStartCode,
+
+  ) where
+
+import qualified Data.ByteString as B
+
+-- testing only:
+import qualified Data.Vector as V
+import qualified Data.Text   as T
+import qualified Data.Text.Encoding as T
+
+-- simple state monad
+newtype Lex a = Lex { unLex :: LexState -> LexResult a }
+
+instance Monad Lex where
+  return = returnLex
+  (>>=)  = thenLex
+
+data LexResult a = LexResult {-# UNPACK #-} !LexState a
+
+data LexState = LexState {
+        curPos   :: {-# UNPACK #-} !Position,        -- position at current input location
+        curInput :: {-# UNPACK #-} !InputStream,     -- the current input
+        curCode  :: {-# UNPACK #-} !StartCode,       -- lexer code
+        dbgText  :: V.Vector T.Text
+     } --TODO: check if we should cache the first token
+       -- since it looks like parsec's uncons can be called many times on the same input
+
+type StartCode   = Int    -- ^ An @alex@ lexer start code
+type InputStream = B.ByteString
+
+data Position = Position {-# UNPACK #-}   !Int           -- row
+                         {-# UNPACK #-}   !Int           -- column
+  deriving (Eq, Show)
+
+incPos :: Int -> Position -> Position
+incPos n (Position row col) = Position row (col + n)
+
+retPos :: Position -> Position
+retPos (Position row _col) = Position (row + 1) 1
+
+
+-- | Execute the given lexer on the supplied input stream.
+execLexer :: Lex a -> InputStream -> a
+execLexer (Lex lex) input =
+    case lex initialState of
+      LexResult _ result -> result
+  where
+    initialState = LexState {
+                     curPos   = Position 1 1,
+                     curInput = input,
+                     curCode  = 0,
+                     dbgText  = V.fromList . T.lines . T.decodeUtf8 $ input
+                   }
+
+{-# INLINE returnLex #-}
+returnLex :: a -> Lex a
+returnLex a = Lex $ \s -> LexResult s a
+
+{-# INLINE thenLex #-}
+thenLex :: Lex a -> (a -> Lex b) -> Lex b
+(Lex m) `thenLex` k = Lex $ \s -> case m s of LexResult s' a -> (unLex (k a)) s'
+
+setPos :: Position -> Lex ()
+setPos pos = Lex $ \s -> LexResult s{ curPos = pos } ()
+
+getPos :: Lex Position
+getPos = Lex $ \s@LexState{ curPos = pos } -> LexResult s pos
+
+adjustPos :: (Position -> Position) -> Lex ()
+adjustPos f = Lex $ \s@LexState{ curPos = pos } -> LexResult s{ curPos = f pos } ()
+
+getInput :: Lex InputStream
+getInput = Lex $ \s@LexState{ curInput = i } -> LexResult s i
+
+setInput :: InputStream -> Lex ()
+setInput i = Lex $ \s -> LexResult s{ curInput = i } ()
+
+getStartCode :: Lex Int
+getStartCode = Lex $ \s@LexState{ curCode = c } -> LexResult s c
+
+setStartCode :: Int -> Lex ()
+setStartCode c = Lex $ \s -> LexResult s{ curCode = c } ()
+
diff --git a/experiment/parse/OldParse.hs b/experiment/parse/OldParse.hs
new file mode 100644
index 0000000000000000000000000000000000000000..ac1d3c4110e031fc3d01ec436d3562d7b747629d
--- /dev/null
+++ b/experiment/parse/OldParse.hs
@@ -0,0 +1,303 @@
+module OldParse {-(readFields, ParseResult(..), runP)-} where
+
+import Distribution.Compat.ReadP as ReadP hiding (get)
+import Distribution.Simple.Utils (intercalate)
+
+import Data.Char (isSpace, toLower, isAlphaNum)
+import Data.Tree as Tree (Tree(..), flatten)
+
+-- -----------------------------------------------------------------------------
+
+type LineNo = Int
+
+data PError = AmbigousParse String LineNo
+            | NoParse String LineNo
+            | TabsError LineNo
+            | FromString String (Maybe LineNo)
+        deriving Show
+
+data PWarning = PWarning String
+              | UTFWarning LineNo String
+        deriving Show
+
+
+data ParseResult a = ParseFailed PError | ParseOk [PWarning] a
+        deriving Show
+
+instance Monad ParseResult where
+        return x = ParseOk [] x
+        ParseFailed err >>= _ = ParseFailed err
+        ParseOk ws x >>= f = case f x of
+                               ParseFailed err -> ParseFailed err
+                               ParseOk ws' x' -> ParseOk (ws'++ws) x'
+        fail s = ParseFailed (FromString s Nothing)
+
+runP :: LineNo -> String -> ReadP a a -> String -> ParseResult a
+runP line fieldname p s =
+  case [ x | (x,"") <- results ] of
+    [a] -> ParseOk (utf8Warnings line fieldname s) a
+    --TODO: what is this double parse thing all about?
+    --      Can't we just do the all isSpace test the first time?
+    []  -> case [ x | (x,ys) <- results, all isSpace ys ] of
+             [a] -> ParseOk (utf8Warnings line fieldname s) a
+             []  -> ParseFailed (NoParse fieldname line)
+             _   -> ParseFailed (AmbigousParse fieldname line)
+    _   -> ParseFailed (AmbigousParse fieldname line)
+  where results = readP_to_S p s
+
+utf8Warnings :: LineNo -> String -> String -> [PWarning]
+utf8Warnings line fieldname s =
+  take 1 [ UTFWarning n fieldname
+         | (n,l) <- zip [line..] (lines s)
+         , '\xfffd' `elem` l ]
+
+syntaxError :: LineNo -> String -> ParseResult a
+syntaxError n s = ParseFailed $ FromString s (Just n)
+
+tabsError :: LineNo -> ParseResult a
+tabsError ln = ParseFailed $ TabsError ln
+
+
+------------------------------------------------------------------------------
+
+-- The data type for our three syntactic categories
+data Field
+    = F LineNo String String
+      -- ^ A regular @<property>: <value>@ field
+    | Section LineNo String String [Field]
+      -- ^ A section with a name and possible parameter.  The syntactic
+      -- structure is:
+      --
+      -- @
+      --   <sectionname> <arg> {
+      --     <field>*
+      --   }
+      -- @
+    | IfBlock LineNo String [Field] [Field]
+      -- ^ A conditional block with an optional else branch:
+      --
+      -- @
+      --  if <condition> {
+      --    <field>*
+      --  } else {
+      --    <field>*
+      --  }
+      -- @
+      deriving (Show
+               ,Eq)   -- for testing
+
+
+readFields :: String -> ParseResult [Field]
+readFields input = ifelse
+               =<< mapM (mkField 0)
+               =<< mkTree tokens
+
+  where ls = (lines . normaliseLineEndings) input
+        tokens = (concatMap tokeniseLine . trimLines) ls
+
+-- attach line number and determine indentation
+trimLines :: [String] -> [(LineNo, Indent, HasTabs, String)]
+trimLines ls = [ (lineno, indent, hastabs, (trimTrailing l'))
+               | (lineno, l) <- zip [1..] ls
+               , let (sps, l') = span isSpace l
+                     indent    = length sps
+                     hastabs   = '\t' `elem` sps
+               , validLine l' ]
+  where validLine ('-':'-':_) = False      -- Comment
+        validLine []          = False      -- blank line
+        validLine _           = True
+
+-- | We parse generically based on indent level and braces '{' '}'. To do that
+-- we split into lines and then '{' '}' tokens and other spans within a line.
+data Token =
+       -- | The 'Line' token is for bits that /start/ a line, eg:
+       --
+       -- > "\n  blah blah { blah"
+       --
+       -- tokenises to:
+       --
+       -- > [Line n 2 False "blah blah", OpenBracket, Span n "blah"]
+       --
+       -- so lines are the only ones that can have nested layout, since they
+       -- have a known indentation level.
+       --
+       -- eg: we can't have this:
+       --
+       -- > if ... {
+       -- > } else
+       -- >     other
+       --
+       -- because other cannot nest under else, since else doesn't start a line
+       -- so cannot have nested layout. It'd have to be:
+       --
+       -- > if ... {
+       -- > }
+       -- >   else
+       -- >     other
+       --
+       -- but that's not so common, people would normally use layout or
+       -- brackets not both in a single @if else@ construct.
+       --
+       -- > if ... { foo : bar }
+       -- > else
+       -- >    other
+       --
+       -- this is ok
+       Line LineNo Indent HasTabs String
+     | Span LineNo                String  -- ^ span in a line, following brackets
+     | OpenBracket LineNo | CloseBracket LineNo
+
+type Indent = Int
+type HasTabs = Bool
+
+-- | Tokenise a single line, splitting on '{' '}' and the spans inbetween.
+-- Also trims leading & trailing space on those spans within the line.
+tokeniseLine :: (LineNo, Indent, HasTabs, String) -> [Token]
+tokeniseLine (n0, i, t, l) = case split n0 l of
+                            (Span _ l':ss) -> Line n0 i t l' :ss
+                            cs              -> cs
+  where split _ "" = []
+        split n s  = case span (\c -> c /='}' && c /= '{') s of
+          ("", '{' : s') ->             OpenBracket  n : split n s'
+          (w , '{' : s') -> mkspan n w (OpenBracket  n : split n s')
+          ("", '}' : s') ->             CloseBracket n : split n s'
+          (w , '}' : s') -> mkspan n w (CloseBracket n : split n s')
+          (w ,        _) -> mkspan n w []
+
+        mkspan n s ss | null s'   =             ss
+                      | otherwise = Span n s' : ss
+          where s' = trimTrailing (trimLeading s)
+
+trimLeading, trimTrailing :: String -> String
+trimLeading  = dropWhile isSpace
+trimTrailing = reverse . dropWhile isSpace . reverse
+
+
+-- | Fix different systems silly line ending conventions
+normaliseLineEndings :: String -> String
+normaliseLineEndings [] = []
+normaliseLineEndings ('\r':'\n':s) = '\n' : normaliseLineEndings s -- windows
+normaliseLineEndings ('\r':s)      = '\n' : normaliseLineEndings s -- old osx
+normaliseLineEndings (  c :s)      =   c  : normaliseLineEndings s
+
+type SyntaxTree = Tree (LineNo, HasTabs, String)
+
+-- | Parse the stream of tokens into a tree of them, based on indent \/ layout
+mkTree :: [Token] -> ParseResult [SyntaxTree]
+mkTree toks =
+  layout 0 [] toks >>= \(trees, trailing) -> case trailing of
+    []               -> return trees
+    OpenBracket  n:_ -> syntaxError n "mismatched backets, unexpected {"
+    CloseBracket n:_ -> syntaxError n "mismatched backets, unexpected }"
+    -- the following two should never happen:
+    Span n     l  :_ -> syntaxError n $ "unexpected span: " ++ show l
+    Line n _ _ l  :_ -> syntaxError n $ "unexpected line: " ++ show l
+
+
+-- | Parse the stream of tokens into a tree of them, based on indent
+-- This parse state expect to be in a layout context, though possibly
+-- nested within a braces context so we may still encounter closing braces.
+layout :: Indent       -- ^ indent level of the parent\/previous line
+       -> [SyntaxTree] -- ^ accumulating param, trees in this level
+       -> [Token]      -- ^ remaining tokens
+       -> ParseResult ([SyntaxTree], [Token])
+                       -- ^ collected trees on this level and trailing tokens
+layout _ a []                               = return (reverse a, [])
+layout i a (s@(Line _ i' _ _):ss) | i' < i  = return (reverse a, s:ss)
+layout i a (Line n _ t l:OpenBracket n':ss) = do
+    (sub, ss') <- braces n' [] ss
+    layout i (Node (n,t,l) sub:a) ss'
+
+layout i a (Span n     l:OpenBracket n':ss) = do
+    (sub, ss') <- braces n' [] ss
+    layout i (Node (n,False,l) sub:a) ss'
+
+-- look ahead to see if following lines are more indented, giving a sub-tree
+layout i a (Line n i' t l:ss) = do
+    lookahead <- layout (i'+1) [] ss
+    case lookahead of
+        ([], _)   -> layout i (Node (n,t,l) [] :a) ss
+        (ts, ss') -> layout i (Node (n,t,l) ts :a) ss'
+
+layout _ _ (   OpenBracket  n :_)  = syntaxError n $ "unexpected '{'"
+layout _ a (s@(CloseBracket _):ss) = return (reverse a, s:ss)
+layout _ _ (   Span n l       : _) = syntaxError n $ "unexpected span: "
+                                                  ++ show l
+
+-- | Parse the stream of tokens into a tree of them, based on explicit braces
+-- This parse state expects to find a closing bracket.
+braces :: LineNo       -- ^ line of the '{', used for error messages
+       -> [SyntaxTree] -- ^ accumulating param, trees in this level
+       -> [Token]      -- ^ remaining tokens
+       -> ParseResult ([SyntaxTree],[Token])
+                       -- ^ collected trees on this level and trailing tokens
+braces m a (Line n _ t l:OpenBracket n':ss) = do
+    (sub, ss') <- braces n' [] ss
+    braces m (Node (n,t,l) sub:a) ss'
+
+braces m a (Span n     l:OpenBracket n':ss) = do
+    (sub, ss') <- braces n' [] ss
+    braces m (Node (n,False,l) sub:a) ss'
+
+braces m a (Line n i t l:ss) = do
+    lookahead <- layout (i+1) [] ss
+    case lookahead of
+        ([], _)   -> braces m (Node (n,t,l) [] :a) ss
+        (ts, ss') -> braces m (Node (n,t,l) ts :a) ss'
+
+braces m a (Span n       l:ss) = braces m (Node (n,False,l) []:a) ss
+braces _ a (CloseBracket _:ss) = return (reverse a, ss)
+braces n _ []                  = syntaxError n $ "opening brace '{'"
+                              ++ "has no matching closing brace '}'"
+braces _ _ (OpenBracket  n:_)  = syntaxError n "unexpected '{'"
+
+-- | Convert the parse tree into the Field AST
+-- Also check for dodgy uses of tabs in indentation.
+mkField :: Int -> SyntaxTree -> ParseResult Field
+mkField d (Node (n,t,_) _) | d >= 1 && t = tabsError n
+mkField d (Node (n,_,l) ts) = case span (\c -> isAlphaNum c || c == '-') l of
+  ([], _)       -> syntaxError n $ "unrecognised field or section: " ++ show l
+  (name, rest)  -> case trimLeading rest of
+    (':':rest') -> do let followingLines = concatMap Tree.flatten ts
+                          tabs = not (null [()| (_,True,_) <- followingLines ])
+                      if tabs && d >= 1
+                        then tabsError n
+                        else return $ F n (map toLower name)
+                                          (fieldValue rest' followingLines)
+    rest'       -> do ts' <- mapM (mkField (d+1)) ts
+                      return (Section n (map toLower name) rest' ts')
+    where fieldValue firstLine followingLines =
+            let firstLine' = trimLeading firstLine
+                followingLines' = map (\(_,_,s) -> stripDot s) followingLines
+                allLines | null firstLine' =              followingLines'
+                         | otherwise       = firstLine' : followingLines'
+             in intercalate "\n" allLines
+          stripDot "." = ""
+          stripDot s   = s
+
+-- | Convert if/then/else 'Section's to 'IfBlock's
+ifelse :: [Field] -> ParseResult [Field]
+ifelse [] = return []
+ifelse (Section n "if"   cond thenpart
+       :Section _ "else" as   elsepart:fs)
+       | null cond     = syntaxError n "'if' with missing condition"
+       | null thenpart = syntaxError n "'then' branch of 'if' is empty"
+       | not (null as) = syntaxError n "'else' takes no arguments"
+       | null elsepart = syntaxError n "'else' branch of 'if' is empty"
+       | otherwise     = do tp  <- ifelse thenpart
+                            ep  <- ifelse elsepart
+                            fs' <- ifelse fs
+                            return (IfBlock n cond tp ep:fs')
+ifelse (Section n "if"   cond thenpart:fs)
+       | null cond     = syntaxError n "'if' with missing condition"
+       | null thenpart = syntaxError n "'then' branch of 'if' is empty"
+       | otherwise     = do tp  <- ifelse thenpart
+                            fs' <- ifelse fs
+                            return (IfBlock n cond tp []:fs')
+ifelse (Section n "else" _ _:_) = syntaxError n "stray 'else' with no preceding 'if'"
+ifelse (Section n s a fs':fs) = do fs''  <- ifelse fs'
+                                   fs''' <- ifelse fs
+                                   return (Section n s a fs'' : fs''')
+ifelse (f:fs) = do fs' <- ifelse fs
+                   return (f : fs')
+
diff --git a/experiment/parse/ParseFields.hs b/experiment/parse/ParseFields.hs
new file mode 100644
index 0000000000000000000000000000000000000000..64c963c199f986bd2ef407b86bd2d96eabd8e776
--- /dev/null
+++ b/experiment/parse/ParseFields.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE BangPatterns, GADTSyntax, ExistentialQuantification #-}
+module ParseFields where
+
+import Parser hiding (Parser)
+import qualified Text.Parsec
+import Control.Monad.Identity
+
+import qualified Data.Text as T
+import Data.Text (Text)
+import qualified Data.ByteString as BS
+import Data.ByteString (ByteString)
+import qualified Data.Map as M
+import Data.Map (Map)
+
+-- | Define a set of field descriptions (a 'FieldsDescr'). This can then be used
+-- with 'readFields' or 'parseCabalStyleFile'.
+--
+fieldsDescr :: a -> [FieldDescr a] -> FieldsDescr a
+fieldsDescr empty =
+    foldl' accum (FieldsDescr empty Nothing Map.empty Nothing Map.empty)
+  where
+    accum (FieldsDescr e fs fo ss so) (FieldDescr fname set parser) =
+      FieldsDescr e (Map.insert fname (set, parser) fs) fo ss so
+
+    accum (FieldsDescr e fs fo ss so) (FieldDescrOther set parser) =
+      FieldsDescr e fs (Just (set, parser)) ss so
+
+
+-- | Describe an individual named field.
+--
+fieldDescr ::  String -> (a -> b -> a) -> FParser s b  -> FieldDescr a
+fieldDescr = FieldDescr
+
+-- | Describe what to do with fields other than those named with 'fieldDescr'.
+--
+fieldDescrOther :: (a -> b -> a) -> (String -> FParser s b) -> FieldDescr a
+fieldDescrOther = FieldDescrOther
+
+sectionDescr :: String -> (a -> b -> c) -> FParser s a  -> FieldsDescr b -> FieldDescr c
+sectionDescr = SectionDescr
+
+sectionDescrOther :: (a -> b -> c) -> (String -> FParser s a) -> FieldsDescr b -> FieldDescr c
+sectionDescrOther = SectionDescrOther
+
+data FieldsDescr a where
+  FieldsDescr :: a -> (a -> b -> a) -> Map FieldName (FieldDescr b) -> FieldsDescr a
+
+data FieldDescr a where
+  FieldDescr        :: String -> (a -> b -> a) -> FParser [FieldLine] a -> FieldDescr a
+  FieldDescrOther   :: (a -> b -> a) -> (String -> FParser s b) -> FieldDescr a
+  SectionDescr      :: String -> (a -> b -> c)  -> FParser s a  -> FieldsDescr b -> FieldDescr c
+  SectionDescrOther :: (a -> b -> c) -> (String -> FParser s a) -> FieldsDescr b -> FieldDescr c
+
+
+data Ex = Ex { exField1 :: Int, exField2 :: String }
+
+example :: FieldsDescr Ex
+example =
+  fieldsDescr (Ex 0 "")
+    [ fieldDescr "field1" (\e x -> e { exField1 = x })
+                 (\_ -> ParseOk [] 42)
+    , fieldDescr "field2" (\e x -> e { exField2 = x })
+                 (\_ -> ParseOk [] "foo!")
+    , fieldDescrOther const
+                 (\f _ -> ParseOk ["Unexpected field " ++ f] ())
+    ]
+
+type ParseError   = ()
+type ParseWarning = ()
+data ParseResult a = ParseFailed [ParseError] | ParseOk [ParseWarning] a
+
+--type Parsec a = Text.Parsec.Stream s m Char => Text.Parsec.ParsecT s u Identity a
+--type Parsec s a = Text.Parsec.ParsecT s () Identity a
+type FParser s a = s -> ParseResult a
+
+-- | Parse a file in Cabal-style syntax.
+--
+-- You supply a description of the fields and sections that are allowed.
+--
+parseCabalStyleFile :: FieldsDescr a -> ByteString -> ParseResult a
+parseCabalStyleFile descrs input =
+  outlineParseCabalStyleFile input >>= parseFields descr
+
+-- | Do an \"outline\" parse of a file in Cabal-style syntax.
+--
+-- It just parses the structure, but not the contents of the individual fields.
+-- This can be useful if you need to treat the file in a generic way and do not
+-- know what is in every field, for example if you want to edit just a few
+-- specific fields and write the file out again.
+--
+outlineParseCabalStyleFile :: ByteString -> ParseResult [Field]
+outlineParseCabalStyleFile = undefined
+
+type FieldName = ByteString
+
+data FieldsDescr a where
+  FieldsDescr :: a -> (a -> b -> a) -> Map FieldName (FieldDescr b) -> FieldsDescr a
+
+data FieldDescr a where
+  FieldDescr      :: FParser [FieldLine] a -> FieldDescr a
+  SubsectionDescr :: (c -> b -> a) -> FParser [SectionArg] c -> FieldsDescr b -> FieldDescr a
+
+
+parseFields :: FieldsDescr a -> [Field] -> ParseResult a
+parseFields (FieldsDescr empty add fielddescrmap) = undefined {- go [] empty
+  where
+    go []   !acc [] = Right acc
+    go errs !acc [] = Left  (reverse errs)
+
+    go errs !acc (Field (Name pos name) content : fields) =
+      case M.lookup name fielddescrmap of
+        Just (FieldDescr parseField)
+          | Right x <- parseField content
+          -> go errs (acc `add` x) fields
+
+          | otherwise
+          -> go (err:errs) acc fields
+               where
+                 err = () -- parse error in field name at pos: content
+        _ -> go (err:errs) acc fields
+               where
+                 err = () -- unexpected field name at pos
+
+    go errs !acc (Section (Name _ name) args fields' : fields) =
+      case M.lookup name fielddescrmap of        
+        Just (SubsectionDescr subsec parseArgs fielddescrs)
+          | Right a <- parseArgs args
+          -> case parseFields fielddescrs fields' of
+               Right x    -> go errs (acc `add` subsec a x) fields
+               Left errs' -> go (errs'++errs) acc fields
+
+          | otherwise
+          -> go (err:errs) acc fields
+               where
+                 err = () -- parse error in field name at pos: content
+
+        _ -> go (err:errs) acc fields
+               where
+                 err = () -- unexpected section name at pos
+-}
diff --git a/experiment/parse/Parser.hs b/experiment/parse/Parser.hs
new file mode 100644
index 0000000000000000000000000000000000000000..e676dba31e433df8af4cf6f8db18273cf0ed1ea0
--- /dev/null
+++ b/experiment/parse/Parser.hs
@@ -0,0 +1,414 @@
+{-# LANGUAGE MultiParamTypeClasses, BangPatterns #-}
+module Parser where
+
+import Lexer
+import LexerMonad (unLex, LexState(..), LexResult(..), Position(..))
+
+import Text.Parsec.Prim
+import Text.Parsec.Combinator hiding (eof)
+import Text.Parsec.Pos
+import Text.Parsec.Error
+
+import Control.Monad (guard)
+import Data.Functor.Identity
+import Data.ByteString (ByteString)
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Text   as T
+import qualified Data.Text.Encoding as T
+import qualified Data.Text.Encoding.Error as T
+
+
+data LexState' = LexState' !LexState (LToken, LexState')
+
+mkLexState' :: LexState -> LexState'
+mkLexState' st = LexState' st
+                   (case unLex lexToken st of LexResult st' tok -> (tok, mkLexState' st'))
+
+type Parser a = ParsecT LexState' () Identity a
+
+instance Stream LexState' Identity LToken where
+  --uncons :: LexState -> Identity (Maybe (Token, LexState))
+
+{-
+  uncons (LexState' st _) =
+    case unLex lexToken st of
+      LexResult st' tok -> 
+        case tok of
+          L _ EOF -> return Nothing
+          _       -> return (Just (tok, LexState' st' undefined))
+-}
+{-
+  uncons (LexState' _ (LexResult st' tok)) =
+    case tok of
+      L _ EOF -> return Nothing
+      _       -> return (Just (tok, mkLexState' st'))
+-}
+  uncons (LexState' _ (tok,st')) =
+    case tok of
+      L _ EOF -> return Nothing
+      _       -> return (Just (tok, st'))
+
+setLexerMode :: Int -> Parser ()
+setLexerMode code = do
+  LexState' ls _ <- getInput
+  setInput $! mkLexState' ls { curCode = code }
+
+getToken :: (Token -> Maybe a) -> Parser a
+getToken getTok = getTokenWithPos (\(L _ t) -> getTok t)
+
+getTokenWithPos :: (LToken -> Maybe a) -> Parser a
+getTokenWithPos getTok = tokenPrim (\(L _ t) -> describeToken t) updatePos getTok
+  where
+    updatePos :: SourcePos -> LToken -> LexState' -> SourcePos
+    updatePos pos (L (Position col line) _) _ = newPos (sourceName pos) col line
+
+describeToken :: Token -> String
+describeToken t = case t of
+  TokSym   s      -> "name "   ++ show s
+  TokStr   s      -> "string " ++ show s
+  TokNum   s      -> "number " ++ show s
+  TokOther s      -> "symbol " ++ show s
+  Indent _        -> "new line"
+  TokFieldLine _  -> "field content"
+  Colon           -> "\":\""
+  OpenBrace       -> "\"{\""
+  CloseBrace      -> "\"}\""
+--  SemiColon       -> "\";\""
+  EOF             -> "end of file"
+  LexicalError is -> "character in input " ++ show (B.head is)
+
+--tokName, tokStr, tokNum, tokOther, tokFieldLine :: Parser String
+tokName :: Parser Name
+--tokNum, tokOther
+--tokStr :: Parser String
+tokIndent                 :: Parser Int
+tokColon, tokOpenBrace,
+  tokCloseBrace :: Parser ()
+  
+
+tokName       = getTokenWithPos $ \t -> case t of L pos (TokSym x) -> Just (Name pos x);  _ -> Nothing
+tokName'      = getTokenWithPos $ \t -> case t of L pos (TokSym x) -> Just (SecArgName pos x);  _ -> Nothing
+tokStr        = getTokenWithPos $ \t -> case t of L pos (TokStr   x) -> Just (SecArgStr pos x);  _ -> Nothing
+tokNum        = getTokenWithPos $ \t -> case t of L pos (TokNum   x) -> Just (SecArgNum pos x);  _ -> Nothing
+tokOther      = getTokenWithPos $ \t -> case t of L pos (TokOther x) -> Just (SecArgOther pos x);  _ -> Nothing
+tokIndent     = getToken $ \t -> case t of Indent   x -> Just x;  _ -> Nothing
+tokColon      = getToken $ \t -> case t of Colon      -> Just (); _ -> Nothing
+tokOpenBrace  = getToken $ \t -> case t of OpenBrace  -> Just (); _ -> Nothing
+tokCloseBrace = getToken $ \t -> case t of CloseBrace -> Just (); _ -> Nothing
+tokFieldLine  = getTokenWithPos $ \t -> case t of L pos (TokFieldLine s) -> Just (FieldLine pos s); _ -> Nothing
+
+--sectionName, sectionArg, fieldSecName, fieldContent :: Parser String
+colon, openBrace, closeBrace :: Parser ()
+
+sectionName  = tokName              <?> "section name"
+sectionArg   = tokName' <|> tokStr
+            <|> tokNum <|> tokOther <?> "section parameter"
+fieldSecName = tokName              <?> "field or section name"
+colon        = tokColon      <?> "\":\""
+openBrace    = tokOpenBrace  <?> "\"{\""
+closeBrace   = tokCloseBrace <?> "\"}\""
+fieldContent = tokFieldLine <?> "field contents"
+
+newtype IndentLevel = IndentLevel Int
+
+zeroIndentLevel :: IndentLevel
+zeroIndentLevel = IndentLevel 0
+
+incIndentLevel :: IndentLevel -> IndentLevel
+incIndentLevel (IndentLevel i) = IndentLevel (succ i)
+
+indentOfAtLeast :: IndentLevel -> Parser IndentLevel
+indentOfAtLeast (IndentLevel i) = try $ do
+  j <- tokIndent
+  guard (j >= i) <?> "indentation of at least " ++ show i
+  return (IndentLevel j)
+
+
+newtype LexerMode = LexerMode Int
+
+inLexerMode :: LexerMode -> Parser p -> Parser p
+inLexerMode (LexerMode mode) p =
+  do setLexerMode mode; x <- p; setLexerMode in_section; return x
+
+data Field = Field   !Name [FieldLine]
+           | Section !Name [SectionArg] [Field]
+  deriving (Eq, Show)
+
+data Name       = Name       !Position !ByteString
+  deriving (Eq, Show)
+
+data FieldLine  = FieldLine  !Position !ByteString
+  deriving (Eq, Show)
+
+data SectionArg = SecArgName  !Position !ByteString
+                | SecArgStr   !Position !String
+                | SecArgNum   !Position !ByteString
+                | SecArgOther !Position !ByteString
+  deriving (Eq, Show)
+
+
+-----------------------
+-- Cabal file grammar
+--
+
+-- SecElems      ::= SecElem* '\n'?
+-- SecElem       ::= '\n' SecElemLayout | SecElemBraces
+-- SecElemLayout ::= FieldLayout | FieldBraces | SectionLayout | SectionBraces
+-- SecElemBraces ::= FieldInline | FieldBraces |                 SectionBraces
+-- FieldLayout   ::= name ':' line? ('\n' line)*
+-- FieldBraces   ::= name ':' '\n'? '{' content '}'
+-- FieldInline   ::= name ':' content
+-- SectionLayout ::= name arg* SecElems
+-- SectionBraces ::= name arg* '\n'? '{' SecElems '}'
+
+--
+-- and the same thing but left factored...
+--
+
+-- SecElems              ::= SecElem*
+-- SecElem               ::= '\n' name SecElemLayout
+--                         |      name SecElemBraces
+-- SecElemLayout         ::= ':'   FieldLayoutOrBraces
+--                         | arg*  SectionLayoutOrBraces
+-- FieldLayoutOrBraces   ::= '\n'? '{' content '}'
+--                         | line? ('\n' line)*
+-- SectionLayoutOrBraces ::= '\n'? '{' SecElems '\n'? '}'
+--                         | SecElems
+-- SecElemBraces         ::= ':' FieldInlineOrBraces
+--                         | arg* '\n'? '{' SecElems '\n'? '}'
+-- FieldInlineOrBraces   ::= '\n'? '{' content '}'
+--                         | content
+--
+-- Note how we have several productions with the sequence:
+--   '\n'? '{'
+-- That is, an optional newline (and indent) followed by a '{' token.
+-- In the SectionLayoutOrBraces case you can see that this makes it
+-- not fully left factored (because SecElems can start with a '\n').
+-- Fully left factoring here would be ugly, and though we could use a
+-- lookahead of two tokens to resolve the alternatives, we can't
+-- conveniently use Parsec's 'try' here to get a lookahead of only two.
+-- So instead we deal with this case in the lexer by making a line
+-- where the first non-space is '{' lex as just the '{' token, without
+-- the usual indent token. Then in the parser we can resolve everything
+-- with just one token of lookahead and so without using 'try'.
+
+
+-- Top level of a file using cabal syntax 
+--
+cabalStyleFile :: Parser [Field]
+cabalStyleFile = do es <- elements zeroIndentLevel
+                    eof
+                    return es
+
+-- Elements that live at the top level or inside a section, ie fields
+-- and sectionscontent
+--
+-- elements ::= element*
+elements :: IndentLevel -> Parser [Field]
+elements ilevel = many (element ilevel)
+
+-- An individual element, ie a field or a section. These can either use
+-- layout style or braces style. For layout style then it must start on
+-- a line on it's own (so that we know its indentation level).
+--
+-- element ::= '\n' name elementInLayoutContext
+--           |      name elementInNonLayoutContext
+element :: IndentLevel -> Parser Field
+element ilevel =
+      (do ilevel' <- indentOfAtLeast ilevel
+          name    <- tokName
+          elementInLayoutContext (incIndentLevel ilevel') name)
+  <|> (do name    <- tokName
+          elementInNonLayoutContext name)
+
+-- An element (field or section) that is valid in a layout context.
+-- In a layout context we can have fields and sections that themselves
+-- either use layout style or that use braces style.
+--
+-- elementInLayoutContext ::= ':'  fieldLayoutOrBraces
+--                          | arg* sectionLayoutOrBraces
+elementInLayoutContext :: IndentLevel -> Name -> Parser Field
+elementInLayoutContext ilevel name =
+      (do colon; fieldLayoutOrBraces ilevel name)
+  <|> (do args  <- many sectionArg
+          elems <- sectionLayoutOrBraces ilevel
+          return (Section name args elems))
+
+-- An element (field or section) that is valid in a non-layout context.
+-- In a non-layout context we can have only have fields and sections that
+-- themselves use braces style, or inline style fields.
+--
+-- elementInNonLayoutContext ::= ':' FieldInlineOrBraces
+--                             | arg* '\n'? '{' elements '\n'? '}'
+elementInNonLayoutContext :: Name -> Parser Field
+elementInNonLayoutContext name =
+      (do colon; fieldInlineOrBraces name)
+  <|> (do args <- many sectionArg
+          openBrace
+          elems <- elements zeroIndentLevel
+          optional tokIndent
+          closeBrace
+          return (Section name args elems))
+
+-- The body of a field, using either layout style or braces style.
+--
+-- fieldLayoutOrBraces   ::= '\n'? '{' content '}'
+--                         | line? ('\n' line)*
+fieldLayoutOrBraces :: IndentLevel -> Name -> Parser Field
+fieldLayoutOrBraces ilevel name =
+      (do openBrace
+          ls <- inLexerMode (LexerMode in_field_braces) (many fieldContent)
+          closeBrace
+          return (Field name ls))
+  <|> (inLexerMode (LexerMode in_field_layout)
+        (do l  <- option (FieldLine (Position 0 0) B.empty) fieldContent
+                  --FIXME ^^ having to add an extra empty here is silly!
+            ls <- many (do _ <- indentOfAtLeast ilevel; fieldContent)
+            return (Field name (l:ls))))
+
+-- The body of a section, using either layout style or braces style.
+--
+-- sectionLayoutOrBraces ::= '\n'? '{' elements \n? '}'
+--                         | elements
+sectionLayoutOrBraces :: IndentLevel -> Parser [Field]
+sectionLayoutOrBraces ilevel =
+      (do openBrace
+          elems <- elements zeroIndentLevel
+          optional tokIndent
+          closeBrace
+          return elems)
+  <|> (elements ilevel)
+
+-- The body of a field, using either inline style or braces.
+--
+-- fieldInlineOrBraces   ::= '\n'? '{' content '}'
+--                         | content
+fieldInlineOrBraces :: Name -> Parser Field
+fieldInlineOrBraces name =
+      (do openBrace
+          ls <- inLexerMode (LexerMode in_field_braces) (many fieldContent)
+          closeBrace
+          return (Field name ls))
+  <|> (do ls <- inLexerMode (LexerMode in_field_braces) (option [] (fmap (\l -> [l]) fieldContent))
+          return (Field name ls))
+
+
+readFields :: B.ByteString -> Either ParseError [Field]
+readFields s = parse cabalStyleFile "the input" lexSt
+  where
+    lexSt = mkLexState' (mkLexState s)
+
+parseTest' p fname s =
+    case parse p fname (lexSt s) of
+      Left err -> putStrLn (formatError s err)
+
+      Right x  -> print x
+  where
+    lexSt s = mkLexState' (mkLexState s)
+
+parseFile :: Show a => Parser a -> FilePath -> IO ()
+parseFile p f = B.readFile f >>= \s -> parseTest' p f s
+
+parseStr  :: Show a => Parser a -> String -> IO ()
+parseStr p s = parseTest' p "<input string>" (B.pack s)
+
+
+formatError :: B.ByteString -> ParseError -> String
+formatError input perr =
+    unlines
+      [ "Parse error "++ show (errorPos perr) ++ ":"
+      , errLine
+      , indicator ++ errmsg ]
+  where
+    pos       = errorPos perr
+    ls        = lines' (T.decodeUtf8With T.lenientDecode input)
+    errLine   = T.unpack (ls !! (sourceLine pos - 1))
+    indicator = replicate (sourceColumn pos) ' ' ++ "^"
+    errmsg    = showErrorMessages "or" "unknown parse error"
+                                  "expecting" "unexpected" "end of file"
+                                  (errorMessages perr)
+    
+
+lines' s1
+  | T.null s1 = []
+  | otherwise = case T.break (\c -> c == '\r' || c == '\n') s1 of
+                  (l, s2) | Just (c,s3) <- T.uncons s2
+                         -> case T.uncons s3 of
+                              Just ('\n', s4) | c == '\r' -> l : lines' s4
+                              _                           -> l : lines' s3
+                          | otherwise -> [l]
+
+eof :: Parser ()
+eof = notFollowedBy anyToken <?> "end of file"
+  where
+    notFollowedBy :: Parser LToken -> Parser ()
+    notFollowedBy p = try (    (do L _ t <- try p; unexpected (describeToken t))
+                           <|> return ())
+--showErrorMessages "or" "unknown parse error"
+--                            "expecting" "unexpected" "end of input"
+
+{-
+data EncodingError = ProbablyBinaryFile
+                   | ControlCharOrBinary
+                   | InvalidUTF8
+                   | InvalidUTF8ProbablyLatin1 Char
+                   | InvalidUTF8OverLong
+                   | Impossible
+                   | NormalChar
+
+checkEncodingError :: ByteString -> EncodingError
+checkEncodingError bs =
+  case BS.uncons bs of
+    Nothing      -> Impossible
+    Just (b,bs')
+      | b == 0     -> ProbablyBinaryFile
+      | b < 0x20 || b == 127   -> ControlCharOrBinary
+      | b <= 0x7f              -> NormalChar
+      | b <= 0xbf              -> InvalidUTF8 -- invalid utf8 (and probably not latin1)
+      | b <= 0xdf  -- two bytes-> 
+      | b <= 0xef  -- three bytes
+      | otherwise  -- four or more bytes (invalid utf8)
+
+  where
+    twoBytes c0 (c1:cs')
+      | c1 .&. 0xC0 == 0x80
+      = let d = ((c0 .&. 0x1F) `shiftL` 6)
+             .|. (c1 .&. 0x3F)
+         in if d >= 0x80
+               then  NormalChar
+               else  InvalidUTF8
+    twoBytes _ cs' = InvalidUTF8
+
+-}
+
+{-
+----------------------------------
+-- Grammar for pure braces style
+--
+SecElem ::= Field |  Section
+Field   ::= name ':' '{' content '}'
+Section ::= name arg* '{' SecElem* '}'
+
+-- and left factored:
+
+SecElem  ::= name SecElem'
+SecElem' ::= Field | Section
+Field    ::= ':' '{' content '}'
+Section  ::= arg* '{' SecElem* '}'
+
+----------------------------------
+-- Grammar for pure layout style
+--
+SecElems ::= (\n SecElem)*
+SecElem  ::= Field | Section
+Field    ::= name ':' line? ('\n' line)*
+Section  ::= name arg* SecElems
+
+-- and left factored:
+
+SecElems ::= SecElem*
+SecElem  ::= \n name SecElem'
+SecElem' ::= Field | Section
+Field    ::= ':' line? ('\n' line)*
+Section  ::= arg* SecElems
+-}
diff --git a/experiment/parse/Parser2.hs b/experiment/parse/Parser2.hs
new file mode 100644
index 0000000000000000000000000000000000000000..374f6a9feaf5dbe23e6679d7f91fbf8f1a8f71cd
--- /dev/null
+++ b/experiment/parse/Parser2.hs
@@ -0,0 +1,424 @@
+{-# LANGUAGE MultiParamTypeClasses, BangPatterns #-}
+module Parser where
+
+import Lexer
+import LexerMonad (unLex, LexState(..), LexResult(..), Position(..))
+
+import Text.Parsec.Prim
+import Text.Parsec.Combinator hiding (eof)
+import Text.Parsec.Pos
+import Text.Parsec.Error
+
+import Control.Monad (guard)
+import Data.Functor.Identity
+import Data.ByteString (ByteString)
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Text   as T
+import qualified Data.Text.Encoding as T
+import qualified Data.Text.Encoding.Error as T
+
+
+data LexState' = LexState' !LexState (LToken, LexState')
+
+mkLexState' :: LexState -> LexState'
+mkLexState' st = LexState' st
+                   (case unLex lexToken st of LexResult st' tok -> (tok, mkLexState' st'))
+
+type Parser a = ParsecT LexState' () Identity a
+
+instance Stream LexState' Identity LToken where
+  --uncons :: LexState -> Identity (Maybe (Token, LexState))
+
+{-
+  uncons (LexState' st _) =
+    case unLex lexToken st of
+      LexResult st' tok -> 
+        case tok of
+          L _ EOF -> return Nothing
+          _       -> return (Just (tok, LexState' st' undefined))
+-}
+{-
+  uncons (LexState' _ (LexResult st' tok)) =
+    case tok of
+      L _ EOF -> return Nothing
+      _       -> return (Just (tok, mkLexState' st'))
+-}
+  uncons (LexState' _ (tok,st')) =
+    case tok of
+      L _ EOF -> return Nothing
+      _       -> return (Just (tok, st'))
+
+setLexerMode :: Int -> Parser ()
+setLexerMode code = do
+  LexState' ls _ <- getInput
+  setInput $! mkLexState' ls { curCode = code }
+
+getToken :: (Token -> Maybe a) -> Parser a
+getToken getTok = getTokenWithPos (\(L _ t) -> getTok t)
+
+getTokenWithPos :: (LToken -> Maybe a) -> Parser a
+getTokenWithPos getTok = tokenPrim (\(L _ t) -> describeToken t) updatePos getTok
+  where
+    updatePos :: SourcePos -> LToken -> LexState' -> SourcePos
+    updatePos pos (L (Position col line) _) _ = newPos (sourceName pos) col line
+
+describeToken :: Token -> String
+describeToken t = case t of
+  TokSym   s      -> "name "   ++ show s
+  TokStr   s      -> "string " ++ show s
+  TokNum   s      -> "number " ++ show s
+  TokOther s      -> "symbol " ++ show s
+  Indent _        -> "new line"
+  TokFieldLine _  -> "field content"
+  Colon           -> "\":\""
+  OpenBrace       -> "\"{\""
+  CloseBrace      -> "\"}\""
+--  SemiColon       -> "\";\""
+  EOF             -> "end of file"
+  LexicalError is -> "character in input " ++ show (B.head is)
+
+--tokName, tokStr, tokNum, tokOther, tokFieldLine :: Parser String
+tokName :: Parser Name
+--tokNum, tokOther
+--tokStr :: Parser String
+tokIndent                 :: Parser Int
+tokColon, tokOpenBrace,
+  tokCloseBrace :: Parser ()
+  
+
+tokName       = getTokenWithPos $ \t -> case t of L pos (TokSym x) -> Just (Name pos x);  _ -> Nothing
+tokName'      = getTokenWithPos $ \t -> case t of L pos (TokSym x) -> Just (SecArgName pos x);  _ -> Nothing
+tokStr        = getTokenWithPos $ \t -> case t of L pos (TokStr   x) -> Just (SecArgStr pos x);  _ -> Nothing
+tokNum        = getTokenWithPos $ \t -> case t of L pos (TokNum   x) -> Just (SecArgNum pos x);  _ -> Nothing
+tokOther      = getTokenWithPos $ \t -> case t of L pos (TokOther x) -> Just (SecArgOther pos x);  _ -> Nothing
+tokIndent     = getToken $ \t -> case t of Indent   x -> Just x;  _ -> Nothing
+tokColon      = getToken $ \t -> case t of Colon      -> Just (); _ -> Nothing
+tokOpenBrace  = getToken $ \t -> case t of OpenBrace  -> Just (); _ -> Nothing
+tokCloseBrace = getToken $ \t -> case t of CloseBrace -> Just (); _ -> Nothing
+tokFieldLine  = getTokenWithPos $ \t -> case t of L pos (TokFieldLine s) -> Just (FieldLine pos s); _ -> Nothing
+
+--sectionName, sectionArg, fieldSecName, fieldContent :: Parser String
+colon, openBrace, closeBrace :: Parser ()
+
+sectionName  = tokName              <?> "section name"
+sectionArg   = tokName' <|> tokStr
+            <|> tokNum <|> tokOther <?> "section parameter"
+fieldSecName = tokName              <?> "field or section name"
+colon        = tokColon      <?> "\":\""
+openBrace    = tokOpenBrace  <?> "\"{\""
+closeBrace   = tokCloseBrace <?> "\"}\""
+fieldContent = tokFieldLine <?> "field contents"
+
+newtype IndentLevel = IndentLevel Int
+
+zeroIndentLevel :: IndentLevel
+zeroIndentLevel = IndentLevel 0
+
+incIndentLevel :: IndentLevel -> IndentLevel
+incIndentLevel (IndentLevel i) = IndentLevel (succ i)
+
+indentOfAtLeast :: IndentLevel -> Parser IndentLevel
+indentOfAtLeast (IndentLevel i) = try $ do
+  j <- tokIndent
+  guard (j >= i) <?> "indentation of at least " ++ show i
+  return (IndentLevel j)
+
+
+newtype LexerMode = LexerMode Int
+
+inLexerMode :: LexerMode -> Parser p -> Parser p
+inLexerMode (LexerMode mode) p =
+  do setLexerMode mode; x <- p; setLexerMode in_section; return x
+
+data Field = Field   !Name [FieldLine]
+           | Section !Name [SectionArg] [Field]
+  deriving (Eq, Show)
+
+data Name       = Name       !Position !ByteString
+  deriving (Eq, Show)
+
+data FieldLine  = FieldLine  !Position !ByteString
+  deriving (Eq, Show)
+
+data SectionArg = SecArgName  !Position !ByteString
+                | SecArgStr   !Position !String
+                | SecArgNum   !Position !ByteString
+                | SecArgOther !Position !ByteString
+  deriving (Eq, Show)
+
+
+-----------------------
+-- Cabal file grammar
+--
+
+-- SecElems      ::= SecElem* '\n'?
+-- SecElem       ::= '\n' SecElemLayout | SecElemBraces
+-- SecElemLayout ::= FieldLayout | FieldBraces | SectionLayout | SectionBraces
+-- SecElemBraces ::= FieldInline | FieldBraces |                 SectionBraces
+-- FieldLayout   ::= name ':' line? ('\n' line)*
+-- FieldBraces   ::= name ':' '\n'? '{' content '}'
+-- FieldInline   ::= name ':' content
+-- SectionLayout ::= name arg* SecElems
+-- SectionBraces ::= name arg* '\n'? '{' SecElems '}'
+
+--
+-- and the same thing but left factored...
+--
+
+-- SecElems              ::= SecElem*
+-- SecElem               ::= '\n' name SecElemLayout
+--                         |      name SecElemBraces
+-- SecElemLayout         ::= ':'   FieldLayoutOrBraces
+--                         | arg*  SectionLayoutOrBraces
+-- FieldLayoutOrBraces   ::= '\n'? '{' content '}'
+--                         | line? ('\n' line)*
+-- SectionLayoutOrBraces ::= '\n'? '{' SecElems '\n'? '}'
+--                         | SecElems
+-- SecElemBraces         ::= ':' FieldInlineOrBraces
+--                         | arg* '\n'? '{' SecElems '\n'? '}'
+-- FieldInlineOrBraces   ::= '\n'? '{' content '}'
+--                         | content
+--
+-- Note how we have several productions with the sequence:
+--   '\n'? '{'
+-- That is, an optional newline (and indent) followed by a '{' token.
+-- In the SectionLayoutOrBraces case you can see that this makes it
+-- not fully left factored (because SecElems can start with a '\n').
+-- Fully left factoring here would be ugly, and though we could use a
+-- lookahead of two tokens to resolve the alternatives, we can't
+-- conveniently use Parsec's 'try' here to get a lookahead of only two.
+-- So instead we deal with this case in the lexer by making a line
+-- where the first non-space is '{' lex as just the '{' token, without
+-- the usual indent token. Then in the parser we can resolve everything
+-- with just one token of lookahead and so without using 'try'.
+
+
+-- Top level of a file using cabal syntax 
+--
+cabalStyleFile :: Parser [Field]
+cabalStyleFile = do es <- elements zeroIndentLevel
+                    eof
+                    return es
+
+-- Elements that live at the top level or inside a section, ie fields
+-- and sectionscontent
+--
+-- elements ::= element*
+elements :: IndentLevel -> Parser [Field]
+elements ilevel = many (element ilevel)
+
+-- An individual element, ie a field or a section. These can either use
+-- layout style or braces style. For layout style then it must start on
+-- a line on it's own (so that we know its indentation level).
+--
+-- element ::= '\n' name elementInLayout
+--           |      name ElemBraces
+element :: IndentLevel -> Parser Field
+element ilevel st
+  case getToken st of
+    TokIndent ilevel' | ilevel' >= ilevel ->
+      case getToken st' of
+        TokName ->
+          elementInLayoutContext (incIndentLevel ilevel') name st''
+        tok -> parseError "element" tok
+
+    TokName name -> elementInNonLayoutContext name st'
+    tok          -> parseError "element" tok
+
+      (do ilevel' <- indentOfAtLeast ilevel
+          name    <- tokName
+          elementInLayoutContext (incIndentLevel ilevel') name)
+  <|> (do name    <- tokName
+          elementInNonLayoutContext name)
+
+-- An element (field or section) that is valid in a layout context.
+-- In a layout context we can have fields and sections that themselves
+-- either use layout style or that use braces style.
+--
+-- elementInLayoutContext ::= ':'  fieldLayoutOrBraces
+--                          | arg* sectionLayoutOrBraces
+elementInLayoutContext :: IndentLevel -> Name -> Parser Field
+elementInLayoutContext ilevel name =
+      (do colon; fieldLayoutOrBraces ilevel name)
+  <|> (do args  <- many sectionArg
+          elems <- sectionLayoutOrBraces ilevel
+          return (Section name args elems))
+
+-- An element (field or section) that is valid in a non-layout context.
+-- In a non-layout context we can have only have fields and sections that
+-- themselves use braces style, or inline style fields.
+--
+-- elementInNonLayoutContext ::= ':' FieldInlineOrBraces
+--                             | arg* '\n'? '{' elements '\n'? '}'
+elementInNonLayoutContext :: Name -> Parser Field
+elementInNonLayoutContext name =
+      (do colon; fieldInlineOrBraces name)
+  <|> (do args <- many sectionArg
+          openBrace
+          elems <- elements zeroIndentLevel
+          optional tokIndent
+          closeBrace
+          return (Section name args elems))
+
+-- The body of a field, using either layout style or braces style.
+--
+-- fieldLayoutOrBraces   ::= '\n'? '{' content '}'
+--                         | line? ('\n' line)*
+fieldLayoutOrBraces :: IndentLevel -> Name -> Parser Field
+fieldLayoutOrBraces ilevel name =
+      (do openBrace
+          ls <- inLexerMode (LexerMode in_field_braces) (many fieldContent)
+          closeBrace
+          return (Field name ls))
+  <|> (inLexerMode (LexerMode in_field_layout)
+        (do l  <- option (FieldLine (Position 0 0) B.empty) fieldContent
+                  --FIXME ^^ having to add an extra empty here is silly!
+            ls <- many (do _ <- indentOfAtLeast ilevel; fieldContent)
+            return (Field name (l:ls))))
+
+-- The body of a section, using either layout style or braces style.
+--
+-- sectionLayoutOrBraces ::= '\n'? '{' elements \n? '}'
+--                         | elements
+sectionLayoutOrBraces :: IndentLevel -> Parser [Field]
+sectionLayoutOrBraces ilevel =
+      (do openBrace
+          elems <- elements zeroIndentLevel
+          optional tokIndent
+          closeBrace
+          return elems)
+  <|> (elements ilevel)
+
+-- The body of a field, using either inline style or braces.
+--
+-- fieldInlineOrBraces   ::= '\n'? '{' content '}'
+--                         | content
+fieldInlineOrBraces :: Name -> Parser Field
+fieldInlineOrBraces name =
+      (do openBrace
+          ls <- inLexerMode (LexerMode in_field_braces) (many fieldContent)
+          closeBrace
+          return (Field name ls))
+  <|> (do ls <- inLexerMode (LexerMode in_field_braces) (option [] (fmap (\l -> [l]) fieldContent))
+          return (Field name ls))
+
+
+readFields :: B.ByteString -> Either ParseError [Field]
+readFields s = parse cabalStyleFile "the input" lexSt
+  where
+    lexSt = mkLexState' (mkLexState s)
+
+parseTest' p fname s =
+    case parse p fname (lexSt s) of
+      Left err -> putStrLn (formatError s err)
+
+      Right x  -> print x
+  where
+    lexSt s = mkLexState' (mkLexState s)
+
+parseFile :: Show a => Parser a -> FilePath -> IO ()
+parseFile p f = B.readFile f >>= \s -> parseTest' p f s
+
+parseStr  :: Show a => Parser a -> String -> IO ()
+parseStr p s = parseTest' p "<input string>" (B.pack s)
+
+
+formatError :: B.ByteString -> ParseError -> String
+formatError input perr =
+    unlines
+      [ "Parse error "++ show (errorPos perr) ++ ":"
+      , errLine
+      , indicator ++ errmsg ]
+  where
+    pos       = errorPos perr
+    ls        = lines' (T.decodeUtf8With T.lenientDecode input)
+    errLine   = T.unpack (ls !! (sourceLine pos - 1))
+    indicator = replicate (sourceColumn pos) ' ' ++ "^"
+    errmsg    = showErrorMessages "or" "unknown parse error"
+                                  "expecting" "unexpected" "end of file"
+                                  (errorMessages perr)
+    
+
+lines' s1
+  | T.null s1 = []
+  | otherwise = case T.break (\c -> c == '\r' || c == '\n') s1 of
+                  (l, s2) | Just (c,s3) <- T.uncons s2
+                         -> case T.uncons s3 of
+                              Just ('\n', s4) | c == '\r' -> l : lines' s4
+                              _                           -> l : lines' s3
+                          | otherwise -> [l]
+
+eof :: Parser ()
+eof = notFollowedBy anyToken <?> "end of file"
+  where
+    notFollowedBy :: Parser LToken -> Parser ()
+    notFollowedBy p = try (    (do L _ t <- try p; unexpected (describeToken t))
+                           <|> return ())
+--showErrorMessages "or" "unknown parse error"
+--                            "expecting" "unexpected" "end of input"
+
+{-
+data EncodingError = ProbablyBinaryFile
+                   | ControlCharOrBinary
+                   | InvalidUTF8
+                   | InvalidUTF8ProbablyLatin1 Char
+                   | InvalidUTF8OverLong
+                   | Impossible
+                   | NormalChar
+
+checkEncodingError :: ByteString -> EncodingError
+checkEncodingError bs =
+  case BS.uncons bs of
+    Nothing      -> Impossible
+    Just (b,bs')
+      | b == 0     -> ProbablyBinaryFile
+      | b < 0x20 || b == 127   -> ControlCharOrBinary
+      | b <= 0x7f              -> NormalChar
+      | b <= 0xbf              -> InvalidUTF8 -- invalid utf8 (and probably not latin1)
+      | b <= 0xdf  -- two bytes-> 
+      | b <= 0xef  -- three bytes
+      | otherwise  -- four or more bytes (invalid utf8)
+
+  where
+    twoBytes c0 (c1:cs')
+      | c1 .&. 0xC0 == 0x80
+      = let d = ((c0 .&. 0x1F) `shiftL` 6)
+             .|. (c1 .&. 0x3F)
+         in if d >= 0x80
+               then  NormalChar
+               else  InvalidUTF8
+    twoBytes _ cs' = InvalidUTF8
+
+-}
+
+{-
+----------------------------------
+-- Grammar for pure braces style
+--
+SecElem ::= Field |  Section
+Field   ::= name ':' '{' content '}'
+Section ::= name arg* '{' SecElem* '}'
+
+-- and left factored:
+
+SecElem  ::= name SecElem'
+SecElem' ::= Field | Section
+Field    ::= ':' '{' content '}'
+Section  ::= arg* '{' SecElem* '}'
+
+----------------------------------
+-- Grammar for pure layout style
+--
+SecElems ::= (\n SecElem)*
+SecElem  ::= Field | Section
+Field    ::= name ':' line? ('\n' line)*
+Section  ::= name arg* SecElems
+
+-- and left factored:
+
+SecElems ::= SecElem*
+SecElem  ::= \n name SecElem'
+SecElem' ::= Field | Section
+Field    ::= ':' line? ('\n' line)*
+Section  ::= arg* SecElems
+-}
diff --git a/experiment/parse/Parser3.y b/experiment/parse/Parser3.y
new file mode 100644
index 0000000000000000000000000000000000000000..db28c2ead0c60a2c5a7c1eed43a01998146143e0
--- /dev/null
+++ b/experiment/parse/Parser3.y
@@ -0,0 +1,14 @@
+{
+{-# LANGUAGE MultiParamTypeClasses, BangPatterns #-}
+module Parser where
+
+import Lexer
+import LexerMonad (unLex, LexState(..), LexResult(..), Position(..))
+}
+
+%name parse test
+%tokentype { LToken }
+%error { parseError }
+%monad { Lex }
+%lexer { lexToken }{ L _ EOF }
+
diff --git a/experiment/parse/Perf.hs b/experiment/parse/Perf.hs
new file mode 100644
index 0000000000000000000000000000000000000000..eee2049311af43701ee9401919ad249a730354f5
--- /dev/null
+++ b/experiment/parse/Perf.hs
@@ -0,0 +1,57 @@
+module Main where
+
+import IndexUtils
+
+import qualified OldParse  (readFields, ParseResult(..))
+import Distribution.Simple.Utils (fromUTF8)
+
+import qualified Parser
+
+import System.Environment
+import Control.Exception (evaluate)
+import qualified Data.ByteString.Lazy.Char8 as LBS
+import qualified Data.ByteString.Char8 as BS
+
+main = do
+  [which, n, indexfile] <- getArgs
+  cabalFiles <- IndexUtils.readPackageIndexFile indexfile
+
+  case which of
+    "perf-baseline" -> print (length cabalFiles)
+
+    "perf-old" -> let parse  = OldParse.readFields . fromUTF8 . LBS.unpack
+                      parsed = [ pkg | OldParse.ParseOk _ pkg <- map parse cabalFiles ]
+                  in  print (length parsed)
+
+    "perf-new" -> let parse  = Parser.readFields . toStrict
+                      parsed = [ pkg | Right pkg <- map parse cabalFiles ]
+                   in  print (length parsed)
+             
+    "check-old" -> let parse  = OldParse.readFields . fromUTF8 . LBS.unpack
+                       parsed = [ (msg, f)
+                                | (OldParse.ParseFailed msg, f) <-
+                                  map (\f -> (parse f, f)) cabalFiles ]
+                   in  case parsed of
+                         []           -> print "all ok!"
+                         ((msg, f):_) -> do print msg
+                                            LBS.putStr f
+
+    "check-new" -> let parse  = Parser.readFields . toStrict
+                       parsed = [ (msg, f)
+                                | (Left msg, f) <-
+                                  map (\f -> (parse f, f)) cabalFiles ]
+                   in  case drop (read n) parsed of
+                         []           -> print "all ok!"
+                         ((msg, f):_) -> do print msg
+                                            LBS.putStr f
+
+    "extract-fail" -> let parse  = Parser.readFields . toStrict
+                          parsed = [ f
+                                   | (Left msg, f) <-
+                                     map (\f -> (parse f, f)) cabalFiles ]
+                      in  sequence_
+                            [ LBS.writeFile ("fail/" ++ show n ++ ".cabal") f
+                            | (f,n) <- zip parsed [0..] ]
+
+  where
+    toStrict = BS.concat . LBS.toChunks
diff --git a/experiment/parse/SVGFonts/0.2/SVGFonts.cabal b/experiment/parse/SVGFonts/0.2/SVGFonts.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..41cd7a75e337c27cdc5397f6ab6fd45ae63f4268
--- /dev/null
+++ b/experiment/parse/SVGFonts/0.2/SVGFonts.cabal
@@ -0,0 +1,27 @@
+Name:             SVGFonts
+Version:          0.2
+Description:      parse svg-font files and generate outlines of letters and sentences
+category:         graphics
+License:          GPL
+License-file:     LICENSE
+Author:           Tillmann Vogt
+Maintainer:       Tillmann.Vogt@rwth-aachen.de
+Build-Type:       Simple
+Cabal-Version:    >=1.2
+
+Library
+    hs-source-dirs: src
+    build-depends:
+        haskell98,
+        base,
+        OpenGL,
+        GLUT,
+        xml,
+        parsec
+    exposed-modules:
+        Graphics.SVGFonts.ReadFont
        Graphics.SVGFonts.KETTriangulation
+
+Executable Fonts
+    hs-source-dirs: src
+    Main-is:        Test/Fonts.hs
+    other-modules:  Test.PointOfView, Graphics.SVGFonts.ReadFont
diff --git a/experiment/parse/SearchExperiment.hs b/experiment/parse/SearchExperiment.hs
new file mode 100644
index 0000000000000000000000000000000000000000..40f568571635d68914cf1f59ccec8491ddeb7bac
--- /dev/null
+++ b/experiment/parse/SearchExperiment.hs
@@ -0,0 +1,58 @@
+module Main where
+
+import IndexUtils
+
+import Distribution.Package
+import Distribution.PackageDescription
+import Distribution.PackageDescription.Parse
+import Distribution.Simple.Utils (fromUTF8)
+
+import System.Environment
+import qualified Data.ByteString.Lazy.Char8 as LBS
+import qualified Data.ByteString.Char8 as BS
+import qualified Data.Map as Map
+import qualified Data.Set as Set
+import Data.List
+import Data.List.Split
+import Data.Char
+
+main = do
+  [indexfile] <- getArgs
+  cabalFiles <- IndexUtils.readPackageIndexFile indexfile
+
+  print (length cabalFiles)
+
+  let parse = parsePackageDescription . fromUTF8 . LBS.unpack
+      pkgs  = [ packageDescription pkg
+              | ParseOk _ pkg <- map parse cabalFiles ]
+      latestPkgs = Map.fromListWith
+                     (\a b -> if packageVersion a > packageVersion b
+                                then a else b)
+                     [ (packageName pkg, pkg) | pkg <- pkgs ]
+
+  print (Map.size latestPkgs)
+
+  let wordfreqs = Map.fromListWith (+)
+                  [ (w,1)
+                  | pkg <- Map.elems latestPkgs
+                  , w   <- extractWords pkg ]
+      mostfreq = take 100 $ sortBy (flip compare)
+                   [ (f,w) | (w,f) <- Map.toList wordfreqs, f > 1 ]
+      mostfreqSet = Set.fromList (map snd mostfreq)
+
+  putStr $ unlines
+    [ display pkg ++ ": " ++ intercalate ", " ws)
+    | pkg <- Map.elems latestPkgs
+    , let ws = filter (`Set.notMember` mostfreqSet) (extractWords pkg) ]
+
+--  putStr $ unlines
+--    [ show n ++ " " ++ show f ++ ": " ++ w
+--    | ((f,w), n) <- zip (Set.toList mostfreq) [0..] ]
+
+extractWords =
+    noDups . map (map toLower) . split strategy . description
+  where
+    strategy = dropFinalBlank . dropInitBlank . dropDelims . condense
+             $ oneOf " \n\t.,;:@|/\\&^%$!\"*()<>"
+
+noDups = map head . group . sort
diff --git a/experiment/parse/Tar.hs b/experiment/parse/Tar.hs
new file mode 100644
index 0000000000000000000000000000000000000000..cab590feedbe91190c78b5db7fde90b8fee3bea9
--- /dev/null
+++ b/experiment/parse/Tar.hs
@@ -0,0 +1,667 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Distribution.Client.Tar
+-- Copyright   :  (c) 2007 Bjorn Bringert,
+--                    2008 Andrea Vezzosi,
+--                    2008 Duncan Coutts
+-- License     :  BSD-like
+--
+-- Maintainer  :  duncan@haskell.org
+-- Stability   :  provisional
+-- Portability :  portable
+--
+-- TAR archive reading and writing
+--
+-----------------------------------------------------------------------------
+module Tar (
+  -- * Reading and writing the tar format
+  read,
+  write,
+
+  -- * Packing and unpacking files to\/from a tar archive
+  pack,
+
+  -- * Tar archive 'Entry'
+  Entry(..), fileName,
+  ExtendedHeader(..),
+  FileType(..),
+  UserId,
+  GroupId,
+  EpochTime,
+  DevMajor,
+  DevMinor,
+  FileSize,
+
+  -- ** Constructing entries
+  emptyEntry,
+  simpleFileEntry,
+  simpleDirectoryEntry,
+
+  -- ** 'TarPath's
+  TarPath,
+  toTarPath,
+  fromTarPath,
+
+  -- * Sequence of 'Entry' records with failures
+  Entries(..),
+  foldEntries,
+  unfoldEntries,
+  mapEntries,
+
+  -- * Sanity checking tar contents
+  checkEntryNames
+  ) where
+
+import Data.Char     (ord)
+import Data.Int      (Int64)
+import Data.List     (foldl')
+import Control.Monad (MonadPlus(mplus))
+import Numeric       (readOct, showOct)
+
+import qualified Data.ByteString.Lazy as BS
+import qualified Data.ByteString.Lazy.Char8 as BS.Char8
+import Data.ByteString.Lazy (ByteString)
+
+import System.FilePath
+         ( (</>) )
+import qualified System.FilePath as FilePath.Native
+         ( (</>), joinPath, splitDirectories, takeDirectory
+         , isAbsolute, isValid, makeRelative )
+import qualified System.FilePath.Posix as FilePath.Posix
+         ( joinPath, pathSeparator, splitPath, splitDirectories )
+import System.Directory
+         ( getDirectoryContents, doesDirectoryExist
+         , getModificationTime
+         , Permissions(..), getPermissions )
+import System.Posix.Types
+         ( FileMode )
+import System.Time
+         ( ClockTime(..) )
+import System.IO
+         ( IOMode(ReadMode), openBinaryFile, hFileSize )
+import System.IO.Unsafe (unsafeInterleaveIO)
+
+import Prelude hiding (read)
+
+
+--
+-- * Entry type
+--
+
+type UserId    = Int
+type GroupId   = Int
+type EpochTime = Int -- ^ The number of seconds since the UNIX epoch
+type DevMajor  = Int
+type DevMinor  = Int
+type FileSize  = Int64
+
+-- | TAR archive entry
+data Entry = Entry {
+
+    -- | Path of the file or directory. The path separator should be @/@ for
+    -- portable TAR archives.
+    filePath :: TarPath,
+
+    -- | UNIX file mode.
+    fileMode :: FileMode,
+
+    -- | Numeric owner user id. Should be set to @0@ if unknown.
+    ownerId :: UserId,
+
+    -- | Numeric owner group id. Should be set to @0@ if unknown.
+    groupId :: GroupId,
+
+    -- | File size in bytes. Should be 0 for entries other than normal files.
+    fileSize :: FileSize,
+
+    -- | Last modification time.
+    modTime :: EpochTime,
+
+    -- | Type of this entry.
+    fileType :: FileType,
+
+    -- | If the entry is a hard link or a symbolic link, this is the path of
+    -- the link target. For all other entry types this should be @\"\"@.
+    linkTarget :: FilePath,
+
+    -- | The remaining meta-data is in the V7, ustar/posix or gnu formats
+    -- For V7 there is no extended info at all and for posix/ustar the
+    -- information is the same though the kind affects the way the information
+    -- is encoded.
+    headerExt :: ExtendedHeader,
+
+    -- | Entry contents. For entries other than normal
+    -- files, this should be an empty string.
+    fileContent :: ByteString
+  }
+
+fileName :: Entry -> FilePath
+fileName = fromTarPath . filePath
+
+data ExtendedHeader
+   = V7
+   | USTAR {
+    -- | The owner user name. Should be set to @\"\"@ if unknown.
+    ownerName :: String,
+
+    -- | The owner group name. Should be set to @\"\"@ if unknown.
+    groupName :: String,
+
+    -- | For character and block device entries, this is the
+    -- major number of the device. For all other entry types, it
+    -- should be set to @0@.
+    deviceMajor :: DevMajor,
+
+    -- | For character and block device entries, this is the
+    -- minor number of the device. For all other entry types, it
+    -- should be set to @0@.
+    deviceMinor :: DevMinor
+   }
+   | GNU {
+    -- | The owner user name. Should be set to @\"\"@ if unknown.
+    ownerName :: String,
+
+    -- | The owner group name. Should be set to @\"\"@ if unknown.
+    groupName :: String,
+
+    -- | For character and block device entries, this is the
+    -- major number of the device. For all other entry types, it
+    -- should be set to @0@.
+    deviceMajor :: DevMajor,
+
+    -- | For character and block device entries, this is the
+    -- minor number of the device. For all other entry types, it
+    -- should be set to @0@.
+    deviceMinor :: DevMinor
+   }
+
+-- | TAR archive entry types.
+data FileType = NormalFile
+              | HardLink
+              | SymbolicLink
+              | CharacterDevice
+              | BlockDevice
+              | Directory
+              | FIFO
+              | ExtendedHeader
+              | GlobalHeader
+              | Custom Char   -- 'A' .. 'Z'
+              | Reserved Char -- other / reserved / unknown
+  deriving (Eq, Show)
+
+toFileTypeCode :: FileType -> Char
+toFileTypeCode NormalFile      = '0'
+toFileTypeCode HardLink        = '1'
+toFileTypeCode SymbolicLink    = '2'
+toFileTypeCode CharacterDevice = '3'
+toFileTypeCode BlockDevice     = '4'
+toFileTypeCode Directory       = '5'
+toFileTypeCode FIFO            = '6'
+toFileTypeCode ExtendedHeader  = 'x'
+toFileTypeCode GlobalHeader    = 'g'
+toFileTypeCode (Custom   c)    = c
+toFileTypeCode (Reserved c)    = c
+
+fromFileTypeCode :: Char -> FileType
+fromFileTypeCode '0'  = NormalFile
+fromFileTypeCode '\0' = NormalFile
+fromFileTypeCode '1'  = HardLink
+fromFileTypeCode '2'  = SymbolicLink
+fromFileTypeCode '3'  = CharacterDevice
+fromFileTypeCode '4'  = BlockDevice
+fromFileTypeCode '5'  = Directory
+fromFileTypeCode '6'  = FIFO
+fromFileTypeCode '7'  = NormalFile
+fromFileTypeCode 'x'  = ExtendedHeader
+fromFileTypeCode 'g'  = GlobalHeader
+fromFileTypeCode  c   | c >= 'A' && c <= 'Z'
+                      = Custom c
+fromFileTypeCode  c   = Reserved c
+
+emptyEntry :: FileType -> TarPath -> Entry
+emptyEntry ftype tarpath = Entry {
+    filePath = tarpath,
+    fileMode = case ftype of
+                 Directory -> 0o0755  -- rwxr-xr-x for directories
+                 _         -> 0o0644, -- rw-r--r-- for normal files
+    ownerId  = 0,
+    groupId  = 0,
+    fileSize = 0,
+    modTime  = 0,
+    fileType = ftype,
+    linkTarget = "",
+    headerExt  = USTAR {
+      ownerName = "",
+      groupName = "",
+      deviceMajor = 0,
+      deviceMinor = 0
+    },
+    fileContent = BS.empty
+  }
+
+simpleFileEntry :: TarPath -> ByteString -> Entry
+simpleFileEntry name content = (emptyEntry NormalFile name) {
+    fileSize = BS.length content,
+    fileContent = content
+  }
+
+simpleDirectoryEntry :: TarPath -> Entry
+simpleDirectoryEntry name = emptyEntry Directory name
+
+--
+-- * Tar paths
+--
+
+-- | The classic tar format allowed just 100 charcters for the file name. The
+-- USTAR format extended this with an extra 155 characters, however it uses a
+-- complex method of splitting the name between the two sections.
+--
+-- Instead of just putting any overflow into the extended area, it uses the
+-- extended area as a prefix. The agrevating insane bit however is that the
+-- prefix (if any) must only contain a directory prefix. That is the split
+-- between the two areas must be on a directory separator boundary. So there is
+-- no simple calculation to work out if a file name is too long. Instead we
+-- have to try to find a valid split that makes the name fit in the two areas.
+--
+-- The rationale presumably was to make it a bit more compatible with tar
+-- programs that only understand the classic format. A classic tar would be
+-- able to extract the file name and possibly some dir prefix, but not the
+-- full dir prefix. So the files would end up in the wrong place, but that's
+-- probably better than ending up with the wrong names too.
+--
+-- So it's understandable but rather annoying.
+--
+-- * Tar paths use posix format (ie @\'/\'@ directory separators), irrespective
+--   of the local path conventions.
+--
+-- * The directory separator between the prefix and name is /not/ stored.
+--
+data TarPath = TarPath FilePath -- path name, 100 characters max.
+                       FilePath -- path prefix, 155 characters max.
+
+-- | Convert a 'TarPath' to a native 'FilePath'.
+--
+-- The native 'FilePath' will use the native directory separator but it is not
+-- otherwise checked for validity or sanity. In particular:
+--
+-- * The tar path may be invalid as a native path, eg the filename @\"nul\"@ is
+--   not valid on Windows.
+-- * The tar path may be an absolute path or may contain @\"..\"@ components.
+--   For security reasons this should not usually be allowed, but it is your
+--   responsibility to check for these conditions.
+--
+fromTarPath :: TarPath -> FilePath
+fromTarPath (TarPath name prefix) =
+  FilePath.Native.joinPath $ FilePath.Posix.splitDirectories prefix
+                          ++ FilePath.Posix.splitDirectories name
+
+-- | Convert a native 'FilePath' to a 'TarPath'. The 'FileType' is needed
+-- because for directories a 'TarPath' uses a trailing @\/@.
+--
+-- The conversion may fail if the 'FilePath' is too long. See 'TarPath' for a
+-- description of the problem with splitting long 'FilePath's.
+--
+toTarPath :: FileType -> FilePath -> Either String TarPath
+toTarPath ftype = splitLongPath
+                . addTrailingSep ftype
+                . FilePath.Posix.joinPath
+                . FilePath.Native.splitDirectories
+  where
+    addTrailingSep Directory path = path ++ [FilePath.Posix.pathSeparator]
+    addTrailingSep _         path = path
+
+-- | Takes a sanitized path, split on directory separators and tries to pack it
+-- into the 155 + 100 tar file name format.
+--
+-- The stragey is this: take the name-directory components in reverse order
+-- and try to fit as many components into the 100 long name area as possible.
+-- If all the remaining components fit in the 155 name area then we win.
+--
+splitLongPath :: FilePath -> Either String TarPath
+splitLongPath path =
+  case packName nameMax (reverse (FilePath.Posix.splitPath path)) of
+    Left err                 -> Left err
+    Right (name, [])         -> Right (TarPath name "")
+    Right (name, first:rest) -> case packName prefixMax remainder of
+      Left err               -> Left err
+      Right (_     , (_:_))  -> Left "File name too long (cannot split)"
+      Right (prefix, [])     -> Right (TarPath name prefix)
+      where
+        -- drop the '/' between the name and prefix:
+        remainder = init first : rest
+
+  where
+    nameMax, prefixMax :: Int
+    nameMax   = 100
+    prefixMax = 155
+
+    packName _      []     = Left "File name empty"
+    packName maxLen (c:cs)
+      | n > maxLen         = Left "File name too long"
+      | otherwise          = Right (packName' maxLen n [c] cs)
+      where n = length c
+
+    packName' maxLen n ok (c:cs)
+      | n' <= maxLen             = packName' maxLen n' (c:ok) cs
+                                     where n' = n + length c
+    packName' _      _ ok    cs  = (FilePath.Posix.joinPath ok, cs)
+
+--
+-- * Entries type
+--
+
+-- | A tar archive is a sequence of entries.
+data Entries = Next Entry Entries
+             | Done
+             | Fail String
+
+unfoldEntries :: (a -> Either String (Maybe (Entry, a))) -> a -> Entries
+unfoldEntries f = unfold
+  where
+    unfold x = case f x of
+      Left err             -> Fail err
+      Right Nothing        -> Done
+      Right (Just (e, x')) -> Next e (unfold x')
+
+foldEntries :: (Entry -> a -> a) -> a -> (String -> a) -> Entries -> a
+foldEntries next done fail' = fold
+  where
+    fold (Next e es) = next e (fold es)
+    fold Done        = done
+    fold (Fail err)  = fail' err
+
+mapEntries :: (Entry -> Either String Entry) -> Entries -> Entries
+mapEntries f =
+  foldEntries (\entry rest -> either Fail (flip Next rest) (f entry)) Done Fail
+
+--
+-- * Checking
+--
+
+checkEntryNames :: Entries -> Entries
+checkEntryNames =
+  mapEntries (\entry -> maybe (Right entry) Left (checkEntryName entry))
+
+checkEntryName :: Entry -> Maybe String
+checkEntryName entry = case fileType entry of
+    HardLink     -> check (fileName entry) `mplus` check (linkTarget entry)
+    SymbolicLink -> check (fileName entry) `mplus` check (linkTarget entry)
+    _            -> check (fileName entry)
+
+  where
+    check name
+      | FilePath.Native.isAbsolute name
+      = Just $ "Absolute file name in tar archive: " ++ show name
+      | not (FilePath.Native.isValid name)
+      = Just $ "Invalid file name in tar archive: " ++ show name
+      | any (=="..") (FilePath.Native.splitDirectories name)
+      = Just $ "Invalid file name in tar archive: " ++ show name
+      | otherwise = Nothing
+
+--
+-- * Reading
+--
+
+read :: ByteString -> Entries
+read = unfoldEntries getEntry
+
+getEntry :: ByteString -> Either String (Maybe (Entry, ByteString))
+getEntry bs
+  | BS.length header < 512 = Left "Truncated TAR archive"
+  | endBlock = Right Nothing --FIXME: force last two blocks to close fds!
+  | not (correctChecksum header chksum)  = Left "TAR checksum error"
+  | magic /= "ustar\NUL00"
+ && magic /= "ustar  \NUL" = Left $ "TAR entry not ustar format: " ++ show magic
+  | otherwise = Right (Just (entry, bs'''))
+  where
+   (header,bs')  = BS.splitAt 512 bs
+
+   endBlock   = getByte 0 header == '\0'
+
+   name       = getString   0 100 header
+   mode       = getOct    100   8 header
+   uid        = getOct    108   8 header
+   gid        = getOct    116   8 header
+   size       = getOct    124  12 header
+   mtime      = getOct    136  12 header
+   chksum     = getOct    148   8 header
+   typecode   = getByte   156     header
+   linkname   = getString 157 100 header
+   magic      = getChars  257   8 header
+   uname      = getString 265  32 header
+   gname      = getString 297  32 header
+   devmajor   = getOct    329   8 header
+   devminor   = getOct    337   8 header
+   prefix     = getString 345 155 header
+--   trailing   = getBytes  500  12 header --TODO: check all \0's
+
+   padding    = (512 - size) `mod` 512
+   (cnt,bs'') = BS.splitAt size bs'
+   bs'''      = BS.drop padding bs''
+
+   entry      = Entry {
+     filePath    = TarPath name prefix,
+     fileMode    = mode,
+     ownerId     = uid,
+     groupId     = gid,
+     fileSize    = size,
+     modTime     = mtime,
+     fileType    = fromFileTypeCode typecode,
+     linkTarget  = linkname,
+     headerExt   = case magic of
+       "\0\0\0\0\0\0\0\0" -> V7
+       "ustar\NUL00" -> USTAR {
+         ownerName   = uname,
+         groupName   = gname,
+         deviceMajor = devmajor,
+         deviceMinor = devminor
+       }
+       "ustar  \NUL" -> GNU {
+         ownerName   = uname,
+         groupName   = gname,
+         deviceMajor = devmajor,
+         deviceMinor = devminor
+       }
+       _ -> V7, --FIXME: fail instead
+     fileContent = cnt
+   }
+
+correctChecksum :: ByteString -> Int -> Bool
+correctChecksum header checksum = checksum == checksum'
+  where
+    -- sum of all 512 bytes in the header block,
+    -- treating each byte as an 8-bit unsigned value
+    checksum' = BS.Char8.foldl' (\x y -> x + ord y) 0 header'
+    -- treating the 8 bytes of chksum as blank characters.
+    header'   = BS.concat [BS.take 148 header,
+                           BS.Char8.replicate 8 ' ',
+                           BS.drop 156 header]
+
+-- * TAR format primitive input
+
+getOct :: Integral a => Int64 -> Int64 -> ByteString -> a
+getOct off len = parseOct
+               . BS.Char8.unpack
+               . BS.Char8.takeWhile (\c -> c /= '\NUL' && c /= ' ')
+               . getBytes off len
+  where
+    parseOct "" = 0
+    parseOct s = case readOct s of
+                   [(x,[])] -> x
+                   _        -> error $ "Number format error: " ++ show s
+
+getBytes :: Int64 -> Int64 -> ByteString -> ByteString
+getBytes off len = BS.take len . BS.drop off
+
+getByte :: Int64 -> ByteString -> Char
+getByte off bs = BS.Char8.index bs off
+
+getChars :: Int64 -> Int64 -> ByteString -> String
+getChars off len = BS.Char8.unpack . getBytes off len
+
+getString :: Int64 -> Int64 -> ByteString -> String
+getString off len = BS.Char8.unpack . BS.Char8.takeWhile (/='\0') . getBytes off len
+
+--
+-- * Writing
+--
+
+-- | Creates an uncompressed archive
+write :: [Entry] -> ByteString
+write es = BS.concat $ map putEntry es ++ [BS.replicate (512*2) 0]
+
+putEntry :: Entry -> ByteString
+putEntry entry = BS.concat [ header, content, padding ]
+  where
+    header  = putHeader entry
+    content = fileContent entry
+    padding = BS.replicate paddingSize 0
+    paddingSize = fromIntegral $ negate (fileSize entry) `mod` 512
+
+putHeader :: Entry -> BS.ByteString
+putHeader entry =
+     BS.Char8.pack $ take 148 block
+  ++ putOct 7 checksum
+  ++ ' ' : drop 156 block
+  where
+    block    = putHeaderNoChkSum entry
+    checksum = foldl' (\x y -> x + ord y) 0 block
+
+putHeaderNoChkSum :: Entry -> String
+putHeaderNoChkSum entry = concat
+    [ putString  100 $ name
+    , putOct       8 $ fileMode entry
+    , putOct       8 $ ownerId entry
+    , putOct       8 $ groupId entry
+    , putOct      12 $ fileSize entry
+    , putOct      12 $ modTime entry
+    , fill         8 $ ' ' -- dummy checksum
+    , putChar8       $ toFileTypeCode (fileType entry)
+    , putString  100 $ linkTarget entry
+    ] ++
+  case headerExt entry of
+  V7    ->
+      fill 255 '\NUL'
+  ext@USTAR {}-> concat
+    [ putString    8 $ "ustar\NUL00"
+    , putString   32 $ ownerName ext
+    , putString   32 $ groupName ext
+    , putOct       8 $ deviceMajor ext
+    , putOct       8 $ deviceMinor ext
+    , putString  155 $ prefix
+    , fill        12 $ '\NUL'
+    ]
+  ext@GNU {} -> concat
+    [ putString    8 $ "ustar  \NUL"
+    , putString   32 $ ownerName ext
+    , putString   32 $ groupName ext
+    , putGnuDev    8 $ deviceMajor ext
+    , putGnuDev    8 $ deviceMinor ext
+    , putString  155 $ prefix
+    , fill        12 $ '\NUL'
+    ]
+  where
+    TarPath name prefix = filePath entry
+    putGnuDev w n = case fileType entry of
+      CharacterDevice -> putOct w n
+      BlockDevice     -> putOct w n
+      _               -> replicate w '\NUL'
+
+
+-- * TAR format primitive output
+
+type FieldWidth = Int
+
+putString :: FieldWidth -> String -> String
+putString n s = take n s ++ fill (n - length s) '\NUL'
+
+putOct :: (Show a, Integral a) => FieldWidth -> a -> String
+putOct n x =
+  let octStr = take (n-1) $ showOct x ""
+   in fill (n - length octStr - 1) '0'
+   ++ octStr
+   ++ putChar8 '\NUL'
+
+putChar8 :: Char -> String
+putChar8 c = [c]
+
+fill :: FieldWidth -> Char -> String
+fill n c = replicate n c
+
+
+--
+-- * Packing
+--
+
+-- | Creates a tar archive from a directory of files, the paths in the archive
+-- will be relative to the given base directory.
+--
+pack :: FilePath        -- ^ Base directory
+     -> FilePath        -- ^ Directory or file to package, relative to the base dir
+     -> IO [Entry]
+pack baseDir sourceDir =
+      mapM (unsafeInterleaveIO . uncurry (createFileEntry baseDir))
+  =<< recurseDirectories [baseDir </> sourceDir]
+
+recurseDirectories :: [FilePath] -> IO [(FileType, FilePath)]
+recurseDirectories []         = return []
+recurseDirectories (dir:dirs) = unsafeInterleaveIO $ do
+  (files, dirs') <- collect [] [] =<< getDirectoryContents dir
+
+  files' <- recurseDirectories (dirs' ++ dirs)
+  return ((Directory, dir) : map ((,) NormalFile) files ++ files')
+
+  where
+    collect files dirs' []              = return (reverse files, reverse dirs')
+    collect files dirs' (entry:entries) | ignore entry
+                                        = collect files dirs' entries
+    collect files dirs' (entry:entries) = do
+      let dirEntry = dir </> entry
+      isDirectory <- doesDirectoryExist dirEntry
+      if isDirectory
+        then collect files (dirEntry:dirs') entries
+        else collect (dirEntry:files) dirs' entries
+
+    ignore ['.']      = True
+    ignore ['.', '.'] = True
+    ignore _          = False
+
+createFileEntry :: FilePath -- ^ path to find the file
+                -> FileType
+                -> FilePath -- ^ path to use for the tar Entry
+                -> IO Entry
+createFileEntry baseDir ftype absPath = do
+  let relPath = FilePath.Native.makeRelative baseDir absPath
+  tarpath <- either Prelude.fail return (toTarPath ftype relPath)
+  mtime   <- getModTime absPath
+
+  case ftype of
+    NormalFile -> do
+      file    <- openBinaryFile absPath ReadMode
+      mode    <- getFileMode absPath
+      size    <- hFileSize file
+      content <- BS.hGetContents file
+      return (emptyEntry NormalFile tarpath) {
+        fileMode    = mode,
+        modTime     = mtime,
+        fileSize    = fromIntegral size,
+        fileContent = content
+      }
+    _ ->
+      return (emptyEntry Directory tarpath) {
+        modTime     = mtime
+      }
+
+-- | We can't be precise because of portability, so we default to rw-r--r-- for
+-- normal filesand rwxr-xr-x for executables.
+getFileMode :: FilePath -> IO FileMode
+getFileMode path = do
+  perms <- getPermissions path
+  if executable perms
+    then return 0o0755
+    else return 0o0644
+
+getModTime :: FilePath -> IO EpochTime
+getModTime path =
+    do (TOD s _) <- getModificationTime path
+       return (fromIntegral s)
diff --git a/experiment/parse/Test.hs b/experiment/parse/Test.hs
new file mode 100644
index 0000000000000000000000000000000000000000..e7d4d3e5efd4ab8479044f973a714eedcc79821c
--- /dev/null
+++ b/experiment/parse/Test.hs
@@ -0,0 +1,139 @@
+module Main where
+
+import IndexUtils
+
+import qualified OldParse
+import Distribution.Simple.Utils (fromUTF8)
+
+import qualified Parser
+import qualified LexerMonad as Parser
+
+import System.Environment
+import Control.Exception (evaluate)
+import qualified Data.ByteString.Lazy.Char8 as LBS
+import qualified Data.ByteString.Char8 as BS
+import Data.List
+import Data.Char
+import Distribution.Simple.Utils (fromUTF8)
+
+{-
+old <- parseOldFile "diff/2.cabal" 
+new <- parseNewFile "diff/2.cabal" 
+let old'  = normaliseOldFields old
+let new'  = normaliseNewFields new
+let new'' = toOldFields new'
+-}
+
+parseOldFile :: FilePath -> IO [OldParse.Field]
+parseOldFile file = do
+    OldParse.ParseOk _ fs <- fmap parse $ readFile file
+    return fs
+  where
+    parse  = OldParse.readFields . fromUTF8
+
+parseNewFile :: FilePath -> IO [Parser.Field]
+parseNewFile file = do
+    Right fs <- fmap parse $ BS.readFile file
+    return fs
+  where
+    parse  = Parser.readFields
+
+toOldFields :: [Parser.Field] -> [OldParse.Field]
+toOldFields [] = []
+toOldFields (Parser.Field n ls            : rest) = OldParse.F (lineOfName n) (toOldName n) (toOldFieldContent ls)
+                                                  : toOldFields rest
+toOldFields (Parser.Section n@(Parser.Name _ sif)   as fs  :
+             Parser.Section (Parser.Name _ selse) _  fs' : rest)
+             | isIf sif, isElse selse             = OldParse.IfBlock (lineOfName n) (toOldArgs as) (toOldFields fs) (toOldFields fs')
+                                                  : toOldFields rest
+toOldFields (Parser.Section n@(Parser.Name _ sif) as fs  : rest)
+            | isIf sif                            = OldParse.IfBlock (lineOfName n) (toOldArgs as) (toOldFields fs) []
+                                                  : toOldFields rest
+toOldFields (Parser.Section n      as fs  : rest) = OldParse.Section (lineOfName n) (toOldName n) (toOldArgs as) (toOldFields fs)
+                                                  : toOldFields rest
+
+isIf   s = BS.map toLower s == BS.pack "if"
+isElse s = BS.map toLower s == BS.pack "else"
+
+lineOfName (Parser.Name (Parser.Position l _) _) = l
+toOldName (Parser.Name _ n) = map toLower (BS.unpack n)
+toOldArgs            = concatMap toOldArg
+  where
+    toOldArg (Parser.SecArgName  _ a) = BS.unpack a
+    toOldArg (Parser.SecArgStr   _ a) = a
+    toOldArg (Parser.SecArgNum   _ a) = BS.unpack a
+    toOldArg (Parser.SecArgOther _ a) = BS.unpack a
+
+toOldFieldContent ls = intercalate "\n"
+                     . normaliseFieldContent
+                     $ [ BS.unpack l | Parser.FieldLine _ l <- ls ]
+
+normaliseFieldContent =
+    dropLeadingEmpty
+  . dotToBlank
+  . trimLines
+  . mungeBraces
+  . map fromUTF8
+  where
+    trimLines = map trim
+    dropLeadingEmpty ("":ls) = ls
+    dropLeadingEmpty     ls  = ls
+    dotToBlank (l:ls) = l : map (\l -> if l == "." then "" else l)
+                                (filter (/="") ls)
+    dotToBlank []     = []
+
+    -- The old parser did funny things with {}'s inside fields
+    mungeBraces = concatMap (splitOn (\c -> c == '{' || c == '}'))
+
+trim :: String -> String
+trim = reverse . dropWhile (\c -> c == ' ' || c == '\t')
+     . reverse . dropWhile (\c -> c == ' ' || c == '\t')
+
+splitOn _ "" = [""]
+splitOn p  s = unfoldr step s
+  where
+    step s | null s    = Nothing
+           | otherwise = Just (l,drop 1 s') where (l,s') = break p s
+
+normaliseOldFields :: [OldParse.Field] -> [OldParse.Field]
+normaliseOldFields = filter (not . isCommentSection)
+                   . map normaliseOldField
+  where
+    isCommentSection (OldParse.Section _ "--" _ []) = True
+    isCommentSection _                              = False
+
+normaliseOldField :: OldParse.Field -> OldParse.Field
+normaliseOldField (OldParse.F       p n   v)  = OldParse.F       p n   v
+normaliseOldField (OldParse.Section p n a fs) = OldParse.Section p n (normaliseOldSectionArgs a) (normaliseOldFields fs)
+normaliseOldField (OldParse.IfBlock p c t e)  = OldParse.IfBlock p   (normaliseOldSectionArgs c) (normaliseOldFields t) (normaliseOldFields e)
+
+normaliseOldSectionArgs n@(_:_:_) | head n == '"' && last n == '"' = init (tail n)
+normaliseOldSectionArgs n = filter (/=' ') n
+
+main = do
+  [indexfile] <- getArgs
+  cabalFiles <- IndexUtils.readPackageIndexFile indexfile
+  sequence_
+    [ do putStrLn $ "writing " ++ outfile
+         LBS.writeFile outfile cabalFile
+         writeFile (outfile ++ ".old") (show old)
+         writeFile (outfile ++ ".new") (show new)
+    | ((cabalFile, old, new), n) <- zip (diffFiles cabalFiles) [0..]
+    , let outfile = "diff/" ++ show n ++ ".cabal" ]
+
+
+diffFiles cabalFiles =
+    [ (cabalFile, old', new')
+    | let oldParse = OldParse.readFields . fromUTF8 . LBS.unpack
+          newParse = Parser.readFields . toStrict
+    , (cabalFile, OldParse.ParseOk _ old, Right new) <- map (\f -> (f, oldParse f, newParse f)) cabalFiles
+    , let old'  = normaliseOldFields old
+          new'  = toOldFields new
+    , old' /= new'
+    ]
+  where
+    toStrict = BS.concat . LBS.toChunks
+
+diffFields as bs =
+  [ (a,b) | (a,b) <- zip as bs, a/=b ]
+
diff --git a/experiment/parse/diff/0.cabal b/experiment/parse/diff/0.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..8f9c4ec1bb2c35cb8275e5e2b82894b496ddc63d
--- /dev/null
+++ b/experiment/parse/diff/0.cabal
@@ -0,0 +1,46 @@
+name:          graphs
+category:      Data Structures
+version:       0.1
+license:       BSD3
+cabal-version: >= 1.6
+license-file:  LICENSE
+author:        Edward A. Kmett
+maintainer:    Edward A. Kmett <ekmett@gmail.com>
+stability:     experimental
+homepage:      http://github.com/ekmett/graphs
+copyright:     Copyright (C) 2011 Edward A. Kmett
+synopsis:      A simple monadic graph library
+description:   A simple monadic graph library
+build-type:    Simple
+
+source-repository head
+  type: git
+  location: git://github.com/ekmett/graphs.git
+
+library
+  build-depends: 
+    base >= 4 && < 4.4,
+    array >= 0.3 && < 0.5,
+    data-default >= 0.2 && < 0.3,
+    transformers >= 0.2.2 && < 0.3,
+    containers >= 0.3 && < 0.5,
+    void >= 0.3 && < 0.4
+
+  exposed-modules:
+    Data.Graph.AdjacencyList
+    Data.Graph.AdjacencyMatrix
+    Data.Graph.Algorithm.DepthFirstSearch
+    Data.Graph.Algorithm.BreadthFirstSearch
+    Data.Graph.Class
+    Data.Graph.Class.AdjacencyList
+    Data.Graph.Class.AdjacencyMatrix
+    Data.Graph.Class.EdgeEnumerable
+    Data.Graph.Class.Bidirectional
+    Data.Graph.Class.VertexEnumerable
+    Data.Graph.Dual
+    Data.Graph.Empty
+    Data.Graph.PropertyMap
+  other-modules
+    Data.Graph.Internal.Color
+
+  ghc-options: -Wall 
diff --git a/experiment/parse/diff/0.cabal.new b/experiment/parse/diff/0.cabal.new
new file mode 100644
index 0000000000000000000000000000000000000000..c6f5ab2cefac62dce20a46e6d4ccc7e6bc95a452
--- /dev/null
+++ b/experiment/parse/diff/0.cabal.new
@@ -0,0 +1 @@
+[F 1 "name" "graphs",F 2 "category" "Data Structures",F 3 "version" "0.1",F 4 "license" "BSD3",F 5 "cabal-version" ">= 1.6",F 6 "license-file" "LICENSE",F 7 "author" "Edward A. Kmett",F 8 "maintainer" "Edward A. Kmett <ekmett@gmail.com>",F 9 "stability" "experimental",F 10 "homepage" "http://github.com/ekmett/graphs",F 11 "copyright" "Copyright (C) 2011 Edward A. Kmett",F 12 "synopsis" "A simple monadic graph library",F 13 "description" "A simple monadic graph library",F 14 "build-type" "Simple",Section 16 "source-repository" "head" [F 17 "type" "git",F 18 "location" "git://github.com/ekmett/graphs.git"],Section 20 "library" "" [F 21 "build-depends" "base >= 4 && < 4.4,\narray >= 0.3 && < 0.5,\ndata-default >= 0.2 && < 0.3,\ntransformers >= 0.2.2 && < 0.3,\ncontainers >= 0.3 && < 0.5,\nvoid >= 0.3 && < 0.4",F 29 "exposed-modules" "Data.Graph.AdjacencyList\nData.Graph.AdjacencyMatrix\nData.Graph.Algorithm.DepthFirstSearch\nData.Graph.Algorithm.BreadthFirstSearch\nData.Graph.Class\nData.Graph.Class.AdjacencyList\nData.Graph.Class.AdjacencyMatrix\nData.Graph.Class.EdgeEnumerable\nData.Graph.Class.Bidirectional\nData.Graph.Class.VertexEnumerable\nData.Graph.Dual\nData.Graph.Empty\nData.Graph.PropertyMap",Section 43 "other-modules" "" [Section 44 "data.graph.internal.color" "" []],F 46 "ghc-options" "-Wall"]]
\ No newline at end of file
diff --git a/experiment/parse/diff/0.cabal.old b/experiment/parse/diff/0.cabal.old
new file mode 100644
index 0000000000000000000000000000000000000000..7813edb66d4160eb286775f2ec6b8506edfec62a
--- /dev/null
+++ b/experiment/parse/diff/0.cabal.old
@@ -0,0 +1 @@
+[F 1 "name" "graphs",F 2 "category" "Data Structures",F 3 "version" "0.1",F 4 "license" "BSD3",F 5 "cabal-version" ">= 1.6",F 6 "license-file" "LICENSE",F 7 "author" "Edward A. Kmett",F 8 "maintainer" "Edward A. Kmett <ekmett@gmail.com>",F 9 "stability" "experimental",F 10 "homepage" "http://github.com/ekmett/graphs",F 11 "copyright" "Copyright (C) 2011 Edward A. Kmett",F 12 "synopsis" "A simple monadic graph library",F 13 "description" "A simple monadic graph library",F 14 "build-type" "Simple",Section 16 "source-repository" "head" [F 17 "type" "git",F 18 "location" "git://github.com/ekmett/graphs.git"],Section 20 "library" "" [F 21 "build-depends" "base >= 4 && < 4.4,\narray >= 0.3 && < 0.5,\ndata-default >= 0.2 && < 0.3,\ntransformers >= 0.2.2 && < 0.3,\ncontainers >= 0.3 && < 0.5,\nvoid >= 0.3 && < 0.4",F 29 "exposed-modules" "Data.Graph.AdjacencyList\nData.Graph.AdjacencyMatrix\nData.Graph.Algorithm.DepthFirstSearch\nData.Graph.Algorithm.BreadthFirstSearch\nData.Graph.Class\nData.Graph.Class.AdjacencyList\nData.Graph.Class.AdjacencyMatrix\nData.Graph.Class.EdgeEnumerable\nData.Graph.Class.Bidirectional\nData.Graph.Class.VertexEnumerable\nData.Graph.Dual\nData.Graph.Empty\nData.Graph.PropertyMap",Section 43 "other-modules" "" [Section 44 "data" ".Graph.Internal.Color" []],F 46 "ghc-options" "-Wall"]]
\ No newline at end of file
diff --git a/experiment/parse/diff/1.cabal b/experiment/parse/diff/1.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..ab06306042482443396eb52d367332b8dfe47c1b
--- /dev/null
+++ b/experiment/parse/diff/1.cabal
@@ -0,0 +1,45 @@
+name:          graphs
+category:      Data Structures
+version:       0.2
+license:       BSD3
+cabal-version: >= 1.6
+license-file:  LICENSE
+author:        Edward A. Kmett
+maintainer:    Edward A. Kmett <ekmett@gmail.com>
+stability:     experimental
+homepage:      http://github.com/ekmett/graphs
+copyright:     Copyright (C) 2011 Edward A. Kmett
+synopsis:      A simple monadic graph library
+description:   A simple monadic graph library
+build-type:    Simple
+
+source-repository head
+  type: git
+  location: git://github.com/ekmett/graphs.git
+
+library
+  build-depends: 
+    base >= 4 && < 4.4,
+    array >= 0.3 && < 0.5,
+    data-default >= 0.2 && < 0.3,
+    transformers >= 0.2.2 && < 0.3,
+    containers >= 0.3 && < 0.5,
+    void >= 0.3 && < 0.4
+
+  exposed-modules:
+    Data.Graph.AdjacencyList
+    Data.Graph.AdjacencyMatrix
+    Data.Graph.Algorithm.DepthFirstSearch
+    Data.Graph.Algorithm.BreadthFirstSearch
+    Data.Graph.Class
+    Data.Graph.Class.AdjacencyList
+    Data.Graph.Class.AdjacencyMatrix
+    Data.Graph.Class.EdgeEnumerable
+    Data.Graph.Class.Bidirectional
+    Data.Graph.Class.VertexEnumerable
+    Data.Graph.Dual
+    Data.Graph.PropertyMap
+  other-modules
+    Data.Graph.Internal.Color
+
+  ghc-options: -Wall 
diff --git a/experiment/parse/diff/1.cabal.new b/experiment/parse/diff/1.cabal.new
new file mode 100644
index 0000000000000000000000000000000000000000..54a5199419c07d75fdb70911e79e31ee4f9e7cd3
--- /dev/null
+++ b/experiment/parse/diff/1.cabal.new
@@ -0,0 +1 @@
+[F 1 "name" "graphs",F 2 "category" "Data Structures",F 3 "version" "0.2",F 4 "license" "BSD3",F 5 "cabal-version" ">= 1.6",F 6 "license-file" "LICENSE",F 7 "author" "Edward A. Kmett",F 8 "maintainer" "Edward A. Kmett <ekmett@gmail.com>",F 9 "stability" "experimental",F 10 "homepage" "http://github.com/ekmett/graphs",F 11 "copyright" "Copyright (C) 2011 Edward A. Kmett",F 12 "synopsis" "A simple monadic graph library",F 13 "description" "A simple monadic graph library",F 14 "build-type" "Simple",Section 16 "source-repository" "head" [F 17 "type" "git",F 18 "location" "git://github.com/ekmett/graphs.git"],Section 20 "library" "" [F 21 "build-depends" "base >= 4 && < 4.4,\narray >= 0.3 && < 0.5,\ndata-default >= 0.2 && < 0.3,\ntransformers >= 0.2.2 && < 0.3,\ncontainers >= 0.3 && < 0.5,\nvoid >= 0.3 && < 0.4",F 29 "exposed-modules" "Data.Graph.AdjacencyList\nData.Graph.AdjacencyMatrix\nData.Graph.Algorithm.DepthFirstSearch\nData.Graph.Algorithm.BreadthFirstSearch\nData.Graph.Class\nData.Graph.Class.AdjacencyList\nData.Graph.Class.AdjacencyMatrix\nData.Graph.Class.EdgeEnumerable\nData.Graph.Class.Bidirectional\nData.Graph.Class.VertexEnumerable\nData.Graph.Dual\nData.Graph.PropertyMap",Section 42 "other-modules" "" [Section 43 "data.graph.internal.color" "" []],F 45 "ghc-options" "-Wall"]]
\ No newline at end of file
diff --git a/experiment/parse/diff/1.cabal.old b/experiment/parse/diff/1.cabal.old
new file mode 100644
index 0000000000000000000000000000000000000000..ff9ed6b79e520d7cdd91b2025f81079ac94bc61a
--- /dev/null
+++ b/experiment/parse/diff/1.cabal.old
@@ -0,0 +1 @@
+[F 1 "name" "graphs",F 2 "category" "Data Structures",F 3 "version" "0.2",F 4 "license" "BSD3",F 5 "cabal-version" ">= 1.6",F 6 "license-file" "LICENSE",F 7 "author" "Edward A. Kmett",F 8 "maintainer" "Edward A. Kmett <ekmett@gmail.com>",F 9 "stability" "experimental",F 10 "homepage" "http://github.com/ekmett/graphs",F 11 "copyright" "Copyright (C) 2011 Edward A. Kmett",F 12 "synopsis" "A simple monadic graph library",F 13 "description" "A simple monadic graph library",F 14 "build-type" "Simple",Section 16 "source-repository" "head" [F 17 "type" "git",F 18 "location" "git://github.com/ekmett/graphs.git"],Section 20 "library" "" [F 21 "build-depends" "base >= 4 && < 4.4,\narray >= 0.3 && < 0.5,\ndata-default >= 0.2 && < 0.3,\ntransformers >= 0.2.2 && < 0.3,\ncontainers >= 0.3 && < 0.5,\nvoid >= 0.3 && < 0.4",F 29 "exposed-modules" "Data.Graph.AdjacencyList\nData.Graph.AdjacencyMatrix\nData.Graph.Algorithm.DepthFirstSearch\nData.Graph.Algorithm.BreadthFirstSearch\nData.Graph.Class\nData.Graph.Class.AdjacencyList\nData.Graph.Class.AdjacencyMatrix\nData.Graph.Class.EdgeEnumerable\nData.Graph.Class.Bidirectional\nData.Graph.Class.VertexEnumerable\nData.Graph.Dual\nData.Graph.PropertyMap",Section 42 "other-modules" "" [Section 43 "data" ".Graph.Internal.Color" []],F 45 "ghc-options" "-Wall"]]
\ No newline at end of file
diff --git a/experiment/parse/fail/0.cabal b/experiment/parse/fail/0.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..d05b82ac30d2210a083a9f78c4feb8270ba2eb27
--- /dev/null
+++ b/experiment/parse/fail/0.cabal
@@ -0,0 +1,66 @@
+Name:                ixset
+Version:             1.0.4
+Synopsis:            Efficient relational queries on Haskell sets.
+Description:
+    Create and query sets that are indexed by multiple indices.
+License:             BSD3
+License-file:        COPYING
+Author:              Happstack team, HAppS LLC
+Maintainer:          Happstack team <happs@googlegroups.com>
+homepage:            http://happstack.com
+Category:            Data Structures
+Build-Type:          Simple
+Cabal-Version:       >= 1.8
+
+source-repository head
+    type:     darcs
+    subdir:   ixset
+    location: http://patch-tag.com/r/mae/happstack
+
+flag base4
+
+Library
+--  Default-Language:    Haskell2010
+  if flag(base4)
+    Build-Depends:     base >=4 && < 5, syb
+  else
+    Build-Depends:     base < 4
+
+  if impl(ghc >= 6.12.1)
+    Build-Depends:    syb-with-class >= 0.6.1
+  else
+    Build-Depends:    syb-with-class < 0.6.1
+
+
+  Build-Depends:       containers,
+                       safecopy,
+                       template-haskell
+
+  hs-source-dirs:      src
+  Exposed-modules:
+                       Data.IxSet
+                       Data.IxSet.Ix
+
+  if impl(ghc >= 6.12)
+     ghc-options:      -Wall -fno-warn-unused-do-bind
+  else
+     ghc-options:      -Wall
+  GHC-Prof-Options:    -auto-all
+{-
+
+Disable for now because it causes problems with older versions of Cabal.
+
+Test-Suite test-ixset
+    Default-Language:    Haskell2010
+    type:    detailed-0.9
+    test-module: Test
+    other-modules: Data.IxSet.Tests
+    hs-source-dirs:      tests
+    build-depends:     base,
+                       Cabal >= 1.10,
+                       containers,
+                       HUnit,
+                       ixset,
+                       QuickCheck,
+                       random
+-}
\ No newline at end of file
diff --git a/experiment/parse/fail/1.cabal b/experiment/parse/fail/1.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..e8a3229e8c53f97baa7e15b17520dd635bf19d72
--- /dev/null
+++ b/experiment/parse/fail/1.cabal
@@ -0,0 +1,93 @@
+Name: DSTM
+Version: 0.1.2
+Copyright: (c) 2010, Frank Kupke
+License: LGPL
+License-File: LICENSE
+Author: Frank Kupke
+Maintainer: frk@informatik.uni-kiel.de
+Cabal-Version: >= 1.2.3
+Stability: provisional
+Synopsis: A framework for using STM within distributed systems
+Description:
+{
+The DSTM package consists of the DSTM library, a name server application, and
+three sample distributed programs using the library. DSTM is a framework
+enabling the use of the STM interface, known from concurrent programming, to be
+used for distributed Haskell applications as well. Provided are a simple Dining
+Philosophers, a Chat, and a soft real-time Bomberman game application.
+.
+Distributed communication is transparent to the application programmer. The
+application designer uses a very simple nameserver mechanism to set up the 
+system. The DSTM library includes the management of unavailable process nodes
+and provides the application with abstract error information thus facilitating 
+the implementation of robust distributed application programs.
+.
+For usage please look into the included file: DSTMManual.pdf, also available at
+http:\/\/www.informatik.uni-kiel.de\/prog\/mitarbeiter\/frank-kupke\/.
+.
+Changes from last version:
+.
+* documentation available online
+.
+* fixed typos in Chat example
+.
+* set debug flags to no debug output
+}
+Category: Distributed Computing
+Build-Type: Simple
+Tested-With: GHC ==6.10
+
+Data-Files: field.txt, input1.txt, input2.txt, input3.txt
+Data-Dir: Bomberman
+Extra-source-files: README LICENSE DSTMManual.pdf
+
+Library
+  Build-Depends: base >=4 && <5, unix, process, network, haskell98, containers
+
+  GHC-Options: -Wall
+
+  Exposed-Modules:
+        Control.Distributed.STM.DSTM
+
+  Other-Modules:
+        Control.Distributed.STM.DebugBase,
+        Control.Distributed.STM.DebugDSTM,
+        Control.Distributed.STM.Dist
+        Control.Distributed.STM.EnvAddr,
+        Control.Distributed.STM.NameService,
+        Control.Distributed.STM.RetryVar,
+        Control.Distributed.STM.TVar,
+        Control.Distributed.STM.STM,
+        Control.Distributed.STM.Utils,
+        Paths_DSTM
+
+  Extensions: DeriveDataTypeable,
+              ScopedTypeVariables
+
+Executable NameServer
+  Main-Is:        NameServer.hs
+  Other modules:  DSTM, NameService
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Nameserver, .
+
+Executable Phil
+  Main-Is:        Phil.hs
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Phil, .
+
+Executable ChatClient
+  Main-Is:        ChatClient.hs
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Chat, .
+  Other-Modules:  ChatData
+
+Executable ChatServer
+  Main-Is:        ChatServer.hs
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Chat, .
+  Other-Modules:  ChatData
+
+Executable Bomberman
+  Main-Is:        Bomberman.hs
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Bomberman, .
diff --git a/experiment/parse/fail/10.cabal b/experiment/parse/fail/10.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..62e8b3f6b16a958dbb94fc3e98df57dc07cafa54
--- /dev/null
+++ b/experiment/parse/fail/10.cabal
@@ -0,0 +1,40 @@
+name:         oeis
+version:      0.3.0
+stability:    experimental
+category:     Math
+synopsis:     Interface to the Online Encyclopedia of Integer Sequences
+description:  Interface to the Online Encyclopedia of Integer Sequences. See <http://oeis.org/>.
+author:       Brent Yorgey
+maintainer:   Brian Lewis <brian@lorf.org>
+license:      BSD3
+license-file: LICENSE
+
+cabal-version: >= 1.6
+build-type:    Custom
+
+data-files:
+  README
+  example/Catalan.hs
+
+extra-source-files:
+  src/test.hs
+
+library
+  hs-source-dirs:
+    src
+
+  exposed-modules:
+    Math.OEIS
+
+  build-depends:
+    base    == 3.* || == 4.*,
+    network == 2.*,
+    HTTP    >= 4000.0.2 || == 4000.1.*
+
+  ghc-options: -Wall
+  if impl(ghc >= 6.8)
+    ghc-options: -fwarn-tabs
+
+source-repository head
+  type:     git
+  location: git://github.com/bsl/oeis.git
diff --git a/experiment/parse/fail/11.cabal b/experiment/parse/fail/11.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..6802115b3a4ab71077db0eeec2ab7e27ad7dc35a
--- /dev/null
+++ b/experiment/parse/fail/11.cabal
@@ -0,0 +1,44 @@
+name: control-monad-exception-mtl
+version: 0.10.3
+Cabal-Version:  >= 1.10
+build-type: Simple
+license: PublicDomain
+author: Pepe Iborra
+maintainer: pepeiborra@gmail.com
+homepage: http://pepeiborra.github.com/control-monad-exception
+synopsis: MTL instances for the EMT exceptions monad transformer
+category: Control, Monads, Failure
+stability: experimental
+tested-with: GHC == 6.12.1
+bug-reports: http://github.com/pepeiborra/control-monad-exception/issues
+description: 
+  MTL classes instances for the EMT exceptions monad transformer
+  .
+
+Library
+  buildable: True 
+  default-language: Haskell98
+  build-depends: base > 4 && < 5
+               , control-monad-exception >= 0.10.3
+               , mtl
+
+
+ default- extensions:  
+               ScopedTypeVariables, 
+               MultiParamTypeClasses,
+               FlexibleContexts,
+               FlexibleInstances,
+               UndecidableInstances
+
+  exposed-modules:
+     Control.Monad.Exception.MTL
+
+  hs-source-dirs: extensions
+
+  ghc-options: -Wall -fno-warn-name-shadowing -fno-warn-orphans
+
+
+
+source-repository head
+  type:     git
+  location: git://github.com/pepeiborra/control-monad-exception.git
diff --git a/experiment/parse/fail/2.cabal b/experiment/parse/fail/2.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..59f45d4098eadc7d2c218ac092ca604d1db5beb1
--- /dev/null
+++ b/experiment/parse/fail/2.cabal
@@ -0,0 +1,84 @@
+Name: DSTM
+Version: 0.1.1
+Copyright: (c) 2010, Frank Kupke
+License: LGPL
+License-File: LICENSE
+Author: Frank Kupke
+Maintainer: frk@informatik.uni-kiel.de
+Cabal-Version: >= 1.2.3
+Stability: provisional
+Synopsis: A framework for using STM within distributed systems
+Description:
+{-
+The DSTM package consists of the DSTM library, a name server application, and
+three sample distributed programs using the library. DSTM is a framework
+enabling the use of the STM interface, known from concurrent programming, to be
+used for distributed Haskell applications as well. Provided are a simple Dining
+Philosophers, a Chat, and a soft real-time Bomberman game application.
+
+Distributed communication is transparent to the application programmer. The
+application designer uses a very simple nameserver mechanism to set up the 
+system. The DSTM library includes the management of unavailable process nodes
+and provides the application with abstract error information thus facilitating 
+the implementation of robust distributed application programs.
+
+For usage please look into the included file: DSTMManual.pdf.
+-}
+Category: Distributed Computing
+Build-Type: Simple
+Tested-With: GHC ==6.10
+
+Data-Files: field.txt, input1.txt, input2.txt, input3.txt
+Data-Dir: Bomberman
+Extra-source-files: README LICENSE DSTMManual.pdf
+
+Library
+  Build-Depends: base >=4 && <5, unix, process, network, haskell98, containers
+
+  GHC-Options: -Wall
+
+  Exposed-Modules:
+        Control.Distributed.STM.DSTM
+
+  Other-Modules:
+        Control.Distributed.STM.DebugBase,
+        Control.Distributed.STM.DebugDSTM,
+        Control.Distributed.STM.Dist
+        Control.Distributed.STM.EnvAddr,
+        Control.Distributed.STM.NameService,
+        Control.Distributed.STM.RetryVar,
+        Control.Distributed.STM.TVar,
+        Control.Distributed.STM.STM,
+        Control.Distributed.STM.Utils,
+        Paths_DSTM
+
+  Extensions: DeriveDataTypeable,
+              ScopedTypeVariables
+
+Executable NameServer
+  Main-Is:        NameServer.hs
+  Other modules:  DSTM, NameService
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Nameserver, .
+
+Executable Phil
+  Main-Is:        Phil.hs
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Phil, .
+
+Executable ChatClient
+  Main-Is:        ChatClient.hs
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Chat, .
+  Other-Modules:  ChatData
+
+Executable ChatServer
+  Main-Is:        ChatServer.hs
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Chat, .
+  Other-Modules:  ChatData
+
+Executable Bomberman
+  Main-Is:        Bomberman.hs
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Bomberman, .
diff --git a/experiment/parse/fail/3.cabal b/experiment/parse/fail/3.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..10f156c1c2a7d0c5c39e920df6394a57377aa721
--- /dev/null
+++ b/experiment/parse/fail/3.cabal
@@ -0,0 +1,82 @@
+Name: DSTM
+Version: 0.1
+Copyright: (c) 2010, Frank Kupke
+License: LGPL
+License-File: LICENSE
+Author: Frank Kupke
+Maintainer: frk@informatik.uni-kiel.de
+Cabal-Version: >= 1.2.3
+Stability: provisional
+Synopsis: A framework for using STM within distributed systems
+Description:
+{-
+The DSTM package consists of the DSTM library, a name server application, and
+three sample distributed programs using the library. DSTM is a framework
+enabling the use of the STM interface, known from concurrent programming, to be
+used for distributed Haskell applications as well. Provided are a simple Dining
+Philosophers, a Chat, and a soft real-time Bomberman game application.
+
+Distributed communication is transparent to the application programmer. The
+application designer uses a very simple nameserver mechanism to set up the 
+system. The DSTM library includes the management of unavailable process nodes
+and provides the application with abstract error information thus facilitating 
+the implementation of robust distributed application programs.
+
+For usage please look into the included file: DSTMManual.pdf.
+-}
+Category: Distributed Computing
+Build-Type: Simple
+Tested-With: GHC ==6.10
+
+Data-Files: field.txt, input1.txt, input2.txt, input3.txt
+Data-Dir: Bomberman
+Extra-source-files: README LICENSE DSTMManual.pdf
+
+Library
+  Build-Depends: base >=4 && <5, unix, process, network, haskell98, containers
+
+  GHC-Options: -Wall
+
+  Exposed-Modules:
+        Control.Distributed.STM.DSTM
+
+  Other-Modules:
+        Control.Distributed.STM.DebugBase,
+        Control.Distributed.STM.DebugDSTM,
+        Control.Distributed.STM.Dist
+        Control.Distributed.STM.EnvAddr,
+        Control.Distributed.STM.NameService,
+        Control.Distributed.STM.RetryVar,
+        Control.Distributed.STM.TVar,
+        Control.Distributed.STM.STM,
+        Control.Distributed.STM.Utils,
+        Paths_DSTM
+
+  Extensions: DeriveDataTypeable,
+              ScopedTypeVariables
+
+Executable NameServer
+  Main-Is:        NameServer.hs
+  Other modules:  DSTM, NameService
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Nameserver, .
+
+Executable Phil
+  Main-Is:        Phil.hs
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Phil, .
+
+Executable ChatClient
+  Main-Is:        ChatClient.hs
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Chat, .
+
+Executable ChatServer
+  Main-Is:        ChatServer.hs
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Chat, .
+
+Executable Bomberman
+  Main-Is:        Bomberman.hs
+  Build-Depends:  base >=4 && <5, unix, process, network, haskell98, containers
+  Hs-Source-Dirs: Bomberman, .
diff --git a/experiment/parse/fail/4.cabal b/experiment/parse/fail/4.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..dcebfc461485eb18fd72eca8019a0e59d2134ffb
--- /dev/null
+++ b/experiment/parse/fail/4.cabal
@@ -0,0 +1,18 @@
+Name:                     nat
+Version:                  0.1
+Description:            Implementation of natural numbers and integers by a binary
+                                representation. The implementation is supposed to be lazy and
+                                reasonable efficient (in comparison to peano numbers). This
+                                implementation is inspired by a similar approach in the functional
+                                logic programming language Curry.
+Synopsis:                 Lazy binary natural numbers
+License:                   BSD3
+Author:                    Andres Löh, Frank Huch, Jan Christiansen    
+Maintainer:              Jan Christiansen <jac@informatik.uni-kiel.de>
+Category:                 Data, Math
+Build-Depends:       base
+Exposed-modules:  Data.Number.Nat Data.Number.NatO Data.Number.Int
+ghc-options:          -Wall
+build-type:              Simple
+
+extra-source-files: Tests.hs
diff --git a/experiment/parse/fail/5.cabal b/experiment/parse/fail/5.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..1c3859c667e0b20c66dabf59af444fbc748220d7
--- /dev/null
+++ b/experiment/parse/fail/5.cabal
@@ -0,0 +1,79 @@
+name:          phasechange
+category:      Data
+version:       0.1
+author:        Gábor Lehel
+maintainer:    Gábor Lehel <illissius@gmail.com>
+homepage:      http://github.com/glehel/phasechange
+copyright:     Copyright (C) 2012 Gábor Lehel
+license:       BSD3
+license-file:  LICENSE
+stability:     experimental
+cabal-version: >= 1.10
+build-type:    Simple
+synopsis:      Freezing, thawing, and copy elision
+description: 
+    This library provides a class for types which present the same underlying data in both an immutable (frozen) as well as a mutable (thawed) form,
+    and various functions to manipulate them. Some of the functions allow for copy elision.
+    .
+    Instances are provided for the array types from the @primitive@, @array@, and @vector@ packages, but this is mainly for completeness: there is
+    nothing these instances do which @vector@ doesn't already do better. The main purpose, rather, is to assist new types, for instance types whose implementation relies on destructive-update foreign imports, and cases when writing a full stream fusion framework isn't practical.
+    .
+    There are three modules:
+        .
+        [Data.PhaseChange] This module exports the class without its methods, together with functions which guarantee referential transparency
+        (provided that instances are well-behaved). This is the module you should normally import to work with PhaseChangeable data.
+        .
+        [Data.PhaseChange.Unsafe] This module exports functions which can break referential transparency if they are used improperly. Be careful.
+        .
+        [Data.PhaseChange.Impl] This module exports the class along with its methods. Import it if you want to define a new instance.
+
+source-repository head
+    type:      git
+    location:  git://github.com/glehel/phasechange.git
+
+library
+    default-language:
+        Haskell98
+
+    other-extensions:
+        CPP,
+        MagicHash,
+        Rank2Types,
+        TypeFamilies,
+        UnboxedTuples,
+        FlexibleContexts,
+        FlexibleInstances,
+        UndecidableInstances,
+        MultiParamTypeClasses
+
+    impl(ghc >= 7.4):
+        other-extensions:
+            Trustworthy,
+            ConstraintKinds
+
+    impl(ghc >= 7.6):
+        other-extensions:
+            Unsafe
+
+    build-depends:
+        base >= 4.4 && < 4.6,
+        ghc-prim,
+        primitive == 0.4.*,
+--      newtype   == 0.2.*,
+        monad-st  == 0.2.*,
+        array     == 0.4.*,
+        vector    == 0.9.*
+
+    exposed-modules:
+        Data.PhaseChange
+        Data.PhaseChange.Unsafe
+        Data.PhaseChange.Impl
+
+    other-modules:
+        Data.PhaseChange.Internal
+        Data.PhaseChange.Instances
+
+    include-dirs: .
+
+    ghc-options:
+        -Wall
diff --git a/experiment/parse/fail/6.cabal b/experiment/parse/fail/6.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..01133e40448ad7ff43276cfae29202327b9a2d7c
--- /dev/null
+++ b/experiment/parse/fail/6.cabal
@@ -0,0 +1,56 @@
+Name:                vacuum-opengl
+Version:             0.0
+Synopsis:            Visualize live Haskell data structures using vacuum, graphviz and OpenGL.
+Description:         Visualize live Haskell data structures using vacuum, graphviz and OpenGL.
+                     Intended as an easier-to-build alternative (no large dependency chain)
+                     to vacuum-cairo. Because of severe problems with GHCi+GLUT, it is 
+                     implemented using a client-server architecture.
+License:             PublicDomain
+License-file:        LICENSE
+Author:              Balazs Komuves
+Maintainer:          bkomuves (plus) hackage (at) gmail (dot) com
+Homepage:            http://code.haskell.org/~bkomuves/
+Stability:           Experimental
+Category:            Development
+Tested-With:         GHC == 6.10.1 
+Cabal-Version:       >= 1.2
+Build-Type:          Simple
+
+Flag base4
+  Description: Base v4 
+
+Executable vacuum-opengl-server
+  if flag(base4)
+    Build-Depends:        base >= 4 && < 5, directory, process, network
+    cpp-options:          -DBASE_MAJOR_VERSION=4
+  else
+    Build-Depends:        base >= 3 && < 4, directory, process, network
+    cpp-options:          -DBASE_MAJOR_VERSION=3
+
+  Build-Depends:       stb-image >= 0.1.3, OpenGL >= 2.2, GLUT >= 2.1
+    
+  Main-is:             ServerMain.hs
+  Other-Modules:       System.Vacuum.OpenGL.Server
+  
+  Hs-Source-Dirs:      .
+  Extensions:          CPP
+  cpp-options:         -DVACUUM_OPENGL_DEFAULTPORT=55961
+  ghc-options:         -Wall -threaded
+
+Library
+  if flag(base4)
+    Build-Depends:        base >= 4 && < 5, pretty, network
+    cpp-options:          -DBASE_MAJOR_VERSION=4
+  else
+    Build-Depends:        base >= 3 && < 4, pretty, network
+    cpp-options:          -DBASE_MAJOR_VERSION=3
+
+  Build-Depends:       vacuum >= 0.0.90
+    
+  Exposed-Modules:     System.Vacuum.OpenGL.Client,
+                       System.Vacuum.OpenGL
+  
+  Hs-Source-Dirs:      .
+  Extensions:          CPP
+  cpp-options:         -DVACUUM_OPENGL_DEFAULTPORT=55961
+  ghc-options:         -Wall 
diff --git a/experiment/parse/fail/7.cabal b/experiment/parse/fail/7.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..631e3f42c284082cb7ec7954fc18877b96db2495
--- /dev/null
+++ b/experiment/parse/fail/7.cabal
@@ -0,0 +1,56 @@
+Name:                vacuum-opengl
+Version:             0.0.1
+Synopsis:            Visualize live Haskell data structures using vacuum, graphviz and OpenGL.
+Description:         Visualize live Haskell data structures using vacuum, graphviz and OpenGL.
+                     Intended as an easier-to-build alternative (no large dependency chain)
+                     to vacuum-cairo. Because of severe problems with GHCi+GLUT, it is 
+                     implemented using a client-server architecture.
+License:             PublicDomain
+License-file:        LICENSE
+Author:              Balazs Komuves
+Maintainer:          bkomuves (plus) hackage (at) gmail (dot) com
+Homepage:            http://code.haskell.org/~bkomuves/
+Stability:           Experimental
+Category:            Development
+Tested-With:         GHC == 6.10.1 
+Cabal-Version:       >= 1.2
+Build-Type:          Simple
+
+Flag base4
+  Description: Base v4 
+
+Executable vacuum-opengl-server
+  if flag(base4)
+    Build-Depends:        base >= 4 && < 5, directory, process, network
+    cpp-options:          -DBASE_MAJOR_VERSION=4
+  else
+    Build-Depends:        base >= 3 && < 4, directory, process, network
+    cpp-options:          -DBASE_MAJOR_VERSION=3
+
+  Build-Depends:       stb-image >= 0.1.3, OpenGL >= 2.2, GLUT >= 2.1
+    
+  Main-is:             ServerMain.hs
+  Other-Modules:       System.Vacuum.OpenGL.Server
+  
+  Hs-Source-Dirs:      .
+  Extensions:          CPP
+  cpp-options:         -DVACUUM_OPENGL_DEFAULTPORT=55961
+  ghc-options:         -Wall -threaded
+
+Library
+  if flag(base4)
+    Build-Depends:        base >= 4 && < 5, pretty, network
+    cpp-options:          -DBASE_MAJOR_VERSION=4
+  else
+    Build-Depends:        base >= 3 && < 4, pretty, network
+    cpp-options:          -DBASE_MAJOR_VERSION=3
+
+  Build-Depends:       vacuum >= 0.0.90
+    
+  Exposed-Modules:     System.Vacuum.OpenGL.Client,
+                       System.Vacuum.OpenGL
+  
+  Hs-Source-Dirs:      .
+  Extensions:          CPP
+  cpp-options:         -DVACUUM_OPENGL_DEFAULTPORT=55961
+  ghc-options:         -Wall 
diff --git a/experiment/parse/fail/8.cabal b/experiment/parse/fail/8.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..0946b3ee7cd7ccb401102a914b9a4c253ff264cb
--- /dev/null
+++ b/experiment/parse/fail/8.cabal
@@ -0,0 +1,3452 @@
+Name:                smartword
+Synopsis:            Web based flash card for Word Smart I and II vocabularies
+Version:             0.0.0.5
+Homepage:            http://kyagrd.dyndns.org/~kyagrd/project/smartword/
+Category:            Web,Education
+License:             BSD3
+License-file:        LICENSE
+Author:              Ahn, Ki Yung
+Maintainer:          Ahn, Ki Yung <kya@pdx.edu>
+Build-Type:          Simple
+Cabal-Version:       >=1.2
+extra-source-files: README
+
+Description:
+  Web based online study tool for all vocabularies in Word Smart I and II,
+  a poular book series for studying GRE vocabularies.
+  (FYI, I typed the vocabulary data and wrote the program in 2004,
+  because I got too boring just going over the strange English words.)
+  If you don't read Korean, you can just ignore the Korean translation.
+
+  Installation:
+  You can either compile CGI binaries with GHC
+  or use Hugs to run lhs as a CGI script.
+  Copy all .cgi files and data directories (book1, book1.ans, book2, book2.ans)
+  into your webserver CGI directory (usually cgi-bin).
+
+  Usage:
+  If you get it wright the flash card goes away,
+  but if you didn't get it the flash card goes to the bottom of the deck again.
+  So, it won't end until you get all of them right.
+
+Data-files:
+  book1.ans/abash
+  book1.ans/abate
+  book1.ans/abdicate
+  book1.ans/aberration
+  book1.ans/abhor
+  book1.ans/abject
+  book1.ans/abnegate
+  book1.ans/abortive
+  book1.ans/abridge
+  book1.ans/absolute
+  book1.ans/absolve
+  book1.ans/abstinent
+  book1.ans/abstract
+  book1.ans/abstruse
+  book1.ans/abysmal
+  book1.ans/accolade
+  book1.ans/accost
+  book1.ans/acerbic
+  book1.ans/acquiesce
+  book1.ans/acrid
+  book1.ans/acrimonious
+  book1.ans/acumen
+  book1.ans/acute
+  book1.ans/adamant
+  book1.ans/address
+  book1.ans/adherent
+  book1.ans/admonish
+  book1.ans/adroit
+  book1.ans/adulation
+  book1.ans/adulterate
+  book1.ans/adverse
+  book1.ans/aesthetic
+  book1.ans/affable
+  book1.ans/affectation
+  book1.ans/affinity
+  book1.ans/affluent
+  book1.ans/agenda
+  book1.ans/aggregate
+  book1.ans/agnostic
+  book1.ans/agrarian
+  book1.ans/alacrity
+  book1.ans/allege
+  book1.ans/alleviate
+  book1.ans/allocate
+  book1.ans/alloy
+  book1.ans/allusion
+  book1.ans/aloof
+  book1.ans/altruism
+  book1.ans/ambience
+  book1.ans/ambiguous
+  book1.ans/ambivalent
+  book1.ans/ameliorate
+  book1.ans/amenable
+  book1.ans/amenity
+  book1.ans/amiable
+  book1.ans/amnesty
+  book1.ans/amoral
+  book1.ans/amorous
+  book1.ans/amorphous
+  book1.ans/anachronism
+  book1.ans/analogy
+  book1.ans/anarchy
+  book1.ans/anecdote
+  book1.ans/anguish
+  book1.ans/animosity
+  book1.ans/anomaly
+  book1.ans/antecedent
+  book1.ans/antipathy
+  book1.ans/antithesis
+  book1.ans/apartheid
+  book1.ans/apathy
+  book1.ans/aphorism
+  book1.ans/apocalypse
+  book1.ans/apocryphal
+  book1.ans/apotheosis
+  book1.ans/appease
+  book1.ans/appreciate
+  book1.ans/apprehensive
+  book1.ans/approbation
+  book1.ans/appropriate
+  book1.ans/aptitude
+  book1.ans/arbiter
+  book1.ans/arbitrary
+  book1.ans/arcane
+  book1.ans/archaic
+  book1.ans/archetype
+  book1.ans/ardent
+  book1.ans/arduous
+  book1.ans/aristocratic
+  book1.ans/artful
+  book1.ans/artifice
+  book1.ans/ascendancy
+  book1.ans/ascetic
+  book1.ans/assiduous
+  book1.ans/assimilate
+  book1.ans/assuage
+  book1.ans/astute
+  book1.ans/attrition
+  book1.ans/audacity
+  book1.ans/augment
+  book1.ans/auspicious
+  book1.ans/austere
+  book1.ans/autocratic
+  book1.ans/autonomous
+  book1.ans/avarice
+  book1.ans/avow
+  book1.ans/avuncular
+  book1.ans/awry
+  book1.ans/axiom
+  book1.ans/banal
+  book1.ans/bane
+  book1.ans/bastion
+  book1.ans/beget
+  book1.ans/belabor
+  book1.ans/beleaguer
+  book1.ans/belie
+  book1.ans/belittle
+  book1.ans/belligerent
+  book1.ans/bemused
+  book1.ans/benefactor
+  book1.ans/benevolent
+  book1.ans/benign
+  book1.ans/bequest
+  book1.ans/bereaved
+  book1.ans/beset
+  book1.ans/blasphemy
+  book1.ans/blatant
+  book1.ans/blight
+  book1.ans/blithe
+  book1.ans/bourgeois
+  book1.ans/bovine
+  book1.ans/brevity
+  book1.ans/broach
+  book1.ans/bucolic
+  book1.ans/bureaucracy
+  book1.ans/burgeon
+  book1.ans/burlesque
+  book1.ans/cacophony
+  book1.ans/cadence
+  book1.ans/cajole
+  book1.ans/callow
+  book1.ans/candor
+  book1.ans/capitalism
+  book1.ans/capitulate
+  book1.ans/capricious
+  book1.ans/caricature
+  book1.ans/castigate
+  book1.ans/catalyst
+  book1.ans/categorical
+  book1.ans/catharsis
+  book1.ans/catholic
+  book1.ans/caustic
+  book1.ans/celibacy
+  book1.ans/censure
+  book1.ans/cerebral
+  book1.ans/chagrin
+  book1.ans/charisma
+  book1.ans/charlatan
+  book1.ans/chasm
+  book1.ans/chastise
+  book1.ans/chicanery
+  book1.ans/chimera
+  book1.ans/choleric
+  book1.ans/chronic
+  book1.ans/chronicle
+  book1.ans/circuitous
+  book1.ans/circumlocution
+  book1.ans/circumscribe
+  book1.ans/circumspect
+  book1.ans/circumvent
+  book1.ans/civil
+  book1.ans/clemency
+  book1.ans/cliche
+  book1.ans/clique
+  book1.ans/coalesce
+  book1.ans/coerce
+  book1.ans/cogent
+  book1.ans/cognitive
+  book1.ans/cognizant
+  book1.ans/coherent
+  book1.ans/colloquial
+  book1.ans/collusion
+  book1.ans/commensurate
+  book1.ans/compelling
+  book1.ans/compendium
+  book1.ans/complacent
+  book1.ans/complement
+  book1.ans/complicity
+  book1.ans/comprehensive
+  book1.ans/comprise
+  book1.ans/conciliatory
+  book1.ans/concise
+  book1.ans/concord
+  book1.ans/concurrent
+  book1.ans/condescend
+  book1.ans/condone
+  book1.ans/conducive
+  book1.ans/confluence
+  book1.ans/congenial
+  book1.ans/congenital
+  book1.ans/conjecture
+  book1.ans/conjure
+  book1.ans/connoisseur
+  book1.ans/consecrate
+  book1.ans/consensus
+  book1.ans/consonant
+  book1.ans/construe
+  book1.ans/consummate
+  book1.ans/contentious
+  book1.ans/contiguous
+  book1.ans/contingent
+  book1.ans/contrite
+  book1.ans/contrived
+  book1.ans/conventional
+  book1.ans/convivial
+  book1.ans/copious
+  book1.ans/corollary
+  book1.ans/corroborate
+  book1.ans/cosmopolitan
+  book1.ans/countenance
+  book1.ans/coup
+  book1.ans/covenant
+  book1.ans/covert
+  book1.ans/covet
+  book1.ans/credulous
+  book1.ans/criterion
+  book1.ans/cryptic
+  book1.ans/culinary
+  book1.ans/culminate
+  book1.ans/culpable
+  book1.ans/cursory
+  book1.ans/curtail
+  book1.ans/cynic
+  book1.ans/daunt
+  book1.ans/dearth
+  book1.ans/debacle
+  book1.ans/debauchery
+  book1.ans/debilitate
+  book1.ans/decadent
+  book1.ans/decimate
+  book1.ans/decorous
+  book1.ans/deduce
+  book1.ans/defame
+  book1.ans/deference
+  book1.ans/definitive
+  book1.ans/degenerate
+  book1.ans/deleterious
+  book1.ans/delineate
+  book1.ans/delude
+  book1.ans/deluge
+  book1.ans/demagogue
+  book1.ans/denizen
+  book1.ans/depravity
+  book1.ans/deprecate
+  book1.ans/deride
+  book1.ans/derogatory
+  book1.ans/desiccate
+  book1.ans/despondent
+  book1.ans/despot
+  book1.ans/destitute
+  book1.ans/desultory
+  book1.ans/dialectical
+  book1.ans/dictum
+  book1.ans/didactic
+  book1.ans/diffident
+  book1.ans/digress
+  book1.ans/dilettante
+  book1.ans/discern
+  book1.ans/discreet
+  book1.ans/discrete
+  book1.ans/discriminate
+  book1.ans/disdain
+  book1.ans/disinterested
+  book1.ans/disparage
+  book1.ans/disparate
+  book1.ans/disseminate
+  book1.ans/dissipate
+  book1.ans/dissolution
+  book1.ans/distend
+  book1.ans/distinguish
+  book1.ans/docile
+  book1.ans/doctrinaire
+  book1.ans/dogmatic
+  book1.ans/domestic
+  book1.ans/dormant
+  book1.ans/dubious
+  book1.ans/duplicity
+  book1.ans/ebullient
+  book1.ans/eccentric
+  book1.ans/eclectic
+  book1.ans/edify
+  book1.ans/efface
+  book1.ans/effusion
+  book1.ans/egalitarian
+  book1.ans/egocentric
+  book1.ans/egregious
+  book1.ans/elicit
+  book1.ans/elliptical
+  book1.ans/elusive
+  book1.ans/emigrate
+  book1.ans/eminent
+  book1.ans/empirical
+  book1.ans/emulate
+  book1.ans/encroach
+  book1.ans/endemic
+  book1.ans/enervate
+  book1.ans/enfranchise
+  book1.ans/engender
+  book1.ans/enigma
+  book1.ans/enormity
+  book1.ans/ephemeral
+  book1.ans/epigram
+  book1.ans/epitome
+  book1.ans/equanimity
+  book1.ans/equitable
+  book1.ans/equivocal
+  book1.ans/erudite
+  book1.ans/esoteric
+  book1.ans/espouse
+  book1.ans/ethereal
+  book1.ans/euphemism
+  book1.ans/evanescent
+  book1.ans/exacerbate
+  book1.ans/exacting
+  book1.ans/exalt
+  book1.ans/exasperate
+  book1.ans/exemplify
+  book1.ans/exhaustive
+  book1.ans/exhort
+  book1.ans/exigency
+  book1.ans/existential
+  book1.ans/exonerate
+  book1.ans/expatriate
+  book1.ans/expedient
+  book1.ans/expedite
+  book1.ans/explicit
+  book1.ans/extol
+  book1.ans/extraneous
+  book1.ans/extrapolate
+  book1.ans/extricate
+  book1.ans/extrovert
+  book1.ans/exult
+  book1.ans/fabrication
+  book1.ans/facetious
+  book1.ans/facile
+  book1.ans/faction
+  book1.ans/farcical
+  book1.ans/fastidious
+  book1.ans/fatalist
+  book1.ans/fatuous
+  book1.ans/fauna
+  book1.ans/fecund
+  book1.ans/felicity
+  book1.ans/fervor
+  book1.ans/fetter
+  book1.ans/fidelity
+  book1.ans/figurative
+  book1.ans/finesse
+  book1.ans/flagrant
+  book1.ans/flaunt
+  book1.ans/flout
+  book1.ans/foible
+  book1.ans/foment
+  book1.ans/forbear
+  book1.ans/forgo
+  book1.ans/forsake
+  book1.ans/fortuitous
+  book1.ans/founder
+  book1.ans/fraternal
+  book1.ans/frenetic
+  book1.ans/frugal
+  book1.ans/furtive
+  book1.ans/futile
+  book1.ans/garrulous
+  book1.ans/genre
+  book1.ans/genteel
+  book1.ans/gesticulate
+  book1.ans/glut
+  book1.ans/grandiloquent
+  book1.ans/grandiose
+  book1.ans/gratuitous
+  book1.ans/gravity
+  book1.ans/gregarious
+  book1.ans/guile
+  book1.ans/hackneyed
+  book1.ans/hapless
+  book1.ans/harbinger
+  book1.ans/hedonism
+  book1.ans/hegemony
+  book1.ans/heresy
+  book1.ans/hermetic
+  book1.ans/heyday
+  book1.ans/hiatus
+  book1.ans/hierarchy
+  book1.ans/histrionic
+  book1.ans/homily
+  book1.ans/homogeneous
+  book1.ans/husbandry
+  book1.ans/hyperbole
+  book1.ans/hypothetical
+  book1.ans/iconoclast
+  book1.ans/ideology
+  book1.ans/idiosyncrasy
+  book1.ans/idyllic
+  book1.ans/ignominy
+  book1.ans/illicit
+  book1.ans/imminent
+  book1.ans/immutable
+  book1.ans/impartial
+  book1.ans/impeccable
+  book1.ans/imperial
+  book1.ans/impervious
+  book1.ans/impetuous
+  book1.ans/implement
+  book1.ans/impotent
+  book1.ans/impugn
+  book1.ans/inane
+  book1.ans/inaugurate
+  book1.ans/incandescent
+  book1.ans/incantation
+  book1.ans/incense
+  book1.ans/incessant
+  book1.ans/incipient
+  book1.ans/incisive
+  book1.ans/incongruous
+  book1.ans/incorrigible
+  book1.ans/increment
+  book1.ans/indifferent
+  book1.ans/indigenous
+  book1.ans/indigent
+  book1.ans/indignant
+  book1.ans/indolent
+  book1.ans/indulgent
+  book1.ans/ineffable
+  book1.ans/inept
+  book1.ans/inert
+  book1.ans/inexorable
+  book1.ans/infamous
+  book1.ans/infatuated
+  book1.ans/infer
+  book1.ans/infinitesimal
+  book1.ans/ingenuous
+  book1.ans/inherent
+  book1.ans/injunction
+  book1.ans/innate
+  book1.ans/innocuous
+  book1.ans/inordinate
+  book1.ans/insatiable
+  book1.ans/insidious
+  book1.ans/insinuate
+  book1.ans/insipid
+  book1.ans/insolent
+  book1.ans/instigate
+  book1.ans/insular
+  book1.ans/insurgent
+  book1.ans/integral
+  book1.ans/intractable
+  book1.ans/intransigent
+  book1.ans/intrinsic
+  book1.ans/introspective
+  book1.ans/inundate
+  book1.ans/invective
+  book1.ans/inveterate
+  book1.ans/irascible
+  book1.ans/ironic
+  book1.ans/irrevocable
+  book1.ans/itinerant
+  book1.ans/judicious
+  book1.ans/juxtapose
+  book1.ans/kinetic
+  book1.ans/labyrinth
+  book1.ans/laconic
+  book1.ans/lament
+  book1.ans/lampoon
+  book1.ans/languish
+  book1.ans/largess
+  book1.ans/latent
+  book1.ans/laud
+  book1.ans/legacy
+  book1.ans/lethargy
+  book1.ans/levity
+  book1.ans/libel
+  book1.ans/litigate
+  book1.ans/loquacious
+  book1.ans/lucid
+  book1.ans/lugubrious
+  book1.ans/luminous
+  book1.ans/machination
+  book1.ans/magnanimous
+  book1.ans/magnate
+  book1.ans/malaise
+  book1.ans/malfeasance
+  book1.ans/malinger
+  book1.ans/malleable
+  book1.ans/mandate
+  book1.ans/manifest
+  book1.ans/manifesto
+  book1.ans/marshal
+  book1.ans/martial
+  book1.ans/martyr
+  book1.ans/matriculate
+  book1.ans/maudlin
+  book1.ans/maverick
+  book1.ans/maxim
+  book1.ans/mediate
+  book1.ans/mellifluous
+  book1.ans/mendacious
+  book1.ans/mendicant
+  book1.ans/mentor
+  book1.ans/mercenary
+  book1.ans/mercurial
+  book1.ans/metamorphosis
+  book1.ans/microcosm
+  book1.ans/milieu
+  book1.ans/minuscule
+  book1.ans/misanthropic
+  book1.ans/mitigate
+  book1.ans/mollify
+  book1.ans/monolithic
+  book1.ans/moribund
+  book1.ans/morose
+  book1.ans/mortify
+  book1.ans/mundane
+  book1.ans/munificent
+  book1.ans/myopia
+  book1.ans/myriad
+  book1.ans/narcissism
+  book1.ans/nebulous
+  book1.ans/nefarious
+  book1.ans/neologism
+  book1.ans/nepotism
+  book1.ans/nihilism
+  book1.ans/nominal
+  book1.ans/nostalgia
+  book1.ans/notorious
+  book1.ans/novel
+  book1.ans/noxious
+  book1.ans/nuance
+  book1.ans/obdurate
+  book1.ans/obfuscate
+  book1.ans/oblique
+  book1.ans/oblivion
+  book1.ans/obscure
+  book1.ans/obsequious
+  book1.ans/obtuse
+  book1.ans/officious
+  book1.ans/onerous
+  book1.ans/opaque
+  book1.ans/opulent
+  book1.ans/orthodox
+  book1.ans/ostensible
+  book1.ans/ostentatious
+  book1.ans/pacify
+  book1.ans/painstaking
+  book1.ans/palliate
+  book1.ans/palpable
+  book1.ans/paltry
+  book1.ans/panacea
+  book1.ans/paradigm
+  book1.ans/paradox
+  book1.ans/parochial
+  book1.ans/parody
+  book1.ans/parsimonious
+  book1.ans/partisan
+  book1.ans/patent
+  book1.ans/paternal
+  book1.ans/pathology
+  book1.ans/patriarch
+  book1.ans/patrician
+  book1.ans/patronize
+  book1.ans/paucity
+  book1.ans/peccadillo
+  book1.ans/pedantic
+  book1.ans/pedestrian
+  book1.ans/pejorative
+  book1.ans/penchant
+  book1.ans/penitent
+  book1.ans/pensive
+  book1.ans/peremptory
+  book1.ans/perennial
+  book1.ans/perfidy
+  book1.ans/perfunctory
+  book1.ans/peripatetic
+  book1.ans/periphery
+  book1.ans/perjury
+  book1.ans/permeate
+  book1.ans/pernicious
+  book1.ans/perquisite
+  book1.ans/pertinent
+  book1.ans/perturb
+  book1.ans/peruse
+  book1.ans/pervade
+  book1.ans/petulant
+  book1.ans/philanthropy
+  book1.ans/philistine
+  book1.ans/pious
+  book1.ans/pivotal
+  book1.ans/placate
+  book1.ans/plaintive
+  book1.ans/platitude
+  book1.ans/plebeian
+  book1.ans/plethora
+  book1.ans/poignant
+  book1.ans/polarize
+  book1.ans/polemic
+  book1.ans/ponderous
+  book1.ans/portent
+  book1.ans/postulate
+  book1.ans/pragmatic
+  book1.ans/precedent
+  book1.ans/precept
+  book1.ans/precipitate
+  book1.ans/precipitous
+  book1.ans/preclude
+  book1.ans/precursor
+  book1.ans/predilection
+  book1.ans/preeminent
+  book1.ans/preempt
+  book1.ans/premise
+  book1.ans/prepossess
+  book1.ans/prerogative
+  book1.ans/prevail
+  book1.ans/pristine
+  book1.ans/prodigal
+  book1.ans/prodigious
+  book1.ans/prodigy
+  book1.ans/profane
+  book1.ans/profess
+  book1.ans/proficient
+  book1.ans/profligate
+  book1.ans/profound
+  book1.ans/profuse
+  book1.ans/proletariat
+  book1.ans/proliferate
+  book1.ans/prolific
+  book1.ans/promulgate
+  book1.ans/propensity
+  book1.ans/propitious
+  book1.ans/proponent
+  book1.ans/proprietary
+  book1.ans/propriety
+  book1.ans/prosaic
+  book1.ans/proscribe
+  book1.ans/proselytize
+  book1.ans/protagonist
+  book1.ans/protract
+  book1.ans/provident
+  book1.ans/provincial
+  book1.ans/provisional
+  book1.ans/proximity
+  book1.ans/prudent
+  book1.ans/purported
+  book1.ans/putative
+  book1.ans/qualify
+  book1.ans/qualitative
+  book1.ans/querulous
+  book1.ans/quixotic
+  book1.ans/ramification
+  book1.ans/rancor
+  book1.ans/rapacious
+  book1.ans/rebuke
+  book1.ans/rebut
+  book1.ans/recalcitrant
+  book1.ans/recant
+  book1.ans/reciprocal
+  book1.ans/reclusive
+  book1.ans/recondite
+  book1.ans/recrimination
+  book1.ans/redolent
+  book1.ans/redundant
+  book1.ans/refute
+  book1.ans/reiterate
+  book1.ans/relegate
+  book1.ans/relentless
+  book1.ans/relinquish
+  book1.ans/remonstrate
+  book1.ans/renaissance
+  book1.ans/renounce
+  book1.ans/reparation
+  book1.ans/repercussion
+  book1.ans/replenish
+  book1.ans/replete
+  book1.ans/reprehensible
+  book1.ans/reprisal
+  book1.ans/reproach
+  book1.ans/reprove
+  book1.ans/repudiate
+  book1.ans/requisite
+  book1.ans/resolute
+  book1.ans/respite
+  book1.ans/reticent
+  book1.ans/revere
+  book1.ans/rhetoric
+  book1.ans/rigorous
+  book1.ans/robust
+  book1.ans/rogue
+  book1.ans/rudimentary
+  book1.ans/ruminate
+  book1.ans/rustic
+  book1.ans/saccharine
+  book1.ans/sacrilege
+  book1.ans/sacrosanct
+  book1.ans/sagacious
+  book1.ans/salient
+  book1.ans/salutary
+  book1.ans/sanctimonious
+  book1.ans/sanguine
+  book1.ans/scintillate
+  book1.ans/scrupulous
+  book1.ans/scrutinize
+  book1.ans/secular
+  book1.ans/sedition
+  book1.ans/sensory
+  book1.ans/sentient
+  book1.ans/sequester
+  book1.ans/serendipity
+  book1.ans/servile
+  book1.ans/singular
+  book1.ans/slander
+  book1.ans/sloth
+  book1.ans/sobriety
+  book1.ans/solicitous
+  book1.ans/solvent
+  book1.ans/soporific
+  book1.ans/sordid
+  book1.ans/spawn
+  book1.ans/specious
+  book1.ans/sporadic
+  book1.ans/spurious
+  book1.ans/squalor
+  book1.ans/squander
+  book1.ans/stagnation
+  book1.ans/static
+  book1.ans/staunch
+  book1.ans/steadfast
+  book1.ans/stigmatize
+  book1.ans/stipulate
+  book1.ans/stoic
+  book1.ans/stratum
+  book1.ans/stricture
+  book1.ans/strife
+  book1.ans/stringent
+  book1.ans/stymie
+  book1.ans/subjugate
+  book1.ans/sublime
+  book1.ans/subordinate
+  book1.ans/substantive
+  book1.ans/subtle
+  book1.ans/subversive
+  book1.ans/succinct
+  book1.ans/succumb
+  book1.ans/supercilious
+  book1.ans/superficial
+  book1.ans/superfluous
+  book1.ans/surfeit
+  book1.ans/surreptitious
+  book1.ans/surrogate
+  book1.ans/sycophant
+  book1.ans/synthesis
+  book1.ans/tacit
+  book1.ans/taciturn
+  book1.ans/tangential
+  book1.ans/tangible
+  book1.ans/tantamount
+  book1.ans/tautological
+  book1.ans/temerity
+  book1.ans/temperate
+  book1.ans/tenable
+  book1.ans/tenacious
+  book1.ans/tenet
+  book1.ans/tentative
+  book1.ans/tenuous
+  book1.ans/terse
+  book1.ans/theology
+  book1.ans/tirade
+  book1.ans/torpor
+  book1.ans/touchstone
+  book1.ans/tout
+  book1.ans/transcend
+  book1.ans/transgress
+  book1.ans/transient
+  book1.ans/trepidation
+  book1.ans/turpitude
+  book1.ans/ubiquitous
+  book1.ans/unconscionable
+  book1.ans/unctuous
+  book1.ans/uniform
+  book1.ans/unremitting
+  book1.ans/unwitting
+  book1.ans/urbane
+  book1.ans/usurp
+  book1.ans/utilitarian
+  book1.ans/utopia
+  book1.ans/vacillate
+  book1.ans/vapid
+  book1.ans/vehement
+  book1.ans/venal
+  book1.ans/venerate
+  book1.ans/veracity
+  book1.ans/verbose
+  book1.ans/verisimilitude
+  book1.ans/vernacular
+  book1.ans/vestige
+  book1.ans/vex
+  book1.ans/viable
+  book1.ans/vicarious
+  book1.ans/vicissitude
+  book1.ans/vilify
+  book1.ans/vindicate
+  book1.ans/vindictive
+  book1.ans/virtuoso
+  book1.ans/virulent
+  book1.ans/visionary
+  book1.ans/vitiate
+  book1.ans/vitriolic
+  book1.ans/vocation
+  book1.ans/vociferous
+  book1.ans/volatile
+  book1.ans/volition
+  book1.ans/wanton
+  book1.ans/willful
+  book1.ans/wistful
+  book1.ans/zealous
+  book1/.empty
+  book1/.A.list
+  book1/.B.list
+  book1/.C.list
+  book1/.D.list
+  book1/.E.list
+  book1/.F.list
+  book1/.G.list
+  book1/.H.list
+  book1/.I.list
+  book1/.J.list
+  book1/.K.list
+  book1/.L.list
+  book1/.M.list
+  book1/.N.list
+  book1/.O.list
+  book1/.P.list
+  book1/.Q.list
+  book1/.R.list
+  book1/.S.list
+  book1/.T.list
+  book1/.U.list
+  book1/.V.list
+  book1/.W.list
+  book1/.X.list
+  book1/.Y.list
+  book1/.Z.list
+  book1/abash
+  book1/abate
+  book1/abdicate
+  book1/aberration
+  book1/abhor
+  book1/abject
+  book1/abnegate
+  book1/abortive
+  book1/abridge
+  book1/absolute
+  book1/absolve
+  book1/abstinent
+  book1/abstract
+  book1/abstruse
+  book1/abysmal
+  book1/accolade
+  book1/accost
+  book1/acerbic
+  book1/acquiesce
+  book1/acrid
+  book1/acrimonious
+  book1/acumen
+  book1/acute
+  book1/adamant
+  book1/address
+  book1/adherent
+  book1/admonish
+  book1/adroit
+  book1/adulation
+  book1/adulterate
+  book1/adverse
+  book1/aesthetic
+  book1/affable
+  book1/affectation
+  book1/affinity
+  book1/affluent
+  book1/agenda
+  book1/aggregate
+  book1/agnostic
+  book1/agrarian
+  book1/alacrity
+  book1/allege
+  book1/alleviate
+  book1/allocate
+  book1/alloy
+  book1/allusion
+  book1/aloof
+  book1/altruism
+  book1/ambience
+  book1/ambiguous
+  book1/ambivalent
+  book1/ameliorate
+  book1/amenable
+  book1/amenity
+  book1/amiable
+  book1/amnesty
+  book1/amoral
+  book1/amorous
+  book1/amorphous
+  book1/anachronism
+  book1/analogy
+  book1/anarchy
+  book1/anecdote
+  book1/anguish
+  book1/animosity
+  book1/anomaly
+  book1/antecedent
+  book1/antipathy
+  book1/antithesis
+  book1/apartheid
+  book1/apathy
+  book1/aphorism
+  book1/apocalypse
+  book1/apocryphal
+  book1/apotheosis
+  book1/appease
+  book1/appreciate
+  book1/apprehensive
+  book1/approbation
+  book1/appropriate
+  book1/aptitude
+  book1/arbiter
+  book1/arbitrary
+  book1/arcane
+  book1/archaic
+  book1/archetype
+  book1/ardent
+  book1/arduous
+  book1/aristocratic
+  book1/artful
+  book1/artifice
+  book1/ascendancy
+  book1/ascetic
+  book1/assiduous
+  book1/assimilate
+  book1/assuage
+  book1/astute
+  book1/attrition
+  book1/audacity
+  book1/augment
+  book1/auspicious
+  book1/austere
+  book1/autocratic
+  book1/autonomous
+  book1/avarice
+  book1/avow
+  book1/avuncular
+  book1/awry
+  book1/axiom
+  book1/banal
+  book1/bane
+  book1/bastion
+  book1/beget
+  book1/belabor
+  book1/beleaguer
+  book1/belie
+  book1/belittle
+  book1/belligerent
+  book1/bemused
+  book1/benefactor
+  book1/benevolent
+  book1/benign
+  book1/bequest
+  book1/bereaved
+  book1/beset
+  book1/blasphemy
+  book1/blatant
+  book1/blight
+  book1/blithe
+  book1/bourgeois
+  book1/bovine
+  book1/brevity
+  book1/broach
+  book1/bucolic
+  book1/bureaucracy
+  book1/burgeon
+  book1/burlesque
+  book1/cacophony
+  book1/cadence
+  book1/cajole
+  book1/callow
+  book1/candor
+  book1/capitalism
+  book1/capitulate
+  book1/capricious
+  book1/caricature
+  book1/castigate
+  book1/catalyst
+  book1/categorical
+  book1/catharsis
+  book1/catholic
+  book1/caustic
+  book1/celibacy
+  book1/censure
+  book1/cerebral
+  book1/chagrin
+  book1/charisma
+  book1/charlatan
+  book1/chasm
+  book1/chastise
+  book1/chicanery
+  book1/chimera
+  book1/choleric
+  book1/chronic
+  book1/chronicle
+  book1/circuitous
+  book1/circumlocution
+  book1/circumscribe
+  book1/circumspect
+  book1/circumvent
+  book1/civil
+  book1/clemency
+  book1/cliche
+  book1/clique
+  book1/coalesce
+  book1/coerce
+  book1/cogent
+  book1/cognitive
+  book1/cognizant
+  book1/coherent
+  book1/colloquial
+  book1/collusion
+  book1/commensurate
+  book1/compelling
+  book1/compendium
+  book1/complacent
+  book1/complement
+  book1/complicity
+  book1/comprehensive
+  book1/comprise
+  book1/conciliatory
+  book1/concise
+  book1/concord
+  book1/concurrent
+  book1/condescend
+  book1/condone
+  book1/conducive
+  book1/confluence
+  book1/congenial
+  book1/congenital
+  book1/conjecture
+  book1/conjure
+  book1/connoisseur
+  book1/consecrate
+  book1/consensus
+  book1/consonant
+  book1/construe
+  book1/consummate
+  book1/contentious
+  book1/contiguous
+  book1/contingent
+  book1/contrite
+  book1/contrived
+  book1/conventional
+  book1/convivial
+  book1/copious
+  book1/corollary
+  book1/corroborate
+  book1/cosmopolitan
+  book1/countenance
+  book1/coup
+  book1/covenant
+  book1/covert
+  book1/covet
+  book1/credulous
+  book1/criterion
+  book1/cryptic
+  book1/culinary
+  book1/culminate
+  book1/culpable
+  book1/cursory
+  book1/curtail
+  book1/cynic
+  book1/daunt
+  book1/dearth
+  book1/debacle
+  book1/debauchery
+  book1/debilitate
+  book1/decadent
+  book1/decimate
+  book1/decorous
+  book1/deduce
+  book1/defame
+  book1/deference
+  book1/definitive
+  book1/degenerate
+  book1/deleterious
+  book1/delineate
+  book1/delude
+  book1/deluge
+  book1/demagogue
+  book1/denizen
+  book1/depravity
+  book1/deprecate
+  book1/deride
+  book1/derogatory
+  book1/desiccate
+  book1/despondent
+  book1/despot
+  book1/destitute
+  book1/desultory
+  book1/dialectical
+  book1/dictum
+  book1/didactic
+  book1/diffident
+  book1/digress
+  book1/dilettante
+  book1/discern
+  book1/discreet
+  book1/discrete
+  book1/discriminate
+  book1/disdain
+  book1/disinterested
+  book1/disparage
+  book1/disparate
+  book1/disseminate
+  book1/dissipate
+  book1/dissolution
+  book1/distend
+  book1/distinguish
+  book1/docile
+  book1/doctrinaire
+  book1/dogmatic
+  book1/domestic
+  book1/dormant
+  book1/dubious
+  book1/duplicity
+  book1/ebullient
+  book1/eccentric
+  book1/eclectic
+  book1/edify
+  book1/efface
+  book1/effusion
+  book1/egalitarian
+  book1/egocentric
+  book1/egregious
+  book1/elicit
+  book1/elliptical
+  book1/elusive
+  book1/emigrate
+  book1/eminent
+  book1/empirical
+  book1/emulate
+  book1/encroach
+  book1/endemic
+  book1/enervate
+  book1/enfranchise
+  book1/engender
+  book1/enigma
+  book1/enormity
+  book1/ephemeral
+  book1/epigram
+  book1/epitome
+  book1/equanimity
+  book1/equitable
+  book1/equivocal
+  book1/erudite
+  book1/esoteric
+  book1/espouse
+  book1/ethereal
+  book1/euphemism
+  book1/evanescent
+  book1/exacerbate
+  book1/exacting
+  book1/exalt
+  book1/exasperate
+  book1/exemplify
+  book1/exhaustive
+  book1/exhort
+  book1/exigency
+  book1/existential
+  book1/exonerate
+  book1/expatriate
+  book1/expedient
+  book1/expedite
+  book1/explicit
+  book1/extol
+  book1/extraneous
+  book1/extrapolate
+  book1/extricate
+  book1/extrovert
+  book1/exult
+  book1/fabrication
+  book1/facetious
+  book1/facile
+  book1/faction
+  book1/farcical
+  book1/fastidious
+  book1/fatalist
+  book1/fatuous
+  book1/fauna
+  book1/fecund
+  book1/felicity
+  book1/fervor
+  book1/fetter
+  book1/fidelity
+  book1/figurative
+  book1/finesse
+  book1/flagrant
+  book1/flaunt
+  book1/flout
+  book1/foible
+  book1/foment
+  book1/forbear
+  book1/forgo
+  book1/forsake
+  book1/fortuitous
+  book1/founder
+  book1/fraternal
+  book1/frenetic
+  book1/frugal
+  book1/furtive
+  book1/futile
+  book1/garrulous
+  book1/genre
+  book1/genteel
+  book1/gesticulate
+  book1/glut
+  book1/grandiloquent
+  book1/grandiose
+  book1/gratuitous
+  book1/gravity
+  book1/gregarious
+  book1/guile
+  book1/hackneyed
+  book1/hapless
+  book1/harbinger
+  book1/hedonism
+  book1/hegemony
+  book1/heresy
+  book1/hermetic
+  book1/heyday
+  book1/hiatus
+  book1/hierarchy
+  book1/histrionic
+  book1/homily
+  book1/homogeneous
+  book1/husbandry
+  book1/hyperbole
+  book1/hypothetical
+  book1/iconoclast
+  book1/ideology
+  book1/idiosyncrasy
+  book1/idyllic
+  book1/ignominy
+  book1/illicit
+  book1/imminent
+  book1/immutable
+  book1/impartial
+  book1/impeccable
+  book1/imperial
+  book1/impervious
+  book1/impetuous
+  book1/implement
+  book1/impotent
+  book1/impugn
+  book1/inane
+  book1/inaugurate
+  book1/incandescent
+  book1/incantation
+  book1/incense
+  book1/incessant
+  book1/incipient
+  book1/incisive
+  book1/incongruous
+  book1/incorrigible
+  book1/increment
+  book1/indifferent
+  book1/indigenous
+  book1/indigent
+  book1/indignant
+  book1/indolent
+  book1/indulgent
+  book1/ineffable
+  book1/inept
+  book1/inert
+  book1/inexorable
+  book1/infamous
+  book1/infatuated
+  book1/infer
+  book1/infinitesimal
+  book1/ingenuous
+  book1/inherent
+  book1/injunction
+  book1/innate
+  book1/innocuous
+  book1/inordinate
+  book1/insatiable
+  book1/insidious
+  book1/insinuate
+  book1/insipid
+  book1/insolent
+  book1/instigate
+  book1/insular
+  book1/insurgent
+  book1/integral
+  book1/intractable
+  book1/intransigent
+  book1/intrinsic
+  book1/introspective
+  book1/inundate
+  book1/invective
+  book1/inveterate
+  book1/irascible
+  book1/ironic
+  book1/irrevocable
+  book1/itinerant
+  book1/judicious
+  book1/juxtapose
+  book1/kinetic
+  book1/labyrinth
+  book1/laconic
+  book1/lament
+  book1/lampoon
+  book1/languish
+  book1/largess
+  book1/latent
+  book1/laud
+  book1/legacy
+  book1/lethargy
+  book1/levity
+  book1/libel
+  book1/litigate
+  book1/loquacious
+  book1/lucid
+  book1/lugubrious
+  book1/luminous
+  book1/machination
+  book1/magnanimous
+  book1/magnate
+  book1/malaise
+  book1/malfeasance
+  book1/malinger
+  book1/malleable
+  book1/mandate
+  book1/manifest
+  book1/manifesto
+  book1/marshal
+  book1/martial
+  book1/martyr
+  book1/matriculate
+  book1/maudlin
+  book1/maverick
+  book1/maxim
+  book1/mediate
+  book1/mellifluous
+  book1/mendacious
+  book1/mendicant
+  book1/mentor
+  book1/mercenary
+  book1/mercurial
+  book1/metamorphosis
+  book1/microcosm
+  book1/milieu
+  book1/minuscule
+  book1/misanthropic
+  book1/mitigate
+  book1/mollify
+  book1/monolithic
+  book1/moribund
+  book1/morose
+  book1/mortify
+  book1/mundane
+  book1/munificent
+  book1/myopia
+  book1/myriad
+  book1/narcissism
+  book1/nebulous
+  book1/nefarious
+  book1/neologism
+  book1/nepotism
+  book1/nihilism
+  book1/nominal
+  book1/nostalgia
+  book1/notorious
+  book1/novel
+  book1/noxious
+  book1/nuance
+  book1/obdurate
+  book1/obfuscate
+  book1/oblique
+  book1/oblivion
+  book1/obscure
+  book1/obsequious
+  book1/obtuse
+  book1/officious
+  book1/onerous
+  book1/opaque
+  book1/opulent
+  book1/orthodox
+  book1/ostensible
+  book1/ostentatious
+  book1/pacify
+  book1/painstaking
+  book1/palliate
+  book1/palpable
+  book1/paltry
+  book1/panacea
+  book1/paradigm
+  book1/paradox
+  book1/parochial
+  book1/parody
+  book1/parsimonious
+  book1/partisan
+  book1/patent
+  book1/paternal
+  book1/pathology
+  book1/patriarch
+  book1/patrician
+  book1/patronize
+  book1/paucity
+  book1/peccadillo
+  book1/pedantic
+  book1/pedestrian
+  book1/pejorative
+  book1/penchant
+  book1/penitent
+  book1/pensive
+  book1/peremptory
+  book1/perennial
+  book1/perfidy
+  book1/perfunctory
+  book1/peripatetic
+  book1/periphery
+  book1/perjury
+  book1/permeate
+  book1/pernicious
+  book1/perquisite
+  book1/pertinent
+  book1/perturb
+  book1/peruse
+  book1/pervade
+  book1/petulant
+  book1/philanthropy
+  book1/philistine
+  book1/pious
+  book1/pivotal
+  book1/placate
+  book1/plaintive
+  book1/platitude
+  book1/plebeian
+  book1/plethora
+  book1/poignant
+  book1/polarize
+  book1/polemic
+  book1/ponderous
+  book1/portent
+  book1/postulate
+  book1/pragmatic
+  book1/precedent
+  book1/precept
+  book1/precipitate
+  book1/precipitous
+  book1/preclude
+  book1/precursor
+  book1/predilection
+  book1/preeminent
+  book1/preempt
+  book1/premise
+  book1/prepossess
+  book1/prerogative
+  book1/prevail
+  book1/pristine
+  book1/prodigal
+  book1/prodigious
+  book1/prodigy
+  book1/profane
+  book1/profess
+  book1/proficient
+  book1/profligate
+  book1/profound
+  book1/profuse
+  book1/proletariat
+  book1/proliferate
+  book1/prolific
+  book1/promulgate
+  book1/propensity
+  book1/propitious
+  book1/proponent
+  book1/proprietary
+  book1/propriety
+  book1/prosaic
+  book1/proscribe
+  book1/proselytize
+  book1/protagonist
+  book1/protract
+  book1/provident
+  book1/provincial
+  book1/provisional
+  book1/proximity
+  book1/prudent
+  book1/purported
+  book1/putative
+  book1/qualify
+  book1/qualitative
+  book1/querulous
+  book1/quixotic
+  book1/ramification
+  book1/rancor
+  book1/rapacious
+  book1/rebuke
+  book1/rebut
+  book1/recalcitrant
+  book1/recant
+  book1/reciprocal
+  book1/reclusive
+  book1/recondite
+  book1/recrimination
+  book1/redolent
+  book1/redundant
+  book1/refute
+  book1/reiterate
+  book1/relegate
+  book1/relentless
+  book1/relinquish
+  book1/remonstrate
+  book1/renaissance
+  book1/renounce
+  book1/reparation
+  book1/repercussion
+  book1/replenish
+  book1/replete
+  book1/reprehensible
+  book1/reprisal
+  book1/reproach
+  book1/reprove
+  book1/repudiate
+  book1/requisite
+  book1/resolute
+  book1/respite
+  book1/reticent
+  book1/revere
+  book1/rhetoric
+  book1/rigorous
+  book1/robust
+  book1/rogue
+  book1/rudimentary
+  book1/ruminate
+  book1/rustic
+  book1/saccharine
+  book1/sacrilege
+  book1/sacrosanct
+  book1/sagacious
+  book1/salient
+  book1/salutary
+  book1/sanctimonious
+  book1/sanguine
+  book1/scintillate
+  book1/scrupulous
+  book1/scrutinize
+  book1/secular
+  book1/sedition
+  book1/sensory
+  book1/sentient
+  book1/sequester
+  book1/serendipity
+  book1/servile
+  book1/singular
+  book1/slander
+  book1/sloth
+  book1/sobriety
+  book1/solicitous
+  book1/solvent
+  book1/soporific
+  book1/sordid
+  book1/spawn
+  book1/specious
+  book1/sporadic
+  book1/spurious
+  book1/squalor
+  book1/squander
+  book1/stagnation
+  book1/static
+  book1/staunch
+  book1/steadfast
+  book1/stigmatize
+  book1/stipulate
+  book1/stoic
+  book1/stratum
+  book1/stricture
+  book1/strife
+  book1/stringent
+  book1/stymie
+  book1/subjugate
+  book1/sublime
+  book1/subordinate
+  book1/substantive
+  book1/subtle
+  book1/subversive
+  book1/succinct
+  book1/succumb
+  book1/supercilious
+  book1/superficial
+  book1/superfluous
+  book1/surfeit
+  book1/surreptitious
+  book1/surrogate
+  book1/sycophant
+  book1/synthesis
+  book1/tacit
+  book1/taciturn
+  book1/tangential
+  book1/tangible
+  book1/tantamount
+  book1/tautological
+  book1/temerity
+  book1/temperate
+  book1/tenable
+  book1/tenacious
+  book1/tenet
+  book1/tentative
+  book1/tenuous
+  book1/terse
+  book1/theology
+  book1/tirade
+  book1/torpor
+  book1/touchstone
+  book1/tout
+  book1/transcend
+  book1/transgress
+  book1/transient
+  book1/trepidation
+  book1/turpitude
+  book1/ubiquitous
+  book1/unconscionable
+  book1/unctuous
+  book1/uniform
+  book1/unremitting
+  book1/unwitting
+  book1/urbane
+  book1/usurp
+  book1/utilitarian
+  book1/utopia
+  book1/vacillate
+  book1/vapid
+  book1/vehement
+  book1/venal
+  book1/venerate
+  book1/veracity
+  book1/verbose
+  book1/verisimilitude
+  book1/vernacular
+  book1/vestige
+  book1/vex
+  book1/viable
+  book1/vicarious
+  book1/vicissitude
+  book1/vilify
+  book1/vindicate
+  book1/vindictive
+  book1/virtuoso
+  book1/virulent
+  book1/visionary
+  book1/vitiate
+  book1/vitriolic
+  book1/vocation
+  book1/vociferous
+  book1/volatile
+  book1/volition
+  book1/wanton
+  book1/willful
+  book1/wistful
+  book1/zealous
+  book2.ans/abase
+  book2.ans/abet
+  book2.ans/abeyance
+  book2.ans/abjure
+  book2.ans/abomination
+  book2.ans/aboriginal
+  book2.ans/abound
+  book2.ans/abrogate
+  book2.ans/accede
+  book2.ans/accentuate
+  book2.ans/access
+  book2.ans/acclaim
+  book2.ans/accord
+  book2.ans/accouterments
+  book2.ans/accrue
+  book2.ans/acquisitive
+  book2.ans/acquit
+  book2.ans/acronym
+  book2.ans/ad-lib
+  book2.ans/adage
+  book2.ans/adduce
+  book2.ans/adjourn
+  book2.ans/adjunct
+  book2.ans/advent
+  book2.ans/adventitious
+  book2.ans/advocate
+  book2.ans/affidavit
+  book2.ans/affiliate
+  book2.ans/affliction
+  book2.ans/afford
+  book2.ans/affront
+  book2.ans/aftermath
+  book2.ans/aggrandize
+  book2.ans/aggrieve
+  book2.ans/aghast
+  book2.ans/alchemy
+  book2.ans/alienate
+  book2.ans/allegiance
+  book2.ans/allegory
+  book2.ans/allot
+  book2.ans/altercation
+  book2.ans/amass
+  book2.ans/amid
+  book2.ans/anathema
+  book2.ans/ancillary
+  book2.ans/angst
+  book2.ans/annex
+  book2.ans/annuity
+  book2.ans/antedate
+  book2.ans/anterior
+  book2.ans/anthology
+  book2.ans/anthropomorphic
+  book2.ans/antipodal
+  book2.ans/antiquity
+  book2.ans/aperture
+  book2.ans/apex
+  book2.ans/apogee
+  book2.ans/apoplexy
+  book2.ans/apostasy
+  book2.ans/appalling
+  book2.ans/apparition
+  book2.ans/appellation
+  book2.ans/appendage
+  book2.ans/apportion
+  book2.ans/apposite
+  book2.ans/appraise
+  book2.ans/apprise
+  book2.ans/appurtenance
+  book2.ans/apropos
+  book2.ans/apt
+  book2.ans/arcade
+  book2.ans/archipelago
+  book2.ans/archives
+  book2.ans/arid
+  book2.ans/armament
+  book2.ans/armistice
+  book2.ans/arraign
+  book2.ans/arrant
+  book2.ans/arrears
+  book2.ans/arsenal
+  book2.ans/articulate
+  book2.ans/artisan
+  book2.ans/ascertain
+  book2.ans/ascribe
+  book2.ans/askance
+  book2.ans/aspersion
+  book2.ans/assail
+  book2.ans/assert
+  book2.ans/assess
+  book2.ans/astringent
+  book2.ans/asylum
+  book2.ans/atone
+  book2.ans/atrophy
+  book2.ans/attest
+  book2.ans/attribute
+  book2.ans/augur
+  book2.ans/august
+  book2.ans/auspices
+  book2.ans/auxiliary
+  book2.ans/avail
+  book2.ans/avant-garde
+  book2.ans/aversion
+  book2.ans/avert
+  book2.ans/avid
+  book2.ans/bacchanal
+  book2.ans/baleful
+  book2.ans/balk
+  book2.ans/ballyhoo
+  book2.ans/balm
+  book2.ans/bandy
+  book2.ans/banter
+  book2.ans/baroque
+  book2.ans/barrage
+  book2.ans/bauble
+  book2.ans/bedlam
+  book2.ans/begrudge
+  book2.ans/behest
+  book2.ans/bemoan
+  book2.ans/benediction
+  book2.ans/benighted
+  book2.ans/bestow
+  book2.ans/bilious
+  book2.ans/bivouac
+  book2.ans/blanch
+  book2.ans/bland
+  book2.ans/blandishment
+  book2.ans/bliss
+  book2.ans/bluster
+  book2.ans/bombast
+  "book2.ans/bon vivant"
+  "book2.ans/bona fide"
+  book2.ans/boon
+  book2.ans/boor
+  book2.ans/booty
+  book2.ans/botch
+  book2.ans/bracing
+  book2.ans/brandish
+  book2.ans/bravado
+  book2.ans/brawn
+  book2.ans/brazen
+  book2.ans/breach
+  book2.ans/brink
+  book2.ans/bristle
+  book2.ans/bromide
+  book2.ans/brouhaha
+  book2.ans/brusque
+  book2.ans/buffoon
+  book2.ans/bulwark
+  book2.ans/byzantine
+  book2.ans/cabal
+  book2.ans/cache
+  book2.ans/calamity
+  book2.ans/callous
+  book2.ans/calumny
+  book2.ans/canon
+  book2.ans/cant
+  book2.ans/canvass
+  book2.ans/capacious
+  book2.ans/capital
+  book2.ans/captivate
+  book2.ans/carcinogenic
+  book2.ans/cardinal
+  book2.ans/careen
+  book2.ans/cartography
+  book2.ans/cascade
+  book2.ans/cataclysm
+  book2.ans/caucus
+  book2.ans/cavalier
+  book2.ans/cavil
+  book2.ans/chaff
+  book2.ans/chameleon
+  book2.ans/champion
+  book2.ans/channel
+  book2.ans/chaste
+  book2.ans/cherub
+  book2.ans/chortle
+  book2.ans/churl
+  book2.ans/chutzpah
+  book2.ans/cipher
+  book2.ans/circumnavigate
+  book2.ans/citadel
+  book2.ans/clandestine
+  book2.ans/classic
+  book2.ans/cleave
+  book2.ans/climatic
+  book2.ans/cloister
+  book2.ans/clone
+  book2.ans/clout
+  book2.ans/cloy
+  book2.ans/coddle
+  book2.ans/cogitate
+  book2.ans/cohort
+  book2.ans/commemorate
+  book2.ans/commiserate
+  book2.ans/commodious
+  book2.ans/compatible
+  book2.ans/competent
+  book2.ans/compile
+  book2.ans/comply
+  book2.ans/composed
+  book2.ans/compromise
+  book2.ans/compunction
+  book2.ans/concave
+  book2.ans/concede
+  book2.ans/concentric
+  book2.ans/concert
+  book2.ans/concoct
+  book2.ans/concomitant
+  book2.ans/confederate
+  book2.ans/confer
+  book2.ans/confidant
+  book2.ans/configuration
+  book2.ans/conflagration
+  book2.ans/confluence
+  book2.ans/confound
+  book2.ans/congeal
+  book2.ans/conjugal
+  book2.ans/connive
+  book2.ans/conservatory
+  book2.ans/consign
+  book2.ans/consolidate
+  book2.ans/conspicuous
+  book2.ans/consternation
+  book2.ans/constituency
+  book2.ans/contempt
+  book2.ans/continuum
+  book2.ans/contraband
+  book2.ans/contretemps
+  book2.ans/contumely
+  book2.ans/conundrum
+  book2.ans/convene
+  book2.ans/conversant
+  book2.ans/converse
+  book2.ans/convey
+  book2.ans/conviction
+  book2.ans/convolution
+  book2.ans/copious
+  book2.ans/cordial
+  book2.ans/corollary
+  book2.ans/corporeal
+  book2.ans/correlation
+  book2.ans/corrosive
+  book2.ans/corrugated
+  book2.ans/coterie
+  book2.ans/cower
+  book2.ans/crass
+  book2.ans/craven
+  book2.ans/crescendo
+  book2.ans/crestfallen
+  book2.ans/crevice
+  book2.ans/cringe
+  book2.ans/critique
+  book2.ans/crux
+  book2.ans/cuisine
+  book2.ans/cull
+  book2.ans/curb
+  book2.ans/curmudgeon
+  book2.ans/cursory
+  book2.ans/debase
+  book2.ans/debunk
+  book2.ans/decree
+  book2.ans/decry
+  book2.ans/deem
+  book2.ans/deficit
+  book2.ans/defile
+  book2.ans/deft
+  book2.ans/defunct
+  book2.ans/degrade
+  book2.ans/deign
+  book2.ans/deity
+  book2.ans/dejected
+  book2.ans/delectable
+  book2.ans/delinquent
+  book2.ans/delve
+  book2.ans/demeanor
+  book2.ans/demise
+  book2.ans/demography
+  book2.ans/demur
+  book2.ans/demure
+  book2.ans/denomination
+  book2.ans/denote
+  book2.ans/denounce
+  book2.ans/depict
+  book2.ans/deplete
+  book2.ans/deplore
+  book2.ans/deploy
+  book2.ans/depose
+  book2.ans/depredate
+  book2.ans/derelict
+  book2.ans/desist
+  book2.ans/devout
+  book2.ans/diatribe
+  book2.ans/dichotomy
+  book2.ans/diffuse
+  book2.ans/dilapidate
+  book2.ans/dilate
+  book2.ans/dilemma
+  book2.ans/diminution
+  book2.ans/dire
+  book2.ans/dirge
+  book2.ans/disaffect
+  book2.ans/disarray
+  book2.ans/disclaim
+  book2.ans/discomfit
+  book2.ans/disconcert
+  book2.ans/discourse
+  book2.ans/discrepancy
+  book2.ans/discursive
+  book2.ans/disgruntle
+  book2.ans/disinformation
+  book2.ans/dismal
+  book2.ans/dismay
+  book2.ans/dispassionate
+  book2.ans/disperse
+  book2.ans/dispirit
+  book2.ans/disposition
+  book2.ans/disproportionate
+  book2.ans/disquiet
+  book2.ans/dissemble
+  book2.ans/dissent
+  book2.ans/disservice
+  book2.ans/dissident
+  book2.ans/dissuade
+  book2.ans/distinct
+  book2.ans/diurnal
+  book2.ans/divine
+  book2.ans/divulge
+  book2.ans/document
+  book2.ans/doldrums
+  book2.ans/doleful
+  book2.ans/dolt
+  book2.ans/dotage
+  "book2.ans/double entendre"
+  book2.ans/dour
+  book2.ans/downcast
+  book2.ans/downplay
+  book2.ans/draconian
+  book2.ans/droll
+  book2.ans/dross
+  book2.ans/duress
+  book2.ans/ebb
+  book2.ans/ecclesiastical
+  book2.ans/eclipse
+  book2.ans/ecosystem
+  book2.ans/edict
+  book2.ans/edifice
+  book2.ans/effectual
+  book2.ans/efficacy
+  book2.ans/effigy
+  book2.ans/elation
+  book2.ans/electorate
+  book2.ans/elegy
+  book2.ans/elite
+  book2.ans/elocution
+  book2.ans/emaciate
+  book2.ans/emanate
+  book2.ans/emancipate
+  book2.ans/embargo
+  book2.ans/embellish
+  book2.ans/embody
+  book2.ans/embroil
+  book2.ans/embryonic
+  book2.ans/emissary
+  book2.ans/empathy
+  book2.ans/empower
+  book2.ans/endear
+  book2.ans/engaging
+  book2.ans/enmity
+  book2.ans/ennui
+  book2.ans/ensue
+  book2.ans/entail
+  book2.ans/entity
+  book2.ans/entreat
+  book2.ans/entrepreneur
+  book2.ans/enumerate
+  book2.ans/envision
+  book2.ans/epicure
+  book2.ans/epilogue
+  book2.ans/epoch
+  book2.ans/equestrian
+  book2.ans/estimable
+  book2.ans/estrange
+  book2.ans/ethics
+  book2.ans/eulogy
+  book2.ans/evince
+  book2.ans/evoke
+  book2.ans/excise
+  book2.ans/exempt
+  book2.ans/exhume
+  book2.ans/exodus
+  book2.ans/exorbitant
+  book2.ans/expiate
+  book2.ans/explicate
+  book2.ans/exposition
+  book2.ans/expostulate
+  book2.ans/expunge
+  book2.ans/exquisite
+  book2.ans/extant
+  book2.ans/extort
+  book2.ans/extremity
+  book2.ans/exuberant
+  book2.ans/facade
+  book2.ans/facet
+  book2.ans/fallacy
+  book2.ans/fathom
+  book2.ans/faux
+  book2.ans/fawn
+  book2.ans/feign
+  book2.ans/fester
+  book2.ans/fetish
+  book2.ans/fiasco
+  book2.ans/fiat
+  book2.ans/fickle
+  book2.ans/figment
+  book2.ans/fiscal
+  book2.ans/fledgling
+  book2.ans/flippant
+  book2.ans/florid
+  book2.ans/fodder
+  book2.ans/folly
+  book2.ans/foray
+  book2.ans/forebode
+  book2.ans/foreclose
+  book2.ans/forensic
+  book2.ans/forestall
+  book2.ans/forswear
+  book2.ans/forte
+  book2.ans/forthright
+  book2.ans/foster
+  book2.ans/fragmentary
+  book2.ans/fruitful
+  book2.ans/fuel
+  book2.ans/fulminate
+  book2.ans/gaffe
+  book2.ans/galvanize
+  book2.ans/gambit
+  book2.ans/gamut
+  book2.ans/garner
+  book2.ans/gastronomy
+  book2.ans/generic
+  book2.ans/genesis
+  book2.ans/genocide
+  book2.ans/germane
+  book2.ans/ghastly
+  book2.ans/gratis
+  book2.ans/grievous
+  book2.ans/grimace
+  book2.ans/guise
+  book2.ans/habituate
+  book2.ans/halcyon
+  book2.ans/harass
+  book2.ans/harbinger
+  book2.ans/harp
+  book2.ans/harry
+  book2.ans/heinous
+  book2.ans/herald
+  book2.ans/hoary
+  book2.ans/homage
+  book2.ans/hubris
+  book2.ans/hypocrisy
+  book2.ans/idiom
+  book2.ans/imbue
+  book2.ans/impasse
+  book2.ans/impeach
+  book2.ans/impecunious
+  book2.ans/impede
+  book2.ans/impending
+  book2.ans/impenetrable
+  book2.ans/imperative
+  book2.ans/impetuous
+  book2.ans/implication
+  book2.ans/importune
+  book2.ans/impoverish
+  book2.ans/impregnable
+  book2.ans/impresario
+  book2.ans/impromptu
+  book2.ans/improvise
+  book2.ans/impunity
+  book2.ans/inadvertent
+  book2.ans/inalienable
+  book2.ans/incarnation
+  book2.ans/incendiary
+  book2.ans/inclination
+  book2.ans/inculcate
+  book2.ans/incumbent
+  book2.ans/incursion
+  book2.ans/indict
+  book2.ans/induce
+  book2.ans/ineluctable
+  book2.ans/ineradicable
+  book2.ans/inflammatory
+  book2.ans/influx
+  book2.ans/infraction
+  book2.ans/infrastructure
+  book2.ans/infringe
+  book2.ans/infuse
+  book2.ans/ingratiate
+  book2.ans/inimical
+  book2.ans/inimitable
+  book2.ans/innuendo
+  book2.ans/inquisition
+  book2.ans/insouciant
+  book2.ans/insufferable
+  book2.ans/insuperable
+  book2.ans/insurrection
+  book2.ans/integral
+  book2.ans/interim
+  book2.ans/interloper
+  book2.ans/interlude
+  book2.ans/interminable
+  book2.ans/intermittent
+  book2.ans/intersperse
+  book2.ans/intervene
+  book2.ans/intimate
+  book2.ans/intricate
+  book2.ans/intrigue
+  book2.ans/invidious
+  book2.ans/inviolate
+  book2.ans/invoke
+  book2.ans/iridescent
+  book2.ans/jargon
+  book2.ans/jaunt
+  book2.ans/jingoism
+  book2.ans/jocular
+  book2.ans/jubilation
+  book2.ans/junction
+  book2.ans/junta
+  book2.ans/karma
+  book2.ans/larceny
+  book2.ans/lascivious
+  book2.ans/lavish
+  book2.ans/lax
+  book2.ans/layman
+  book2.ans/liaison
+  book2.ans/licentious
+  book2.ans/limpid
+  book2.ans/listless
+  book2.ans/litany
+  book2.ans/livid
+  book2.ans/loath
+  book2.ans/lobby
+  book2.ans/lout
+  book2.ans/ludicrous
+  book2.ans/lyrical
+  book2.ans/malapropism
+  book2.ans/mania
+  book2.ans/marginal
+  book2.ans/materialistic
+  book2.ans/mawkish
+  book2.ans/meander
+  book2.ans/medium
+  book2.ans/melancholy
+  book2.ans/melee
+  book2.ans/menagerie
+  book2.ans/meticulous
+  book2.ans/millennium
+  book2.ans/mire
+  book2.ans/mode
+  book2.ans/modulate
+  book2.ans/momentum
+  book2.ans/moratorium
+  book2.ans/mores
+  book2.ans/motif
+  book2.ans/motley
+  book2.ans/municipal
+  book2.ans/muse
+  book2.ans/muster
+  book2.ans/mystic
+  book2.ans/nebulous
+  book2.ans/nemesis
+  book2.ans/neophyte
+  book2.ans/nirvana
+  book2.ans/noisome
+  book2.ans/nomadic
+  book2.ans/nomenclature
+  book2.ans/nonchalant
+  book2.ans/nullify
+  book2.ans/obeisance
+  book2.ans/objective
+  book2.ans/obtrusive
+  book2.ans/obviate
+  book2.ans/occult
+  book2.ans/odious
+  book2.ans/odyssey
+  book2.ans/olfactory
+  book2.ans/oligarchy
+  book2.ans/ominous
+  book2.ans/omniscient
+  book2.ans/opprobrious
+  book2.ans/ordinance
+  book2.ans/oscillate
+  book2.ans/osmosis
+  book2.ans/ostracize
+  book2.ans/oust
+  book2.ans/override
+  book2.ans/overture
+  book2.ans/oxymoron
+  book2.ans/palatable
+  book2.ans/pallor
+  book2.ans/pandemic
+  book2.ans/panegyric
+  book2.ans/parable
+  book2.ans/paragon
+  book2.ans/parallel
+  book2.ans/paranoia
+  book2.ans/paranormal
+  book2.ans/paroxysm
+  book2.ans/partition
+  book2.ans/pastoral
+  book2.ans/pathos
+  book2.ans/patina
+  book2.ans/patrimony
+  book2.ans/peculiar
+  book2.ans/peregrination
+  book2.ans/perpetrator
+  book2.ans/perpetuate
+  book2.ans/perverse
+  book2.ans/phantasm
+  book2.ans/phlegmatic
+  book2.ans/pilgrimage
+  book2.ans/placebo
+  book2.ans/platonic
+  book2.ans/plausible
+  book2.ans/pliable
+  book2.ans/plight
+  book2.ans/plunder
+  book2.ans/pluralism
+  book2.ans/pontificate
+  book2.ans/porous
+  book2.ans/posterity
+  book2.ans/posthumous
+  book2.ans/posture
+  book2.ans/prattle
+  book2.ans/precarious
+  book2.ans/precocious
+  book2.ans/predecessor
+  book2.ans/predicament
+  book2.ans/predispose
+  book2.ans/predominant
+  book2.ans/pregnant
+  book2.ans/prelude
+  book2.ans/premeditated
+  book2.ans/preponderance
+  book2.ans/presage
+  book2.ans/presentiment
+  book2.ans/presumably
+  book2.ans/presuppose
+  book2.ans/primal
+  book2.ans/pristine
+  book2.ans/privation
+  book2.ans/proclaim
+  book2.ans/procure
+  book2.ans/progeny
+  book2.ans/propagate
+  book2.ans/propound
+  book2.ans/protege
+  book2.ans/protocol
+  book2.ans/provocation
+  book2.ans/prowess
+  book2.ans/prurient
+  book2.ans/pseudonym
+  book2.ans/psyche
+  book2.ans/pummel
+  book2.ans/punctilious
+  book2.ans/pundit
+  book2.ans/pungent
+  book2.ans/punitive
+  book2.ans/purblind
+  book2.ans/puritanical
+  book2.ans/quaint
+  book2.ans/quandary
+  book2.ans/quasi
+  book2.ans/quay
+  book2.ans/quell
+  book2.ans/query
+  book2.ans/queue
+  book2.ans/quiescent
+  book2.ans/quintessential
+  book2.ans/quizzical
+  book2.ans/quotidian
+  book2.ans/rampant
+  book2.ans/rapture
+  book2.ans/rarefied
+  book2.ans/ratify
+  book2.ans/ratiocination
+  book2.ans/rationale
+  book2.ans/raucous
+  book2.ans/reactionary
+  book2.ans/rebuff
+  book2.ans/recidivism
+  book2.ans/reclaim
+  book2.ans/redeem
+  book2.ans/redress
+  book2.ans/referendum
+  book2.ans/refractory
+  book2.ans/regime
+  book2.ans/regimen
+  book2.ans/remission
+  book2.ans/remuneration
+  book2.ans/rend
+  book2.ans/render
+  book2.ans/repartee
+  book2.ans/replicate
+  book2.ans/repose
+  book2.ans/repress
+  book2.ans/reprimand
+  book2.ans/reprisal
+  book2.ans/reprobate
+  book2.ans/repugnant
+  book2.ans/resignation
+  book2.ans/resplendent
+  book2.ans/resurrection
+  book2.ans/retort
+  book2.ans/retrospect
+  book2.ans/revamp
+  book2.ans/revel
+  book2.ans/revile
+  book2.ans/revulsion
+  book2.ans/rhapsodize
+  book2.ans/ribald
+  book2.ans/rife
+  book2.ans/rivet
+  book2.ans/rout
+  book2.ans/rue
+  book2.ans/sally
+  book2.ans/salutation
+  book2.ans/sanction
+  book2.ans/sarcasm
+  book2.ans/savant
+  book2.ans/scant
+  book2.ans/schism
+  book2.ans/scorn
+  book2.ans/seamless
+  book2.ans/secede
+  book2.ans/seclusion
+  book2.ans/sect
+  book2.ans/sedentary
+  book2.ans/self-made
+  book2.ans/sententious
+  book2.ans/serene
+  book2.ans/serpentine
+  book2.ans/shackle
+  book2.ans/shibboleth
+  book2.ans/shrewd
+  book2.ans/singular
+  book2.ans/skirmish
+  book2.ans/skittish
+  book2.ans/slake
+  book2.ans/solace
+  book2.ans/solidarity
+  book2.ans/sophomoric
+  book2.ans/sordid
+  book2.ans/sovereign
+  book2.ans/spate
+  book2.ans/specious
+  book2.ans/specter
+  book2.ans/spectrum
+  book2.ans/spurn
+  book2.ans/stalwart
+  book2.ans/stark
+  book2.ans/stint
+  book2.ans/stipend
+  book2.ans/stolid
+  book2.ans/stout
+  book2.ans/stratagem
+  book2.ans/stupendous
+  book2.ans/stupor
+  book2.ans/subside
+  book2.ans/subsidiary
+  book2.ans/subsidize
+  book2.ans/substantiate
+  book2.ans/subterfuge
+  book2.ans/suffice
+  book2.ans/suffrage
+  book2.ans/suffuse
+  book2.ans/sumptuous
+  book2.ans/supersede
+  book2.ans/supine
+  book2.ans/supplication
+  book2.ans/suppress
+  book2.ans/surmise
+  book2.ans/surreal
+  book2.ans/susceptible
+  book2.ans/sweeping
+  book2.ans/syntax
+  book2.ans/systemic
+  book2.ans/tactical
+  book2.ans/taint
+  book2.ans/tedium
+  book2.ans/teem
+  book2.ans/temporal
+  book2.ans/temporize
+  book2.ans/tepid
+  book2.ans/thesis
+  book2.ans/thorny
+  book2.ans/threshold
+  book2.ans/throttle
+  book2.ans/thwart
+  book2.ans/timorous
+  book2.ans/titillate
+  book2.ans/titular
+  book2.ans/toil
+  book2.ans/tortuous
+  book2.ans/toxic
+  book2.ans/transfix
+  book2.ans/trauma
+  book2.ans/travesty
+  book2.ans/trenchant
+  book2.ans/triumvirate
+  book2.ans/tryst
+  book2.ans/tumult
+  book2.ans/turbid
+  book2.ans/turmoil
+  book2.ans/uncanny
+  book2.ans/underlying
+  book2.ans/undermine
+  book2.ans/underpinning
+  book2.ans/underscore
+  book2.ans/underwrite
+  book2.ans/unilateral
+  book2.ans/usury
+  book2.ans/vacuous
+  book2.ans/vagary
+  book2.ans/vanquish
+  book2.ans/veneer
+  book2.ans/verdant
+  book2.ans/verge
+  book2.ans/verity
+  book2.ans/vie
+  book2.ans/vigilant
+  book2.ans/vignette
+  book2.ans/viscous
+  book2.ans/vivacious
+  book2.ans/vogue
+  book2.ans/voluminous
+  book2.ans/voluptuous
+  book2.ans/voracious
+  book2.ans/waft
+  book2.ans/waive
+  book2.ans/wake
+  book2.ans/wane
+  book2.ans/warrant
+  book2.ans/wary
+  book2.ans/wizened
+  book2.ans/woe
+  book2.ans/wrath
+  book2.ans/zeitgeist
+  book2.ans/zenith
+  book2/.empty
+  book2/.A.list
+  book2/.B.list
+  book2/.C.list
+  book2/.D.list
+  book2/.E.list
+  book2/.F.list
+  book2/.G.list
+  book2/.H.list
+  book2/.I.list
+  book2/.J.list
+  book2/.K.list
+  book2/.L.list
+  book2/.M.list
+  book2/.N.list
+  book2/.O.list
+  book2/.P.list
+  book2/.Q.list
+  book2/.R.list
+  book2/.S.list
+  book2/.T.list
+  book2/.U.list
+  book2/.V.list
+  book2/.W.list
+  book2/.X.list
+  book2/.Y.list
+  book2/.Z.list
+  book2/abase
+  book2/abet
+  book2/abeyance
+  book2/abjure
+  book2/abomination
+  book2/aboriginal
+  book2/abound
+  book2/abrogate
+  book2/accede
+  book2/accentuate
+  book2/access
+  book2/acclaim
+  book2/accord
+  book2/accouterments
+  book2/accrue
+  book2/acquisitive
+  book2/acquit
+  book2/acronym
+  book2/ad-lib
+  book2/adage
+  book2/adduce
+  book2/adjourn
+  book2/adjunct
+  book2/advent
+  book2/adventitious
+  book2/advocate
+  book2/affidavit
+  book2/affiliate
+  book2/affliction
+  book2/afford
+  book2/affront
+  book2/aftermath
+  book2/aggrandize
+  book2/aggrieve
+  book2/aghast
+  book2/alchemy
+  book2/alienate
+  book2/allegiance
+  book2/allegory
+  book2/allot
+  book2/altercation
+  book2/amass
+  book2/amid
+  book2/anathema
+  book2/ancillary
+  book2/angst
+  book2/annex
+  book2/annuity
+  book2/antedate
+  book2/anterior
+  book2/anthology
+  book2/anthropomorphic
+  book2/antipodal
+  book2/antiquity
+  book2/aperture
+  book2/apex
+  book2/apogee
+  book2/apoplexy
+  book2/apostasy
+  book2/appalling
+  book2/apparition
+  book2/appellation
+  book2/appendage
+  book2/apportion
+  book2/apposite
+  book2/appraise
+  book2/apprise
+  book2/appurtenance
+  book2/apropos
+  book2/apt
+  book2/arcade
+  book2/archipelago
+  book2/archives
+  book2/arid
+  book2/armament
+  book2/armistice
+  book2/arraign
+  book2/arrant
+  book2/arrears
+  book2/arsenal
+  book2/articulate
+  book2/artisan
+  book2/ascertain
+  book2/ascribe
+  book2/askance
+  book2/aspersion
+  book2/assail
+  book2/assert
+  book2/assess
+  book2/astringent
+  book2/asylum
+  book2/atone
+  book2/atrophy
+  book2/attest
+  book2/attribute
+  book2/augur
+  book2/august
+  book2/auspices
+  book2/auxiliary
+  book2/avail
+  book2/avant-garde
+  book2/aversion
+  book2/avert
+  book2/avid
+  book2/bacchanal
+  book2/baleful
+  book2/balk
+  book2/ballyhoo
+  book2/balm
+  book2/bandy
+  book2/banter
+  book2/baroque
+  book2/barrage
+  book2/bauble
+  book2/bedlam
+  book2/begrudge
+  book2/behest
+  book2/bemoan
+  book2/benediction
+  book2/benighted
+  book2/bestow
+  book2/bilious
+  book2/bivouac
+  book2/blanch
+  book2/bland
+  book2/blandishment
+  book2/bliss
+  book2/bluster
+  book2/bombast
+  "book2/bon vivant"
+  "book2/bona fide"
+  book2/boon
+  book2/boor
+  book2/booty
+  book2/botch
+  book2/bracing
+  book2/brandish
+  book2/bravado
+  book2/brawn
+  book2/brazen
+  book2/breach
+  book2/brink
+  book2/bristle
+  book2/bromide
+  book2/brouhaha
+  book2/brusque
+  book2/buffoon
+  book2/bulwark
+  book2/byzantine
+  book2/cabal
+  book2/cache
+  book2/calamity
+  book2/callous
+  book2/calumny
+  book2/canon
+  book2/cant
+  book2/canvass
+  book2/capacious
+  book2/capital
+  book2/captivate
+  book2/carcinogenic
+  book2/cardinal
+  book2/careen
+  book2/cartography
+  book2/cascade
+  book2/cataclysm
+  book2/caucus
+  book2/cavalier
+  book2/cavil
+  book2/chaff
+  book2/chameleon
+  book2/champion
+  book2/channel
+  book2/chaste
+  book2/cherub
+  book2/chortle
+  book2/churl
+  book2/chutzpah
+  book2/cipher
+  book2/circumnavigate
+  book2/citadel
+  book2/clandestine
+  book2/classic
+  book2/cleave
+  book2/climatic
+  book2/cloister
+  book2/clone
+  book2/clout
+  book2/cloy
+  book2/coddle
+  book2/cogitate
+  book2/cohort
+  book2/commemorate
+  book2/commiserate
+  book2/commodious
+  book2/compatible
+  book2/competent
+  book2/compile
+  book2/comply
+  book2/composed
+  book2/compromise
+  book2/compunction
+  book2/concave
+  book2/concede
+  book2/concentric
+  book2/concert
+  book2/concoct
+  book2/concomitant
+  book2/confederate
+  book2/confer
+  book2/confidant
+  book2/configuration
+  book2/conflagration
+  book2/confluence
+  book2/confound
+  book2/congeal
+  book2/conjugal
+  book2/connive
+  book2/conservatory
+  book2/consign
+  book2/consolidate
+  book2/conspicuous
+  book2/consternation
+  book2/constituency
+  book2/contempt
+  book2/continuum
+  book2/contraband
+  book2/contretemps
+  book2/contumely
+  book2/conundrum
+  book2/convene
+  book2/conversant
+  book2/converse
+  book2/convey
+  book2/conviction
+  book2/convolution
+  book2/copious
+  book2/cordial
+  book2/corollary
+  book2/corporeal
+  book2/correlation
+  book2/corrosive
+  book2/corrugated
+  book2/coterie
+  book2/cower
+  book2/crass
+  book2/craven
+  book2/crescendo
+  book2/crestfallen
+  book2/crevice
+  book2/cringe
+  book2/critique
+  book2/crux
+  book2/cuisine
+  book2/cull
+  book2/curb
+  book2/curmudgeon
+  book2/cursory
+  book2/debase
+  book2/debunk
+  book2/decree
+  book2/decry
+  book2/deem
+  book2/deficit
+  book2/defile
+  book2/deft
+  book2/defunct
+  book2/degrade
+  book2/deign
+  book2/deity
+  book2/dejected
+  book2/delectable
+  book2/delinquent
+  book2/delve
+  book2/demeanor
+  book2/demise
+  book2/demography
+  book2/demur
+  book2/demure
+  book2/denomination
+  book2/denote
+  book2/denounce
+  book2/depict
+  book2/deplete
+  book2/deplore
+  book2/deploy
+  book2/depose
+  book2/depredate
+  book2/derelict
+  book2/desist
+  book2/devout
+  book2/diatribe
+  book2/dichotomy
+  book2/diffuse
+  book2/dilapidate
+  book2/dilate
+  book2/dilemma
+  book2/diminution
+  book2/dire
+  book2/dirge
+  book2/disaffect
+  book2/disarray
+  book2/disclaim
+  book2/discomfit
+  book2/disconcert
+  book2/discourse
+  book2/discrepancy
+  book2/discursive
+  book2/disgruntle
+  book2/disinformation
+  book2/dismal
+  book2/dismay
+  book2/dispassionate
+  book2/disperse
+  book2/dispirit
+  book2/disposition
+  book2/disproportionate
+  book2/disquiet
+  book2/dissemble
+  book2/dissent
+  book2/disservice
+  book2/dissident
+  book2/dissuade
+  book2/distinct
+  book2/diurnal
+  book2/divine
+  book2/divulge
+  book2/document
+  book2/doldrums
+  book2/doleful
+  book2/dolt
+  book2/dotage
+  "book2/double entendre"
+  book2/dour
+  book2/downcast
+  book2/downplay
+  book2/draconian
+  book2/droll
+  book2/dross
+  book2/duress
+  book2/ebb
+  book2/ecclesiastical
+  book2/eclipse
+  book2/ecosystem
+  book2/edict
+  book2/edifice
+  book2/effectual
+  book2/efficacy
+  book2/effigy
+  book2/elation
+  book2/electorate
+  book2/elegy
+  book2/elite
+  book2/elocution
+  book2/emaciate
+  book2/emanate
+  book2/emancipate
+  book2/embargo
+  book2/embellish
+  book2/embody
+  book2/embroil
+  book2/embryonic
+  book2/emissary
+  book2/empathy
+  book2/empower
+  book2/endear
+  book2/engaging
+  book2/enmity
+  book2/ennui
+  book2/ensue
+  book2/entail
+  book2/entity
+  book2/entreat
+  book2/entrepreneur
+  book2/enumerate
+  book2/envision
+  book2/epicure
+  book2/epilogue
+  book2/epoch
+  book2/equestrian
+  book2/estimable
+  book2/estrange
+  book2/ethics
+  book2/eulogy
+  book2/evince
+  book2/evoke
+  book2/excise
+  book2/exempt
+  book2/exhume
+  book2/exodus
+  book2/exorbitant
+  book2/expiate
+  book2/explicate
+  book2/exposition
+  book2/expostulate
+  book2/expunge
+  book2/exquisite
+  book2/extant
+  book2/extort
+  book2/extremity
+  book2/exuberant
+  book2/facade
+  book2/facet
+  book2/fallacy
+  book2/fathom
+  book2/faux
+  book2/fawn
+  book2/feign
+  book2/fester
+  book2/fetish
+  book2/fiasco
+  book2/fiat
+  book2/fickle
+  book2/figment
+  book2/fiscal
+  book2/fledgling
+  book2/flippant
+  book2/florid
+  book2/fodder
+  book2/folly
+  book2/foray
+  book2/forebode
+  book2/foreclose
+  book2/forensic
+  book2/forestall
+  book2/forswear
+  book2/forte
+  book2/forthright
+  book2/foster
+  book2/fragmentary
+  book2/fruitful
+  book2/fuel
+  book2/fulminate
+  book2/gaffe
+  book2/galvanize
+  book2/gambit
+  book2/gamut
+  book2/garner
+  book2/gastronomy
+  book2/generic
+  book2/genesis
+  book2/genocide
+  book2/germane
+  book2/ghastly
+  book2/gratis
+  book2/grievous
+  book2/grimace
+  book2/guise
+  book2/habituate
+  book2/halcyon
+  book2/harass
+  book2/harbinger
+  book2/harp
+  book2/harry
+  book2/heinous
+  book2/herald
+  book2/hoary
+  book2/homage
+  book2/hubris
+  book2/hypocrisy
+  book2/idiom
+  book2/imbue
+  book2/impasse
+  book2/impeach
+  book2/impecunious
+  book2/impede
+  book2/impending
+  book2/impenetrable
+  book2/imperative
+  book2/impetuous
+  book2/implication
+  book2/importune
+  book2/impoverish
+  book2/impregnable
+  book2/impresario
+  book2/impromptu
+  book2/improvise
+  book2/impunity
+  book2/inadvertent
+  book2/inalienable
+  book2/incarnation
+  book2/incendiary
+  book2/inclination
+  book2/inculcate
+  book2/incumbent
+  book2/incursion
+  book2/indict
+  book2/induce
+  book2/ineluctable
+  book2/ineradicable
+  book2/inflammatory
+  book2/influx
+  book2/infraction
+  book2/infrastructure
+  book2/infringe
+  book2/infuse
+  book2/ingratiate
+  book2/inimical
+  book2/inimitable
+  book2/innuendo
+  book2/inquisition
+  book2/insouciant
+  book2/insufferable
+  book2/insuperable
+  book2/insurrection
+  book2/integral
+  book2/interim
+  book2/interloper
+  book2/interlude
+  book2/interminable
+  book2/intermittent
+  book2/intersperse
+  book2/intervene
+  book2/intimate
+  book2/intricate
+  book2/intrigue
+  book2/invidious
+  book2/inviolate
+  book2/invoke
+  book2/iridescent
+  book2/jargon
+  book2/jaunt
+  book2/jingoism
+  book2/jocular
+  book2/jubilation
+  book2/junction
+  book2/junta
+  book2/karma
+  book2/larceny
+  book2/lascivious
+  book2/lavish
+  book2/lax
+  book2/layman
+  book2/liaison
+  book2/licentious
+  book2/limpid
+  book2/listless
+  book2/litany
+  book2/livid
+  book2/loath
+  book2/lobby
+  book2/lout
+  book2/ludicrous
+  book2/lyrical
+  book2/malapropism
+  book2/mania
+  book2/marginal
+  book2/materialistic
+  book2/mawkish
+  book2/meander
+  book2/medium
+  book2/melancholy
+  book2/melee
+  book2/menagerie
+  book2/meticulous
+  book2/millennium
+  book2/mire
+  book2/mode
+  book2/modulate
+  book2/momentum
+  book2/moratorium
+  book2/mores
+  book2/motif
+  book2/motley
+  book2/municipal
+  book2/muse
+  book2/muster
+  book2/mystic
+  book2/nebulous
+  book2/nemesis
+  book2/neophyte
+  book2/nirvana
+  book2/noisome
+  book2/nomadic
+  book2/nomenclature
+  book2/nonchalant
+  book2/nullify
+  book2/obeisance
+  book2/objective
+  book2/obtrusive
+  book2/obviate
+  book2/occult
+  book2/odious
+  book2/odyssey
+  book2/olfactory
+  book2/oligarchy
+  book2/ominous
+  book2/omniscient
+  book2/opprobrious
+  book2/ordinance
+  book2/oscillate
+  book2/osmosis
+  book2/ostracize
+  book2/oust
+  book2/override
+  book2/overture
+  book2/oxymoron
+  book2/palatable
+  book2/pallor
+  book2/pandemic
+  book2/panegyric
+  book2/parable
+  book2/paragon
+  book2/parallel
+  book2/paranoia
+  book2/paranormal
+  book2/paroxysm
+  book2/partition
+  book2/pastoral
+  book2/pathos
+  book2/patina
+  book2/patrimony
+  book2/peculiar
+  book2/peregrination
+  book2/perpetrator
+  book2/perpetuate
+  book2/perverse
+  book2/phantasm
+  book2/phlegmatic
+  book2/pilgrimage
+  book2/placebo
+  book2/platonic
+  book2/plausible
+  book2/pliable
+  book2/plight
+  book2/plunder
+  book2/pluralism
+  book2/pontificate
+  book2/porous
+  book2/posterity
+  book2/posthumous
+  book2/posture
+  book2/prattle
+  book2/precarious
+  book2/precocious
+  book2/predecessor
+  book2/predicament
+  book2/predispose
+  book2/predominant
+  book2/pregnant
+  book2/prelude
+  book2/premeditated
+  book2/preponderance
+  book2/presage
+  book2/presentiment
+  book2/presumably
+  book2/presuppose
+  book2/primal
+  book2/pristine
+  book2/privation
+  book2/proclaim
+  book2/procure
+  book2/progeny
+  book2/propagate
+  book2/propound
+  book2/protege
+  book2/protocol
+  book2/provocation
+  book2/prowess
+  book2/prurient
+  book2/pseudonym
+  book2/psyche
+  book2/pummel
+  book2/punctilious
+  book2/pundit
+  book2/pungent
+  book2/punitive
+  book2/purblind
+  book2/puritanical
+  book2/quaint
+  book2/quandary
+  book2/quasi
+  book2/quay
+  book2/quell
+  book2/query
+  book2/queue
+  book2/quiescent
+  book2/quintessential
+  book2/quizzical
+  book2/quotidian
+  book2/rampant
+  book2/rapture
+  book2/rarefied
+  book2/ratify
+  book2/ratiocination
+  book2/rationale
+  book2/raucous
+  book2/reactionary
+  book2/rebuff
+  book2/recidivism
+  book2/reclaim
+  book2/redeem
+  book2/redress
+  book2/referendum
+  book2/refractory
+  book2/regime
+  book2/regimen
+  book2/remission
+  book2/remuneration
+  book2/rend
+  book2/render
+  book2/repartee
+  book2/replicate
+  book2/repose
+  book2/repress
+  book2/reprimand
+  book2/reprisal
+  book2/reprobate
+  book2/repugnant
+  book2/resignation
+  book2/resplendent
+  book2/resurrection
+  book2/retort
+  book2/retrospect
+  book2/revamp
+  book2/revel
+  book2/revile
+  book2/revulsion
+  book2/rhapsodize
+  book2/ribald
+  book2/rife
+  book2/rivet
+  book2/rout
+  book2/rue
+  book2/sally
+  book2/salutation
+  book2/sanction
+  book2/sarcasm
+  book2/savant
+  book2/scant
+  book2/schism
+  book2/scorn
+  book2/seamless
+  book2/secede
+  book2/seclusion
+  book2/sect
+  book2/sedentary
+  book2/self-made
+  book2/sententious
+  book2/serene
+  book2/serpentine
+  book2/shackle
+  book2/shibboleth
+  book2/shrewd
+  book2/singular
+  book2/skirmish
+  book2/skittish
+  book2/slake
+  book2/solace
+  book2/solidarity
+  book2/sophomoric
+  book2/sordid
+  book2/sovereign
+  book2/spate
+  book2/specious
+  book2/specter
+  book2/spectrum
+  book2/spurn
+  book2/stalwart
+  book2/stark
+  book2/stint
+  book2/stipend
+  book2/stolid
+  book2/stout
+  book2/stratagem
+  book2/stupendous
+  book2/stupor
+  book2/subside
+  book2/subsidiary
+  book2/subsidize
+  book2/substantiate
+  book2/subterfuge
+  book2/suffice
+  book2/suffrage
+  book2/suffuse
+  book2/sumptuous
+  book2/supersede
+  book2/supine
+  book2/supplication
+  book2/suppress
+  book2/surmise
+  book2/surreal
+  book2/susceptible
+  book2/sweeping
+  book2/syntax
+  book2/systemic
+  book2/tactical
+  book2/taint
+  book2/tedium
+  book2/teem
+  book2/temporal
+  book2/temporize
+  book2/tepid
+  book2/thesis
+  book2/thorny
+  book2/threshold
+  book2/throttle
+  book2/thwart
+  book2/timorous
+  book2/titillate
+  book2/titular
+  book2/toil
+  book2/tortuous
+  book2/toxic
+  book2/transfix
+  book2/trauma
+  book2/travesty
+  book2/trenchant
+  book2/triumvirate
+  book2/tryst
+  book2/tumult
+  book2/turbid
+  book2/turmoil
+  book2/uncanny
+  book2/underlying
+  book2/undermine
+  book2/underpinning
+  book2/underscore
+  book2/underwrite
+  book2/unilateral
+  book2/usury
+  book2/vacuous
+  book2/vagary
+  book2/vanquish
+  book2/veneer
+  book2/verdant
+  book2/verge
+  book2/verity
+  book2/vie
+  book2/vigilant
+  book2/vignette
+  book2/viscous
+  book2/vivacious
+  book2/vogue
+  book2/voluminous
+  book2/voluptuous
+  book2/voracious
+  book2/waft
+  book2/waive
+  book2/wake
+  book2/wane
+  book2/warrant
+  book2/wary
+  book2/wizened
+  book2/woe
+  book2/wrath
+  book2/zeitgeist
+  book2/zenith
+
+
+Executable answer.cgi
+  main-is: answer.lhs
+  build-depends: base,haskell98,pretty,unix
+  other-modules: CGI,SWlib,Xhtml1
+  ghc-options: -Wall -O2
+Executable index.cgi
+  main-is: index.lhs
+  build depends: base,haskell98,pretty,unix
+  other-modules: CGI,SWlib,Xhtml1
+  ghc-options: -Wall -O2
+Executable start.cgi
+  main-is: start.lhs
+  build-depends: base,haskell98,pretty,unix
+  other-modules: CGI,SWlib,Xhtml1
+  ghc-options: -Wall -O2
+Executable sw.cgi
+  main-is: sw.lhs
+  build-depends: base,haskell98,pretty,unix,utf8-string
+  other-modules: CGI,SWlib,Xhtml1
+  ghc-options: -Wall -O2
+
+
diff --git a/experiment/parse/fail/9.cabal b/experiment/parse/fail/9.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..b8c86f7718dbb2b7d8868cca93e7d1a44704bcd2
--- /dev/null
+++ b/experiment/parse/fail/9.cabal
@@ -0,0 +1,40 @@
+name:         oeis
+version:      0.3.1
+stability:    experimental
+category:     Math
+synopsis:     Interface to the Online Encyclopedia of Integer Sequences
+description:  Interface to the Online Encyclopedia of Integer Sequences. See <http://oeis.org/>.
+author:       Brent Yorgey
+maintainer:   Brian Lewis <brian@lorf.org>
+license:      BSD3
+license-file: LICENSE
+
+cabal-version: >= 1.6
+build-type:    Custom
+
+data-files:
+  README
+  example/Catalan.hs
+
+extra-source-files:
+  src/test.hs
+
+library
+  hs-source-dirs:
+    src
+
+  exposed-modules:
+    Math.OEIS
+
+  build-depends:
+    base    == 3.* || == 4.*,
+    network == 2.*,
+    HTTP    >= 4000.0.2 || == 4000.1.*
+
+  ghc-options: -Wall
+  if impl(ghc >= 6.8)
+    ghc-options: -fwarn-tabs
+
+source-repository head
+  type:     git
+  location: git://github.com/bsl/oeis.git
diff --git a/experiment/parse/tst.cabal b/experiment/parse/tst.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..77cef4a07bc6e7ec6c0453c13088e9146b71acec
--- /dev/null
+++ b/experiment/parse/tst.cabal
@@ -0,0 +1,7 @@
+section {
+  foo:
+   foo
+ bar:bar
+baz:baz
+}
+
diff --git a/experiment/parse/tst2.cabal b/experiment/parse/tst2.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..738a629fab3085cdd1f19754a564e05b2610f9fa
--- /dev/null
+++ b/experiment/parse/tst2.cabal
@@ -0,0 +1,14 @@
+Library
+  build-depends:   base       >= 2   && < 5,
+  if flag(base4) { build-depends: base >= 4 } else { build-depends: base < 4 }
+                   filepath   >= 1   && < 1.4
+  if flag(base3) { build-depends: base >= 3 } else { build-depends: base < 3 }
+  if flag(base3)
+    Build-Depends: directory  >= 1   && < 1.2,
+                   process    >= 1   && < 1.2,
+                   old-time   >= 1   && < 1.2,
+                   containers >= 0.1 && < 0.6,
+                   array      >= 0.1 && < 0.5,
+                   pretty     >= 1   && < 1.2
+  else
+    baz:
diff --git a/experiment/parse/unpack-funcs.cabal b/experiment/parse/unpack-funcs.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..a555c6325f4149efda0a9ea6c0710a5e85c6990e
--- /dev/null
+++ b/experiment/parse/unpack-funcs.cabal
@@ -0,0 +1,29 @@
+name:		     unpack-funcs
+version:             0.1.2
+cabal-version:       >= 1.6
+tested-with:	     GHC
+category:            Control
+synopsis:	     Monad transformers that mirror worker-wrapper transformations.
+description:         Provides a typeclass and Template Haskell-driven instance generators that create "worker-wrapper"
+                     @ReaderT@ monad transformers, which unpacks the arguments of single-constructor data types.
+license:             BSD3
+license-file:	     LICENSE
+author:              Louis Wasserman
+maintainer:          wasserman.louis@gmail.com
+build-type:	     Simple
+
+source-repository head
+  type:              git
+  location:          git@github.com:lowasser/unpack-funcs.git
+
+Library{
+build-Depends:    base < 5.0.0.0, template-haskell >= 2.5.0.0, bytestring >= 0.9.1.0,
+                  vector >= 0.6, primitive >= 0.3, transformers
+ghc-options:
+  -Wall -fno-warn-name-shadowing -fno-warn-orphans
+exposed-modules:  
+  Control.Monad.Unpack
+other-modules:
+  Control.Monad.Unpack.Class,
+  Control.Monad.Unpack.TH
+}
diff --git a/experiment/parse/unpack-funcs/0.1.2/unpack-funcs.cabal b/experiment/parse/unpack-funcs/0.1.2/unpack-funcs.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..a555c6325f4149efda0a9ea6c0710a5e85c6990e
--- /dev/null
+++ b/experiment/parse/unpack-funcs/0.1.2/unpack-funcs.cabal
@@ -0,0 +1,29 @@
+name:		     unpack-funcs
+version:             0.1.2
+cabal-version:       >= 1.6
+tested-with:	     GHC
+category:            Control
+synopsis:	     Monad transformers that mirror worker-wrapper transformations.
+description:         Provides a typeclass and Template Haskell-driven instance generators that create "worker-wrapper"
+                     @ReaderT@ monad transformers, which unpacks the arguments of single-constructor data types.
+license:             BSD3
+license-file:	     LICENSE
+author:              Louis Wasserman
+maintainer:          wasserman.louis@gmail.com
+build-type:	     Simple
+
+source-repository head
+  type:              git
+  location:          git@github.com:lowasser/unpack-funcs.git
+
+Library{
+build-Depends:    base < 5.0.0.0, template-haskell >= 2.5.0.0, bytestring >= 0.9.1.0,
+                  vector >= 0.6, primitive >= 0.3, transformers
+ghc-options:
+  -Wall -fno-warn-name-shadowing -fno-warn-orphans
+exposed-modules:  
+  Control.Monad.Unpack
+other-modules:
+  Control.Monad.Unpack.Class,
+  Control.Monad.Unpack.TH
+}
diff --git a/experiment/parse/words.list b/experiment/parse/words.list
new file mode 100644
index 0000000000000000000000000000000000000000..10caab125fcc687e7796de6ed544f96c03e1f147
--- /dev/null
+++ b/experiment/parse/words.list
@@ -0,0 +1,1002 @@
+28468
+4870
+0 2695: a
+1 2658: the
+2 2560: for
+3 2521: and
+4 2363: to
+5 2165: of
+6 1878: is
+7 1851: this
+8 1636: in
+9 1368: with
+10 1280: library
+11 1212: package
+12 1171: haskell
+13 1134: it
+14 1047: that
+15 989: be
+16 977: an
+17 963: on
+18 871: as
+19 855: provides
+20 847: http
+21 817: by
+22 816: are
+23 815: can
+24 798: from
+25 693: data
+26 663: use
+27 606: you
+28 605: or
+29 596: which
+30 572: using
+31 558: functions
+32 538: see
+33 498: more
+34 491: type
+35 490: not
+36 489: used
+37 483: simple
+38 476: at
+39 454: code
+40 430: org
+41 430: also
+42 407: but
+43 389: all
+44 370: module
+45 367: file
+46 364: types
+47 362: other
+48 360: interface
+49 360: com
+50 359: some
+51 356: implementation
+52 331: has
+53 329: version
+54 329: files
+55 329: 1
+56 320: only
+57 314: 2
+58 311: example
+59 310: based
+60 309: if
+61 308: 0
+62 306: into
+63 293: will
+64 288: support
+65 282: have
+66 271: www
+67 267: your
+68 257: like
+69 256: api
+70 253: program
+71 250: information
+72 247: allows
+73 243: so
+74 242: system
+75 242: function
+76 240: any
+77 238: one
+78 238: -
+79 237: uses
+80 236: language
+81 236: contains
+82 234: monad
+83 231: these
+84 221: set
+85 219: such
+86 218: instances
+87 218: html
+88 212: i
+89 211: c
+90 205: when
+91 205: should
+92 204: time
+93 203: programming
+94 198: examples
+95 197: do
+96 196: documentation
+97 195: 3
+98 193: class
+99 191: than
+100 191: text
+101 190: new
+102 189: its
+103 188: available
+104 186: there
+105 185: ghc
+106 185: currently
+107 184: work
+108 184: no
+109 182: very
+110 181: values
+111 181: bindings
+112 176: useful
+113 176: them
+114 176: list
+115 175: format
+116 173: supports
+117 172: tool
+118 171: well
+119 171: note
+120 169: parser
+121 167: packages
+122 167: hackage
+123 166: two
+124 166: may
+125 165: programs
+126 164: run
+127 164: provide
+128 164: e
+129 162: make
+130 160: source
+131 160: features
+132 160: both
+133 159: where
+134 159: standard
+135 159: output
+136 159: need
+137 159: libraries
+138 158: provided
+139 158: github
+140 156: modules
+141 156: io
+142 156: been
+143 154: then
+144 153: please
+145 152: user
+146 152: same
+147 151: way
+148 150: operations
+149 149: changes
+150 148: they
+151 148: between
+152 147: most
+153 147: many
+154 147: =
+155 146: control
+156 146: about
+157 144: functional
+158 144: does
+159 143: write
+160 143: via
+161 143: found
+162 143: each
+163 142: web
+164 142: their
+165 142: applications
+166 141: number
+167 140: input
+168 140: easy
+169 140: different
+170 139: we
+171 139: was
+172 139: now
+173 138: written
+174 138: supported
+175 138: just
+176 138: framework
+177 138: cabal
+178 137: including
+179 136: includes
+180 136: get
+181 136: fast
+182 135: usage
+183 135: build
+184 134: over
+185 134: binding
+186 132: application
+187 131: project
+188 131: possible
+189 130: parsing
+190 130: implemented
+191 128: read
+192 128: instead
+193 128: command
+194 126: structures
+195 126: main
+196 126: https
+197 126: 4
+198 125: without
+199 124: efficient
+200 123: various
+201 123: instance
+202 123: functionality
+203 121: basic
+204 120: implements
+205 120: given
+206 119: structure
+207 119: how
+208 119: access
+209 118: syntax
+210 118: generate
+211 117: up
+212 117: similar
+213 116: classes
+214 115: test
+215 115: binary
+216 114: import
+217 114: g
+218 113: value
+219 113: tools
+220 112: want
+221 112: out
+222 112: combinators
+223 111: line
+224 111: defined
+225 111: 6
+226 109: generic
+227 108: string
+228 107: following
+229 106: xml
+230 106: common
+231 105: server
+232 105: however
+233 104: wrapper
+234 103: template
+235 103: performance
+236 103: net
+237 103: algorithm
+238 102: small
+239 101: directory
+240 100: utility
+241 100: lazy
+242 100: create
+243 100: compiler
+244 99: included
+245 99: here
+246 98: those
+247 98: order
+248 98: makes
+249 97: pure
+250 97: lists
+251 96: paper
+252 96: intended
+253 96: database
+254 95: writing
+255 95: client
+256 95: added
+257 94: 7
+258 94: 5
+259 93: it's
+260 92: tree
+261 92: through
+262 92: hs
+263 92: add
+264 91: x
+265 91: general
+266 91: full
+267 91: etc
+268 91: details
+269 91: default
+270 90: own
+271 90: name
+272 90: multiple
+273 89: while
+274 89: single
+275 89: since
+276 89: several
+277 89: designed
+278 89: automatically
+279 88: working
+280 88: first
+281 88: allow
+282 87: pdf
+283 87: dependencies
+284 86: systems
+285 86: much
+286 86: error
+287 85: works
+288 85: numbers
+289 84: defines
+290 83: wiki
+291 83: versions
+292 83: include
+293 83: backend
+294 82: memory
+295 82: install
+296 82: described
+297 82: core
+298 82: because
+299 81: under
+300 81: parse
+301 81: original
+302 80: running
+303 79: top
+304 79: state
+305 79: representation
+306 79: providing
+307 79: generated
+308 79: either
+309 79: around
+310 78: requires
+311 78: point
+312 78: handling
+313 78: complete
+314 77: release
+315 77: implementations
+316 77: graphics
+317 76: vector
+318 76: show
+319 76: rather
+320 75: level
+321 75: executable
+322 74: yet
+323 74: style
+324 74: network
+325 74: current
+326 73: good
+327 72: windows
+328 72: software
+329 72: map
+330 72: form
+331 72: building
+332 72: base
+333 72: arbitrary
+334 71: users
+335 71: collection
+336 70: results
+337 70: particular
+338 70: change
+339 70: called
+340 69: readme
+341 69: reading
+342 69: model
+343 69: find
+344 69: creating
+345 69: command-line
+346 68: strings
+347 68: random
+348 68: monadic
+349 68: implement
+350 68: high
+351 68: algorithms
+352 67: would
+353 67: utilities
+354 67: process
+355 67: page
+356 67: generating
+357 67: ]
+358 66: what
+359 66: transformer
+360 66: tests
+361 66: large
+362 66: interfaces
+363 66: haskellwiki
+364 66: generator
+365 66: generation
+366 66: game
+367 66: easily
+368 66: allowing
+369 65: inspired
+370 65: future
+371 65: formats
+372 65: even
+373 65: development
+374 65: built
+375 64: protocol
+376 64: generates
+377 64: directly
+378 64: 10
+379 63: transformers
+380 63: size
+381 63: return
+382 63: might
+383 63: help
+384 63: compile
+385 63: case
+386 63: better
+387 62: names
+388 62: compatible
+389 62: bytestring
+390 61: strict
+391 61: still
+392 61: made
+393 61: expressions
+394 61: environment
+395 61: convert
+396 60: result
+397 60: parallel
+398 60: needed
+399 60: must
+400 60: monads
+401 59: s
+402 59: o
+403 59: linux
+404 59: license
+405 59: extension
+406 59: edu
+407 59: don't
+408 59: addition
+409 58: pretty
+410 58: opengl
+411 58: free
+412 58: extensions
+413 58: embedded
+414 58: before
+415 58: alternative
+416 58: abstract
+417 57: processing
+418 57: fixed
+419 57: few
+420 57: experimental
+421 57: another
+422 56: within
+423 56: testing
+424 56: let
+425 56: elements
+426 56: cases
+427 55: specification
+428 55: rendering
+429 55: messages
+430 55: languages
+431 55: being
+432 54: trees
+433 54: specific
+434 54: required
+435 54: part
+436 54: known
+437 54: interpreter
+438 54: graph
+439 54: darcs
+440 54: call
+441 54: additional
+442 53: together
+443 53: space
+444 53: master
+445 53: installed
+446 53: conversion
+447 52: tutorial
+448 52: thus
+449 52: tested
+450 52: parsers
+451 52: objects
+452 52: look
+453 52: external
+454 51: variables
+455 51: takes
+456 51: safe
+457 51: homepage
+458 51: description
+459 51: dependency
+460 51: commands
+461 51: bug
+462 50: regular
+463 50: n
+464 50: gui
+465 50: ffi
+466 50: define
+467 49: portable
+468 49: less
+469 49: every
+470 49: dynamic
+471 49: design
+472 49: datatypes
+473 49: convenient
+474 48: three
+475 48: terms
+476 48: start
+477 48: specified
+478 48: sets
+479 48: send
+480 48: path
+481 48: open
+482 48: encoding
+483 48: check
+484 48: avoid
+485 47: things
+486 47: subset
+487 47: special
+488 47: repository
+489 47: method
+490 47: message
+491 47: means
+492 47: json
+493 47: idea
+494 47: existing
+495 47: computation
+496 47: complex
+497 47: calls
+498 47: bytestrings
+499 46: right
+500 46: projects
+501 46: prelude
+502 46: port
+503 46: options
+504 46: my
+505 46: making
+506 46: later
+507 46: itself
+508 46: handle
+509 46: feature
+510 46: events
+511 46: documents
+512 46: deprecated
+513 46: computations
+514 46: array
+515 46: after
+516 46: adds
+517 46: [
+518 46: 8
+519 45: suitable
+520 45: stream
+521 45: once
+522 45: linear
+523 45: expression
+524 45: event
+525 45: engine
+526 45: display
+527 45: custom
+528 45: could
+529 45: arguments
+530 45: +
+531 44: vectors
+532 44: unix
+533 44: take
+534 44: runtime
+535 44: low-level
+536 44: key
+537 44: internal
+538 44: ghci
+539 44: further
+540 44: back
+541 44: audio
+542 43: unicode
+543 43: split
+544 43: sequence
+545 43: search
+546 43: require
+547 43: produce
+548 43: methods
+549 43: machine
+550 43: local
+551 43: image
+552 43: errors
+553 43: easier
+554 43: done
+555 43: distributed
+556 43: changed
+557 43: arrays
+558 43: able
+559 43: 98
+560 42: typed
+561 42: rules
+562 42: reads
+563 42: purpose
+564 42: properties
+565 42: parts
+566 42: download
+567 42: developed
+568 42: definitions
+569 42: content
+570 42: channel
+571 42: b
+572 42: along
+573 41: too
+574 41: posix
+575 41: matching
+576 41: lets
+577 41: interactive
+578 41: high-level
+579 41: gtk
+580 41: git
+581 41: defining
+582 41: de
+583 41: configuration
+584 41: bit
+585 40: welcome
+586 40: script
+587 40: problem
+588 40: platform
+589 40: pattern
+590 40: operators
+591 40: natural
+592 40: google
+593 40: exception
+594 40: due
+595 40: doesn't
+596 40: cs
+597 40: authentication
+598 40: already
+599 40: --
+600 39: try
+601 39: started
+602 39: simply
+603 39: separate
+604 39: sample
+605 39: requests
+606 39: real
+607 39: quite
+608 39: mutable
+609 39: haddock
+610 39: extended
+611 39: exceptions
+612 39: contain
+613 39: compiled
+614 39: although
+615 38: underlying
+616 38: times
+617 38: store
+618 38: speed
+619 38: related
+620 38: problems
+621 38: perform
+622 38: p
+623 38: numeric
+624 38: manual
+625 38: irc
+626 38: integer
+627 38: images
+628 38: give
+629 38: f
+630 38: correct
+631 38: automatic
+632 38: approach
+633 38: against
+634 38: advanced
+635 38: 9
+636 37: were
+637 37: threads
+638 37: specify
+639 37: runs
+640 37: represented
+641 37: quickcheck
+642 37: query
+643 37: probably
+644 37: png
+645 37: old
+646 37: nice
+647 37: log
+648 37: extra
+649 37: evaluation
+650 37: docs
+651 37: definition
+652 37: containing
+653 37: analysis
+654 37: algebraic
+655 37: '
+656 36: yesod
+657 36: url
+658 36: tries
+659 36: static
+660 36: something
+661 36: sequences
+662 36: second
+663 36: removed
+664 36: patches
+665 36: optional
+666 36: needs
+667 36: mode
+668 36: limited
+669 36: index
+670 36: implementing
+671 36: graphs
+672 36: distribution
+673 36: blog
+674 36: ability
+675 36: 2010
+676 35: update
+677 35: until
+678 35: type-safe
+679 35: sourceforge
+680 35: serialization
+681 35: r
+682 35: processes
+683 35: online
+684 35: often
+685 35: least
+686 35: keep
+687 35: int
+688 35: handles
+689 35: fully
+690 35: fix
+691 35: element
+692 35: depend
+693 35: combinator
+694 35: blob
+695 35: applicative
+696 35: almost
+697 35: aims
+698 35: action
+699 34: words
+700 34: window
+701 34: view
+702 34: supporting
+703 34: stm
+704 34: representing
+705 34: replacement
+706 34: references
+707 34: print
+708 34: patterns
+709 34: parameters
+710 34: manipulating
+711 34: lightweight
+712 34: javascript
+713 34: explicit
+714 34: concurrent
+715 34: cannot
+716 34: according
+717 34: above
+718 34: 3d
+719 34: 12
+720 33: shell
+721 33: semantics
+722 33: select
+723 33: resources
+724 33: partial
+725 33: normal
+726 33: necessary
+727 33: music
+728 33: initial
+729 33: helper
+730 33: handler
+731 33: games
+732 33: flag
+733 33: fields
+734 33: families
+735 33: end
+736 33: dsl
+737 33: document
+738 33: created
+739 33: corresponding
+740 33: constant
+741 33: communication
+742 33: associated
+743 33: additionally
+744 33: actual
+745 32: wrappers
+746 32: type-level
+747 32: thread
+748 32: templates
+749 32: tags
+750 32: streams
+751 32: produces
+752 32: printing
+753 32: next
+754 32: long
+755 32: live
+756 32: lines
+757 32: know
+758 32: keys
+759 32: info
+760 32: home
+761 32: goal
+762 32: faster
+763 32: declarations
+764 32: comments
+765 32: channels
+766 32: c++
+767 32: argument
+768 31: variable
+769 31: v
+770 31: thanks
+771 31: table
+772 31: record
+773 31: queries
+774 31: put
+775 31: primitive
+776 31: present
+777 31: preprocessor
+778 31: plain
+779 31: per
+780 31: parameter
+781 31: ones
+782 31: native
+783 31: modified
+784 31: issues
+785 31: gnu
+786 31: flexible
+787 31: exports
+788 31: enough
+789 31: connection
+790 31: components
+791 31: commonly
+792 31: checking
+793 31: characters
+794 31: character
+795 31: algebra
+796 31: actions
+797 30: world
+798 30: word
+799 30: video
+800 30: suite
+801 30: stored
+802 30: storage
+803 30: request
+804 30: representations
+805 30: purely
+806 30: programmer
+807 30: practical
+808 30: powerful
+809 30: polymorphic
+810 30: persistent
+811 30: papers
+812 30: option
+813 30: object
+814 30: missing
+815 30: mechanism
+816 30: me
+817 30: loading
+818 30: load
+819 30: left
+820 30: ideas
+821 30: hash
+822 30: gives
+823 30: direct
+824 30: cairo
+825 30: bsd3
+826 30: [1
+827 29: wai
+828 29: unit
+829 29: track
+830 29: storable
+831 29: sources
+832 29: sometimes
+833 29: slow
+834 29: points
+835 29: others
+836 29: maybe
+837 29: logic
+838 29: integrated
+839 29: installation
+840 29: infinite
+841 29: having
+842 29: gtk2hs
+843 29: foreign
+844 29: explicitly
+845 29: datatype
+846 29: copy
+847 29: constructor
+848 29: composition
+849 29: comes
+850 29: builds
+851 29: best
+852 29: 2012
+853 28: whose
+854 28: whether
+855 28: upon
+856 28: updated
+857 28: reports
+858 28: pass
+859 28: offers
+860 28: moment
+861 28: meant
+862 28: manipulation
+863 28: management
+864 28: integration
+865 28: important
+866 28: forms
+867 28: follows
+868 28: extend
+869 28: execution
+870 28: down
+871 28: double
+872 28: diagrams
+873 28: detailed
+874 28: depends
+875 28: course
+876 28: context
+877 28: computer
+878 28: changelog
+879 28: boilerplate
+880 28: always
+881 28: 'data
+882 27: variety
+883 27: unlike
+884 27: typeclass
+885 27: session
+886 27: represent
+887 27: reference
+888 27: refer
+889 27: really
+890 27: raw
+891 27: primary
+892 27: post
+893 27: plus
+894 27: play
+895 27: platforms
+896 27: operation
+897 27: minimal
+898 27: last
+899 27: interesting
+900 27: higher
+901 27: graphical
+902 27: expected
+903 27: except
+904 27: especially
+905 27: enable
+906 27: en
+907 27: editor
+908 27: containers
+909 27: construction
+910 27: constraints
+911 27: cgi
+912 27: author
+913 26: wikipedia
+914 26: who
+915 26: website
+916 26: unboxed
+917 26: theory
+918 26: service
+919 26: scripts
+920 26: returns
+921 26: reactive
+922 26: quickly
+923 26: properly
+924 26: otherwise
+925 26: off
+926 26: nodes
+927 26: length
+928 26: layer
+929 26: latex
+930 26: happstack
+931 26: ftp
+932 26: focus
+933 26: flags
+934 26: field
+935 26: family
+936 26: extensible
+937 26: everything
+938 26: equality
+939 26: dealing
+940 26: converting
+941 26: constructors
+942 26: constraint
+943 26: config
+944 26: conal
+945 26: computing
+946 26: compatibility
+947 26: close
+948 26: arrow
+949 26: arithmetic
+950 26: appropriate
+951 26: abstraction
+952 25: unique
+953 25: tables
+954 25: svg
+955 25: starting
+956 25: short
+957 25: services
+958 25: servers
+959 25: render
+960 25: records
+961 25: primitives
+962 25: people
+963 25: originally
+964 25: modular
+965 25: maps
+966 25: m
+967 25: kind
+968 25: issue
+969 25: head
+970 25: generators
+971 25: finite
+972 25: filter
+973 25: fairly
+974 25: extends
+975 25: comparison
+976 25: block
+977 25: below
+978 25: adding
+979 24: widget
+980 24: ways
+981 24: us
+982 24: therefore
+983 24: sure
+984 24: standalone
+985 24: python
+986 24: plugin
+987 24: place
+988 24: parses
+989 24: outputs
+990 24: nothing
+991 24: notes
+992 24: named
+993 24: mtl
+994 24: mostly
+995 24: midi
+996 24: manager
+997 24: internally
+998 24: instructions
+999 24: h