diff --git a/Agda.cabal b/Agda.cabal
--- a/Agda.cabal
+++ b/Agda.cabal
@@ -1,5 +1,5 @@
 name:            Agda
-version:         2.2.4
+version:         2.2.6
 cabal-version:   >= 1.6.0.3 && < 2
 build-type:      Simple
 license:         OtherLicense
@@ -21,9 +21,9 @@
   Agda is also a proof assistant: It is an interactive system for
   writing and checking proofs. Agda is based on intuitionistic type
   theory, a foundational system for constructive mathematics developed
-  by the Swedish logician Per Martin-Löf. It has many similarities
-  with other proof assistants based on dependent types, such as Coq,
-  Epigram and NuPRL.
+  by the Swedish logician Per Martin-L&#xf6;f. It has many
+  similarities with other proof assistants based on dependent types,
+  such as Coq, Epigram and NuPRL.
   .
   Note that if you want to use the command-line program (agda), then
   you should also install the Agda-executable package. The Agda
@@ -34,7 +34,7 @@
   Note also that this library does not follow the package versioning
   policy, because the library is only intended to be used by the Emacs
   mode and the Agda-executable package.
-tested-with:     GHC == 6.10.3
+tested-with:     GHC == 6.10.4 && == 6.12.1
 extra-source-files: src/full/Agda/undefined.h
                     README
                     doc/release-notes/*.txt
@@ -49,14 +49,23 @@
 source-repository this
   type:     darcs
   location: http://code.haskell.org/Agda/
-  tag:      2.2.4
+  tag:      2.2.6
 
+flag use-locale
+  description:
+    Try to use the character encoding specified by the locale for most
+    of the IO going to/from stdin and stdout. (Note that source files
+    must always be encoded using UTF8.)
+
 library
   hs-source-dirs:  src/full
-  build-depends:   base >= 4.1 && < 4.2,
-                   mtl >= 1.1 && < 2,
-                   QuickCheck == 2.1.0.1,
-                   haskell98 >= 1.0.1 && < 2,
+  if flag(use-locale)
+    build-depends: base == 4.2.*
+  else
+    build-depends: base == 4.1.*,
+                   utf8-string == 0.3.*
+  build-depends:   mtl >= 1.1 && < 2,
+                   QuickCheck >= 2.1.0.2 && < 2.2,
                    haskell-src >= 1.0.1.1 && < 2,
                    containers >= 0.1.0 && < 1,
                    pretty >= 1 && < 2,
@@ -69,13 +78,11 @@
                    filepath >= 1.1 && < 2,
                    process >= 1.0.1.0 && < 2,
                    haskeline >= 0.3 && < 0.7,
-                   utf8-string >= 0.3 && < 0.4,
-                   xhtml >= 3000.2 && < 3000.3,
-                   syb >= 0.1 && < 0.2
-  if impl(ghc >= 6.10)
-    build-depends: ghc-prim >= 0.1 && < 1
+                   xhtml == 3000.2.*,
+                   syb == 0.1.*
   build-tools:     happy >= 1.15 && < 2,
                    alex >= 2.0.1 && < 3
+  extensions:      CPP
   exposed-modules: Agda.Main
                    Agda.Interaction.BasicOps
                    Agda.Interaction.GhciTop
@@ -97,6 +104,7 @@
                    Agda.Compiler.MAlonzo.Primitives
                    Agda.Interaction.CommandLine.CommandLine
                    Agda.Interaction.Exceptions
+                   Agda.Interaction.FindFile
                    Agda.Interaction.Highlighting.Emacs
                    Agda.Interaction.Highlighting.Generate
                    Agda.Interaction.Highlighting.HTML
@@ -162,7 +170,9 @@
                    Agda.TypeChecking.Free
                    Agda.TypeChecking.Implicit
                    Agda.TypeChecking.Injectivity
+                   Agda.TypeChecking.Level
                    Agda.TypeChecking.MetaVars
+                   Agda.TypeChecking.MetaVars.Occurs
                    Agda.TypeChecking.Monad.Base
                    Agda.TypeChecking.Monad.Builtin
                    Agda.TypeChecking.Monad.Closure
@@ -218,11 +228,12 @@
                    Agda.Utils.Graph
                    Agda.Utils.Hash
                    Agda.Utils.Impossible
-                   Agda.Utils.IO
+                   Agda.Utils.IO.Binary
+                   Agda.Utils.IO.Locale
+                   Agda.Utils.IO.UTF8
                    Agda.Utils.List
                    Agda.Utils.Map
                    Agda.Utils.Maybe
-                   Agda.Utils.Monad.Undo
                    Agda.Utils.Monad
                    Agda.Utils.Permutation
                    Agda.Utils.Pointer
@@ -230,7 +241,6 @@
                    Agda.Utils.QuickCheck
                    Agda.Utils.ReadP
                    Agda.Utils.SemiRing
-                   Agda.Utils.Serialise
                    Agda.Utils.Size
                    Agda.Utils.String
                    Agda.Utils.Suffix
@@ -241,20 +251,38 @@
                    Agda.Utils.Unicode
                    Agda.Utils.Warshall
                    Agda.Version
+                   Agda.Auto.Auto
+                   Agda.Auto.Convert
+                   Agda.Auto.Typecheck
+                   Agda.Auto.NarrowingSearch
+                   Agda.Auto.Print
+                   Agda.Auto.Syntax
+                   Agda.Auto.SearchControl
   other-modules:   Paths_Agda
-  ghc-options:     -auto-all -w -Werror -fwarn-dodgy-imports
+  if impl(ghc < 6.12)
+    ghc-options:   -auto-all -w -Werror -fwarn-dodgy-imports
                    -fwarn-duplicate-exports -fwarn-hi-shadowing
                    -fwarn-incomplete-patterns -fwarn-missing-fields
                    -fwarn-missing-methods -fwarn-overlapping-patterns
-  if impl(ghc >= 6.10)
-    ghc-options:   -fwarn-warnings-deprecations -fwarn-deprecated-flags
+                   -fwarn-warnings-deprecations -fwarn-deprecated-flags
                    -fwarn-dodgy-foreign-imports
+  if impl(ghc >= 6.12)
+    ghc-options:   -auto-all -w -Werror -fwarn-dodgy-imports
+                   -fwarn-duplicate-exports -fwarn-hi-shadowing
+                   -fwarn-incomplete-patterns -fwarn-missing-fields
+                   -fwarn-missing-methods -fwarn-overlapping-patterns
+                   -fwarn-warnings-deprecations -fwarn-deprecated-flags
+                   -fwarn-dodgy-foreign-imports
+                   -fwarn-wrong-do-bind -fwarn-dodgy-exports
 
 executable agda-mode
   hs-source-dirs:  src/agda-mode
   main-is:         Main.hs
   other-modules:   Paths_Agda
-  build-depends:   base >= 4.1 && < 4.2,
-                   filepath >= 1.1 && < 2,
-                   process >= 1.0.1.0 && < 2,
-                   utf8-string >= 0.3 && < 0.4
+  if flag(use-locale)
+    build-depends: base == 4.2.*
+  else
+    build-depends: base == 4.1.*,
+                   utf8-string == 0.3.*
+  build-depends:   filepath >= 1.1 && < 2,
+                   process >= 1.0.1.0 && < 2
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -20,3 +20,35 @@
 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+--------------------------------------------------------------------------------
+
+The file src/full/Agda/Utils/ReadP.hs is Copyright (c) The University of
+Glasgow 2002 and is licensed under a BSD-like license as follows:
+
+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 name of the University nor the names of its contributors may be
+used to endorse or promote products derived from this software without
+specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF
+GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
diff --git a/README b/README
--- a/README
+++ b/README
@@ -42,15 +42,13 @@
   1)  Install the prerequisites mentioned below.
 
   2a) If your system is Unix-like you can now hopefully install the
-      Agda 2 library, batch-mode tool and Emacs mode by running
-
-        make install PREFIX=<installation location>
+      Agda 2 library, batch-mode tool and Emacs mode by running the
+      following command:
 
-      (the PREFIX=<...> part can be omitted if the default location is
-      OK for you).
+        make install
 
-      If your system is not sufficiently Unix-like, or you want to have
-      more control, follow 2b instead.
+      If this does not work on your system, or you want to have more
+      control, you can follow 2b instead.
 
   2b) Run the following commands in the top-level directory of the
       Agda source tree:
@@ -119,7 +117,7 @@
    Alex:          http://www.haskell.org/alex/
    Happy:         http://www.haskell.org/happy/
    GNU Emacs:     http://www.gnu.org/software/emacs/
-   haskell-mode:  http://haskell.org/haskell-mode/
+   haskell-mode:  http://projects.haskell.org/haskellmode-emacs/
 
 You should also make sure that programs installed by cabal-install are
 on your shell's search path.
@@ -256,17 +254,22 @@
    You should see all the characters without white-boxes.
 
 ------------------------------------------------------------------------
-Installation script for (at least) Ubuntu
+Installation scripts for Ubuntu 9.10
 ------------------------------------------------------------------------
 
-Installs the development version.
+Installs a released version:
 
-  sudo apt-get install ghc6 happy alex darcs emacs haskell-mode zlib1g-dev
-  wget http://www.haskell.org/cabal/release/cabal-install-0.6.0.tar.gz
-  tar xzf cabal-install-0.6.0.tar.gz
-  cd cabal-install-0.6.0
+  sudo apt-get install agda-mode agda-bin
+
+Installs the development version:
+
+  sudo apt-get install ghc6 happy alex darcs emacs haskell-mode zlib1g-dev make
+  wget http://www.haskell.org/cabal/release/cabal-install-0.6.4/cabal-install-0.6.4.tar.gz
+  tar xzf cabal-install-0.6.4.tar.gz
+  cd cabal-install-0.6.4
   . bootstrap.sh
   cd ..
-  darcs get --partial http://code.haskell.org/Agda
+  $HOME/.cabal/bin/cabal update
+  darcs get --lazy http://code.haskell.org/Agda
   cd Agda
-  sudo make install
+  make CABAL_CMD="$HOME/.cabal/bin/cabal" install
diff --git a/dist/build/Agda/Syntax/Parser/Lexer.hs b/dist/build/Agda/Syntax/Parser/Lexer.hs
--- a/dist/build/Agda/Syntax/Parser/Lexer.hs
+++ b/dist/build/Agda/Syntax/Parser/Lexer.hs
@@ -48,19 +48,19 @@
 import GlaExts
 #endif
 alex_base :: AlexAddr
-alex_base = AlexA# "\xf8\xff\xff\xff\x6e\x00\x00\x00\xca\x00\x00\x00\x40\x01\x00\x00\x45\x01\x00\x00\x4a\x01\x00\x00\x50\x01\x00\x00\x73\x00\x00\x00\x7c\x00\x00\x00\x84\x00\x00\x00\x8b\x00\x00\x00\x94\x00\x00\x00\x9c\x00\x00\x00\xa4\xff\xff\xff\x77\x00\x00\x00\x56\x01\x00\x00\x70\x01\x00\x00\xa2\xff\xff\xff\x78\x00\x00\x00\xa1\xff\xff\xff\x79\x00\x00\x00\xa0\xff\xff\xff\x7a\x00\x00\x00\x9c\xff\xff\xff\xdc\x00\x00\x00\x90\xff\xff\xff\x0b\x00\x00\x00\xa9\xff\xff\xff\x81\x00\x00\x00\x9e\xff\xff\xff\x4e\x01\x00\x00\xaa\xff\xff\xff\x54\x01\x00\x00\xab\xff\xff\xff\x80\x00\x00\x00\x92\xff\xff\xff\x5a\x01\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\xff\xff\xff\xa8\xff\xff\xff\xb3\xff\xff\xff\x11\x00\x00\x00\x2f\x00\x00\x00\x2a\x00\x00\x00\x36\x00\x00\x00\x39\x00\x00\x00\x25\x00\x00\x00\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x00\x00\x8d\x00\x00\x00\xac\x00\x00\x00\xba\x00\x00\x00\x75\x01\x00\x00\x7a\x01\x00\x00\x80\x01\x00\x00\x9e\x01\x00\x00\xaa\x01\x00\x00\xc4\x01\x00\x00\xc9\x01\x00\x00\xcf\x01\x00\x00\xd4\x01\x00\x00\xe1\x01\x00\x00\xec\x01\x00\x00\xf1\x01\x00\x00\xf9\x01\x00\x00\xfe\x01\x00\x00\x1b\x02\x00\x00\x20\x02\x00\x00\x28\x02\x00\x00\x2d\x02\x00\x00\x38\x02\x00\x00\x46\x02\x00\x00\x50\x02\x00\x00\x55\x02\x00\x00\x5f\x02\x00\x00\x6d\x02\x00\x00\x77\x02\x00\x00\x7c\x02\x00\x00\x86\x02\x00\x00\x95\x02\x00\x00\xa1\x02\x00\x00\xa6\x02\x00\x00\xbe\x02\x00\x00\xc3\x02\x00\x00\xc8\x02\x00\x00\xe1\x02\x00\x00\xe6\x02\x00\x00\xeb\x02\x00\x00\x03\x03\x00\x00\x08\x03\x00\x00\x0d\x03\x00\x00\x12\x03\x00\x00\x2a\x03\x00\x00\x2f\x03\x00\x00\x34\x03\x00\x00\x39\x03\x00\x00\x54\x03\x00\x00\x5c\x03\x00\x00\x00\x00\x00\x00\x85\x00\x00\x00\xa7\x00\x00\x00\x70\x03\x00\x00\xa9\x00\x00\x00\xe1\x03\x00\x00\x52\x04\x00\x00\xc3\x04\x00\x00\x34\x05\x00\x00\xa5\x05\x00\x00\x01\x06\x00\x00\x8e\x00\x00\x00\x5d\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x06\x00\x00\x15\x07\x00\x00\x71\x07\x00\x00\xcd\x07\x00\x00\x29\x08\x00\x00\x85\x08\x00\x00\xe1\x08\x00\x00\x3d\x09\x00\x00\x99\x09\x00\x00\xf5\x09\x00\x00\x51\x0a\x00\x00\xad\x0a\x00\x00\x09\x0b\x00\x00\x65\x0b\x00\x00\xc1\x0b\x00\x00\x1d\x0c\x00\x00\x79\x0c\x00\x00\xd5\x0c\x00\x00\x31\x0d\x00\x00\x8d\x0d\x00\x00\xe9\x0d\x00\x00\x45\x0e\x00\x00\xa1\x0e\x00\x00\xfd\x0e\x00\x00\x59\x0f\x00\x00\xb5\x0f\x00\x00\x11\x10\x00\x00\x6d\x10\x00\x00\xc9\x10\x00\x00\x25\x11\x00\x00\x81\x11\x00\x00\xdd\x11\x00\x00\x39\x12\x00\x00\x95\x12\x00\x00\xf1\x12\x00\x00\x4d\x13\x00\x00\xa9\x13\x00\x00\x05\x14\x00\x00\x61\x14\x00\x00\xbd\x14\x00\x00\x19\x15\x00\x00\x75\x15\x00\x00\xd1\x15\x00\x00\x2d\x16\x00\x00\x89\x16\x00\x00\xe5\x16\x00\x00\x41\x17\x00\x00\x9d\x17\x00\x00\xf9\x17\x00\x00\x55\x18\x00\x00\xb1\x18\x00\x00\x0d\x19\x00\x00\x69\x19\x00\x00\xc5\x19\x00\x00\x21\x1a\x00\x00\x7d\x1a\x00\x00\xd9\x1a\x00\x00\x35\x1b\x00\x00\x91\x1b\x00\x00\xed\x1b\x00\x00\x49\x1c\x00\x00\xa5\x1c\x00\x00\x01\x1d\x00\x00\x5d\x1d\x00\x00\xb9\x1d\x00\x00\x15\x1e\x00\x00\x71\x1e\x00\x00\xcd\x1e\x00\x00\x29\x1f\x00\x00\x85\x1f\x00\x00\xe1\x1f\x00\x00\x3d\x20\x00\x00\x99\x20\x00\x00\xf5\x20\x00\x00\x51\x21\x00\x00\xad\x21\x00\x00\x09\x22\x00\x00\x65\x22\x00\x00\xc1\x22\x00\x00\x1d\x23\x00\x00\x79\x23\x00\x00\xd5\x23\x00\x00\x31\x24\x00\x00\x8d\x24\x00\x00\xe9\x24\x00\x00\x45\x25\x00\x00\xa1\x25\x00\x00\xfd\x25\x00\x00\x59\x26\x00\x00\xb5\x26\x00\x00\x11\x27\x00\x00\x6d\x27\x00\x00\xc9\x27\x00\x00\x25\x28\x00\x00\x81\x28\x00\x00\xdd\x28\x00\x00\x39\x29\x00\x00\x95\x29\x00\x00\xf1\x29\x00\x00\x4d\x2a\x00\x00\xa9\x2a\x00\x00\x05\x2b\x00\x00\x61\x2b\x00\x00\xbd\x2b\x00\x00\x19\x2c\x00\x00\x75\x2c\x00\x00\xd1\x2c\x00\x00\x2d\x2d\x00\x00\x89\x2d\x00\x00\xe5\x2d\x00\x00\x41\x2e\x00\x00\x9d\x2e\x00\x00\xf9\x2e\x00\x00\x55\x2f\x00\x00\xb1\x2f\x00\x00\x0d\x30\x00\x00\x69\x30\x00\x00\xc5\x30\x00\x00\x21\x31\x00\x00\x7d\x31\x00\x00\xd9\x31\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x35\x32\x00\x00\x91\x32\x00\x00\xed\x32\x00\x00\x49\x33\x00\x00\xa5\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x01\x34\x00\x00\x5d\x34\x00\x00\xb9\x34\x00\x00\x15\x35\x00\x00\x71\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x35\x00\x00\x29\x36\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x36\x00\x00\xe1\x36\x00\x00\x3d\x37\x00\x00\x99\x37\x00\x00\xf5\x37\x00\x00\x51\x38\x00\x00\xad\x38\x00\x00\x09\x39\x00\x00\x65\x39\x00\x00\xc1\x39\x00\x00\x1d\x3a\x00\x00\x79\x3a\x00\x00\xd5\x3a\x00\x00\x31\x3b\x00\x00\x8d\x3b\x00\x00\xe9\x3b\x00\x00\x45\x3c\x00\x00\xa1\x3c\x00\x00\xfd\x3c\x00\x00\x59\x3d\x00\x00\xb5\x3d\x00\x00\x11\x3e\x00\x00\x6d\x3e\x00\x00\xc9\x3e\x00\x00\x25\x3f\x00\x00\x81\x3f\x00\x00\xdd\x3f\x00\x00\x39\x40\x00\x00\x95\x40\x00\x00\xf1\x40\x00\x00\x4d\x41\x00\x00\xa9\x41\x00\x00\x05\x42\x00\x00\x61\x42\x00\x00\xbd\x42\x00\x00"#
+alex_base = AlexA# "\xf7\xff\xff\xff\x6c\x00\x00\x00\xc8\x00\x00\x00\x3c\x01\x00\x00\x40\x01\x00\x00\x44\x01\x00\x00\x4b\x01\x00\x00\x70\x00\x00\x00\x73\x00\x00\x00\x76\x00\x00\x00\x7a\x00\x00\x00\x7d\x00\x00\x00\x94\x00\x00\x00\xa3\xff\xff\xff\x81\x00\x00\x00\x82\x00\x00\x00\x68\x01\x00\x00\xa1\xff\xff\xff\x48\x01\x00\x00\xa0\xff\xff\xff\x49\x01\x00\x00\x9f\xff\xff\xff\x4f\x01\x00\x00\x9b\xff\xff\xff\x50\x01\x00\x00\x8f\xff\xff\xff\x51\x01\x00\x00\xa8\xff\xff\xff\x53\x01\x00\x00\x9d\xff\xff\xff\x54\x01\x00\x00\xa9\xff\xff\xff\x55\x01\x00\x00\xaa\xff\xff\xff\x57\x01\x00\x00\x91\xff\xff\xff\x58\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\xff\xff\xff\xa6\xff\xff\xff\xb1\xff\xff\xff\x16\x00\x00\x00\xb3\xff\xff\xff\x23\x00\x00\x00\x30\x00\x00\x00\x32\x00\x00\x00\x18\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x75\x00\x00\x00\xa0\x00\x00\x00\xb0\x00\x00\x00\xa6\x00\x00\x00\xb8\x00\x00\x00\x6f\x01\x00\x00\x75\x01\x00\x00\x9a\x01\x00\x00\xbe\x01\x00\x00\xc4\x01\x00\x00\xcd\x01\x00\x00\xd6\x01\x00\x00\xdc\x01\x00\x00\xf4\x01\x00\x00\xf9\x01\x00\x00\xfe\x01\x00\x00\x06\x02\x00\x00\x16\x02\x00\x00\x22\x02\x00\x00\x28\x02\x00\x00\x2e\x02\x00\x00\x34\x02\x00\x00\x40\x02\x00\x00\x4c\x02\x00\x00\x52\x02\x00\x00\x5a\x02\x00\x00\x74\x02\x00\x00\x7a\x02\x00\x00\x7f\x02\x00\x00\x9b\x02\x00\x00\xa1\x02\x00\x00\xa6\x02\x00\x00\xab\x02\x00\x00\xc3\x02\x00\x00\xc8\x02\x00\x00\xcd\x02\x00\x00\xd2\x02\x00\x00\xfc\x02\x00\x00\x01\x03\x00\x00\x07\x03\x00\x00\x0c\x03\x00\x00\x24\x03\x00\x00\x29\x03\x00\x00\x2e\x03\x00\x00\x33\x03\x00\x00\x4c\x03\x00\x00\x54\x03\x00\x00\x59\x03\x00\x00\x5e\x03\x00\x00\x64\x03\x00\x00\x7c\x03\x00\x00\x81\x03\x00\x00\x86\x03\x00\x00\x8b\x03\x00\x00\xa3\x03\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x9c\x00\x00\x00\xb2\x03\x00\x00\x9d\x00\x00\x00\x23\x04\x00\x00\x94\x04\x00\x00\x05\x05\x00\x00\x76\x05\x00\x00\xe7\x05\x00\x00\x43\x06\x00\x00\x88\x00\x00\x00\x9f\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x06\x00\x00\x57\x07\x00\x00\xb3\x07\x00\x00\x0f\x08\x00\x00\x6b\x08\x00\x00\xc7\x08\x00\x00\x23\x09\x00\x00\x7f\x09\x00\x00\xdb\x09\x00\x00\x37\x0a\x00\x00\x93\x0a\x00\x00\xef\x0a\x00\x00\x4b\x0b\x00\x00\xa7\x0b\x00\x00\x03\x0c\x00\x00\x5f\x0c\x00\x00\xbb\x0c\x00\x00\x17\x0d\x00\x00\x73\x0d\x00\x00\xcf\x0d\x00\x00\x2b\x0e\x00\x00\x87\x0e\x00\x00\xe3\x0e\x00\x00\x3f\x0f\x00\x00\x9b\x0f\x00\x00\xf7\x0f\x00\x00\x53\x10\x00\x00\xaf\x10\x00\x00\x0b\x11\x00\x00\x67\x11\x00\x00\xc3\x11\x00\x00\x1f\x12\x00\x00\x7b\x12\x00\x00\xd7\x12\x00\x00\x33\x13\x00\x00\x8f\x13\x00\x00\xeb\x13\x00\x00\x47\x14\x00\x00\xa3\x14\x00\x00\xff\x14\x00\x00\x5b\x15\x00\x00\xb7\x15\x00\x00\x13\x16\x00\x00\x6f\x16\x00\x00\xcb\x16\x00\x00\x27\x17\x00\x00\x83\x17\x00\x00\xdf\x17\x00\x00\x3b\x18\x00\x00\x97\x18\x00\x00\xf3\x18\x00\x00\x4f\x19\x00\x00\xab\x19\x00\x00\x07\x1a\x00\x00\x63\x1a\x00\x00\xbf\x1a\x00\x00\x1b\x1b\x00\x00\x77\x1b\x00\x00\xd3\x1b\x00\x00\x2f\x1c\x00\x00\x8b\x1c\x00\x00\xe7\x1c\x00\x00\x43\x1d\x00\x00\x9f\x1d\x00\x00\xfb\x1d\x00\x00\x57\x1e\x00\x00\xb3\x1e\x00\x00\x0f\x1f\x00\x00\x6b\x1f\x00\x00\xc7\x1f\x00\x00\x23\x20\x00\x00\x7f\x20\x00\x00\xdb\x20\x00\x00\x37\x21\x00\x00\x93\x21\x00\x00\xef\x21\x00\x00\x4b\x22\x00\x00\xa7\x22\x00\x00\x03\x23\x00\x00\x5f\x23\x00\x00\xbb\x23\x00\x00\x17\x24\x00\x00\x73\x24\x00\x00\xcf\x24\x00\x00\x2b\x25\x00\x00\x87\x25\x00\x00\xe3\x25\x00\x00\x3f\x26\x00\x00\x9b\x26\x00\x00\xf7\x26\x00\x00\x53\x27\x00\x00\xaf\x27\x00\x00\x0b\x28\x00\x00\x67\x28\x00\x00\xc3\x28\x00\x00\x1f\x29\x00\x00\x7b\x29\x00\x00\xd7\x29\x00\x00\x33\x2a\x00\x00\x8f\x2a\x00\x00\xeb\x2a\x00\x00\x47\x2b\x00\x00\xa3\x2b\x00\x00\xff\x2b\x00\x00\x5b\x2c\x00\x00\xb7\x2c\x00\x00\x13\x2d\x00\x00\x6f\x2d\x00\x00\xcb\x2d\x00\x00\x27\x2e\x00\x00\x83\x2e\x00\x00\xdf\x2e\x00\x00\x3b\x2f\x00\x00\x97\x2f\x00\x00\xf3\x2f\x00\x00\x4f\x30\x00\x00\xab\x30\x00\x00\x07\x31\x00\x00\x63\x31\x00\x00\xbf\x31\x00\x00\x1b\x32\x00\x00\x77\x32\x00\x00\xd3\x32\x00\x00\x2f\x33\x00\x00\x8b\x33\x00\x00\xe7\x33\x00\x00\x43\x34\x00\x00\x9f\x34\x00\x00\xfb\x34\x00\x00\x57\x35\x00\x00\xb3\x35\x00\x00\x0f\x36\x00\x00\x6b\x36\x00\x00\xc7\x36\x00\x00\x23\x37\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x7f\x37\x00\x00\xdb\x37\x00\x00\x37\x38\x00\x00\x93\x38\x00\x00\xef\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x4b\x39\x00\x00\xa7\x39\x00\x00\x03\x3a\x00\x00\x5f\x3a\x00\x00\xbb\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x3b\x00\x00\x73\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x3b\x00\x00\x2b\x3c\x00\x00\x87\x3c\x00\x00\xe3\x3c\x00\x00\x3f\x3d\x00\x00\x9b\x3d\x00\x00\xf7\x3d\x00\x00\x53\x3e\x00\x00\xaf\x3e\x00\x00\x0b\x3f\x00\x00\x67\x3f\x00\x00\xc3\x3f\x00\x00\x1f\x40\x00\x00\x7b\x40\x00\x00\xd7\x40\x00\x00\x33\x41\x00\x00\x8f\x41\x00\x00\xeb\x41\x00\x00\x47\x42\x00\x00\xa3\x42\x00\x00\xff\x42\x00\x00\x5b\x43\x00\x00\xb7\x43\x00\x00\x13\x44\x00\x00\x6f\x44\x00\x00\xcb\x44\x00\x00\x27\x45\x00\x00\x83\x45\x00\x00\xdf\x45\x00\x00\x3b\x46\x00\x00\x97\x46\x00\x00\xf3\x46\x00\x00\x4f\x47\x00\x00\xab\x47\x00\x00\x07\x48\x00\x00"#
 
 alex_table :: AlexAddr
-alex_table = AlexA# "\x00\x00\x35\x00\x77\x00\x35\x00\x35\x00\x35\x00\x11\x00\x13\x00\x15\x00\x17\x00\x19\x00\x1b\x00\x1d\x00\x1f\x00\x21\x00\x09\x00\x23\x00\x26\x00\xff\xff\x29\x00\x2d\x00\xff\xff\x2e\x00\x2f\x00\x35\x00\x29\x01\x0b\x01\x29\x01\x29\x01\x29\x01\x29\x01\x0a\x01\x04\x01\x05\x01\x29\x01\x29\x01\x29\x01\x76\x00\xfc\x00\x29\x01\x0c\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\xff\x00\xfe\x00\x29\x01\x00\x01\x29\x01\x02\x01\x08\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\xd8\x00\x29\x01\x29\x01\xd4\x00\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x07\x01\x29\x01\x29\x01\x01\x01\x29\x01\xcd\x00\x29\x01\xb5\x00\xaf\x00\x29\x01\x88\x00\x29\x01\xec\x00\x7e\x00\x29\x01\x29\x01\x7c\x00\xab\x00\x29\x01\xa0\x00\x94\x00\x29\x01\xbb\x00\x29\x01\x29\x01\xe6\x00\x29\x01\x83\x00\x29\x01\x29\x01\x29\x01\x38\x00\x03\x01\x09\x01\x29\x01\x35\x00\x78\x00\x35\x00\x35\x00\x35\x00\x10\x00\x2a\x00\x10\x00\x10\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x1c\x00\x0f\x00\x0f\x00\x0f\x00\xff\xff\xff\xff\x30\x00\x0b\x00\x35\x00\x0b\x00\x0b\x00\x0b\x00\x31\x00\x10\x00\x0c\x00\xff\xff\x0c\x00\x0c\x00\x0c\x00\x32\x00\x33\x00\x75\x00\x0f\x00\x0b\x00\x34\x00\x0b\x00\x0b\x00\x0b\x00\x2b\x00\xfa\x00\x0b\x00\x0c\x00\xff\xff\x0c\x00\x0c\x00\x0c\x00\x35\x00\x0c\x00\x35\x00\x35\x00\x35\x00\x39\x00\x37\x00\xff\xff\x6a\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf3\x00\x6c\x00\x0c\x00\xfd\x00\xfb\x00\x00\x00\x00\x00\x35\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x2c\x00\x00\x00\xff\xff\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x35\x00\x77\x00\x35\x00\x35\x00\x35\x00\x0d\x00\x12\x00\xff\xff\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x18\x00\x1e\x00\x24\x00\xff\xff\x3c\x00\x00\x00\x6b\x00\x35\x00\x29\x01\x0b\x01\x29\x01\x29\x01\x29\x01\x29\x01\x0a\x01\x04\x01\x05\x01\x29\x01\x29\x01\x29\x01\x76\x00\xfc\x00\x29\x01\x0c\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\x0d\x01\xff\x00\xfe\x00\x29\x01\x00\x01\x29\x01\x02\x01\x08\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\xd8\x00\x29\x01\x29\x01\xd4\x00\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x07\x01\x29\x01\x29\x01\x01\x01\x29\x01\xcd\x00\x29\x01\xb5\x00\xaf\x00\x29\x01\x88\x00\x29\x01\xec\x00\x7e\x00\x29\x01\x29\x01\x7c\x00\xab\x00\x29\x01\xa0\x00\x94\x00\x29\x01\xbb\x00\x29\x01\x29\x01\xe6\x00\x29\x01\x83\x00\x29\x01\x29\x01\x29\x01\x38\x00\x03\x01\x09\x01\x29\x01\x35\x00\x1a\x00\x35\x00\x35\x00\x35\x00\x35\x00\x77\x00\x35\x00\x35\x00\x35\x00\x35\x00\x79\x00\x35\x00\x35\x00\x35\x00\xff\xff\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\xff\xff\x0f\x00\x35\x00\x0f\x00\x0f\x00\x0f\x00\xff\xff\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x36\x00\x00\x00\x75\x00\x3e\x00\x00\x00\x00\x00\x0f\x00\x75\x00\x00\x00\x10\x00\xff\xff\x10\x00\x10\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x10\x00\x00\x00\x48\x00\x4f\x00\x00\x00\xff\xff\x00\x00\x00\x00\x3a\x00\x60\x00\xff\xff\x00\x00\x66\x00\x00\x00\x00\x00\x41\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xf4\x00\x00\x00\x6b\x00\x00\x00\x20\x00\xff\xff\x00\x00\x6b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x3b\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x44\x00\xff\xff\x00\x00\x3d\x00\x00\x00\x43\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x46\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x4a\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x4b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x4d\x00\x00\x00\x00\x00\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x50\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x52\x00\xff\xff\x00\x00\x53\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x56\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x59\x00\xff\xff\x00\x00\x57\x00\x00\x00\x00\x00\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x5d\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x5b\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x61\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x62\x00\xff\xff\x00\x00\x00\x00\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x64\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x67\x00\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x00\x00\x65\x00\x70\x00\x70\x00\x70\x00\x70\x00\x72\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x00\x00\x70\x00\x70\x00\x70\x00\x70\x00\x00\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\xff\xff\x70\x00\x00\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x00\x00\x00\x00\x70\x00\x70\x00\x70\x00\x70\x00\x72\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x00\x00\x70\x00\x70\x00\x70\x00\x70\x00\x00\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\xff\xff\x70\x00\x00\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x00\x00\x00\x00\x70\x00\x70\x00\x70\x00\x70\x00\x72\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x00\x00\x70\x00\x70\x00\x70\x00\x70\x00\x00\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\xff\xff\x70\x00\x00\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x00\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x72\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\xff\xff\x71\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x73\x00\x6f\x00\x6f\x00\x74\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\xff\xff\x6f\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x71\x00\x6f\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x00\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x00\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x00\x00\x71\x00\x2a\x01\x71\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x6d\x00\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x06\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x7a\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x7b\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xbe\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xa5\x00\x7d\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x7f\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x80\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x81\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x82\x00\x8b\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x84\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x85\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x86\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x87\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xdd\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x89\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x8a\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x8c\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x8d\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x8e\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x8f\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x90\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x91\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x92\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x93\x00\x2a\x01\x2a\x01\x9c\x00\x2a\x01\x2a\x01\xf9\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x95\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x96\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x97\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x98\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x99\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x9a\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xd1\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x9b\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x9d\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x9e\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x9f\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xa1\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xa2\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xa3\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xa4\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xa6\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xa7\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xa8\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xa9\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xaa\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xc5\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xac\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xad\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xae\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xb0\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xb1\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xb2\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xb3\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xb4\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xb6\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xb7\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xb8\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xb9\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xf2\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xba\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xbf\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xc0\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xbc\x00\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xbd\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xc1\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xc2\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xc3\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xc4\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xc6\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xc7\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xc8\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xc9\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xca\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xcb\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xcc\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xce\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xcf\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xd0\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\xde\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xd2\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xd3\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xd5\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xd6\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xd7\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xd9\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xda\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xdb\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xdc\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xe1\x00\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xe2\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xe3\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xe4\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xe5\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xe7\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xe8\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xe9\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xea\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xeb\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xed\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xee\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xef\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xf0\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xf1\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xf5\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xf6\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xf7\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\xf8\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2b\x01\x2a\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x00\x00\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x2b\x01\x2a\x01\x2b\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x29\x01\x2a\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x29\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x01\x2a\x01\x29\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x21\x01\x2a\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x26\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x26\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x13\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x21\x01\x2a\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x26\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x26\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x21\x01\x2a\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x0e\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x26\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x26\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x21\x01\x2a\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x12\x01\x12\x01\x12\x01\x12\x01\x11\x01\x12\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x12\x01\x12\x01\x12\x01\x12\x01\x11\x01\x12\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x28\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x21\x01\x2a\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x12\x01\x12\x01\x12\x01\x12\x01\x11\x01\x12\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x12\x01\x12\x01\x12\x01\x12\x01\x11\x01\x12\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x27\x01\x2a\x01\x27\x01\x21\x01\x2a\x01\x0f\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x12\x01\x12\x01\x12\x01\x12\x01\x11\x01\x12\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x12\x01\x12\x01\x12\x01\x12\x01\x11\x01\x12\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x21\x01\x2a\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x12\x01\x12\x01\x12\x01\x12\x01\x11\x01\x12\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x12\x01\x12\x01\x12\x01\x12\x01\x11\x01\x12\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x23\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x23\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x22\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x23\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x23\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x23\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x23\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x24\x01\x2a\x01\x24\x01\x2c\x01\x2a\x01\x18\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x17\x01\x1a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x17\x01\x1a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x17\x01\x1a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x17\x01\x1a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x25\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x17\x01\x1a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x17\x01\x1a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x17\x01\x1a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x17\x01\x1a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x25\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x28\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x29\x01\x2a\x01\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x00\x00\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x29\x01\x14\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x29\x01\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x2d\x01\x29\x01\x29\x01\x2e\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x29\x01\x2a\x01\x29\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x24\x01\x2a\x01\x24\x01\x2c\x01\x2a\x01\x1b\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x1b\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x27\x01\x2a\x01\x27\x01\x2c\x01\x2a\x01\x1e\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x1e\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x1f\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x20\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2c\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x00\x00\x2a\x01\x2b\x01\x2a\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x00\x00\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2c\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x2b\x01\x29\x01\x2b\x01\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x00\x00\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x2d\x01\x29\x01\x29\x01\x2e\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x01\x29\x01\x29\x01\x29\x01\x00\x00\x29\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x01\x2b\x01\x29\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x00\x00\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x00\x00\x2b\x01\x00\x00\x2b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+alex_table = AlexA# "\x00\x00\x7d\x00\x35\x00\x35\x00\x35\x00\x11\x00\x13\x00\x15\x00\x17\x00\x19\x00\x1b\x00\x1d\x00\x1f\x00\x21\x00\x09\x00\x23\x00\x26\x00\xff\xff\x29\x00\x2d\x00\x2e\x00\x2f\x00\x31\x00\x35\x00\x3d\x01\x1f\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x1e\x01\x18\x01\x19\x01\x3d\x01\x3d\x01\x3d\x01\x7c\x00\x10\x01\x3d\x01\x20\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x13\x01\x12\x01\x3d\x01\x14\x01\x3d\x01\x16\x01\x1c\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\xec\x00\x3d\x01\x3d\x01\xe8\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x1b\x01\x3d\x01\x3d\x01\x15\x01\x3d\x01\xe1\x00\x3d\x01\xc2\x00\xbc\x00\x3d\x01\x8e\x00\x3d\x01\x00\x01\x84\x00\x3d\x01\x3d\x01\x82\x00\xb8\x00\x3d\x01\xad\x00\xa1\x00\x3d\x01\x98\x00\x3d\x01\x3d\x01\xfa\x00\x3d\x01\x89\x00\x3d\x01\x3d\x01\x3d\x01\x38\x00\x17\x01\x1d\x01\x3d\x01\x7e\x00\x35\x00\x35\x00\x35\x00\x2a\x00\x10\x00\x10\x00\x10\x00\x0f\x00\x0f\x00\x0f\x00\x0b\x00\x0b\x00\x0b\x00\xff\xff\x0c\x00\x0c\x00\x0c\x00\x0b\x00\x0b\x00\x0b\x00\xff\xff\x35\x00\x0f\x00\x0f\x00\x0f\x00\x10\x00\x30\x00\x32\x00\x0f\x00\x33\x00\x2b\x00\x0b\x00\x34\x00\x37\x00\x7b\x00\x0c\x00\x70\x00\x0e\x01\x0b\x00\xff\xff\x0c\x00\x0c\x00\x0c\x00\x0f\x00\x35\x00\x35\x00\x35\x00\xff\xff\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x72\x00\x00\x00\x11\x01\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x01\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x2c\x00\x3a\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x0d\x00\xff\xff\x00\x00\x7d\x00\x35\x00\x35\x00\x35\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x71\x00\x35\x00\x3d\x01\x1f\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x1e\x01\x18\x01\x19\x01\x3d\x01\x3d\x01\x3d\x01\x7c\x00\x10\x01\x3d\x01\x20\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x21\x01\x13\x01\x12\x01\x3d\x01\x14\x01\x3d\x01\x16\x01\x1c\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\xec\x00\x3d\x01\x3d\x01\xe8\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x1b\x01\x3d\x01\x3d\x01\x15\x01\x3d\x01\xe1\x00\x3d\x01\xc2\x00\xbc\x00\x3d\x01\x8e\x00\x3d\x01\x00\x01\x84\x00\x3d\x01\x3d\x01\x82\x00\xb8\x00\x3d\x01\xad\x00\xa1\x00\x3d\x01\x98\x00\x3d\x01\x3d\x01\xfa\x00\x3d\x01\x89\x00\x3d\x01\x3d\x01\x3d\x01\x38\x00\x17\x01\x1d\x01\x3d\x01\x35\x00\x35\x00\x35\x00\x7d\x00\x35\x00\x35\x00\x35\x00\x7f\x00\x35\x00\x35\x00\x35\x00\xff\xff\xff\xff\xff\xff\x36\x00\x36\x00\x36\x00\x36\x00\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\x00\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x36\x00\x00\x00\x7b\x00\x3e\x00\x00\x00\x00\x00\x7b\x00\xff\xff\x10\x00\x10\x00\x10\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x4f\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\xff\xff\x00\x00\x6c\x00\x00\x00\x00\x00\x41\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x08\x01\x00\x00\x1e\x00\x71\x00\x18\x00\x22\x00\xff\xff\x71\x00\x24\x00\x00\x00\x1a\x00\x71\x00\x00\x00\x00\x00\x00\x00\x20\x00\x0e\x00\x00\x00\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x42\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x44\x00\x00\x00\x43\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x45\x00\xff\xff\x00\x00\x00\x00\x00\x00\x46\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x00\x00\x00\x00\x00\x00\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x4b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\xff\xff\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x55\x00\x54\x00\xff\xff\x00\x00\x56\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x58\x00\x00\x00\x59\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x5e\x00\x00\x00\x00\x00\x00\x00\x5d\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x63\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x64\x00\x66\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x69\x00\xff\xff\x68\x00\x00\x00\x67\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x65\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x00\x00\x00\x00\x76\x00\x6e\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x78\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\xff\xff\x76\x00\x00\x00\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x78\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\xff\xff\x76\x00\x00\x00\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x78\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x00\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\x76\x00\xff\xff\x76\x00\x00\x00\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x78\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\xff\xff\x77\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x00\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x79\x00\x75\x00\x75\x00\x7a\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\xff\xff\x75\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x77\x00\x75\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x77\x00\x00\x00\x77\x00\x3e\x01\x77\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x73\x00\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x1a\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x80\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x81\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd2\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb2\x00\x83\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x85\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x86\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x87\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x88\x00\x91\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x8a\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x8b\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x8c\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x8d\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf1\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x8f\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x90\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x92\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x93\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x94\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x95\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc6\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x06\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x96\x00\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x97\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x99\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x9a\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x9b\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x9c\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x9d\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x9e\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x9f\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa0\x00\x3e\x01\x3e\x01\xa9\x00\x3e\x01\x3e\x01\x0d\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa2\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa3\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa5\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa6\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa7\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe5\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xa8\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xaa\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xab\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xac\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xae\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xaf\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb0\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb1\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb3\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb5\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb6\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb7\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd9\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xb9\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xba\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xbb\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xbd\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xbe\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xbf\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc0\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xcf\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc1\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc3\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc5\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc7\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc8\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xc9\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xca\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xcb\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xcc\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xcd\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xce\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd3\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd0\x00\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd1\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd5\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd6\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd7\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xd8\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xda\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xdb\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xdc\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xdd\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xde\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xdf\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe0\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe2\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe3\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\xf2\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe6\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe7\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xe9\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xea\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xeb\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xed\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xee\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xef\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf0\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf5\x00\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\xf3\x00\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf6\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf7\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf8\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xf9\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xfb\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xfc\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xfd\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xfe\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\xff\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x01\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x02\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x03\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x04\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x05\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x09\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x0a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x0b\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x0c\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3f\x01\x3e\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3e\x01\x3f\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3d\x01\x3e\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x01\x3e\x01\x3d\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x35\x01\x3e\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x27\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x35\x01\x3e\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x35\x01\x3e\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x22\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3a\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x35\x01\x3e\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3c\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x35\x01\x3e\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3b\x01\x3e\x01\x3b\x01\x35\x01\x3e\x01\x23\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x24\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x35\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x25\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x37\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x37\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x36\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x37\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x37\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x2a\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x37\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x37\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x38\x01\x3e\x01\x38\x01\x40\x01\x3e\x01\x2c\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x39\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x39\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3c\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3d\x01\x3e\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x00\x00\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x28\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x41\x01\x3d\x01\x3d\x01\x42\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3e\x01\x3d\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x38\x01\x3e\x01\x38\x01\x40\x01\x3e\x01\x2f\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x2f\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3b\x01\x3e\x01\x3b\x01\x40\x01\x3e\x01\x32\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x32\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x40\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x00\x00\x3e\x01\x3f\x01\x3e\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x40\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3d\x01\x3f\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x00\x00\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x41\x01\x3d\x01\x3d\x01\x42\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x01\x3d\x01\x3d\x01\x3d\x01\x00\x00\x3d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x01\x3f\x01\x3d\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x00\x00\x3f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
 
 alex_check :: AlexAddr
-alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x62\x00\x65\x00\x67\x00\x69\x00\x6e\x00\x7b\x00\x63\x00\x6f\x00\x64\x00\x7d\x00\x65\x00\x0a\x00\x0a\x00\x0a\x00\x65\x00\x0a\x00\x6e\x00\x64\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x09\x00\x7b\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x7b\x00\x09\x00\x20\x00\x0b\x00\x0c\x00\x0d\x00\x63\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x6f\x00\x64\x00\x2d\x00\x20\x00\x09\x00\x65\x00\x0b\x00\x0c\x00\x0d\x00\x7d\x00\x21\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x20\x00\x0b\x00\x0c\x00\x0d\x00\x2d\x00\x23\x00\x0a\x00\x2d\x00\x0a\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x6f\x00\x2d\x00\x20\x00\x2e\x00\x2e\x00\xff\xff\xff\xff\x20\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x5c\x00\xff\xff\x20\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x5c\x00\x62\x00\x20\x00\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\x67\x00\xff\xff\xff\xff\x69\x00\x63\x00\x65\x00\x0a\x00\x2d\x00\xff\xff\x7b\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x09\x00\x6e\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x09\x00\x20\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\x20\x00\xff\xff\x2d\x00\x23\x00\xff\xff\xff\xff\x20\x00\x2d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\x42\x00\x43\x00\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x49\x00\x20\x00\xff\xff\x4c\x00\xff\xff\xff\xff\x4f\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x64\x00\x74\x00\xff\xff\x7b\x00\xff\xff\x6f\x00\x20\x00\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x7b\x00\x5c\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\x49\x00\x20\x00\xff\xff\x7d\x00\xff\xff\x54\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x4e\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\x53\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x49\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x55\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\x4c\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\x49\x00\xff\xff\xff\xff\x54\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x4f\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x4d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x50\x00\x20\x00\xff\xff\x49\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x44\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x41\x00\x20\x00\xff\xff\x5f\x00\xff\xff\xff\xff\x20\x00\x54\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x59\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x45\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x50\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x4d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x50\x00\x20\x00\xff\xff\xff\xff\x4f\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x52\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\x20\x00\x49\x00\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x45\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+alex_check = AlexA# "\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x62\x00\x65\x00\x67\x00\x69\x00\x6e\x00\x7b\x00\x63\x00\x6f\x00\x64\x00\x7d\x00\x65\x00\x0a\x00\x0a\x00\x0a\x00\x65\x00\x6e\x00\x64\x00\x63\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0b\x00\x0c\x00\x0d\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x20\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x7b\x00\x6f\x00\x20\x00\x64\x00\x7d\x00\x20\x00\x65\x00\x23\x00\x2d\x00\x20\x00\x2d\x00\x21\x00\x20\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x2d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x6f\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x2d\x00\xff\xff\x2e\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2e\x00\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x5c\x00\x23\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\x5c\x00\x20\x00\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\xff\xff\x7b\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x0a\x00\x20\x00\x0a\x00\x0a\x00\x0a\x00\x20\x00\x0a\x00\x0a\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\x2d\x00\x23\x00\xff\xff\xff\xff\x2d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x42\x00\x43\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x20\x00\xff\xff\x4c\x00\xff\xff\xff\xff\x4f\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\x67\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x63\x00\x7b\x00\x69\x00\x64\x00\x20\x00\x7b\x00\x65\x00\xff\xff\x6e\x00\x7b\x00\xff\xff\xff\xff\xff\xff\x6f\x00\x5c\x00\xff\xff\x7b\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7b\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x7d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x50\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x49\x00\xff\xff\x54\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x4f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x4e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x49\x00\xff\xff\xff\xff\xff\xff\x55\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x4c\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x20\x00\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x4e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x50\x00\x49\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x45\x00\x4c\x00\x20\x00\xff\xff\x44\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x44\x00\xff\xff\x41\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x50\x00\xff\xff\xff\xff\xff\xff\x59\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x45\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x4d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x50\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x4f\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x52\x00\x53\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x42\x00\x20\x00\x49\x00\xff\xff\x53\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x45\x00\x4c\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x21\x00\x4e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
 
 alex_deflt :: AlexAddr
-alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x27\x00\xff\xff\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\x69\x00\xff\xff\xff\xff\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\x00\x27\x00\xff\xff\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\x27\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\xff\xff\xff\xff\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
 
-alex_accept = listArray (0::Int,302) [[],[(AlexAccPred  (alex_action_23) ( not' eof ))],[],[(AlexAcc (alex_action_26))],[],[(AlexAcc (alex_action_25))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40))],[],[(AlexAccPred  (alex_action_0) (alexRightContext 37))],[(AlexAccPred  (alex_action_0) (alexRightContext 37)),(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_0) (alexRightContext 37))],[(AlexAccPred  (alex_action_0) (alexRightContext 37)),(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccSkip)],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccPred  (alex_action_4) ( inState code ))],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_69))],[(AlexAccPred  (alex_action_18) ( not' (followedBy '#') ))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[(AlexAccPred  (alex_action_18) ( not' (followedBy '#') ))],[],[(AlexAccPred  (alex_action_19) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_19) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_75))],[(AlexAccPred  (alex_action_19) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_19) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_75))],[(AlexAccPred  (alex_action_19) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_75))],[(AlexAccPred  (alex_action_19) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_75))],[(AlexAccPred  (alex_action_19) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_19) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_19) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_21))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_27))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_28))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_30))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_31))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_53))],[],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_56))],[(AlexAcc (alex_action_57))],[],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_61))],[(AlexAcc (alex_action_62))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_70))],[(AlexAcc (alex_action_71))],[(AlexAcc (alex_action_72))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_74))],[],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_75))],[],[],[]]
-{-# LINE 184 "src/full/Agda/Syntax/Parser/Lexer.x" #-}
+alex_accept = listArray (0::Int,322) [[],[(AlexAccPred  (alex_action_24) ( not' eof ))],[],[(AlexAcc (alex_action_27))],[],[(AlexAcc (alex_action_26))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40))],[],[(AlexAccPred  (alex_action_0) (alexRightContext 37))],[(AlexAccPred  (alex_action_0) (alexRightContext 37)),(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_0) (alexRightContext 37))],[(AlexAccPred  (alex_action_0) (alexRightContext 37)),(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccSkip)],[(AlexAccPred  (alex_action_1) (alexRightContext 40)),(AlexAcc (alex_action_2))],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccPred  (alex_action_4) ( inState code ))],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_72))],[(AlexAccPred  (alex_action_19) ( not' (followedBy '#') ))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[(AlexAccPred  (alex_action_19) ( not' (followedBy '#') ))],[],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_78))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_78))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_78))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_78))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_20) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_22))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_28))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_30))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_31))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_56))],[],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_60))],[],[(AlexAcc (alex_action_61))],[(AlexAcc (alex_action_62))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_69))],[(AlexAcc (alex_action_70))],[(AlexAcc (alex_action_71))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_77))],[],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_78))],[],[],[]]
+{-# LINE 187 "src/full/Agda/Syntax/Parser/Lexer.x" #-}
 
 
 -- | This is the initial state for parsing a literate file. Code blocks
@@ -157,63 +157,66 @@
 alex_action_13 =  keyword KwCOMPILED_TYPE 
 alex_action_14 =  keyword KwCOMPILED 
 alex_action_15 =  keyword KwIMPORT 
-alex_action_16 =  keyword KwLINE 
-alex_action_17 =  withInterval $ TokString 
-alex_action_18 =  nestedComment 
-alex_action_19 =  withInterval TokComment 
-alex_action_21 =  begin bol_ 
-alex_action_23 =  offsideRule 
-alex_action_25 =  endWith newLayoutContext 
-alex_action_26 =  emptyLayout 
-alex_action_27 =  keyword KwLet 
-alex_action_28 =  keyword KwIn 
-alex_action_29 =  keyword KwWhere 
-alex_action_30 =  keyword KwField 
-alex_action_31 =  keyword KwWith 
-alex_action_32 =  keyword KwPostulate 
-alex_action_33 =  keyword KwPrimitive 
-alex_action_34 =  keyword KwOpen 
-alex_action_35 =  keyword KwImport 
-alex_action_36 =  keyword KwModule 
-alex_action_37 =  keyword KwData 
-alex_action_38 =  keyword KwCoData 
-alex_action_39 =  keyword KwRecord 
-alex_action_40 =  keyword KwInfix 
-alex_action_41 =  keyword KwInfixL 
-alex_action_42 =  keyword KwInfixR 
-alex_action_43 =  keyword KwMutual 
-alex_action_44 =  keyword KwAbstract 
-alex_action_45 =  keyword KwPrivate 
-alex_action_46 =  keyword KwSet 
-alex_action_47 =  keyword KwProp 
-alex_action_48 =  keyword KwForall 
-alex_action_49 =  withInterval' (read . drop 3) TokSetN 
-alex_action_50 =  keyword KwUsing 
-alex_action_51 =  keyword KwHiding 
-alex_action_52 =  keyword KwRenaming 
-alex_action_53 =  endWith $ keyword KwTo 
-alex_action_54 =  keyword KwPublic 
-alex_action_55 =  hole 
-alex_action_56 =  symbol SymEllipsis 
-alex_action_57 =  symbol SymDot 
-alex_action_58 =  symbol SymSemi 
-alex_action_59 =  symbol SymColon 
-alex_action_60 =  symbol SymEqual 
-alex_action_61 =  symbol SymUnderscore 
-alex_action_62 =  symbol SymQuestionMark 
-alex_action_63 =  symbol SymBar 
-alex_action_64 =  symbol SymOpenParen 
-alex_action_65 =  symbol SymCloseParen 
-alex_action_66 =  symbol SymArrow 
-alex_action_67 =  symbol SymLambda 
-alex_action_68 =  symbol SymAs 
-alex_action_69 =  symbol SymOpenBrace 
-alex_action_70 =  symbol SymCloseBrace 
-alex_action_71 =  litChar 
-alex_action_72 =  litString 
-alex_action_73 =  literal LitInt 
-alex_action_74 =  literal LitFloat 
-alex_action_75 =  identifier 
+alex_action_16 =  keyword KwIMPOSSIBLE 
+alex_action_17 =  keyword KwLINE 
+alex_action_18 =  withInterval $ TokString 
+alex_action_19 =  nestedComment 
+alex_action_20 =  withInterval TokComment 
+alex_action_22 =  begin bol_ 
+alex_action_24 =  offsideRule 
+alex_action_26 =  endWith newLayoutContext 
+alex_action_27 =  emptyLayout 
+alex_action_28 =  keyword KwLet 
+alex_action_29 =  keyword KwIn 
+alex_action_30 =  keyword KwWhere 
+alex_action_31 =  keyword KwField 
+alex_action_32 =  keyword KwWith 
+alex_action_33 =  keyword KwRewrite 
+alex_action_34 =  keyword KwPostulate 
+alex_action_35 =  keyword KwPrimitive 
+alex_action_36 =  keyword KwOpen 
+alex_action_37 =  keyword KwImport 
+alex_action_38 =  keyword KwModule 
+alex_action_39 =  keyword KwData 
+alex_action_40 =  keyword KwCoData 
+alex_action_41 =  keyword KwRecord 
+alex_action_42 =  keyword KwConstructor 
+alex_action_43 =  keyword KwInfix 
+alex_action_44 =  keyword KwInfixL 
+alex_action_45 =  keyword KwInfixR 
+alex_action_46 =  keyword KwMutual 
+alex_action_47 =  keyword KwAbstract 
+alex_action_48 =  keyword KwPrivate 
+alex_action_49 =  keyword KwSet 
+alex_action_50 =  keyword KwProp 
+alex_action_51 =  keyword KwForall 
+alex_action_52 =  withInterval' (read . drop 3) TokSetN 
+alex_action_53 =  keyword KwUsing 
+alex_action_54 =  keyword KwHiding 
+alex_action_55 =  keyword KwRenaming 
+alex_action_56 =  endWith $ keyword KwTo 
+alex_action_57 =  keyword KwPublic 
+alex_action_58 =  hole 
+alex_action_59 =  symbol SymEllipsis 
+alex_action_60 =  symbol SymDot 
+alex_action_61 =  symbol SymSemi 
+alex_action_62 =  symbol SymColon 
+alex_action_63 =  symbol SymEqual 
+alex_action_64 =  symbol SymUnderscore 
+alex_action_65 =  symbol SymQuestionMark 
+alex_action_66 =  symbol SymBar 
+alex_action_67 =  symbol SymOpenParen 
+alex_action_68 =  symbol SymCloseParen 
+alex_action_69 =  symbol SymArrow 
+alex_action_70 =  symbol SymLambda 
+alex_action_71 =  symbol SymAs 
+alex_action_72 =  symbol SymOpenBrace 
+alex_action_73 =  symbol SymCloseBrace 
+alex_action_74 =  litChar 
+alex_action_75 =  litString 
+alex_action_76 =  literal LitInt 
+alex_action_77 =  literal LitFloat 
+alex_action_78 =  identifier 
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 {-# LINE 1 "<built-in>" #-}
diff --git a/dist/build/Agda/Syntax/Parser/Parser.hs b/dist/build/Agda/Syntax/Parser/Parser.hs
--- a/dist/build/Agda/Syntax/Parser/Parser.hs
+++ b/dist/build/Agda/Syntax/Parser/Parser.hs
@@ -6,3231 +6,3520 @@
       moduleParser
     , exprParser
     , tokensParser
-    ) where
-
-import Control.Monad
-import Control.Monad.State
-import Data.Char  (isDigit)
-import Data.List
-import Data.Maybe
-import qualified Data.Traversable as T
-
-import Agda.Syntax.Position
-import Agda.Syntax.Parser.Monad
-import Agda.Syntax.Parser.Lexer
-import Agda.Syntax.Parser.Tokens
-import Agda.Syntax.Concrete
-import Agda.Syntax.Concrete.Name
-import Agda.Syntax.Concrete.Pretty
-import Agda.Syntax.Common
-import Agda.Syntax.Fixity
-import Agda.Syntax.Literal
-
-import Agda.Utils.Monad
-#if __GLASGOW_HASKELL__ >= 503
-import Data.Array
-#else
-import Array
-#endif
-#if __GLASGOW_HASKELL__ >= 503
-import GHC.Exts
-#else
-import GlaExts
-#endif
-
--- parser produced by Happy Version 1.17
-
-newtype HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57 = HappyAbsSyn HappyAny
-#if __GLASGOW_HASKELL__ >= 607
-type HappyAny = GHC.Exts.Any
-#else
-type HappyAny = forall a . a
-#endif
-happyIn6 :: ([Token]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn6 x = unsafeCoerce# x
-{-# INLINE happyIn6 #-}
-happyOut6 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Token])
-happyOut6 x = unsafeCoerce# x
-{-# INLINE happyOut6 #-}
-happyIn7 :: ([Token]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn7 x = unsafeCoerce# x
-{-# INLINE happyIn7 #-}
-happyOut7 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Token])
-happyOut7 x = unsafeCoerce# x
-{-# INLINE happyOut7 #-}
-happyIn8 :: (Token) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn8 x = unsafeCoerce# x
-{-# INLINE happyIn8 #-}
-happyOut8 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Token)
-happyOut8 x = unsafeCoerce# x
-{-# INLINE happyOut8 #-}
-happyIn9 :: (()) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn9 x = unsafeCoerce# x
-{-# INLINE happyIn9 #-}
-happyOut9 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (())
-happyOut9 x = unsafeCoerce# x
-{-# INLINE happyOut9 #-}
-happyIn10 :: (([Pragma], [Declaration])) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn10 x = unsafeCoerce# x
-{-# INLINE happyIn10 #-}
-happyOut10 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (([Pragma], [Declaration]))
-happyOut10 x = unsafeCoerce# x
-{-# INLINE happyOut10 #-}
-happyIn11 :: t11 -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn11 x = unsafeCoerce# x
-{-# INLINE happyIn11 #-}
-happyOut11 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> t11
-happyOut11 x = unsafeCoerce# x
-{-# INLINE happyOut11 #-}
-happyIn12 :: t12 -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn12 x = unsafeCoerce# x
-{-# INLINE happyIn12 #-}
-happyOut12 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> t12
-happyOut12 x = unsafeCoerce# x
-{-# INLINE happyOut12 #-}
-happyIn13 :: t13 -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn13 x = unsafeCoerce# x
-{-# INLINE happyIn13 #-}
-happyOut13 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> t13
-happyOut13 x = unsafeCoerce# x
-{-# INLINE happyOut13 #-}
-happyIn14 :: (()) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn14 x = unsafeCoerce# x
-{-# INLINE happyIn14 #-}
-happyOut14 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (())
-happyOut14 x = unsafeCoerce# x
-{-# INLINE happyOut14 #-}
-happyIn15 :: (Integer) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn15 x = unsafeCoerce# x
-{-# INLINE happyIn15 #-}
-happyOut15 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Integer)
-happyOut15 x = unsafeCoerce# x
-{-# INLINE happyOut15 #-}
-happyIn16 :: (Name) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn16 x = unsafeCoerce# x
-{-# INLINE happyIn16 #-}
-happyOut16 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Name)
-happyOut16 x = unsafeCoerce# x
-{-# INLINE happyOut16 #-}
-happyIn17 :: (QName) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn17 x = unsafeCoerce# x
-{-# INLINE happyIn17 #-}
-happyOut17 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (QName)
-happyOut17 x = unsafeCoerce# x
-{-# INLINE happyOut17 #-}
-happyIn18 :: (QName) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn18 x = unsafeCoerce# x
-{-# INLINE happyIn18 #-}
-happyOut18 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (QName)
-happyOut18 x = unsafeCoerce# x
-{-# INLINE happyOut18 #-}
-happyIn19 :: (Name) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn19 x = unsafeCoerce# x
-{-# INLINE happyIn19 #-}
-happyOut19 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Name)
-happyOut19 x = unsafeCoerce# x
-{-# INLINE happyOut19 #-}
-happyIn20 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn20 x = unsafeCoerce# x
-{-# INLINE happyIn20 #-}
-happyOut20 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Name])
-happyOut20 x = unsafeCoerce# x
-{-# INLINE happyOut20 #-}
-happyIn21 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn21 x = unsafeCoerce# x
-{-# INLINE happyIn21 #-}
-happyOut21 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Name])
-happyOut21 x = unsafeCoerce# x
-{-# INLINE happyOut21 #-}
-happyIn22 :: ([String]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn22 x = unsafeCoerce# x
-{-# INLINE happyIn22 #-}
-happyOut22 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([String])
-happyOut22 x = unsafeCoerce# x
-{-# INLINE happyOut22 #-}
-happyIn23 :: (QName) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn23 x = unsafeCoerce# x
-{-# INLINE happyIn23 #-}
-happyOut23 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (QName)
-happyOut23 x = unsafeCoerce# x
-{-# INLINE happyOut23 #-}
-happyIn24 :: (Expr) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn24 x = unsafeCoerce# x
-{-# INLINE happyIn24 #-}
-happyOut24 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Expr)
-happyOut24 x = unsafeCoerce# x
-{-# INLINE happyOut24 #-}
-happyIn25 :: t25 -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn25 x = unsafeCoerce# x
-{-# INLINE happyIn25 #-}
-happyOut25 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> t25
-happyOut25 x = unsafeCoerce# x
-{-# INLINE happyOut25 #-}
-happyIn26 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn26 x = unsafeCoerce# x
-{-# INLINE happyIn26 #-}
-happyOut26 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Expr])
-happyOut26 x = unsafeCoerce# x
-{-# INLINE happyOut26 #-}
-happyIn27 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn27 x = unsafeCoerce# x
-{-# INLINE happyIn27 #-}
-happyOut27 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Expr])
-happyOut27 x = unsafeCoerce# x
-{-# INLINE happyOut27 #-}
-happyIn28 :: t28 -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn28 x = unsafeCoerce# x
-{-# INLINE happyIn28 #-}
-happyOut28 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> t28
-happyOut28 x = unsafeCoerce# x
-{-# INLINE happyOut28 #-}
-happyIn29 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn29 x = unsafeCoerce# x
-{-# INLINE happyIn29 #-}
-happyOut29 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Expr])
-happyOut29 x = unsafeCoerce# x
-{-# INLINE happyOut29 #-}
-happyIn30 :: t30 -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn30 x = unsafeCoerce# x
-{-# INLINE happyIn30 #-}
-happyOut30 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> t30
-happyOut30 x = unsafeCoerce# x
-{-# INLINE happyOut30 #-}
-happyIn31 :: ([(Name, Expr)]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn31 x = unsafeCoerce# x
-{-# INLINE happyIn31 #-}
-happyOut31 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([(Name, Expr)])
-happyOut31 x = unsafeCoerce# x
-{-# INLINE happyOut31 #-}
-happyIn32 :: ([(Name, Expr)]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn32 x = unsafeCoerce# x
-{-# INLINE happyIn32 #-}
-happyOut32 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([(Name, Expr)])
-happyOut32 x = unsafeCoerce# x
-{-# INLINE happyOut32 #-}
-happyIn33 :: ((Name, Expr)) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn33 x = unsafeCoerce# x
-{-# INLINE happyIn33 #-}
-happyOut33 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ((Name, Expr))
-happyOut33 x = unsafeCoerce# x
-{-# INLINE happyOut33 #-}
-happyIn34 :: t34 -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn34 x = unsafeCoerce# x
-{-# INLINE happyIn34 #-}
-happyOut34 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> t34
-happyOut34 x = unsafeCoerce# x
-{-# INLINE happyOut34 #-}
-happyIn35 :: t35 -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn35 x = unsafeCoerce# x
-{-# INLINE happyIn35 #-}
-happyOut35 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> t35
-happyOut35 x = unsafeCoerce# x
-{-# INLINE happyOut35 #-}
-happyIn36 :: ([TypedBindings]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn36 x = unsafeCoerce# x
-{-# INLINE happyIn36 #-}
-happyOut36 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([TypedBindings])
-happyOut36 x = unsafeCoerce# x
-{-# INLINE happyOut36 #-}
-happyIn37 :: (TypedBindings) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn37 x = unsafeCoerce# x
-{-# INLINE happyIn37 #-}
-happyOut37 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (TypedBindings)
-happyOut37 x = unsafeCoerce# x
-{-# INLINE happyOut37 #-}
-happyIn38 :: ([TypedBinding]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn38 x = unsafeCoerce# x
-{-# INLINE happyIn38 #-}
-happyOut38 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([TypedBinding])
-happyOut38 x = unsafeCoerce# x
-{-# INLINE happyOut38 #-}
-happyIn39 :: ([TypedBinding]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn39 x = unsafeCoerce# x
-{-# INLINE happyIn39 #-}
-happyOut39 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([TypedBinding])
-happyOut39 x = unsafeCoerce# x
-{-# INLINE happyOut39 #-}
-happyIn40 :: (TypedBinding) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn40 x = unsafeCoerce# x
-{-# INLINE happyIn40 #-}
-happyOut40 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (TypedBinding)
-happyOut40 x = unsafeCoerce# x
-{-# INLINE happyOut40 #-}
-happyIn41 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn41 x = unsafeCoerce# x
-{-# INLINE happyIn41 #-}
-happyOut41 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([LamBinding])
-happyOut41 x = unsafeCoerce# x
-{-# INLINE happyOut41 #-}
-happyIn42 :: (([LamBinding], Hiding)) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn42 x = unsafeCoerce# x
-{-# INLINE happyIn42 #-}
-happyOut42 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (([LamBinding], Hiding))
-happyOut42 x = unsafeCoerce# x
-{-# INLINE happyOut42 #-}
-happyIn43 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn43 x = unsafeCoerce# x
-{-# INLINE happyIn43 #-}
-happyOut43 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Either Hiding LamBinding])
-happyOut43 x = unsafeCoerce# x
-{-# INLINE happyOut43 #-}
-happyIn44 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn44 x = unsafeCoerce# x
-{-# INLINE happyIn44 #-}
-happyOut44 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([LamBinding])
-happyOut44 x = unsafeCoerce# x
-{-# INLINE happyOut44 #-}
-happyIn45 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn45 x = unsafeCoerce# x
-{-# INLINE happyIn45 #-}
-happyOut45 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([LamBinding])
-happyOut45 x = unsafeCoerce# x
-{-# INLINE happyOut45 #-}
-happyIn46 :: ((Maybe AsName, ImportDirective)) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn46 x = unsafeCoerce# x
-{-# INLINE happyIn46 #-}
-happyOut46 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ((Maybe AsName, ImportDirective))
-happyOut46 x = unsafeCoerce# x
-{-# INLINE happyOut46 #-}
-happyIn47 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn47 x = unsafeCoerce# x
-{-# INLINE happyIn47 #-}
-happyOut47 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (ImportDirective)
-happyOut47 x = unsafeCoerce# x
-{-# INLINE happyOut47 #-}
-happyIn48 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn48 x = unsafeCoerce# x
-{-# INLINE happyIn48 #-}
-happyOut48 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (ImportDirective)
-happyOut48 x = unsafeCoerce# x
-{-# INLINE happyOut48 #-}
-happyIn49 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn49 x = unsafeCoerce# x
-{-# INLINE happyIn49 #-}
-happyOut49 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (ImportDirective)
-happyOut49 x = unsafeCoerce# x
-{-# INLINE happyOut49 #-}
-happyIn50 :: (UsingOrHiding) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn50 x = unsafeCoerce# x
-{-# INLINE happyIn50 #-}
-happyOut50 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (UsingOrHiding)
-happyOut50 x = unsafeCoerce# x
-{-# INLINE happyOut50 #-}
-happyIn51 :: ([Renaming]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn51 x = unsafeCoerce# x
-{-# INLINE happyIn51 #-}
-happyOut51 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Renaming])
-happyOut51 x = unsafeCoerce# x
-{-# INLINE happyOut51 #-}
-happyIn52 :: ([Renaming]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn52 x = unsafeCoerce# x
-{-# INLINE happyIn52 #-}
-happyOut52 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Renaming])
-happyOut52 x = unsafeCoerce# x
-{-# INLINE happyOut52 #-}
-happyIn53 :: (Renaming) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn53 x = unsafeCoerce# x
-{-# INLINE happyIn53 #-}
-happyOut53 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Renaming)
-happyOut53 x = unsafeCoerce# x
-{-# INLINE happyOut53 #-}
-happyIn54 :: (ImportedName) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn54 x = unsafeCoerce# x
-{-# INLINE happyIn54 #-}
-happyOut54 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (ImportedName)
-happyOut54 x = unsafeCoerce# x
-{-# INLINE happyOut54 #-}
-happyIn55 :: (ImportedName) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn55 x = unsafeCoerce# x
-{-# INLINE happyIn55 #-}
-happyOut55 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (ImportedName)
-happyOut55 x = unsafeCoerce# x
-{-# INLINE happyOut55 #-}
-happyIn56 :: ([ImportedName]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn56 x = unsafeCoerce# x
-{-# INLINE happyIn56 #-}
-happyOut56 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([ImportedName])
-happyOut56 x = unsafeCoerce# x
-{-# INLINE happyOut56 #-}
-happyIn57 :: t57 -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn57 x = unsafeCoerce# x
-{-# INLINE happyIn57 #-}
-happyOut57 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> t57
-happyOut57 x = unsafeCoerce# x
-{-# INLINE happyOut57 #-}
-happyIn58 :: (LHS) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn58 x = unsafeCoerce# x
-{-# INLINE happyIn58 #-}
-happyOut58 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (LHS)
-happyOut58 x = unsafeCoerce# x
-{-# INLINE happyOut58 #-}
-happyIn59 :: ([Pattern]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn59 x = unsafeCoerce# x
-{-# INLINE happyIn59 #-}
-happyOut59 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Pattern])
-happyOut59 x = unsafeCoerce# x
-{-# INLINE happyOut59 #-}
-happyIn60 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn60 x = unsafeCoerce# x
-{-# INLINE happyIn60 #-}
-happyOut60 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Expr])
-happyOut60 x = unsafeCoerce# x
-{-# INLINE happyOut60 #-}
-happyIn61 :: (WhereClause) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn61 x = unsafeCoerce# x
-{-# INLINE happyIn61 #-}
-happyOut61 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (WhereClause)
-happyOut61 x = unsafeCoerce# x
-{-# INLINE happyOut61 #-}
-happyIn62 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn62 x = unsafeCoerce# x
-{-# INLINE happyIn62 #-}
-happyOut62 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Declaration])
-happyOut62 x = unsafeCoerce# x
-{-# INLINE happyOut62 #-}
-happyIn63 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn63 x = unsafeCoerce# x
-{-# INLINE happyIn63 #-}
-happyOut63 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut63 x = unsafeCoerce# x
-{-# INLINE happyOut63 #-}
-happyIn64 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn64 x = unsafeCoerce# x
-{-# INLINE happyIn64 #-}
-happyOut64 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut64 x = unsafeCoerce# x
-{-# INLINE happyOut64 #-}
-happyIn65 :: (RHS) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn65 x = unsafeCoerce# x
-{-# INLINE happyIn65 #-}
-happyOut65 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (RHS)
-happyOut65 x = unsafeCoerce# x
-{-# INLINE happyOut65 #-}
-happyIn66 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn66 x = unsafeCoerce# x
-{-# INLINE happyIn66 #-}
-happyOut66 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut66 x = unsafeCoerce# x
-{-# INLINE happyOut66 #-}
-happyIn67 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn67 x = unsafeCoerce# x
-{-# INLINE happyIn67 #-}
-happyOut67 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut67 x = unsafeCoerce# x
-{-# INLINE happyOut67 #-}
-happyIn68 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn68 x = unsafeCoerce# x
-{-# INLINE happyIn68 #-}
-happyOut68 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut68 x = unsafeCoerce# x
-{-# INLINE happyOut68 #-}
-happyIn69 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn69 x = unsafeCoerce# x
-{-# INLINE happyIn69 #-}
-happyOut69 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Declaration])
-happyOut69 x = unsafeCoerce# x
-{-# INLINE happyOut69 #-}
-happyIn70 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn70 x = unsafeCoerce# x
-{-# INLINE happyIn70 #-}
-happyOut70 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut70 x = unsafeCoerce# x
-{-# INLINE happyOut70 #-}
-happyIn71 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn71 x = unsafeCoerce# x
-{-# INLINE happyIn71 #-}
-happyOut71 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut71 x = unsafeCoerce# x
-{-# INLINE happyOut71 #-}
-happyIn72 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn72 x = unsafeCoerce# x
-{-# INLINE happyIn72 #-}
-happyOut72 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut72 x = unsafeCoerce# x
-{-# INLINE happyOut72 #-}
-happyIn73 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn73 x = unsafeCoerce# x
-{-# INLINE happyIn73 #-}
-happyOut73 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut73 x = unsafeCoerce# x
-{-# INLINE happyOut73 #-}
-happyIn74 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn74 x = unsafeCoerce# x
-{-# INLINE happyIn74 #-}
-happyOut74 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut74 x = unsafeCoerce# x
-{-# INLINE happyOut74 #-}
-happyIn75 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn75 x = unsafeCoerce# x
-{-# INLINE happyIn75 #-}
-happyOut75 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut75 x = unsafeCoerce# x
-{-# INLINE happyOut75 #-}
-happyIn76 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn76 x = unsafeCoerce# x
-{-# INLINE happyIn76 #-}
-happyOut76 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Expr])
-happyOut76 x = unsafeCoerce# x
-{-# INLINE happyOut76 #-}
-happyIn77 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn77 x = unsafeCoerce# x
-{-# INLINE happyIn77 #-}
-happyOut77 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut77 x = unsafeCoerce# x
-{-# INLINE happyOut77 #-}
-happyIn78 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn78 x = unsafeCoerce# x
-{-# INLINE happyIn78 #-}
-happyOut78 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut78 x = unsafeCoerce# x
-{-# INLINE happyOut78 #-}
-happyIn79 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn79 x = unsafeCoerce# x
-{-# INLINE happyIn79 #-}
-happyOut79 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut79 x = unsafeCoerce# x
-{-# INLINE happyOut79 #-}
-happyIn80 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn80 x = unsafeCoerce# x
-{-# INLINE happyIn80 #-}
-happyOut80 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Declaration])
-happyOut80 x = unsafeCoerce# x
-{-# INLINE happyOut80 #-}
-happyIn81 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn81 x = unsafeCoerce# x
-{-# INLINE happyIn81 #-}
-happyOut81 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut81 x = unsafeCoerce# x
-{-# INLINE happyOut81 #-}
-happyIn82 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn82 x = unsafeCoerce# x
-{-# INLINE happyIn82 #-}
-happyOut82 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Declaration)
-happyOut82 x = unsafeCoerce# x
-{-# INLINE happyOut82 #-}
-happyIn83 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn83 x = unsafeCoerce# x
-{-# INLINE happyIn83 #-}
-happyOut83 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Pragma)
-happyOut83 x = unsafeCoerce# x
-{-# INLINE happyOut83 #-}
-happyIn84 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn84 x = unsafeCoerce# x
-{-# INLINE happyIn84 #-}
-happyOut84 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Pragma)
-happyOut84 x = unsafeCoerce# x
-{-# INLINE happyOut84 #-}
-happyIn85 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn85 x = unsafeCoerce# x
-{-# INLINE happyIn85 #-}
-happyOut85 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Pragma)
-happyOut85 x = unsafeCoerce# x
-{-# INLINE happyOut85 #-}
-happyIn86 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn86 x = unsafeCoerce# x
-{-# INLINE happyIn86 #-}
-happyOut86 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Pragma)
-happyOut86 x = unsafeCoerce# x
-{-# INLINE happyOut86 #-}
-happyIn87 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn87 x = unsafeCoerce# x
-{-# INLINE happyIn87 #-}
-happyOut87 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Pragma)
-happyOut87 x = unsafeCoerce# x
-{-# INLINE happyOut87 #-}
-happyIn88 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn88 x = unsafeCoerce# x
-{-# INLINE happyIn88 #-}
-happyOut88 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Pragma)
-happyOut88 x = unsafeCoerce# x
-{-# INLINE happyOut88 #-}
-happyIn89 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn89 x = unsafeCoerce# x
-{-# INLINE happyIn89 #-}
-happyOut89 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Pragma)
-happyOut89 x = unsafeCoerce# x
-{-# INLINE happyOut89 #-}
-happyIn90 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn90 x = unsafeCoerce# x
-{-# INLINE happyIn90 #-}
-happyOut90 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Pragma)
-happyOut90 x = unsafeCoerce# x
-{-# INLINE happyOut90 #-}
-happyIn91 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn91 x = unsafeCoerce# x
-{-# INLINE happyIn91 #-}
-happyOut91 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> (Pragma)
-happyOut91 x = unsafeCoerce# x
-{-# INLINE happyOut91 #-}
-happyIn92 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn92 x = unsafeCoerce# x
-{-# INLINE happyIn92 #-}
-happyOut92 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([TypeSignature])
-happyOut92 x = unsafeCoerce# x
-{-# INLINE happyOut92 #-}
-happyIn93 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn93 x = unsafeCoerce# x
-{-# INLINE happyIn93 #-}
-happyOut93 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([TypeSignature])
-happyOut93 x = unsafeCoerce# x
-{-# INLINE happyOut93 #-}
-happyIn94 :: ([Constructor]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn94 x = unsafeCoerce# x
-{-# INLINE happyIn94 #-}
-happyOut94 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Constructor])
-happyOut94 x = unsafeCoerce# x
-{-# INLINE happyOut94 #-}
-happyIn95 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn95 x = unsafeCoerce# x
-{-# INLINE happyIn95 #-}
-happyOut95 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Declaration])
-happyOut95 x = unsafeCoerce# x
-{-# INLINE happyOut95 #-}
-happyIn96 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn96 x = unsafeCoerce# x
-{-# INLINE happyIn96 #-}
-happyOut96 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Declaration])
-happyOut96 x = unsafeCoerce# x
-{-# INLINE happyOut96 #-}
-happyIn97 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyIn97 x = unsafeCoerce# x
-{-# INLINE happyIn97 #-}
-happyOut97 :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> ([Declaration])
-happyOut97 x = unsafeCoerce# x
-{-# INLINE happyOut97 #-}
-happyInTok :: Token -> (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57)
-happyInTok x = unsafeCoerce# x
-{-# INLINE happyInTok #-}
-happyOutTok :: (HappyAbsSyn t11 t12 t13 t25 t28 t30 t34 t35 t57) -> Token
-happyOutTok x = unsafeCoerce# x
-{-# INLINE happyOutTok #-}
-
-
-happyActOffsets :: HappyAddr
-happyActOffsets = HappyA# "\x00\x00\xa8\x02\x3e\x03\x00\x00\x66\x01\xa9\x00\x1c\x03\x35\x03\x00\x00\x35\x03\x28\x03\x00\x00\x18\x03\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x2f\x02\xa8\x02\x21\x03\x00\x00\x76\x00\x31\x03\x1a\x03\x00\x00\x00\x00\xd0\x01\x00\x00\xe0\x02\x00\x00\x00\x00\xd0\x01\x13\x02\xf7\x01\x00\x00\x00\x00\x00\x00\x0e\x03\xc4\x00\x22\x03\x14\x03\x0d\x03\xfb\x02\x04\x03\x00\x00\xfc\x02\xf6\x02\x00\x00\x00\x00\x00\x00\xd0\x01\xa8\x02\x00\x00\xf9\x02\xd0\x01\x00\x00\x8c\x02\x70\x02\x00\x00\xdb\x01\xbf\x01\x54\x02\xf9\x02\xe8\x02\xec\x02\x1e\x03\x00\x00\xc4\x02\xc4\x02\x00\x00\x00\x00\x00\x00\x00\x00\x54\x02\xc4\x02\xe0\x02\x00\x00\x00\x00\xf8\x02\xf8\x02\x00\x00\xf8\x02\x00\x00\x00\x00\x7e\x00\x13\x01\x13\x01\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x02\xdc\x02\x00\x00\x00\x00\x28\x01\x97\x00\xe0\x02\x13\x01\x00\x00\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x02\x00\x00\x00\x00\xc4\x02\x54\x02\xea\x02\xdf\x02\xd4\x02\x00\x00\xde\x02\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x02\x00\x00\x00\x00\x54\x02\x54\x02\xce\x02\x00\x00\xd8\x02\x00\x00\x00\x00\x00\x00\xc3\x02\x00\x00\x54\x02\xa3\x01\xe1\x00\x00\x00\x97\x00\xe0\x02\x12\x02\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x02\x00\x00\xca\x02\xc7\x02\xc5\x02\xa7\x02\xb4\x02\x28\x01\xe7\x02\x28\x01\xc4\x02\xb1\x02\xb0\x02\xac\x02\x00\x00\x00\x00\xab\x02\x00\x00\xc2\x02\x00\x00\x12\x02\x00\x00\xd3\x02\x05\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\xbc\x02\x00\x00\xf3\xff\xdb\x02\xb2\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x02\xae\x02\xa5\x00\x9e\x02\x9e\x02\x9e\x02\xe5\xff\xad\x02\x93\x02\x93\x02\x93\x02\xa6\x02\xa6\x02\xa6\x02\x98\x02\x23\x03\x00\x00\x00\x00\x54\x02\x00\x00\x00\x00\x92\x02\x91\x02\x90\x02\x90\x02\x90\x02\xc0\x02\xe0\x02\x00\x00\x00\x00\x00\x00\xf6\xff\x00\x00\xf6\xff\xf6\xff\x87\x02\x00\x00\x28\x01\x28\x01\x28\x01\x28\x01\x86\x02\x00\x00\x00\x00\x85\x00\x54\x02\x00\x00\x54\x02\x54\x02\xa3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x02\x89\x02\x00\x00\x7b\x02\x82\x02\x74\x02\x7a\x02\x80\x02\x9b\x02\x00\x00\x00\x00\x6d\x02\x00\x00\x00\x00\x00\x00\x75\x02\x60\x02\x60\x02\x84\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x02\x52\x02\x28\x01\x0f\x00\x62\x02\x5f\x02\x5b\x02\x58\x02\xf6\xff\x00\x00\x00\x00\x00\x00\x3b\x02\xe0\x02\x00\x00\x34\x02\x00\x00\x2a\x02\x27\x02\x1b\x02\x22\x02\x1a\x02\x00\x00\x16\x02\x15\x02\x0e\x02\x00\x00\x00\x00\x03\x02\xe1\x00\x54\x02\x54\x02\x54\x02\x18\x02\x54\x02\x0d\x02\x30\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x01\x00\x00\x0b\x02\x54\x02\x12\x02\x00\x00\x24\x02\x1e\x02\x1d\x02\x1e\x00\xf5\x01\xee\x01\x00\x00\x00\x00\xda\x01\x00\x00\x00\x00\x00\x00\xcb\x01\x00\x00\xeb\x01\xeb\x01\xeb\x01\x00\x00\x12\x02\x00\x00\x00\x00\xd6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x72\x00\x00\x00\x00\x00"#
-
-happyGotoOffsets :: HappyAddr
-happyGotoOffsets = HappyA# "\x4b\x00\x08\x05\x26\x00\xff\x01\xfd\x01\xaa\x00\x00\x00\xfa\x01\x00\x00\xf4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x02\xf9\x04\x00\x00\x00\x00\xff\x00\x0d\x00\x00\x00\x00\x00\x00\x00\xe3\x00\x00\x00\xd9\x00\x00\x00\x00\x00\x00\x03\x94\x03\x7b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x03\xea\x04\x00\x00\x00\x00\x2a\x03\x00\x00\xe9\x03\xda\x03\x00\x00\xdb\x04\xcc\x04\xbd\x04\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\xcb\x03\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\xae\x04\x17\x05\x1b\x00\x00\x00\x00\x00\x37\x00\x2c\x00\x00\x00\x03\x00\x00\x00\x00\x00\x8a\x02\x6e\x02\x4d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x01\x00\x00\x00\x00\x00\x00\x20\x03\x11\x03\x3f\x00\x40\x02\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x02\x9f\x04\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x03\x00\x00\x00\x00\x90\x04\x81\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x72\x04\xd3\x00\x31\x00\x00\x00\x1e\x01\x2b\x00\x07\x05\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x01\xde\x01\x0c\x03\x00\x00\x0a\x03\xad\x03\x00\x00\x00\x00\xd3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x98\x01\x00\x00\xce\x00\xc3\x00\x8b\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x01\xd4\x01\x00\x00\x00\x00\x9d\x01\x92\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x17\x00\x21\x01\xbd\x01\xb5\x01\xb4\x01\x5b\x01\x16\x00\x57\x01\x55\x01\x54\x01\x0c\x00\x0b\x00\x0a\x00\x23\x01\x00\x00\x00\x00\x00\x00\x49\x03\x00\x00\x00\x00\x00\x00\x46\x01\x11\x01\x08\x01\xfd\x00\xea\x00\x3a\x01\x00\x00\x00\x00\x00\x00\x2b\x02\x00\x00\xd7\x01\xbe\x01\x00\x00\x00\x00\xcd\x02\x79\x02\x57\x02\x1c\x02\xee\x00\x00\x00\x00\x00\xb5\x00\x63\x04\x00\x00\x54\x04\x45\x04\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\xd8\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xff\xac\x00\xa0\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x8c\x00\xc8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\xf6\x00\x00\x00\x00\x00\x00\x00\x55\x00\x8e\x00\x00\x00\x34\x00\x00\x00\x00\x00\x32\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\xfa\xff\x00\x00\x00\x00\x00\x00\x07\x00\x21\x00\x36\x04\x27\x04\x18\x04\x04\x00\x09\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x00\x00\x08\x00\xfa\x03\x83\x01\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\xff\x00\x00\x02\x00\x12\x00\x11\x00\x00\x00\x09\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x1d\x00\x00\x00\x00\x00"#
-
-happyDefActions :: HappyAddr
-happyDefActions = HappyA# "\xfa\xff\x00\x00\xbc\xff\x00\x00\xfc\xff\x00\x00\x00\x00\xbc\xff\xb9\xff\xbc\xff\xaf\xff\x96\xff\x00\x00\xa2\xff\xa1\xff\x9f\xff\x9e\xff\x00\x00\x99\xff\x00\x00\x00\x00\x81\xff\x7f\xff\xbc\xff\x00\x00\x92\xff\x91\xff\x00\x00\x90\xff\x00\x00\x93\xff\x94\xff\x00\x00\x00\x00\x00\x00\xb1\xff\xb0\xff\x95\xff\x00\x00\xaf\xff\x00\x00\x00\x00\x9f\xff\x00\x00\x7c\xff\x8c\xff\x00\x00\x00\x00\x8b\xff\xad\xff\x6b\xff\x71\xff\x00\x00\x9b\xff\x75\xff\x72\xff\xac\xff\x00\x00\x00\x00\x89\xff\x00\x00\x00\x00\x00\x00\x00\x00\x87\xff\x00\x00\x00\x00\x80\xff\x00\x00\x00\x00\x82\xff\xa5\xff\x9d\xff\x97\xff\x00\x00\x00\x00\x00\x00\xbb\xff\xba\xff\xbc\xff\xbc\xff\x21\xff\xbc\xff\x1c\xff\x1b\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xff\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xf1\xff\xf0\xff\xef\xff\xee\xff\xed\xff\xec\xff\xeb\xff\xea\xff\xe9\xff\xe8\xff\xe7\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xe0\xff\xdf\xff\xde\xff\xdd\xff\xdc\xff\xdb\xff\xda\xff\xd9\xff\xd8\xff\xd7\xff\xd6\xff\xd5\xff\xd4\xff\xd3\xff\xd2\xff\xd1\xff\xd0\xff\xcf\xff\xce\xff\xcd\xff\xcc\xff\xcb\xff\xca\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xa8\xff\x00\x00\xaf\xff\xae\xff\x6c\xff\x61\xff\x28\xff\x00\x00\xb8\xff\x00\x00\x20\xff\x1f\xff\x8a\xff\xa0\xff\x00\x00\xa3\xff\xa9\xff\x99\xff\x00\x00\xbc\xff\x00\x00\x00\x00\x86\xff\x85\xff\x76\xff\xa4\xff\x00\x00\x6f\xff\x70\xff\x74\xff\x9c\xff\x73\xff\x7e\xff\x8d\xff\x00\x00\x7d\xff\x8f\xff\x00\x00\x00\x00\x00\x00\x77\xff\x78\xff\x7a\xff\x7b\xff\x6a\xff\x00\x00\x88\xff\x00\x00\x00\x00\xbc\xff\x9a\xff\x61\xff\x28\xff\x61\xff\x24\xff\x69\xff\x67\xff\x65\xff\x62\xff\x63\xff\x00\x00\x00\x00\x00\x00\x61\xff\x00\x00\x6c\xff\x00\x00\x6c\xff\x00\x00\x00\x00\x00\x00\xa8\xff\xa7\xff\x14\xff\x00\x00\x6e\xff\xbc\xff\x6d\xff\x61\xff\x66\xff\xb3\xff\x00\x00\x56\xff\x64\xff\x29\xff\x27\xff\x23\xff\x00\x00\xbc\xff\xb5\xff\xaf\xff\x4e\xff\x36\xff\x04\xff\x49\xff\x47\xff\x46\xff\x45\xff\x44\xff\x48\xff\x43\xff\x42\xff\x41\xff\x40\xff\x3f\xff\x3e\xff\x3c\xff\x3d\xff\x3b\xff\x3a\xff\x1d\xff\x1a\xff\x18\xff\x16\xff\x17\xff\x15\xff\x19\xff\xbc\xff\xbc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xff\x00\x00\x00\x00\x00\x00\xbc\xff\xbc\xff\xbc\xff\x50\xff\x00\x00\x83\xff\x84\xff\x00\x00\x8e\xff\x79\xff\x00\x00\xa8\xff\x00\x00\x00\x00\x00\x00\x4e\xff\x00\x00\x2c\xff\x2d\xff\x2e\xff\x00\x00\xb2\xff\x00\x00\x00\x00\x00\x00\x2f\xff\x6c\xff\x6c\xff\x6c\xff\x6c\xff\x00\x00\x2a\xff\x2b\xff\x4c\xff\x00\x00\x52\xff\x00\x00\x00\x00\x00\x00\x08\xff\xb6\xff\xb7\xff\xb4\xff\x58\xff\x54\xff\x00\x00\x55\xff\x00\x00\x00\x00\x00\x00\x00\x00\x5c\xff\x00\x00\xb3\xff\x68\xff\x00\x00\x06\xff\x1e\xff\x0e\xff\xbc\xff\x00\x00\x00\x00\xb3\xff\x5e\xff\x5a\xff\x5f\xff\x57\xff\x60\xff\x00\x00\x05\xff\x39\xff\x4d\xff\x37\xff\x38\xff\xbc\xff\x00\x00\x6c\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xff\xaa\xff\x32\xff\x31\xff\x30\xff\x50\xff\x98\xff\x51\xff\xa8\xff\xa6\xff\x00\x00\xa8\xff\x00\x00\x00\x00\x00\x00\x0f\xff\x00\x00\xa8\xff\x00\x00\x4f\xff\xab\xff\x00\x00\xbc\xff\x00\x00\x00\x00\x00\x00\xbc\xff\x00\x00\x00\x00\x00\x00\x4b\xff\x53\xff\x5d\xff\x5b\xff\x59\xff\x00\x00\x07\xff\xbc\xff\x00\x00\x61\xff\x22\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xff\x00\x00\x0b\xff\x11\xff\x00\x00\x12\xff\x13\xff\x10\xff\x00\x00\x0d\xff\xbc\xff\xbc\xff\xbc\xff\x26\xff\x61\xff\x4a\xff\x25\xff\x00\x00\x0a\xff\x35\xff\x34\xff\x33\xff\x0c\xff\xbc\xff\x00\x00\x09\xff"#
-
-happyCheck :: HappyAddr
-happyCheck = HappyA# "\xff\xff\x03\x00\x03\x00\x0a\x00\x03\x00\x03\x00\x03\x00\x03\x00\x05\x00\x03\x00\x10\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x0a\x00\x03\x00\x0e\x00\x03\x00\x03\x00\x08\x00\x03\x00\x33\x00\x03\x00\x03\x00\x03\x00\x29\x00\x0a\x00\x00\x00\x3a\x00\x06\x00\x2b\x00\x2f\x00\x06\x00\x03\x00\x0a\x00\x0b\x00\x0a\x00\x07\x00\x03\x00\x04\x00\x05\x00\x19\x00\x1a\x00\x1b\x00\x03\x00\x3a\x00\x03\x00\x39\x00\x18\x00\x03\x00\x0a\x00\x0b\x00\x0a\x00\x07\x00\x2a\x00\x03\x00\x11\x00\x2e\x00\x2f\x00\x30\x00\x3a\x00\x39\x00\x06\x00\x10\x00\x18\x00\x10\x00\x0a\x00\x0b\x00\x1a\x00\x1b\x00\x0a\x00\x0b\x00\x00\x00\x01\x00\x4a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x36\x00\x37\x00\x39\x00\x18\x00\x57\x00\x5b\x00\x5b\x00\x59\x00\x5a\x00\x59\x00\x5a\x00\x59\x00\x5a\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x56\x00\x56\x00\x58\x00\x58\x00\x57\x00\x56\x00\x56\x00\x56\x00\x34\x00\x4a\x00\x46\x00\x00\x00\x38\x00\x39\x00\x3a\x00\x4a\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x4a\x00\x47\x00\x48\x00\x49\x00\x46\x00\x08\x00\x4c\x00\x03\x00\x4e\x00\x35\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x0a\x00\x0b\x00\x0e\x00\x2d\x00\x0a\x00\x0a\x00\x30\x00\x0a\x00\x0b\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x09\x00\x0a\x00\x0b\x00\x29\x00\x0d\x00\x17\x00\x18\x00\x31\x00\x36\x00\x33\x00\x0a\x00\x0a\x00\x3a\x00\x08\x00\x34\x00\x45\x00\x07\x00\x08\x00\x48\x00\x0e\x00\x1c\x00\x4b\x00\x0a\x00\x0e\x00\x3a\x00\x3b\x00\x22\x00\x34\x00\x31\x00\x32\x00\x33\x00\x38\x00\x39\x00\x3a\x00\x08\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x0a\x00\x47\x00\x48\x00\x49\x00\x3a\x00\x31\x00\x4c\x00\x33\x00\x4e\x00\x08\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x0a\x00\x0b\x00\x3a\x00\x3b\x00\x38\x00\x0a\x00\x0a\x00\x0b\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x37\x00\x0a\x00\x2a\x00\x45\x00\x0d\x00\x18\x00\x48\x00\x2f\x00\x31\x00\x4b\x00\x33\x00\x4d\x00\x0a\x00\x4f\x00\x07\x00\x08\x00\x2e\x00\x2f\x00\x30\x00\x55\x00\x0a\x00\x0e\x00\x1f\x00\x0d\x00\x0e\x00\x24\x00\x23\x00\x34\x00\x25\x00\x28\x00\x27\x00\x38\x00\x39\x00\x3a\x00\x11\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x11\x00\x47\x00\x48\x00\x49\x00\x1e\x00\x1f\x00\x4c\x00\x36\x00\x4e\x00\x11\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x00\x00\x01\x00\x0a\x00\x0b\x00\x0c\x00\x05\x00\x06\x00\x07\x00\x08\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\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\x0a\x00\x0b\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x23\x00\x3a\x00\x3b\x00\x26\x00\x27\x00\x17\x00\x18\x00\x2b\x00\x2b\x00\x2c\x00\x10\x00\x2e\x00\x35\x00\x31\x00\x31\x00\x33\x00\x33\x00\x09\x00\x09\x00\x36\x00\x09\x00\x38\x00\x3a\x00\x3a\x00\x3b\x00\x0a\x00\x3d\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\x01\x00\x2b\x00\x2c\x00\x2d\x00\x05\x00\x06\x00\x07\x00\x08\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\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\x0a\x00\x0a\x00\x01\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x23\x00\x0a\x00\x0a\x00\x26\x00\x27\x00\x0d\x00\x0e\x00\x3b\x00\x2b\x00\x2c\x00\x11\x00\x2e\x00\x0a\x00\x36\x00\x31\x00\x0d\x00\x33\x00\x03\x00\x19\x00\x1a\x00\x1b\x00\x38\x00\x01\x00\x3a\x00\x3b\x00\x06\x00\x3d\x00\x0a\x00\x23\x00\x10\x00\x0d\x00\x0e\x00\x27\x00\x1f\x00\x0a\x00\x2d\x00\x2b\x00\x2c\x00\x11\x00\x2e\x00\x26\x00\x27\x00\x31\x00\x10\x00\x33\x00\x34\x00\x19\x00\x1a\x00\x1b\x00\x03\x00\x01\x00\x3a\x00\x3b\x00\x2b\x00\x3d\x00\x03\x00\x23\x00\x02\x00\x01\x00\x31\x00\x27\x00\x33\x00\x24\x00\x3a\x00\x2b\x00\x2c\x00\x11\x00\x2e\x00\x3a\x00\x35\x00\x31\x00\x32\x00\x33\x00\x24\x00\x19\x00\x1a\x00\x1b\x00\x39\x00\x01\x00\x3a\x00\x3b\x00\x29\x00\x3d\x00\x24\x00\x23\x00\x09\x00\x0a\x00\x0b\x00\x27\x00\x0d\x00\x03\x00\x03\x00\x2b\x00\x2c\x00\x11\x00\x2e\x00\x0a\x00\x03\x00\x31\x00\x0d\x00\x33\x00\x34\x00\x19\x00\x1a\x00\x1b\x00\x24\x00\x01\x00\x3a\x00\x3b\x00\x03\x00\x3d\x00\x0a\x00\x23\x00\x2a\x00\x0d\x00\x0e\x00\x27\x00\x1f\x00\x24\x00\x3a\x00\x2b\x00\x2c\x00\x11\x00\x2e\x00\x26\x00\x27\x00\x31\x00\x32\x00\x33\x00\x39\x00\x19\x00\x1a\x00\x0a\x00\x0b\x00\x0c\x00\x3a\x00\x3b\x00\x39\x00\x3d\x00\x3c\x00\x23\x00\x39\x00\x39\x00\x01\x00\x27\x00\x0a\x00\x0b\x00\x0c\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x3c\x00\x30\x00\x31\x00\x0a\x00\x33\x00\x3c\x00\x0d\x00\x11\x00\x3c\x00\x0a\x00\x0b\x00\x3a\x00\x3b\x00\x30\x00\x3d\x00\x19\x00\x1a\x00\x1b\x00\x3c\x00\x01\x00\x15\x00\x16\x00\x17\x00\x18\x00\x1f\x00\x23\x00\x0a\x00\x0b\x00\x0c\x00\x27\x00\x24\x00\x26\x00\x27\x00\x2b\x00\x2c\x00\x11\x00\x2e\x00\x0a\x00\x29\x00\x31\x00\x0d\x00\x33\x00\x29\x00\x19\x00\x1a\x00\x29\x00\x3a\x00\x01\x00\x3a\x00\x3b\x00\x24\x00\x3d\x00\x0e\x00\x23\x00\x0a\x00\x0b\x00\x0c\x00\x27\x00\x1f\x00\x24\x00\x3a\x00\x2b\x00\x2c\x00\x11\x00\x2e\x00\x26\x00\x27\x00\x31\x00\x35\x00\x33\x00\x34\x00\x19\x00\x1a\x00\x0c\x00\x28\x00\x01\x00\x3a\x00\x3b\x00\x32\x00\x3d\x00\x3a\x00\x23\x00\x09\x00\x0a\x00\x0b\x00\x27\x00\x32\x00\x3a\x00\x28\x00\x2b\x00\x2c\x00\x11\x00\x2e\x00\x32\x00\x35\x00\x31\x00\x32\x00\x33\x00\x3a\x00\x19\x00\x1a\x00\x1b\x00\x04\x00\x01\x00\x3a\x00\x3b\x00\x30\x00\x3d\x00\x24\x00\x23\x00\x3c\x00\x3c\x00\x3c\x00\x27\x00\x3d\x00\x24\x00\x24\x00\x2b\x00\x2c\x00\x11\x00\x2e\x00\x0a\x00\x3a\x00\x31\x00\x0d\x00\x33\x00\x2a\x00\x19\x00\x1a\x00\x04\x00\x24\x00\x0e\x00\x3a\x00\x3b\x00\x39\x00\x3d\x00\x24\x00\x23\x00\x3c\x00\x39\x00\x03\x00\x27\x00\x1f\x00\x3c\x00\x3a\x00\x2b\x00\x2c\x00\x11\x00\x2e\x00\x26\x00\x27\x00\x31\x00\x31\x00\x33\x00\x31\x00\x19\x00\x1a\x00\x31\x00\x0b\x00\x3a\x00\x3a\x00\x3b\x00\x28\x00\x3d\x00\x34\x00\x23\x00\x0a\x00\x0b\x00\x28\x00\x27\x00\x34\x00\x2a\x00\x0a\x00\x2b\x00\x2c\x00\x0d\x00\x24\x00\x15\x00\x16\x00\x31\x00\x18\x00\x33\x00\x0a\x00\x30\x00\x0a\x00\x0d\x00\x3c\x00\x0d\x00\x3a\x00\x3b\x00\x24\x00\x3d\x00\x3c\x00\x1f\x00\x02\x00\x35\x00\x3a\x00\x23\x00\x24\x00\x25\x00\x2d\x00\x27\x00\x32\x00\x1f\x00\x0a\x00\x1f\x00\x28\x00\x0d\x00\x32\x00\x34\x00\x26\x00\x27\x00\x26\x00\x27\x00\x0a\x00\x0a\x00\x29\x00\x0d\x00\x0d\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x1f\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x26\x00\x27\x00\x34\x00\x1f\x00\x1f\x00\x29\x00\x3e\x00\x33\x00\x2d\x00\x25\x00\x25\x00\x27\x00\x27\x00\x0a\x00\x0b\x00\x24\x00\x3e\x00\x2f\x00\x0f\x00\x24\x00\x3e\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x24\x00\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x22\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\x16\x00\xff\xff\x18\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x15\x00\x16\x00\xff\xff\x18\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x15\x00\x16\x00\xff\xff\x18\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x15\x00\x16\x00\xff\xff\x18\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x0b\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
-
-happyTable :: HappyAddr
-happyTable = HappyA# "\x00\x00\x8b\x01\xc7\x00\x96\x01\xad\x01\x4e\x01\x05\x00\x4e\x01\x9f\x00\x4e\x01\x99\x01\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x96\x01\x83\x01\x47\x01\xa6\x01\xa6\x01\x48\x01\x7d\x01\x41\x00\x2f\x01\x2f\x01\x2f\x01\x3d\x01\xab\x00\x40\x01\x24\x00\x9e\x01\x39\x00\x4d\x00\xae\x01\x94\x01\x0a\x00\x0b\x00\x96\x01\x95\x01\x05\x00\x06\x00\x07\x00\xac\x00\xad\x00\xae\x00\xa0\x00\x24\x00\x9d\x01\xab\x01\xa3\x00\xee\x00\x0a\x00\x0b\x00\xab\x00\xef\x00\x84\x01\xa0\x00\x76\x01\x88\x01\x4a\x01\x4b\x01\x24\x00\x97\x01\x8c\x01\x78\x01\xcb\x00\x7a\x01\xf1\x00\x0b\x00\x1d\x01\xae\x00\x0a\x00\x0b\x00\x26\x00\x04\x00\x08\x00\xf2\x00\x0e\x00\x0f\x00\x10\x00\xa5\x00\x12\x00\x41\x01\x42\x01\x97\x01\xcb\x00\x7e\x01\xc8\x00\xc8\x00\x4f\x01\xaa\x01\x4f\x01\x90\x01\x4f\x01\x50\x01\xa4\x01\x86\x01\x28\x01\x29\x01\x2a\x01\x42\x00\xa7\x01\xa7\x01\xa8\x01\xa9\x01\x7e\x01\x30\x01\x36\x01\x37\x01\xf3\x00\x08\x00\xec\x00\x40\x01\xf4\x00\xf5\x00\xf6\x00\xa1\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\xa2\x00\x01\x01\x02\x01\x03\x01\xcc\x00\x9f\x00\x04\x01\x62\x01\x05\x01\x7b\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\xf1\x00\x0b\x00\x63\x01\x4b\x00\x42\x01\x85\x01\x4c\x00\x0a\x00\x0b\x00\xf2\x00\x0e\x00\x0f\x00\x10\x00\xa5\x00\x12\x00\xd4\x00\xd5\x00\xd6\x00\xbd\x00\xd7\x00\x49\x00\x6e\x01\x45\x00\x41\x01\x46\x00\x89\x01\x42\x01\x24\x00\x9f\x00\xc4\x00\x4f\x00\x56\x00\x57\x00\x50\x00\x36\x01\x98\x00\x51\x00\x8a\x01\x58\x00\x24\x00\x25\x00\x99\x00\xf3\x00\x43\x01\x44\x01\x45\x01\x5c\x01\xf5\x00\xf6\x00\x53\x01\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x42\x01\x01\x01\x02\x01\x03\x01\xd8\x00\x43\x01\x04\x01\x87\x01\x05\x01\x48\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\xf1\x00\x0b\x00\x24\x00\x25\x00\x59\x00\x57\x01\x0a\x00\x0b\x00\x59\x01\xf2\x00\x0e\x00\x0f\x00\x10\x00\xa5\x00\x12\x00\x60\x01\x31\x00\xbe\x00\x4f\x00\x32\x00\x3b\x00\x50\x00\x4d\x00\x43\x01\x51\x00\x47\x01\x52\x00\x63\x01\x53\x00\x56\x00\x57\x00\x49\x01\x4a\x01\x4b\x01\x54\x00\x31\x00\x58\x00\x33\x00\x69\x01\x7c\x01\x0a\x00\x3e\x00\xf3\x00\x3f\x00\xf1\x00\x37\x00\xf4\x00\xf5\x00\xf6\x00\x70\x01\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x72\x01\x01\x01\x02\x01\x03\x01\x43\x00\x16\x00\x04\x01\x6f\x01\x05\x01\x73\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x40\x01\x18\x00\x99\x00\x9a\x00\x9d\x00\x0d\x01\x0e\x01\x0f\x01\x57\x00\xa5\x01\xcf\x00\xd0\x00\xd1\x00\xd2\x00\x10\x01\x11\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1a\x00\x1b\x00\x0a\x00\x0b\x00\xed\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\x1d\x00\x24\x00\x25\x00\x1b\x01\x1e\x00\x6d\x01\x6e\x01\x39\x00\x1f\x00\x20\x00\x74\x01\x21\x00\x26\x01\x45\x00\x3d\x00\xdc\x00\x3e\x00\x2b\x01\x2d\x01\x41\x01\x2e\x01\x1c\x01\x24\x00\x24\x00\x25\x00\x31\x01\x26\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x18\x00\xe6\x00\xd1\x00\xd2\x00\x0d\x01\x0e\x01\x0f\x01\x57\x00\xa2\x01\xcf\x00\xd0\x00\xd1\x00\xd2\x00\x10\x01\x11\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1a\x00\x1b\x00\x32\x01\x33\x01\x18\x00\x4d\x01\xcf\x00\xd0\x00\xd1\x00\xd2\x00\x1d\x00\x34\x01\x31\x00\x1b\x01\x1e\x00\x69\x01\x6a\x01\x38\x01\x1f\x00\x20\x00\x19\x00\x21\x00\x31\x00\x3a\x01\x3d\x00\x32\x00\x3e\x00\x3d\x01\x1a\x00\x1b\x00\x1c\x00\x1c\x01\x18\x00\x24\x00\x25\x00\x3e\x01\x26\x00\x31\x00\x1d\x00\xdf\x00\x69\x01\x6b\x01\x1e\x00\xd8\x00\xe5\x00\xea\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x84\x01\xda\x00\x22\x00\xdd\x00\x23\x00\x2e\x00\x1a\x00\x1b\x00\x1c\x00\x4d\x00\x18\x00\x24\x00\x25\x00\x39\x00\x26\x00\x4e\x00\x1d\x00\x59\x00\x04\x00\x3a\x00\x1e\x00\x3b\x00\x0a\x00\x24\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x24\x00\xad\x01\x22\x00\x31\x00\x23\x00\x0a\x00\x1a\x00\x1b\x00\x1c\x00\x9d\x01\x18\x00\x24\x00\x25\x00\x3d\x01\x26\x00\x0a\x00\x1d\x00\xd4\x00\xd5\x00\xd6\x00\x1e\x00\xd7\x00\xa0\x01\xa1\x01\x1f\x00\x20\x00\x19\x00\x21\x00\x31\x00\xa2\x01\x22\x00\x32\x00\x23\x00\x2e\x00\x1a\x00\x1b\x00\x1c\x00\x0a\x00\x18\x00\x24\x00\x25\x00\x8e\x01\x26\x00\x31\x00\x1d\x00\x8f\x01\x69\x01\x6c\x01\x1e\x00\xd8\x00\x0a\x00\x24\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x64\x01\xda\x00\x22\x00\x31\x00\x23\x00\x99\x01\x1a\x00\x1b\x00\x99\x00\x9a\x00\xca\x00\x24\x00\x25\x00\x9b\x01\x26\x00\xdf\x00\x1d\x00\x9c\x01\x78\x01\x18\x00\x1e\x00\x99\x00\x9a\x00\x9b\x00\x1f\x00\x20\x00\x98\xff\x21\x00\x72\x01\x98\xff\x3d\x00\x31\x00\x3e\x00\xdf\x00\x32\x00\x19\x00\x7a\x01\x0a\x00\x0b\x00\x24\x00\x25\x00\x28\x01\x26\x00\x1a\x00\x1b\x00\x1c\x00\xdf\x00\x18\x00\x48\x00\x10\x00\x49\x00\x12\x00\xd8\x00\x1d\x00\x99\x00\x9a\x00\x9c\x00\x1e\x00\x0a\x00\x65\x01\xda\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x31\x00\x80\x01\x22\x00\x32\x00\x23\x00\x81\x01\x1a\x00\x1b\x00\x82\x01\x24\x00\x18\x00\x24\x00\x25\x00\x0a\x00\x26\x00\x4d\x01\x1d\x00\x99\x00\x9a\x00\x9d\x00\x1e\x00\xd8\x00\x0a\x00\x24\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x66\x01\xda\x00\x3d\x00\x53\x01\x3e\x00\xb3\x00\x1a\x00\x1b\x00\x55\x01\x56\x01\x18\x00\x24\x00\x25\x00\x57\x01\x26\x00\x24\x00\x1d\x00\xd4\x00\xd5\x00\xd6\x00\x1e\x00\x59\x01\x24\x00\x5c\x01\x1f\x00\x20\x00\x19\x00\x21\x00\x5b\x01\x69\x01\x3d\x00\xb4\x00\x3e\x00\x24\x00\x1a\x00\x1b\x00\x1c\x00\x3c\x01\x18\x00\x24\x00\x25\x00\x28\x01\x26\x00\x0a\x00\x1d\x00\x72\x01\xdf\x00\x76\x01\x1e\x00\x2d\x01\x0a\x00\x0a\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x31\x00\x24\x00\x22\x00\x32\x00\x23\x00\x3a\x01\x1a\x00\x1b\x00\x3c\x01\x0a\x00\x4d\x01\x24\x00\x25\x00\x52\x01\x26\x00\x0a\x00\x1d\x00\xdf\x00\xe1\x00\xe4\x00\x1e\x00\xd8\x00\xe2\x00\x24\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x67\x01\xda\x00\x3d\x00\xe8\x00\x3e\x00\xe9\x00\x1a\x00\x1b\x00\xea\x00\xd6\x00\x24\x00\x24\x00\x25\x00\x1f\x01\x26\x00\x20\x01\x1d\x00\x0a\x00\x0b\x00\xc5\x00\x1e\x00\xc6\x00\xc7\x00\x31\x00\x1f\x00\x20\x00\x32\x00\x0a\x00\x48\x00\x10\x00\x3d\x00\xa8\x00\x3e\x00\x31\x00\x4c\x00\x31\x00\x32\x00\xdd\x00\x32\x00\x24\x00\x25\x00\x0a\x00\x26\x00\xdf\x00\x33\x00\xaa\x00\xab\x00\x24\x00\x34\x00\x35\x00\x36\x00\xb0\x00\x37\x00\xb8\x00\xd8\x00\x31\x00\xd8\x00\xba\x00\x32\x00\xb9\x00\xbb\x00\xe2\x00\xda\x00\xe4\x00\xda\x00\x31\x00\x31\x00\xa9\xff\x32\x00\x32\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd8\x00\x22\x01\x23\x01\x24\x01\x25\x01\x26\x01\x99\x00\xd9\x00\xda\x00\xbc\x00\x33\x00\x33\x00\xbd\x00\xff\xff\x41\x00\x47\x00\xb4\x00\xb6\x00\x37\x00\x37\x00\x0a\x00\x0b\x00\x0a\x00\xff\xff\x4d\x00\x28\x00\x0a\x00\xff\xff\xc0\x00\x0d\x00\x0e\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\xc1\x00\x20\x01\x2c\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\xc0\x00\x0d\x00\x0e\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\xc1\x00\xc2\x00\x2c\x00\x27\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x29\x00\x0d\x00\x0e\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2b\x00\x00\x00\x2c\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x2e\x00\x0d\x00\x0e\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2f\x00\x00\x00\x2c\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x10\x00\x00\x00\xa8\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\xa7\x00\x10\x00\x00\x00\xa8\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\xa7\x00\x10\x00\x00\x00\xa8\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x2f\x00\x00\x00\x2c\x00\x00\x00\xa7\x00\x10\x00\x00\x00\xa8\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\xa7\x00\x10\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x2c\x00\xa3\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\x8f\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\x91\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\x92\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\x93\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\x5d\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\x5e\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\x5f\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\x1c\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\xbe\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\xbf\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\xc9\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\xa6\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\xb0\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x27\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\x29\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\x2e\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\xb5\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\x47\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x0f\x00\x10\x00\xa5\x00\x12\x00\xeb\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
-
-happyReduceArr = array (3, 251) [
-	(3 , happyReduce_3),
-	(4 , happyReduce_4),
-	(5 , happyReduce_5),
-	(6 , happyReduce_6),
-	(7 , happyReduce_7),
-	(8 , happyReduce_8),
-	(9 , happyReduce_9),
-	(10 , happyReduce_10),
-	(11 , happyReduce_11),
-	(12 , happyReduce_12),
-	(13 , happyReduce_13),
-	(14 , happyReduce_14),
-	(15 , happyReduce_15),
-	(16 , happyReduce_16),
-	(17 , happyReduce_17),
-	(18 , happyReduce_18),
-	(19 , happyReduce_19),
-	(20 , happyReduce_20),
-	(21 , happyReduce_21),
-	(22 , happyReduce_22),
-	(23 , happyReduce_23),
-	(24 , happyReduce_24),
-	(25 , happyReduce_25),
-	(26 , happyReduce_26),
-	(27 , happyReduce_27),
-	(28 , happyReduce_28),
-	(29 , happyReduce_29),
-	(30 , happyReduce_30),
-	(31 , happyReduce_31),
-	(32 , happyReduce_32),
-	(33 , happyReduce_33),
-	(34 , happyReduce_34),
-	(35 , happyReduce_35),
-	(36 , happyReduce_36),
-	(37 , happyReduce_37),
-	(38 , happyReduce_38),
-	(39 , happyReduce_39),
-	(40 , happyReduce_40),
-	(41 , happyReduce_41),
-	(42 , happyReduce_42),
-	(43 , happyReduce_43),
-	(44 , happyReduce_44),
-	(45 , happyReduce_45),
-	(46 , happyReduce_46),
-	(47 , happyReduce_47),
-	(48 , happyReduce_48),
-	(49 , happyReduce_49),
-	(50 , happyReduce_50),
-	(51 , happyReduce_51),
-	(52 , happyReduce_52),
-	(53 , happyReduce_53),
-	(54 , happyReduce_54),
-	(55 , happyReduce_55),
-	(56 , happyReduce_56),
-	(57 , happyReduce_57),
-	(58 , happyReduce_58),
-	(59 , happyReduce_59),
-	(60 , happyReduce_60),
-	(61 , happyReduce_61),
-	(62 , happyReduce_62),
-	(63 , happyReduce_63),
-	(64 , happyReduce_64),
-	(65 , happyReduce_65),
-	(66 , happyReduce_66),
-	(67 , happyReduce_67),
-	(68 , happyReduce_68),
-	(69 , happyReduce_69),
-	(70 , happyReduce_70),
-	(71 , happyReduce_71),
-	(72 , happyReduce_72),
-	(73 , happyReduce_73),
-	(74 , happyReduce_74),
-	(75 , happyReduce_75),
-	(76 , happyReduce_76),
-	(77 , happyReduce_77),
-	(78 , happyReduce_78),
-	(79 , happyReduce_79),
-	(80 , happyReduce_80),
-	(81 , happyReduce_81),
-	(82 , happyReduce_82),
-	(83 , happyReduce_83),
-	(84 , happyReduce_84),
-	(85 , happyReduce_85),
-	(86 , happyReduce_86),
-	(87 , happyReduce_87),
-	(88 , happyReduce_88),
-	(89 , happyReduce_89),
-	(90 , happyReduce_90),
-	(91 , happyReduce_91),
-	(92 , happyReduce_92),
-	(93 , happyReduce_93),
-	(94 , happyReduce_94),
-	(95 , happyReduce_95),
-	(96 , happyReduce_96),
-	(97 , happyReduce_97),
-	(98 , happyReduce_98),
-	(99 , happyReduce_99),
-	(100 , happyReduce_100),
-	(101 , happyReduce_101),
-	(102 , happyReduce_102),
-	(103 , happyReduce_103),
-	(104 , happyReduce_104),
-	(105 , happyReduce_105),
-	(106 , happyReduce_106),
-	(107 , happyReduce_107),
-	(108 , happyReduce_108),
-	(109 , happyReduce_109),
-	(110 , happyReduce_110),
-	(111 , happyReduce_111),
-	(112 , happyReduce_112),
-	(113 , happyReduce_113),
-	(114 , happyReduce_114),
-	(115 , happyReduce_115),
-	(116 , happyReduce_116),
-	(117 , happyReduce_117),
-	(118 , happyReduce_118),
-	(119 , happyReduce_119),
-	(120 , happyReduce_120),
-	(121 , happyReduce_121),
-	(122 , happyReduce_122),
-	(123 , happyReduce_123),
-	(124 , happyReduce_124),
-	(125 , happyReduce_125),
-	(126 , happyReduce_126),
-	(127 , happyReduce_127),
-	(128 , happyReduce_128),
-	(129 , happyReduce_129),
-	(130 , happyReduce_130),
-	(131 , happyReduce_131),
-	(132 , happyReduce_132),
-	(133 , happyReduce_133),
-	(134 , happyReduce_134),
-	(135 , happyReduce_135),
-	(136 , happyReduce_136),
-	(137 , happyReduce_137),
-	(138 , happyReduce_138),
-	(139 , happyReduce_139),
-	(140 , happyReduce_140),
-	(141 , happyReduce_141),
-	(142 , happyReduce_142),
-	(143 , happyReduce_143),
-	(144 , happyReduce_144),
-	(145 , happyReduce_145),
-	(146 , happyReduce_146),
-	(147 , happyReduce_147),
-	(148 , happyReduce_148),
-	(149 , happyReduce_149),
-	(150 , happyReduce_150),
-	(151 , happyReduce_151),
-	(152 , happyReduce_152),
-	(153 , happyReduce_153),
-	(154 , happyReduce_154),
-	(155 , happyReduce_155),
-	(156 , happyReduce_156),
-	(157 , happyReduce_157),
-	(158 , happyReduce_158),
-	(159 , happyReduce_159),
-	(160 , happyReduce_160),
-	(161 , happyReduce_161),
-	(162 , happyReduce_162),
-	(163 , happyReduce_163),
-	(164 , happyReduce_164),
-	(165 , happyReduce_165),
-	(166 , happyReduce_166),
-	(167 , happyReduce_167),
-	(168 , happyReduce_168),
-	(169 , happyReduce_169),
-	(170 , happyReduce_170),
-	(171 , happyReduce_171),
-	(172 , happyReduce_172),
-	(173 , happyReduce_173),
-	(174 , happyReduce_174),
-	(175 , happyReduce_175),
-	(176 , happyReduce_176),
-	(177 , happyReduce_177),
-	(178 , happyReduce_178),
-	(179 , happyReduce_179),
-	(180 , happyReduce_180),
-	(181 , happyReduce_181),
-	(182 , happyReduce_182),
-	(183 , happyReduce_183),
-	(184 , happyReduce_184),
-	(185 , happyReduce_185),
-	(186 , happyReduce_186),
-	(187 , happyReduce_187),
-	(188 , happyReduce_188),
-	(189 , happyReduce_189),
-	(190 , happyReduce_190),
-	(191 , happyReduce_191),
-	(192 , happyReduce_192),
-	(193 , happyReduce_193),
-	(194 , happyReduce_194),
-	(195 , happyReduce_195),
-	(196 , happyReduce_196),
-	(197 , happyReduce_197),
-	(198 , happyReduce_198),
-	(199 , happyReduce_199),
-	(200 , happyReduce_200),
-	(201 , happyReduce_201),
-	(202 , happyReduce_202),
-	(203 , happyReduce_203),
-	(204 , happyReduce_204),
-	(205 , happyReduce_205),
-	(206 , happyReduce_206),
-	(207 , happyReduce_207),
-	(208 , happyReduce_208),
-	(209 , happyReduce_209),
-	(210 , happyReduce_210),
-	(211 , happyReduce_211),
-	(212 , happyReduce_212),
-	(213 , happyReduce_213),
-	(214 , happyReduce_214),
-	(215 , happyReduce_215),
-	(216 , happyReduce_216),
-	(217 , happyReduce_217),
-	(218 , happyReduce_218),
-	(219 , happyReduce_219),
-	(220 , happyReduce_220),
-	(221 , happyReduce_221),
-	(222 , happyReduce_222),
-	(223 , happyReduce_223),
-	(224 , happyReduce_224),
-	(225 , happyReduce_225),
-	(226 , happyReduce_226),
-	(227 , happyReduce_227),
-	(228 , happyReduce_228),
-	(229 , happyReduce_229),
-	(230 , happyReduce_230),
-	(231 , happyReduce_231),
-	(232 , happyReduce_232),
-	(233 , happyReduce_233),
-	(234 , happyReduce_234),
-	(235 , happyReduce_235),
-	(236 , happyReduce_236),
-	(237 , happyReduce_237),
-	(238 , happyReduce_238),
-	(239 , happyReduce_239),
-	(240 , happyReduce_240),
-	(241 , happyReduce_241),
-	(242 , happyReduce_242),
-	(243 , happyReduce_243),
-	(244 , happyReduce_244),
-	(245 , happyReduce_245),
-	(246 , happyReduce_246),
-	(247 , happyReduce_247),
-	(248 , happyReduce_248),
-	(249 , happyReduce_249),
-	(250 , happyReduce_250),
-	(251 , happyReduce_251)
-	]
-
-happy_n_terms = 63 :: Int
-happy_n_nonterms = 92 :: Int
-
-happyReduce_3 = happySpecReduce_1  0# happyReduction_3
-happyReduction_3 happy_x_1
-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
-	happyIn6
-		 (reverse happy_var_1
-	)}
-
-happyReduce_4 = happySpecReduce_2  1# happyReduction_4
-happyReduction_4 happy_x_2
-	happy_x_1
-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
-	case happyOut8 happy_x_2 of { happy_var_2 -> 
-	happyIn7
-		 (happy_var_2 : happy_var_1
-	)}}
-
-happyReduce_5 = happySpecReduce_0  1# happyReduction_5
-happyReduction_5  =  happyIn7
-		 ([]
-	)
-
-happyReduce_6 = happySpecReduce_1  2# happyReduction_6
-happyReduction_6 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwLet happy_var_1
-	)}
-
-happyReduce_7 = happySpecReduce_1  2# happyReduction_7
-happyReduction_7 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwIn happy_var_1
-	)}
-
-happyReduce_8 = happySpecReduce_1  2# happyReduction_8
-happyReduction_8 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwWhere happy_var_1
-	)}
-
-happyReduce_9 = happySpecReduce_1  2# happyReduction_9
-happyReduction_9 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwWith happy_var_1
-	)}
-
-happyReduce_10 = happySpecReduce_1  2# happyReduction_10
-happyReduction_10 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwPostulate happy_var_1
-	)}
-
-happyReduce_11 = happySpecReduce_1  2# happyReduction_11
-happyReduction_11 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwPrimitive happy_var_1
-	)}
-
-happyReduce_12 = happySpecReduce_1  2# happyReduction_12
-happyReduction_12 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwOpen happy_var_1
-	)}
-
-happyReduce_13 = happySpecReduce_1  2# happyReduction_13
-happyReduction_13 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwImport happy_var_1
-	)}
-
-happyReduce_14 = happySpecReduce_1  2# happyReduction_14
-happyReduction_14 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwUsing happy_var_1
-	)}
-
-happyReduce_15 = happySpecReduce_1  2# happyReduction_15
-happyReduction_15 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwHiding happy_var_1
-	)}
-
-happyReduce_16 = happySpecReduce_1  2# happyReduction_16
-happyReduction_16 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwRenaming happy_var_1
-	)}
-
-happyReduce_17 = happySpecReduce_1  2# happyReduction_17
-happyReduction_17 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwTo happy_var_1
-	)}
-
-happyReduce_18 = happySpecReduce_1  2# happyReduction_18
-happyReduction_18 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwPublic happy_var_1
-	)}
-
-happyReduce_19 = happySpecReduce_1  2# happyReduction_19
-happyReduction_19 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwModule happy_var_1
-	)}
-
-happyReduce_20 = happySpecReduce_1  2# happyReduction_20
-happyReduction_20 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwData happy_var_1
-	)}
-
-happyReduce_21 = happySpecReduce_1  2# happyReduction_21
-happyReduction_21 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwCoData happy_var_1
-	)}
-
-happyReduce_22 = happySpecReduce_1  2# happyReduction_22
-happyReduction_22 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwRecord happy_var_1
-	)}
-
-happyReduce_23 = happySpecReduce_1  2# happyReduction_23
-happyReduction_23 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwField happy_var_1
-	)}
-
-happyReduce_24 = happySpecReduce_1  2# happyReduction_24
-happyReduction_24 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwInfix happy_var_1
-	)}
-
-happyReduce_25 = happySpecReduce_1  2# happyReduction_25
-happyReduction_25 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwInfixL happy_var_1
-	)}
-
-happyReduce_26 = happySpecReduce_1  2# happyReduction_26
-happyReduction_26 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwInfixR happy_var_1
-	)}
-
-happyReduce_27 = happySpecReduce_1  2# happyReduction_27
-happyReduction_27 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwMutual happy_var_1
-	)}
-
-happyReduce_28 = happySpecReduce_1  2# happyReduction_28
-happyReduction_28 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwAbstract happy_var_1
-	)}
-
-happyReduce_29 = happySpecReduce_1  2# happyReduction_29
-happyReduction_29 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwPrivate happy_var_1
-	)}
-
-happyReduce_30 = happySpecReduce_1  2# happyReduction_30
-happyReduction_30 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwProp happy_var_1
-	)}
-
-happyReduce_31 = happySpecReduce_1  2# happyReduction_31
-happyReduction_31 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwSet happy_var_1
-	)}
-
-happyReduce_32 = happySpecReduce_1  2# happyReduction_32
-happyReduction_32 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwForall happy_var_1
-	)}
-
-happyReduce_33 = happySpecReduce_1  2# happyReduction_33
-happyReduction_33 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwOPTIONS happy_var_1
-	)}
-
-happyReduce_34 = happySpecReduce_1  2# happyReduction_34
-happyReduction_34 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwBUILTIN happy_var_1
-	)}
-
-happyReduce_35 = happySpecReduce_1  2# happyReduction_35
-happyReduction_35 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwIMPORT happy_var_1
-	)}
-
-happyReduce_36 = happySpecReduce_1  2# happyReduction_36
-happyReduction_36 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwCOMPILED happy_var_1
-	)}
-
-happyReduce_37 = happySpecReduce_1  2# happyReduction_37
-happyReduction_37 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwCOMPILED_DATA happy_var_1
-	)}
-
-happyReduce_38 = happySpecReduce_1  2# happyReduction_38
-happyReduction_38 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwCOMPILED_TYPE happy_var_1
-	)}
-
-happyReduce_39 = happySpecReduce_1  2# happyReduction_39
-happyReduction_39 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLINE happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwLINE happy_var_1
-	)}
-
-happyReduce_40 = happySpecReduce_1  2# happyReduction_40
-happyReduction_40 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> 
-	happyIn8
-		 (TokSetN happy_var_1
-	)}
-
-happyReduce_41 = happySpecReduce_1  2# happyReduction_41
-happyReduction_41 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> 
-	happyIn8
-		 (TokTeX happy_var_1
-	)}
-
-happyReduce_42 = happySpecReduce_1  2# happyReduction_42
-happyReduction_42 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> 
-	happyIn8
-		 (TokComment happy_var_1
-	)}
-
-happyReduce_43 = happySpecReduce_1  2# happyReduction_43
-happyReduction_43 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymEllipsis happy_var_1
-	)}
-
-happyReduce_44 = happySpecReduce_1  2# happyReduction_44
-happyReduction_44 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymDot happy_var_1
-	)}
-
-happyReduce_45 = happySpecReduce_1  2# happyReduction_45
-happyReduction_45 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymSemi happy_var_1
-	)}
-
-happyReduce_46 = happySpecReduce_1  2# happyReduction_46
-happyReduction_46 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymColon happy_var_1
-	)}
-
-happyReduce_47 = happySpecReduce_1  2# happyReduction_47
-happyReduction_47 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymEqual happy_var_1
-	)}
-
-happyReduce_48 = happySpecReduce_1  2# happyReduction_48
-happyReduction_48 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymUnderscore happy_var_1
-	)}
-
-happyReduce_49 = happySpecReduce_1  2# happyReduction_49
-happyReduction_49 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymQuestionMark happy_var_1
-	)}
-
-happyReduce_50 = happySpecReduce_1  2# happyReduction_50
-happyReduction_50 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymArrow happy_var_1
-	)}
-
-happyReduce_51 = happySpecReduce_1  2# happyReduction_51
-happyReduction_51 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymLambda happy_var_1
-	)}
-
-happyReduce_52 = happySpecReduce_1  2# happyReduction_52
-happyReduction_52 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymAs happy_var_1
-	)}
-
-happyReduce_53 = happySpecReduce_1  2# happyReduction_53
-happyReduction_53 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymBar happy_var_1
-	)}
-
-happyReduce_54 = happySpecReduce_1  2# happyReduction_54
-happyReduction_54 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymOpenParen happy_var_1
-	)}
-
-happyReduce_55 = happySpecReduce_1  2# happyReduction_55
-happyReduction_55 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymCloseParen happy_var_1
-	)}
-
-happyReduce_56 = happySpecReduce_1  2# happyReduction_56
-happyReduction_56 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymOpenBrace happy_var_1
-	)}
-
-happyReduce_57 = happySpecReduce_1  2# happyReduction_57
-happyReduction_57 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymCloseBrace happy_var_1
-	)}
-
-happyReduce_58 = happySpecReduce_1  2# happyReduction_58
-happyReduction_58 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymOpenVirtualBrace happy_var_1
-	)}
-
-happyReduce_59 = happySpecReduce_1  2# happyReduction_59
-happyReduction_59 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymCloseVirtualBrace happy_var_1
-	)}
-
-happyReduce_60 = happySpecReduce_1  2# happyReduction_60
-happyReduction_60 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymVirtualSemi happy_var_1
-	)}
-
-happyReduce_61 = happySpecReduce_1  2# happyReduction_61
-happyReduction_61 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymOpenPragma happy_var_1
-	)}
-
-happyReduce_62 = happySpecReduce_1  2# happyReduction_62
-happyReduction_62 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymClosePragma happy_var_1
-	)}
-
-happyReduce_63 = happySpecReduce_1  2# happyReduction_63
-happyReduction_63 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
-	happyIn8
-		 (TokId happy_var_1
-	)}
-
-happyReduce_64 = happySpecReduce_1  2# happyReduction_64
-happyReduction_64 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> 
-	happyIn8
-		 (TokQId happy_var_1
-	)}
-
-happyReduce_65 = happySpecReduce_1  2# happyReduction_65
-happyReduction_65 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
-	happyIn8
-		 (TokString happy_var_1
-	)}
-
-happyReduce_66 = happySpecReduce_1  2# happyReduction_66
-happyReduction_66 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
-	happyIn8
-		 (TokLiteral happy_var_1
-	)}
-
-happyReduce_67 = happySpecReduce_0  3# happyReduction_67
-happyReduction_67  =  happyIn9
-		 (()
-	)
-
-happyReduce_68 = happySpecReduce_2  3# happyReduction_68
-happyReduction_68 happy_x_2
-	happy_x_1
-	 =  happyIn9
-		 (()
-	)
-
-happyReduce_69 = happySpecReduce_2  4# happyReduction_69
-happyReduction_69 happy_x_2
-	happy_x_1
-	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
-	happyIn10
-		 (happy_var_1
-	)}
-
-happyReduce_70 = happySpecReduce_1  5# happyReduction_70
-happyReduction_70 happy_x_1
-	 =  case happyOut80 happy_x_1 of { happy_var_1 -> 
-	happyIn11
-		 (([], happy_var_1)
-	)}
-
-happyReduce_71 = happySpecReduce_3  5# happyReduction_71
-happyReduction_71 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut83 happy_x_2 of { happy_var_2 -> 
-	case happyOut11 happy_x_3 of { happy_var_3 -> 
-	happyIn11
-		 (let (ps,m) = happy_var_3 in (happy_var_2 : ps, m)
-	)}}
-
-happyReduce_72 = happySpecReduce_1  6# happyReduction_72
-happyReduction_72 happy_x_1
-	 =  happyIn12
-		 (()
-	)
-
-happyReduce_73 = happyMonadReduce 1# 6# happyReduction_73
-happyReduction_73 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (( popContext)
-	) (\r -> happyReturn (happyIn12 r))
-
-happyReduce_74 = happySpecReduce_1  7# happyReduction_74
-happyReduction_74 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> 
-	happyIn13
-		 (happy_var_1
-	)}
-
-happyReduce_75 = happySpecReduce_2  7# happyReduction_75
-happyReduction_75 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_2 of { (TokSymbol SymVirtualSemi happy_var_2) -> 
-	happyIn13
-		 (happy_var_2
-	)}
-
-happyReduce_76 = happyMonadReduce 0# 8# happyReduction_76
-happyReduction_76 (happyRest) tk
-	 = happyThen (( pushLexState imp_dir)
-	) (\r -> happyReturn (happyIn14 r))
-
-happyReduce_77 = happyMonadReduce 1# 9# happyReduction_77
-happyReduction_77 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
-	( case happy_var_1 of {
-		     LitInt _ n	-> return $ fromIntegral n;
-		     _		-> fail $ "Expected integer"
-		   })}
-	) (\r -> happyReturn (happyIn15 r))
-
-happyReduce_78 = happyMonadReduce 1# 10# happyReduction_78
-happyReduction_78 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
-	( mkName happy_var_1)}
-	) (\r -> happyReturn (happyIn16 r))
-
-happyReduce_79 = happyMonadReduce 1# 11# happyReduction_79
-happyReduction_79 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> 
-	( mkQName happy_var_1)}
-	) (\r -> happyReturn (happyIn17 r))
-
-happyReduce_80 = happySpecReduce_1  11# happyReduction_80
-happyReduction_80 happy_x_1
-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
-	happyIn17
-		 (QName happy_var_1
-	)}
-
-happyReduce_81 = happySpecReduce_1  12# happyReduction_81
-happyReduction_81 happy_x_1
-	 =  case happyOut17 happy_x_1 of { happy_var_1 -> 
-	happyIn18
-		 (happy_var_1
-	)}
-
-happyReduce_82 = happySpecReduce_1  13# happyReduction_82
-happyReduction_82 happy_x_1
-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
-	happyIn19
-		 (happy_var_1
-	)}
-
-happyReduce_83 = happySpecReduce_1  13# happyReduction_83
-happyReduction_83 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
-	happyIn19
-		 (Name (getRange happy_var_1) [Hole]
-	)}
-
-happyReduce_84 = happySpecReduce_2  14# happyReduction_84
-happyReduction_84 happy_x_2
-	happy_x_1
-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
-	case happyOut20 happy_x_2 of { happy_var_2 -> 
-	happyIn20
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_85 = happySpecReduce_1  14# happyReduction_85
-happyReduction_85 happy_x_1
-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
-	happyIn20
-		 ([happy_var_1]
-	)}
-
-happyReduce_86 = happyMonadReduce 1# 15# happyReduction_86
-happyReduction_86 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut27 happy_x_1 of { happy_var_1 -> 
-	(
-    let getName (Ident (QName x)) = Just x
-	getName (Underscore r _)  = Just (Name r [Hole])
-	getName _		  = Nothing
-    in
-    case partition isJust $ map getName happy_var_1 of
-	(good, []) -> return $ map fromJust good
-	_	   -> fail $ "expected sequence of bound identifiers")}
-	) (\r -> happyReturn (happyIn21 r))
-
-happyReduce_87 = happySpecReduce_0  16# happyReduction_87
-happyReduction_87  =  happyIn22
-		 ([]
-	)
-
-happyReduce_88 = happySpecReduce_2  16# happyReduction_88
-happyReduction_88 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
-	case happyOut22 happy_x_2 of { happy_var_2 -> 
-	happyIn22
-		 (snd happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_89 = happyMonadReduce 1# 17# happyReduction_89
-happyReduction_89 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
-	( fmap QName (mkName happy_var_1))}
-	) (\r -> happyReturn (happyIn23 r))
-
-happyReduce_90 = happySpecReduce_2  18# happyReduction_90
-happyReduction_90 happy_x_2
-	happy_x_1
-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
-	case happyOut24 happy_x_2 of { happy_var_2 -> 
-	happyIn24
-		 (Pi happy_var_1 happy_var_2
-	)}}
-
-happyReduce_91 = happySpecReduce_3  18# happyReduction_91
-happyReduction_91 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut41 happy_x_2 of { happy_var_2 -> 
-	case happyOut24 happy_x_3 of { happy_var_3 -> 
-	happyIn24
-		 (forallPi happy_var_2 happy_var_3
-	)}}
-
-happyReduce_92 = happySpecReduce_3  18# happyReduction_92
-happyReduction_92 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut29 happy_x_1 of { happy_var_1 -> 
-	case happyOut24 happy_x_3 of { happy_var_3 -> 
-	happyIn24
-		 (Fun (fuseRange happy_var_1 happy_var_3) (RawApp (getRange happy_var_1) happy_var_1) happy_var_3
-	)}}
-
-happyReduce_93 = happySpecReduce_1  18# happyReduction_93
-happyReduction_93 happy_x_1
-	 =  case happyOut25 happy_x_1 of { happy_var_1 -> 
-	happyIn24
-		 (happy_var_1
-	)}
-
-happyReduce_94 = happyMonadReduce 1# 19# happyReduction_94
-happyReduction_94 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut26 happy_x_1 of { happy_var_1 -> 
-	( case happy_var_1 of
-		      { [e]    -> return e
-		      ; e : es -> return $ WithApp (fuseRange e es) e es
-		      ; []     -> fail "impossible: empty with expressions"
-		      })}
-	) (\r -> happyReturn (happyIn25 r))
-
-happyReduce_95 = happySpecReduce_3  20# happyReduction_95
-happyReduction_95 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut29 happy_x_1 of { happy_var_1 -> 
-	case happyOut26 happy_x_3 of { happy_var_3 -> 
-	happyIn26
-		 (RawApp (getRange happy_var_1) happy_var_1 :  happy_var_3
-	)}}
-
-happyReduce_96 = happySpecReduce_1  20# happyReduction_96
-happyReduction_96 happy_x_1
-	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
-	happyIn26
-		 ([RawApp (getRange happy_var_1) happy_var_1]
-	)}
-
-happyReduce_97 = happySpecReduce_1  21# happyReduction_97
-happyReduction_97 happy_x_1
-	 =  case happyOut28 happy_x_1 of { happy_var_1 -> 
-	happyIn27
-		 ([happy_var_1]
-	)}
-
-happyReduce_98 = happySpecReduce_2  21# happyReduction_98
-happyReduction_98 happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
-	case happyOut27 happy_x_2 of { happy_var_2 -> 
-	happyIn27
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_99 = happySpecReduce_3  22# happyReduction_99
-happyReduction_99 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
-	case happyOut41 happy_x_2 of { happy_var_2 -> 
-	case happyOut24 happy_x_3 of { happy_var_3 -> 
-	happyIn28
-		 (Lam (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3
-	)}}}
-
-happyReduce_100 = happySpecReduce_2  22# happyReduction_100
-happyReduction_100 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
-	case happyOut42 happy_x_2 of { happy_var_2 -> 
-	happyIn28
-		 (let (bs, h) = happy_var_2; r = fuseRange happy_var_1 bs in
-                                     if null bs then AbsurdLam r h else
-                                     Lam r bs (AbsurdLam r h)
-	)}}
-
-happyReduce_101 = happyReduce 4# 22# happyReduction_101
-happyReduction_101 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> 
-	case happyOut95 happy_x_2 of { happy_var_2 -> 
-	case happyOut24 happy_x_4 of { happy_var_4 -> 
-	happyIn28
-		 (Let (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4
-	) `HappyStk` happyRest}}}
-
-happyReduce_102 = happySpecReduce_1  22# happyReduction_102
-happyReduction_102 happy_x_1
-	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
-	happyIn28
-		 (happy_var_1
-	)}
-
-happyReduce_103 = happySpecReduce_1  23# happyReduction_103
-happyReduction_103 happy_x_1
-	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
-	happyIn29
-		 ([happy_var_1]
-	)}
-
-happyReduce_104 = happySpecReduce_2  23# happyReduction_104
-happyReduction_104 happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
-	case happyOut29 happy_x_2 of { happy_var_2 -> 
-	happyIn29
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_105 = happySpecReduce_1  24# happyReduction_105
-happyReduction_105 happy_x_1
-	 =  case happyOut17 happy_x_1 of { happy_var_1 -> 
-	happyIn30
-		 (Ident happy_var_1
-	)}
-
-happyReduce_106 = happySpecReduce_1  24# happyReduction_106
-happyReduction_106 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
-	happyIn30
-		 (Lit happy_var_1
-	)}
-
-happyReduce_107 = happySpecReduce_1  24# happyReduction_107
-happyReduction_107 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> 
-	happyIn30
-		 (QuestionMark (getRange happy_var_1) Nothing
-	)}
-
-happyReduce_108 = happySpecReduce_1  24# happyReduction_108
-happyReduction_108 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
-	happyIn30
-		 (Underscore (getRange happy_var_1) Nothing
-	)}
-
-happyReduce_109 = happySpecReduce_1  24# happyReduction_109
-happyReduction_109 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> 
-	happyIn30
-		 (Prop (getRange happy_var_1)
-	)}
-
-happyReduce_110 = happySpecReduce_1  24# happyReduction_110
-happyReduction_110 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> 
-	happyIn30
-		 (Set (getRange happy_var_1)
-	)}
-
-happyReduce_111 = happySpecReduce_1  24# happyReduction_111
-happyReduction_111 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> 
-	happyIn30
-		 (SetN (getRange (fst happy_var_1)) (snd happy_var_1)
-	)}
-
-happyReduce_112 = happySpecReduce_3  24# happyReduction_112
-happyReduction_112 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
-	case happyOut24 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> 
-	happyIn30
-		 (HiddenArg (fuseRange happy_var_1 happy_var_3) (unnamed happy_var_2)
-	)}}}
-
-happyReduce_113 = happyReduce 5# 24# happyReduction_113
-happyReduction_113 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
-	case happyOut16 happy_x_2 of { happy_var_2 -> 
-	case happyOut24 happy_x_4 of { happy_var_4 -> 
-	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> 
-	happyIn30
-		 (HiddenArg (fuseRange happy_var_1 happy_var_5) (named (show happy_var_2) happy_var_4)
-	) `HappyStk` happyRest}}}}
-
-happyReduce_114 = happySpecReduce_3  24# happyReduction_114
-happyReduction_114 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
-	case happyOut24 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> 
-	happyIn30
-		 (Paren (fuseRange happy_var_1 happy_var_3) happy_var_2
-	)}}}
-
-happyReduce_115 = happySpecReduce_2  24# happyReduction_115
-happyReduction_115 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
-	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> 
-	happyIn30
-		 (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r
-	)}}
-
-happyReduce_116 = happySpecReduce_2  24# happyReduction_116
-happyReduction_116 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
-	case happyOutTok happy_x_2 of { (TokSymbol SymCloseParen happy_var_2) -> 
-	happyIn30
-		 (Absurd (fuseRange happy_var_1 happy_var_2)
-	)}}
-
-happyReduce_117 = happySpecReduce_3  24# happyReduction_117
-happyReduction_117 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
-	case happyOut30 happy_x_3 of { happy_var_3 -> 
-	happyIn30
-		 (As (fuseRange happy_var_1 happy_var_3) happy_var_1 happy_var_3
-	)}}
-
-happyReduce_118 = happySpecReduce_2  24# happyReduction_118
-happyReduction_118 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> 
-	case happyOut30 happy_x_2 of { happy_var_2 -> 
-	happyIn30
-		 (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2
-	)}}
-
-happyReduce_119 = happyReduce 4# 24# happyReduction_119
-happyReduction_119 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
-	case happyOut31 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
-	happyIn30
-		 (Rec (getRange (happy_var_1,happy_var_4)) happy_var_3
-	) `HappyStk` happyRest}}}
-
-happyReduce_120 = happySpecReduce_0  25# happyReduction_120
-happyReduction_120  =  happyIn31
-		 ([]
-	)
-
-happyReduce_121 = happySpecReduce_1  25# happyReduction_121
-happyReduction_121 happy_x_1
-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
-	happyIn31
-		 (happy_var_1
-	)}
-
-happyReduce_122 = happySpecReduce_1  26# happyReduction_122
-happyReduction_122 happy_x_1
-	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
-	happyIn32
-		 ([happy_var_1]
-	)}
-
-happyReduce_123 = happySpecReduce_3  26# happyReduction_123
-happyReduction_123 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
-	case happyOut32 happy_x_3 of { happy_var_3 -> 
-	happyIn32
-		 (happy_var_1 : happy_var_3
-	)}}
-
-happyReduce_124 = happySpecReduce_3  27# happyReduction_124
-happyReduction_124 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
-	case happyOut24 happy_x_3 of { happy_var_3 -> 
-	happyIn33
-		 ((happy_var_1, happy_var_3)
-	)}}
-
-happyReduce_125 = happySpecReduce_2  28# happyReduction_125
-happyReduction_125 happy_x_2
-	happy_x_1
-	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
-	happyIn34
-		 (happy_var_1
-	)}
-
-happyReduce_126 = happySpecReduce_1  29# happyReduction_126
-happyReduction_126 happy_x_1
-	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
-	happyIn35
-		 ({-TeleBind-} happy_var_1
-	)}
-
-happyReduce_127 = happySpecReduce_2  30# happyReduction_127
-happyReduction_127 happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOut36 happy_x_2 of { happy_var_2 -> 
-	happyIn36
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_128 = happySpecReduce_1  30# happyReduction_128
-happyReduction_128 happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	happyIn36
-		 ([happy_var_1]
-	)}
-
-happyReduce_129 = happySpecReduce_3  31# happyReduction_129
-happyReduction_129 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
-	case happyOut38 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> 
-	happyIn37
-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) NotHidden happy_var_2
-	)}}}
-
-happyReduce_130 = happySpecReduce_3  31# happyReduction_130
-happyReduction_130 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
-	case happyOut38 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> 
-	happyIn37
-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) Hidden    happy_var_2
-	)}}}
-
-happyReduce_131 = happySpecReduce_1  32# happyReduction_131
-happyReduction_131 happy_x_1
-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
-	happyIn38
-		 ([happy_var_1]
-	)}
-
-happyReduce_132 = happySpecReduce_3  32# happyReduction_132
-happyReduction_132 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
-	case happyOut39 happy_x_3 of { happy_var_3 -> 
-	happyIn38
-		 (happy_var_1 : happy_var_3
-	)}}
-
-happyReduce_133 = happySpecReduce_1  33# happyReduction_133
-happyReduction_133 happy_x_1
-	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
-	happyIn39
-		 (happy_var_1
-	)}
-
-happyReduce_134 = happySpecReduce_3  33# happyReduction_134
-happyReduction_134 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut24 happy_x_1 of { happy_var_1 -> 
-	case happyOut39 happy_x_3 of { happy_var_3 -> 
-	happyIn39
-		 (TNoBind happy_var_1 : happy_var_3
-	)}}
-
-happyReduce_135 = happySpecReduce_1  33# happyReduction_135
-happyReduction_135 happy_x_1
-	 =  case happyOut24 happy_x_1 of { happy_var_1 -> 
-	happyIn39
-		 ([TNoBind happy_var_1]
-	)}
-
-happyReduce_136 = happySpecReduce_3  34# happyReduction_136
-happyReduction_136 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> 
-	case happyOut24 happy_x_3 of { happy_var_3 -> 
-	happyIn40
-		 (TBind (fuseRange happy_var_1 happy_var_3) (map mkBoundName_ happy_var_1) happy_var_3
-	)}}
-
-happyReduce_137 = happyMonadReduce 2# 35# happyReduction_137
-happyReduction_137 (happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut43 happy_x_1 of { happy_var_1 -> 
-	(
-      case last happy_var_1 of
-        Left _  -> parseError "Absurd lambda cannot have a body."
-        _       -> return [ b | Right b <- happy_var_1 ])}
-	) (\r -> happyReturn (happyIn41 r))
-
-happyReduce_138 = happyMonadReduce 1# 36# happyReduction_138
-happyReduction_138 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut43 happy_x_1 of { happy_var_1 -> 
-	(
-    case last happy_var_1 of
-      Right _ -> parseError "Missing body for lambda"
-      Left h  -> return ([ b | Right b <- init happy_var_1], h))}
-	) (\r -> happyReturn (happyIn42 r))
-
-happyReduce_139 = happySpecReduce_2  37# happyReduction_139
-happyReduction_139 happy_x_2
-	happy_x_1
-	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
-	case happyOut43 happy_x_2 of { happy_var_2 -> 
-	happyIn43
-		 (map Right happy_var_1 ++ happy_var_2
-	)}}
-
-happyReduce_140 = happySpecReduce_2  37# happyReduction_140
-happyReduction_140 happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOut43 happy_x_2 of { happy_var_2 -> 
-	happyIn43
-		 (Right (DomainFull happy_var_1) : happy_var_2
-	)}}
-
-happyReduce_141 = happySpecReduce_1  37# happyReduction_141
-happyReduction_141 happy_x_1
-	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
-	happyIn43
-		 (map Right happy_var_1
-	)}
-
-happyReduce_142 = happySpecReduce_1  37# happyReduction_142
-happyReduction_142 happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	happyIn43
-		 ([Right $ DomainFull happy_var_1]
-	)}
-
-happyReduce_143 = happySpecReduce_2  37# happyReduction_143
-happyReduction_143 happy_x_2
-	happy_x_1
-	 =  happyIn43
-		 ([Left NotHidden]
-	)
-
-happyReduce_144 = happySpecReduce_2  37# happyReduction_144
-happyReduction_144 happy_x_2
-	happy_x_1
-	 =  happyIn43
-		 ([Left Hidden]
-	)
-
-happyReduce_145 = happySpecReduce_2  38# happyReduction_145
-happyReduction_145 happy_x_2
-	happy_x_1
-	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
-	case happyOut44 happy_x_2 of { happy_var_2 -> 
-	happyIn44
-		 (happy_var_1 ++ happy_var_2
-	)}}
-
-happyReduce_146 = happySpecReduce_2  38# happyReduction_146
-happyReduction_146 happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOut44 happy_x_2 of { happy_var_2 -> 
-	happyIn44
-		 (DomainFull happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_147 = happySpecReduce_0  38# happyReduction_147
-happyReduction_147  =  happyIn44
-		 ([]
-	)
-
-happyReduce_148 = happySpecReduce_1  39# happyReduction_148
-happyReduction_148 happy_x_1
-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
-	happyIn45
-		 ([DomainFree NotHidden $ mkBoundName_ happy_var_1]
-	)}
-
-happyReduce_149 = happySpecReduce_3  39# happyReduction_149
-happyReduction_149 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut21 happy_x_2 of { happy_var_2 -> 
-	happyIn45
-		 (map (DomainFree Hidden . mkBoundName_) happy_var_2
-	)}
-
-happyReduce_150 = happySpecReduce_1  40# happyReduction_150
-happyReduction_150 happy_x_1
-	 =  case happyOut47 happy_x_1 of { happy_var_1 -> 
-	happyIn46
-		 ((Nothing, happy_var_1)
-	)}
-
-happyReduce_151 = happyMonadReduce 3# 40# happyReduction_151
-happyReduction_151 (happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
-	case happyOut16 happy_x_2 of { happy_var_2 -> 
-	case happyOut47 happy_x_3 of { happy_var_3 -> 
-	( isName "as" happy_var_1 >>
-                               return (Just (AsName happy_var_2 (getRange (fst happy_var_1))), happy_var_3))}}}
-	) (\r -> happyReturn (happyIn46 r))
-
-happyReduce_152 = happyMonadReduce 1# 41# happyReduction_152
-happyReduction_152 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut48 happy_x_1 of { happy_var_1 -> 
-	( verifyImportDirective happy_var_1)}
-	) (\r -> happyReturn (happyIn47 r))
-
-happyReduce_153 = happySpecReduce_2  42# happyReduction_153
-happyReduction_153 happy_x_2
-	happy_x_1
-	 =  case happyOut49 happy_x_2 of { happy_var_2 -> 
-	happyIn48
-		 (happy_var_2 { publicOpen = True }
-	)}
-
-happyReduce_154 = happySpecReduce_1  42# happyReduction_154
-happyReduction_154 happy_x_1
-	 =  case happyOut49 happy_x_1 of { happy_var_1 -> 
-	happyIn48
-		 (happy_var_1
-	)}
-
-happyReduce_155 = happySpecReduce_2  43# happyReduction_155
-happyReduction_155 happy_x_2
-	happy_x_1
-	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
-	case happyOut51 happy_x_2 of { happy_var_2 -> 
-	happyIn49
-		 (ImportDirective (fuseRange happy_var_1 happy_var_2) happy_var_1 happy_var_2 False
-	)}}
-
-happyReduce_156 = happySpecReduce_1  43# happyReduction_156
-happyReduction_156 happy_x_1
-	 =  case happyOut51 happy_x_1 of { happy_var_1 -> 
-	happyIn49
-		 (ImportDirective (getRange happy_var_1) (Hiding []) happy_var_1 False
-	)}
-
-happyReduce_157 = happySpecReduce_1  43# happyReduction_157
-happyReduction_157 happy_x_1
-	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
-	happyIn49
-		 (ImportDirective (getRange happy_var_1) happy_var_1 [] False
-	)}
-
-happyReduce_158 = happySpecReduce_0  43# happyReduction_158
-happyReduction_158  =  happyIn49
-		 (ImportDirective noRange (Hiding []) [] False
-	)
-
-happyReduce_159 = happyReduce 4# 44# happyReduction_159
-happyReduction_159 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut56 happy_x_3 of { happy_var_3 -> 
-	happyIn50
-		 (Using happy_var_3
-	) `HappyStk` happyRest}
-
-happyReduce_160 = happyReduce 4# 44# happyReduction_160
-happyReduction_160 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut57 happy_x_3 of { happy_var_3 -> 
-	happyIn50
-		 (Hiding happy_var_3
-	) `HappyStk` happyRest}
-
-happyReduce_161 = happyReduce 4# 45# happyReduction_161
-happyReduction_161 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut52 happy_x_3 of { happy_var_3 -> 
-	happyIn51
-		 (happy_var_3
-	) `HappyStk` happyRest}
-
-happyReduce_162 = happySpecReduce_3  46# happyReduction_162
-happyReduction_162 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut53 happy_x_1 of { happy_var_1 -> 
-	case happyOut52 happy_x_3 of { happy_var_3 -> 
-	happyIn52
-		 (happy_var_1 : happy_var_3
-	)}}
-
-happyReduce_163 = happySpecReduce_1  46# happyReduction_163
-happyReduction_163 happy_x_1
-	 =  case happyOut53 happy_x_1 of { happy_var_1 -> 
-	happyIn52
-		 ([happy_var_1]
-	)}
-
-happyReduce_164 = happySpecReduce_3  47# happyReduction_164
-happyReduction_164 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut54 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { (TokKeyword KwTo happy_var_2) -> 
-	case happyOut16 happy_x_3 of { happy_var_3 -> 
-	happyIn53
-		 (Renaming happy_var_1 happy_var_3 (getRange happy_var_2)
-	)}}}
-
-happyReduce_165 = happySpecReduce_2  48# happyReduction_165
-happyReduction_165 happy_x_2
-	happy_x_1
-	 =  case happyOut16 happy_x_2 of { happy_var_2 -> 
-	happyIn54
-		 (ImportedName happy_var_2
-	)}
-
-happyReduce_166 = happySpecReduce_3  48# happyReduction_166
-happyReduction_166 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut16 happy_x_3 of { happy_var_3 -> 
-	happyIn54
-		 (ImportedModule happy_var_3
-	)}
-
-happyReduce_167 = happySpecReduce_1  49# happyReduction_167
-happyReduction_167 happy_x_1
-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
-	happyIn55
-		 (ImportedName happy_var_1
-	)}
-
-happyReduce_168 = happySpecReduce_2  49# happyReduction_168
-happyReduction_168 happy_x_2
-	happy_x_1
-	 =  case happyOut16 happy_x_2 of { happy_var_2 -> 
-	happyIn55
-		 (ImportedModule happy_var_2
-	)}
-
-happyReduce_169 = happySpecReduce_0  50# happyReduction_169
-happyReduction_169  =  happyIn56
-		 ([]
-	)
-
-happyReduce_170 = happySpecReduce_1  50# happyReduction_170
-happyReduction_170 happy_x_1
-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
-	happyIn56
-		 (happy_var_1
-	)}
-
-happyReduce_171 = happySpecReduce_1  51# happyReduction_171
-happyReduction_171 happy_x_1
-	 =  case happyOut55 happy_x_1 of { happy_var_1 -> 
-	happyIn57
-		 ([happy_var_1]
-	)}
-
-happyReduce_172 = happySpecReduce_3  51# happyReduction_172
-happyReduction_172 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut55 happy_x_1 of { happy_var_1 -> 
-	case happyOut57 happy_x_3 of { happy_var_3 -> 
-	happyIn57
-		 (happy_var_1 : happy_var_3
-	)}}
-
-happyReduce_173 = happyMonadReduce 2# 52# happyReduction_173
-happyReduction_173 (happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut25 happy_x_1 of { happy_var_1 -> 
-	case happyOut60 happy_x_2 of { happy_var_2 -> 
-	( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2))}}
-	) (\r -> happyReturn (happyIn58 r))
-
-happyReduce_174 = happySpecReduce_3  52# happyReduction_174
-happyReduction_174 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> 
-	case happyOut59 happy_x_2 of { happy_var_2 -> 
-	case happyOut60 happy_x_3 of { happy_var_3 -> 
-	happyIn58
-		 (Ellipsis (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3
-	)}}}
-
-happyReduce_175 = happySpecReduce_0  53# happyReduction_175
-happyReduction_175  =  happyIn59
-		 ([]
-	)
-
-happyReduce_176 = happyMonadReduce 3# 53# happyReduction_176
-happyReduction_176 (happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut29 happy_x_2 of { happy_var_2 -> 
-	case happyOut59 happy_x_3 of { happy_var_3 -> 
-	( exprToPattern (RawApp (getRange happy_var_2) happy_var_2) >>= \p ->
-		   return (p : happy_var_3))}}
-	) (\r -> happyReturn (happyIn59 r))
-
-happyReduce_177 = happySpecReduce_0  54# happyReduction_177
-happyReduction_177  =  happyIn60
-		 ([]
-	)
-
-happyReduce_178 = happySpecReduce_2  54# happyReduction_178
-happyReduction_178 happy_x_2
-	happy_x_1
-	 =  case happyOut24 happy_x_2 of { happy_var_2 -> 
-	happyIn60
-		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }
-	)}
-
-happyReduce_179 = happySpecReduce_0  55# happyReduction_179
-happyReduction_179  =  happyIn61
-		 (NoWhere
-	)
-
-happyReduce_180 = happySpecReduce_2  55# happyReduction_180
-happyReduction_180 happy_x_2
-	happy_x_1
-	 =  case happyOut95 happy_x_2 of { happy_var_2 -> 
-	happyIn61
-		 (AnyWhere happy_var_2
-	)}
-
-happyReduce_181 = happyReduce 4# 55# happyReduction_181
-happyReduction_181 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut16 happy_x_2 of { happy_var_2 -> 
-	case happyOut95 happy_x_4 of { happy_var_4 -> 
-	happyIn61
-		 (SomeWhere happy_var_2 happy_var_4
-	) `HappyStk` happyRest}}
-
-happyReduce_182 = happySpecReduce_1  56# happyReduction_182
-happyReduction_182 happy_x_1
-	 =  case happyOut63 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_183 = happySpecReduce_1  56# happyReduction_183
-happyReduction_183 happy_x_1
-	 =  case happyOut69 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 (happy_var_1
-	)}
-
-happyReduce_184 = happySpecReduce_1  56# happyReduction_184
-happyReduction_184 happy_x_1
-	 =  case happyOut64 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_185 = happySpecReduce_1  56# happyReduction_185
-happyReduction_185 happy_x_1
-	 =  case happyOut66 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_186 = happySpecReduce_1  56# happyReduction_186
-happyReduction_186 happy_x_1
-	 =  case happyOut67 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_187 = happySpecReduce_1  56# happyReduction_187
-happyReduction_187 happy_x_1
-	 =  case happyOut68 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_188 = happySpecReduce_1  56# happyReduction_188
-happyReduction_188 happy_x_1
-	 =  case happyOut70 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_189 = happySpecReduce_1  56# happyReduction_189
-happyReduction_189 happy_x_1
-	 =  case happyOut71 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_190 = happySpecReduce_1  56# happyReduction_190
-happyReduction_190 happy_x_1
-	 =  case happyOut72 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_191 = happySpecReduce_1  56# happyReduction_191
-happyReduction_191 happy_x_1
-	 =  case happyOut73 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_192 = happySpecReduce_1  56# happyReduction_192
-happyReduction_192 happy_x_1
-	 =  case happyOut74 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_193 = happySpecReduce_1  56# happyReduction_193
-happyReduction_193 happy_x_1
-	 =  case happyOut75 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_194 = happySpecReduce_1  56# happyReduction_194
-happyReduction_194 happy_x_1
-	 =  case happyOut78 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_195 = happySpecReduce_1  56# happyReduction_195
-happyReduction_195 happy_x_1
-	 =  case happyOut77 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_196 = happySpecReduce_1  56# happyReduction_196
-happyReduction_196 happy_x_1
-	 =  case happyOut79 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_197 = happySpecReduce_1  56# happyReduction_197
-happyReduction_197 happy_x_1
-	 =  case happyOut82 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 ([happy_var_1]
-	)}
-
-happyReduce_198 = happySpecReduce_3  57# happyReduction_198
-happyReduction_198 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
-	case happyOut24 happy_x_3 of { happy_var_3 -> 
-	happyIn63
-		 (TypeSig happy_var_1 happy_var_3
-	)}}
-
-happyReduce_199 = happySpecReduce_3  58# happyReduction_199
-happyReduction_199 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
-	case happyOut65 happy_x_2 of { happy_var_2 -> 
-	case happyOut61 happy_x_3 of { happy_var_3 -> 
-	happyIn64
-		 (FunClause happy_var_1 happy_var_2 happy_var_3
-	)}}}
-
-happyReduce_200 = happySpecReduce_2  59# happyReduction_200
-happyReduction_200 happy_x_2
-	happy_x_1
-	 =  case happyOut24 happy_x_2 of { happy_var_2 -> 
-	happyIn65
-		 (RHS happy_var_2
-	)}
-
-happyReduce_201 = happySpecReduce_0  59# happyReduction_201
-happyReduction_201  =  happyIn65
-		 (AbsurdRHS
-	)
-
-happyReduce_202 = happyReduce 7# 60# happyReduction_202
-happyReduction_202 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
-	case happyOut16 happy_x_2 of { happy_var_2 -> 
-	case happyOut44 happy_x_3 of { happy_var_3 -> 
-	case happyOut24 happy_x_5 of { happy_var_5 -> 
-	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
-	case happyOut94 happy_x_7 of { happy_var_7 -> 
-	happyIn66
-		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) Inductive happy_var_2 (map addType happy_var_3) happy_var_5 happy_var_7
-	) `HappyStk` happyRest}}}}}}
-
-happyReduce_203 = happyReduce 7# 60# happyReduction_203
-happyReduction_203 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> 
-	case happyOut16 happy_x_2 of { happy_var_2 -> 
-	case happyOut44 happy_x_3 of { happy_var_3 -> 
-	case happyOut24 happy_x_5 of { happy_var_5 -> 
-	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
-	case happyOut94 happy_x_7 of { happy_var_7 -> 
-	happyIn66
-		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) CoInductive happy_var_2 (map addType happy_var_3) happy_var_5 happy_var_7
-	) `HappyStk` happyRest}}}}}}
-
-happyReduce_204 = happyReduce 7# 61# happyReduction_204
-happyReduction_204 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
-	case happyOut16 happy_x_2 of { happy_var_2 -> 
-	case happyOut44 happy_x_3 of { happy_var_3 -> 
-	case happyOut24 happy_x_5 of { happy_var_5 -> 
-	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
-	case happyOut96 happy_x_7 of { happy_var_7 -> 
-	happyIn67
-		 (Record (getRange (happy_var_1, happy_var_6, happy_var_7)) happy_var_2 (map addType happy_var_3) happy_var_5 happy_var_7
-	) `HappyStk` happyRest}}}}}}
-
-happyReduce_205 = happySpecReduce_3  62# happyReduction_205
-happyReduction_205 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut20 happy_x_3 of { happy_var_3 -> 
-	happyIn68
-		 (Infix (NonAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3
-	)}}}
-
-happyReduce_206 = happySpecReduce_3  62# happyReduction_206
-happyReduction_206 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut20 happy_x_3 of { happy_var_3 -> 
-	happyIn68
-		 (Infix (LeftAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3
-	)}}}
-
-happyReduce_207 = happySpecReduce_3  62# happyReduction_207
-happyReduction_207 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut20 happy_x_3 of { happy_var_3 -> 
-	happyIn68
-		 (Infix (RightAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3
-	)}}}
-
-happyReduce_208 = happySpecReduce_2  63# happyReduction_208
-happyReduction_208 happy_x_2
-	happy_x_1
-	 =  case happyOut92 happy_x_2 of { happy_var_2 -> 
-	happyIn69
-		 (let toField (TypeSig x t) = Field x t in map toField happy_var_2
-	)}
-
-happyReduce_209 = happySpecReduce_2  64# happyReduction_209
-happyReduction_209 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> 
-	case happyOut95 happy_x_2 of { happy_var_2 -> 
-	happyIn70
-		 (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2
-	)}}
-
-happyReduce_210 = happySpecReduce_2  65# happyReduction_210
-happyReduction_210 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> 
-	case happyOut95 happy_x_2 of { happy_var_2 -> 
-	happyIn71
-		 (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2
-	)}}
-
-happyReduce_211 = happySpecReduce_2  66# happyReduction_211
-happyReduction_211 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> 
-	case happyOut95 happy_x_2 of { happy_var_2 -> 
-	happyIn72
-		 (Private (fuseRange happy_var_1 happy_var_2) happy_var_2
-	)}}
-
-happyReduce_212 = happySpecReduce_2  67# happyReduction_212
-happyReduction_212 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> 
-	case happyOut92 happy_x_2 of { happy_var_2 -> 
-	happyIn73
-		 (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2
-	)}}
-
-happyReduce_213 = happySpecReduce_2  68# happyReduction_213
-happyReduction_213 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> 
-	case happyOut92 happy_x_2 of { happy_var_2 -> 
-	happyIn74
-		 (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2
-	)}}
-
-happyReduce_214 = happyReduce 4# 69# happyReduction_214
-happyReduction_214 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
-	case happyOut18 happy_x_2 of { happy_var_2 -> 
-	case happyOut76 happy_x_3 of { happy_var_3 -> 
-	case happyOut47 happy_x_4 of { happy_var_4 -> 
-	happyIn75
-		 (let
-    { m   = happy_var_2
-    ; es  = happy_var_3
-    ; dir = happy_var_4
-    ; r   = getRange (happy_var_1, m, dir)
-    } in
-    case es of
-    { []  -> Open r m dir
-    ; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2) []
-                           (RawApp (fuseRange m es) (Ident m : es)) DoOpen dir
-                       ]
-    }
-	) `HappyStk` happyRest}}}}
-
-happyReduce_215 = happySpecReduce_0  70# happyReduction_215
-happyReduction_215  =  happyIn76
-		 ([]
-	)
-
-happyReduce_216 = happySpecReduce_2  70# happyReduction_216
-happyReduction_216 happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
-	case happyOut76 happy_x_2 of { happy_var_2 -> 
-	happyIn76
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_217 = happyReduce 6# 71# happyReduction_217
-happyReduction_217 (happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
-	case happyOut16 happy_x_2 of { happy_var_2 -> 
-	case happyOut44 happy_x_3 of { happy_var_3 -> 
-	case happyOut24 happy_x_5 of { happy_var_5 -> 
-	case happyOut47 happy_x_6 of { happy_var_6 -> 
-	happyIn77
-		 (ModuleMacro (getRange (happy_var_1, happy_var_5, happy_var_6)) happy_var_2 (map addType happy_var_3) happy_var_5 DontOpen happy_var_6
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_218 = happyReduce 7# 71# happyReduction_218
-happyReduction_218 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
-	case happyOut16 happy_x_3 of { happy_var_3 -> 
-	case happyOut44 happy_x_4 of { happy_var_4 -> 
-	case happyOut24 happy_x_6 of { happy_var_6 -> 
-	case happyOut47 happy_x_7 of { happy_var_7 -> 
-	happyIn77
-		 (ModuleMacro (getRange (happy_var_1, happy_var_6, happy_var_7)) happy_var_3 (map addType happy_var_4) happy_var_6 DoOpen happy_var_7
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_219 = happySpecReduce_3  72# happyReduction_219
-happyReduction_219 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> 
-	case happyOut18 happy_x_2 of { happy_var_2 -> 
-	case happyOut46 happy_x_3 of { happy_var_3 -> 
-	happyIn78
-		 (Import (getRange (happy_var_1,happy_var_2,snd happy_var_3)) happy_var_2 (fst happy_var_3) DontOpen (snd happy_var_3)
-	)}}}
-
-happyReduce_220 = happyReduce 4# 72# happyReduction_220
-happyReduction_220 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
-	case happyOut18 happy_x_3 of { happy_var_3 -> 
-	case happyOut46 happy_x_4 of { happy_var_4 -> 
-	happyIn78
-		 (Import (getRange (happy_var_1,happy_var_3,snd happy_var_4)) happy_var_3 (fst happy_var_4) DoOpen (snd happy_var_4)
-	) `HappyStk` happyRest}}}
-
-happyReduce_221 = happyReduce 5# 73# happyReduction_221
-happyReduction_221 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
-	case happyOut16 happy_x_2 of { happy_var_2 -> 
-	case happyOut44 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
-	case happyOut96 happy_x_5 of { happy_var_5 -> 
-	happyIn79
-		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_222 = happySpecReduce_2  74# happyReduction_222
-happyReduction_222 happy_x_2
-	happy_x_1
-	 =  case happyOut81 happy_x_2 of { happy_var_2 -> 
-	happyIn80
-		 ([happy_var_2]
-	)}
-
-happyReduce_223 = happySpecReduce_3  74# happyReduction_223
-happyReduction_223 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut78 happy_x_2 of { happy_var_2 -> 
-	case happyOut80 happy_x_3 of { happy_var_3 -> 
-	happyIn80
-		 (happy_var_2 : happy_var_3
-	)}}
-
-happyReduce_224 = happySpecReduce_3  74# happyReduction_224
-happyReduction_224 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut75 happy_x_2 of { happy_var_2 -> 
-	case happyOut80 happy_x_3 of { happy_var_3 -> 
-	happyIn80
-		 (happy_var_2 : happy_var_3
-	)}}
-
-happyReduce_225 = happyReduce 5# 75# happyReduction_225
-happyReduction_225 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
-	case happyOut18 happy_x_2 of { happy_var_2 -> 
-	case happyOut44 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
-	case happyOut96 happy_x_5 of { happy_var_5 -> 
-	happyIn81
-		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) happy_var_2 (map addType happy_var_3) happy_var_5
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_226 = happySpecReduce_1  76# happyReduction_226
-happyReduction_226 happy_x_1
-	 =  case happyOut84 happy_x_1 of { happy_var_1 -> 
-	happyIn82
-		 (Pragma happy_var_1
-	)}
-
-happyReduce_227 = happySpecReduce_1  77# happyReduction_227
-happyReduction_227 happy_x_1
-	 =  case happyOut85 happy_x_1 of { happy_var_1 -> 
-	happyIn83
-		 (happy_var_1
-	)}
-
-happyReduce_228 = happySpecReduce_1  77# happyReduction_228
-happyReduction_228 happy_x_1
-	 =  case happyOut91 happy_x_1 of { happy_var_1 -> 
-	happyIn83
-		 (happy_var_1
-	)}
-
-happyReduce_229 = happySpecReduce_1  78# happyReduction_229
-happyReduction_229 happy_x_1
-	 =  case happyOut86 happy_x_1 of { happy_var_1 -> 
-	happyIn84
-		 (happy_var_1
-	)}
-
-happyReduce_230 = happySpecReduce_1  78# happyReduction_230
-happyReduction_230 happy_x_1
-	 =  case happyOut91 happy_x_1 of { happy_var_1 -> 
-	happyIn84
-		 (happy_var_1
-	)}
-
-happyReduce_231 = happySpecReduce_1  78# happyReduction_231
-happyReduction_231 happy_x_1
-	 =  case happyOut87 happy_x_1 of { happy_var_1 -> 
-	happyIn84
-		 (happy_var_1
-	)}
-
-happyReduce_232 = happySpecReduce_1  78# happyReduction_232
-happyReduction_232 happy_x_1
-	 =  case happyOut89 happy_x_1 of { happy_var_1 -> 
-	happyIn84
-		 (happy_var_1
-	)}
-
-happyReduce_233 = happySpecReduce_1  78# happyReduction_233
-happyReduction_233 happy_x_1
-	 =  case happyOut88 happy_x_1 of { happy_var_1 -> 
-	happyIn84
-		 (happy_var_1
-	)}
-
-happyReduce_234 = happySpecReduce_1  78# happyReduction_234
-happyReduction_234 happy_x_1
-	 =  case happyOut90 happy_x_1 of { happy_var_1 -> 
-	happyIn84
-		 (happy_var_1
-	)}
-
-happyReduce_235 = happyReduce 4# 79# happyReduction_235
-happyReduction_235 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOut22 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
-	happyIn85
-		 (OptionsPragma (fuseRange happy_var_1 happy_var_4) happy_var_3
-	) `HappyStk` happyRest}}}
-
-happyReduce_236 = happyReduce 5# 80# happyReduction_236
-happyReduction_236 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> 
-	case happyOut23 happy_x_4 of { happy_var_4 -> 
-	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
-	happyIn86
-		 (BuiltinPragma (fuseRange happy_var_1 happy_var_5) (snd happy_var_3) (Ident happy_var_4)
-	) `HappyStk` happyRest}}}}
-
-happyReduce_237 = happyReduce 5# 81# happyReduction_237
-happyReduction_237 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOut23 happy_x_3 of { happy_var_3 -> 
-	case happyOut22 happy_x_4 of { happy_var_4 -> 
-	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
-	happyIn87
-		 (CompiledPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)
-	) `HappyStk` happyRest}}}}
-
-happyReduce_238 = happyReduce 5# 82# happyReduction_238
-happyReduction_238 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOut23 happy_x_3 of { happy_var_3 -> 
-	case happyOut22 happy_x_4 of { happy_var_4 -> 
-	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
-	happyIn88
-		 (CompiledTypePragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)
-	) `HappyStk` happyRest}}}}
-
-happyReduce_239 = happyReduce 6# 83# happyReduction_239
-happyReduction_239 (happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOut23 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> 
-	case happyOut22 happy_x_5 of { happy_var_5 -> 
-	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> 
-	happyIn89
-		 (CompiledDataPragma (fuseRange happy_var_1 happy_var_6) happy_var_3 (snd happy_var_4) happy_var_5
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_240 = happyReduce 4# 84# happyReduction_240
-happyReduction_240 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOut22 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
-	happyIn90
-		 (ImportPragma (fuseRange happy_var_1 happy_var_4) (unwords happy_var_3)
-	) `HappyStk` happyRest}}}
-
-happyReduce_241 = happyMonadReduce 5# 85# happyReduction_241
-happyReduction_241 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> 
-	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> 
-	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
-	( do
-      let r = fuseRange happy_var_1 happy_var_5
-	  parseFile (i, f)
-	    | head f == '"' && last f == '"'  = return $ init (tail f)
-	    | otherwise	= parseErrorAt (iStart i) $ "Expected \"filename\", found " ++ f
-	  parseLine (i, l)
-	    | all isDigit l = return $ read l
-	    | otherwise	    = parseErrorAt (iStart i) $ "Expected line number, found " ++ l
-      line <- parseLine happy_var_3
-      file <- parseFile happy_var_4
-      currentPos <- fmap parsePos get
-      setParsePos $ Pn
-	{ srcFile = file
-	, posPos  = posPos currentPos
-	, posLine = line
-	, posCol  = 1
-	}
-      return $ LinePragma r line file)}}}}
-	) (\r -> happyReturn (happyIn91 r))
-
-happyReduce_242 = happyReduce 5# 86# happyReduction_242
-happyReduction_242 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut93 happy_x_3 of { happy_var_3 -> 
-	happyIn92
-		 (reverse happy_var_3
-	) `HappyStk` happyRest}
-
-happyReduce_243 = happyReduce 4# 87# happyReduction_243
-happyReduction_243 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut93 happy_x_1 of { happy_var_1 -> 
-	case happyOut63 happy_x_4 of { happy_var_4 -> 
-	happyIn93
-		 (happy_var_4 : happy_var_1
-	) `HappyStk` happyRest}}
-
-happyReduce_244 = happySpecReduce_2  87# happyReduction_244
-happyReduction_244 happy_x_2
-	happy_x_1
-	 =  case happyOut63 happy_x_2 of { happy_var_2 -> 
-	happyIn93
-		 ([happy_var_2]
-	)}
-
-happyReduce_245 = happySpecReduce_1  88# happyReduction_245
-happyReduction_245 happy_x_1
-	 =  case happyOut92 happy_x_1 of { happy_var_1 -> 
-	happyIn94
-		 (happy_var_1
-	)}
-
-happyReduce_246 = happyReduce 4# 88# happyReduction_246
-happyReduction_246 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = happyIn94
-		 ([]
-	) `HappyStk` happyRest
-
-happyReduce_247 = happyReduce 5# 89# happyReduction_247
-happyReduction_247 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut97 happy_x_3 of { happy_var_3 -> 
-	happyIn95
-		 (reverse happy_var_3
-	) `HappyStk` happyRest}
-
-happyReduce_248 = happyReduce 4# 90# happyReduction_248
-happyReduction_248 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = happyIn96
-		 ([]
-	) `HappyStk` happyRest
-
-happyReduce_249 = happySpecReduce_1  90# happyReduction_249
-happyReduction_249 happy_x_1
-	 =  case happyOut95 happy_x_1 of { happy_var_1 -> 
-	happyIn96
-		 (happy_var_1
-	)}
-
-happyReduce_250 = happyReduce 4# 91# happyReduction_250
-happyReduction_250 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut97 happy_x_1 of { happy_var_1 -> 
-	case happyOut62 happy_x_4 of { happy_var_4 -> 
-	happyIn97
-		 (reverse happy_var_4 ++ happy_var_1
-	) `HappyStk` happyRest}}
-
-happyReduce_251 = happySpecReduce_2  91# happyReduction_251
-happyReduction_251 happy_x_2
-	happy_x_1
-	 =  case happyOut62 happy_x_2 of { happy_var_2 -> 
-	happyIn97
-		 (reverse happy_var_2
-	)}
-
-happyNewToken action sts stk
-	= lexer(\tk -> 
-	let cont i = happyDoAction i tk action sts stk in
-	case tk of {
-	TokEOF -> happyDoAction 62# tk action sts stk;
-	TokKeyword KwLet happy_dollar_dollar -> cont 1#;
-	TokKeyword KwIn happy_dollar_dollar -> cont 2#;
-	TokKeyword KwWhere happy_dollar_dollar -> cont 3#;
-	TokKeyword KwWith happy_dollar_dollar -> cont 4#;
-	TokKeyword KwPostulate happy_dollar_dollar -> cont 5#;
-	TokKeyword KwPrimitive happy_dollar_dollar -> cont 6#;
-	TokKeyword KwOpen happy_dollar_dollar -> cont 7#;
-	TokKeyword KwImport happy_dollar_dollar -> cont 8#;
-	TokKeyword KwUsing happy_dollar_dollar -> cont 9#;
-	TokKeyword KwHiding happy_dollar_dollar -> cont 10#;
-	TokKeyword KwRenaming happy_dollar_dollar -> cont 11#;
-	TokKeyword KwTo happy_dollar_dollar -> cont 12#;
-	TokKeyword KwPublic happy_dollar_dollar -> cont 13#;
-	TokKeyword KwModule happy_dollar_dollar -> cont 14#;
-	TokKeyword KwData happy_dollar_dollar -> cont 15#;
-	TokKeyword KwCoData happy_dollar_dollar -> cont 16#;
-	TokKeyword KwRecord happy_dollar_dollar -> cont 17#;
-	TokKeyword KwField happy_dollar_dollar -> cont 18#;
-	TokKeyword KwInfix happy_dollar_dollar -> cont 19#;
-	TokKeyword KwInfixL happy_dollar_dollar -> cont 20#;
-	TokKeyword KwInfixR happy_dollar_dollar -> cont 21#;
-	TokKeyword KwMutual happy_dollar_dollar -> cont 22#;
-	TokKeyword KwAbstract happy_dollar_dollar -> cont 23#;
-	TokKeyword KwPrivate happy_dollar_dollar -> cont 24#;
-	TokKeyword KwProp happy_dollar_dollar -> cont 25#;
-	TokKeyword KwSet happy_dollar_dollar -> cont 26#;
-	TokKeyword KwForall happy_dollar_dollar -> cont 27#;
-	TokKeyword KwOPTIONS happy_dollar_dollar -> cont 28#;
-	TokKeyword KwBUILTIN happy_dollar_dollar -> cont 29#;
-	TokKeyword KwIMPORT happy_dollar_dollar -> cont 30#;
-	TokKeyword KwCOMPILED happy_dollar_dollar -> cont 31#;
-	TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 32#;
-	TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 33#;
-	TokKeyword KwLINE happy_dollar_dollar -> cont 34#;
-	TokSetN happy_dollar_dollar -> cont 35#;
-	TokTeX happy_dollar_dollar -> cont 36#;
-	TokComment happy_dollar_dollar -> cont 37#;
-	TokSymbol SymEllipsis happy_dollar_dollar -> cont 38#;
-	TokSymbol SymDot happy_dollar_dollar -> cont 39#;
-	TokSymbol SymSemi happy_dollar_dollar -> cont 40#;
-	TokSymbol SymColon happy_dollar_dollar -> cont 41#;
-	TokSymbol SymEqual happy_dollar_dollar -> cont 42#;
-	TokSymbol SymUnderscore happy_dollar_dollar -> cont 43#;
-	TokSymbol SymQuestionMark happy_dollar_dollar -> cont 44#;
-	TokSymbol SymArrow happy_dollar_dollar -> cont 45#;
-	TokSymbol SymLambda happy_dollar_dollar -> cont 46#;
-	TokSymbol SymAs happy_dollar_dollar -> cont 47#;
-	TokSymbol SymBar happy_dollar_dollar -> cont 48#;
-	TokSymbol SymOpenParen happy_dollar_dollar -> cont 49#;
-	TokSymbol SymCloseParen happy_dollar_dollar -> cont 50#;
-	TokSymbol SymOpenBrace happy_dollar_dollar -> cont 51#;
-	TokSymbol SymCloseBrace happy_dollar_dollar -> cont 52#;
-	TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 53#;
-	TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 54#;
-	TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 55#;
-	TokSymbol SymOpenPragma happy_dollar_dollar -> cont 56#;
-	TokSymbol SymClosePragma happy_dollar_dollar -> cont 57#;
-	TokId happy_dollar_dollar -> cont 58#;
-	TokQId happy_dollar_dollar -> cont 59#;
-	TokString happy_dollar_dollar -> cont 60#;
-	TokLiteral happy_dollar_dollar -> cont 61#;
-	_ -> happyError' tk
-	})
-
-happyError_ tk = happyError' tk
-
-happyThen :: () => Parser a -> (a -> Parser b) -> Parser b
-happyThen = (>>=)
-happyReturn :: () => a -> Parser a
-happyReturn = (return)
-happyThen1 = happyThen
-happyReturn1 :: () => a -> Parser a
-happyReturn1 = happyReturn
-happyError' :: () => Token -> Parser a
-happyError' tk = (\token -> happyError) tk
-
-tokensParser = happySomeParser where
-  happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut6 x))
-
-exprParser = happySomeParser where
-  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut24 x))
-
-moduleParser = happySomeParser where
-  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut10 x))
-
-happySeq = happyDontSeq
-
-
-{--------------------------------------------------------------------------
-    Parsers
- --------------------------------------------------------------------------}
-
--- | Parse the token stream. Used by the TeX compiler.
-tokensParser :: Parser [Token]
-
--- | Parse an expression. Could be used in interactions.
-exprParser :: Parser Expr
-
--- | Parse a module.
-moduleParser :: Parser ([Pragma], [Declaration])
-
-
-{--------------------------------------------------------------------------
-    Happy stuff
- --------------------------------------------------------------------------}
-
--- | Required by Happy.
-happyError :: Parser a
-happyError = parseError "Parse error"
-
-
-{--------------------------------------------------------------------------
-    Utility functions
- --------------------------------------------------------------------------}
-
--- | Create a name from a string.
-
-mkName :: (Interval, String) -> Parser Name
-mkName (i, s) = do
-    let xs = parts s
-    mapM_ isValidId xs
-    unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"
-    return $ Name (getRange i) xs
-    where
-        parts :: String -> [NamePart]
-        parts ""        = []
-        parts ('_' : s) = Hole : parts s
-        parts s         = Id x : parts s'
-          where (x, s') = break (== '_') s
-
-	isValidId Hole   = return ()
-	isValidId (Id x) = case parse defaultParseFlags [0] (lexer return) x of
-	    ParseOk _ (TokId _) -> return ()
-	    _			-> fail $ "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"
-
-	-- we know that there aren't two Ids in a row
-	alternating (Hole : Hole : _) = False
-	alternating (_ : xs)	      = alternating xs
-	alternating []		      = True
-
--- | Create a qualified name from a list of strings
-mkQName :: [(Interval, String)] -> Parser QName
-mkQName ss = do
-    xs <- mapM mkName ss
-    return $ foldr Qual (QName $ last xs) (init xs)
-
--- | Match a particular name.
-isName :: String -> (Interval, String) -> Parser ()
-isName s (_,s')
-    | s == s'	= return ()
-    | otherwise	= fail $ "expected " ++ s ++ ", found " ++ s'
-
--- | Build a forall pi (forall x y z -> ...)
-forallPi :: [LamBinding] -> Expr -> Expr
-forallPi bs e = Pi (map addType bs) e
-
--- | Converts lambda bindings to typed bindings.
-addType :: LamBinding -> TypedBindings
-addType (DomainFull b)	 = b
-addType (DomainFree h x) = TypedBindings r h [TBind r [x] $ Underscore r Nothing]
-  where r = getRange x
-
--- | Check that an import directive doesn't contain repeated names
-verifyImportDirective :: ImportDirective -> Parser ImportDirective
-verifyImportDirective i =
-    case filter ((>1) . length)
-	 $ group
-	 $ sort xs
-    of
-	[]  -> return i
-	yss -> let Just pos = rStart $ getRange $ head $ concat yss in
-               parseErrorAt pos $
-		"repeated name" ++ s ++ " in import directive: " ++
-		concat (intersperse ", " $ map (show . head) yss)
-	    where
-		s = case yss of
-			[_] -> ""
-			_   -> "s"
-    where
-	xs = names (usingOrHiding i) ++ map renFrom (renaming i)
-	names (Using xs)    = xs
-	names (Hiding xs)   = xs
-
-{--------------------------------------------------------------------------
-    Patterns
- --------------------------------------------------------------------------}
-
--- | Turn an expression into a left hand side.
-exprToLHS :: Expr -> Parser ([Expr] -> LHS)
-exprToLHS e = case e of
-  WithApp r e es -> LHS <$> exprToPattern e <*> mapM exprToPattern es
-  _		 -> LHS <$> exprToPattern e <*> return []
-
--- | Turn an expression into a pattern. Fails if the expression is not a
---   valid pattern.
-exprToPattern :: Expr -> Parser Pattern
-exprToPattern e =
-    case e of
-	Ident x			-> return $ IdentP x
-	App _ e1 e2		-> AppP <$> exprToPattern e1
-					<*> T.mapM (T.mapM exprToPattern) e2
-	Paren r e		-> ParenP r
-					<$> exprToPattern e
-	Underscore r _		-> return $ WildP r
-	Absurd r		-> return $ AbsurdP r
-	As r x e		-> AsP r x <$> exprToPattern e
-	Dot r (HiddenArg _ e)	-> return $ HiddenP r $ fmap (DotP r) e
-	Dot r e			-> return $ DotP r e
-	Lit l			-> return $ LitP l
-	HiddenArg r e		-> HiddenP r <$> T.mapM exprToPattern e
-	RawApp r es		-> RawAppP r <$> mapM exprToPattern es
-	OpApp r x es		-> OpAppP r x <$> mapM exprToPattern es
-	_			->
-          let Just pos = rStart $ getRange e in
-          parseErrorAt pos $ "Not a valid pattern: " ++ show e
+    , tests
+    ) where
+
+import Control.Arrow
+import Control.Monad
+import Control.Monad.State
+import Data.Char
+import Data.List
+import Data.Maybe
+import qualified Data.Traversable as T
+
+import Agda.Syntax.Position hiding (tests)
+import Agda.Syntax.Parser.Monad
+import Agda.Syntax.Parser.Lexer
+import Agda.Syntax.Parser.Tokens
+import Agda.Syntax.Concrete
+import Agda.Syntax.Concrete.Name
+import Agda.Syntax.Concrete.Pretty
+import Agda.Syntax.Common
+import Agda.Syntax.Fixity
+import Agda.Syntax.Literal
+
+import Agda.Utils.Monad
+import Agda.Utils.QuickCheck
+import Agda.Utils.TestHelpers
+#if __GLASGOW_HASKELL__ >= 503
+import Data.Array
+#else
+import Array
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import GHC.Exts
+#else
+import GlaExts
+#endif
+
+-- parser produced by Happy Version 1.17
+
+newtype HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59 = HappyAbsSyn HappyAny
+#if __GLASGOW_HASKELL__ >= 607
+type HappyAny = GHC.Exts.Any
+#else
+type HappyAny = forall a . a
+#endif
+happyIn6 :: ([Token]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn6 x = unsafeCoerce# x
+{-# INLINE happyIn6 #-}
+happyOut6 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Token])
+happyOut6 x = unsafeCoerce# x
+{-# INLINE happyOut6 #-}
+happyIn7 :: ([Token]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn7 x = unsafeCoerce# x
+{-# INLINE happyIn7 #-}
+happyOut7 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Token])
+happyOut7 x = unsafeCoerce# x
+{-# INLINE happyOut7 #-}
+happyIn8 :: (Token) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn8 x = unsafeCoerce# x
+{-# INLINE happyIn8 #-}
+happyOut8 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Token)
+happyOut8 x = unsafeCoerce# x
+{-# INLINE happyOut8 #-}
+happyIn9 :: (()) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn9 x = unsafeCoerce# x
+{-# INLINE happyIn9 #-}
+happyOut9 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (())
+happyOut9 x = unsafeCoerce# x
+{-# INLINE happyOut9 #-}
+happyIn10 :: (([Pragma], [Declaration])) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn10 x = unsafeCoerce# x
+{-# INLINE happyIn10 #-}
+happyOut10 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (([Pragma], [Declaration]))
+happyOut10 x = unsafeCoerce# x
+{-# INLINE happyOut10 #-}
+happyIn11 :: t11 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn11 x = unsafeCoerce# x
+{-# INLINE happyIn11 #-}
+happyOut11 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t11
+happyOut11 x = unsafeCoerce# x
+{-# INLINE happyOut11 #-}
+happyIn12 :: t12 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn12 x = unsafeCoerce# x
+{-# INLINE happyIn12 #-}
+happyOut12 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t12
+happyOut12 x = unsafeCoerce# x
+{-# INLINE happyOut12 #-}
+happyIn13 :: t13 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn13 x = unsafeCoerce# x
+{-# INLINE happyIn13 #-}
+happyOut13 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t13
+happyOut13 x = unsafeCoerce# x
+{-# INLINE happyOut13 #-}
+happyIn14 :: (()) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn14 x = unsafeCoerce# x
+{-# INLINE happyIn14 #-}
+happyOut14 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (())
+happyOut14 x = unsafeCoerce# x
+{-# INLINE happyOut14 #-}
+happyIn15 :: (Integer) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn15 x = unsafeCoerce# x
+{-# INLINE happyIn15 #-}
+happyOut15 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Integer)
+happyOut15 x = unsafeCoerce# x
+{-# INLINE happyOut15 #-}
+happyIn16 :: (Name) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn16 x = unsafeCoerce# x
+{-# INLINE happyIn16 #-}
+happyOut16 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Name)
+happyOut16 x = unsafeCoerce# x
+{-# INLINE happyOut16 #-}
+happyIn17 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn17 x = unsafeCoerce# x
+{-# INLINE happyIn17 #-}
+happyOut17 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Name])
+happyOut17 x = unsafeCoerce# x
+{-# INLINE happyOut17 #-}
+happyIn18 :: ([(Hiding, Name)]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn18 x = unsafeCoerce# x
+{-# INLINE happyIn18 #-}
+happyOut18 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([(Hiding, Name)])
+happyOut18 x = unsafeCoerce# x
+{-# INLINE happyOut18 #-}
+happyIn19 :: (QName) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn19 x = unsafeCoerce# x
+{-# INLINE happyIn19 #-}
+happyOut19 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (QName)
+happyOut19 x = unsafeCoerce# x
+{-# INLINE happyOut19 #-}
+happyIn20 :: (QName) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn20 x = unsafeCoerce# x
+{-# INLINE happyIn20 #-}
+happyOut20 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (QName)
+happyOut20 x = unsafeCoerce# x
+{-# INLINE happyOut20 #-}
+happyIn21 :: (Name) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn21 x = unsafeCoerce# x
+{-# INLINE happyIn21 #-}
+happyOut21 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Name)
+happyOut21 x = unsafeCoerce# x
+{-# INLINE happyOut21 #-}
+happyIn22 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn22 x = unsafeCoerce# x
+{-# INLINE happyIn22 #-}
+happyOut22 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Name])
+happyOut22 x = unsafeCoerce# x
+{-# INLINE happyOut22 #-}
+happyIn23 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn23 x = unsafeCoerce# x
+{-# INLINE happyIn23 #-}
+happyOut23 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Name])
+happyOut23 x = unsafeCoerce# x
+{-# INLINE happyOut23 #-}
+happyIn24 :: ([String]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn24 x = unsafeCoerce# x
+{-# INLINE happyIn24 #-}
+happyOut24 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([String])
+happyOut24 x = unsafeCoerce# x
+{-# INLINE happyOut24 #-}
+happyIn25 :: (QName) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn25 x = unsafeCoerce# x
+{-# INLINE happyIn25 #-}
+happyOut25 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (QName)
+happyOut25 x = unsafeCoerce# x
+{-# INLINE happyOut25 #-}
+happyIn26 :: (Expr) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn26 x = unsafeCoerce# x
+{-# INLINE happyIn26 #-}
+happyOut26 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Expr)
+happyOut26 x = unsafeCoerce# x
+{-# INLINE happyOut26 #-}
+happyIn27 :: t27 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn27 x = unsafeCoerce# x
+{-# INLINE happyIn27 #-}
+happyOut27 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t27
+happyOut27 x = unsafeCoerce# x
+{-# INLINE happyOut27 #-}
+happyIn28 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn28 x = unsafeCoerce# x
+{-# INLINE happyIn28 #-}
+happyOut28 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Expr])
+happyOut28 x = unsafeCoerce# x
+{-# INLINE happyOut28 #-}
+happyIn29 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn29 x = unsafeCoerce# x
+{-# INLINE happyIn29 #-}
+happyOut29 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Expr])
+happyOut29 x = unsafeCoerce# x
+{-# INLINE happyOut29 #-}
+happyIn30 :: t30 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn30 x = unsafeCoerce# x
+{-# INLINE happyIn30 #-}
+happyOut30 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t30
+happyOut30 x = unsafeCoerce# x
+{-# INLINE happyOut30 #-}
+happyIn31 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn31 x = unsafeCoerce# x
+{-# INLINE happyIn31 #-}
+happyOut31 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Expr])
+happyOut31 x = unsafeCoerce# x
+{-# INLINE happyOut31 #-}
+happyIn32 :: t32 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn32 x = unsafeCoerce# x
+{-# INLINE happyIn32 #-}
+happyOut32 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t32
+happyOut32 x = unsafeCoerce# x
+{-# INLINE happyOut32 #-}
+happyIn33 :: ([(Name, Expr)]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn33 x = unsafeCoerce# x
+{-# INLINE happyIn33 #-}
+happyOut33 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([(Name, Expr)])
+happyOut33 x = unsafeCoerce# x
+{-# INLINE happyOut33 #-}
+happyIn34 :: ([(Name, Expr)]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn34 x = unsafeCoerce# x
+{-# INLINE happyIn34 #-}
+happyOut34 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([(Name, Expr)])
+happyOut34 x = unsafeCoerce# x
+{-# INLINE happyOut34 #-}
+happyIn35 :: ((Name, Expr)) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn35 x = unsafeCoerce# x
+{-# INLINE happyIn35 #-}
+happyOut35 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ((Name, Expr))
+happyOut35 x = unsafeCoerce# x
+{-# INLINE happyOut35 #-}
+happyIn36 :: t36 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn36 x = unsafeCoerce# x
+{-# INLINE happyIn36 #-}
+happyOut36 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t36
+happyOut36 x = unsafeCoerce# x
+{-# INLINE happyOut36 #-}
+happyIn37 :: t37 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn37 x = unsafeCoerce# x
+{-# INLINE happyIn37 #-}
+happyOut37 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t37
+happyOut37 x = unsafeCoerce# x
+{-# INLINE happyOut37 #-}
+happyIn38 :: ([TypedBindings]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn38 x = unsafeCoerce# x
+{-# INLINE happyIn38 #-}
+happyOut38 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([TypedBindings])
+happyOut38 x = unsafeCoerce# x
+{-# INLINE happyOut38 #-}
+happyIn39 :: (TypedBindings) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn39 x = unsafeCoerce# x
+{-# INLINE happyIn39 #-}
+happyOut39 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (TypedBindings)
+happyOut39 x = unsafeCoerce# x
+{-# INLINE happyOut39 #-}
+happyIn40 :: ([TypedBinding]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn40 x = unsafeCoerce# x
+{-# INLINE happyIn40 #-}
+happyOut40 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([TypedBinding])
+happyOut40 x = unsafeCoerce# x
+{-# INLINE happyOut40 #-}
+happyIn41 :: ([TypedBinding]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn41 x = unsafeCoerce# x
+{-# INLINE happyIn41 #-}
+happyOut41 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([TypedBinding])
+happyOut41 x = unsafeCoerce# x
+{-# INLINE happyOut41 #-}
+happyIn42 :: (TypedBinding) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn42 x = unsafeCoerce# x
+{-# INLINE happyIn42 #-}
+happyOut42 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (TypedBinding)
+happyOut42 x = unsafeCoerce# x
+{-# INLINE happyOut42 #-}
+happyIn43 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn43 x = unsafeCoerce# x
+{-# INLINE happyIn43 #-}
+happyOut43 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([LamBinding])
+happyOut43 x = unsafeCoerce# x
+{-# INLINE happyOut43 #-}
+happyIn44 :: (([LamBinding], Hiding)) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn44 x = unsafeCoerce# x
+{-# INLINE happyIn44 #-}
+happyOut44 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (([LamBinding], Hiding))
+happyOut44 x = unsafeCoerce# x
+{-# INLINE happyOut44 #-}
+happyIn45 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn45 x = unsafeCoerce# x
+{-# INLINE happyIn45 #-}
+happyOut45 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Either Hiding LamBinding])
+happyOut45 x = unsafeCoerce# x
+{-# INLINE happyOut45 #-}
+happyIn46 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn46 x = unsafeCoerce# x
+{-# INLINE happyIn46 #-}
+happyOut46 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([LamBinding])
+happyOut46 x = unsafeCoerce# x
+{-# INLINE happyOut46 #-}
+happyIn47 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn47 x = unsafeCoerce# x
+{-# INLINE happyIn47 #-}
+happyOut47 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([LamBinding])
+happyOut47 x = unsafeCoerce# x
+{-# INLINE happyOut47 #-}
+happyIn48 :: ((Maybe AsName, ImportDirective)) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn48 x = unsafeCoerce# x
+{-# INLINE happyIn48 #-}
+happyOut48 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ((Maybe AsName, ImportDirective))
+happyOut48 x = unsafeCoerce# x
+{-# INLINE happyOut48 #-}
+happyIn49 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn49 x = unsafeCoerce# x
+{-# INLINE happyIn49 #-}
+happyOut49 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (ImportDirective)
+happyOut49 x = unsafeCoerce# x
+{-# INLINE happyOut49 #-}
+happyIn50 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn50 x = unsafeCoerce# x
+{-# INLINE happyIn50 #-}
+happyOut50 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (ImportDirective)
+happyOut50 x = unsafeCoerce# x
+{-# INLINE happyOut50 #-}
+happyIn51 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn51 x = unsafeCoerce# x
+{-# INLINE happyIn51 #-}
+happyOut51 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (ImportDirective)
+happyOut51 x = unsafeCoerce# x
+{-# INLINE happyOut51 #-}
+happyIn52 :: (UsingOrHiding) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn52 x = unsafeCoerce# x
+{-# INLINE happyIn52 #-}
+happyOut52 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (UsingOrHiding)
+happyOut52 x = unsafeCoerce# x
+{-# INLINE happyOut52 #-}
+happyIn53 :: ([Renaming]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn53 x = unsafeCoerce# x
+{-# INLINE happyIn53 #-}
+happyOut53 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Renaming])
+happyOut53 x = unsafeCoerce# x
+{-# INLINE happyOut53 #-}
+happyIn54 :: ([Renaming]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn54 x = unsafeCoerce# x
+{-# INLINE happyIn54 #-}
+happyOut54 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Renaming])
+happyOut54 x = unsafeCoerce# x
+{-# INLINE happyOut54 #-}
+happyIn55 :: (Renaming) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn55 x = unsafeCoerce# x
+{-# INLINE happyIn55 #-}
+happyOut55 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Renaming)
+happyOut55 x = unsafeCoerce# x
+{-# INLINE happyOut55 #-}
+happyIn56 :: (ImportedName) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn56 x = unsafeCoerce# x
+{-# INLINE happyIn56 #-}
+happyOut56 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (ImportedName)
+happyOut56 x = unsafeCoerce# x
+{-# INLINE happyOut56 #-}
+happyIn57 :: (ImportedName) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn57 x = unsafeCoerce# x
+{-# INLINE happyIn57 #-}
+happyOut57 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (ImportedName)
+happyOut57 x = unsafeCoerce# x
+{-# INLINE happyOut57 #-}
+happyIn58 :: ([ImportedName]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn58 x = unsafeCoerce# x
+{-# INLINE happyIn58 #-}
+happyOut58 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([ImportedName])
+happyOut58 x = unsafeCoerce# x
+{-# INLINE happyOut58 #-}
+happyIn59 :: t59 -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn59 x = unsafeCoerce# x
+{-# INLINE happyIn59 #-}
+happyOut59 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> t59
+happyOut59 x = unsafeCoerce# x
+{-# INLINE happyOut59 #-}
+happyIn60 :: (LHS) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn60 x = unsafeCoerce# x
+{-# INLINE happyIn60 #-}
+happyOut60 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (LHS)
+happyOut60 x = unsafeCoerce# x
+{-# INLINE happyOut60 #-}
+happyIn61 :: ([Pattern]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn61 x = unsafeCoerce# x
+{-# INLINE happyIn61 #-}
+happyOut61 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Pattern])
+happyOut61 x = unsafeCoerce# x
+{-# INLINE happyOut61 #-}
+happyIn62 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn62 x = unsafeCoerce# x
+{-# INLINE happyIn62 #-}
+happyOut62 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Expr])
+happyOut62 x = unsafeCoerce# x
+{-# INLINE happyOut62 #-}
+happyIn63 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn63 x = unsafeCoerce# x
+{-# INLINE happyIn63 #-}
+happyOut63 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Expr])
+happyOut63 x = unsafeCoerce# x
+{-# INLINE happyOut63 #-}
+happyIn64 :: (WhereClause) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn64 x = unsafeCoerce# x
+{-# INLINE happyIn64 #-}
+happyOut64 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (WhereClause)
+happyOut64 x = unsafeCoerce# x
+{-# INLINE happyOut64 #-}
+happyIn65 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn65 x = unsafeCoerce# x
+{-# INLINE happyIn65 #-}
+happyOut65 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])
+happyOut65 x = unsafeCoerce# x
+{-# INLINE happyOut65 #-}
+happyIn66 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn66 x = unsafeCoerce# x
+{-# INLINE happyIn66 #-}
+happyOut66 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut66 x = unsafeCoerce# x
+{-# INLINE happyOut66 #-}
+happyIn67 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn67 x = unsafeCoerce# x
+{-# INLINE happyIn67 #-}
+happyOut67 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])
+happyOut67 x = unsafeCoerce# x
+{-# INLINE happyOut67 #-}
+happyIn68 :: ([(Hiding, Declaration)]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn68 x = unsafeCoerce# x
+{-# INLINE happyIn68 #-}
+happyOut68 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([(Hiding, Declaration)])
+happyOut68 x = unsafeCoerce# x
+{-# INLINE happyOut68 #-}
+happyIn69 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn69 x = unsafeCoerce# x
+{-# INLINE happyIn69 #-}
+happyOut69 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut69 x = unsafeCoerce# x
+{-# INLINE happyOut69 #-}
+happyIn70 :: (RHS) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn70 x = unsafeCoerce# x
+{-# INLINE happyIn70 #-}
+happyOut70 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (RHS)
+happyOut70 x = unsafeCoerce# x
+{-# INLINE happyOut70 #-}
+happyIn71 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn71 x = unsafeCoerce# x
+{-# INLINE happyIn71 #-}
+happyOut71 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut71 x = unsafeCoerce# x
+{-# INLINE happyOut71 #-}
+happyIn72 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn72 x = unsafeCoerce# x
+{-# INLINE happyIn72 #-}
+happyOut72 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut72 x = unsafeCoerce# x
+{-# INLINE happyOut72 #-}
+happyIn73 :: (Name) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn73 x = unsafeCoerce# x
+{-# INLINE happyIn73 #-}
+happyOut73 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Name)
+happyOut73 x = unsafeCoerce# x
+{-# INLINE happyOut73 #-}
+happyIn74 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn74 x = unsafeCoerce# x
+{-# INLINE happyIn74 #-}
+happyOut74 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut74 x = unsafeCoerce# x
+{-# INLINE happyOut74 #-}
+happyIn75 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn75 x = unsafeCoerce# x
+{-# INLINE happyIn75 #-}
+happyOut75 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])
+happyOut75 x = unsafeCoerce# x
+{-# INLINE happyOut75 #-}
+happyIn76 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn76 x = unsafeCoerce# x
+{-# INLINE happyIn76 #-}
+happyOut76 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut76 x = unsafeCoerce# x
+{-# INLINE happyOut76 #-}
+happyIn77 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn77 x = unsafeCoerce# x
+{-# INLINE happyIn77 #-}
+happyOut77 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut77 x = unsafeCoerce# x
+{-# INLINE happyOut77 #-}
+happyIn78 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn78 x = unsafeCoerce# x
+{-# INLINE happyIn78 #-}
+happyOut78 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut78 x = unsafeCoerce# x
+{-# INLINE happyOut78 #-}
+happyIn79 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn79 x = unsafeCoerce# x
+{-# INLINE happyIn79 #-}
+happyOut79 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut79 x = unsafeCoerce# x
+{-# INLINE happyOut79 #-}
+happyIn80 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn80 x = unsafeCoerce# x
+{-# INLINE happyIn80 #-}
+happyOut80 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut80 x = unsafeCoerce# x
+{-# INLINE happyOut80 #-}
+happyIn81 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn81 x = unsafeCoerce# x
+{-# INLINE happyIn81 #-}
+happyOut81 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut81 x = unsafeCoerce# x
+{-# INLINE happyOut81 #-}
+happyIn82 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn82 x = unsafeCoerce# x
+{-# INLINE happyIn82 #-}
+happyOut82 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Expr])
+happyOut82 x = unsafeCoerce# x
+{-# INLINE happyOut82 #-}
+happyIn83 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn83 x = unsafeCoerce# x
+{-# INLINE happyIn83 #-}
+happyOut83 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut83 x = unsafeCoerce# x
+{-# INLINE happyOut83 #-}
+happyIn84 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn84 x = unsafeCoerce# x
+{-# INLINE happyIn84 #-}
+happyOut84 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut84 x = unsafeCoerce# x
+{-# INLINE happyOut84 #-}
+happyIn85 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn85 x = unsafeCoerce# x
+{-# INLINE happyIn85 #-}
+happyOut85 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut85 x = unsafeCoerce# x
+{-# INLINE happyOut85 #-}
+happyIn86 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn86 x = unsafeCoerce# x
+{-# INLINE happyIn86 #-}
+happyOut86 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])
+happyOut86 x = unsafeCoerce# x
+{-# INLINE happyOut86 #-}
+happyIn87 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn87 x = unsafeCoerce# x
+{-# INLINE happyIn87 #-}
+happyOut87 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut87 x = unsafeCoerce# x
+{-# INLINE happyOut87 #-}
+happyIn88 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn88 x = unsafeCoerce# x
+{-# INLINE happyIn88 #-}
+happyOut88 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Declaration)
+happyOut88 x = unsafeCoerce# x
+{-# INLINE happyOut88 #-}
+happyIn89 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn89 x = unsafeCoerce# x
+{-# INLINE happyIn89 #-}
+happyOut89 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)
+happyOut89 x = unsafeCoerce# x
+{-# INLINE happyOut89 #-}
+happyIn90 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn90 x = unsafeCoerce# x
+{-# INLINE happyIn90 #-}
+happyOut90 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)
+happyOut90 x = unsafeCoerce# x
+{-# INLINE happyOut90 #-}
+happyIn91 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn91 x = unsafeCoerce# x
+{-# INLINE happyIn91 #-}
+happyOut91 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)
+happyOut91 x = unsafeCoerce# x
+{-# INLINE happyOut91 #-}
+happyIn92 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn92 x = unsafeCoerce# x
+{-# INLINE happyIn92 #-}
+happyOut92 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)
+happyOut92 x = unsafeCoerce# x
+{-# INLINE happyOut92 #-}
+happyIn93 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn93 x = unsafeCoerce# x
+{-# INLINE happyIn93 #-}
+happyOut93 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)
+happyOut93 x = unsafeCoerce# x
+{-# INLINE happyOut93 #-}
+happyIn94 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn94 x = unsafeCoerce# x
+{-# INLINE happyIn94 #-}
+happyOut94 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)
+happyOut94 x = unsafeCoerce# x
+{-# INLINE happyOut94 #-}
+happyIn95 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn95 x = unsafeCoerce# x
+{-# INLINE happyIn95 #-}
+happyOut95 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)
+happyOut95 x = unsafeCoerce# x
+{-# INLINE happyOut95 #-}
+happyIn96 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn96 x = unsafeCoerce# x
+{-# INLINE happyIn96 #-}
+happyOut96 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)
+happyOut96 x = unsafeCoerce# x
+{-# INLINE happyOut96 #-}
+happyIn97 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn97 x = unsafeCoerce# x
+{-# INLINE happyIn97 #-}
+happyOut97 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> (Pragma)
+happyOut97 x = unsafeCoerce# x
+{-# INLINE happyOut97 #-}
+happyIn98 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn98 x = unsafeCoerce# x
+{-# INLINE happyIn98 #-}
+happyOut98 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([TypeSignature])
+happyOut98 x = unsafeCoerce# x
+{-# INLINE happyOut98 #-}
+happyIn99 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn99 x = unsafeCoerce# x
+{-# INLINE happyIn99 #-}
+happyOut99 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([TypeSignature])
+happyOut99 x = unsafeCoerce# x
+{-# INLINE happyOut99 #-}
+happyIn100 :: ([(Hiding, TypeSignature)]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn100 x = unsafeCoerce# x
+{-# INLINE happyIn100 #-}
+happyOut100 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([(Hiding, TypeSignature)])
+happyOut100 x = unsafeCoerce# x
+{-# INLINE happyOut100 #-}
+happyIn101 :: ([(Hiding, TypeSignature)]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn101 x = unsafeCoerce# x
+{-# INLINE happyIn101 #-}
+happyOut101 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([(Hiding, TypeSignature)])
+happyOut101 x = unsafeCoerce# x
+{-# INLINE happyOut101 #-}
+happyIn102 :: ([Constructor]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn102 x = unsafeCoerce# x
+{-# INLINE happyIn102 #-}
+happyOut102 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Constructor])
+happyOut102 x = unsafeCoerce# x
+{-# INLINE happyOut102 #-}
+happyIn103 :: ((Maybe Name, [Declaration])) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn103 x = unsafeCoerce# x
+{-# INLINE happyIn103 #-}
+happyOut103 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ((Maybe Name, [Declaration]))
+happyOut103 x = unsafeCoerce# x
+{-# INLINE happyOut103 #-}
+happyIn104 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn104 x = unsafeCoerce# x
+{-# INLINE happyIn104 #-}
+happyOut104 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])
+happyOut104 x = unsafeCoerce# x
+{-# INLINE happyOut104 #-}
+happyIn105 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn105 x = unsafeCoerce# x
+{-# INLINE happyIn105 #-}
+happyOut105 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])
+happyOut105 x = unsafeCoerce# x
+{-# INLINE happyOut105 #-}
+happyIn106 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyIn106 x = unsafeCoerce# x
+{-# INLINE happyIn106 #-}
+happyOut106 :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> ([Declaration])
+happyOut106 x = unsafeCoerce# x
+{-# INLINE happyOut106 #-}
+happyInTok :: Token -> (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59)
+happyInTok x = unsafeCoerce# x
+{-# INLINE happyInTok #-}
+happyOutTok :: (HappyAbsSyn t11 t12 t13 t27 t30 t32 t36 t37 t59) -> Token
+happyOutTok x = unsafeCoerce# x
+{-# INLINE happyOutTok #-}
+
+
+happyActOffsets :: HappyAddr
+happyActOffsets = HappyA# "\x00\x00\x6d\x03\x88\x03\x00\x00\x19\x02\xb3\x00\x75\x03\x7b\x03\x00\x00\x7b\x03\x7c\x03\x00\x00\x70\x03\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\xf1\x02\x6d\x03\x79\x03\x00\x00\x3c\x01\x72\x03\x6e\x03\x00\x00\x00\x00\xd9\x01\x00\x00\xa7\x03\x00\x00\x00\x00\xd9\x01\xd4\x02\xb7\x02\x00\x00\x00\x00\x00\x00\x55\x03\xcc\x00\x74\x03\x68\x03\x6c\x03\x63\x03\x6a\x03\x00\x00\x5f\x03\x5c\x03\x00\x00\x00\x00\x00\x00\xd9\x01\x6d\x03\x00\x00\x62\x03\xd9\x01\x00\x00\x50\x03\x33\x03\x00\x00\x9a\x02\x7d\x02\x16\x03\x62\x03\x4b\x03\x57\x03\x84\x03\x00\x00\x8a\x03\x8a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x16\x03\x8a\x03\xa7\x03\x00\x00\x00\x00\x5b\x03\x5b\x03\x00\x00\x5b\x03\x00\x00\xfa\xff\xd4\x01\xd4\x01\x5d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x03\x00\x00\x00\x00\x39\x01\x9e\x00\xa7\x03\xd4\x01\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x03\x00\x00\x00\x00\x8a\x03\x16\x03\x52\x03\x4e\x03\x41\x03\x00\x00\x4c\x03\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x03\x00\x00\x00\x00\x16\x03\x16\x03\x3e\x03\x00\x00\x49\x03\x00\x00\x00\x00\x00\x00\x35\x03\x00\x00\x16\x03\x58\x02\xa6\x01\x00\x00\x9e\x00\xa7\x03\xb6\x02\x00\x00\x00\x00\x00\x00\x00\x00\x61\x03\x00\x00\x37\x03\x31\x03\x2c\x03\xdc\x01\x22\x03\x39\x01\x56\x03\x39\x01\x8a\x03\x11\x03\x19\x03\x00\x00\x00\x00\x00\x00\x30\x03\x00\x00\xb6\x02\x00\x00\x38\x03\x24\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x24\x03\x00\x00\x7a\x00\x3d\x03\x1c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x03\x1b\x03\xae\x00\x04\x03\x04\x03\x04\x03\xe3\x00\x18\x03\xfd\x02\xfd\x02\xfd\x02\x17\x03\x17\x03\x17\x03\x06\x03\x59\x04\x00\x00\x00\x00\x16\x03\x00\x00\x00\x00\xfc\x02\xfb\x02\xfa\x02\xee\x02\xee\x02\xee\x02\x26\x03\xa7\x03\x00\x00\x00\x00\x00\x00\xe9\xff\x00\x00\xe9\xff\xe9\xff\xf3\x02\x00\x00\x39\x01\x39\x01\x39\x01\x39\x01\xed\x02\xf0\x02\x00\x00\x00\x00\x12\x00\x16\x03\x21\x03\x16\x03\x16\x03\x58\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x02\xe7\x02\x00\x00\xe6\x02\xe1\x02\xdd\x02\xe0\x02\xe8\x02\x02\x03\x00\x00\x00\x00\xd7\x02\x00\x00\x00\x00\xe5\x02\xce\x02\xce\x02\xf7\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x03\x00\x00\x00\x00\xdf\x02\xc4\x02\xd9\x02\x39\x01\x28\x00\xd3\x02\xd1\x02\xd0\x02\xd2\x02\xe9\xff\x00\x00\x00\x00\x00\x00\xc3\x02\xa7\x03\xde\x02\xbc\x02\x00\x00\xb9\x02\xb0\x02\x00\x00\xa6\x02\xaa\x02\xa4\x02\x00\x00\xa3\x02\x9d\x02\xa2\x02\x00\x00\x00\x00\x00\x00\x79\x00\xa6\x01\x16\x03\x16\x03\x16\x03\xb4\x02\x16\x03\xac\x02\x94\x02\xa6\x01\xc8\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x01\x00\x00\xa0\x02\x49\x00\xa0\x02\x89\x02\x93\x02\x00\x00\x16\x03\xb6\x02\x00\x00\xba\x02\xb8\x02\xb1\x02\x49\x00\x8b\x02\x79\x00\x84\x02\x00\x00\x63\x02\x00\x00\x73\x02\x00\x00\x00\x00\x00\x00\x6d\x02\x16\x03\x00\x00\x79\x00\x00\x00\x83\x02\x83\x02\x83\x02\x00\x00\xb6\x02\x16\x03\x00\x00\x60\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x02\x00\x00\x00\x00\x00\x00\x5a\x02\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x6a\x02\x6a\x02\x1b\x00\x9a\x01\xa6\x01\x49\x00\x00\x00\xa6\x01\x50\x02\x00\x00\x00\x00\x49\x00\x64\x02\x00\x00\xa6\x01\x00\x00\x49\x00\x00\x00\x00\x00"#
+
+happyGotoOffsets :: HappyAddr
+happyGotoOffsets = HappyA# "\x04\x02\x4a\x06\x0f\x00\x81\x02\x85\x02\x22\x06\x00\x00\x80\x02\x00\x00\x79\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x00\x32\x06\x00\x00\x00\x00\xbe\x01\x0e\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x33\x00\x00\x00\x00\x00\xed\x00\x23\x04\x0a\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x02\x1a\x06\x00\x00\x00\x00\x55\x01\x00\x00\x41\x04\x3c\x04\x00\x00\x02\x06\xea\x05\xd2\x05\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\xb7\x03\x9a\x03\x00\x00\x00\x00\x00\x00\x00\x00\xba\x05\x62\x06\x20\x00\x00\x00\x00\x00\x2c\x00\x2b\x00\x00\x00\x06\x00\x00\x00\x97\x02\xf3\x01\xb7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x02\x00\x00\x00\x00\x0e\x03\x4b\x02\x32\x00\xae\x01\x00\x00\x6c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x01\xa2\x05\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x03\x00\x00\x00\x00\x8a\x05\x72\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00\x5a\x05\x3e\x01\x8c\x01\x00\x00\xcd\x01\x31\x00\x7d\x04\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x01\x53\x02\x7f\x02\x00\x00\x75\x02\x43\x03\x00\x00\x49\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x65\x04\x00\x00\x8f\x00\x9c\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x02\x59\x02\x00\x00\x00\x00\x21\x02\xd8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x00\x1c\x00\x27\x00\x09\x02\x01\x02\xff\x01\xf4\x01\x19\x00\xe4\x01\xd3\x01\xc8\x01\x0d\x00\x0c\x00\x0b\x00\xa1\x01\x00\x00\x00\x00\x00\x00\xd4\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x01\xc0\x01\xbb\x01\x90\x01\xb9\x00\x00\x00\x00\x00\x00\x00\x63\x01\x00\x00\x52\x01\x40\x01\x00\x00\x00\x00\xbc\x01\x4f\x01\x42\x01\x3f\x01\xb6\x01\x00\x00\x00\x00\x00\x00\x84\x01\x42\x05\x81\x01\x2a\x05\x12\x05\xec\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x01\x00\x00\x77\x01\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x71\x01\x50\x01\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x04\x00\x00\x00\x00\x0a\x00\x48\x01\x17\x00\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x1a\x01\x00\x00\x00\x00\x00\x00\x16\x01\x1f\x00\xf4\x00\x2d\x01\x00\x00\x00\x00\xee\x00\x00\x00\x00\x00\x1c\x01\x00\x00\x00\x00\x00\x00\xdd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x87\x01\xe2\x04\xca\x04\xb2\x04\x05\x00\x9a\x04\x00\x00\x97\x00\x62\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x00\x00\x09\x00\xe0\x00\x0c\x01\xcd\x00\x00\x00\x00\x00\x82\x04\x37\x02\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x00\xbb\x00\x51\x01\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x04\x00\x00\x1a\x00\x00\x00\x03\x00\x16\x00\x15\x00\x00\x00\x79\x01\x52\x04\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x01\x00\x00\xff\xff\x04\x00\x18\x00\x44\x00\x3a\x01\xa7\x00\x00\x00\x35\x01\x45\x00\x00\x00\x00\x00\x93\x00\xfe\xff\x00\x00\x19\x01\x00\x00\x22\x00\x00\x00\x00\x00"#
+
+happyDefActions :: HappyAddr
+happyDefActions = HappyA# "\xfa\xff\x00\x00\xbb\xff\x00\x00\xfc\xff\x00\x00\x00\x00\xbb\xff\xb8\xff\xbb\xff\xa8\xff\x8f\xff\x00\x00\x9b\xff\x9a\xff\x98\xff\x97\xff\x00\x00\x92\xff\x00\x00\x00\x00\x7a\xff\x78\xff\xbb\xff\x00\x00\x8b\xff\x8a\xff\x00\x00\x89\xff\x00\x00\x8c\xff\x8d\xff\x00\x00\x00\x00\x00\x00\xb0\xff\xa9\xff\x8e\xff\x00\x00\xa8\xff\x00\x00\x00\x00\x98\xff\x00\x00\x75\xff\x85\xff\x00\x00\x00\x00\x84\xff\xa6\xff\x64\xff\x6a\xff\x00\x00\x94\xff\x6e\xff\x6b\xff\xa5\xff\x00\x00\x00\x00\x82\xff\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\x00\x00\x00\x00\x79\xff\x00\x00\x00\x00\x7b\xff\x9e\xff\x96\xff\x90\xff\x00\x00\x00\x00\x00\x00\xba\xff\xb9\xff\xbb\xff\xbb\xff\x15\xff\xbb\xff\x10\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xff\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xf1\xff\xf0\xff\xef\xff\xee\xff\xed\xff\xec\xff\xeb\xff\xea\xff\xe9\xff\xe8\xff\xe7\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xe0\xff\xdf\xff\xde\xff\xdd\xff\xdc\xff\xdb\xff\xda\xff\xd9\xff\xd8\xff\xd7\xff\xd6\xff\xd5\xff\xd4\xff\xd3\xff\xd2\xff\xd1\xff\xd0\xff\xcf\xff\xce\xff\xcd\xff\xcc\xff\xcb\xff\xca\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xa1\xff\xa8\xff\xa7\xff\x65\xff\x5a\xff\x1c\xff\x00\x00\xb7\xff\x00\x00\x14\xff\x13\xff\x83\xff\x99\xff\x00\x00\x9c\xff\xa2\xff\x92\xff\x00\x00\xbb\xff\x00\x00\x00\x00\x7f\xff\x7e\xff\x6f\xff\x9d\xff\x00\x00\x68\xff\x69\xff\x6d\xff\x95\xff\x6c\xff\x77\xff\x86\xff\x00\x00\x76\xff\x88\xff\x00\x00\x00\x00\x00\x00\x70\xff\x71\xff\x73\xff\x74\xff\x63\xff\x00\x00\x81\xff\x00\x00\x00\x00\xbb\xff\x93\xff\x5a\xff\x1c\xff\x5a\xff\x18\xff\x62\xff\x60\xff\x5e\xff\x5b\xff\x5c\xff\x00\x00\x00\x00\x00\x00\x5a\xff\x00\x00\x65\xff\x00\x00\x65\xff\x00\x00\x00\x00\xa1\xff\xa0\xff\x09\xff\x67\xff\xbb\xff\x66\xff\x5a\xff\x5f\xff\xb2\xff\x00\x00\x4f\xff\x5d\xff\x1d\xff\x1b\xff\x17\xff\x00\x00\xbb\xff\xb4\xff\xa8\xff\x45\xff\x2b\xff\xf2\xfe\x40\xff\x3e\xff\x3d\xff\x3c\xff\x3b\xff\x3f\xff\x3a\xff\x39\xff\x38\xff\x37\xff\x36\xff\x35\xff\x33\xff\x34\xff\x32\xff\x31\xff\x11\xff\x0f\xff\x0e\xff\x0c\xff\x0d\xff\x0b\xff\x0a\xff\xbb\xff\xbb\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xff\x00\x00\x00\x00\x00\x00\xbb\xff\xbb\xff\xbb\xff\x49\xff\x00\x00\x7c\xff\x7d\xff\x00\x00\x87\xff\x72\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\xff\x00\x00\x20\xff\x21\xff\x22\xff\x00\x00\xb1\xff\x00\x00\x00\x00\x00\x00\x23\xff\x65\xff\x65\xff\x65\xff\x65\xff\x00\x00\x00\x00\x1e\xff\x1f\xff\x43\xff\x00\x00\x47\xff\x00\x00\x00\x00\x00\x00\xf6\xfe\xb5\xff\xb6\xff\xb3\xff\x51\xff\x4d\xff\x00\x00\x4e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x55\xff\x00\x00\xb2\xff\x61\xff\x00\x00\xf4\xfe\x12\xff\xbb\xff\x00\x00\x00\x00\xb2\xff\x57\xff\x53\xff\x58\xff\x50\xff\x59\xff\x00\x00\xf3\xfe\x30\xff\x44\xff\x4b\xff\x00\x00\x2c\xff\x2d\xff\xbb\xff\x00\x00\xbb\xff\x65\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xff\xa3\xff\x26\xff\x25\xff\x24\xff\x49\xff\x91\xff\x47\xff\xa1\xff\x9f\xff\x00\x00\xa1\xff\x03\xff\x00\x00\x00\x00\x00\x00\x04\xff\x00\x00\xa1\xff\x00\x00\x4a\xff\x48\xff\xa4\xff\x00\x00\xbb\xff\x00\x00\x00\x00\x00\x00\xbb\xff\x00\x00\x00\x00\x00\x00\xbb\xff\x00\x00\x42\xff\x46\xff\x4c\xff\x56\xff\x54\xff\x52\xff\x00\x00\xf5\xfe\xbb\xff\x00\x00\xbb\xff\xae\xff\x00\x00\x00\xff\x00\x00\x5a\xff\x16\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xff\xac\xff\x00\x00\xfd\xfe\x00\x00\x06\xff\x00\x00\x07\xff\x08\xff\x05\xff\x00\x00\x00\x00\xad\xff\x00\x00\xff\xfe\xbb\xff\xbb\xff\xbb\xff\x1a\xff\x5a\xff\x00\x00\xaf\xff\x00\x00\x02\xff\x41\xff\x01\xff\x2f\xff\x19\xff\x00\x00\xfb\xfe\x2a\xff\x29\xff\x00\x00\x28\xff\xfe\xfe\x2e\xff\xaa\xff\xab\xff\xbb\xff\xbb\xff\x00\x00\x00\x00\xbb\xff\x00\x00\xfa\xfe\xbb\xff\x00\x00\xfc\xfe\x27\xff\x00\x00\xbb\xff\xf7\xfe\xbb\xff\xf9\xfe\x00\x00\xf8\xfe"#
+
+happyCheck :: HappyAddr
+happyCheck = HappyA# "\xff\xff\x03\x00\x03\x00\x09\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x05\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x04\x00\x05\x00\x03\x00\x2d\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x0a\x00\x06\x00\x03\x00\x03\x00\x0f\x00\x0a\x00\x0b\x00\x0a\x00\x3c\x00\x0c\x00\x2b\x00\x06\x00\x0a\x00\x0a\x00\x03\x00\x0d\x00\x0d\x00\x03\x00\x03\x00\x0a\x00\x0a\x00\x36\x00\x0f\x00\x0d\x00\x0e\x00\x3c\x00\x3d\x00\x19\x00\x1a\x00\x1a\x00\x0a\x00\x0a\x00\x0a\x00\x0d\x00\x0d\x00\x0d\x00\x1b\x00\x1c\x00\x1d\x00\x0a\x00\x0b\x00\x33\x00\x34\x00\x35\x00\x00\x00\x06\x00\x1a\x00\x1a\x00\x1a\x00\x0a\x00\x0a\x00\x0a\x00\x0d\x00\x0c\x00\x38\x00\x2c\x00\x3d\x00\x50\x00\x3c\x00\x3e\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x50\x00\x3c\x00\x5d\x00\x64\x00\x64\x00\x61\x00\x64\x00\x64\x00\x62\x00\x63\x00\x62\x00\x63\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x5c\x00\x5c\x00\x5f\x00\x5d\x00\x60\x00\x60\x00\x5e\x00\x5c\x00\x5c\x00\x36\x00\x50\x00\x50\x00\x4c\x00\x4c\x00\x3b\x00\x3c\x00\x38\x00\x39\x00\x3f\x00\x3e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x08\x00\x4d\x00\x4e\x00\x4f\x00\x0a\x00\x0b\x00\x52\x00\x08\x00\x54\x00\x06\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x06\x00\x0a\x00\x0b\x00\x0a\x00\x0a\x00\x2b\x00\x0a\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x31\x00\x0e\x00\x06\x00\x35\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x3c\x00\x0a\x00\x09\x00\x30\x00\x31\x00\x32\x00\x08\x00\x09\x00\x0f\x00\x03\x00\x30\x00\x31\x00\x32\x00\x0f\x00\x0a\x00\x08\x00\x09\x00\x0d\x00\x3d\x00\x1c\x00\x1d\x00\x2f\x00\x0f\x00\x33\x00\x32\x00\x35\x00\x33\x00\x36\x00\x35\x00\x19\x00\x1a\x00\x3d\x00\x3b\x00\x3c\x00\x0a\x00\x0b\x00\x3f\x00\x3c\x00\x41\x00\x42\x00\x06\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x06\x00\x4d\x00\x4e\x00\x4f\x00\x3c\x00\x3d\x00\x52\x00\x3a\x00\x54\x00\x12\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x0a\x00\x0a\x00\x2c\x00\x0d\x00\x0a\x00\x0a\x00\x0f\x00\x31\x00\x0d\x00\x0f\x00\x12\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x0a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x0f\x00\x0a\x00\x21\x00\x03\x00\x0d\x00\x21\x00\x25\x00\x26\x00\x27\x00\x25\x00\x29\x00\x27\x00\x35\x00\x29\x00\x17\x00\x18\x00\x03\x00\x1a\x00\x21\x00\x3c\x00\x07\x00\x0a\x00\x36\x00\x0c\x00\x0a\x00\x28\x00\x29\x00\x3b\x00\x3c\x00\x0f\x00\x10\x00\x3f\x00\x38\x00\x41\x00\x42\x00\x13\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x03\x00\x4d\x00\x4e\x00\x4f\x00\x07\x00\x03\x00\x52\x00\x12\x00\x54\x00\x07\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x0a\x00\x0a\x00\x0a\x00\x0d\x00\x0a\x00\x37\x00\x0f\x00\x0f\x00\x10\x00\x0f\x00\x0a\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0c\x00\x0f\x00\x0a\x00\x21\x00\x0f\x00\x10\x00\x21\x00\x0f\x00\x03\x00\x2d\x00\x28\x00\x29\x00\x07\x00\x28\x00\x29\x00\x33\x00\x0a\x00\x35\x00\x33\x00\x21\x00\x35\x00\x0f\x00\x10\x00\x36\x00\x3c\x00\x21\x00\x28\x00\x29\x00\x3b\x00\x3c\x00\x0a\x00\x27\x00\x3f\x00\x29\x00\x41\x00\x42\x00\x0a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x03\x00\x4d\x00\x4e\x00\x4f\x00\x07\x00\x03\x00\x52\x00\x08\x00\x54\x00\x07\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x01\x00\x2d\x00\x2e\x00\x2f\x00\x0a\x00\x06\x00\x07\x00\x08\x00\x09\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x4b\x00\x0a\x00\x38\x00\x4e\x00\x0d\x00\x0e\x00\x51\x00\x3a\x00\x25\x00\x0a\x00\x0a\x00\x28\x00\x29\x00\x0d\x00\x0e\x00\x0a\x00\x2d\x00\x2e\x00\x39\x00\x30\x00\x0f\x00\x26\x00\x33\x00\x13\x00\x35\x00\x2a\x00\x09\x00\x38\x00\x13\x00\x3a\x00\x13\x00\x3c\x00\x3d\x00\x37\x00\x3f\x00\x00\x00\x01\x00\x09\x00\x21\x00\x20\x00\x21\x00\x06\x00\x07\x00\x08\x00\x09\x00\x28\x00\x29\x00\x0a\x00\x0b\x00\x0c\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x09\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x0a\x00\x0a\x00\x25\x00\x0d\x00\x0e\x00\x28\x00\x29\x00\x00\x00\x01\x00\x2d\x00\x2d\x00\x2e\x00\x0a\x00\x30\x00\x0a\x00\x33\x00\x33\x00\x35\x00\x35\x00\x3c\x00\x3d\x00\x38\x00\x0a\x00\x3a\x00\x3c\x00\x3c\x00\x3d\x00\x40\x00\x3f\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x06\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x01\x00\x39\x00\x12\x00\x03\x00\x0a\x00\x06\x00\x07\x00\x08\x00\x09\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x2f\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x12\x00\x03\x00\x25\x00\x01\x00\x0a\x00\x28\x00\x29\x00\x01\x00\x03\x00\x0f\x00\x2d\x00\x2e\x00\x02\x00\x30\x00\x0a\x00\x26\x00\x33\x00\x3c\x00\x35\x00\x0f\x00\x12\x00\x26\x00\x37\x00\x3a\x00\x37\x00\x3c\x00\x3d\x00\x21\x00\x3f\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x3c\x00\x28\x00\x29\x00\x3c\x00\x21\x00\x0a\x00\x25\x00\x36\x00\x0d\x00\x0e\x00\x29\x00\x28\x00\x29\x00\x26\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x3b\x00\x2b\x00\x33\x00\x26\x00\x35\x00\x36\x00\x03\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x3c\x00\x3d\x00\x03\x00\x3f\x00\x03\x00\x2b\x00\x25\x00\x0a\x00\x0b\x00\x0c\x00\x29\x00\x0e\x00\x3c\x00\x26\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x03\x00\x0a\x00\x33\x00\x34\x00\x35\x00\x3c\x00\x0f\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x3c\x00\x3d\x00\x2c\x00\x3f\x00\x26\x00\x3e\x00\x25\x00\x3b\x00\x3b\x00\x3b\x00\x29\x00\x3b\x00\x04\x00\x21\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x3e\x00\x27\x00\x33\x00\x29\x00\x35\x00\x36\x00\x3e\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x3c\x00\x3d\x00\x32\x00\x3f\x00\x3e\x00\x26\x00\x25\x00\x3e\x00\x2b\x00\x2b\x00\x29\x00\x2b\x00\x26\x00\x3c\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x26\x00\x0f\x00\x33\x00\x34\x00\x35\x00\x3c\x00\x26\x00\x1b\x00\x1c\x00\x37\x00\x0d\x00\x3c\x00\x3d\x00\x2a\x00\x3f\x00\x34\x00\x34\x00\x25\x00\x01\x00\x0a\x00\x3c\x00\x29\x00\x34\x00\x2a\x00\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x3c\x00\x32\x00\x33\x00\x04\x00\x35\x00\x37\x00\x12\x00\x3c\x00\x37\x00\x05\x00\x3e\x00\x3c\x00\x3d\x00\x21\x00\x3f\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x3b\x00\x28\x00\x29\x00\x32\x00\x3e\x00\x3e\x00\x25\x00\x3f\x00\x26\x00\x26\x00\x29\x00\x3c\x00\x26\x00\x05\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x0f\x00\x2c\x00\x33\x00\x26\x00\x35\x00\x3b\x00\x0a\x00\x1b\x00\x1c\x00\x0d\x00\x01\x00\x3c\x00\x3d\x00\x11\x00\x3f\x00\x26\x00\x3e\x00\x25\x00\x03\x00\x17\x00\x18\x00\x29\x00\x1a\x00\x3c\x00\x33\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x33\x00\x22\x00\x33\x00\x24\x00\x35\x00\x36\x00\x33\x00\x1b\x00\x1c\x00\x0c\x00\x01\x00\x3c\x00\x3d\x00\x3c\x00\x3f\x00\x2a\x00\x36\x00\x25\x00\x2a\x00\x36\x00\x26\x00\x29\x00\x2c\x00\x1e\x00\x32\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x26\x00\x3e\x00\x33\x00\x34\x00\x35\x00\x02\x00\x3c\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x3c\x00\x3d\x00\x37\x00\x3f\x00\x34\x00\x2f\x00\x25\x00\x34\x00\x2a\x00\x40\x00\x29\x00\x2b\x00\x26\x00\x36\x00\x2d\x00\x2e\x00\x12\x00\x30\x00\x36\x00\x2b\x00\x33\x00\x26\x00\x35\x00\x35\x00\x0a\x00\x1b\x00\x1c\x00\x0d\x00\x2f\x00\x3c\x00\x3d\x00\x11\x00\x3f\x00\x31\x00\x26\x00\x25\x00\x40\x00\x17\x00\x18\x00\x29\x00\x1a\x00\x40\x00\xff\xff\x2d\x00\x2e\x00\x12\x00\x30\x00\xff\xff\x22\x00\x33\x00\x24\x00\x35\x00\xff\xff\x0a\x00\x1b\x00\x1c\x00\x0d\x00\xff\xff\x3c\x00\x3d\x00\x11\x00\x3f\x00\xff\xff\xff\xff\x25\x00\xff\xff\x17\x00\x18\x00\x29\x00\x1a\x00\xff\xff\xff\xff\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x22\x00\x33\x00\x24\x00\x35\x00\xff\xff\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\x3c\x00\x3d\x00\x11\x00\x3f\x00\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0a\x00\x24\x00\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0a\x00\x24\x00\xff\xff\x0d\x00\xff\xff\x0a\x00\xff\xff\x11\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x11\x00\x17\x00\x18\x00\xff\xff\x1a\x00\xff\xff\x17\x00\x18\x00\xff\xff\x1a\x00\x0a\x00\xff\xff\x22\x00\x0d\x00\x24\x00\xff\xff\xff\xff\x22\x00\xff\xff\x24\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x0a\x00\x4b\x00\xff\xff\x0d\x00\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\x55\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+happyTable :: HappyAddr
+happyTable = HappyA# "\x00\x00\xc6\x00\xc9\x01\x9e\x00\x91\x01\xc6\x00\xc0\x01\xc8\x01\x4d\x01\x05\x00\x4d\x01\x9e\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x05\x00\x06\x00\x07\x00\x62\x01\x39\x00\x80\x01\xbc\x01\xbc\x01\x88\x01\x3f\x01\x2d\x01\x41\x01\xcf\x01\x34\x01\x34\x01\x63\x01\x96\x01\x97\x01\xa1\x01\x24\x00\xa2\x01\xbc\x00\xd7\x01\x0a\x00\x0a\x00\x86\x01\x0b\x00\x0b\x00\x9f\x00\x9f\x00\xaa\x00\x98\x00\xc3\x00\x46\x01\x99\x00\x9c\x00\x24\x00\x25\x00\x49\x00\x6f\x01\xa2\x00\x0a\x00\x0a\x00\x0a\x00\x0b\x00\x0b\x00\x0b\x00\xab\x00\xac\x00\xad\x00\x96\x01\xaa\x01\x42\x01\x43\x01\x44\x01\x3f\x01\xcc\x01\xca\x00\xca\x00\x3b\x00\xee\x00\xd0\x01\xa1\x01\x0b\x00\xa2\x01\x40\x01\x87\x01\x98\x01\x08\x00\x24\x00\xc2\x01\xef\x00\x0e\x00\x0f\x00\x10\x00\xa4\x00\x12\x00\x08\x00\x24\x00\x89\x01\xd4\x01\xca\x01\xc1\x01\xc7\x00\xc7\x00\x4e\x01\x9b\x01\x4e\x01\x4f\x01\xb8\x01\x8b\x01\x26\x01\x27\x01\x28\x01\x42\x00\xbd\x01\xbd\x01\x81\x01\x89\x01\xbe\x01\xbf\x01\x2e\x01\x35\x01\x36\x01\xf0\x00\xa0\x00\xa1\x00\xe9\x00\xcb\x00\xf1\x00\xf2\x00\x40\x01\x41\x01\xf3\x00\xa3\x01\xf4\x00\xf5\x00\xcd\x01\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\x47\x01\xfe\x00\xff\x00\x00\x01\x96\x01\x97\x01\x01\x01\x47\x01\x02\x01\xd5\x01\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x92\x01\x96\x01\x97\x01\x41\x01\xee\x00\x3c\x01\x41\x01\x0b\x00\xd3\x00\xd4\x00\xd5\x00\x4d\x00\xd6\x00\xd3\x01\xa5\x01\xef\x00\x0e\x00\x0f\x00\x10\x00\xa4\x00\x12\x00\x24\x00\xaa\x00\x9e\x00\x8e\x01\x49\x01\x4a\x01\x55\x00\x56\x00\x34\x01\xad\x01\x48\x01\x49\x01\x4a\x01\x57\x00\x0a\x00\x55\x00\x56\x00\x0b\x00\xb9\x01\x1a\x01\xad\x00\x4b\x00\x57\x00\x42\x01\x4c\x00\x8d\x01\x42\x01\xf0\x00\x46\x01\x6e\x01\x6f\x01\x98\x01\xf1\x00\xf2\x00\x96\x01\xb5\x01\xf3\x00\xd7\x00\xf4\x00\xf5\x00\xae\x01\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xb7\x01\xfe\x00\xff\x00\x00\x01\x24\x00\x25\x00\x01\x01\x58\x00\x02\x01\xa6\x01\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\xee\x00\x31\x00\xbd\x00\x0b\x00\x31\x00\x0a\x00\x32\x00\x4d\x00\x0b\x00\x32\x00\x7a\x01\xef\x00\x0e\x00\x0f\x00\x10\x00\xa4\x00\x12\x00\x31\x00\x48\x00\x10\x00\x49\x00\x12\x00\x32\x00\x0a\x00\x33\x00\xb6\x01\x0b\x00\x33\x00\x34\x00\x35\x00\x36\x00\x3e\x00\x37\x00\x3f\x00\x41\x00\x37\x00\x48\x00\x10\x00\xd6\x01\xa7\x00\xd7\x00\x24\x00\xec\x00\xa1\x01\xf0\x00\xc5\x01\x31\x00\x87\x01\xd9\x00\x5a\x01\xf2\x00\x6a\x01\x7f\x01\xf3\x00\x7d\x01\xf4\x00\xf5\x00\x78\x01\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xd1\x01\xfe\x00\xff\x00\x00\x01\xd2\x01\xcb\x01\x01\x01\x7c\x01\x02\x01\xec\x00\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\xee\x00\x31\x00\x31\x00\x0b\x00\x31\x00\x7e\x01\x32\x00\x6a\x01\x6b\x01\x32\x00\x8a\x01\xef\x00\x0e\x00\x0f\x00\x10\x00\xa4\x00\x12\x00\x31\x00\x8f\x01\xa1\x01\x31\x00\xac\x01\x32\x00\x31\x00\xd7\x00\x6a\x01\x6c\x01\xd7\x00\x32\x00\x94\x01\x39\x00\x65\x01\xd9\x00\x95\x01\x66\x01\xd9\x00\x45\x00\x31\x00\xdb\x00\x45\x00\xd7\x00\x46\x00\x6a\x01\x6d\x01\xf0\x00\x24\x00\x33\x00\x67\x01\xd9\x00\xf1\x00\xf2\x00\x90\x01\xb3\x00\xf3\x00\x37\x00\xf4\x00\xf5\x00\x55\x01\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\x9f\x01\xfe\x00\xff\x00\x00\x01\xa0\x01\xeb\x00\x01\x01\x51\x01\x02\x01\xec\x00\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x3f\x01\x18\x00\xe3\x00\xd0\x00\xd1\x00\x57\x01\x0a\x01\x0b\x01\x0c\x01\x56\x00\xbb\x01\xce\x00\xcf\x00\xd0\x00\xd1\x00\x0d\x01\x0e\x01\x0f\x01\x10\x01\xcf\x01\x11\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x1a\x00\x1b\x00\x4f\x00\x98\x00\x5d\x01\x50\x00\x99\x00\xc9\x00\x51\x00\x60\x01\x1d\x00\x64\x01\x98\x00\x18\x01\x1e\x00\x99\x00\x9a\x00\x31\x00\x1f\x00\x20\x00\x70\x01\x21\x00\x32\x00\x0a\x00\x3d\x00\x71\x01\x3e\x00\xee\x00\x29\x01\x40\x01\x73\x01\x19\x01\x74\x01\x24\x00\x25\x00\x24\x01\x26\x00\x3f\x01\x18\x00\x2b\x01\xd7\x00\x43\x00\x16\x00\x0a\x01\x0b\x01\x0c\x01\x56\x00\x68\x01\xd9\x00\xd3\x00\xd4\x00\xd5\x00\x0d\x01\x0e\x01\x0f\x01\x10\x01\x2c\x01\x11\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x1a\x00\x1b\x00\xea\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\x98\x00\x2f\x01\x1d\x00\x99\x00\x9b\x00\x18\x01\x1e\x00\x26\x00\x04\x00\x39\x00\x1f\x00\x20\x00\x30\x01\x21\x00\x31\x01\x3a\x00\x3d\x00\x3b\x00\x3e\x00\x24\x00\x25\x00\x40\x01\x32\x01\x19\x01\x24\x00\x24\x00\x25\x00\x37\x01\x26\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x3d\x01\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x18\x00\x39\x01\xdd\x00\x3c\x01\xe2\x00\x0a\x01\x0b\x01\x0c\x01\x56\x00\xb2\x01\xce\x00\xcf\x00\xd0\x00\xd1\x00\x0d\x01\x0e\x01\x0f\x01\x10\x01\xe7\x00\x11\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x1a\x00\x1b\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xdb\x00\x4d\x00\x1d\x00\x18\x00\x31\x00\x18\x01\x1e\x00\x04\x00\x4e\x00\x32\x00\x1f\x00\x20\x00\x58\x00\x21\x00\x31\x00\x0a\x00\x3d\x00\x24\x00\x3e\x00\x32\x00\x19\x00\x0a\x00\xc7\x01\x19\x01\xc8\x01\x24\x00\x25\x00\xd7\x00\x26\x00\x1a\x00\x1b\x00\x1c\x00\x18\x00\x24\x00\xdf\x00\xd9\x00\x24\x00\xd7\x00\x98\x00\x1d\x00\xc5\x01\x99\x00\x9c\x00\x1e\x00\xe1\x00\xd9\x00\x0a\x00\x1f\x00\x20\x00\x19\x00\x21\x00\xaa\x01\xac\x01\x22\x00\x0a\x00\x23\x00\x2e\x00\xb0\x01\x1a\x00\x1b\x00\x1c\x00\x18\x00\x24\x00\x25\x00\xb1\x01\x26\x00\xb2\x01\xb5\x01\x1d\x00\xd3\x00\xd4\x00\xd5\x00\x1e\x00\xd6\x00\x24\x00\x0a\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x94\x01\x31\x00\x22\x00\x31\x00\x23\x00\x24\x00\x32\x00\x1a\x00\x1b\x00\x1c\x00\x18\x00\x24\x00\x25\x00\x9a\x01\x26\x00\x0a\x00\xdd\x00\x1d\x00\xa6\x01\xa8\x01\xa9\x01\x1e\x00\x7a\x01\x5f\x01\x33\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x73\x01\xb5\x00\x22\x00\x37\x00\x23\x00\x2e\x00\xdd\x00\x1a\x00\x1b\x00\x1c\x00\x18\x00\x24\x00\x25\x00\x26\x01\x26\x00\x7c\x01\x0a\x00\x1d\x00\xdd\x00\x83\x01\x84\x01\x1e\x00\x85\x01\x0a\x00\x24\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x0a\x00\x4c\x01\x22\x00\x31\x00\x23\x00\x24\x00\x0a\x00\x1a\x00\x1b\x00\x51\x01\x53\x01\x24\x00\x25\x00\x54\x01\x26\x00\x55\x01\x57\x01\x1d\x00\x18\x00\x31\x00\x24\x00\x1e\x00\x59\x01\x5a\x01\x32\x00\x1f\x00\x20\x00\x91\xff\x21\x00\x24\x00\x91\xff\x3d\x00\x5f\x01\x3e\x00\x64\x01\x19\x00\x24\x00\x6a\x01\x3b\x01\x73\x01\x24\x00\x25\x00\xd7\x00\x26\x00\x1a\x00\x1b\x00\x1c\x00\x18\x00\x76\x01\xd8\x00\xd9\x00\x26\x01\x77\x01\x78\x01\x1d\x00\x2b\x01\x0a\x00\x0a\x00\x1e\x00\x24\x00\x0a\x00\x3b\x01\x1f\x00\x20\x00\x19\x00\x21\x00\x4c\x01\x39\x01\x22\x00\x0a\x00\x23\x00\xdf\x00\x0a\x00\x1a\x00\x1b\x00\x0b\x00\x18\x00\x24\x00\x25\x00\xb0\x00\x26\x00\x0a\x00\xdd\x00\x1d\x00\xe1\x00\xa6\x00\x10\x00\x1e\x00\xa7\x00\x24\x00\xe5\x00\x1f\x00\x20\x00\x19\x00\x21\x00\xe6\x00\x2b\x00\x3d\x00\x2c\x00\x3e\x00\xb2\x00\xe7\x00\x1a\x00\x1b\x00\xd5\x00\x18\x00\x24\x00\x25\x00\x24\x00\x26\x00\x1c\x01\x1d\x01\x1d\x00\xc4\x00\xc5\x00\x0a\x00\x1e\x00\xc6\x00\x98\x00\x4c\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x0a\x00\xdd\x00\x3d\x00\xb3\x00\x3e\x00\xa9\x00\x24\x00\x1a\x00\x1b\x00\x1c\x00\x18\x00\x24\x00\x25\x00\xaa\x00\x26\x00\xb7\x00\xaf\x00\x1d\x00\xb8\x00\xb9\x00\xff\xff\x1e\x00\xa2\xff\x0a\x00\xba\x00\x1f\x00\x20\x00\x19\x00\x21\x00\xbb\x00\xbc\x00\x22\x00\x0a\x00\x23\x00\x41\x00\x0a\x00\x1a\x00\x1b\x00\x0b\x00\x47\x00\x24\x00\x25\x00\x28\x00\x26\x00\x4d\x00\x0a\x00\x1d\x00\xff\xff\xa6\x00\x10\x00\x1e\x00\xa7\x00\xff\xff\x00\x00\x1f\x00\x20\x00\x19\x00\x21\x00\x00\x00\x2b\x00\x3d\x00\x2c\x00\x3e\x00\x00\x00\x0a\x00\x1a\x00\x1b\x00\x0b\x00\x00\x00\x24\x00\x25\x00\x28\x00\x26\x00\x00\x00\x00\x00\x1d\x00\x00\x00\xa6\x00\x10\x00\x1e\x00\xa7\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x3d\x00\x2c\x00\x3e\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x24\x00\x25\x00\x28\x00\x26\x00\x00\x00\xbf\x00\x0d\x00\x0e\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\xc0\x00\x1d\x01\x2c\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\xbf\x00\x0d\x00\x0e\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\xc0\x00\xc1\x00\x2c\x00\x27\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x29\x00\x0d\x00\x0e\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2b\x00\x0a\x00\x2c\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x2e\x00\x0d\x00\x0e\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2f\x00\x0a\x00\x2c\x00\x00\x00\x0b\x00\x00\x00\x0a\x00\x00\x00\xb0\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x28\x00\xa6\x00\x10\x00\x00\x00\xa7\x00\x00\x00\xa6\x00\x10\x00\x00\x00\xa7\x00\x0a\x00\x00\x00\x2b\x00\x0b\x00\x2c\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x2c\x00\xba\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x1f\x01\x20\x01\x21\x01\x22\x01\x23\x01\x24\x01\xc3\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x4c\x01\xce\x00\xcf\x00\xd0\x00\xd1\x00\x00\x00\xb3\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\xe8\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\x00\x00\x9a\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x27\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x4f\x00\x00\x00\x0b\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x53\x00\xa3\x00\x0f\x00\x10\x00\xa4\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+happyReduceArr = array (3, 269) [
+	(3 , happyReduce_3),
+	(4 , happyReduce_4),
+	(5 , happyReduce_5),
+	(6 , happyReduce_6),
+	(7 , happyReduce_7),
+	(8 , happyReduce_8),
+	(9 , happyReduce_9),
+	(10 , happyReduce_10),
+	(11 , happyReduce_11),
+	(12 , happyReduce_12),
+	(13 , happyReduce_13),
+	(14 , happyReduce_14),
+	(15 , happyReduce_15),
+	(16 , happyReduce_16),
+	(17 , happyReduce_17),
+	(18 , happyReduce_18),
+	(19 , happyReduce_19),
+	(20 , happyReduce_20),
+	(21 , happyReduce_21),
+	(22 , happyReduce_22),
+	(23 , happyReduce_23),
+	(24 , happyReduce_24),
+	(25 , happyReduce_25),
+	(26 , happyReduce_26),
+	(27 , happyReduce_27),
+	(28 , happyReduce_28),
+	(29 , happyReduce_29),
+	(30 , happyReduce_30),
+	(31 , happyReduce_31),
+	(32 , happyReduce_32),
+	(33 , happyReduce_33),
+	(34 , happyReduce_34),
+	(35 , happyReduce_35),
+	(36 , happyReduce_36),
+	(37 , happyReduce_37),
+	(38 , happyReduce_38),
+	(39 , happyReduce_39),
+	(40 , happyReduce_40),
+	(41 , happyReduce_41),
+	(42 , happyReduce_42),
+	(43 , happyReduce_43),
+	(44 , happyReduce_44),
+	(45 , happyReduce_45),
+	(46 , happyReduce_46),
+	(47 , happyReduce_47),
+	(48 , happyReduce_48),
+	(49 , happyReduce_49),
+	(50 , happyReduce_50),
+	(51 , happyReduce_51),
+	(52 , happyReduce_52),
+	(53 , happyReduce_53),
+	(54 , happyReduce_54),
+	(55 , happyReduce_55),
+	(56 , happyReduce_56),
+	(57 , happyReduce_57),
+	(58 , happyReduce_58),
+	(59 , happyReduce_59),
+	(60 , happyReduce_60),
+	(61 , happyReduce_61),
+	(62 , happyReduce_62),
+	(63 , happyReduce_63),
+	(64 , happyReduce_64),
+	(65 , happyReduce_65),
+	(66 , happyReduce_66),
+	(67 , happyReduce_67),
+	(68 , happyReduce_68),
+	(69 , happyReduce_69),
+	(70 , happyReduce_70),
+	(71 , happyReduce_71),
+	(72 , happyReduce_72),
+	(73 , happyReduce_73),
+	(74 , happyReduce_74),
+	(75 , happyReduce_75),
+	(76 , happyReduce_76),
+	(77 , happyReduce_77),
+	(78 , happyReduce_78),
+	(79 , happyReduce_79),
+	(80 , happyReduce_80),
+	(81 , happyReduce_81),
+	(82 , happyReduce_82),
+	(83 , happyReduce_83),
+	(84 , happyReduce_84),
+	(85 , happyReduce_85),
+	(86 , happyReduce_86),
+	(87 , happyReduce_87),
+	(88 , happyReduce_88),
+	(89 , happyReduce_89),
+	(90 , happyReduce_90),
+	(91 , happyReduce_91),
+	(92 , happyReduce_92),
+	(93 , happyReduce_93),
+	(94 , happyReduce_94),
+	(95 , happyReduce_95),
+	(96 , happyReduce_96),
+	(97 , happyReduce_97),
+	(98 , happyReduce_98),
+	(99 , happyReduce_99),
+	(100 , happyReduce_100),
+	(101 , happyReduce_101),
+	(102 , happyReduce_102),
+	(103 , happyReduce_103),
+	(104 , happyReduce_104),
+	(105 , happyReduce_105),
+	(106 , happyReduce_106),
+	(107 , happyReduce_107),
+	(108 , happyReduce_108),
+	(109 , happyReduce_109),
+	(110 , happyReduce_110),
+	(111 , happyReduce_111),
+	(112 , happyReduce_112),
+	(113 , happyReduce_113),
+	(114 , happyReduce_114),
+	(115 , happyReduce_115),
+	(116 , happyReduce_116),
+	(117 , happyReduce_117),
+	(118 , happyReduce_118),
+	(119 , happyReduce_119),
+	(120 , happyReduce_120),
+	(121 , happyReduce_121),
+	(122 , happyReduce_122),
+	(123 , happyReduce_123),
+	(124 , happyReduce_124),
+	(125 , happyReduce_125),
+	(126 , happyReduce_126),
+	(127 , happyReduce_127),
+	(128 , happyReduce_128),
+	(129 , happyReduce_129),
+	(130 , happyReduce_130),
+	(131 , happyReduce_131),
+	(132 , happyReduce_132),
+	(133 , happyReduce_133),
+	(134 , happyReduce_134),
+	(135 , happyReduce_135),
+	(136 , happyReduce_136),
+	(137 , happyReduce_137),
+	(138 , happyReduce_138),
+	(139 , happyReduce_139),
+	(140 , happyReduce_140),
+	(141 , happyReduce_141),
+	(142 , happyReduce_142),
+	(143 , happyReduce_143),
+	(144 , happyReduce_144),
+	(145 , happyReduce_145),
+	(146 , happyReduce_146),
+	(147 , happyReduce_147),
+	(148 , happyReduce_148),
+	(149 , happyReduce_149),
+	(150 , happyReduce_150),
+	(151 , happyReduce_151),
+	(152 , happyReduce_152),
+	(153 , happyReduce_153),
+	(154 , happyReduce_154),
+	(155 , happyReduce_155),
+	(156 , happyReduce_156),
+	(157 , happyReduce_157),
+	(158 , happyReduce_158),
+	(159 , happyReduce_159),
+	(160 , happyReduce_160),
+	(161 , happyReduce_161),
+	(162 , happyReduce_162),
+	(163 , happyReduce_163),
+	(164 , happyReduce_164),
+	(165 , happyReduce_165),
+	(166 , happyReduce_166),
+	(167 , happyReduce_167),
+	(168 , happyReduce_168),
+	(169 , happyReduce_169),
+	(170 , happyReduce_170),
+	(171 , happyReduce_171),
+	(172 , happyReduce_172),
+	(173 , happyReduce_173),
+	(174 , happyReduce_174),
+	(175 , happyReduce_175),
+	(176 , happyReduce_176),
+	(177 , happyReduce_177),
+	(178 , happyReduce_178),
+	(179 , happyReduce_179),
+	(180 , happyReduce_180),
+	(181 , happyReduce_181),
+	(182 , happyReduce_182),
+	(183 , happyReduce_183),
+	(184 , happyReduce_184),
+	(185 , happyReduce_185),
+	(186 , happyReduce_186),
+	(187 , happyReduce_187),
+	(188 , happyReduce_188),
+	(189 , happyReduce_189),
+	(190 , happyReduce_190),
+	(191 , happyReduce_191),
+	(192 , happyReduce_192),
+	(193 , happyReduce_193),
+	(194 , happyReduce_194),
+	(195 , happyReduce_195),
+	(196 , happyReduce_196),
+	(197 , happyReduce_197),
+	(198 , happyReduce_198),
+	(199 , happyReduce_199),
+	(200 , happyReduce_200),
+	(201 , happyReduce_201),
+	(202 , happyReduce_202),
+	(203 , happyReduce_203),
+	(204 , happyReduce_204),
+	(205 , happyReduce_205),
+	(206 , happyReduce_206),
+	(207 , happyReduce_207),
+	(208 , happyReduce_208),
+	(209 , happyReduce_209),
+	(210 , happyReduce_210),
+	(211 , happyReduce_211),
+	(212 , happyReduce_212),
+	(213 , happyReduce_213),
+	(214 , happyReduce_214),
+	(215 , happyReduce_215),
+	(216 , happyReduce_216),
+	(217 , happyReduce_217),
+	(218 , happyReduce_218),
+	(219 , happyReduce_219),
+	(220 , happyReduce_220),
+	(221 , happyReduce_221),
+	(222 , happyReduce_222),
+	(223 , happyReduce_223),
+	(224 , happyReduce_224),
+	(225 , happyReduce_225),
+	(226 , happyReduce_226),
+	(227 , happyReduce_227),
+	(228 , happyReduce_228),
+	(229 , happyReduce_229),
+	(230 , happyReduce_230),
+	(231 , happyReduce_231),
+	(232 , happyReduce_232),
+	(233 , happyReduce_233),
+	(234 , happyReduce_234),
+	(235 , happyReduce_235),
+	(236 , happyReduce_236),
+	(237 , happyReduce_237),
+	(238 , happyReduce_238),
+	(239 , happyReduce_239),
+	(240 , happyReduce_240),
+	(241 , happyReduce_241),
+	(242 , happyReduce_242),
+	(243 , happyReduce_243),
+	(244 , happyReduce_244),
+	(245 , happyReduce_245),
+	(246 , happyReduce_246),
+	(247 , happyReduce_247),
+	(248 , happyReduce_248),
+	(249 , happyReduce_249),
+	(250 , happyReduce_250),
+	(251 , happyReduce_251),
+	(252 , happyReduce_252),
+	(253 , happyReduce_253),
+	(254 , happyReduce_254),
+	(255 , happyReduce_255),
+	(256 , happyReduce_256),
+	(257 , happyReduce_257),
+	(258 , happyReduce_258),
+	(259 , happyReduce_259),
+	(260 , happyReduce_260),
+	(261 , happyReduce_261),
+	(262 , happyReduce_262),
+	(263 , happyReduce_263),
+	(264 , happyReduce_264),
+	(265 , happyReduce_265),
+	(266 , happyReduce_266),
+	(267 , happyReduce_267),
+	(268 , happyReduce_268),
+	(269 , happyReduce_269)
+	]
+
+happy_n_terms = 65 :: Int
+happy_n_nonterms = 101 :: Int
+
+happyReduce_3 = happySpecReduce_1  0# happyReduction_3
+happyReduction_3 happy_x_1
+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
+	happyIn6
+		 (reverse happy_var_1
+	)}
+
+happyReduce_4 = happySpecReduce_2  1# happyReduction_4
+happyReduction_4 happy_x_2
+	happy_x_1
+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
+	case happyOut8 happy_x_2 of { happy_var_2 -> 
+	happyIn7
+		 (happy_var_2 : happy_var_1
+	)}}
+
+happyReduce_5 = happySpecReduce_0  1# happyReduction_5
+happyReduction_5  =  happyIn7
+		 ([]
+	)
+
+happyReduce_6 = happySpecReduce_1  2# happyReduction_6
+happyReduction_6 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwLet happy_var_1
+	)}
+
+happyReduce_7 = happySpecReduce_1  2# happyReduction_7
+happyReduction_7 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwIn happy_var_1
+	)}
+
+happyReduce_8 = happySpecReduce_1  2# happyReduction_8
+happyReduction_8 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwWhere happy_var_1
+	)}
+
+happyReduce_9 = happySpecReduce_1  2# happyReduction_9
+happyReduction_9 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwWith happy_var_1
+	)}
+
+happyReduce_10 = happySpecReduce_1  2# happyReduction_10
+happyReduction_10 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwRewrite happy_var_1
+	)}
+
+happyReduce_11 = happySpecReduce_1  2# happyReduction_11
+happyReduction_11 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwPostulate happy_var_1
+	)}
+
+happyReduce_12 = happySpecReduce_1  2# happyReduction_12
+happyReduction_12 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwPrimitive happy_var_1
+	)}
+
+happyReduce_13 = happySpecReduce_1  2# happyReduction_13
+happyReduction_13 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwOpen happy_var_1
+	)}
+
+happyReduce_14 = happySpecReduce_1  2# happyReduction_14
+happyReduction_14 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwImport happy_var_1
+	)}
+
+happyReduce_15 = happySpecReduce_1  2# happyReduction_15
+happyReduction_15 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwUsing happy_var_1
+	)}
+
+happyReduce_16 = happySpecReduce_1  2# happyReduction_16
+happyReduction_16 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwHiding happy_var_1
+	)}
+
+happyReduce_17 = happySpecReduce_1  2# happyReduction_17
+happyReduction_17 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwRenaming happy_var_1
+	)}
+
+happyReduce_18 = happySpecReduce_1  2# happyReduction_18
+happyReduction_18 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwTo happy_var_1
+	)}
+
+happyReduce_19 = happySpecReduce_1  2# happyReduction_19
+happyReduction_19 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwPublic happy_var_1
+	)}
+
+happyReduce_20 = happySpecReduce_1  2# happyReduction_20
+happyReduction_20 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwModule happy_var_1
+	)}
+
+happyReduce_21 = happySpecReduce_1  2# happyReduction_21
+happyReduction_21 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwData happy_var_1
+	)}
+
+happyReduce_22 = happySpecReduce_1  2# happyReduction_22
+happyReduction_22 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwCoData happy_var_1
+	)}
+
+happyReduce_23 = happySpecReduce_1  2# happyReduction_23
+happyReduction_23 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwRecord happy_var_1
+	)}
+
+happyReduce_24 = happySpecReduce_1  2# happyReduction_24
+happyReduction_24 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwConstructor happy_var_1
+	)}
+
+happyReduce_25 = happySpecReduce_1  2# happyReduction_25
+happyReduction_25 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwField happy_var_1
+	)}
+
+happyReduce_26 = happySpecReduce_1  2# happyReduction_26
+happyReduction_26 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwInfix happy_var_1
+	)}
+
+happyReduce_27 = happySpecReduce_1  2# happyReduction_27
+happyReduction_27 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwInfixL happy_var_1
+	)}
+
+happyReduce_28 = happySpecReduce_1  2# happyReduction_28
+happyReduction_28 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwInfixR happy_var_1
+	)}
+
+happyReduce_29 = happySpecReduce_1  2# happyReduction_29
+happyReduction_29 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwMutual happy_var_1
+	)}
+
+happyReduce_30 = happySpecReduce_1  2# happyReduction_30
+happyReduction_30 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwAbstract happy_var_1
+	)}
+
+happyReduce_31 = happySpecReduce_1  2# happyReduction_31
+happyReduction_31 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwPrivate happy_var_1
+	)}
+
+happyReduce_32 = happySpecReduce_1  2# happyReduction_32
+happyReduction_32 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwProp happy_var_1
+	)}
+
+happyReduce_33 = happySpecReduce_1  2# happyReduction_33
+happyReduction_33 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwSet happy_var_1
+	)}
+
+happyReduce_34 = happySpecReduce_1  2# happyReduction_34
+happyReduction_34 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwForall happy_var_1
+	)}
+
+happyReduce_35 = happySpecReduce_1  2# happyReduction_35
+happyReduction_35 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwOPTIONS happy_var_1
+	)}
+
+happyReduce_36 = happySpecReduce_1  2# happyReduction_36
+happyReduction_36 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwBUILTIN happy_var_1
+	)}
+
+happyReduce_37 = happySpecReduce_1  2# happyReduction_37
+happyReduction_37 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwIMPORT happy_var_1
+	)}
+
+happyReduce_38 = happySpecReduce_1  2# happyReduction_38
+happyReduction_38 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwCOMPILED happy_var_1
+	)}
+
+happyReduce_39 = happySpecReduce_1  2# happyReduction_39
+happyReduction_39 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwCOMPILED_DATA happy_var_1
+	)}
+
+happyReduce_40 = happySpecReduce_1  2# happyReduction_40
+happyReduction_40 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwCOMPILED_TYPE happy_var_1
+	)}
+
+happyReduce_41 = happySpecReduce_1  2# happyReduction_41
+happyReduction_41 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> 
+	happyIn8
+		 (TokSetN happy_var_1
+	)}
+
+happyReduce_42 = happySpecReduce_1  2# happyReduction_42
+happyReduction_42 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> 
+	happyIn8
+		 (TokTeX happy_var_1
+	)}
+
+happyReduce_43 = happySpecReduce_1  2# happyReduction_43
+happyReduction_43 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> 
+	happyIn8
+		 (TokComment happy_var_1
+	)}
+
+happyReduce_44 = happySpecReduce_1  2# happyReduction_44
+happyReduction_44 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymEllipsis happy_var_1
+	)}
+
+happyReduce_45 = happySpecReduce_1  2# happyReduction_45
+happyReduction_45 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymDot happy_var_1
+	)}
+
+happyReduce_46 = happySpecReduce_1  2# happyReduction_46
+happyReduction_46 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymSemi happy_var_1
+	)}
+
+happyReduce_47 = happySpecReduce_1  2# happyReduction_47
+happyReduction_47 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymColon happy_var_1
+	)}
+
+happyReduce_48 = happySpecReduce_1  2# happyReduction_48
+happyReduction_48 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymEqual happy_var_1
+	)}
+
+happyReduce_49 = happySpecReduce_1  2# happyReduction_49
+happyReduction_49 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymUnderscore happy_var_1
+	)}
+
+happyReduce_50 = happySpecReduce_1  2# happyReduction_50
+happyReduction_50 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymQuestionMark happy_var_1
+	)}
+
+happyReduce_51 = happySpecReduce_1  2# happyReduction_51
+happyReduction_51 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymArrow happy_var_1
+	)}
+
+happyReduce_52 = happySpecReduce_1  2# happyReduction_52
+happyReduction_52 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymLambda happy_var_1
+	)}
+
+happyReduce_53 = happySpecReduce_1  2# happyReduction_53
+happyReduction_53 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymAs happy_var_1
+	)}
+
+happyReduce_54 = happySpecReduce_1  2# happyReduction_54
+happyReduction_54 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymBar happy_var_1
+	)}
+
+happyReduce_55 = happySpecReduce_1  2# happyReduction_55
+happyReduction_55 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymOpenParen happy_var_1
+	)}
+
+happyReduce_56 = happySpecReduce_1  2# happyReduction_56
+happyReduction_56 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymCloseParen happy_var_1
+	)}
+
+happyReduce_57 = happySpecReduce_1  2# happyReduction_57
+happyReduction_57 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymOpenBrace happy_var_1
+	)}
+
+happyReduce_58 = happySpecReduce_1  2# happyReduction_58
+happyReduction_58 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymCloseBrace happy_var_1
+	)}
+
+happyReduce_59 = happySpecReduce_1  2# happyReduction_59
+happyReduction_59 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymOpenVirtualBrace happy_var_1
+	)}
+
+happyReduce_60 = happySpecReduce_1  2# happyReduction_60
+happyReduction_60 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymCloseVirtualBrace happy_var_1
+	)}
+
+happyReduce_61 = happySpecReduce_1  2# happyReduction_61
+happyReduction_61 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymVirtualSemi happy_var_1
+	)}
+
+happyReduce_62 = happySpecReduce_1  2# happyReduction_62
+happyReduction_62 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymOpenPragma happy_var_1
+	)}
+
+happyReduce_63 = happySpecReduce_1  2# happyReduction_63
+happyReduction_63 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymClosePragma happy_var_1
+	)}
+
+happyReduce_64 = happySpecReduce_1  2# happyReduction_64
+happyReduction_64 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
+	happyIn8
+		 (TokId happy_var_1
+	)}
+
+happyReduce_65 = happySpecReduce_1  2# happyReduction_65
+happyReduction_65 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> 
+	happyIn8
+		 (TokQId happy_var_1
+	)}
+
+happyReduce_66 = happySpecReduce_1  2# happyReduction_66
+happyReduction_66 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	happyIn8
+		 (TokString happy_var_1
+	)}
+
+happyReduce_67 = happySpecReduce_1  2# happyReduction_67
+happyReduction_67 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
+	happyIn8
+		 (TokLiteral happy_var_1
+	)}
+
+happyReduce_68 = happySpecReduce_0  3# happyReduction_68
+happyReduction_68  =  happyIn9
+		 (()
+	)
+
+happyReduce_69 = happySpecReduce_2  3# happyReduction_69
+happyReduction_69 happy_x_2
+	happy_x_1
+	 =  happyIn9
+		 (()
+	)
+
+happyReduce_70 = happySpecReduce_2  4# happyReduction_70
+happyReduction_70 happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	happyIn10
+		 (happy_var_1
+	)}
+
+happyReduce_71 = happySpecReduce_1  5# happyReduction_71
+happyReduction_71 happy_x_1
+	 =  case happyOut86 happy_x_1 of { happy_var_1 -> 
+	happyIn11
+		 (([], happy_var_1)
+	)}
+
+happyReduce_72 = happySpecReduce_3  5# happyReduction_72
+happyReduction_72 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut89 happy_x_2 of { happy_var_2 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (let (ps,m) = happy_var_3 in (happy_var_2 : ps, m)
+	)}}
+
+happyReduce_73 = happySpecReduce_1  6# happyReduction_73
+happyReduction_73 happy_x_1
+	 =  happyIn12
+		 (()
+	)
+
+happyReduce_74 = happyMonadReduce 1# 6# happyReduction_74
+happyReduction_74 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (( popContext)
+	) (\r -> happyReturn (happyIn12 r))
+
+happyReduce_75 = happySpecReduce_1  7# happyReduction_75
+happyReduction_75 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> 
+	happyIn13
+		 (happy_var_1
+	)}
+
+happyReduce_76 = happySpecReduce_2  7# happyReduction_76
+happyReduction_76 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_2 of { (TokSymbol SymVirtualSemi happy_var_2) -> 
+	happyIn13
+		 (happy_var_2
+	)}
+
+happyReduce_77 = happyMonadReduce 0# 8# happyReduction_77
+happyReduction_77 (happyRest) tk
+	 = happyThen (( pushLexState imp_dir)
+	) (\r -> happyReturn (happyIn14 r))
+
+happyReduce_78 = happyMonadReduce 1# 9# happyReduction_78
+happyReduction_78 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
+	( case happy_var_1 of {
+		     LitInt _ n	-> return $ fromIntegral n;
+		     _		-> fail $ "Expected integer"
+		   })}
+	) (\r -> happyReturn (happyIn15 r))
+
+happyReduce_79 = happyMonadReduce 1# 10# happyReduction_79
+happyReduction_79 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
+	( mkName happy_var_1)}
+	) (\r -> happyReturn (happyIn16 r))
+
+happyReduce_80 = happySpecReduce_2  11# happyReduction_80
+happyReduction_80 happy_x_2
+	happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	case happyOut17 happy_x_2 of { happy_var_2 -> 
+	happyIn17
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_81 = happySpecReduce_1  11# happyReduction_81
+happyReduction_81 happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	happyIn17
+		 ([happy_var_1]
+	)}
+
+happyReduce_82 = happySpecReduce_2  12# happyReduction_82
+happyReduction_82 happy_x_2
+	happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	case happyOut18 happy_x_2 of { happy_var_2 -> 
+	happyIn18
+		 ((NotHidden, happy_var_1) : happy_var_2
+	)}}
+
+happyReduce_83 = happySpecReduce_1  12# happyReduction_83
+happyReduction_83 happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	happyIn18
+		 ([(NotHidden, happy_var_1)]
+	)}
+
+happyReduce_84 = happyReduce 4# 12# happyReduction_84
+happyReduction_84 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut17 happy_x_2 of { happy_var_2 -> 
+	case happyOut18 happy_x_4 of { happy_var_4 -> 
+	happyIn18
+		 (map ((,) Hidden) happy_var_2 ++ happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_85 = happySpecReduce_3  12# happyReduction_85
+happyReduction_85 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut17 happy_x_2 of { happy_var_2 -> 
+	happyIn18
+		 (map ((,) Hidden) happy_var_2
+	)}
+
+happyReduce_86 = happyMonadReduce 1# 13# happyReduction_86
+happyReduction_86 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> 
+	( mkQName happy_var_1)}
+	) (\r -> happyReturn (happyIn19 r))
+
+happyReduce_87 = happySpecReduce_1  13# happyReduction_87
+happyReduction_87 happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	happyIn19
+		 (QName happy_var_1
+	)}
+
+happyReduce_88 = happySpecReduce_1  14# happyReduction_88
+happyReduction_88 happy_x_1
+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
+	happyIn20
+		 (happy_var_1
+	)}
+
+happyReduce_89 = happySpecReduce_1  15# happyReduction_89
+happyReduction_89 happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	happyIn21
+		 (happy_var_1
+	)}
+
+happyReduce_90 = happySpecReduce_1  15# happyReduction_90
+happyReduction_90 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
+	happyIn21
+		 (Name (getRange happy_var_1) [Hole]
+	)}
+
+happyReduce_91 = happySpecReduce_2  16# happyReduction_91
+happyReduction_91 happy_x_2
+	happy_x_1
+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> 
+	case happyOut22 happy_x_2 of { happy_var_2 -> 
+	happyIn22
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_92 = happySpecReduce_1  16# happyReduction_92
+happyReduction_92 happy_x_1
+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> 
+	happyIn22
+		 ([happy_var_1]
+	)}
+
+happyReduce_93 = happyMonadReduce 1# 17# happyReduction_93
+happyReduction_93 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut29 happy_x_1 of { happy_var_1 -> 
+	(
+    let getName (Ident (QName x)) = Just x
+	getName (Underscore r _)  = Just (Name r [Hole])
+	getName _		  = Nothing
+    in
+    case partition isJust $ map getName happy_var_1 of
+	(good, []) -> return $ map fromJust good
+	_	   -> fail $ "expected sequence of bound identifiers")}
+	) (\r -> happyReturn (happyIn23 r))
+
+happyReduce_94 = happySpecReduce_0  18# happyReduction_94
+happyReduction_94  =  happyIn24
+		 ([]
+	)
+
+happyReduce_95 = happySpecReduce_2  18# happyReduction_95
+happyReduction_95 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	case happyOut24 happy_x_2 of { happy_var_2 -> 
+	happyIn24
+		 (snd happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_96 = happyMonadReduce 1# 19# happyReduction_96
+happyReduction_96 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	( fmap QName (mkName happy_var_1))}
+	) (\r -> happyReturn (happyIn25 r))
+
+happyReduce_97 = happySpecReduce_2  20# happyReduction_97
+happyReduction_97 happy_x_2
+	happy_x_1
+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
+	case happyOut26 happy_x_2 of { happy_var_2 -> 
+	happyIn26
+		 (Pi happy_var_1 happy_var_2
+	)}}
+
+happyReduce_98 = happySpecReduce_3  20# happyReduction_98
+happyReduction_98 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut43 happy_x_2 of { happy_var_2 -> 
+	case happyOut26 happy_x_3 of { happy_var_3 -> 
+	happyIn26
+		 (forallPi happy_var_2 happy_var_3
+	)}}
+
+happyReduce_99 = happySpecReduce_3  20# happyReduction_99
+happyReduction_99 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_1 of { happy_var_1 -> 
+	case happyOut26 happy_x_3 of { happy_var_3 -> 
+	happyIn26
+		 (Fun (fuseRange happy_var_1 happy_var_3) (RawApp (getRange happy_var_1) happy_var_1) happy_var_3
+	)}}
+
+happyReduce_100 = happySpecReduce_1  20# happyReduction_100
+happyReduction_100 happy_x_1
+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
+	happyIn26
+		 (happy_var_1
+	)}
+
+happyReduce_101 = happyMonadReduce 1# 21# happyReduction_101
+happyReduction_101 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut28 happy_x_1 of { happy_var_1 -> 
+	( case happy_var_1 of
+		      { [e]    -> return e
+		      ; e : es -> return $ WithApp (fuseRange e es) e es
+		      ; []     -> fail "impossible: empty with expressions"
+		      })}
+	) (\r -> happyReturn (happyIn27 r))
+
+happyReduce_102 = happySpecReduce_3  22# happyReduction_102
+happyReduction_102 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_1 of { happy_var_1 -> 
+	case happyOut28 happy_x_3 of { happy_var_3 -> 
+	happyIn28
+		 (RawApp (getRange happy_var_1) happy_var_1 :  happy_var_3
+	)}}
+
+happyReduce_103 = happySpecReduce_1  22# happyReduction_103
+happyReduction_103 happy_x_1
+	 =  case happyOut29 happy_x_1 of { happy_var_1 -> 
+	happyIn28
+		 ([RawApp (getRange happy_var_1) happy_var_1]
+	)}
+
+happyReduce_104 = happySpecReduce_1  23# happyReduction_104
+happyReduction_104 happy_x_1
+	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
+	happyIn29
+		 ([happy_var_1]
+	)}
+
+happyReduce_105 = happySpecReduce_2  23# happyReduction_105
+happyReduction_105 happy_x_2
+	happy_x_1
+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
+	case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn29
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_106 = happySpecReduce_3  24# happyReduction_106
+happyReduction_106 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
+	case happyOut43 happy_x_2 of { happy_var_2 -> 
+	case happyOut26 happy_x_3 of { happy_var_3 -> 
+	happyIn30
+		 (Lam (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3
+	)}}}
+
+happyReduce_107 = happySpecReduce_2  24# happyReduction_107
+happyReduction_107 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
+	case happyOut44 happy_x_2 of { happy_var_2 -> 
+	happyIn30
+		 (let (bs, h) = happy_var_2; r = fuseRange happy_var_1 bs in
+                                     if null bs then AbsurdLam r h else
+                                     Lam r bs (AbsurdLam r h)
+	)}}
+
+happyReduce_108 = happyReduce 4# 24# happyReduction_108
+happyReduction_108 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> 
+	case happyOut104 happy_x_2 of { happy_var_2 -> 
+	case happyOut26 happy_x_4 of { happy_var_4 -> 
+	happyIn30
+		 (Let (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}}
+
+happyReduce_109 = happySpecReduce_1  24# happyReduction_109
+happyReduction_109 happy_x_1
+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
+	happyIn30
+		 (happy_var_1
+	)}
+
+happyReduce_110 = happySpecReduce_1  25# happyReduction_110
+happyReduction_110 happy_x_1
+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
+	happyIn31
+		 ([happy_var_1]
+	)}
+
+happyReduce_111 = happySpecReduce_2  25# happyReduction_111
+happyReduction_111 happy_x_2
+	happy_x_1
+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
+	case happyOut31 happy_x_2 of { happy_var_2 -> 
+	happyIn31
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_112 = happySpecReduce_1  26# happyReduction_112
+happyReduction_112 happy_x_1
+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
+	happyIn32
+		 (Ident happy_var_1
+	)}
+
+happyReduce_113 = happySpecReduce_1  26# happyReduction_113
+happyReduction_113 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
+	happyIn32
+		 (Lit happy_var_1
+	)}
+
+happyReduce_114 = happySpecReduce_1  26# happyReduction_114
+happyReduction_114 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> 
+	happyIn32
+		 (QuestionMark (getRange happy_var_1) Nothing
+	)}
+
+happyReduce_115 = happySpecReduce_1  26# happyReduction_115
+happyReduction_115 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
+	happyIn32
+		 (Underscore (getRange happy_var_1) Nothing
+	)}
+
+happyReduce_116 = happySpecReduce_1  26# happyReduction_116
+happyReduction_116 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> 
+	happyIn32
+		 (Prop (getRange happy_var_1)
+	)}
+
+happyReduce_117 = happySpecReduce_1  26# happyReduction_117
+happyReduction_117 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> 
+	happyIn32
+		 (Set (getRange happy_var_1)
+	)}
+
+happyReduce_118 = happySpecReduce_1  26# happyReduction_118
+happyReduction_118 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> 
+	happyIn32
+		 (SetN (getRange (fst happy_var_1)) (snd happy_var_1)
+	)}
+
+happyReduce_119 = happySpecReduce_3  26# happyReduction_119
+happyReduction_119 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
+	case happyOut26 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> 
+	happyIn32
+		 (HiddenArg (fuseRange happy_var_1 happy_var_3) (unnamed happy_var_2)
+	)}}}
+
+happyReduce_120 = happyReduce 5# 26# happyReduction_120
+happyReduction_120 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
+	case happyOut16 happy_x_2 of { happy_var_2 -> 
+	case happyOut26 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> 
+	happyIn32
+		 (HiddenArg (fuseRange happy_var_1 happy_var_5) (named (show happy_var_2) happy_var_4)
+	) `HappyStk` happyRest}}}}
+
+happyReduce_121 = happySpecReduce_3  26# happyReduction_121
+happyReduction_121 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
+	case happyOut26 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> 
+	happyIn32
+		 (Paren (fuseRange happy_var_1 happy_var_3) happy_var_2
+	)}}}
+
+happyReduce_122 = happySpecReduce_2  26# happyReduction_122
+happyReduction_122 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> 
+	happyIn32
+		 (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r
+	)}}
+
+happyReduce_123 = happySpecReduce_2  26# happyReduction_123
+happyReduction_123 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymCloseParen happy_var_2) -> 
+	happyIn32
+		 (Absurd (fuseRange happy_var_1 happy_var_2)
+	)}}
+
+happyReduce_124 = happySpecReduce_3  26# happyReduction_124
+happyReduction_124 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	case happyOut32 happy_x_3 of { happy_var_3 -> 
+	happyIn32
+		 (As (fuseRange happy_var_1 happy_var_3) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_125 = happySpecReduce_2  26# happyReduction_125
+happyReduction_125 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> 
+	case happyOut32 happy_x_2 of { happy_var_2 -> 
+	happyIn32
+		 (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_126 = happyReduce 4# 26# happyReduction_126
+happyReduction_126 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
+	case happyOut33 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
+	happyIn32
+		 (Rec (getRange (happy_var_1,happy_var_4)) happy_var_3
+	) `HappyStk` happyRest}}}
+
+happyReduce_127 = happySpecReduce_0  27# happyReduction_127
+happyReduction_127  =  happyIn33
+		 ([]
+	)
+
+happyReduce_128 = happySpecReduce_1  27# happyReduction_128
+happyReduction_128 happy_x_1
+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
+	happyIn33
+		 (happy_var_1
+	)}
+
+happyReduce_129 = happySpecReduce_1  28# happyReduction_129
+happyReduction_129 happy_x_1
+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
+	happyIn34
+		 ([happy_var_1]
+	)}
+
+happyReduce_130 = happySpecReduce_3  28# happyReduction_130
+happyReduction_130 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
+	case happyOut34 happy_x_3 of { happy_var_3 -> 
+	happyIn34
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_131 = happySpecReduce_3  29# happyReduction_131
+happyReduction_131 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	case happyOut26 happy_x_3 of { happy_var_3 -> 
+	happyIn35
+		 ((happy_var_1, happy_var_3)
+	)}}
+
+happyReduce_132 = happySpecReduce_2  30# happyReduction_132
+happyReduction_132 happy_x_2
+	happy_x_1
+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
+	happyIn36
+		 (happy_var_1
+	)}
+
+happyReduce_133 = happySpecReduce_1  31# happyReduction_133
+happyReduction_133 happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	happyIn37
+		 ({-TeleBind-} happy_var_1
+	)}
+
+happyReduce_134 = happySpecReduce_2  32# happyReduction_134
+happyReduction_134 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	case happyOut38 happy_x_2 of { happy_var_2 -> 
+	happyIn38
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_135 = happySpecReduce_1  32# happyReduction_135
+happyReduction_135 happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	happyIn38
+		 ([happy_var_1]
+	)}
+
+happyReduce_136 = happySpecReduce_3  33# happyReduction_136
+happyReduction_136 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
+	case happyOut40 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> 
+	happyIn39
+		 (TypedBindings (fuseRange happy_var_1 happy_var_3) NotHidden happy_var_2
+	)}}}
+
+happyReduce_137 = happySpecReduce_3  33# happyReduction_137
+happyReduction_137 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
+	case happyOut40 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> 
+	happyIn39
+		 (TypedBindings (fuseRange happy_var_1 happy_var_3) Hidden    happy_var_2
+	)}}}
+
+happyReduce_138 = happySpecReduce_1  34# happyReduction_138
+happyReduction_138 happy_x_1
+	 =  case happyOut42 happy_x_1 of { happy_var_1 -> 
+	happyIn40
+		 ([happy_var_1]
+	)}
+
+happyReduce_139 = happySpecReduce_3  34# happyReduction_139
+happyReduction_139 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut42 happy_x_1 of { happy_var_1 -> 
+	case happyOut41 happy_x_3 of { happy_var_3 -> 
+	happyIn40
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_140 = happySpecReduce_1  35# happyReduction_140
+happyReduction_140 happy_x_1
+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
+	happyIn41
+		 (happy_var_1
+	)}
+
+happyReduce_141 = happySpecReduce_3  35# happyReduction_141
+happyReduction_141 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut26 happy_x_1 of { happy_var_1 -> 
+	case happyOut41 happy_x_3 of { happy_var_3 -> 
+	happyIn41
+		 (TNoBind happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_142 = happySpecReduce_1  35# happyReduction_142
+happyReduction_142 happy_x_1
+	 =  case happyOut26 happy_x_1 of { happy_var_1 -> 
+	happyIn41
+		 ([TNoBind happy_var_1]
+	)}
+
+happyReduce_143 = happySpecReduce_3  36# happyReduction_143
+happyReduction_143 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> 
+	case happyOut26 happy_x_3 of { happy_var_3 -> 
+	happyIn42
+		 (TBind (fuseRange happy_var_1 happy_var_3) (map mkBoundName_ happy_var_1) happy_var_3
+	)}}
+
+happyReduce_144 = happyMonadReduce 2# 37# happyReduction_144
+happyReduction_144 (happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut45 happy_x_1 of { happy_var_1 -> 
+	(
+      case last happy_var_1 of
+        Left _  -> parseError "Absurd lambda cannot have a body."
+        _       -> return [ b | Right b <- happy_var_1 ])}
+	) (\r -> happyReturn (happyIn43 r))
+
+happyReduce_145 = happyMonadReduce 1# 38# happyReduction_145
+happyReduction_145 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut45 happy_x_1 of { happy_var_1 -> 
+	(
+    case last happy_var_1 of
+      Right _ -> parseError "Missing body for lambda"
+      Left h  -> return ([ b | Right b <- init happy_var_1], h))}
+	) (\r -> happyReturn (happyIn44 r))
+
+happyReduce_146 = happySpecReduce_2  39# happyReduction_146
+happyReduction_146 happy_x_2
+	happy_x_1
+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> 
+	case happyOut45 happy_x_2 of { happy_var_2 -> 
+	happyIn45
+		 (map Right happy_var_1 ++ happy_var_2
+	)}}
+
+happyReduce_147 = happySpecReduce_2  39# happyReduction_147
+happyReduction_147 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	case happyOut45 happy_x_2 of { happy_var_2 -> 
+	happyIn45
+		 (Right (DomainFull happy_var_1) : happy_var_2
+	)}}
+
+happyReduce_148 = happySpecReduce_1  39# happyReduction_148
+happyReduction_148 happy_x_1
+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> 
+	happyIn45
+		 (map Right happy_var_1
+	)}
+
+happyReduce_149 = happySpecReduce_1  39# happyReduction_149
+happyReduction_149 happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	happyIn45
+		 ([Right $ DomainFull happy_var_1]
+	)}
+
+happyReduce_150 = happySpecReduce_2  39# happyReduction_150
+happyReduction_150 happy_x_2
+	happy_x_1
+	 =  happyIn45
+		 ([Left NotHidden]
+	)
+
+happyReduce_151 = happySpecReduce_2  39# happyReduction_151
+happyReduction_151 happy_x_2
+	happy_x_1
+	 =  happyIn45
+		 ([Left Hidden]
+	)
+
+happyReduce_152 = happySpecReduce_2  40# happyReduction_152
+happyReduction_152 happy_x_2
+	happy_x_1
+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> 
+	case happyOut46 happy_x_2 of { happy_var_2 -> 
+	happyIn46
+		 (happy_var_1 ++ happy_var_2
+	)}}
+
+happyReduce_153 = happySpecReduce_2  40# happyReduction_153
+happyReduction_153 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	case happyOut46 happy_x_2 of { happy_var_2 -> 
+	happyIn46
+		 (DomainFull happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_154 = happySpecReduce_0  40# happyReduction_154
+happyReduction_154  =  happyIn46
+		 ([]
+	)
+
+happyReduce_155 = happySpecReduce_1  41# happyReduction_155
+happyReduction_155 happy_x_1
+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> 
+	happyIn47
+		 ([DomainFree NotHidden $ mkBoundName_ happy_var_1]
+	)}
+
+happyReduce_156 = happySpecReduce_3  41# happyReduction_156
+happyReduction_156 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut23 happy_x_2 of { happy_var_2 -> 
+	happyIn47
+		 (map (DomainFree Hidden . mkBoundName_) happy_var_2
+	)}
+
+happyReduce_157 = happySpecReduce_1  42# happyReduction_157
+happyReduction_157 happy_x_1
+	 =  case happyOut49 happy_x_1 of { happy_var_1 -> 
+	happyIn48
+		 ((Nothing, happy_var_1)
+	)}
+
+happyReduce_158 = happyMonadReduce 3# 42# happyReduction_158
+happyReduction_158 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
+	case happyOut16 happy_x_2 of { happy_var_2 -> 
+	case happyOut49 happy_x_3 of { happy_var_3 -> 
+	( isName "as" happy_var_1 >>
+                               return (Just (AsName happy_var_2 (getRange (fst happy_var_1))), happy_var_3))}}}
+	) (\r -> happyReturn (happyIn48 r))
+
+happyReduce_159 = happyMonadReduce 1# 43# happyReduction_159
+happyReduction_159 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut50 happy_x_1 of { happy_var_1 -> 
+	( verifyImportDirective happy_var_1)}
+	) (\r -> happyReturn (happyIn49 r))
+
+happyReduce_160 = happySpecReduce_2  44# happyReduction_160
+happyReduction_160 happy_x_2
+	happy_x_1
+	 =  case happyOut51 happy_x_2 of { happy_var_2 -> 
+	happyIn50
+		 (happy_var_2 { publicOpen = True }
+	)}
+
+happyReduce_161 = happySpecReduce_1  44# happyReduction_161
+happyReduction_161 happy_x_1
+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> 
+	happyIn50
+		 (happy_var_1
+	)}
+
+happyReduce_162 = happySpecReduce_2  45# happyReduction_162
+happyReduction_162 happy_x_2
+	happy_x_1
+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> 
+	case happyOut53 happy_x_2 of { happy_var_2 -> 
+	happyIn51
+		 (ImportDirective (fuseRange happy_var_1 happy_var_2) happy_var_1 happy_var_2 False
+	)}}
+
+happyReduce_163 = happySpecReduce_1  45# happyReduction_163
+happyReduction_163 happy_x_1
+	 =  case happyOut53 happy_x_1 of { happy_var_1 -> 
+	happyIn51
+		 (ImportDirective (getRange happy_var_1) (Hiding []) happy_var_1 False
+	)}
+
+happyReduce_164 = happySpecReduce_1  45# happyReduction_164
+happyReduction_164 happy_x_1
+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> 
+	happyIn51
+		 (ImportDirective (getRange happy_var_1) happy_var_1 [] False
+	)}
+
+happyReduce_165 = happySpecReduce_0  45# happyReduction_165
+happyReduction_165  =  happyIn51
+		 (ImportDirective noRange (Hiding []) [] False
+	)
+
+happyReduce_166 = happyReduce 4# 46# happyReduction_166
+happyReduction_166 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut58 happy_x_3 of { happy_var_3 -> 
+	happyIn52
+		 (Using happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_167 = happyReduce 4# 46# happyReduction_167
+happyReduction_167 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut59 happy_x_3 of { happy_var_3 -> 
+	happyIn52
+		 (Hiding happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_168 = happyReduce 4# 47# happyReduction_168
+happyReduction_168 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut54 happy_x_3 of { happy_var_3 -> 
+	happyIn53
+		 (happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_169 = happySpecReduce_3  48# happyReduction_169
+happyReduction_169 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut55 happy_x_1 of { happy_var_1 -> 
+	case happyOut54 happy_x_3 of { happy_var_3 -> 
+	happyIn54
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_170 = happySpecReduce_1  48# happyReduction_170
+happyReduction_170 happy_x_1
+	 =  case happyOut55 happy_x_1 of { happy_var_1 -> 
+	happyIn54
+		 ([happy_var_1]
+	)}
+
+happyReduce_171 = happySpecReduce_3  49# happyReduction_171
+happyReduction_171 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut56 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwTo happy_var_2) -> 
+	case happyOut16 happy_x_3 of { happy_var_3 -> 
+	happyIn55
+		 (Renaming happy_var_1 happy_var_3 (getRange happy_var_2)
+	)}}}
+
+happyReduce_172 = happySpecReduce_2  50# happyReduction_172
+happyReduction_172 happy_x_2
+	happy_x_1
+	 =  case happyOut16 happy_x_2 of { happy_var_2 -> 
+	happyIn56
+		 (ImportedName happy_var_2
+	)}
+
+happyReduce_173 = happySpecReduce_3  50# happyReduction_173
+happyReduction_173 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut16 happy_x_3 of { happy_var_3 -> 
+	happyIn56
+		 (ImportedModule happy_var_3
+	)}
+
+happyReduce_174 = happySpecReduce_1  51# happyReduction_174
+happyReduction_174 happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	happyIn57
+		 (ImportedName happy_var_1
+	)}
+
+happyReduce_175 = happySpecReduce_2  51# happyReduction_175
+happyReduction_175 happy_x_2
+	happy_x_1
+	 =  case happyOut16 happy_x_2 of { happy_var_2 -> 
+	happyIn57
+		 (ImportedModule happy_var_2
+	)}
+
+happyReduce_176 = happySpecReduce_0  52# happyReduction_176
+happyReduction_176  =  happyIn58
+		 ([]
+	)
+
+happyReduce_177 = happySpecReduce_1  52# happyReduction_177
+happyReduction_177 happy_x_1
+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> 
+	happyIn58
+		 (happy_var_1
+	)}
+
+happyReduce_178 = happySpecReduce_1  53# happyReduction_178
+happyReduction_178 happy_x_1
+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
+	happyIn59
+		 ([happy_var_1]
+	)}
+
+happyReduce_179 = happySpecReduce_3  53# happyReduction_179
+happyReduction_179 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
+	case happyOut59 happy_x_3 of { happy_var_3 -> 
+	happyIn59
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_180 = happyMonadReduce 3# 54# happyReduction_180
+happyReduction_180 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut27 happy_x_1 of { happy_var_1 -> 
+	case happyOut63 happy_x_2 of { happy_var_2 -> 
+	case happyOut62 happy_x_3 of { happy_var_3 -> 
+	( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2 happy_var_3))}}}
+	) (\r -> happyReturn (happyIn60 r))
+
+happyReduce_181 = happyReduce 4# 54# happyReduction_181
+happyReduction_181 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> 
+	case happyOut61 happy_x_2 of { happy_var_2 -> 
+	case happyOut63 happy_x_3 of { happy_var_3 -> 
+	case happyOut62 happy_x_4 of { happy_var_4 -> 
+	happyIn60
+		 (Ellipsis (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}}}
+
+happyReduce_182 = happySpecReduce_0  55# happyReduction_182
+happyReduction_182  =  happyIn61
+		 ([]
+	)
+
+happyReduce_183 = happyMonadReduce 3# 55# happyReduction_183
+happyReduction_183 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut31 happy_x_2 of { happy_var_2 -> 
+	case happyOut61 happy_x_3 of { happy_var_3 -> 
+	( exprToPattern (RawApp (getRange happy_var_2) happy_var_2) >>= \p ->
+		   return (p : happy_var_3))}}
+	) (\r -> happyReturn (happyIn61 r))
+
+happyReduce_184 = happySpecReduce_0  56# happyReduction_184
+happyReduction_184  =  happyIn62
+		 ([]
+	)
+
+happyReduce_185 = happySpecReduce_2  56# happyReduction_185
+happyReduction_185 happy_x_2
+	happy_x_1
+	 =  case happyOut26 happy_x_2 of { happy_var_2 -> 
+	happyIn62
+		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }
+	)}
+
+happyReduce_186 = happySpecReduce_0  57# happyReduction_186
+happyReduction_186  =  happyIn63
+		 ([]
+	)
+
+happyReduce_187 = happySpecReduce_2  57# happyReduction_187
+happyReduction_187 happy_x_2
+	happy_x_1
+	 =  case happyOut26 happy_x_2 of { happy_var_2 -> 
+	happyIn63
+		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }
+	)}
+
+happyReduce_188 = happySpecReduce_0  58# happyReduction_188
+happyReduction_188  =  happyIn64
+		 (NoWhere
+	)
+
+happyReduce_189 = happySpecReduce_2  58# happyReduction_189
+happyReduction_189 happy_x_2
+	happy_x_1
+	 =  case happyOut104 happy_x_2 of { happy_var_2 -> 
+	happyIn64
+		 (AnyWhere happy_var_2
+	)}
+
+happyReduce_190 = happyReduce 4# 58# happyReduction_190
+happyReduction_190 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut16 happy_x_2 of { happy_var_2 -> 
+	case happyOut104 happy_x_4 of { happy_var_4 -> 
+	happyIn64
+		 (SomeWhere happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_191 = happySpecReduce_1  59# happyReduction_191
+happyReduction_191 happy_x_1
+	 =  case happyOut66 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_192 = happySpecReduce_1  59# happyReduction_192
+happyReduction_192 happy_x_1
+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 (happy_var_1
+	)}
+
+happyReduce_193 = happySpecReduce_1  59# happyReduction_193
+happyReduction_193 happy_x_1
+	 =  case happyOut69 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_194 = happySpecReduce_1  59# happyReduction_194
+happyReduction_194 happy_x_1
+	 =  case happyOut71 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_195 = happySpecReduce_1  59# happyReduction_195
+happyReduction_195 happy_x_1
+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_196 = happySpecReduce_1  59# happyReduction_196
+happyReduction_196 happy_x_1
+	 =  case happyOut74 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_197 = happySpecReduce_1  59# happyReduction_197
+happyReduction_197 happy_x_1
+	 =  case happyOut76 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_198 = happySpecReduce_1  59# happyReduction_198
+happyReduction_198 happy_x_1
+	 =  case happyOut77 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_199 = happySpecReduce_1  59# happyReduction_199
+happyReduction_199 happy_x_1
+	 =  case happyOut78 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_200 = happySpecReduce_1  59# happyReduction_200
+happyReduction_200 happy_x_1
+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_201 = happySpecReduce_1  59# happyReduction_201
+happyReduction_201 happy_x_1
+	 =  case happyOut80 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_202 = happySpecReduce_1  59# happyReduction_202
+happyReduction_202 happy_x_1
+	 =  case happyOut81 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_203 = happySpecReduce_1  59# happyReduction_203
+happyReduction_203 happy_x_1
+	 =  case happyOut84 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_204 = happySpecReduce_1  59# happyReduction_204
+happyReduction_204 happy_x_1
+	 =  case happyOut83 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_205 = happySpecReduce_1  59# happyReduction_205
+happyReduction_205 happy_x_1
+	 =  case happyOut85 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_206 = happySpecReduce_1  59# happyReduction_206
+happyReduction_206 happy_x_1
+	 =  case happyOut88 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_207 = happySpecReduce_3  60# happyReduction_207
+happyReduction_207 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	case happyOut26 happy_x_3 of { happy_var_3 -> 
+	happyIn66
+		 (TypeSig happy_var_1 happy_var_3
+	)}}
+
+happyReduce_208 = happySpecReduce_3  61# happyReduction_208
+happyReduction_208 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut17 happy_x_1 of { happy_var_1 -> 
+	case happyOut26 happy_x_3 of { happy_var_3 -> 
+	happyIn67
+		 (map (flip TypeSig happy_var_3) happy_var_1
+	)}}
+
+happyReduce_209 = happySpecReduce_3  62# happyReduction_209
+happyReduction_209 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> 
+	case happyOut26 happy_x_3 of { happy_var_3 -> 
+	happyIn68
+		 (map (id *** flip TypeSig happy_var_3) happy_var_1
+	)}}
+
+happyReduce_210 = happySpecReduce_3  63# happyReduction_210
+happyReduction_210 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut60 happy_x_1 of { happy_var_1 -> 
+	case happyOut70 happy_x_2 of { happy_var_2 -> 
+	case happyOut64 happy_x_3 of { happy_var_3 -> 
+	happyIn69
+		 (FunClause happy_var_1 happy_var_2 happy_var_3
+	)}}}
+
+happyReduce_211 = happySpecReduce_2  64# happyReduction_211
+happyReduction_211 happy_x_2
+	happy_x_1
+	 =  case happyOut26 happy_x_2 of { happy_var_2 -> 
+	happyIn70
+		 (RHS happy_var_2
+	)}
+
+happyReduce_212 = happySpecReduce_0  64# happyReduction_212
+happyReduction_212  =  happyIn70
+		 (AbsurdRHS
+	)
+
+happyReduce_213 = happyReduce 7# 65# happyReduction_213
+happyReduction_213 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
+	case happyOut16 happy_x_2 of { happy_var_2 -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	case happyOut26 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
+	case happyOut102 happy_x_7 of { happy_var_7 -> 
+	happyIn71
+		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) Inductive happy_var_2 (map addType happy_var_3) happy_var_5 happy_var_7
+	) `HappyStk` happyRest}}}}}}
+
+happyReduce_214 = happyReduce 7# 65# happyReduction_214
+happyReduction_214 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> 
+	case happyOut16 happy_x_2 of { happy_var_2 -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	case happyOut26 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
+	case happyOut102 happy_x_7 of { happy_var_7 -> 
+	happyIn71
+		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) CoInductive happy_var_2 (map addType happy_var_3) happy_var_5 happy_var_7
+	) `HappyStk` happyRest}}}}}}
+
+happyReduce_215 = happyReduce 7# 66# happyReduction_215
+happyReduction_215 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
+	case happyOut16 happy_x_2 of { happy_var_2 -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	case happyOut26 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
+	case happyOut103 happy_x_7 of { happy_var_7 -> 
+	happyIn72
+		 (Record (getRange (happy_var_1, happy_var_6, happy_var_7)) happy_var_2 (fst happy_var_7) (map addType happy_var_3) happy_var_5 (snd happy_var_7)
+	) `HappyStk` happyRest}}}}}}
+
+happyReduce_216 = happySpecReduce_2  67# happyReduction_216
+happyReduction_216 happy_x_2
+	happy_x_1
+	 =  case happyOut16 happy_x_2 of { happy_var_2 -> 
+	happyIn73
+		 (happy_var_2
+	)}
+
+happyReduce_217 = happySpecReduce_3  68# happyReduction_217
+happyReduction_217 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> 
+	case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOut22 happy_x_3 of { happy_var_3 -> 
+	happyIn74
+		 (Infix (NonAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3
+	)}}}
+
+happyReduce_218 = happySpecReduce_3  68# happyReduction_218
+happyReduction_218 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> 
+	case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOut22 happy_x_3 of { happy_var_3 -> 
+	happyIn74
+		 (Infix (LeftAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3
+	)}}}
+
+happyReduce_219 = happySpecReduce_3  68# happyReduction_219
+happyReduction_219 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> 
+	case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOut22 happy_x_3 of { happy_var_3 -> 
+	happyIn74
+		 (Infix (RightAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3
+	)}}}
+
+happyReduce_220 = happySpecReduce_2  69# happyReduction_220
+happyReduction_220 happy_x_2
+	happy_x_1
+	 =  case happyOut100 happy_x_2 of { happy_var_2 -> 
+	happyIn75
+		 (let toField (h, TypeSig x t) = Field h x t in map toField happy_var_2
+	)}
+
+happyReduce_221 = happySpecReduce_2  70# happyReduction_221
+happyReduction_221 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> 
+	case happyOut104 happy_x_2 of { happy_var_2 -> 
+	happyIn76
+		 (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_222 = happySpecReduce_2  71# happyReduction_222
+happyReduction_222 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> 
+	case happyOut104 happy_x_2 of { happy_var_2 -> 
+	happyIn77
+		 (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_223 = happySpecReduce_2  72# happyReduction_223
+happyReduction_223 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> 
+	case happyOut104 happy_x_2 of { happy_var_2 -> 
+	happyIn78
+		 (Private (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_224 = happySpecReduce_2  73# happyReduction_224
+happyReduction_224 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> 
+	case happyOut98 happy_x_2 of { happy_var_2 -> 
+	happyIn79
+		 (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_225 = happySpecReduce_2  74# happyReduction_225
+happyReduction_225 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> 
+	case happyOut98 happy_x_2 of { happy_var_2 -> 
+	happyIn80
+		 (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_226 = happyReduce 4# 75# happyReduction_226
+happyReduction_226 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
+	case happyOut20 happy_x_2 of { happy_var_2 -> 
+	case happyOut82 happy_x_3 of { happy_var_3 -> 
+	case happyOut49 happy_x_4 of { happy_var_4 -> 
+	happyIn81
+		 (let
+    { m   = happy_var_2
+    ; es  = happy_var_3
+    ; dir = happy_var_4
+    ; r   = getRange (happy_var_1, m, dir)
+    } in
+    case es of
+    { []  -> Open r m dir
+    ; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2) []
+                           (RawApp (fuseRange m es) (Ident m : es)) DoOpen dir
+                       ]
+    }
+	) `HappyStk` happyRest}}}}
+
+happyReduce_227 = happySpecReduce_0  76# happyReduction_227
+happyReduction_227  =  happyIn82
+		 ([]
+	)
+
+happyReduce_228 = happySpecReduce_2  76# happyReduction_228
+happyReduction_228 happy_x_2
+	happy_x_1
+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
+	case happyOut82 happy_x_2 of { happy_var_2 -> 
+	happyIn82
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_229 = happyReduce 6# 77# happyReduction_229
+happyReduction_229 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
+	case happyOut16 happy_x_2 of { happy_var_2 -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	case happyOut26 happy_x_5 of { happy_var_5 -> 
+	case happyOut49 happy_x_6 of { happy_var_6 -> 
+	happyIn83
+		 (ModuleMacro (getRange (happy_var_1, happy_var_5, happy_var_6)) happy_var_2 (map addType happy_var_3) happy_var_5 DontOpen happy_var_6
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_230 = happyReduce 7# 77# happyReduction_230
+happyReduction_230 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
+	case happyOut16 happy_x_3 of { happy_var_3 -> 
+	case happyOut46 happy_x_4 of { happy_var_4 -> 
+	case happyOut26 happy_x_6 of { happy_var_6 -> 
+	case happyOut49 happy_x_7 of { happy_var_7 -> 
+	happyIn83
+		 (ModuleMacro (getRange (happy_var_1, happy_var_6, happy_var_7)) happy_var_3 (map addType happy_var_4) happy_var_6 DoOpen happy_var_7
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_231 = happySpecReduce_3  78# happyReduction_231
+happyReduction_231 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> 
+	case happyOut20 happy_x_2 of { happy_var_2 -> 
+	case happyOut48 happy_x_3 of { happy_var_3 -> 
+	happyIn84
+		 (Import (getRange (happy_var_1,happy_var_2,snd happy_var_3)) happy_var_2 (fst happy_var_3) DontOpen (snd happy_var_3)
+	)}}}
+
+happyReduce_232 = happyReduce 4# 78# happyReduction_232
+happyReduction_232 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
+	case happyOut20 happy_x_3 of { happy_var_3 -> 
+	case happyOut48 happy_x_4 of { happy_var_4 -> 
+	happyIn84
+		 (Import (getRange (happy_var_1,happy_var_3,snd happy_var_4)) happy_var_3 (fst happy_var_4) DoOpen (snd happy_var_4)
+	) `HappyStk` happyRest}}}
+
+happyReduce_233 = happyReduce 5# 79# happyReduction_233
+happyReduction_233 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
+	case happyOut16 happy_x_2 of { happy_var_2 -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
+	case happyOut105 happy_x_5 of { happy_var_5 -> 
+	happyIn85
+		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_234 = happySpecReduce_2  80# happyReduction_234
+happyReduction_234 happy_x_2
+	happy_x_1
+	 =  case happyOut87 happy_x_2 of { happy_var_2 -> 
+	happyIn86
+		 ([happy_var_2]
+	)}
+
+happyReduce_235 = happySpecReduce_3  80# happyReduction_235
+happyReduction_235 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut84 happy_x_2 of { happy_var_2 -> 
+	case happyOut86 happy_x_3 of { happy_var_3 -> 
+	happyIn86
+		 (happy_var_2 : happy_var_3
+	)}}
+
+happyReduce_236 = happySpecReduce_3  80# happyReduction_236
+happyReduction_236 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut81 happy_x_2 of { happy_var_2 -> 
+	case happyOut86 happy_x_3 of { happy_var_3 -> 
+	happyIn86
+		 (happy_var_2 : happy_var_3
+	)}}
+
+happyReduce_237 = happyReduce 5# 81# happyReduction_237
+happyReduction_237 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
+	case happyOut20 happy_x_2 of { happy_var_2 -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
+	case happyOut105 happy_x_5 of { happy_var_5 -> 
+	happyIn87
+		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) happy_var_2 (map addType happy_var_3) happy_var_5
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_238 = happySpecReduce_1  82# happyReduction_238
+happyReduction_238 happy_x_1
+	 =  case happyOut90 happy_x_1 of { happy_var_1 -> 
+	happyIn88
+		 (Pragma happy_var_1
+	)}
+
+happyReduce_239 = happySpecReduce_1  83# happyReduction_239
+happyReduction_239 happy_x_1
+	 =  case happyOut91 happy_x_1 of { happy_var_1 -> 
+	happyIn89
+		 (happy_var_1
+	)}
+
+happyReduce_240 = happySpecReduce_1  84# happyReduction_240
+happyReduction_240 happy_x_1
+	 =  case happyOut92 happy_x_1 of { happy_var_1 -> 
+	happyIn90
+		 (happy_var_1
+	)}
+
+happyReduce_241 = happySpecReduce_1  84# happyReduction_241
+happyReduction_241 happy_x_1
+	 =  case happyOut93 happy_x_1 of { happy_var_1 -> 
+	happyIn90
+		 (happy_var_1
+	)}
+
+happyReduce_242 = happySpecReduce_1  84# happyReduction_242
+happyReduction_242 happy_x_1
+	 =  case happyOut95 happy_x_1 of { happy_var_1 -> 
+	happyIn90
+		 (happy_var_1
+	)}
+
+happyReduce_243 = happySpecReduce_1  84# happyReduction_243
+happyReduction_243 happy_x_1
+	 =  case happyOut94 happy_x_1 of { happy_var_1 -> 
+	happyIn90
+		 (happy_var_1
+	)}
+
+happyReduce_244 = happySpecReduce_1  84# happyReduction_244
+happyReduction_244 happy_x_1
+	 =  case happyOut96 happy_x_1 of { happy_var_1 -> 
+	happyIn90
+		 (happy_var_1
+	)}
+
+happyReduce_245 = happySpecReduce_1  84# happyReduction_245
+happyReduction_245 happy_x_1
+	 =  case happyOut97 happy_x_1 of { happy_var_1 -> 
+	happyIn90
+		 (happy_var_1
+	)}
+
+happyReduce_246 = happyReduce 4# 85# happyReduction_246
+happyReduction_246 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOut24 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	happyIn91
+		 (OptionsPragma (fuseRange happy_var_1 happy_var_4) happy_var_3
+	) `HappyStk` happyRest}}}
+
+happyReduce_247 = happyReduce 5# 86# happyReduction_247
+happyReduction_247 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> 
+	case happyOut25 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn92
+		 (BuiltinPragma (fuseRange happy_var_1 happy_var_5) (snd happy_var_3) (Ident happy_var_4)
+	) `HappyStk` happyRest}}}}
+
+happyReduce_248 = happyReduce 5# 87# happyReduction_248
+happyReduction_248 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOut25 happy_x_3 of { happy_var_3 -> 
+	case happyOut24 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn93
+		 (CompiledPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)
+	) `HappyStk` happyRest}}}}
+
+happyReduce_249 = happyReduce 5# 88# happyReduction_249
+happyReduction_249 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOut25 happy_x_3 of { happy_var_3 -> 
+	case happyOut24 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn94
+		 (CompiledTypePragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)
+	) `HappyStk` happyRest}}}}
+
+happyReduce_250 = happyReduce 6# 89# happyReduction_250
+happyReduction_250 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOut25 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> 
+	case happyOut24 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> 
+	happyIn95
+		 (CompiledDataPragma (fuseRange happy_var_1 happy_var_6) happy_var_3 (snd happy_var_4) happy_var_5
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_251 = happyMonadReduce 4# 90# happyReduction_251
+happyReduction_251 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	( let s = snd happy_var_3 in
+       if validHaskellModuleName s
+       then return $ ImportPragma (fuseRange happy_var_1 happy_var_4) s
+       else parseError $ "Malformed module name: " ++ s ++ ".")}}}
+	) (\r -> happyReturn (happyIn96 r))
+
+happyReduce_252 = happySpecReduce_3  91# happyReduction_252
+happyReduction_252 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> 
+	happyIn97
+		 (ImpossiblePragma (fuseRange happy_var_1 happy_var_3)
+	)}}
+
+happyReduce_253 = happyReduce 5# 92# happyReduction_253
+happyReduction_253 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut99 happy_x_3 of { happy_var_3 -> 
+	happyIn98
+		 (reverse happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_254 = happyReduce 4# 93# happyReduction_254
+happyReduction_254 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut99 happy_x_1 of { happy_var_1 -> 
+	case happyOut67 happy_x_4 of { happy_var_4 -> 
+	happyIn99
+		 (reverse happy_var_4 ++ happy_var_1
+	) `HappyStk` happyRest}}
+
+happyReduce_255 = happySpecReduce_2  93# happyReduction_255
+happyReduction_255 happy_x_2
+	happy_x_1
+	 =  case happyOut67 happy_x_2 of { happy_var_2 -> 
+	happyIn99
+		 (reverse happy_var_2
+	)}
+
+happyReduce_256 = happyReduce 5# 94# happyReduction_256
+happyReduction_256 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut101 happy_x_3 of { happy_var_3 -> 
+	happyIn100
+		 (reverse happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_257 = happyReduce 4# 95# happyReduction_257
+happyReduction_257 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut101 happy_x_1 of { happy_var_1 -> 
+	case happyOut68 happy_x_4 of { happy_var_4 -> 
+	happyIn101
+		 (reverse happy_var_4 ++ happy_var_1
+	) `HappyStk` happyRest}}
+
+happyReduce_258 = happySpecReduce_2  95# happyReduction_258
+happyReduction_258 happy_x_2
+	happy_x_1
+	 =  case happyOut68 happy_x_2 of { happy_var_2 -> 
+	happyIn101
+		 (reverse happy_var_2
+	)}
+
+happyReduce_259 = happyReduce 4# 96# happyReduction_259
+happyReduction_259 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = happyIn102
+		 ([]
+	) `HappyStk` happyRest
+
+happyReduce_260 = happySpecReduce_1  96# happyReduction_260
+happyReduction_260 happy_x_1
+	 =  case happyOut98 happy_x_1 of { happy_var_1 -> 
+	happyIn102
+		 (happy_var_1
+	)}
+
+happyReduce_261 = happyReduce 4# 97# happyReduction_261
+happyReduction_261 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = happyIn103
+		 ((Nothing, [])
+	) `HappyStk` happyRest
+
+happyReduce_262 = happyReduce 6# 97# happyReduction_262
+happyReduction_262 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut73 happy_x_4 of { happy_var_4 -> 
+	happyIn103
+		 ((Just happy_var_4, [])
+	) `HappyStk` happyRest}
+
+happyReduce_263 = happyReduce 8# 97# happyReduction_263
+happyReduction_263 (happy_x_8 `HappyStk`
+	happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut73 happy_x_4 of { happy_var_4 -> 
+	case happyOut106 happy_x_6 of { happy_var_6 -> 
+	happyIn103
+		 ((Just happy_var_4, reverse happy_var_6)
+	) `HappyStk` happyRest}}
+
+happyReduce_264 = happyReduce 5# 97# happyReduction_264
+happyReduction_264 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut106 happy_x_3 of { happy_var_3 -> 
+	happyIn103
+		 ((Nothing, reverse happy_var_3)
+	) `HappyStk` happyRest}
+
+happyReduce_265 = happyReduce 5# 98# happyReduction_265
+happyReduction_265 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut106 happy_x_3 of { happy_var_3 -> 
+	happyIn104
+		 (reverse happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_266 = happyReduce 4# 99# happyReduction_266
+happyReduction_266 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = happyIn105
+		 ([]
+	) `HappyStk` happyRest
+
+happyReduce_267 = happySpecReduce_1  99# happyReduction_267
+happyReduction_267 happy_x_1
+	 =  case happyOut104 happy_x_1 of { happy_var_1 -> 
+	happyIn105
+		 (happy_var_1
+	)}
+
+happyReduce_268 = happyReduce 4# 100# happyReduction_268
+happyReduction_268 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut106 happy_x_1 of { happy_var_1 -> 
+	case happyOut65 happy_x_4 of { happy_var_4 -> 
+	happyIn106
+		 (reverse happy_var_4 ++ happy_var_1
+	) `HappyStk` happyRest}}
+
+happyReduce_269 = happySpecReduce_2  100# happyReduction_269
+happyReduction_269 happy_x_2
+	happy_x_1
+	 =  case happyOut65 happy_x_2 of { happy_var_2 -> 
+	happyIn106
+		 (reverse happy_var_2
+	)}
+
+happyNewToken action sts stk
+	= lexer(\tk -> 
+	let cont i = happyDoAction i tk action sts stk in
+	case tk of {
+	TokEOF -> happyDoAction 64# tk action sts stk;
+	TokKeyword KwLet happy_dollar_dollar -> cont 1#;
+	TokKeyword KwIn happy_dollar_dollar -> cont 2#;
+	TokKeyword KwWhere happy_dollar_dollar -> cont 3#;
+	TokKeyword KwWith happy_dollar_dollar -> cont 4#;
+	TokKeyword KwRewrite happy_dollar_dollar -> cont 5#;
+	TokKeyword KwPostulate happy_dollar_dollar -> cont 6#;
+	TokKeyword KwPrimitive happy_dollar_dollar -> cont 7#;
+	TokKeyword KwOpen happy_dollar_dollar -> cont 8#;
+	TokKeyword KwImport happy_dollar_dollar -> cont 9#;
+	TokKeyword KwUsing happy_dollar_dollar -> cont 10#;
+	TokKeyword KwHiding happy_dollar_dollar -> cont 11#;
+	TokKeyword KwRenaming happy_dollar_dollar -> cont 12#;
+	TokKeyword KwTo happy_dollar_dollar -> cont 13#;
+	TokKeyword KwPublic happy_dollar_dollar -> cont 14#;
+	TokKeyword KwModule happy_dollar_dollar -> cont 15#;
+	TokKeyword KwData happy_dollar_dollar -> cont 16#;
+	TokKeyword KwCoData happy_dollar_dollar -> cont 17#;
+	TokKeyword KwRecord happy_dollar_dollar -> cont 18#;
+	TokKeyword KwConstructor happy_dollar_dollar -> cont 19#;
+	TokKeyword KwField happy_dollar_dollar -> cont 20#;
+	TokKeyword KwInfix happy_dollar_dollar -> cont 21#;
+	TokKeyword KwInfixL happy_dollar_dollar -> cont 22#;
+	TokKeyword KwInfixR happy_dollar_dollar -> cont 23#;
+	TokKeyword KwMutual happy_dollar_dollar -> cont 24#;
+	TokKeyword KwAbstract happy_dollar_dollar -> cont 25#;
+	TokKeyword KwPrivate happy_dollar_dollar -> cont 26#;
+	TokKeyword KwProp happy_dollar_dollar -> cont 27#;
+	TokKeyword KwSet happy_dollar_dollar -> cont 28#;
+	TokKeyword KwForall happy_dollar_dollar -> cont 29#;
+	TokKeyword KwOPTIONS happy_dollar_dollar -> cont 30#;
+	TokKeyword KwBUILTIN happy_dollar_dollar -> cont 31#;
+	TokKeyword KwIMPORT happy_dollar_dollar -> cont 32#;
+	TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 33#;
+	TokKeyword KwCOMPILED happy_dollar_dollar -> cont 34#;
+	TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 35#;
+	TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 36#;
+	TokSetN happy_dollar_dollar -> cont 37#;
+	TokTeX happy_dollar_dollar -> cont 38#;
+	TokComment happy_dollar_dollar -> cont 39#;
+	TokSymbol SymEllipsis happy_dollar_dollar -> cont 40#;
+	TokSymbol SymDot happy_dollar_dollar -> cont 41#;
+	TokSymbol SymSemi happy_dollar_dollar -> cont 42#;
+	TokSymbol SymColon happy_dollar_dollar -> cont 43#;
+	TokSymbol SymEqual happy_dollar_dollar -> cont 44#;
+	TokSymbol SymUnderscore happy_dollar_dollar -> cont 45#;
+	TokSymbol SymQuestionMark happy_dollar_dollar -> cont 46#;
+	TokSymbol SymArrow happy_dollar_dollar -> cont 47#;
+	TokSymbol SymLambda happy_dollar_dollar -> cont 48#;
+	TokSymbol SymAs happy_dollar_dollar -> cont 49#;
+	TokSymbol SymBar happy_dollar_dollar -> cont 50#;
+	TokSymbol SymOpenParen happy_dollar_dollar -> cont 51#;
+	TokSymbol SymCloseParen happy_dollar_dollar -> cont 52#;
+	TokSymbol SymOpenBrace happy_dollar_dollar -> cont 53#;
+	TokSymbol SymCloseBrace happy_dollar_dollar -> cont 54#;
+	TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 55#;
+	TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 56#;
+	TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 57#;
+	TokSymbol SymOpenPragma happy_dollar_dollar -> cont 58#;
+	TokSymbol SymClosePragma happy_dollar_dollar -> cont 59#;
+	TokId happy_dollar_dollar -> cont 60#;
+	TokQId happy_dollar_dollar -> cont 61#;
+	TokString happy_dollar_dollar -> cont 62#;
+	TokLiteral happy_dollar_dollar -> cont 63#;
+	_ -> happyError' tk
+	})
+
+happyError_ tk = happyError' tk
+
+happyThen :: () => Parser a -> (a -> Parser b) -> Parser b
+happyThen = (>>=)
+happyReturn :: () => a -> Parser a
+happyReturn = (return)
+happyThen1 = happyThen
+happyReturn1 :: () => a -> Parser a
+happyReturn1 = happyReturn
+happyError' :: () => Token -> Parser a
+happyError' tk = (\token -> happyError) tk
+
+tokensParser = happySomeParser where
+  happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut6 x))
+
+exprParser = happySomeParser where
+  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut26 x))
+
+moduleParser = happySomeParser where
+  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut10 x))
+
+happySeq = happyDontSeq
+
+
+{--------------------------------------------------------------------------
+    Parsers
+ --------------------------------------------------------------------------}
+
+-- | Parse the token stream. Used by the TeX compiler.
+tokensParser :: Parser [Token]
+
+-- | Parse an expression. Could be used in interactions.
+exprParser :: Parser Expr
+
+-- | Parse a module.
+moduleParser :: Parser Module
+
+
+{--------------------------------------------------------------------------
+    Happy stuff
+ --------------------------------------------------------------------------}
+
+-- | Required by Happy.
+happyError :: Parser a
+happyError = parseError "Parse error"
+
+
+{--------------------------------------------------------------------------
+    Utility functions
+ --------------------------------------------------------------------------}
+
+-- | Create a name from a string.
+
+mkName :: (Interval, String) -> Parser Name
+mkName (i, s) = do
+    let xs = parts s
+    mapM_ isValidId xs
+    unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"
+    return $ Name (getRange i) xs
+    where
+        parts :: String -> [NamePart]
+        parts ""        = []
+        parts ('_' : s) = Hole : parts s
+        parts s         = Id x : parts s'
+          where (x, s') = break (== '_') s
+
+	isValidId Hole   = return ()
+	isValidId (Id x) = case parse defaultParseFlags [0] (lexer return) x of
+	    ParseOk _ (TokId _) -> return ()
+	    _			-> fail $ "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"
+
+	-- we know that there aren't two Ids in a row
+	alternating (Hole : Hole : _) = False
+	alternating (_ : xs)	      = alternating xs
+	alternating []		      = True
+
+-- | Create a qualified name from a list of strings
+mkQName :: [(Interval, String)] -> Parser QName
+mkQName ss = do
+    xs <- mapM mkName ss
+    return $ foldr Qual (QName $ last xs) (init xs)
+
+-- | Match a particular name.
+isName :: String -> (Interval, String) -> Parser ()
+isName s (_,s')
+    | s == s'	= return ()
+    | otherwise	= fail $ "expected " ++ s ++ ", found " ++ s'
+
+-- | Build a forall pi (forall x y z -> ...)
+forallPi :: [LamBinding] -> Expr -> Expr
+forallPi bs e = Pi (map addType bs) e
+
+-- | Converts lambda bindings to typed bindings.
+addType :: LamBinding -> TypedBindings
+addType (DomainFull b)	 = b
+addType (DomainFree h x) = TypedBindings r h [TBind r [x] $ Underscore r Nothing]
+  where r = getRange x
+
+-- | Check that an import directive doesn't contain repeated names
+verifyImportDirective :: ImportDirective -> Parser ImportDirective
+verifyImportDirective i =
+    case filter ((>1) . length)
+	 $ group
+	 $ sort xs
+    of
+	[]  -> return i
+	yss -> let Just pos = rStart $ getRange $ head $ concat yss in
+               parseErrorAt pos $
+		"repeated name" ++ s ++ " in import directive: " ++
+		concat (intersperse ", " $ map (show . head) yss)
+	    where
+		s = case yss of
+			[_] -> ""
+			_   -> "s"
+    where
+	xs = names (usingOrHiding i) ++ map renFrom (renaming i)
+	names (Using xs)    = xs
+	names (Hiding xs)   = xs
+
+-- | Breaks up a string into substrings. Returns every maximal
+-- subsequence of zero or more characters distinct from @'.'@.
+--
+-- > splitOnDots ""         == [""]
+-- > splitOnDots "foo.bar"  == ["foo", "bar"]
+-- > splitOnDots ".foo.bar" == ["", "foo", "bar"]
+-- > splitOnDots "foo.bar." == ["foo", "bar", ""]
+-- > splitOnDots "foo..bar" == ["foo", "", "bar"]
+splitOnDots :: String -> [String]
+splitOnDots ""        = [""]
+splitOnDots ('.' : s) = [] : splitOnDots s
+splitOnDots (c   : s) = case splitOnDots s of
+  p : ps -> (c : p) : ps
+
+prop_splitOnDots = and
+  [ splitOnDots ""         == [""]
+  , splitOnDots "foo.bar"  == ["foo", "bar"]
+  , splitOnDots ".foo.bar" == ["", "foo", "bar"]
+  , splitOnDots "foo.bar." == ["foo", "bar", ""]
+  , splitOnDots "foo..bar" == ["foo", "", "bar"]
+  ]
+
+-- | Returns 'True' iff the name is a valid Haskell (hierarchical)
+-- module name.
+validHaskellModuleName :: String -> Bool
+validHaskellModuleName = all ok . splitOnDots
+  where
+  -- Checks if a dot-less module name is well-formed.
+  ok :: String -> Bool
+  ok []      = False
+  ok (c : s) =
+    isUpper c &&
+    all (\c -> isLower c || c == '_' ||
+               isUpper c ||
+               generalCategory c == DecimalNumber ||
+               c == '\'')
+        s
+
+{--------------------------------------------------------------------------
+    Patterns
+ --------------------------------------------------------------------------}
+
+-- | Turn an expression into a left hand side.
+exprToLHS :: Expr -> Parser ([Expr] -> [Expr] -> LHS)
+exprToLHS e = case e of
+  WithApp r e es -> LHS <$> exprToPattern e <*> mapM exprToPattern es
+  _		 -> LHS <$> exprToPattern e <*> return []
+
+-- | Turn an expression into a pattern. Fails if the expression is not a
+--   valid pattern.
+exprToPattern :: Expr -> Parser Pattern
+exprToPattern e =
+    case e of
+	Ident x			-> return $ IdentP x
+	App _ e1 e2		-> AppP <$> exprToPattern e1
+					<*> T.mapM (T.mapM exprToPattern) e2
+	Paren r e		-> ParenP r
+					<$> exprToPattern e
+	Underscore r _		-> return $ WildP r
+	Absurd r		-> return $ AbsurdP r
+	As r x e		-> AsP r x <$> exprToPattern e
+	Dot r (HiddenArg _ e)	-> return $ HiddenP r $ fmap (DotP r) e
+	Dot r e			-> return $ DotP r e
+	Lit l			-> return $ LitP l
+	HiddenArg r e		-> HiddenP r <$> T.mapM exprToPattern e
+	RawApp r es		-> RawAppP r <$> mapM exprToPattern es
+	OpApp r x es		-> OpAppP r x <$> mapM exprToPattern es
+	_			->
+          let Just pos = rStart $ getRange e in
+          parseErrorAt pos $ "Not a valid pattern: " ++ show e
+
+{--------------------------------------------------------------------------
+    Tests
+ --------------------------------------------------------------------------}
+
+-- | Test suite.
+tests :: IO Bool
+tests = runTests "Agda.Syntax.Parser.Parser"
+  [ quickCheck' prop_splitOnDots
+  ]
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 {-# LINE 1 "<built-in>" #-}
diff --git a/doc/release-notes/2-2-6.txt b/doc/release-notes/2-2-6.txt
new file mode 100644
--- /dev/null
+++ b/doc/release-notes/2-2-6.txt
@@ -0,0 +1,257 @@
+------------------------------------------------------------------------
+-- Release notes for Agda 2 version 2.2.6
+------------------------------------------------------------------------
+
+Important changes since 2.2.4:
+
+Language
+--------
+
+* Universe polymorphism (experimental extension).
+
+  To enable universe polymorphism give the flag
+  --universe-polymorphism on the command line or (recommended) as an
+  OPTIONS pragma.
+
+  When universe polymorphism is enabled Set takes an argument which is
+  the universe level. For instance, the type of universe polymorphic
+  identity is
+
+    id : {a : Level} {A : Set a} → A → A.
+
+  The type Level is isomorphic to the unary natural numbers and should be
+  specified using the BUILTINs LEVEL, LEVELZERO, and LEVELSUC:
+
+    data Level : Set where
+      zero : Level
+      suc  : Level → Level
+
+    {-# BUILTIN LEVEL     Level #-}
+    {-# BUILTIN LEVELZERO zero  #-}
+    {-# BUILTIN LEVELSUC  suc   #-}
+
+  There is an additional BUILTIN LEVELMAX for taking the maximum of two
+  levels:
+
+    max : Level → Level → Level
+    max  zero    m      = m
+    max (suc n)  zero   = suc n
+    max (suc n) (suc m) = suc (max n m)
+
+    {-# BUILTIN LEVELMAX max #-}
+
+  The non-polymorphic universe levels Set, Set₁ and so on are sugar
+  for Set zero, Set (suc zero), etc.
+
+  At present there is no automatic lifting of types from one level to
+  another. It can still be done (rather clumsily) by defining types
+  like the following one:
+
+    data Lifted {a} (A : Set a) : Set (suc a) where
+      lift : A → Lifted A
+
+  However, it is likely that automatic lifting is introduced at some
+  point in the future.
+
+* Multiple constructors, record fields, postulates or primitives can
+  be declared using a single type signature:
+
+    data Bool : Set where
+      false true : Bool
+
+    postulate
+      A B : Set
+
+* Record fields can be implicit:
+
+    record R : Set₁ where
+      field
+        {A}         : Set
+        f           : A → A
+        {B C} D {E} : Set
+        g           : B → C → E
+
+  By default implicit fields are not printed.
+
+* Record constructors can be defined:
+
+    record Σ (A : Set) (B : A → Set) : Set where
+      constructor _,_
+      field
+        proj₁ : A
+        proj₂ : B proj₁
+
+  In this example _,_ gets the type
+
+     (proj₁ : A) → B proj₁ → Σ A B.
+
+  For implicit fields the corresponding constructor arguments become
+  implicit.
+
+  Note that the constructor is defined in the /outer/ scope, so any
+  fixity declaration has to be given outside the record definition.
+  The constructor is not in scope inside the record module.
+
+  Note also that pattern matching for records has not been implemented
+  yet.
+
+* BUILTIN hooks for equality.
+
+  The data type
+
+    data _≡_ {A : Set} (x : A) : A → Set where
+      refl : x ≡ x
+
+  can be specified as the builtin equality type using the following
+  pragmas:
+
+    {-# BUILTIN EQUALITY _≡_  #-}
+    {-# BUILTIN REFL     refl #-}
+
+  The builtin equality is used for the new rewrite construct and
+  the primTrustMe primitive described below.
+
+* New rewrite construct.
+
+  If eqn : a ≡ b, where _≡_ is the builtin equality (see above) you
+  can now write
+
+    f ps rewrite eqn = rhs
+
+  instead of
+
+    f ps with a | eqn
+    ... | ._ | refl = rhs
+
+  The rewrite construct has the effect of rewriting the goal and the
+  context by the given equation (left to right).
+
+  You can rewrite using several equations (in sequence) by separating
+  them with vertical bars (|):
+
+    f ps rewrite eqn₁ | eqn₂ | … = rhs
+
+  It is also possible to add with clauses after rewriting:
+
+    f ps rewrite eqns with e
+    ... | p = rhs
+
+  Note that pattern matching happens before rewriting—if you want to
+  rewrite and then do pattern matching you can use a with after the
+  rewrite.
+
+  See test/succeed/Rewrite.agda for some examples.
+
+* A new primitive, primTrustMe, has been added:
+
+    primTrustMe : {A : Set} {x y : A} → x ≡ y
+
+  Here _≡_ is the builtin equality (see BUILTIN hooks for equality,
+  above).
+
+  If x and y are definitionally equal, then
+  primTrustMe {x = x} {y = y} reduces to refl.
+
+  Note that the compiler replaces all uses of primTrustMe with the
+  REFL builtin, without any check for definitional equality. Incorrect
+  uses of primTrustMe can potentially lead to segfaults or similar
+  problems.
+
+  For an example of the use of primTrustMe, see Data.String in version
+  0.3 of the standard library, where it is used to implement decidable
+  equality on strings using the primitive boolean equality.
+
+* Changes to the syntax and semantics of IMPORT pragmas, which are
+  used by the Haskell FFI. Such pragmas must now have the following
+  form:
+
+    {-# IMPORT <module name> #-}
+
+  These pragmas are interpreted as /qualified/ imports, so Haskell
+  names need to be given qualified (unless they come from the Haskell
+  prelude).
+
+* The horizontal tab character (U+0009) is no longer treated as white
+  space.
+
+* Line pragmas are no longer supported.
+
+* The --include-path flag can no longer be used as a pragma.
+
+* The experimental and incomplete support for proof irrelevance has
+  been disabled.
+
+Tools
+-----
+
+* New "intro" command in the Emacs mode. When there is a canonical way
+  of building something of the goal type (for instance, if the goal
+  type is a pair), the goal can be refined in this way. The command
+  works for the following goal types:
+
+    - A data type where only one of its constructors can be used to
+      construct an element of the goal type. (For instance, if the
+      goal is a non-empty vector, a "cons" will be introduced.)
+
+    - A record type. A record value will be introduced. Implicit
+      fields will not be included unless showing of implicit arguments
+      is switched on.
+
+    - A function type. A lambda binding as many variables as possible
+      will be introduced. The variable names will be chosen from the
+      goal type if its normal form is a dependent function type,
+      otherwise they will be variations on "x". Implicit lambdas will
+      only be inserted if showing of implicit arguments is switched
+      on.
+
+  This command can be invoked by using the refine command (C-c C-r)
+  when the goal is empty. (The old behaviour of the refine command in
+  this situation was to ask for an expression using the minibuffer.)
+
+* The Emacs mode displays "Checked" in the mode line if the current
+  file type checked successfully without any warnings.
+
+* If a file F is loaded, and this file defines the module M, it is an
+  error if F is not the file which defines M according to the include
+  path.
+
+  Note that the command-line tool and the Emacs mode define the
+  meaning of relative include paths differently: the command-line tool
+  interprets them relative to the current working directory, whereas
+  the Emacs mode interprets them relative to the root directory of the
+  current project. (As an example, if the module A.B.C is loaded from
+  the file <some-path>/A/B/C.agda, then the root directory is
+  <some-path>.)
+
+* It is an error if there are several files on the include path which
+  match a given module name.
+
+* Interface files are relocatable. You can move around source trees as
+  long as the include path is updated in a corresponding way. Note
+  that a module M may be re-typechecked if its time stamp is strictly
+  newer than that of the corresponding interface file (M.agdai).
+
+* Type-checking is no longer done when an up-to-date interface exists.
+  (Previously the initial module was always type-checked.)
+
+* Syntax highlighting files for Emacs (.agda.el) are no longer used.
+  The --emacs flag has been removed. (Syntax highlighting information
+  is cached in the interface files.)
+
+* The Agate and Alonzo compilers have been retired. The options
+  --agate, --alonzo and --malonzo have been removed.
+
+* The default directory for MAlonzo output is the project's root
+  directory. The --malonzo-dir flag has been renamed to --compile-dir.
+
+* Emacs mode: C-c C-x C-d no longer resets the type checking state.
+  C-c C-x C-r can be used for a more complete reset. C-c C-x C-s
+  (which used to reload the syntax highlighting information) has been
+  removed. C-c C-l can be used instead.
+
+* The Emacs mode used to define some "abbrevs", unless the user
+  explicitly turned this feature off. The new default is /not/ to add
+  any abbrevs. The old default can be obtained by customising
+  agda2-mode-abbrevs-use-defaults (a customisation buffer can be
+  obtained by typing M-x customize-group agda2 RET after an Agda file
+  has been loaded).
diff --git a/src/agda-mode/Main.hs b/src/agda-mode/Main.hs
--- a/src/agda-mode/Main.hs
+++ b/src/agda-mode/Main.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
 -- | A program which either tries to add setup code for Agda's Emacs
 -- mode to the users .emacs file, or provides information to Emacs
 -- about where the Emacs mode is installed.
@@ -15,7 +17,9 @@
 import System.Exit
 import System.FilePath
 import System.IO
+#if !(MIN_VERSION_base(4,2,0))
 import qualified System.IO.UTF8 as UTF8
+#endif
 import System.Process
 
 import Paths_Agda (getDataDir, version)
@@ -52,8 +56,12 @@
   , ""
   , "  The program tries to add setup code for Agda's Emacs mode to the"
   , "  current user's .emacs file. It is assumed that the .emacs file"
+#if MIN_VERSION_base(4,2,0)
+  , "  uses the character encoding specified by the locale."
+#else
   , "  uses ASCII or some other character encoding which ASCII is"
   , "  compatible with (like Latin-1 or UTF-8)."
+#endif
   , ""
   , locateFlag
   , ""
@@ -77,7 +85,13 @@
 printEmacsModeFile :: IO ()
 printEmacsModeFile = do
   dataDir <- getDataDir
-  UTF8.putStr $ dataDir </> "emacs-mode" </> "agda2.el"
+  let path = dataDir </> "emacs-mode" </> "agda2.el"
+#if MIN_VERSION_base(4,2,0)
+  hSetEncoding stdout utf8
+  putStr path
+#else
+  UTF8.putStr path
+#endif
 
 ------------------------------------------------------------------------
 -- Setting up the .emacs file
@@ -135,7 +149,7 @@
 setupString :: Files -> String
 setupString files = unlines
   [ ""
-  , "(load-file (let ((coding-system-for-read 'utf-8))"                 
+  , "(load-file (let ((coding-system-for-read 'utf-8))"
   , "                (shell-command-to-string \""
                         ++ identifier files ++ "\")))"
   ]
diff --git a/src/data/Agda.css b/src/data/Agda.css
--- a/src/data/Agda.css
+++ b/src/data/Agda.css
@@ -28,3 +28,4 @@
 
 /* Standard attributes. */
 a { text-decoration: none }
+a[href]:hover { background-color: #B4EEB4 }
diff --git a/src/data/emacs-mode/agda-input.el b/src/data/emacs-mode/agda-input.el
--- a/src/data/emacs-mode/agda-input.el
+++ b/src/data/emacs-mode/agda-input.el
@@ -520,7 +520,7 @@
                                                ⍜⍝⍞⍟⍠⍡⍢⍣⍤⍥⍦⍧⍨⍩⍪⍫⍬⍭⍮
                                                ⍯⍰⍱⍲⍳⍴⍵⍶⍷⍸⍹⍺⎕"))
 
-  ;; Shorter forms of many greek letters.
+  ;; Shorter forms of many greek letters plus ƛ.
 
   ("Ga"  . ("α"))  ("GA"  . ("Α"))
   ("Gb"  . ("β"))  ("GB"  . ("Β"))
@@ -532,7 +532,7 @@
   ("Gth" . ("θ"))  ("GTH" . ("θ"))
   ("Gi"  . ("ι"))  ("GI"  . ("Ι"))
   ("Gk"  . ("κ"))  ("GK"  . ("Κ"))
-  ("Gl"  . ("λ"))  ("GL"  . ("Λ"))
+  ("Gl"  . ("λ"))  ("GL"  . ("Λ"))  ("Gl-" . ("ƛ"))
   ("Gm"  . ("μ"))  ("GM"  . ("Μ"))
   ("Gn"  . ("ν"))  ("GN"  . ("Ν"))
   ("Gx"  . ("ξ"))  ("GX"  . ("Ξ"))
diff --git a/src/data/emacs-mode/agda2-abbrevs.el b/src/data/emacs-mode/agda2-abbrevs.el
--- a/src/data/emacs-mode/agda2-abbrevs.el
+++ b/src/data/emacs-mode/agda2-abbrevs.el
@@ -76,7 +76,7 @@
   ("oi"  "open import "))
   "Abbreviations defined by default in the Agda mode.")
 
-(defcustom agda2-mode-abbrevs-use-defaults t
+(defcustom agda2-mode-abbrevs-use-defaults nil
   "If non-nil include the default Agda mode abbrevs in `agda2-mode-abbrev-table'.
 The abbrevs are designed to be expanded explicitly, so users of `abbrev-mode'
 probably do not want to include them.
diff --git a/src/data/emacs-mode/agda2-highlight.el b/src/data/emacs-mode/agda2-highlight.el
--- a/src/data/emacs-mode/agda2-highlight.el
+++ b/src/data/emacs-mode/agda2-highlight.el
@@ -40,6 +40,24 @@
                       :font           'unspecified)
   (eval `(set-face-attribute face nil ,@attrs)))
 
+(defvar agda2-highlight-face-attributes-list
+  '(:family :width :height :weight :slant :foreground :background
+	    :inverse-video :stipple :underline :overline :strike-through
+	    :inherit :box :font)
+  "The attributes considered by `agda2-highlight-face-attributes'.")
+
+(defun agda2-highlight-face-attributes (face)
+  "The names and values of all attributes in FACE.
+Only the attributes in `agda2-highlight-face-attributes-list' are
+considered. The attributes are returned in a flat list of the
+form (name1 value1 name2 value2...)."
+  (apply 'append
+         (mapcar (lambda (attr)
+                   (let ((val (face-attribute face attr)))
+                     (if (member val '(unspecified nil)) '()
+                       (list attr (if (symbolp val) `',val val)))))
+                 agda2-highlight-face-attributes-list)))
+
 (defun agda2-highlight-set-faces (variable group)
   "Set all Agda faces according to the value of GROUP.
 Also sets the default value of VARIABLE to GROUP."
@@ -88,20 +106,79 @@
              :background "red")
             (agda2-highlight-incomplete-pattern-face
              :foreground "black"
-             :background "purple"))))))
+             :background "purple")))
+	 ((equal group 'default-faces)
+          (list (cons 'agda2-highlight-keyword-face
+		      (agda2-highlight-face-attributes
+		       font-lock-keyword-face))
+		(cons 'agda2-highlight-string-face
+		      (agda2-highlight-face-attributes
+		       font-lock-string-face))
+		(cons 'agda2-highlight-number-face
+		      (agda2-highlight-face-attributes
+		       font-lock-constant-face))
+		(cons 'agda2-highlight-symbol-face
+		      (agda2-highlight-face-attributes
+		       font-lock-keyword-face))
+		(cons 'agda2-highlight-primitive-type-face
+		      (agda2-highlight-face-attributes
+		       font-lock-keyword-face))
+		(cons 'agda2-highlight-bound-variable-face
+		      (agda2-highlight-face-attributes
+		       font-lock-variable-name-face))
+		(cons 'agda2-highlight-inductive-constructor-face
+		      (agda2-highlight-face-attributes
+		       font-lock-type-face))
+		(cons 'agda2-highlight-coinductive-constructor-face
+		      (agda2-highlight-face-attributes
+		       font-lock-type-face))
+		(cons 'agda2-highlight-datatype-face
+		      (agda2-highlight-face-attributes
+		       font-lock-type-face))
+		(cons 'agda2-highlight-field-face
+		      (agda2-highlight-face-attributes
+		       font-lock-variable-name-face))
+		(cons 'agda2-highlight-function-face
+		      (agda2-highlight-face-attributes
+		       font-lock-function-name-face))
+		(cons 'agda2-highlight-module-face
+		      (agda2-highlight-face-attributes
+		       font-lock-type-face))
+		(cons 'agda2-highlight-postulate-face
+		      (agda2-highlight-face-attributes
+		       font-lock-type-face))
+		(cons 'agda2-highlight-primitive-face
+		      (agda2-highlight-face-attributes
+		       font-lock-constant-face))
+		(cons 'agda2-highlight-record-face
+		      (agda2-highlight-face-attributes
+		       font-lock-variable-name-face))
+		(cons 'agda2-highlight-dotted-face
+		      (agda2-highlight-face-attributes
+		       font-lock-variable-name-face))
+		(cons 'agda2-highlight-operator-face
+		      (agda2-highlight-face-attributes
+		       font-lock-function-name-face))
+		(cons 'agda2-highlight-error-face
+		      (agda2-highlight-face-attributes
+		       font-lock-warning-face)))))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Faces
 
 (defcustom agda2-highlight-face-groups nil
-  "Colour scheme to use for agda2 highlight faces.
+  "Colour scheme used in Agda buffers.
 Note that changing this option does not remove the customisations
 below; you can get them back by resetting this option and
-restarting Emacs."
+restarting Emacs. If you are using the default-faces option and
+change your colour theme the changes may not take effect in Agda
+buffers until you have restarted Emacs."
   :type '(choice
             (const :tag "Use the settings below." nil)
             (const :tag "Use an approximation of Conor McBride's colour scheme."
-                   conor))
+                   conor)
+	    (const :tag "Use simplified highlighting and default font-lock faces."
+                   default-faces))
   :group 'agda2-highlight
   :set 'agda2-highlight-set-faces)
 
@@ -274,39 +351,25 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Functions
 
-(defun agda2-highlight-reload nil
-  "Reload current buffer's syntax information from the syntax file."
-  (interactive)
-  (let* ((dir (file-name-directory buffer-file-name))
-         (name (file-name-nondirectory buffer-file-name))
-         (file (concat dir "." name ".el"))
-         (inhibit-read-only t))
-         ;; Ignore read-only status, otherwise this function may fail.
-    (annotation-load-file
-     file
-     ;; Do not remove the old annotations if all the new ones
-     ;; correspond to errors, or if there are no new ones.
-     (lambda (anns) (not (member anns '((error) nil))))
-     "Click mouse-2 to jump to definition")))
-
 (defun agda2-highlight-setup nil
   "Set up the `annotation' library for use with `agda2-mode'."
   (font-lock-mode 0)
   (setq annotation-bindings agda2-highlight-faces))
 
+(defun agda2-highlight-load (file)
+  "Load syntax highlighting information from FILE."
+  (let ((coding-system-for-read 'utf-8)
+        ;; Ignore read-only status, otherwise this function may fail.
+        (inhibit-read-only t))
+    (annotation-load-file file (lambda (anns) t)
+                          "Click mouse-2 to jump to definition")))
+
 (defun agda2-highlight-clear nil
   "Remove all syntax highlighting added by `agda2-highlight-reload'."
   (interactive)
   (let ((inhibit-read-only t))
        ; Ignore read-only status, otherwise this function may fail.
     (annotation-remove-annotations)))
-
-(defun agda2-highlight-reload-or-clear (&optional arg)
-  "Reload syntax highlighting information.
-With prefix argument ARG: Remove syntax highlighting."
-  (interactive "P")
-  (if arg (agda2-highlight-clear)
-    (agda2-highlight-reload)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Administrative details
diff --git a/src/data/emacs-mode/agda2-mode.el b/src/data/emacs-mode/agda2-mode.el
--- a/src/data/emacs-mode/agda2-mode.el
+++ b/src/data/emacs-mode/agda2-mode.el
@@ -2,7 +2,7 @@
 
 ;;; Commentary:
 
-;; 
+;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; Dependency
@@ -10,7 +10,7 @@
 
 ;;; Code:
 
-(defvar agda2-version "2.2.4"
+(defvar agda2-version "2.2.6"
   "The version of the Agda mode.
 Note that, by default, the same version of the underlying Haskell
 library is used (see `agda2-ghci-options').")
@@ -81,7 +81,8 @@
 (defcustom agda2-include-dirs
   '(".")
   "The directories Agda uses to search for files.
-The directory names should be relative to the root of the current project."
+The directory names should either be absolute or be relative to
+the root of the current project."
   :type '(repeat directory)
   :group 'agda2)
 
@@ -226,11 +227,10 @@
     (agda2-load                              "\C-c\C-l"         (global)       "Load")
     (agda2-load                              "\C-c\C-x\C-l")
     (agda2-compile                           "\C-c\C-x\C-c"     (global)       "Compile")
-    (agda2-text-state                        "\C-c\C-x\C-d"     (global)       "Deactivate Agda")
     (agda2-quit                              "\C-c\C-x\C-q"     (global)       "Quit")
     (agda2-restart                           "\C-c\C-x\C-r"     (global)       "Restart")
+    (agda2-remove-annotations                "\C-c\C-x\C-d"     (global)       "Remove goals and highlighting (\"deactivate\")")
     (agda2-display-implicit-arguments        "\C-c\C-x\C-h"     (global)       "Toggle display of hidden arguments")
-    (agda2-highlight-reload-or-clear         "\C-c\C-x\C-s"     (global)       "Reload syntax highlighting information")
     (agda2-show-constraints                  ,(kbd "C-c C-=")   (global)       "Show constraints")
     (agda2-solveAll                          ,(kbd "C-c C-s")   (global)       "Solve constraints")
     (agda2-show-goals                        ,(kbd "C-c C-?")   (global)       "Show goals")
@@ -238,6 +238,7 @@
     (agda2-previous-goal                     "\C-c\C-b"         (global)       "Previous goal") ; Back.
     (agda2-give                              ,(kbd "C-c C-SPC") (local)        "Give")
     (agda2-refine                            "\C-c\C-r"         (local)        "Refine")
+    (agda2-auto                              "\C-c\C-a"         (local)        "Auto")
     (agda2-make-case                         "\C-c\C-c"         (local)        "Case")
     (agda2-goal-type                         "\C-c\C-t"         (local)        "Goal type")
     (agda2-show-context                      "\C-c\C-e"         (local)        "Context (environment)")
@@ -328,16 +329,18 @@
 (modify-coding-system-alist 'file "\\.l?agda\\'" 'utf-8)
 ;;;###autoload
 (define-derived-mode agda2-mode nil "Agda"
- "Major mode for agda files.
+ "Major mode for Agda files.
 
-Note that when this mode is activated the default font of the
-current frame is changed to the fontset `agda2-fontset-name'.
-The reason is that Agda programs often use mathematical symbols
-and other Unicode characters, so we try to provide a suitable
-default font setting, which can display many of the characters
-encountered.  If you prefer to use your own settings, set
-`agda2-fontset-name' to nil.
+The following paragraph does not apply to Emacs 23.
 
+  Note that when this mode is activated the default font of the
+  current frame is changed to the fontset `agda2-fontset-name'.
+  The reason is that Agda programs often use mathematical symbols
+  and other Unicode characters, so we try to provide a suitable
+  default font setting, which can display many of the characters
+  encountered. If you prefer to use your own settings, set
+  `agda2-fontset-name' to nil.
+
 Special commands:
 \\{agda2-mode-map}"
  (setq local-abbrev-table agda2-mode-abbrev-table
@@ -353,13 +356,23 @@
          (set-frame-font agda2-fontset-name)
        (error (error "Unable to change the font; change agda2-fontset-name or tweak agda2-fontset-spec-of-fontset-agda2"))))
  (agda2-indent-setup)
+ ;; If GHCi is not running syntax highlighting does not work properly.
+ (unless (eq 'run (agda2-process-status))
+   (agda2-restart))
  (agda2-highlight-setup)
  (agda2-highlight-reload)
  (agda2-comments-and-paragraphs-setup)
  (force-mode-line-update)
  ;; Protect global value of default-input-method from set-input-method.
  (make-local-variable 'default-input-method)
- (set-input-method "Agda"))
+ (set-input-method "Agda")
+ ;; Highlighting is removed when we switch from the Agda mode. Use
+ ;; case: When a file M.lagda with a local variables list including
+ ;; "mode: latex" is loaded chances are that the Agda mode is
+ ;; activated before the LaTeX mode, and the LaTeX mode does not seem
+ ;; to remove the text properties set by the Agda mode.
+ (add-hook (make-local-variable 'change-major-mode-hook)
+           'agda2-remove-annotations))
 
 (defun agda2-restart ()
   "Kill and restart the *ghci* buffer and load `agda2-toplevel-module'."
@@ -383,10 +396,11 @@
                          'agda2-send)
                     (set-buffer-file-coding-system 'utf-8)
                     (set-buffer-process-coding-system 'utf-8 'utf-8)
-                    (rename-buffer agda2-bufname)))
-  (apply 'agda2-go nil ":set" agda2-ghci-options)
-  (agda2-go nil ":mod +" agda2-toplevel-module)
-  (agda2-text-state))
+                    (rename-buffer agda2-bufname)
+                    (set-process-query-on-exit-flag agda2-process nil)))
+  (apply 'agda2-call-ghci ":set" agda2-ghci-options)
+  (agda2-call-ghci ":mod +" agda2-toplevel-module)
+  (agda2-remove-annotations))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; Communicating with Agda
@@ -406,12 +420,11 @@
       (comint-send-string proc chunk)))
   (comint-send-string proc "\n"))
 
-(defun agda2-go (require-response &rest args)
+(defun agda2-call-ghci (&rest args)
   "Executes commands in GHCi.
 Sends the list of strings ARGS to GHCi, waits for output and
-executes the responses, if any. If REQUIRE-RESPONSE is non-nil
-then an error is raised if no responses are received."
-  (interactive)
+executes the responses, if any. Returns the number of processed
+responses."
   (unless (eq 'run (agda2-process-status))
     ;; Try restarting automatically, but only once, in case there is
     ;; some major problem.
@@ -419,7 +432,14 @@
     (unless (eq 'run (agda2-process-status))
       (agda2-raise-ghci-error)))
   (save-excursion
-    (haskell-ghci-go (apply 'concat (agda2-intersperse " " args)) nil))
+    ;; By setting local-enable-local-variables to nil the call to
+    ;; hack-local-variables in haskell-ghci-go becomes more or less a
+    ;; no-op. (Note that hack-local-variables can interfere with the
+    ;; setup of a mode, because it can potentially perform the setup
+    ;; of another mode...)
+    (let ((local-enable-local-variables nil))
+      (haskell-ghci-go (apply 'concat (agda2-intersperse " " args))
+                       nil)))
   (let (response)
     (with-current-buffer haskell-ghci-process-buffer
       (haskell-ghci-wait-for-output)
@@ -433,23 +453,68 @@
                 (setq response (buffer-substring-no-properties
                                 (point-min) (point-max)))))
           (delete-file tempfile))))
-    (when (and (>= 0 (agda2-respond response))
-               require-response)
-      (agda2-raise-ghci-error))))
+    (agda2-respond response)))
 
-(defun agda2-goal-cmd (require-response cmd &optional want ask &rest args)
-  "When in a goal, send CMD, goal num and range, and strings ARGS to agda2.
-WANT is an optional prompt. When ASK is non-nil, use minibuffer.
-If REQUIRE-RESPONSE is non-nil then an error is raised if no
-responses are received."
+(defun agda2-go (highlight require-response update-goals &rest args)
+  "Executes commands in GHCi.
+Sends the list of strings ARGS to GHCi, waits for output and
+executes the responses, if any. An error is raised if no
+responses are received (unless REQUIRE-RESPONSE is nil), and
+otherwise the syntax highlighting information is reloaded (unless
+HIGHLIGHT is nil; if HIGHLIGHT is a string, then highlighting
+info is read from the corresponding file) and the goals
+updated (unless UPDATE-GOALS is nil)."
+  (let* ((highlighting-temp (and highlight (not (stringp highlight))))
+         (highlighting (cond ((stringp highlight) highlight)
+                             (highlighting-temp (make-temp-file "agda2-mode")))))
+        (unwind-protect
+            (let ((no-responses
+                   (apply 'agda2-call-ghci
+                          "ioTCM"
+                          (agda2-string-quote (buffer-file-name))
+                          (if highlighting-temp
+                              (concat "(Just "
+                                      (agda2-string-quote highlighting)
+                                      ")")
+                            "Nothing")
+                          "("
+                          (append args '(")")))))
+                (when (and require-response (>= 0 no-responses))
+                  (agda2-raise-ghci-error))
+                (if highlight (agda2-highlight-load highlighting)))
+          (if highlighting-temp (delete-file highlighting))))
+  (if update-goals (agda2-annotate)))
+
+(defun agda2-goal-cmd (cmd &optional want ask &rest args)
+  "Reads input from goal or minibuffer and sends command to Agda.
+
+An error is raised if point is not in a goal.
+
+The command sent to Agda is
+
+  CMD <goal number> <goal range> <user input> ARGS.
+
+The user input is computed as follows:
+
+* If WANT is nil, then the user input is the empty string.
+
+* If WANT is a string, and either ASK is non-nil or the goal only
+  contains whitespace, then the input is taken from the
+  minibuffer. In this case WANT is used as the prompt string.
+
+* Otherwise (including if WANT is 'goal) the goal contents is
+  used.
+
+An error is raised if no responses are received."
   (multiple-value-bind (o g) (agda2-goal-at (point))
     (unless g (error "For this command, please place the cursor in a goal"))
     (let ((txt (buffer-substring-no-properties (+ (overlay-start o) 2)
                                                (- (overlay-end   o) 2))))
-      (if (not want) (setq txt "")
-          (when (or ask (string-match "\\`\\s *\\'" txt))
-            (setq txt (read-string (concat want ": ") txt))))
-      (apply 'agda2-go require-response cmd
+      (cond ((null want) (setq txt ""))
+            ((and (stringp want)
+                  (or ask (string-match "\\`\\s *\\'" txt)))
+             (setq txt (read-string (concat want ": ") txt))))
+      (apply 'agda2-go nil t t cmd
              (format "%d" g)
              (agda2-goal-Range o)
              (agda2-string-quote txt) args))))
@@ -472,13 +537,25 @@
         (eval (read response))))
     no-responses))
 
+(defvar agda2-response nil
+  "Used by the backend to give responses to the Agda mode.")
+(make-variable-buffer-local 'agda2-response)
+
+(defun agda2-ask (&rest args)
+  "Executes a query in GHCi and returns the response string."
+  (setq agda2-response 'agda2-no-response)
+  (apply 'agda2-go nil nil nil args)
+  (if (equal agda2-response 'agda2-no-response)
+      (agda2-raise-ghci-error)
+    agda2-response))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; User commands and response processing
 
 (defun agda2-load ()
   "Load current buffer."
   (interactive)
-  (agda2-go t "cmd_load"
+  (agda2-go t t t "cmd_load"
             (agda2-string-quote (buffer-file-name))
             (agda2-list-quote agda2-include-dirs)
             ))
@@ -486,32 +563,41 @@
 (defun agda2-compile ()
   "Compile the current module."
   (interactive)
-  (agda2-go t "cmd_compile"
+  (agda2-go t t t "cmd_compile"
             (agda2-string-quote (buffer-file-name))
             (agda2-list-quote agda2-include-dirs)
             ))
 
-(defun agda2-load-action (gs)
-  "Annotate new goals GS in current buffer."
-  (agda2-annotate gs))
-
 (defun agda2-give()
   "Give to the goal at point the expression in it" (interactive)
-  (agda2-goal-cmd t "cmd_give" "expression to give"))
+  (agda2-goal-cmd "cmd_give" "expression to give"))
 
 (defun agda2-give-action (old-g paren)
   "Update the goal OLD-G with the expression in it."
   (agda2-update old-g paren))
 
 (defun agda2-refine ()
-  "Refine the goal at point by the expression in it." (interactive)
-  (agda2-goal-cmd t "cmd_refine" "expression to refine"))
+  "Refine the goal at point.
+If the goal contains an expression e, and some \"suffix\" of the
+type of e unifies with the goal type, then the goal is replaced
+by e applied to a suitable number of new goals.
 
+If the goal is empty, the goal type is a data type, and there is
+exactly one constructor which unifies with this type, then the
+goal is replaced by the constructor applied to a suitable number
+of new goals."
+  (interactive)
+  (agda2-goal-cmd "cmd_refine_or_intro" 'goal))
+
+(defun agda2-auto ()
+ "Simple proof search" (interactive)
+ (agda2-goal-cmd "cmd_auto"))
+
 (defun agda2-make-case ()
   "Refine the pattern var given in the goal.
 Assumes that <clause> = {!<var>!} is on one line."
   (interactive)
-  (agda2-goal-cmd t "cmd_make_case" "partten var to case"))
+  (agda2-goal-cmd "cmd_make_case" "pattern var to case"))
 
 (defun agda2-make-case-action (newcls)
   "Replace the line at point with new clauses NEWCLS and reload."
@@ -556,17 +642,17 @@
 
 (defun agda2-show-goals()
   "Show all goals." (interactive)
-  (agda2-go t "cmd_metas"))
+  (agda2-go t t t "cmd_metas"))
 
 (defun agda2-show-constraints()
   "Show constraints." (interactive)
-  (agda2-go t "cmd_constraints"))
+  (agda2-go t t t "cmd_constraints"))
 
-(defun agda2-text-state ()
-  "UNDER CONSTRUCTION" (interactive)
+(defun agda2-remove-annotations ()
+  "Removes buffer annotations (overlays and text properties)."
+  (interactive)
   (dolist (o (overlays-in (point-min) (point-max)))
     (delete-overlay o))
-  (agda2-go nil "cmd_reset")
   (let ((inhibit-read-only t))
     (annotation-preserve-mod-p-and-undo
      (set-text-properties (point-min) (point-max) '()))
@@ -584,17 +670,18 @@
     (or (go (point)) (go wrapped) (message "No goals in the buffer"))))
 
 (defun agda2-quit ()
-  "Quit and clean up after agda2." (interactive)
+  "Quit and clean up after agda2."
+  (interactive)
   (agda2-protect (progn (kill-buffer agda2-buffer)
                         (kill-buffer (current-buffer)))))
- 
-(defmacro agda2-maybe-normalised (name comment cmd prompt)
+
+(defmacro agda2-maybe-normalised (name comment cmd want)
   "This macro constructs a function NAME which runs CMD.
 COMMENT is used to build the function's comment. The function
 NAME takes a prefix argument which tells whether it should
 normalise types or not when running CMD (through
-`agda2-goal-cmd' t; PROMPT, if non-nil, is used as the goal
-command prompt)."
+`agda2-goal-cmd'; WANT is used as `agda2-goal-cmd's WANT
+argument)."
   (let ((eval (make-symbol "eval")))
   `(defun ,name (&optional not-normalise)
      ,(concat comment ".
@@ -602,15 +689,16 @@
 With a prefix argument the result is not explicitly normalised.")
      (interactive "P")
      (let ((,eval (if not-normalise "Instantiated" "Normalised")))
-       (agda2-goal-cmd t (concat ,cmd " Agda.Interaction.BasicOps." ,eval)
-                         ,prompt)))))
+       (agda2-goal-cmd (concat ,cmd " Agda.Interaction.BasicOps." ,eval)
+                       ,want)))))
 
 (defmacro agda2-maybe-normalised-toplevel (name comment cmd prompt)
   "This macro constructs a function NAME which runs CMD.
 COMMENT is used to build the function's comments. The function
 NAME takes a prefix argument which tells whether it should
-normalise types or not when running CMD (through `agda2-go' t; the
-string PROMPT is used as the goal command prompt)."
+normalise types or not when running CMD (through
+`agda2-go' nil t nil; the string PROMPT is used as the goal
+command prompt)."
   (let ((eval (make-symbol "eval")))
     `(defun ,name (not-normalise expr)
        ,(concat comment ".
@@ -618,8 +706,9 @@
 With a prefix argument the result is not explicitly normalised.")
        (interactive ,(concat "P\nM" prompt ": "))
        (let ((,eval (if not-normalise "Instantiated" "Normalised")))
-         (agda2-go t (concat ,cmd " Agda.Interaction.BasicOps." ,eval " "
-                             (agda2-string-quote expr)))))))
+         (agda2-go nil t nil
+                   (concat ,cmd " Agda.Interaction.BasicOps." ,eval " "
+                           (agda2-string-quote expr)))))))
 
 (agda2-maybe-normalised
  agda2-goal-type
@@ -671,7 +760,7 @@
 (defun agda2-solveAll ()
   "Solves all goals that are already instantiated internally."
   (interactive)
-  (agda2-go t "cmd_solveAll"))
+  (agda2-go t t t "cmd_solveAll"))
 
 (defun agda2-solveAll-action (iss)
   (save-excursion
@@ -687,7 +776,7 @@
   (interactive "P")
   (let ((cmd (concat "cmd_compute"
                      (if arg " True" " False"))))
-    (agda2-goal-cmd t cmd "expression to normalise")))
+    (agda2-goal-cmd cmd "expression to normalise")))
 
 (defun agda2-compute-normalised-toplevel (expr &optional arg)
   "Computes the normal form of the given expression.
@@ -698,7 +787,7 @@
   (let ((cmd (concat "cmd_compute_toplevel"
                      (if arg " True" " False")
                      " ")))
-    (agda2-go t (concat cmd (agda2-string-quote expr)))))
+    (agda2-go nil t nil (concat cmd (agda2-string-quote expr)))))
 
 (defun agda2-compute-normalised-maybe-toplevel ()
   "Computes the normal form of the given expression,
@@ -713,12 +802,29 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;
 
-(defun agda2-annotate (goals)
+(defun agda2-highlight-reload nil
+  "Loads precomputed syntax highlighting info for the current buffer.
+If there is any to load."
+  (let ((highlighting (make-temp-file "agda2-mode")))
+    (unwind-protect
+        (progn
+          (agda2-go highlighting nil t
+                    "cmd_write_highlighting_info"
+                    (agda2-string-quote (buffer-file-name))
+                    (agda2-string-quote highlighting)))
+      (delete-file highlighting))))
+
+(defun agda2-annotate ()
   "Annotates the goals in the current buffer with text properties.
-The goal numbers should be given by GOALS (in the order they
-appear in the buffer)."
+Note that this function should be run /after/ syntax highlighting
+information has been loaded, because the two highlighting
+mechanisms interact in unfortunate ways."
   (agda2-forget-all-goals)
-  (agda2-let (stk top)
+  (agda2-let
+      (stk
+       top
+       (goals (agda2-ask "cmd_goals"
+                         (agda2-string-quote (buffer-file-name)))))
       ((delims() (re-search-forward "[?]\\|[{][-!]\\|[-!][}]\\|--" nil t))
        (is-lone-questionmark ()
           (save-excursion
@@ -814,17 +920,20 @@
   (let(ys)(while xs (push (pop xs) ys)(push sep ys))(pop ys)(nreverse ys)))
 
 (defun agda2-goal-Range (o)
-  "Range of goal overlay O."
+  "The Haskell Range of goal overlay O."
   (format "(Range [Interval %s %s])"
           (agda2-mkPos (+ (overlay-start o) 2))
           (agda2-mkPos (- (overlay-end   o) 2))))
 
 (defun agda2-mkPos (&optional p)
-  "Position value of P or point."
+  "The Haskell Position corresponding to P or `point'."
   (save-excursion
     (if p (goto-char p))
-    (format "(Pn \"%s\" %d %d %d)" (buffer-file-name)
-            (point) (count-lines (point-min) (point)) (1+ (current-column)))))
+    (format "(Pn (Just (mkAbsolute %s)) %d %d %d)"
+            (agda2-string-quote (file-truename (buffer-file-name)))
+            (point)
+            (count-lines (point-min) (point))
+            (1+ (current-column)))))
 
 (defun agda2-char-quote (c)
   "Convert character C to the notation used in Haskell strings.
@@ -1022,10 +1131,10 @@
 With prefix argument, turn on display of implicit arguments if
 the argument is a positive number, otherwise turn it off."
   (interactive "P")
-  (cond ((eq arg nil)       (agda2-go t "toggleImplicitArgs"))
+  (cond ((eq arg nil)       (agda2-go t t t "toggleImplicitArgs"))
         ((and (numberp arg)
-              (> arg 0))    (agda2-go t "showImplicitArgs" "True"))
-        (t                  (agda2-go t "showImplicitArgs" "False"))))
+              (> arg 0))    (agda2-go t t t "showImplicitArgs" "True"))
+        (t                  (agda2-go t t t "showImplicitArgs" "False"))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;
diff --git a/src/data/emacs-mode/annotation.el b/src/data/emacs-mode/annotation.el
--- a/src/data/emacs-mode/annotation.el
+++ b/src/data/emacs-mode/annotation.el
@@ -144,15 +144,20 @@
 
 (defun annotation-load-file (file removep &optional goto-help)
   "Apply the annotations in FILE.
+If FILE is empty, then this function does nothing; otherwise the
+following comments apply.
+
 If (`funcall' REMOVEP anns) is non-nil, then all existing text
 properties set by `annotation-annotate' in the current buffer are
 first removed. Here anns is a list containing all the
 annotations (third argument to `annotation-annotate') to be
 applied (in some order, with duplicates removed).
 
-FILE should contain calls to `annotation-annotate'. The arguments
-to `annotation-annotate' should be in normal form, they are not
-evaluated.
+FILE, if non-empty, should contain a list of lists (start end
+anns &optional info goto). Text between start and end will be
+annotated with the annotations in the list anns (using
+`annotation-annotate'). If info and/or goto are present they will
+be used as the corresponding arguments to `annotation-annotate'.
 
 If INFO is nil in a call to `annotation-annotate', and the GOTO
 argument is a cons-cell, then the INFO argument is set to
@@ -165,24 +170,23 @@
 Note: This function may fail if there is read-only text in the buffer."
   (annotation-preserve-mod-p-and-undo
    (when (file-readable-p file)
-     (let* ((cmds (with-temp-buffer
-                    (insert "(\n)") (forward-char -2)
+     (let ((cmds (with-temp-buffer
                     (insert-file-contents file)
-                    (goto-char (point-min))
-                    (read (current-buffer))))
-            (anns (delete-dups
-                   (apply 'append (mapcar (lambda (x) (nth 1 (nth 3 x)))
-                                          cmds)))))
-       (if (funcall removep anns)
-         (annotation-remove-annotations))
-       (dolist (cmd cmds)
-         (destructuring-bind (f start end anns &optional info goto) cmd
-           (assert (eq f 'annotation-annotate))
-           (setq anns (cadr anns))      ;Strip the `quote'.
-           (setq goto (cadr goto))      ;Strip the `quote'.
-           (if (and (not info) (consp goto))
-               (annotation-annotate start end anns goto-help goto)
-           (annotation-annotate start end anns info goto))))))))
+                    (if (eq (point-min) (point-max))
+                        'empty-file
+                      (goto-char (point-min))
+                      (read (current-buffer))))))
+       (when (listp cmds)
+         (let ((anns (delete-dups
+                      (apply 'append (mapcar (lambda (x) (nth 2 x)) cmds)))))
+           (if (funcall removep anns)
+               (annotation-remove-annotations))
+           (dolist (cmd cmds)
+             (destructuring-bind (start end anns &optional info goto) cmd
+               (let ((info (if (and (not info) (consp goto))
+                               goto-help
+                             info)))
+                 (annotation-annotate start end anns info goto))))))))))
 
 (provide 'annotation)
 ;;; annotation.el ends here
diff --git a/src/full/Agda/Auto/Auto.hs b/src/full/Agda/Auto/Auto.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Auto/Auto.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE UndecidableInstances#-}
+
+module Agda.Auto.Auto (auto) where
+
+import Control.Monad.Error
+import Control.Monad.State
+import System.IO.Unsafe (unsafePerformIO)
+import Data.List
+import Data.Generics
+import Data.Map (Map)
+import qualified Data.Map as Map
+import Data.IORef
+import qualified System.Timeout
+import Data.Maybe (catMaybes)
+
+import Agda.TypeChecking.Monad.Base
+import Agda.TypeChecking.Monad.MetaVars
+import Agda.TypeChecking.Monad.Context
+import Agda.TypeChecking.Monad.Signature
+import Agda.TypeChecking.Monad.State (getScope)
+import Agda.TypeChecking.Substitute
+import qualified Agda.Syntax.Abstract as A
+import qualified Agda.Syntax.Concrete as C
+import Agda.Syntax.Position
+import qualified Agda.Syntax.Internal as I
+import Agda.Syntax.Common
+import Agda.Syntax.Translation.InternalToAbstract
+import Agda.Syntax.Translation.AbstractToConcrete (abstractToConcrete, abstractToConcrete_, makeEnv)
+import Agda.Interaction.Monad
+import Agda.Interaction.BasicOps hiding (refine)
+
+import Agda.Auto.Convert
+import Agda.Auto.NarrowingSearch
+import Agda.Auto.Syntax
+import Agda.Auto.Typecheck
+import Agda.Auto.Print
+
+
+getName :: A.Expr -> Maybe (Bool, I.QName)
+getName (A.ScopedExpr _ e) = getName e
+getName (A.Def qname) = Just (False, qname)
+getName (A.Con qname) = Just (True, head $ I.unAmbQ qname)
+getName _ = Nothing
+
+dispmsg msg = return ([], Just msg)
+
+auto :: InteractionId -> Range -> String -> TCM ([(InteractionId, String)], Maybe String)
+auto ii rng argstr = liftTCM $  
+     do  let (hints, timeout, pick, mode) = parseargs argstr
+         ahints <- mapM (parseExprIn ii rng) hints
+         case mapM getName ahints of
+          Nothing -> dispmsg "Hints must be a list of constant names" 
+          Just ehints -> do
+           mi <- lookupInteractionId ii
+           (myhints, tccons, eqcons, cmap) <- tomy mi ehints
+           let (mainm, _, _, _) = tccons Map.! mi
+           case mode of
+            MNormal listmode -> do
+             sols <- liftIO $ newIORef []
+             nsol <- liftIO $ newIORef (if listmode then (pick + 10) else (pick + 1))
+             let hsol = if listmode then do
+                         nsol' <- readIORef nsol
+                         when (nsol' <= 10) $ mapM (\(m, _, _, _) -> frommy (Meta m)) (Map.elems tccons) >>= \trms -> modifyIORef sols (trms :)
+                        else do
+                         nsol' <- readIORef nsol
+                         when (nsol' == 1) $ mapM (\(m, _, _, _) -> frommy (Meta m)) (Map.elems tccons) >>= \trms -> writeIORef sols [trms]
+             ticks <- liftIO $ newIORef 0
+             res <- liftIO $ System.Timeout.timeout (timeout * 1000000) $
+              let r d =
+                   do
+                    let tc (m, mytype, mylocalVars) isdep = tcExp isdep (map (\x -> (NoId, closify x)) mylocalVars) (closify mytype) (Meta m)
+                        initprop = foldl (\x (ineq, e, i) -> mpret $ And Nothing x (comp ineq (closify e) (closify i)))
+                                    (foldl (\x (m, mt, mlv, _) -> mpret $ And Nothing x (tc (m, mt, mlv) (not $ hequalMetavar m mainm)))
+                                     (mpret OK)
+                                     (Map.elems tccons)
+                                    )
+                                    eqcons
+                    depreached <- topSearch ticks nsol hsol undefined False (RIEnv myhints) (initprop) d 1
+                    nsol' <- readIORef nsol
+                    if nsol' /= 0 && depreached then
+                      r (d + 1)
+                     else
+                      return depreached
+              in  r 0
+             let getsols sol = do
+                  exprs <- mapM (\(mi, e) -> do
+                             mv <- lookupMeta mi
+                             expr <- withMetaInfo (getMetaInfo mv) $ reify e
+                             return (mi, expr)
+                            ) (zip (Map.keys tccons) sol)
+                  let r :: I.MetaId -> StateT [I.MetaId] TCM [(I.MetaId, A.Expr)]
+                      r midx = do
+                       let (m, _, _, deps) = tccons Map.! midx
+                       asolss <- mapM r deps
+                       dones <- get
+                       asols <- if (midx `notElem` dones) then do
+                         put (midx : dones)
+                         return [(midx, let Just e = lookup midx exprs in e)]
+                        else
+                         return []
+                       return $ concat asolss ++ asols
+                  (asols, _) <- runStateT (r mi) []
+                  return asols
+             iis <- getInteractionPoints
+             riis <- mapM (\ii -> lookupInteractionId ii >>= \mi -> return (mi, ii)) iis
+             if listmode then do
+               rsols <- liftM reverse $ liftIO $ readIORef sols
+               if null rsols then do
+                 nsol' <- liftIO $ readIORef nsol
+                 dispmsg $ insuffsols (pick + 10 - nsol')
+                else do
+                 aexprss <- mapM getsols rsols
+                 cexprss <- mapM (mapM (\(mi, e) -> lookupMeta mi >>= \mv -> withMetaInfo (getMetaInfo mv) $ abstractToConcrete_ e >>= \e' -> return (mi, e'))) aexprss
+                 let disp [(_, cexpr)] = show cexpr
+                     disp cexprs = concat (map (\(mi, cexpr) -> case lookup mi riis of {Nothing -> show mi; Just ii -> show ii} ++ " := " ++ show cexpr ++ " ") cexprs)
+                 dispmsg $ "Listing solution(s) " ++ show pick ++ "-" ++ show (pick + length rsols - 1) ++ "\n" ++
+                                   unlines (map (\(x, y) -> show y ++ "  " ++ disp x) $ zip cexprss [pick..])
+             
+              else
+               case res of
+                Nothing -> do
+                 nsol' <- liftIO $ readIORef nsol
+                 dispmsg $ insuffsols (pick + 1 - nsol') ++ " at time out (" ++ show timeout ++ "s)"
+                Just depthreached -> do
+                 ticks <- liftIO $ readIORef ticks
+                 rsols <- liftIO $ readIORef sols
+                 case rsols of
+                  [] -> do
+                   nsol' <- liftIO $ readIORef nsol
+                   dispmsg $ insuffsols (pick + 1 - nsol')
+                  (term : _) -> do
+                   exprs <- getsols term
+                   giveress <-
+                    mapM (\(mi, expr) ->
+                     case lookup mi riis of
+                      Nothing -> giveExpr mi expr >>= \_ -> return Nothing
+                      Just ii' -> do (ae, []) <- give ii' Nothing expr  -- `catchError` (\_ -> throwError (strMsg $ "Solution is not accepted by Agda: " ++ show term))
+                                     mv <- lookupMeta mi
+                                     let scope = getMetaScope mv
+                                         ce = abstractToConcrete (makeEnv scope) ae
+                                     let cmnt = if ii' == ii then " {- by agsy" ++ (if null argstr then "" else " (" ++ argstr ++ ")") ++ " -}" else ""
+                                     return $ Just (ii', show ce ++ cmnt)
+                                    
+                     ) exprs
+                   let msg = if length exprs == 1 then
+                              Nothing
+                             else
+                              Just $ "Also gave solution(s) for hole(s)" ++
+                                      concatMap (\(mi', _) ->
+                                       if mi' == mi then "" else (" " ++ case lookup mi' riis of {Nothing -> show mi'; Just ii -> show ii})
+                                      ) exprs
+                   return (catMaybes giveress, msg)
+            MDumpProblem (Just dumpfile) -> do
+             tcconss <- mapM (\(m, mytype, mylocalVars, _) -> do
+               let typ = foldl (\x y -> NotM $ Pi Agda.Auto.Syntax.NotHidden undefined y (Abs NoId x)) mytype mylocalVars
+                   trm = foldl (\x _ -> NotM $ Lam Agda.Auto.Syntax.NotHidden (Abs NoId x)) (Meta m) mylocalVars
+               typs <- liftIO $ printExp [] typ
+               trms <- liftIO $ printExp [] trm
+               return $ (if hequalMetavar m mainm then "the_prob : " else "extra_con : ") ++ typs ++ " {\n = " ++ trms ++ ";\n};\n\n"
+              ) (Map.elems tccons)
+             constss <- liftIO $ mapM (\(_, (TMAll, c)) -> printConst c >>= \s -> return $ s ++ "\n") (Map.toList cmap)
+             eqconss <- liftIO $ mapM (\(ineq, e1, e2) -> do
+                         pe1 <- printExp [] e1
+                         pe2 <- printExp [] e2
+                         return $ "-- " ++ pe1 ++ (if ineq then " >= " else " == ") ++ pe2
+                        ) eqcons
+             let probs = concat constss ++ concat tcconss ++ (if null ehints then "" else ("-- hints: " ++ concatMap (\(_, n) -> " " ++ show n) ehints) ++ "\n") ++
+                         "-- " ++ show (length eqcons) ++ " eqcons\n" ++ unlines eqconss
+             liftIO $ writeFile dumpfile probs
+             dispmsg $ "Dumping problem to " ++ dumpfile
+            MDumpProblem Nothing -> do
+             mv <- lookupMeta mi
+             let HasType _ tt = mvJudgement mv
+                 minfo = getMetaInfo mv
+                 localVars = map (snd . unArg . ctxEntry) . envContext . clEnv $ minfo
+             withMetaInfo minfo $ do
+              vs <- getContextArgs
+              let targettype = tt `piApply` vs
+              targettype <- rewrite Normalised targettype
+              localVars <- mapM (rewrite Normalised) localVars
+              dispmsg $ "Target type: " ++ show (localVars, targettype)
+
+insuffsols 0 = "No solution found"
+insuffsols n = "Only " ++ show n ++ " solution(s) were found"
+
+data Mode = MNormal Bool  -- true if list mode
+          | MDumpProblem (Maybe String)  -- Just filename to dump as agsy file or Nothing to show the problem in internal agda format
+
+parseargs s =
+ let r ("-t" : timeout : ws) (_, pick, mode) =
+      r ws (read timeout, pick, mode)
+     r ("-s" : pick : ws) (timeout, _, mode) =
+      r ws (timeout, read pick, mode)
+     r ("-dump" : dumpfile : ws) (timeout, pick, _) =
+      r ws (timeout, pick, MDumpProblem (Just dumpfile))
+     r ("-dumpa" : ws) (timeout, pick, _) =
+      r ws (timeout, pick, MDumpProblem Nothing)
+     r ("-l" : ws) (timeout, pick, _) =
+      r ws (timeout, pick, MNormal True)
+     r (h : ws) x =
+      let (hints, timeout, pick, mode) = r ws x
+      in  (h : hints, timeout, pick, mode)
+     r [] (x,y,z) = ([],x,y,z)
+ in  r (words s) (1, 0, MNormal False)
+
+
diff --git a/src/full/Agda/Auto/Convert.hs b/src/full/Agda/Auto/Convert.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Auto/Convert.hs
@@ -0,0 +1,440 @@
+module Agda.Auto.Convert where
+
+import Data.IORef
+import Data.Map (Map)
+import qualified Data.Map as Map
+import Control.Monad.State
+import Control.Monad.Error
+
+import qualified Agda.Syntax.Literal as I
+import qualified Agda.Syntax.Internal as I
+import qualified Agda.Syntax.Common as C
+import qualified Agda.Syntax.Abstract.Name as AN
+import qualified Agda.TypeChecking.Monad.Base as MB
+import Agda.TypeChecking.Monad.Signature (getConstInfo)
+import Agda.Utils.Permutation (Permutation(Perm))
+import Agda.Interaction.BasicOps (rewrite, Rewrite(..))
+import Agda.TypeChecking.Monad.Base (mvJudgement, getMetaInfo, ctxEntry, envContext, clEnv, Judgement(HasType))
+import Agda.TypeChecking.Monad.MetaVars (lookupMeta, withMetaInfo)
+import Agda.TypeChecking.Monad.Context (getContextArgs)
+import Agda.TypeChecking.Monad.Constraints (lookupConstraint, getConstraints)
+import Agda.TypeChecking.Substitute (piApply)
+import Agda.TypeChecking.Reduce (Normalise, normalise)
+import Agda.TypeChecking.EtaContract (etaContract)
+import Agda.TypeChecking.Primitive (constructorForm)
+import Agda.TypeChecking.Free (freeIn)
+
+import Agda.Auto.NarrowingSearch
+import Agda.Auto.Syntax
+
+
+norm :: Normalise t => t -> MB.TCM t
+norm x = normalise x
+
+type O = (Maybe Int, AN.QName)  -- Nothing - Def, Just npar - Con with npar parameters which don't appear in Agda
+
+data TMode = TMAll  -- can be extended to distinguish between different modes (all, only def)
+ deriving Eq
+
+type MapS a b = (Map a b, [a])
+initMapS = (Map.empty, [])
+popMapS r w = do (m, xs) <- gets r
+                 case xs of
+                  [] -> return Nothing
+                  (x:xs) -> do
+                   modify (w (m, xs))
+                   return $ Just x
+
+data S = S {sConsts :: MapS AN.QName (TMode, ConstRef O),
+            sMetas :: MapS I.MetaId (Metavar (Exp O) (RefInfo O), Maybe (MExp O, [MExp O]), [I.MetaId]),
+            sEqs :: MapS Int (Maybe (Bool, MExp O, MExp O)),
+            sCurMeta :: Maybe I.MetaId
+           }
+
+type TOM = StateT S MB.TCM
+
+tomy :: I.MetaId -> [(Bool, AN.QName)] -> MB.TCM ([ConstRef O], Map I.MetaId (Metavar (Exp O) (RefInfo O), MExp O, [MExp O], [I.MetaId]), [(Bool, MExp O, MExp O)], Map AN.QName (TMode, ConstRef O))
+tomy imi icns = do
+ eqs <- getEqs
+ let
+  r :: TOM ()
+  r = do
+   nxt <- popMapS sConsts (\x y -> y {sConsts = x})
+   case nxt of
+    Just cn -> do
+     cmap <- fst `liftM` gets sConsts
+     let (mode, c) = cmap Map.! cn
+     def <- lift $ getConstInfo cn
+     let typ = MB.defType def
+         defn = MB.theDef def
+     typ <- lift $ norm typ
+     typ' <- tomyType typ
+     let clausesToDef clauses = do
+           clauses' <- tomyClauses clauses
+           let narg = case clauses of
+                        []                               -> 0
+                        I.Clause {I.clausePats = xs} : _ -> length xs
+           return $ Def narg clauses'
+     cont <- case defn of
+      MB.Axiom {} -> return Postulate
+      MB.Function  {MB.funClauses  =      clauses} -> clausesToDef clauses
+      MB.Primitive {MB.primClauses = Just clauses} -> clausesToDef clauses
+      MB.Primitive {} -> throwError $ strMsg "Primitive functions are not supported"
+      MB.Datatype {MB.dataCons = cons} -> do
+       cons' <- mapM (\con -> getConst True con TMAll) cons
+       return $ Datatype cons'
+      MB.Record {MB.recConType = contyp} -> do
+       contyp' <- tomyType contyp
+       cc <- lift $ liftIO $ readIORef c
+       let Datatype [con] = cdcont cc
+       lift $ liftIO $ modifyIORef con (\cdef -> cdef {cdtype = contyp'})
+       return $ cdcont cc
+      MB.Constructor {} -> return Constructor
+     lift $ liftIO $ modifyIORef c (\cdef -> cdef {cdtype = typ', cdcont = cont})
+     r
+    Nothing -> do
+     nxt <- popMapS sMetas (\x y -> y {sMetas = x})
+     case nxt of
+      Just mi -> do
+       mapM_ (\((_, e, i), eqi) -> do
+         when (fmExp mi e || fmExp mi i) $ do
+          (eqsm, eqsl) <- gets sEqs
+          when (Map.notMember eqi eqsm) $ do
+           modify $ \s -> s {sEqs = (Map.insert eqi Nothing eqsm, eqi : eqsl)}
+        ) (zip eqs [0..])
+       mv <- lift $ lookupMeta mi
+       msol <- case MB.mvInstantiation mv of
+                     MB.InstV{} ->
+                      lift $ withMetaInfo (getMetaInfo mv) $ do
+                       args  <- getContextArgs
+                       sol <- norm (I.MetaV mi args)
+                       return $ Just sol
+                     _ -> return Nothing
+       case msol of
+        Nothing -> return ()
+        Just sol -> do
+         m <- getMeta mi
+         sol' <- tomyExp sol
+         modify $ \s -> s {sEqs = (Map.insert (Map.size (fst $ sEqs s)) (Just (False, Meta m, sol')) (fst $ sEqs s), snd $ sEqs s)}
+       let HasType _ tt = mvJudgement mv
+           minfo = getMetaInfo mv
+           localVars = map (snd . C.unArg . ctxEntry) . envContext . clEnv $ minfo
+       (targettype, localVars) <- lift $ withMetaInfo minfo $ do
+        vs <- getContextArgs
+        let targettype = tt `piApply` vs
+        targettype <- norm targettype
+        localVars <- mapM norm localVars
+        return (targettype, localVars)
+       modify (\s -> s {sCurMeta = Just mi})
+       typ' <- tomyType targettype
+       ctx' <- mapM tomyType localVars
+       modify (\s -> s {sCurMeta = Nothing})
+       modify (\s -> s {sMetas = (Map.adjust (\(m, Nothing, deps) -> (m, Just (typ', ctx'), deps)) mi (fst $ sMetas s), snd $ sMetas s)})
+       r
+      Nothing -> do
+       nxt <- popMapS sEqs (\x y -> y {sEqs = x})
+       case nxt of
+        Just eqi -> do
+         let (ineq, e, i) = eqs !! eqi
+         e' <- tomyExp e
+         i' <- tomyExp i
+         modify (\s -> s {sEqs = (Map.adjust (\Nothing -> Just (ineq, e', i')) eqi (fst $ sEqs s), snd $ sEqs s)})
+         r
+        Nothing ->
+         return ()
+ (icns', s) <- runStateT
+  (do _ <- getMeta imi
+      icns' <- mapM (\(iscon, name) -> getConst iscon name TMAll) icns
+      r
+      return icns'
+  ) (S {sConsts = initMapS, sMetas = initMapS, sEqs = initMapS, sCurMeta = Nothing})
+ return (icns', Map.map (\(x, Just (y, z), w) -> (x, y, z, w)) (fst (sMetas s)), map (\(Just x) -> x) $ Map.elems (fst (sEqs s)), fst (sConsts s))
+ where
+
+getConst :: Bool -> AN.QName -> TMode -> TOM (ConstRef O)
+getConst iscon name mode = do
+ def <- lift $ getConstInfo name
+ case MB.theDef def of
+  MB.Record{} -> do
+   cmap <- fst `liftM` gets sConsts
+   case Map.lookup name cmap of
+    Just (mode', c) ->
+     if iscon then do
+      cd <- lift $ liftIO $ readIORef c
+      let Datatype [con] = cdcont cd
+      return con
+     else
+      return c
+    Nothing -> do
+     def <- lift $ getConstInfo name
+     ccon <- lift $ liftIO $ newIORef (ConstDef {cdname = show name, cdorigin = (Just (fromIntegral $ I.arity (MB.defType def)), name), cdtype = undefined, cdcont = Constructor})
+     c <- lift $ liftIO $ newIORef (ConstDef {cdname = show name, cdorigin = (Nothing, name), cdtype = undefined, cdcont = Datatype [ccon]})
+     modify (\s -> s {sConsts = (Map.insert name (mode, c) cmap, name : snd (sConsts s))})
+     return $ if iscon then ccon else c
+  _ -> do
+   cmap <- fst `liftM` gets sConsts
+   case Map.lookup name cmap of
+    Just (mode', c) ->
+     return c
+    Nothing -> do
+     iscon' <- if iscon then do
+       def <- lift $ getConstInfo name
+       let MB.Constructor {MB.conPars = npar} = MB.theDef def
+       return $ Just $ fromIntegral npar
+      else
+       return Nothing
+     c <- lift $ liftIO $ newIORef (ConstDef {cdname = show name, cdorigin = (iscon', name), cdtype = undefined, cdcont = undefined})
+     modify (\s -> s {sConsts = (Map.insert name (mode, c) cmap, name : snd (sConsts s))})
+     return c
+
+getMeta :: I.MetaId -> TOM (Metavar (Exp O) (RefInfo O))
+getMeta name = do
+ mmap <- fst `liftM` gets sMetas
+ case Map.lookup name mmap of
+  Just (m, _, _) ->
+   return m
+  Nothing -> do
+   m <- lift $ liftIO $ newMeta Nothing
+   modify (\s -> s {sMetas = (Map.insert name (m, Nothing, []) mmap, name : snd (sMetas s))})
+   return m
+
+getEqs :: MB.TCM [(Bool, I.Term, I.Term)]
+getEqs = do
+ eqs <- getConstraints
+ let r = mapM (\eqc -> do
+          neqc <- norm eqc
+          case MB.clValue neqc of
+           MB.ValueCmp ineq _ i e -> do
+            ei <- etaContract i
+            ee <- etaContract e
+            return [(tomyIneq ineq, ee, ei)]
+           MB.TypeCmp ineq i e -> do
+            I.El _ ei <- etaContract i
+            I.El _ ee <- etaContract e
+            return [(tomyIneq ineq, ee, ei)]
+           MB.Guarded (MB.UnBlock _) cs -> do
+            eqs' <- r cs
+            return $ concat eqs'
+           _ -> return []
+         )
+ eqs' <- r eqs
+ return $ concat eqs'
+
+
+tomyClauses [] = return []
+tomyClauses (cl:cls) = do
+ cl' <- tomyClause cl
+ cls' <- tomyClauses cls
+ return $ case cl' of
+  Just cl' -> cl' : cls'
+  Nothing -> cls'
+
+tomyClause I.Clause {I.clausePerm = Perm n ps, I.clausePats = pats, I.clauseBody = body} = do
+ pats' <- mapM tomyPat pats
+ body' <- tomyBody body
+ return $ case body' of
+           Just (body', _) -> Just (pats', body')
+           Nothing -> Nothing
+
+tomyPat p = case C.unArg p of
+ I.VarP _ -> return PatVar
+ I.DotP _ -> return PatExp
+ I.ConP n pats -> do
+  c <- getConst True n TMAll
+  pats' <- mapM tomyPat pats
+  def <- lift $ getConstInfo n
+  cc <- lift $ liftIO $ readIORef c
+  let Just npar = fst $ cdorigin cc
+  return $ PatConApp c (replicate (fromIntegral npar) PatExp ++ pats')
+ I.LitP _ -> throwError $ strMsg "Literals in patterns are not supported"
+
+tomyBody (I.Body t) = do
+ t <- lift $ norm t
+ t' <- tomyExp t
+ return $ Just (t', 0)
+tomyBody (I.Bind (I.Abs _ b)) = do
+ res <- tomyBody b
+ return $ case res of
+  Nothing -> Nothing
+  Just (b', i) -> Just (b', i + 1)
+tomyBody (I.NoBind b) = do
+ res <- tomyBody b
+ return $ case res of
+  Nothing -> Nothing
+  Just (b', i) -> Just (weaken i b', i + 1)
+tomyBody I.NoBody = return Nothing
+
+weaken :: Int -> MExp O -> MExp O
+weaken _ e@(Meta m) = e
+weaken i (NotM e) =
+ case e of
+  App elr as ->
+   let elr' = case elr of
+               Var v -> if v >= i then Var (v + 1) else elr
+               Const{} -> elr
+       as' = weakens i as
+   in  NotM $ App elr' as'
+  Lam hid (Abs mid t) ->
+   let t' = weaken (i + 1) t
+   in  NotM $ Lam hid (Abs mid t')
+  Pi hid possdep x (Abs mid y) -> 
+   let x' = weaken i x
+       y' = weaken (i + 1) y
+   in  NotM $ Pi hid possdep x' (Abs mid y')
+  Fun hid x y ->
+   let x' = weaken i x
+       y' = weaken i y
+   in  NotM $ Fun hid x' y'
+  Sort{} -> NotM e
+
+weakens :: Int -> MArgList O -> MArgList O
+weakens _ as@(Meta m) = as
+weakens i (NotM as) =
+ case as of
+  ALNil -> NotM as
+  ALCons hid x xs ->
+   let x' = weaken i x
+       xs' = weakens i xs
+   in  NotM $ ALCons hid x' xs'
+  ALConPar xs ->
+   let xs' = weakens i xs
+   in  NotM $ ALConPar xs'
+
+
+tomyType :: I.Type -> TOM (MExp O)
+tomyType (I.El _ t) = tomyExp t  -- sort info is thrown away
+
+tomyExp :: I.Term -> TOM (MExp O)
+tomyExp (I.Var v as) = do
+ as' <- tomyExps as
+ return $ NotM $ App (Var $ fromIntegral v) as'
+tomyExp (I.Lam hid (I.Abs name b)) = do
+ b' <- tomyExp b
+ return $ NotM $ Lam (cnvh hid) (Abs (Id name) b')
+tomyExp t@(I.Lit{}) = do
+ t <- lift $ constructorForm t
+ case t of
+  I.Lit{} -> throwError $ strMsg "Literals in terms are not supported"
+  _ -> tomyExp t
+tomyExp (I.Def name as) = do
+ c <- getConst False name TMAll
+ as' <- tomyExps as
+ return $ NotM $ App (Const c) as'
+tomyExp (I.Con name as) = do
+ c <- getConst True name TMAll
+ as' <- tomyExps as
+ def <- lift $ getConstInfo name
+ cc <- lift $ liftIO $ readIORef c
+ let Just npar = fst $ cdorigin cc
+ return $ NotM $ App (Const c) (foldl (\x _ -> NotM $ ALConPar x) as' [1..npar])
+tomyExp (I.Pi (C.Arg hid x) (I.Abs name y)) = do
+ x' <- tomyType x
+ y' <- tomyType y
+ return $ NotM $ Pi (cnvh hid) (freeIn 0 y) x' (Abs (Id name) y')
+tomyExp (I.Fun (C.Arg hid x) y) = do
+ x' <- tomyType x
+ y' <- tomyType y
+ return $ NotM $ Fun (cnvh hid) x' y'
+tomyExp (I.Sort (I.Type (I.Lit (I.LitLevel _ l)))) = return $ NotM $ Sort $ SortLevel $ fromIntegral l
+tomyExp (I.Sort (I.MetaS _ _)) = throwError $ strMsg "Searching for type place holders is not supported"
+tomyExp t@(I.Sort _) = throwError $ strMsg $ "Meta variable kind not supported: " ++ show t
+tomyExp (I.MetaV mid _) = do
+ mcurmeta <- gets sCurMeta
+ case mcurmeta of
+  Nothing -> return ()
+  Just curmeta ->
+   modify (\s -> s {sMetas = (Map.adjust (\(m, x, deps) -> (m, x, mid : deps)) curmeta (fst $ sMetas s), snd $ sMetas s)})
+ m <- getMeta mid
+ return $ Meta m
+
+tomyExps [] = return $ NotM ALNil
+tomyExps (C.Arg hid a : as) = do
+ a' <- tomyExp a
+ as' <- tomyExps as
+ return $ NotM $ ALCons (cnvh hid) a' as'
+
+tomyIneq MB.CmpEq = False
+tomyIneq MB.CmpLeq = True
+
+-- ---------------------------------------------
+
+fmType :: I.MetaId -> I.Type -> Bool
+fmType m (I.El _ t) = fmExp m t
+
+fmExp :: I.MetaId -> I.Term -> Bool
+fmExp m (I.Var _ as) = fmExps m as
+fmExp m (I.Lam _ (I.Abs _ b)) = fmExp m b
+fmExp m (I.Lit _) = False
+fmExp m (I.Def _ as) =  fmExps m as
+fmExp m (I.Con _ as) =  fmExps m as
+fmExp m (I.Pi (C.Arg _ x) (I.Abs _ y)) = fmType m x || fmType m y
+fmExp m (I.Fun (C.Arg _ x) y) = fmType m x || fmType m y
+fmExp m (I.Sort _) = False
+fmExp m (I.MetaV mid _) = mid == m
+
+fmExps m [] = False
+fmExps m (C.Arg _ a : as) = fmExp m a || fmExps m as
+
+-- ---------------------------------------------
+
+cnvh C.NotHidden = NotHidden
+cnvh C.Hidden = Hidden
+icnvh NotHidden = C.NotHidden
+icnvh Hidden = C.Hidden
+
+-- ---------------------------------------------
+
+frommy = frommyExp
+
+frommyType e = do
+ e' <- frommyExp e
+ return $ I.El (I.mkType 0) e'  -- 0 is arbitrary, sort no read by Agda when reifying
+
+frommyExp :: MExp O -> IO I.Term
+frommyExp (Meta m) = do
+ bind <- readIORef $ mbind m
+ case bind of
+  Nothing -> error "frommyExp: meta not bound"
+  Just e -> frommyExp (NotM e)
+frommyExp (NotM e) =
+ case e of
+  App (Var v) as -> do
+   as' <- frommyExps 0 as
+   return $ I.Var (fromIntegral v) as'
+  App (Const c) as -> do
+   cdef <- readIORef c
+   let (iscon, name) = cdorigin cdef
+       (ndrop, h) = case iscon of {Just n -> (n, I.Con); Nothing -> (0, I.Def)}
+   as' <- frommyExps ndrop as
+   return $ h name as'
+  Lam hid (Abs mid t) -> do
+   t' <- frommyExp t
+   return $ I.Lam (icnvh hid) (I.Abs (case mid of {NoId -> "x"; Id id -> id}) t')
+  Pi hid _ x (Abs mid y) -> do
+   x' <- frommyType x
+   y' <- frommyType y
+   return $ I.Pi (C.Arg (icnvh hid) x') (I.Abs (case mid of {NoId -> "x"; Id id -> id}) y')
+  Fun hid x y -> do
+   x' <- frommyType x
+   y' <- frommyType y
+   return $ I.Fun (C.Arg (icnvh hid) x') y'
+  Sort (SortLevel l) ->
+   return $ I.Sort (I.mkType (fromIntegral l))
+  Sort Type -> error "frommyExp: Sort Type encountered"
+
+frommyExps :: Nat -> MArgList O -> IO I.Args
+frommyExps ndrop (Meta m) = do
+ bind <- readIORef $ mbind m
+ case bind of
+  Nothing -> error "frommyExps: meta not bound"
+  Just e -> frommyExps ndrop (NotM e)
+frommyExps ndrop (NotM as) =
+ case as of
+  ALNil -> return []
+  ALCons _ _ xs | ndrop > 0 -> frommyExps (ndrop - 1) xs
+  ALCons hid x xs -> do
+   x' <- frommyExp x
+   xs' <- frommyExps ndrop xs
+   return $ C.Arg (icnvh hid) x' : xs'
+  ALConPar _ -> error "ConPar should not occur here"
+
diff --git a/src/full/Agda/Auto/NarrowingSearch.hs b/src/full/Agda/Auto/NarrowingSearch.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Auto/NarrowingSearch.hs
@@ -0,0 +1,637 @@
+{-# OPTIONS -fglasgow-exts #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Agda.Auto.NarrowingSearch where
+
+import Data.IORef hiding (writeIORef, modifyIORef)
+import qualified Data.IORef as NoUndo (writeIORef, modifyIORef)
+import Control.Monad.State
+import Data.Char
+
+
+type Prio = Int
+
+class Trav a blk | a -> blk where
+ traverse :: Monad m => (forall b . Trav b blk => MM b blk -> m ()) -> a -> m ()
+
+instance Trav a blk => Trav (MM a blk) blk where
+ traverse f me = f me
+
+data Term blk = forall a . Trav a blk => Term a
+
+data Prop blk = OK
+								      | Error String
+								      | And (Maybe [Term blk]) (MetaEnv (PB blk)) (MetaEnv (PB blk))
+								      | Or Prio (MetaEnv (PB blk)) (MetaEnv (PB blk))
+
+runProp :: MetaEnv (PB blk) -> MetaEnv ()
+runProp x = do
+ x <- x
+ case x of
+  PBlocked _ _ _ _ -> putStr "<blocked>"
+  PDoubleBlocked _ _ _ -> putStr "<double blocked>"
+  NotPB x -> case x of
+   OK -> putStr "OK"
+   Error s -> putStr $ "(Error: " ++ s ++ ")"
+   And _ x1 x2 -> do
+    putStr "(And "
+    runProp x1
+    putStr " "
+    runProp x2
+    putStr ")"
+   Or _ x1 x2 -> do
+    putStr "(Or "
+    runProp x1
+    putStr " "
+    runProp x2
+    putStr ")"
+
+data Metavar a blk = Metavar
+ {mbind :: IORef (Maybe a),
+  mprincipalpresent :: IORef Bool,
+  mobs :: IORef [(QPB a blk, CTree blk)],
+  mcompoint :: IORef (Maybe (SubConstraints blk))
+ }
+
+hequalMetavar :: Metavar a1 blk1 -> Metavar a2 bkl2 -> Bool
+hequalMetavar m1 m2 = mprincipalpresent m1 == mprincipalpresent m2
+
+newMeta :: Maybe (SubConstraints blk) -> IO (Metavar a blk)
+newMeta mcompoint = do
+ bind <- newIORef Nothing
+ pp <- newIORef False
+ obs <- newIORef []
+ cp <- newIORef mcompoint
+ return $ Metavar bind pp obs cp
+
+data CTree blk = CTree
+ {ctpriometa :: IORef (PrioMeta blk),
+  ctsub :: IORef (Maybe (SubConstraints blk)),
+  ctparent :: IORef (Maybe (CTree blk))  -- Nothing - root
+ }
+
+data SubConstraints blk = SubConstraints
+ {scflip :: IORef Bool,
+  sccomcount :: IORef Int,
+  scsub1 :: CTree blk,
+  scsub2 :: CTree blk
+ }
+
+
+newCTree :: Maybe (CTree blk) -> IO (CTree blk)
+newCTree parent = do
+ priometa <- newIORef (NoPrio False)
+ sub <- newIORef Nothing
+ rparent <- newIORef parent
+ return $ CTree priometa sub rparent
+
+newSubConstraints :: CTree blk -> IO (SubConstraints blk)
+newSubConstraints node = do
+ flip <- newIORef False
+ comcount <- newIORef 0
+ sub1 <- newCTree $ Just node
+ sub2 <- newCTree $ Just node
+ return $ SubConstraints flip comcount sub1 sub2
+
+
+data PrioMeta blk = forall a . Refinable a blk => PrioMeta Prio (Metavar a blk)
+                  | NoPrio Bool  -- True if subconstraint is done (all OK)
+
+instance Eq (PrioMeta blk) where
+ NoPrio d1 == NoPrio d2 = d1 == d2
+ PrioMeta p1 m1 == PrioMeta p2 m2 = p1 == p2 && hequalMetavar m1 m2
+ _ == _ = False
+
+-- -----------------------
+
+data Restore = forall a . Restore (IORef a) a
+
+type Undo = StateT [Restore] IO
+
+ureadIORef :: IORef a -> Undo a
+ureadIORef ptr = lift $ readIORef ptr
+
+uwriteIORef :: IORef a -> a -> Undo ()
+uwriteIORef ptr newval = do
+ oldval <- ureadIORef ptr
+ modify (Restore ptr oldval :)
+ lift $ NoUndo.writeIORef ptr newval
+
+umodifyIORef :: IORef a -> (a -> a) -> Undo ()
+umodifyIORef ptr f = do
+ oldval <- ureadIORef ptr
+ modify (Restore ptr oldval :)
+ lift $ NoUndo.writeIORef ptr (f oldval)
+
+ureadmodifyIORef :: IORef a -> (a -> a) -> Undo a
+ureadmodifyIORef ptr f = do
+ oldval <- ureadIORef ptr
+ modify (Restore ptr oldval :)
+ lift $ NoUndo.writeIORef ptr (f oldval)
+ return oldval
+
+runUndo :: Undo a -> IO a
+runUndo x = do
+ (res, restores) <- runStateT x []
+ mapM_ (\(Restore ptr oldval) -> NoUndo.writeIORef ptr oldval) restores
+ return res
+
+-- -----------------------
+
+type RefCreateEnv blk = StateT (Maybe (SubConstraints blk), Int) IO
+
+class Refinable a blk | a -> blk where
+ refinements :: blk -> [blk] -> IO [(Int, RefCreateEnv blk a)]
+ printref :: a -> IO String
+
+newPlaceholder :: RefCreateEnv blk (MM a blk)
+newPlaceholder = do
+ (mcompoint, c) <- get
+ put (mcompoint, c + 1)
+ m <- lift $ newMeta mcompoint
+ return $ Meta m
+
+dryInstantiate :: RefCreateEnv blk a -> IO a
+dryInstantiate bind = evalStateT bind (Nothing, 0)
+
+type BlkInfo blk = (Bool, Prio, Maybe blk)  -- Bool - is principal
+
+data MM a blk = NotM a
+              | Meta (Metavar a blk)
+
+type MetaEnv = IO
+
+type PrintConstr = MetaEnv String
+
+data MB a blk = NotB a
+              | forall b . Refinable b blk => Blocked (Metavar b blk) (MetaEnv (MB a blk))
+              | Failed String
+
+data PB blk = NotPB (Prop blk)
+            | forall b . Refinable b blk => PBlocked (Metavar b blk) (BlkInfo blk) PrintConstr (MetaEnv (PB blk))
+            | forall b . Refinable b blk => PDoubleBlocked (Metavar b blk) (Metavar b blk) (MetaEnv (PB blk))
+
+data QPB b blk = QPBlocked (BlkInfo blk) PrintConstr (MetaEnv (PB blk))
+               | QPDoubleBlocked (IORef Bool) (MetaEnv (PB blk))  -- flag set True by first observer that continues
+
+mmcase :: Refinable a blk => MM a blk -> (a -> MetaEnv (MB b blk)) -> MetaEnv (MB b blk)
+mmcase x f = case x of
+ NotM x -> f x
+ x@(Meta m) -> do
+  bind <- readIORef $ mbind m
+  case bind of
+   Just x -> f x
+   Nothing -> return $ Blocked m (mmcase x f)
+
+mmmcase :: Refinable a blk => MM a blk -> MetaEnv (MB b blk) -> (a -> MetaEnv (MB b blk)) -> MetaEnv (MB b blk)
+mmmcase x fm f = case x of
+ NotM x -> f x
+ Meta m -> do
+  bind <- readIORef $ mbind m
+  case bind of
+   Just x -> f x
+   Nothing -> fm
+
+mmpcase :: Refinable a blk => BlkInfo blk -> MM a blk -> PrintConstr -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)
+mmpcase blkinfo x pr f = case x of
+ NotM x -> f x
+ x@(Meta m) -> do
+  bind <- readIORef $ mbind m
+  case bind of
+   Just x -> f x
+   Nothing -> return $ PBlocked m blkinfo pr (mmpcase (error "blkinfo not needed because will be notb next time") x pr f)
+
+doubleblock :: Refinable a blk => MM a blk -> MM a blk -> MetaEnv (PB blk) -> MetaEnv (PB blk)
+doubleblock (Meta m1) (Meta m2) cont = return $ PDoubleBlocked m1 m2 cont
+doubleblock _ _ _ = error "doubleblock: this case should not occur"
+
+mbcase :: MetaEnv (MB a blk) -> (a -> MetaEnv (MB b blk)) -> MetaEnv (MB b blk)
+mbcase x f = do
+ x' <- x
+ case x' of
+  NotB x -> f x
+  Blocked m x -> return $ Blocked m (mbcase x f)
+  Failed msg -> return $ Failed msg
+
+mbpcase :: Prio -> MetaEnv (MB a blk) -> PrintConstr -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)
+mbpcase prio x pr f = do
+ x' <- x
+ case x' of
+  NotB x -> f x
+  Blocked m x -> return $ PBlocked m (False, prio, Nothing) pr (mbpcase prio x pr f)
+  Failed msg -> return $ NotPB $ Error msg
+
+mmbpcase :: MetaEnv (MB a blk) -> MetaEnv (PB blk) -> (a -> MetaEnv (PB blk)) -> MetaEnv (PB blk)
+mmbpcase x fm f = do
+ x' <- x
+ case x' of
+  NotB x -> f x
+  Blocked m x -> fm
+  Failed msg -> return $ NotPB $ Error msg
+
+mbret :: a -> MetaEnv (MB a blk)
+mbret x = return $ NotB x
+
+mbfailed :: String -> MetaEnv (MB a blk)
+mbfailed msg = return $ Failed msg
+
+mpret :: Prop blk -> MetaEnv (PB blk)
+mpret p = return $ NotPB p
+
+-- -----------------------
+
+type HandleSol = IO ()
+type HandlePartSol = IO ()
+
+type SRes = Either Bool Int
+
+topSearch :: forall blk . IORef Int -> IORef Int -> HandleSol -> HandlePartSol -> Bool -> blk -> MetaEnv (PB blk) -> Int -> Int -> IO Bool
+topSearch ticks nsol hsol hpartsol inter envinfo p depth depthinterval = do
+ depthreached <- newIORef False
+ exitinteractive <- newIORef False
+
+ let
+  searchSubProb :: [(CTree blk, Maybe (IORef Bool))] -> Int -> IO SRes
+  searchSubProb [] depth = do
+   when (depth < depthinterval) $ do
+    hsol
+    n <- readIORef nsol
+    NoUndo.writeIORef nsol $! n - 1
+    when inter (getChar >> return ())
+   return $ Left True
+  searchSubProb ((root, firstdone) : restprobs) depth =
+   let
+    search :: Int -> IO SRes
+    search depth = do
+     pm <- readIORef $ ctpriometa root
+     case pm of
+      NoPrio False -> error "NarrowingSearch.search: nothing to refine but not done"
+      NoPrio True ->
+       searchSubProb restprobs depth  -- ?? what should depth be
+      PrioMeta _ m -> do
+       let carryon = (if inter then forki else fork) m depth
+       sub <- readIORef $ ctsub root
+       case sub of
+        Nothing -> carryon
+        Just sc -> do
+         let sub1 = scsub1 sc
+             sub2 = scsub2 sc
+         pm1 <- readIORef $ ctpriometa sub1
+         pm2 <- readIORef $ ctpriometa sub2
+         let split = carryon  -- split disabled
+         {-let split = runUndo $ do
+              uwriteIORef (ctparent sub1) Nothing
+              uwriteIORef (ctparent sub2) Nothing
+              done <- lift $ newIORef False
+              flip <- lift $ readIORef $ scflip sc
+              let pmmax = choosePrioMeta flip pm1 pm2
+              if pmmax == pm1 then
+                lift $ searchSubProb ((sub1, Nothing) : (sub2, Just done) : restprobs) depth  -- ?? what should depth be
+               else
+                lift $ searchSubProb ((sub2, Nothing) : (sub1, Just done) : restprobs) depth  -- ?? what should depth be-}
+         case pm1 of
+          NoPrio True -> split
+          _ ->
+           case pm2 of
+            NoPrio True -> split
+            _ -> do
+             comc <- readIORef $ sccomcount sc
+             case comc of
+              0 -> split
+              _ -> carryon
+
+    fork :: Refinable a blk => Metavar a blk -> Int -> IO SRes
+    fork m depth = do
+      blkinfos <- extractblkinfos m
+      refs <- refinements envinfo blkinfos
+      f refs
+     where
+      f [] = return (Left False)
+      f ((cost, bind) : binds) = hsres (refine m bind (depth - cost)) (f binds)
+
+    forki :: Refinable a blk => Metavar a blk -> Int -> IO SRes
+    forki m depth = do
+     blkinfos <- extractblkinfos m
+     refs <- refinements envinfo blkinfos
+     direfs <- mapM dryInstantiate (map snd refs)
+     descs <- mapM printref direfs
+     let loop deflt = do
+          putStr "\x1b[2J\x1b[0;0H"
+          printCTree root >> putStrLn ""
+          putStrLn $ "depth: " ++ show depth
+          hpartsol
+          putStrLn "----------------------------------------------"
+          obs <- readIORef (mobs m)
+          let pqpb (QPBlocked _ pr _) = pr
+              pqpb (QPDoubleBlocked _ _) = return "double blocked"
+          mapM_ (\obs -> do
+            pc <- pqpb $ fst obs
+            putStrLn pc
+           ) obs
+          putStrLn "----------------------------------------------"
+          mapM_ (\(desc, (cost, i)) ->
+            putStrLn $ (if i == deflt then "*" else " ") ++ show (i + 1) ++ ": " ++ desc ++ " (" ++ show cost ++ ")"
+           ) (zip descs (zip (map fst refs) [0..]))
+          when (deflt == length descs) $ putStrLn "* : BACK"
+          putStr "<"
+          c <- getChar
+          putStrLn "\n"
+          case c of
+           _ | isDigit c ->
+            let choice = ord c - ord '1'
+            in  hsres (refine m (snd $ refs !! choice) (depth - fst (refs !! choice))) $ do
+             e <- readIORef exitinteractive
+             if not e then
+               loop (choice + 1)
+              else
+               return $ Left False
+           '\x7f' -> return (Left False)
+           '\x1b' -> do NoUndo.writeIORef exitinteractive True
+                        return (Left False)
+           '\n' -> if deflt == length descs then
+                    return (Left False)
+                   else
+                    hsres (refine m (snd $ refs !! deflt) (depth - fst (refs !! deflt))) $ do
+                     e <- readIORef exitinteractive
+                     if not e then
+                       loop (deflt + 1)
+                      else
+                       return $ Left False
+           _ -> error $ "unknown char: " ++ show (ord c)
+     loop 0
+
+    hsres :: IO SRes -> IO SRes -> IO SRes
+    hsres x1 x2 = do
+     res <- x1
+     case res of
+      Right _ -> return res
+      Left found -> do
+       n <- readIORef nsol
+       if n == 0 then
+         return res
+        else do
+         res2 <- x2
+         case res2 of
+          Right _ -> if found then error "hsres: this should not happen" else return res2
+          Left found2 -> return $ Left (found || found2)
+
+    refine :: Metavar a blk -> RefCreateEnv blk a -> Int -> IO SRes
+    refine _ _ depth | depth < 0 = do
+     NoUndo.writeIORef depthreached True
+     return $ Left False
+    refine m bind depth = runUndo $
+     do mcomptr <- ureadIORef (mcompoint m)
+        t <- lift $ readIORef ticks
+        lift $ NoUndo.writeIORef ticks $! t + 1
+        (bind, (_, nnewmeta)) <- lift $ runStateT bind (mcomptr, 0)
+
+{-
+        ob <- ureadIORef (mbind m)
+        case ob of
+         Just _ -> error "meta already bound"
+         Nothing -> return ()
+-}
+
+        uwriteIORef (mbind m) (Just bind)
+        case mcomptr of
+         Nothing -> return ()
+         Just comptr -> do
+          umodifyIORef (sccomcount comptr) (+ (nnewmeta - 1))
+          umodifyIORef (scflip comptr) not
+        obs <- ureadIORef (mobs m)
+        res <- recalcs obs
+        case res of
+         True ->  -- failed
+          return $ Left False
+         False -> lift $ search depth  -- succeeded
+
+    doit = do
+     res <- search depth
+     return $ case res of
+      Right n ->
+       case firstdone of
+        Nothing ->
+         if n == 0 then
+          Left False
+         else
+          Right (n - 1)
+        Just _ ->
+         Right (n + 1)
+      res@(Left True) -> res
+      res@(Left False) ->
+       case firstdone of
+        Nothing -> res
+        Just _ -> Right 0
+   in
+    case firstdone of
+     Nothing -> doit
+     Just rdone -> do
+      done <- readIORef rdone
+      if done then
+        searchSubProb restprobs depth
+       else do
+        NoUndo.writeIORef rdone True
+        doit
+
+ root <- newCTree Nothing
+ runUndo $ do
+  res <- reccalc p root
+  case res of
+   True ->  -- failed immediately
+    return False
+   False -> do
+    Left solfound <- lift $ searchSubProb [(root, Nothing)] depth
+    dr <- lift $ readIORef depthreached
+    return dr
+
+extractblkinfos :: Metavar a blk -> IO [blk]
+extractblkinfos m = do
+ obs <- readIORef $ mobs m
+ return $ f obs
+ where
+  f [] = []
+  f ((QPBlocked (_,_,mblkinfo) _ _, _) : cs) =
+   case mblkinfo of
+    Nothing -> f cs
+    Just blkinfo -> blkinfo : f cs
+  f ((QPDoubleBlocked _ _, _) : cs) = f cs
+
+recalcs :: [(QPB a blk, CTree blk)] -> Undo Bool
+recalcs [] = return False
+recalcs (c : cs) = seqc (recalc c) (recalcs cs)
+
+seqc :: Undo Bool -> Undo Bool -> Undo Bool
+seqc x y = do
+ res1 <- x
+ case res1 of
+  res1@True -> return res1
+  False -> y
+
+recalc :: (QPB a blk, CTree blk) -> Undo Bool
+recalc (con, node) =
+ case con of
+  QPBlocked _ _ cont -> reccalc cont node
+  QPDoubleBlocked flag cont -> do
+   fl <- ureadIORef flag
+   if fl then
+     return False
+    else do
+     uwriteIORef flag True
+     reccalc cont node
+
+reccalc :: MetaEnv (PB blk) -> CTree blk -> Undo Bool
+reccalc cont node = calc cont node
+
+calc :: forall blk . MetaEnv (PB blk) -> CTree blk -> Undo Bool
+calc cont node = do
+  res <- donewp node cont
+  case res of
+   Just _ -> do
+    propagatePrio node
+    return False
+   Nothing -> return True
+ where
+  storeprio node pm = do
+   uwriteIORef (ctpriometa node) pm
+   return $ Just pm
+  donewp node p = do
+   bp <- lift p
+   case bp of
+    NotPB p ->
+     doprop node p
+    PBlocked m blkinfo pr cont -> do
+     oldobs <- ureadmodifyIORef (mobs m) ((QPBlocked blkinfo pr cont, node) :)
+     let (princ, prio, _) = blkinfo
+     if princ then do
+       uwriteIORef (mprincipalpresent m) True
+       mapM_ (\(qpb, node) -> do
+         let priometa = case qpb of
+                      QPBlocked (_, prio, _) _ _ -> PrioMeta prio m
+                      QPDoubleBlocked _ _ -> NoPrio False
+         uwriteIORef (ctpriometa node) priometa
+         propagatePrio node
+        ) oldobs
+       storeprio node (PrioMeta prio m)
+      else do
+       pp <- ureadIORef (mprincipalpresent m)
+       if pp then
+         storeprio node (PrioMeta prio m)
+        else
+         storeprio node (NoPrio False)
+    PDoubleBlocked m1 m2 cont -> do
+     flag <- lift $ newIORef False
+     let newobs = ((QPDoubleBlocked flag cont, node) :)
+     umodifyIORef (mobs m1) newobs
+     umodifyIORef (mobs m2) newobs
+     storeprio node (NoPrio False)
+  doprop node p =
+   case p of
+    OK -> storeprio node (NoPrio True)
+    Error _ -> return Nothing
+    And coms p1 p2 -> do
+     sc <- lift $ newSubConstraints node
+
+{-
+     osc <- ureadIORef (ctsub node)
+     case osc of
+      Just _ -> error "sc already set"
+      Nothing -> return ()
+-}
+
+     uwriteIORef (ctsub node) $ Just sc
+     ndep <- case coms of
+      Nothing -> return 1  -- no metas pointing to it so will never decrement to 0
+      Just coms ->
+       liftM snd $ runStateT (mapM_ (\(Term x) ->
+         let f :: forall b . Trav b blk => MM b blk -> StateT Int Undo ()
+             f (NotM x) = traverse f x
+             f (Meta m) = do
+              mcomptr <- lift $ ureadIORef (mcompoint m)
+              case mcomptr of
+               Just _ -> return ()
+               Nothing -> do
+                bind <- lift $ ureadIORef $ mbind m
+                case bind of
+                 Just x -> traverse f x
+                 Nothing -> do
+                  lift $ uwriteIORef (mcompoint m) $ Just sc
+                  modify (+1)
+         in  traverse f x
+        ) coms) 0
+     lift $ NoUndo.writeIORef (sccomcount sc) ndep  -- OK since sc was just created
+     resp1 <- donewp (scsub1 sc) p1
+     case resp1 of
+      Just pm1 -> do
+       resp2 <- donewp (scsub2 sc) p2
+       case resp2 of
+        Just pm2 ->
+         storeprio node (choosePrioMeta False pm1 pm2)
+        resp2@Nothing -> return resp2
+      resp1@Nothing -> return resp1
+    Or prio p1 p2 -> do
+     cm <- lift $ newMeta Nothing
+     donewp node (choose (Meta cm) prio p1 p2)
+
+choosePrioMeta :: Bool -> PrioMeta blk -> PrioMeta blk -> PrioMeta blk
+choosePrioMeta flip pm1@(PrioMeta p1 _) pm2@(PrioMeta p2 _) = if p1 > p2 then pm1 else if p2 > p1 then pm2 else if flip then pm2 else pm1
+choosePrioMeta _ pm@(PrioMeta _ _) (NoPrio _) = pm
+choosePrioMeta _ (NoPrio _) pm@(PrioMeta _ _) = pm
+choosePrioMeta _ (NoPrio d1) (NoPrio d2) = NoPrio (d1 && d2)
+
+propagatePrio :: CTree blk -> Undo ()
+propagatePrio node = do
+ parent <- lift $ readIORef $ ctparent node
+ case parent of
+  Nothing -> return ()
+  Just parent -> do
+   Just sc <- ureadIORef (ctsub parent)
+   pm1 <- ureadIORef $ ctpriometa $ scsub1 sc
+   pm2 <- ureadIORef $ ctpriometa $ scsub2 sc
+   flip <- ureadIORef $ scflip sc
+   let pm = choosePrioMeta flip pm1 pm2
+   opm <- ureadIORef (ctpriometa parent)
+   if (not (pm == opm)) then do
+     uwriteIORef (ctpriometa parent) pm
+     propagatePrio parent
+    else
+     return ()
+
+data Choice = LeftDisjunct | RightDisjunct
+
+choose :: MM Choice blk -> Prio -> MetaEnv (PB blk) -> MetaEnv (PB blk) -> MetaEnv (PB blk)
+choose c prio p1 p2 =
+ mmpcase (True, prio, Nothing) c (return "choose") $ \c -> case c of
+  LeftDisjunct -> p1
+  RightDisjunct -> p2
+
+instance Refinable Choice blk where
+ refinements _ _ = return [(0, return LeftDisjunct), (0, return RightDisjunct)]  -- no cost to make a choice
+ printref LeftDisjunct = return "choose_left"
+ printref RightDisjunct = return "choose_right"
+
+-- ------------------------------------
+
+printCTree :: CTree blk -> IO ()
+printCTree t = do
+ pm <- readIORef $ ctpriometa t
+ sub <- readIORef $ ctsub t
+ putStr "("
+ putStr $ case pm of
+  NoPrio False -> "-"
+  NoPrio True -> "x"
+  PrioMeta p _ -> show p
+ case sub of
+  Nothing -> return ()
+  Just sc -> do
+   flip <- readIORef $ scflip sc
+   ct <- readIORef $ sccomcount sc
+   putStr ", "
+   putStr $ if flip then ">" else "<"
+   putStr ", "
+   putStr $ show ct
+   putStr ", "
+   printCTree $ scsub1 sc
+   putStr ", "
+   printCTree $ scsub2 sc
+ putStr ")"
+
diff --git a/src/full/Agda/Auto/Print.hs b/src/full/Agda/Auto/Print.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Auto/Print.hs
@@ -0,0 +1,129 @@
+module Agda.Auto.Print where
+
+import Data.IORef
+import Data.Char
+
+import Agda.Auto.NarrowingSearch
+import Agda.Auto.Syntax
+
+printExp :: [MId] -> MExp o -> IO String
+printExp = pexp 0
+
+pexp :: Int -> [MId] -> MExp o -> IO String
+pexp p ctx e = case e of
+ Meta m -> do
+  bind <- readIORef $ mbind m
+  case bind of
+   Nothing -> return "?"
+   Just e -> pexp p ctx (NotM e)
+ NotM e -> case e of  
+  App elr args -> do
+   let p' = case args of {NotM ALNil -> 4; _ -> 3}
+   elr' <- pelr ctx elr
+   args' <- pargs ctx args
+   par p p' $ elr' ++ args'
+  Lam _ (Abs id b) -> do
+   b' <- pexp 1 (id : ctx) b
+   par p 1 $ "\\" ++ pid ctx id ++ " -> " ++ b'
+  Fun _ it ot -> do
+   it' <- pexp 3 ctx it
+   ot' <- pexp 2 ctx ot
+   par p 2 $ it' ++ " -> " ++ ot'
+  Pi _ _ it (Abs id ot) -> do
+   it' <- pexp 1 ctx it
+   ot' <- pexp 2 (id : ctx) ot
+   par p 2 $ "[" ++ pid ctx id ++ ":" ++ it' ++ "] -> " ++ ot'
+  Sort (SortLevel 0) -> par p 4 "*"
+  Sort (SortLevel n) -> par p 4 $ "*" ++ show n
+  Sort Type -> par p 4 "Type"
+
+pid :: [MId] -> MId -> String
+pid _ (Id s) = printId s
+pid ctx NoId = "\"#" ++ show (length ctx) ++ "\""
+
+par :: Monad m => Int -> Int -> String -> m String
+par n1 n2 s | n1 > n2 = return $ "(" ++ s ++ ")"
+par _ _ s = return s
+
+pelr :: [MId] -> Elr o -> IO String
+pelr ctx elr = case elr of
+ Var v ->
+  if v >= length ctx then
+   return $ "@" ++ show (v - length ctx)
+  else
+   case ctx !! v of
+    Id v -> return $ printId v
+    NoId -> return $ "\"#" ++ show (length ctx - v - 1) ++ "\""
+ Const c -> do
+  c <- readIORef c
+  return $ printId (cdname c)
+
+pargs :: [MId] -> MArgList o -> IO String
+pargs ctx args = case args of
+ Meta m -> do
+  bind <- readIORef $ mbind m
+  case bind of
+   Nothing -> return "[?]"
+   Just args -> pargs ctx (NotM args)
+ NotM args -> case args of
+  ALNil -> return ""
+  ALCons _ arg args -> do
+   arg' <- pexp 4 ctx arg
+   args' <- pargs ctx args
+   return $ " " ++ arg' ++ args'
+  ALConPar args -> do
+   args' <- pargs ctx args
+   return $ " " ++ "$" ++ args'
+
+-- -----------------------------------
+
+printConst :: ConstRef o -> IO String
+printConst c = do
+ cdef <- readIORef c
+ typs <- printExp [] (cdtype cdef)
+ case cdcont cdef of
+  Def narg cls -> do
+   clss <- mapM printClause cls
+   return $ printId (cdname cdef) ++ " : " ++ typs ++ " {\n" ++ concatMap (\x -> x ++ "\n") clss ++ "};\n"
+  Datatype cons -> do
+   cons' <- mapM (\c -> do
+             cdef <- readIORef c
+             typs <- printExp [] (cdtype cdef)
+             return $ " " ++ printId (cdname cdef) ++ " : " ++ typs ++ ";\n"
+            ) cons
+   return $ "data " ++ printId (cdname cdef) ++ " : " ++ typs ++ " {\n" ++ concat cons' ++ "};\n"
+  Constructor -> return ""
+  Postulate ->
+   return $ "postulate " ++ printId (cdname cdef) ++ " : " ++ typs ++ ";\n"
+
+printClause :: Clause o -> IO String
+printClause (pats, e) = do
+ (nv, patss) <- printPats 0 pats
+ es <- printExp (replicate nv NoId) e
+ return $ patss ++ " = " ++ es ++ ";"
+
+printPats :: Nat -> [Pat o] -> IO (Nat, String)
+printPats nv [] = return (nv, "")
+printPats nv (p:ps) = do
+ (nv', p') <- printPat nv p
+ (nv'', ps') <- printPats nv' ps
+ return (nv'', " " ++ p' ++ ps')
+
+printPat :: Nat -> Pat o -> IO (Nat, String)
+printPat nv (PatConApp c pats) = do
+ cd <- readIORef c
+ (nv', patss) <- printPats nv pats
+ return (nv', "(" ++ printId (cdname cd) ++ patss ++ ")")
+printPat nv PatVar = return (nv + 1, printId $ "#" ++ show nv)
+printPat nv PatExp = return (nv, ".*")
+
+-- -------------------------------
+
+printId :: String -> String
+printId "" = "!!empty string id!!"
+printId s@(c : cs) =
+ if (isAlpha c || (c == '_')) && all (\c -> isAlpha c || isDigit c || (c == '_') || (c == '\'')) cs then
+  s
+ else
+  "\"" ++ s ++ "\""
+
diff --git a/src/full/Agda/Auto/SearchControl.hs b/src/full/Agda/Auto/SearchControl.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Auto/SearchControl.hs
@@ -0,0 +1,156 @@
+{-# OPTIONS -fglasgow-exts -XUndecidableInstances #-}
+
+module Agda.Auto.SearchControl where
+
+import Control.Monad
+import Data.IORef
+import Control.Monad.State
+
+import Agda.Auto.NarrowingSearch
+import Agda.Auto.Syntax
+import Agda.Auto.Print
+
+
+instance Refinable (ArgList o) (RefInfo o) where
+ refinements _ _ = return [
+   (0, return ALNil),
+   (0, cons NotHidden),
+   (0, cons Hidden)
+  ]
+  where cons hid = do p1 <- newPlaceholder
+                      p2 <- newPlaceholder
+                      return $ ALCons hid p1 p2
+ printref x = pargs [] (NotM x)
+
+
+getinfo [] (Just x) us = (x, us)
+getinfo (x@(RIMainInfo _ _) : xs) Nothing us = getinfo xs (Just x) us
+getinfo (x@(RIUnifInfo _ _ _) : xs) m us = getinfo xs m (x : us)
+getinfo _ _ _ = error "getinfo: case should not occur"
+
+instance Refinable (Exp o) (RefInfo o) where
+ refinements envinfo infos = do
+  let RIEnv hints = envinfo
+      (RIMainInfo n tt, unis) = getinfo infos Nothing []
+  occs <- mapM (\(RIUnifInfo mm _ opphne) -> occursCheck mm opphne) unis
+  cons <- case tt of
+           HNApp (Const c) _ -> do
+            cd <- readIORef c
+            return $ case cdcont cd of
+             Datatype cons -> cons
+             _ -> []
+           _ -> return []
+  let up = case unis of
+            [] -> False
+            _ -> all not occs
+      lam hid = (0,
+                 do p <- newPlaceholder
+                    return $ Lam hid (Abs NoId p)
+                )
+      apps = map app [0..n - 1]
+      capps = case unis of
+               [] -> map capp (hints ++ cons)
+               _ -> []
+      app v = (if up then 0 else 1,
+               do p <- newPlaceholder
+                  return $ App (Var v) p
+              )
+      capp c = (if up then 0 else 2,
+                do p <- newPlaceholder
+                   return $ App (Const c) p
+               )
+      set l = map (\l -> (0, return $ Sort (SortLevel l))) [0 .. l - 1]
+      fun hid = (2,
+                 do p1 <- newPlaceholder
+                    p2 <- newPlaceholder
+                    return $ Fun hid p1 p2)
+      pi hid = (2,
+                do p1 <- newPlaceholder
+                   p2 <- newPlaceholder
+                   return $ Pi hid True p1 (Abs NoId p2))
+      mimic = case unis of
+               [] -> []
+               (RIUnifInfo _ cl hnopp : _) -> case hnopp of
+                HNApp (Const c) _ -> [capp c]
+                _ -> []
+               _ -> error "refinements: mimic: not matched"
+  case tt of
+   HNFun hid _ _ -> return $ lam hid : apps ++ capps ++ mimic
+   HNPi hid _ _ _ -> return $ lam hid : apps ++ capps ++ mimic
+   HNSort (SortLevel l) -> return $ set l ++ [fun NotHidden, fun Hidden, pi NotHidden, pi Hidden] ++ apps ++ capps ++ mimic
+   _ -> return $ apps ++ capps ++ mimic
+ printref x = printExp [] (NotM x)
+
+-- ---------------------------------
+
+occursCheck :: forall a o . Metavar a (RefInfo o) -> HNExp o -> IO Bool
+occursCheck m0 hn = liftM snd $ runStateT (
+  let f :: forall b . Trav b (RefInfo o) => MM b (RefInfo o) -> StateT Bool IO ()
+      f (NotM x) = traverse f x
+      f (Meta m) = do
+         bind <- lift $ readIORef $ mbind m
+         case bind of
+          Just x -> traverse f x
+          Nothing -> when (hequalMetavar m m0) $ put True
+  in  traverse f hn
+ ) False
+
+
+-- ---------------------------------
+
+prioNo, prioTypeUnknown, prioTypecheckArgList, prioInferredTypeUnknown, prioPreCompare, prioCompare, prioCompareArgList, prioCompIota, prioCompChoice :: Int
+prioNo = (-1)
+prioTypeUnknown = 0
+prioTypecheck False = 1
+prioTypecheck True = 0
+prioTypecheckArgList = 3
+prioInferredTypeUnknown = 4
+prioPreCompare = 4
+prioCompChoice = 4
+prioCompare = 2
+prioCompareArgList = 2
+prioCompIota = 4
+
+-- ---------------------------------
+
+instance Trav a blk => Trav [a] blk where
+ traverse _ [] = return ()
+ traverse f (x:xs) = traverse f x >> traverse f xs
+
+instance Trav (MId, CExp o) (RefInfo o) where
+ traverse f (_, ce) = traverse f ce
+
+instance Trav a (RefInfo o) => Trav (Clos a o) (RefInfo o) where
+ traverse f (Clos cl e) = traverse f cl >> traverse f e
+
+instance Trav (CAction o) (RefInfo o) where
+ traverse f (Sub ce) = traverse f ce
+ traverse _ Skip = return ()
+ traverse _ (Weak _) = return ()
+
+instance Trav (Exp o) (RefInfo o) where
+ traverse f e = case e of
+  App _ args -> traverse f args
+  Lam _ (Abs _ b) -> traverse f b
+  Fun _ it ot -> traverse f it >> traverse f ot
+  Pi _ _ it (Abs _ ot) -> traverse f it >> traverse f ot
+  Sort _ -> return ()
+
+instance Trav (ArgList o) (RefInfo o) where
+ traverse _ ALNil = return ()
+ traverse f (ALCons _ arg args) = traverse f arg >> traverse f args
+ traverse f (ALConPar args) = traverse f args
+
+instance Trav (HNExp o) (RefInfo o) where
+ traverse f e = case e of
+  HNApp _ args -> traverse f args
+  HNLam (Abs _ b) -> traverse f b
+  HNFun _ it ot -> traverse f it >> traverse f ot
+  HNPi _ _ it (Abs _ ot) -> traverse f it >> traverse f ot
+  HNSort _ -> return ()
+
+instance Trav (CArgList o) (RefInfo o) where
+ traverse _ CALNil = return ()
+ traverse f (CALConcat arg args) = traverse f arg >> traverse f args
+
+
diff --git a/src/full/Agda/Auto/Syntax.hs b/src/full/Agda/Auto/Syntax.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Auto/Syntax.hs
@@ -0,0 +1,93 @@
+{-# OPTIONS -fglasgow-exts #-}
+
+module Agda.Auto.Syntax where
+
+import Data.IORef
+
+import Agda.Auto.NarrowingSearch
+
+
+data RefInfo o = RIEnv [ConstRef o]
+               | RIMainInfo Nat (HNExp o)
+               | forall a . RIUnifInfo (Metavar a (RefInfo o)) [CAction o] (HNExp o)  -- metavar is the flexible side of the equality
+
+type MyPB o = PB (RefInfo o)
+type MyMB a o = MB a (RefInfo o)
+
+type Nat = Int
+
+data FMode = Hidden
+           | NotHidden
+ deriving Eq
+
+data MId = Id String
+         | NoId
+
+data Abs a = Abs MId a
+
+data ConstDef o = ConstDef {cdname :: String, cdorigin :: o, cdtype :: MExp o, cdcont :: DeclCont o}  -- contains no metas
+
+data DeclCont o = Def Nat [Clause o]
+                | Datatype [ConstRef o]  -- constructors
+                | Constructor
+                | Postulate
+
+type Clause o = ([Pat o], MExp o)
+
+data Pat o = PatConApp (ConstRef o) [Pat o]
+           | PatVar
+           | PatExp
+
+type ConstRef o = IORef (ConstDef o)
+
+data Elr o = Var Nat
+           | Const (ConstRef o)
+
+data Sort = SortLevel Nat
+          | Type
+
+data Exp o = App (Elr o) (MArgList o)
+           | Lam FMode (Abs (MExp o))
+           | Fun FMode (MExp o) (MExp o)
+           | Pi FMode Bool (MExp o) (Abs (MExp o))  -- true if possibly dependent (var not known to not occur)
+           | Sort Sort
+
+type MExp o = MM (Exp o) (RefInfo o)
+
+data ArgList o = ALNil
+               | ALCons FMode (MExp o) (MArgList o)
+               | ALConPar (MArgList o)  -- inserted to cover glitch of polymorphic constructor applications coming from Agda
+
+type MArgList o = MM (ArgList o) (RefInfo o)
+
+data HNExp o = HNApp (Elr o) (CArgList o)
+             | HNLam (Abs (CExp o))
+             | HNFun FMode (CExp o) (CExp o)
+             | HNPi FMode Bool (CExp o) (Abs (CExp o))
+             | HNSort Sort
+
+data HNArgList o = HNALNil
+                 | HNALCons (CExp o) (CArgList o)
+                 | HNALConPar (CArgList o)
+
+type CExp o = Clos (MExp o) o
+
+data CArgList o = CALNil
+                | CALConcat (Clos (MArgList o) o) (CArgList o)
+ -- !! (CALCons and CALConcat are used differently by eta rule in hncomp, but could replace those uses by a new CALSnoc construction)
+
+data Clos a o = Clos [CAction o] a
+
+data CAction o = Sub (CExp o)
+               | Skip
+               | Weak Nat
+
+type Ctx o = [(MId, CExp o)]
+
+type EE = IO
+
+data Elrs o = ElrsNil
+            | ElrsCons (Elr o) (Elrs o)
+            | ElrsWeak (Elrs o)
+
+
diff --git a/src/full/Agda/Auto/Typecheck.hs b/src/full/Agda/Auto/Typecheck.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Auto/Typecheck.hs
@@ -0,0 +1,509 @@
+{-# OPTIONS -fglasgow-exts #-}
+
+module Agda.Auto.Typecheck where
+
+import Data.IORef
+
+import Agda.Auto.NarrowingSearch
+import Agda.Auto.Syntax
+import Agda.Auto.SearchControl
+import Agda.Auto.Print
+
+
+closify :: a -> Clos a o
+closify = Clos []
+
+sub :: CExp o -> Clos a o -> Clos a o
+-- sub e (Clos [] x) = Clos [Sub e] x
+sub e (Clos (Skip : as) x) = Clos (Sub e : as) x
+{-sub e (Clos (Weak n : as) x) = if n == 1 then
+                                Clos as x
+                               else
+                                Clos (Weak (n - 1) : as) x-}
+sub _ _ = error "sub: pattern not matched"
+
+msubs :: [CExp o] -> a -> Clos a o
+msubs ss x = Clos (map Sub ss) x
+
+weak :: Nat -> Clos a o -> Clos a o
+weak 0 x = x
+weak n (Clos as x) = Clos (Weak n : as) x
+
+{- -- only used by eta-conversion
+weakarglist :: Nat -> CArgList -> CArgList
+weakarglist 0 = id
+weakarglist n = f
+ where f CALNil = CALNil
+       f (CALConcat cl as as2) = CALConcat (Weak n : cl) as (f as2)
+
+weakelr :: Nat -> Elr -> Elr
+weakelr 0 elr = elr
+weakelr n (Var v) = Var (v + n)
+weakelr _ elr@(Const _) = elr
+-}
+
+-- ---------------------------------
+
+tcExp :: Bool -> Ctx o -> CExp o -> MExp o -> EE (MyPB o)
+tcExp isdep ctx typ trm =
+ mbpcase prioTypeUnknown (hnn typ) (ptcTypeUnknown isdep ctx typ trm) $ \hntyp ->
+ mmpcase (True, prioTypecheck isdep, Just (RIMainInfo (length ctx) hntyp)) trm (ptcTypeCheck isdep ctx hntyp trm) $ \trm -> case trm of
+  App elr args -> do
+   (ityp, sc) <- case elr of
+            Var v ->  -- assuming within scope
+             return (weak (v + 1) (snd $ ctx !! v), id)
+            Const c -> do
+             cdef <- readIORef c
+             return (closify (cdtype cdef), \x -> mpret $ And (Just [Term args]) (noiotastep' c args) x)
+   sc $ tcargs isdep ctx typ ityp args
+  Lam hid (Abs id1 b) -> case hntyp of
+   HNFun hid' it ot | hid == hid' ->
+    tcExp isdep ((id1, it) : ctx) (weak 1 ot) b
+   HNPi hid' _ it (Abs id2 ot) | hid == hid' ->
+    tcExp isdep ((pickid id1 id2, it) : ctx) ot b
+   _ -> mpret $ Error "tcExp, type of lam should be fun or pi (and same hid)"
+  Fun _ it ot -> case hntyp of
+   HNSort s ->
+    mpret $ And (Just [Term ctx])
+     (tcExp isdep ctx (closify (NotM $ Sort s)) it)
+     (tcExp isdep ctx (closify (NotM $ Sort s)) ot)
+   _ -> mpret $ Error "tcExp, type of fun should be set"
+  Pi _ _ it (Abs id ot) -> case hntyp of
+   HNSort s ->
+    mpret $ And (Just [Term ctx, Term it])
+     (tcExp True ctx (closify (NotM $ Sort s)) it)
+     (tcExp isdep ((id, closify it) : ctx) (closify (NotM $ Sort s)) ot)
+   _ -> mpret $ Error "tcExp, type of pi should be set"
+  Sort (SortLevel i) -> case hntyp of
+   HNSort s2 -> case s2 of
+    SortLevel j -> mpret $ if i < j then OK else Error "tcExp, type of set should be larger set"
+    Type -> mpret OK
+   _ -> mpret $ Error "tcExp, type of set should be set"
+  Sort Type -> error "tcexp: Sort Type should not occur"
+
+tcargs :: Bool -> Ctx o -> CExp o -> CExp o -> MArgList o -> EE (MyPB o)
+tcargs isdep ctx etyp ityp args = mmpcase (True, prioTypecheckArgList, Nothing) args (ptcTypecheckArgList "" isdep ctx etyp ityp args) $ \args' -> case args' of
+ ALNil -> comp' etyp ityp
+ ALCons hid a as ->
+  mbpcase prioInferredTypeUnknown (hnn ityp) (ptcTypecheckArgList "inferred_type_unknown" isdep ctx etyp ityp args) $ \hnityp -> case hnityp of
+   HNFun hid' it ot | hid == hid' -> mpret $
+    And (Just [Term ctx])
+        (tcExp isdep ctx it a)
+        (tcargs isdep ctx etyp ot as)
+   HNPi hid' possdep it (Abs _ ot) | hid == hid' -> mpret $
+    And (Just [Term ctx, Term a])
+        (tcExp (isdep || possdep) ctx it a)
+        (tcargs isdep ctx etyp (sub (closify a) ot) as)
+   _ -> mpret $ Error "tcargs, inf type should be fun or pi (and same hid)"
+ ALConPar _ -> error "ConPar should not occur here"
+
+-- ---------------------------------
+
+hnn :: CExp o -> EE (MyMB (HNExp o) o)
+hnn e = hnn' e CALNil
+
+hnn' :: CExp o -> CArgList o -> EE (MyMB (HNExp o) o)
+hnn' e as =
+ mbcase (hn' e as) $ \hne ->
+  mbcase (iotastep hne) $ \res -> case res of
+   Nothing -> mbret hne
+   Just (e, as) -> hnn' e as
+
+hn' :: CExp o -> CArgList o -> EE (MyMB (HNExp o) o)
+hn' e as = mbcase (hnc False e as) $ \res -> case res of
+            HNDone hne -> mbret hne
+            HNMeta _ _ -> error "hn': should not happen"
+
+data HNRes o = HNDone (HNExp o)
+             | HNMeta (CExp o) (CArgList o)
+
+hnc :: Bool -> CExp o -> CArgList o -> EE (MyMB (HNRes o) o)
+hnc haltmeta = loop
+ where
+  loop ce@(Clos cl e) cargs =
+   (if haltmeta then mmmcase e (mbret $ HNMeta ce cargs) else mmcase e) $
+   \e -> case e of
+    App elr args ->
+     let cargs' = CALConcat (Clos cl args) cargs
+     in  case elr of
+      Var v -> case doclos cl v of
+       Left v' -> mbret $ HNDone $ HNApp (Var v') cargs'
+       Right f -> loop f cargs'
+      Const _ -> mbret $ HNDone $ HNApp elr cargs'
+    Lam _ (Abs id b) ->
+     let cb = Clos (Skip : cl) b
+     in  mbcase (hnarglist cargs) $ \hncargs -> case hncargs of
+      HNALNil -> mbret $ HNDone $ HNLam (Abs id cb)
+      HNALCons arg cargs' -> loop (sub arg cb) cargs'
+      HNALConPar _ -> error "ConPar should not occur here"
+    Fun hid it ot -> checkNoArgs cargs $ mbret $ HNDone $ HNFun hid (Clos cl it) (Clos cl ot)
+    Pi hid possdep it (Abs id ot) -> checkNoArgs cargs $ mbret $ HNDone $ HNPi hid possdep (Clos cl it) (Abs id (Clos (Skip : cl) ot))
+    Sort s -> checkNoArgs cargs $ mbret $ HNDone $ HNSort s
+  checkNoArgs cargs c =
+   mbcase (hnarglist cargs) $ \hncargs -> case hncargs of
+    HNALNil -> c
+    HNALCons _ _ -> mbfailed "hnc: there should be no args"
+    HNALConPar _ -> error "ConPar should not occur here"
+
+doclos :: [CAction o] -> Nat -> Either Nat (CExp o)
+doclos = f 0
+ where
+  f ns [] i = Left (ns + i)
+  f ns (Weak n : xs) i = f (ns + n) xs i
+  f ns (Skip : _) 0 = Left ns
+  f ns (Sub s : _) 0 = Right (weak ns s)
+  f ns (Skip : xs) i = f (ns + 1) xs (i - 1)
+  f ns (Sub _ : xs) i = f ns xs (i - 1)
+
+hnarglist :: CArgList o -> EE (MyMB (HNArgList o) o)
+hnarglist args = case args of
+ CALNil -> mbret HNALNil
+ CALConcat (Clos cl args) args2 -> mmcase args $ \args -> case args of
+   ALNil -> hnarglist args2
+   ALCons _ arg args' -> mbret $ HNALCons (Clos cl arg) (CALConcat (Clos cl args') args2)
+   ALConPar args' -> mbret $ HNALConPar (CALConcat (Clos cl args') args2)
+
+
+-- -----------------------------
+
+getNArgs :: Nat -> CArgList o -> EE (MyMB (Maybe ([CExp o], CArgList o)) o)
+getNArgs 0 args = mbret $ Just ([], args)
+getNArgs narg args =
+ mbcase (hnarglist args) $ \hnargs -> case hnargs of
+  HNALNil -> mbret Nothing
+  HNALCons arg args' ->
+   mbcase (getNArgs (narg - 1) args') $ \res -> case res of
+    Nothing -> mbret Nothing
+    Just (pargs, rargs) -> mbret $ Just (arg : pargs, rargs)
+  HNALConPar _ -> error "ConPar should not occur here"
+
+getAllArgs :: CArgList o -> EE (MyMB [PEval o] o)
+getAllArgs args =
+ mbcase (hnarglist args) $ \hnargs -> case hnargs of
+  HNALNil -> mbret []
+  HNALCons arg args' ->
+   mbcase (getAllArgs args') $ \args'' ->
+    mbret (PENo arg : args'')
+  HNALConPar args' ->
+   mbcase (getAllArgs args') $ \args'' ->
+    mbret (PEConPar : args'')
+
+iotastep :: HNExp o -> EE (MyMB (Maybe (CExp o, CArgList o)) o)
+iotastep e = case e of
+ HNApp (Const c) args -> do
+  cd <- readIORef c
+  case cdcont cd of
+   Def narg cls ->
+    mbcase (getNArgs narg args) $ \res -> case res of
+     Nothing -> mbret Nothing
+     Just (pargs, rargs) ->
+      mbcase (dorules cls (map PENo pargs)) $ \res -> case res of
+       Nothing -> mbret Nothing
+       Just rhs -> mbret $ Just (rhs, rargs)
+   _ -> mbret Nothing
+ _ -> mbret Nothing
+
+data PEval o = PENo (CExp o)
+             | PEConApp (CExp o) (ConstRef o) [PEval o]
+             | PEConPar
+
+dorules :: [Clause o] -> [PEval o] -> EE (MyMB (Maybe (CExp o)) o)
+dorules [] _ = mbret Nothing
+dorules (rule:rules') as =
+ mbcase (dorule rule as) $ \x -> case x of
+  Left (Just as') -> dorules rules' as'
+  Left Nothing -> mbret Nothing
+  Right rhs -> mbret $ Just rhs
+
+dorule :: Clause o -> [PEval o] -> EE (MyMB (Either (Maybe [PEval o]) (CExp o)) o)
+dorule (pats, rhs) as =
+ mbcase (dopats pats as) $ \x -> case x of
+  Right (_, ss) -> mbret $ Right (msubs ss rhs)
+  Left hnas -> mbret $ Left hnas
+
+dopats :: [Pat o] -> [PEval o] -> EE (MyMB (Either (Maybe [PEval o]) ([PEval o], [CExp o])) o)
+dopats [] [] = mbret $ Right ([], [])
+dopats (p:ps') (a:as') =
+ mbcase (dopat p a) $ \x -> case x of
+  Right (hna, ss) ->
+   mbcase (dopats ps' as') $ \x -> case x of
+    Right (hnas, ss2) -> mbret $ Right (hna : hnas, ss2 ++ ss)
+    Left Nothing -> mbret $ Left Nothing
+    Left (Just hnas) -> mbret $ Left $ Just (hna : hnas)
+  Left Nothing -> mbret $ Left Nothing
+  Left (Just hna) -> mbret $ Left $ Just (hna : as')
+dopats _ _ = error "dopats: pattern not matched"
+
+dopat :: Pat o -> PEval o -> EE (MyMB (Either (Maybe (PEval o)) (PEval o, [CExp o])) o)
+dopat (PatConApp c pas) a =
+ case a of
+  PENo a -> mbcase (hnn a) $ \hna -> case hna of
+   HNApp (Const c') as ->
+    if c == c' then
+     mbcase (getAllArgs as) $ \as' ->
+      if length as' == length pas then
+       mbcase (dopats pas as') $ \x -> case x of
+        Right (hnas, ss) -> mbret $ Right (PEConApp a c' hnas, ss)
+        Left Nothing -> mbret $ Left Nothing
+        Left (Just hnas) -> mbret $ Left $ Just (PEConApp a c' hnas)
+      else
+       mbfailed "dopat: wrong amount of args"
+    else do
+     cd <- readIORef c'
+     case cdcont cd of
+      Constructor -> mbcase (getAllArgs as) $ \as' ->
+       mbret $ Left (Just (PEConApp a c' as'))
+      _ -> mbret $ Left Nothing
+   _ -> mbret $ Left Nothing
+  aa@(PEConApp a c' as) ->
+   if c == c' then
+    if length as == length pas then
+     mbcase (dopats pas as) $ \x -> case x of
+      Right (hnas, ss) -> mbret $ Right (PEConApp a c' hnas, ss)
+      Left Nothing -> mbret $ Left Nothing
+      Left (Just hnas) -> mbret $ Left $ Just (PEConApp a c' hnas)
+    else
+     mbfailed "dopat: wrong amount of args"
+   else
+    mbret $ Left (Just aa)
+  PEConPar -> error "ConPar should not occur here"
+dopat PatVar a@(PENo a') = mbret $ Right (a, [a'])
+dopat PatVar a@(PEConApp a' _ _) = mbret $ Right (a, [a'])
+dopat PatVar PEConPar = error "ConPar should not occur here"
+dopat PatExp a = mbret $ Right (a, [])
+
+-- -----------------------------
+
+noiotastep :: HNExp o -> EE (MyPB o)
+noiotastep hne =
+ mbpcase prioNo (iotastep hne) (ptcNoIotaStep hne) $ \res -> case res of
+  Just _ -> mpret $ Error "iota step possible contrary to assumed"
+  Nothing -> mpret OK
+
+noiotastep' :: ConstRef o -> MArgList o -> EE (MyPB o)
+noiotastep' c args = do
+ cd <- readIORef c
+ let isshorthand =
+      case cdcont cd of
+       Def _ [(pats, _)] -> all (\pat -> case pat of {PatConApp{} -> False; _ -> True}) pats
+       _ -> False
+ if isshorthand then
+   mpret OK
+  else
+   noiotastep $ HNApp (Const c) (CALConcat (Clos [] args) CALNil)
+
+
+comp' :: CExp o -> CExp o -> EE (MyPB o)
+comp' = comp True
+
+
+comp :: Bool -> CExp o -> CExp o -> EE (MyPB o)
+comp ineq e1 e2 = f e1 CALNil $ \res1 -> f e2 CALNil $ \res2 -> g res1 res2
+ where
+  f e as cont =
+   mbpcase prioPreCompare (hnc True e as) (ptcCompare "beta" ineq e1 e2) $ \res ->
+    case res of
+     HNDone hne ->
+      mmbpcase (iotastep hne)
+       (mpret $ Or prioCompChoice
+        (mpret $ And Nothing
+         (noiotastep hne)
+         (cont res)
+        )
+        (mbpcase prioCompIota (iotastep hne) (ptcCompare "iota" ineq e1 e2) $ \res -> case res of
+         Nothing -> mpret $ Error "no iota step possible, contrary to assumed"
+         Just (e, as) -> f e as cont
+        )
+       )
+       (\res' -> case res' of
+         Nothing -> cont res
+         Just (e, as) -> f e as cont
+       )
+     HNMeta _ _ -> cont res
+  g res1 res2 =
+   case (res1, res2) of
+    (HNDone hne1, HNDone hne2) -> comphn' ineq hne1 hne2
+    (HNDone hne1, HNMeta ce2 cargs2) -> unif True hne1 ce2 cargs2
+    (HNMeta ce1 cargs1, HNDone hne2) -> unif False hne2 ce1 cargs1
+    (HNMeta ce1@(Clos _ m1) cargs1, HNMeta ce2@(Clos _ m2) cargs2) -> doubleblock m1 m2 $ f ce1 cargs1 $ \res1 -> f ce2 cargs2 $ \res2 -> g res1 res2
+  unif oppis1 opphne = loop
+   where
+    loop ce@(Clos cl m) cargs =
+     do
+      let Meta mm = m
+      mmpcase (False, prioCompare, Just (RIUnifInfo mm cl opphne)) m (ptcCompare "unify" ineq e1 e2) $ \_ ->
+       f ce cargs $ \res ->
+        case res of
+         HNDone hne -> if oppis1 then comphn' ineq opphne hne else comphn' ineq hne opphne
+         HNMeta ce' cargs' -> loop ce' cargs'
+
+
+comphn' :: Bool -> HNExp o -> HNExp o -> EE (MyPB o)
+comphn' ineq hne1 hne2 =
+ case (hne1, hne2) of
+  (HNApp elr1 args1, HNApp elr2 args2) ->
+   let ce = case (elr1, elr2) of
+             (Var v1, Var v2) -> if v1 == v2 then Nothing else Just "comphn, elr, vars not equal"
+             (Const c1, Const c2) -> if c1 == c2 then Nothing else Just "comphn, elr, consts not equal"
+             (_, _) -> Just "comphn, elrs not equal"
+   in  case ce of
+        Nothing -> compargs args1 args2
+        Just msg -> mpret $ Error msg
+  (HNLam (Abs id1 b1), HNLam (Abs id2 b2)) -> comp False b1 b2
+{- eta-conversion disabled
+  (HNLam (Abs id b), HNApp elr args) ->
+   mbpcase False prioCompare (hn b) $ \hnb ->
+   comphn False (id : idctx) hnb (HNApp (weakelr 1 elr) (CALConcat (weakarglist 1 args) (CALCons (closify (NotM $ App (Var 0) $ NotM ALNil)) CALNil)))
+  (HNApp elr args, HNLam (Abs id b)) ->
+   mbpcase False prioCompare (hn b) $ \hnb ->
+   comphn False (id : idctx) (HNApp (weakelr 1 elr) (CALConcat (weakarglist 1 args) (CALCons (closify (NotM $ App (Var 0) $ NotM ALNil)) CALNil))) hnb
+-}
+  (HNFun hid1 it1 ot1, HNFun hid2 it2 ot2) | hid1 == hid2 -> mpret $
+   And (Just []) (comp False it1 it2) (comp ineq ot1 ot2)
+  (HNPi hid1 _ it1 (Abs id1 ot1), HNPi hid2 _ it2 (Abs id2 ot2)) | hid1 == hid2 -> mpret $
+   And (Just []) (comp False it1 it2) (comp ineq ot1 ot2)
+  (HNFun hid1 it1 ot1, HNPi hid2 _ it2 (Abs id ot2)) | hid1 == hid2 -> mpret $  -- ?? exclude this case
+   And (Just []) (comp False it1 it2) (comp ineq (weak 1 ot1) ot2)
+  (HNPi hid1 _ it1 (Abs id ot1), HNFun hid2 it2 ot2) | hid1 == hid2 -> mpret $  -- ?? exclude this case
+   And (Just []) (comp False it1 it2) (comp ineq ot1 (weak 1 ot2))
+  (HNSort s1, HNSort s2) -> mpret $
+   case (s1, s2) of
+    (SortLevel i1, SortLevel i2) -> if i1 == i2 || ineq && i1 > i2 then OK else Error "comphn, set levels not matching"
+    (Type, SortLevel _) | ineq -> OK
+    _ -> error "comphn'.2: case should not occur"
+  (_, _) -> mpret $ Error "comphn, not equal"
+
+compargs :: CArgList o -> CArgList o -> EE (MyPB o)
+compargs args1 args2 =
+ mbpcase prioCompareArgList (hnarglist args1) (ptcCompareArgList "lhs" args1 args2) $ \hnargs1 ->
+ mbpcase prioCompareArgList (hnarglist args2) (ptcCompareArgList "rhs" args1 args2) $ \hnargs2 ->
+ case (hnargs1, hnargs2) of
+  (HNALNil, HNALNil) -> mpret OK
+  (HNALCons arg1 args1', HNALCons arg2 args2') -> mpret $
+   And (Just []) (comp False arg1 arg2) (compargs args1' args2')
+  (HNALConPar args1', HNALCons _ args2') -> compargs args1' args2'
+  (HNALCons _ args1', HNALConPar args2') -> compargs args1' args2'
+  (HNALConPar args1', HNALConPar args2') -> compargs args1' args2'
+  (_, _) -> mpret $ Error $ "compargs, not equal"
+
+pickid :: MId -> MId -> MId
+pickid mid1@(Id _) _ = mid1
+pickid _ mid2 = mid2
+
+-- ---------------------------------
+
+tcSearch :: Ctx o -> CExp o -> MExp o -> EE (MyPB o)
+tcSearch ctx typ trm = tcExp False ctx typ trm
+
+-- ----------------------------
+
+norm = True
+
+ptcTypeUnknown :: Bool -> Ctx o -> CExp o -> MExp o -> EE String
+ptcTypeUnknown isdep ctx typ trm = do
+ pctx <- printCtx norm ctx
+ ptyp <- printCExp norm (map fst ctx) typ
+ ptrm <- printExp (map fst ctx) trm
+ return $ "tt_unknown " ++ (if isdep then "dep " else "") ++ pctx ++ " | " ++ ptrm ++ " : " ++ ptyp
+
+ptcTypeCheck :: Bool -> Ctx o -> HNExp o -> MExp o -> EE String
+ptcTypeCheck isdep ctx hntyp trm = do
+ pctx <- printCtx norm ctx
+ ptyp <- printHNExp norm (map fst ctx) hntyp
+ ptrm <- printExp (map fst ctx) trm
+ return $ (if isdep then "dep " else "") ++ pctx ++ " | " ++ ptrm ++ " : " ++ ptyp
+
+ptcTypecheckArgList :: String -> Bool -> Ctx o -> CExp o -> CExp o -> MArgList o -> EE String
+ptcTypecheckArgList msg isdep ctx etyp ityp args = do
+ pctx <- printCtx norm ctx
+ petyp <- printCExp norm (map fst ctx) etyp
+ pityp <- printCExp norm (map fst ctx) ityp
+ pargs <- pargs (map fst ctx) args 
+ return $ msg ++ " " ++ (if isdep then "dep " else "") ++ pctx ++ " | " ++ pargs ++ " : " ++ pityp ++ " => " ++ petyp
+
+ptcNoIotaStep :: HNExp o -> EE String
+ptcNoIotaStep hne = do
+ phne <- printHNExp norm [] hne
+ return $ "no_iota " ++ phne
+
+ptcCompare :: String -> Bool -> CExp o -> CExp o -> EE String
+ptcCompare msg ineq e1 e2 = do
+ pe1 <- printCExp norm [] e1
+ pe2 <- printCExp norm [] e2
+ return $ msg ++ " " ++ pe1 ++ (if ineq then " >= " else " == ") ++ pe2
+
+ptcCompareArgList :: String -> CArgList o -> CArgList o -> EE String
+ptcCompareArgList msg args1 args2 = do
+ pargs1 <- pcargs norm [] args1
+ pargs2 <- pcargs norm [] args2
+ return $ msg ++ " " ++ pargs1 ++ " == " ++ pargs2
+
+-- ---------------------------------------------------
+
+phnexp :: Bool -> Int -> [MId] -> HNExp o -> IO String
+phnexp norm p ctx e = case e of  
+ HNApp elr args -> do
+  elr' <- pelr ctx elr
+  args' <- pcargs norm ctx args
+  par p 3 $ elr' ++ args'
+ HNLam (Abs id b) -> do
+  b' <- pcexp norm 1 (id : ctx) b
+  par p 1 $ "\\" ++ pid ctx id ++ " -> " ++ b'
+ HNFun _ it ot -> do
+  it' <- pcexp norm 3 ctx it
+  ot' <- pcexp norm 2 ctx ot
+  par p 2 $ it' ++ " -> " ++ ot'
+ HNPi _ _ it (Abs id ot) -> do
+  it' <- pcexp norm 1 ctx it
+  ot' <- pcexp norm 2 (id : ctx) ot
+  par p 2 $ "[" ++ pid ctx id ++ ":" ++ it' ++ "] -> " ++ ot'
+ HNSort (SortLevel 0) -> return "*"
+ HNSort (SortLevel n) -> return $ "*" ++ show n
+ HNSort Type -> return "Type"
+
+printHNExp norm = phnexp norm 4
+
+phnargs :: Bool -> [MId] -> HNArgList o -> IO String
+phnargs norm ctx args = case args of
+  HNALNil -> return ""
+  HNALCons arg args -> do
+   arg' <- pcexp norm 4 ctx arg
+   args' <- pcargs norm ctx args
+   return $ " " ++ arg' ++ args'
+  HNALConPar args -> do
+   args' <- pcargs norm ctx args
+   return $ " " ++ "$" ++ args'
+
+pcexp :: Bool -> Int -> [MId] -> CExp o -> IO String
+pcexp True p ctx cexp = do
+ res <- hnn cexp
+ case res of
+  NotB hnexp -> phnexp True p ctx hnexp
+  _ -> pcexp False p ctx cexp
+pcexp False p ctx (Clos acts e) = do  -- TODO: handle closure properly
+ pe <- pexp p ctx e
+ return $ "<..>" ++ pe
+
+printCExp norm = pcexp norm 4
+
+pcargs :: Bool -> [MId] -> CArgList o -> IO String
+pcargs True ctx args = do
+ res <- hnarglist args
+ case res of
+  NotB hnargs -> phnargs True ctx hnargs
+  _ -> pcargs False ctx args
+pcargs False ctx args = case args of
+  CALNil -> return ""
+  CALConcat (Clos acts arg) args -> do  -- TODO: handle closure properly
+   arg' <- pargs ctx arg
+   args' <- pcargs False ctx args
+   return $ "<..>" ++ arg' ++ args'
+
+printCtx :: Bool -> Ctx o -> IO String
+printCtx _ [] = return ""
+printCtx norm ((mid, t) : ctx) = do
+ p <- printCExp norm (map fst ctx) t
+ ps <- printCtx norm ctx
+ return $ ps ++ ", " ++ pid (map fst ctx) mid ++ " : " ++ p
+
+
diff --git a/src/full/Agda/Compiler/Agate/Common.hs b/src/full/Agda/Compiler/Agate/Common.hs
--- a/src/full/Agda/Compiler/Agate/Common.hs
+++ b/src/full/Agda/Compiler/Agate/Common.hs
@@ -82,12 +82,14 @@
 --
 
 showOptimizedLiteral :: Literal -> Doc
+showOptimizedLiteral (LitLevel  _ i) = text $ show i
 showOptimizedLiteral (LitInt    _ i) = text $ show i
 showOptimizedLiteral (LitString _ s) = text $ show s
 showOptimizedLiteral (LitFloat  _ f) = text $ show f
 showOptimizedLiteral (LitChar   _ c) = text $ show c
 
 showUntypedLiteral :: Literal -> Doc
+showUntypedLiteral (LitLevel  _ i) = text "VInt"    <+> text (show i)
 showUntypedLiteral (LitInt    _ i) = text "VInt"    <+> text (show i)
 showUntypedLiteral (LitString _ s) = text "VString" <+> text (show s)
 showUntypedLiteral (LitFloat  _ f) = text "VFloat"  <+> text (show f)
diff --git a/src/full/Agda/Compiler/Agate/OptimizedPrinter.hs b/src/full/Agda/Compiler/Agate/OptimizedPrinter.hs
--- a/src/full/Agda/Compiler/Agate/OptimizedPrinter.hs
+++ b/src/full/Agda/Compiler/Agate/OptimizedPrinter.hs
@@ -66,7 +66,7 @@
 	    let arity = np `div` 2
 	    dparams <- underDatatypeParameters arity ty showTypeParameter stop
 	    dcon <- showAsOptimizedConstructor name
-	    dflds <- mapM (showRecordFieldDeclaration (arity + 1)) flds
+	    dflds <- mapM (showRecordFieldDeclaration (arity + 1)) (map snd flds)
 	    showDatatypeDeclaration dtypename dparams [sep $ dcon : dflds]
      	Function { funClauses = [clause@(Clause{ clausePats = pat })] } -> do
 	    (args,_) <- splitType ty
diff --git a/src/full/Agda/Compiler/Alonzo/Main.hs b/src/full/Agda/Compiler/Alonzo/Main.hs
--- a/src/full/Agda/Compiler/Alonzo/Main.hs
+++ b/src/full/Agda/Compiler/Alonzo/Main.hs
@@ -49,6 +49,7 @@
 
 import Agda.Utils.Monad
 import Agda.Utils.Permutation
+import Agda.Utils.Pretty
 
 import System.IO
 -- import Data.List(nub)
@@ -70,7 +71,7 @@
         let names = List.map fst defs
         hsdefs <- mapM processDefWithDebug defs
         -- We get more than we need here
-        allImps <- map show . Map.keys <$> getVisitedModules
+        allImps <- map (render . pretty) . Map.keys <$> getVisitedModules
         verboseS "comp.alonzo.import" 20 $ liftIO $ mapM_ (\m -> putStrLn $ "import " ++ m) allImps
         hImps <- getHaskellImports
         let mainNum = (numOfMainS names)
@@ -79,7 +80,7 @@
                 pathSep '.' = pathSeparator
                 pathSep c   = c
         let moduleString = show moduleName
-        let hsmod = hsModuleImporting moduleString hImps allImps (concat hsdefs)
+        let hsmod = hsModuleImporting moduleString (Set.toList hImps) allImps (concat hsdefs)
         liftIO $ outputHsModule fileBase hsmod mainNum
         -- let almod = List.map AlDecl hsdefs
         -- liftIO $ printAlModule moduleString almod
@@ -98,7 +99,8 @@
   ifM (fromCurrentModule q)
       (return q)
   $ do
-    topModules <- Map.keys <$> getVisitedModules
+    topModules <- map (iModuleName . miInterface) . Map.elems <$>
+                    getVisitedModules
     case filter (isInModule q) topModules of
       [top]     -> return $ q { qnameModule = top }
       []        -> error $ "flattenSubmodules: " ++ show q ++ " </- " ++ show topModules
@@ -434,6 +436,7 @@
 -- processTerm t =  return hsUndefined
 
 processLit :: Literal -> HsExp
+processLit (LitLevel r i) = processLit (LitInt r i)
 processLit (LitInt _ i) =  HsApp toNat $ intLit i where
 	intLit i = HsParen $ hsPreludeTypedExp "Integer" $ HsLit $ HsInt i
 	toNat = HsVar $ Qual (Module "RTP") $ HsIdent "_primIntegerToNat"
diff --git a/src/full/Agda/Compiler/MAlonzo/Compiler.hs b/src/full/Agda/Compiler/MAlonzo/Compiler.hs
--- a/src/full/Agda/Compiler/MAlonzo/Compiler.hs
+++ b/src/full/Agda/Compiler/MAlonzo/Compiler.hs
@@ -3,6 +3,7 @@
 module Agda.Compiler.MAlonzo.Compiler where
 
 import Control.Applicative
+import qualified Control.Exception as E
 import Control.Monad.Reader
 import Control.Monad.State
 import Data.Char
@@ -14,18 +15,19 @@
 import System.Directory
 import System.Exit
 import System.IO
-import qualified System.IO.UTF8 as UTF8
 import System.Time
 import System.Process
-import System.FilePath ((</>))
+import System.FilePath hiding (normalise, (<.>))
 
 import Agda.Compiler.MAlonzo.Misc
 import Agda.Compiler.MAlonzo.Pretty
 import Agda.Compiler.MAlonzo.Primitives
+import Agda.Interaction.FindFile
 import Agda.Interaction.Imports
 import Agda.Interaction.Monad
 import Agda.Interaction.Options
 import Agda.Syntax.Common
+import qualified Agda.Syntax.Concrete.Name as CN
 import Agda.Syntax.Internal
 import Agda.Syntax.Literal
 import Agda.TypeChecking.Monad
@@ -34,28 +36,43 @@
 import Agda.TypeChecking.Pretty
 import Agda.Utils.FileName
 import Agda.Utils.Monad
+import qualified Agda.Utils.IO.Locale as LocIO
+import qualified Agda.Utils.IO.UTF8 as UTF8
 import Agda.Utils.Impossible
 
 #include "../../undefined.h"
 
-compilerMain :: TCM Interface -> TCM ()
-compilerMain typecheck = do
-  i <- typecheck
-  ignoreAbstractMode $ do
-    t <- liftIO getClockTime
-    let mainICT = (i, t)
-    mapM_ compile =<< ((mainICT :) . M.elems <$> getVisitedModules)
-    callGHC mainICT
+compilerMain :: Interface -> TCM ()
+compilerMain mainI =
+  -- Preserve the state (the compiler modifies the state).
+  bracket get put $ \_ -> do
 
-compile :: (Interface, ClockTime) -> TCM ()
-compile ict = do
-  setInterface ict
+    -- Compute the output directory.
+    opts <- commandLineOptions
+    malonzoDir <- case optMAlonzoDir opts of
+      Just dir -> return dir
+      Nothing  -> do
+        -- The default output directory is the project root.
+        let tm = toTopLevelModuleName $ iModuleName mainI
+        f <- findFile tm
+        return $ filePath $ CN.projectRoot f tm
+    setCommandLineOptions PersistentOptions $
+      opts { optMAlonzoDir = Just malonzoDir }
+
+    ignoreAbstractMode $ do
+      mapM_ (compile . miInterface) =<< (M.elems <$> getVisitedModules)
+      callGHC mainI
+
+compile :: Interface -> TCM ()
+compile i = do
+  setInterface i
   ifM uptodate noComp $ (yesComp >>) $ do
     writeModule =<< decl <$> curHsMod <*> (definitions =<< curDefs) <*> imports
   where
   decl mn ds imp = HsModule dummy mn Nothing imp ds
   uptodate = liftIO =<< (isNewerThan <$> outFile <*> ifile)
-  ifile    = findFile InterfaceFile =<< curMName
+  ifile    = maybe __IMPOSSIBLE__ filePath <$>
+               (findInterfaceFile . toTopLevelModuleName =<< curMName)
   noComp   = reportSLn "" 1 . (++ " : no compilation is needed.").show =<< curMName
   yesComp  = reportSLn "" 1 . (`repl` "Compiling <<0>> in <<1>> to <<2>>") =<<
              sequence [show <$> curMName, ifile, outFile] :: TCM ()
@@ -67,15 +84,16 @@
 --------------------------------------------------
 
 imports :: TCM [HsImportDecl]
-imports = (++) <$> unqualImps <*> qualImps where
-  unqualImps = (L.map (decl False) . (unsafeCoerceMod :) . L.map Module) <$>
-               getHaskellImports
-  qualImps   = L.map (decl True) . uniq <$>
-               ((++) <$> importsForPrim <*> (L.map mazMod <$> mnames))
-  decl qual m = HsImportDecl dummy m qual Nothing Nothing
-  mnames      = (++) <$> (S.elems <$> gets stImportedModules)
-                     <*> (iImportedModules <$> curIF)
-  uniq        = L.map head . group . L.sort
+imports = (++) <$> hsImps <*> imps where
+  hsImps = (L.map decl . S.toList .
+            S.insert unsafeCoerceMod . S.map Module) <$>
+             getHaskellImports
+  imps   = L.map decl . uniq <$>
+             ((++) <$> importsForPrim <*> (L.map mazMod <$> mnames))
+  decl m = HsImportDecl dummy m True Nothing Nothing
+  mnames = (++) <$> (S.elems <$> gets stImportedModules)
+                <*> (iImportedModules <$> curIF)
+  uniq   = L.map head . group . L.sort
 
 --------------------------------------------------
 -- Main compiling clauses
@@ -90,20 +108,26 @@
   (infodecl q :) <$> case d of
     Axiom{ axHsDef = Just (HsDefn ty hs) } -> return $ fbWithType ty (fakeExp hs)
     Axiom{}                                -> return $ fb axiomErr
-    Function{ funClauses = cls } -> mkwhere <$> mapM (clause q) (tag 0 cls)
+    Function{ funClauses =        cls } -> function cls
+    Primitive{ primClauses = Just cls } -> function cls
+    Primitive{ primClauses = Nothing, primName = s } -> fb <$> primBody s
     Datatype{ dataPars = np, dataIxs = ni, dataClause = cl, dataCons = cs, dataHsType = Just ty } -> do
       ccs <- concat <$> mapM checkConstructorType cs
       cov <- checkCover q ty np cs
-      return $ tvaldecl q 0 (np + ni) [] (Just __IMPOSSIBLE__) ++ ccs ++ cov
+      return $ tvaldecl q (dataInduction d) 0 (np + ni) [] (Just __IMPOSSIBLE__) ++ ccs ++ cov
     Datatype{ dataPars = np, dataIxs = ni, dataClause = cl, dataCons = cs, dataHsType = Nothing } -> do
       (ars, cds) <- unzip <$> mapM condecl cs
-      return $ tvaldecl q (maximum (np:ars) - np) (np + ni) cds cl
+      return $ tvaldecl q (dataInduction d) (maximum (np:ars) - np) (np + ni) cds cl
     Constructor{} -> return []
-    Record{ recClause = cl, recFields = flds } -> do
+    Record{ recClause = cl, recCon = c, recFields = flds } -> do
+      let noFields = genericLength flds
       ar <- arity <$> normalise ty
-      return $ tvaldecl q (genericLength flds) ar [cdecl q (genericLength flds)] cl
-    Primitive{ primName = s } -> fb <$> primBody s
+      cd <- case c of
+        Nothing -> return $ cdecl q noFields
+        Just c  -> snd <$> condecl c
+      return $ tvaldecl q Inductive noFields ar [cd] cl
   where
+  function cls = mkwhere <$> mapM (clause q) (tag 0 cls)
   tag _ []       = []
   tag i [cl]     = (i, True , cl): []
   tag i (cl:cls) = (i, False, cl): tag (i + 1) cls
@@ -169,13 +193,35 @@
   isCon _              = False
 
 argpatts :: [Arg Pattern] -> [HsPat] -> TCM [HsPat]
-argpatts ps0 bvs = evalStateT (mapM pat' ps0) bvs where
-  pat (VarP _   ) = do v <- gets head; modify tail; return v
-  pat (DotP _   ) = pat (VarP dummy)
-  pat (ConP q ps) = (HsPParen .).HsPApp <$> lift (conhqn q) <*> mapM pat' ps
-  pat (LitP l   ) = return $ HsPLit $ hslit l
+argpatts ps0 bvs = evalStateT (mapM pat' ps0) bvs
+  where
+  pat   (VarP _   ) = do v <- gets head; modify tail; return v
+  pat   (DotP _   ) = pat (VarP dummy)
+  pat   (LitP l   ) = return $ HsPLit $ hslit l
+  pat p@(ConP q ps) = do
+    -- Note that irr is applied once for every subpattern, so in the
+    -- worst case it is quadratic in the size of the pattern. I
+    -- suspect that this will not be a problem in practice, though.
+    irrefutable <- lift $ irr p
+    let tilde = if   tildesEnabled && irrefutable
+                then HsPParen . HsPIrrPat
+                else id
+    (tilde . HsPParen) <$>
+      (HsPApp <$> lift (conhqn q) <*> mapM pat' ps)
+
   pat' = pat . unArg
 
+  tildesEnabled = False
+
+  -- | Is the pattern irrefutable?
+  irr :: Pattern -> TCM Bool
+  irr (VarP {})   = return True
+  irr (DotP {})   = return True
+  irr (LitP {})   = return False
+  irr (ConP q ps) =
+    (&&) <$> singleConstructorType q
+         <*> (and <$> mapM (irr . unArg) ps)
+
 clausebody :: ClauseBody -> TCM HsExp
 clausebody b0 = runReaderT (go b0) 0 where
   go (Body   tm       ) = hsCast <$> term tm
@@ -208,6 +254,7 @@
 
 hslit :: Literal -> HsLiteral
 hslit l = case l of LitInt    _ x -> HsInt    x
+                    LitLevel  _ x -> HsInt    x
                     LitFloat  _ x -> HsFrac   (toRational x)
                     LitString _ x -> HsString x
                     LitChar   _ x -> HsChar   x
@@ -222,14 +269,28 @@
 cdecl q n = HsConDecl dummy (unqhname "C" q)
             [ HsUnBangedTy $ HsTyVar $ ihname "a" i | i <- [0 .. n - 1]]
 
-tvaldecl :: QName -> Nat -> Nat -> [HsConDecl] -> Maybe Clause -> [HsDecl]
-tvaldecl q ntv npar cds cl = let
-    (tn, vn) = (unqhname "T" q, unqhname "d" q)
-    tvs = [          ihname "a" i | i <- [0 .. ntv  - 1]]
-    pvs = [ HsPVar $ ihname "a" i | i <- [0 .. npar - 1]]
-  in HsFunBind [HsMatch dummy vn pvs (HsUnGuardedRhs unit_con) []] :
-     maybe [HsDataDecl dummy [] tn tvs cds []] (const []) cl
+tvaldecl :: QName
+         -> Induction
+            -- ^ Is the type inductive or coinductive?
+         -> Nat -> Nat -> [HsConDecl] -> Maybe Clause -> [HsDecl]
+tvaldecl q ind ntv npar cds cl =
+  HsFunBind [HsMatch dummy vn pvs (HsUnGuardedRhs unit_con) []] :
+  maybe [datatype] (const []) cl
+  where
+  (tn, vn) = (unqhname "T" q, unqhname "d" q)
+  tvs = [          ihname "a" i | i <- [0 .. ntv  - 1]]
+  pvs = [ HsPVar $ ihname "a" i | i <- [0 .. npar - 1]]
 
+  -- Inductive data types consisting of a single constructor with a
+  -- single argument are translated into newtypes.
+  datatype = case (ind, cds) of
+    (Inductive, [c@(HsConDecl _ _ [_])]) -> newtyp c
+    (Inductive, [c@(HsRecDecl _ _ [_])]) -> newtyp c
+    _                                    -> datatyp
+
+  newtyp c = HsNewTypeDecl dummy [] tn tvs c   []
+  datatyp  = HsDataDecl    dummy [] tn tvs cds []
+
 infodecl :: QName -> HsDecl
 infodecl q = fakeD (unqhname "name" q) $ show (show q)
 
@@ -259,20 +320,29 @@
 
 writeModule :: HsModule -> TCM ()
 writeModule m =
+  -- Note that GHC assumes that sources use ASCII or UTF-8.
   liftIO . (`UTF8.writeFile` (preamble ++ prettyPrint m)) =<< outFile
   where
   preamble = unlines $ [ "{-# LANGUAGE EmptyDataDecls"
                        , "           , ExistentialQuantification"
                        , "           , ScopedTypeVariables"
-                       , "           , UnicodeSyntax"
                        , "           , NoMonomorphismRestriction"
                        , "  #-}"
                        ]
 
+malonzoDir :: TCM FilePath
+malonzoDir = do
+  mdir <- optMAlonzoDir <$> commandLineOptions
+  case mdir of
+    Just dir -> return dir
+    Nothing  -> __IMPOSSIBLE__
+
 outFile' = do
-  mdir <- gets (optMAlonzoDir . stOptions)
-  (fdir, fn, _) <- splitFilePath . repldot slash . prettyPrint <$> curHsMod
-  let (dir, fp) = (addSlash mdir ++ fdir, addSlash dir ++ fn ++ ".hs")
+  mdir <- malonzoDir
+  (fdir, fn) <- splitFileName . repldot pathSeparator .
+                prettyPrint <$> curHsMod
+  let dir = mdir </> fdir
+      fp  = dir </> replaceExtension fn "hs"
   liftIO $ createDirectoryIfMissing True dir
   return (mdir, fp)
   where
@@ -281,17 +351,18 @@
 outFile :: TCM FilePath
 outFile = snd <$> outFile'
 
-callGHC :: (Interface, ClockTime) -> TCM ()
-callGHC mainICT = do
-  setInterface mainICT
-  mdir          <- optMAlonzoDir <$> commandLineOptions
+callGHC :: Interface -> TCM ()
+callGHC i = do
+  setInterface i
+  mdir          <- malonzoDir
   hsmod         <- prettyPrint <$> curHsMod
   MName agdaMod <- curMName
   let outputName = case agdaMod of
         [] -> __IMPOSSIBLE__
         ms -> last ms
   (mdir, fp) <- outFile'
-  opts       <- gets (optGhcFlags . stOptions)
+  opts       <- optGhcFlags <$> commandLineOptions
+
   let overridableArgs =
         [ "-O"
         , "-o", mdir </> show outputName
@@ -307,8 +378,31 @@
         ]
       args     = overridableArgs ++ opts ++ otherArgs
       compiler = "ghc"
+
   reportSLn "" 1 $ "calling: " ++ L.intercalate " " (compiler : args)
-  (exitcode, out, err) <- liftIO $ readProcessWithExitCode compiler args ""
+  (inn, out, err, p) <-
+    liftIO $ runInteractiveProcess compiler args Nothing Nothing
+
+  liftIO $ do
+    hClose inn
+    -- The handles should be in text mode.
+    hSetBinaryMode out False
+    hSetBinaryMode err False
+
+  -- GHC seems to use stderr for progress reports.
+  s <- liftIO $ join <$> LocIO.hGetContents err <*> LocIO.hGetContents out
+  reportSLn "" 1 s
+
+  exitcode <- liftIO $ do
+    -- Ensure that the output has been read before waiting for the
+    -- process.
+    E.evaluate (length s)
+    waitForProcess p
   case exitcode of
-    ExitFailure _ -> typeError $ CompilationError $ out ++ "\n" ++ err
+    ExitFailure _ -> typeError (CompilationError s)
     _             -> return ()
+
+  where
+  -- Note that this function returns s1 before inspecting its input.
+  join s1 s2 =
+    s1 ++ (if L.null s1 || last s1 == '\n' then "" else "\n") ++ s2
diff --git a/src/full/Agda/Compiler/MAlonzo/Compiler.hs-boot b/src/full/Agda/Compiler/MAlonzo/Compiler.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Compiler/MAlonzo/Compiler.hs-boot
@@ -0,0 +1,10 @@
+module Agda.Compiler.MAlonzo.Compiler where
+
+import Control.Monad.Reader (ReaderT)
+import Language.Haskell.Syntax (HsExp)
+
+import Agda.Syntax.Common (Nat)
+import Agda.Syntax.Internal (Term)
+import Agda.TypeChecking.Monad (TCM)
+
+term :: Term -> ReaderT Nat TCM HsExp
diff --git a/src/full/Agda/Compiler/MAlonzo/Encode.hs b/src/full/Agda/Compiler/MAlonzo/Encode.hs
--- a/src/full/Agda/Compiler/MAlonzo/Encode.hs
+++ b/src/full/Agda/Compiler/MAlonzo/Encode.hs
@@ -13,6 +13,8 @@
 import Language.Haskell.Syntax
 import Test.QuickCheck
 
+import Agda.Compiler.MAlonzo.Misc
+
 import Agda.Utils.QuickCheck
 import Agda.Utils.TestHelpers
 
@@ -30,14 +32,16 @@
 --   @modid -> [modid.] large {small | large | digit | ' }@
 --
 -- 'encodeModuleName' is an injective function into the set of module
--- names defined by @modid@. The function often preserves names. The
--- function always preserves @.@s.
+-- names defined by @modid@. The function preserves @.@s, and it also
+-- preserves module names whose first name part is not 'mazstr'.
 --
 -- Precondition: The input must not start or end with @.@, and no two
 -- @.@s may be adjacent.
 
 encodeModuleName :: Module -> Module
-encodeModuleName (Module s) = Module (concatMap encNamePart $ splitUp s)
+encodeModuleName (Module s) = Module $ case splitUp s of
+  p : ps | p == mazstr -> concat (p : map encNamePart ps)
+  _                    -> s
   where
   -- splitUp ".apa.bepa." == [".","apa",".","bepa","."]
   splitUp = groupBy ((&&) `on` (/= '.'))
@@ -46,13 +50,16 @@
   encNamePart s   = ensureFirstCharLarge s ++ concatMap enc s
 
   ensureFirstCharLarge s = case s of
-    c : cs | isUpper c -> ""
-    _                  -> "M"
+    c : cs | isUpper c && c /= largeChar -> ""
+    _                                    -> [largeChar]
 
-  isOK c = c /= 'Z' && isModChar c
+  largeChar  = 'Q'
+  escapeChar = 'Z'
 
+  isOK c = c /= escapeChar && isModChar c
+
   enc c | isOK c    = [c]
-        | otherwise = "Z" ++ show (fromEnum c) ++ "Z"
+        | otherwise = [escapeChar] ++ show (fromEnum c) ++ [escapeChar]
 
 -- Note: This injectivity test is quite weak. A better, dedicated
 -- generator could strengthen it.
@@ -63,9 +70,11 @@
    else
     True
 
-prop_encodeModuleName_OK (M s) =
+prop_encodeModuleName_OK (M s') =
   s ~= unM (encodeModuleName (Module s))
   where
+  s = mazstr ++ "." ++ s'
+
   ""        ~= ""         = True
   ('.' : s) ~= ('.' : s') = s ~= s'
   s         ~= (c : s')   = isUpper c && all isModChar s1' &&
@@ -75,6 +84,13 @@
 
   unM (Module s) = s
 
+prop_encodeModuleName_preserved (M m) =
+  shouldBePreserved m ==>
+    encodeModuleName (Module m) == Module m
+  where
+  shouldBePreserved m =
+    not (m == mazstr || (mazstr ++ ".") `isPrefixOf` m)
+
 -- | Agda module names. Used to test 'encodeModuleName'.
 
 newtype M = M String deriving (Show)
@@ -85,9 +101,11 @@
     m <- vectorOf ms namePart
     return $ M (intercalate "." m)
     where
-    namePart = do
-      cs <- choose (1, 2)
-      vectorOf cs (elements "a_AZ0'-∀")
+    namePart =
+      oneof [ return mazstr
+            , do cs <- choose (1, 2)
+                 vectorOf cs (elements "a_AQZ0'-∀")
+            ]
 
 ------------------------------------------------------------------------
 -- All tests
@@ -98,4 +116,5 @@
 tests = runTests "Agda.Compiler.MAlonzo.Encode"
   [ quickCheck' prop_encodeModuleName_injective
   , quickCheck' prop_encodeModuleName_OK
+  , quickCheck' prop_encodeModuleName_preserved
   ]
diff --git a/src/full/Agda/Compiler/MAlonzo/Misc.hs b/src/full/Agda/Compiler/MAlonzo/Misc.hs
--- a/src/full/Agda/Compiler/MAlonzo/Misc.hs
+++ b/src/full/Agda/Compiler/MAlonzo/Misc.hs
@@ -26,6 +26,7 @@
 import Agda.TypeChecking.Monad.Builtin
 import Agda.Utils.FileName
 import Agda.Utils.Monad
+import Agda.Utils.Pretty
 
 import Agda.Utils.Impossible
 #include "../../undefined.h"
@@ -34,34 +35,22 @@
 -- Setting up Interface before compile
 --------------------------------------------------
 
--- find the abstract module name from the given file name
-mnameFromFileName :: TCM () -> FilePath -> TCM ModuleName
-mnameFromFileName typecheck = (sigMName <$>) .
-  (maybe (typecheck>> getSignature) (return . iSignature) =<<) .
-  liftIO . readInterface . setExtension ".agdai"
-
--- the known module name used to find the current interface
-mazCurrentMod = "MazCurrentModule"
-
-setInterface :: (Interface, ClockTime) -> TCM ()
-setInterface (i,t) = do modify $ \s -> s{ stImportedModules = S.empty
-                                        , stHaskellImports  = iHaskellImports i
-                                        }
-                        (`uncurry` (i,t)) . visitModule =<< mazCurMName
-
-mazCurMName :: TCM ModuleName
-mazCurMName = maybe firstTime return .  L.lookup mazCurrentMod .
-              L.map (\m -> (show m, m)) . keys =<< getVisitedModules
-  where firstTime = concreteToAbstract_ . NewModuleQName . C.QName $
-                    C.Name noRange [C.Id mazCurrentMod]
+setInterface :: Interface -> TCM ()
+setInterface i = modify $ \s -> s
+  { stImportedModules = S.empty
+  , stCurrentModule   = Just $ iModuleName i
+  }
 
 curIF :: TCM Interface
 curIF = do
-  m  <- mazCurMName
-  mi <- M.lookup m <$> getVisitedModules
-  case mi of
-    Just (i, _) -> return i
-    Nothing     -> fail $ "No such module: " ++ show m
+  mName <- stCurrentModule <$> get
+  case mName of
+    Nothing   -> __IMPOSSIBLE__
+    Just name -> do
+      mm <- getVisitedModule (toTopLevelModuleName name)
+      case mm of
+        Nothing -> __IMPOSSIBLE__
+        Just mi -> return $ miInterface mi
 
 curSig :: TCM Signature
 curSig = iSignature <$> curIF
@@ -100,7 +89,8 @@
 tlmname m = do
   ms <- sortBy (compare `on` (length . mnameToList)) .
         L.filter (flip (isPrefixOf `on` mnameToList) m) <$>
-        ((:) <$> curMName <*> (keys <$> getVisitedModules))
+        L.map (iModuleName . miInterface) . M.elems <$>
+        getVisitedModules
   return $ case ms of (m' : _) -> m'; _ -> mazerror$ "tlmodOf: "++show m
 
 -- qualify HsName n by the module of QName q, if necessary;
@@ -143,7 +133,7 @@
 mazMod :: ModuleName -> Module
 mazMod = mazMod' . show
 mazerror msg = error $ mazstr ++ ": " ++ msg
-mazCoerce = hsVarUQ $ HsIdent "unsafeCoerce"
+mazCoerce = HsVar $ Qual unsafeCoerceMod (HsIdent "unsafeCoerce")
 
 -- for Runtime module: Not really used (Runtime modules has been abolished).
 rtmMod  = mazMod' "Runtime"
diff --git a/src/full/Agda/Compiler/MAlonzo/Primitives.hs b/src/full/Agda/Compiler/MAlonzo/Primitives.hs
--- a/src/full/Agda/Compiler/MAlonzo/Primitives.hs
+++ b/src/full/Agda/Compiler/MAlonzo/Primitives.hs
@@ -1,17 +1,21 @@
 module Agda.Compiler.MAlonzo.Primitives where
 
+import Control.Monad.Reader
 import Control.Monad.State
 import Data.Char
 import Data.List as L
 import Data.Map as M
 import Language.Haskell.Syntax
 
+import {-# SOURCE #-} Agda.Compiler.MAlonzo.Compiler (term)
 import Agda.Compiler.MAlonzo.Misc
 import Agda.Compiler.MAlonzo.Pretty
+import Agda.Syntax.Common
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Pretty
 import Agda.Utils.Monad
 
@@ -60,20 +64,20 @@
     forList toH toA = decls ["NIL", "CONS"]
        toH (concat
            ["let { f <<0>>        = [];"
-           ,"      f (<<1>> x xs) = x : f (unsafeCoerce xs)"
+           ,"      f (<<1>> x xs) = x : f (Unsafe.Coerce.unsafeCoerce xs)"
            ,"} in f"])
        toA (concat
            ["let { f []     = <<0>>;"
-           ,"      f (c:cs) = <<1>> c (unsafeCoerce (f cs));"
+           ,"      f (c:cs) = <<1>> c (Unsafe.Coerce.unsafeCoerce (f cs));"
            ,"} in f"])
     natToFrom hty to from = let
         totxt   = repl ["<<0>>", "<<1>>", hty] (concat
                        ["let { f <<0>>     = 0 :: <<2>>;"
-                       ,"      f (<<1>> x) = 1 + f (unsafeCoerce x);"
+                       ,"      f (<<1>> x) = 1 + f (Unsafe.Coerce.unsafeCoerce x);"
                        ,"} in f"])
         fromtxt = repl ["<<0>>", "<<1>>", hty] (concat
                        ["let { f x | x <= (0 :: <<2>>) = <<0>>"
-                       ,"     | True = <<1>> (unsafeCoerce (f (x - 1)))"
+                       ,"     | True = <<1>> (Unsafe.Coerce.unsafeCoerce (f (x - 1)))"
                        ,"} in f"])
       in decls ["ZERO", "SUC"] to totxt from fromtxt
     decls cs n1 b1 n2 b2 =
@@ -106,7 +110,8 @@
 
 -- Definition bodies for primitive functions
 primBody :: String -> TCM HsExp
-primBody s = (hsVarUQ . HsIdent <$>) $ maybe unimplemented id $ L.lookup s $
+primBody s = maybe unimplemented (either (hsVarUQ . HsIdent) id <$>) $
+             L.lookup s $
   [
   -- Integer functions
     "primIntegerPlus"    |-> binAsis "(+)" "Integer"
@@ -172,9 +177,15 @@
   , "primStringAppend"   |-> binAsis "(++)" "String"
   , "primStringEquality" |-> rel "(==)" "String"
   , "primShowString"     |-> return "(show :: String -> String)"
+
+  -- Trust me
+  , ("primTrustMe"       , Right <$> do
+       refl <- primRefl
+       flip runReaderT 0 $
+         term $ lam "A" (lam "x" (lam "y" (refl `apply` [var 2, var 1]))))
   ]
   where
-  (|->) = (,)
+  x |-> s = (x, Left <$> s)
   bin blt op ty from to = do
     from' <- bltQual' blt from
     to'   <- bltQual' blt to
@@ -192,7 +203,10 @@
   pred p = do toHB <- bltQual' "BOOL" mazHBoolToBool
               return $ repl [p, toHB] $ "(\\ x -> <<1>> (<<0>> x))"
   opty t = t ++ "->" ++ t ++ "->" ++ t
-  unimplemented = return$ prettyPrint$ rtmError$ "not yet implemented: "++ s
+  unimplemented = typeError $ NotImplemented s
+
+  lam x t = Lam Hidden (Abs x t)
+  var x   = Arg Hidden (Var x [])
 
 ----------------------
 
diff --git a/src/full/Agda/Interaction/BasicOps.hs b/src/full/Agda/Interaction/BasicOps.hs
--- a/src/full/Agda/Interaction/BasicOps.hs
+++ b/src/full/Agda/Interaction/BasicOps.hs
@@ -19,10 +19,10 @@
 
 import qualified Agda.Syntax.Concrete as C -- ToDo: Remove with instance of ToConcrete
 import Agda.Syntax.Position
-import Agda.Syntax.Abstract hiding (Open)
+import Agda.Syntax.Abstract as A hiding (Open)
 import Agda.Syntax.Common
 import Agda.Syntax.Info(ExprInfo(..),MetaInfo(..))
-import Agda.Syntax.Internal (MetaId(..),Type(..),Term(..),Sort(..))
+import Agda.Syntax.Internal as I
 import Agda.Syntax.Translation.InternalToAbstract
 import Agda.Syntax.Translation.AbstractToConcrete
 import Agda.Syntax.Translation.ConcreteToAbstract
@@ -37,10 +37,15 @@
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.EtaContract (etaContract)
+import Agda.TypeChecking.Coverage
+import Agda.TypeChecking.Records
+import Agda.TypeChecking.Pretty (prettyTCM)
+import qualified Agda.TypeChecking.Pretty as TP
 
 import Agda.Utils.Monad
-import Agda.Utils.Monad.Undo
 import Agda.Utils.Pretty
+import Agda.Utils.Permutation
+import Agda.Utils.Size
 
 #include "../undefined.h"
 import Agda.Utils.Impossible
@@ -77,25 +82,27 @@
 		 IsSort _ -> __IMPOSSIBLE__
 
 give :: InteractionId -> Maybe Range -> Expr -> TCM (Expr,[InteractionId])
-give ii mr e = liftTCM $
-     do  setUndo
-         mi <- lookupInteractionId ii
-         mis <- getInteractionPoints
-         r <- getInteractionRange ii
-         updateMetaVarRange mi $ maybe r id mr
-         giveExpr mi e
-         removeInteractionPoint ii
-         mis' <- getInteractionPoints
-         return (e, mis' \\ mis)
+give ii mr e = liftTCM $ do
+  mi <- lookupInteractionId ii
+  mis <- getInteractionPoints
+  r <- getInteractionRange ii
+  updateMetaVarRange mi $ maybe r id mr
+  giveExpr mi e `catchError` \err -> case errError err of
+    PatternErr _ -> do
+      err <- withInteractionId ii $ TP.text "Failed to give" TP.<+> prettyTCM e
+      typeError $ GenericError $ show err
+    _ -> throwError err
+  removeInteractionPoint ii
+  mis' <- getInteractionPoints
+  return (e, mis' \\ mis)
 
 
 addDecl :: Declaration -> TCM ([InteractionId])
-addDecl d =
-    do   setUndo
-         mis <- getInteractionPoints
-         checkDecl d
-         mis' <- getInteractionPoints
-         return (mis' \\ mis)
+addDecl d = do
+  mis <- getInteractionPoints
+  checkDecl d
+  mis' <- getInteractionPoints
+  return (mis' \\ mis)
 
 
 refine :: InteractionId -> Maybe Range -> Expr -> TCM (Expr,[InteractionId])
@@ -191,7 +198,7 @@
                    | CmpTeles Comparison b b
       | JustSort b | CmpSorts Comparison b b
       | Guard (OutputForm a b) [OutputForm a b]
-      | Assign b a
+      | Assign b a | TypedAssign b a a
       | IsEmptyType a
 
 -- | A subset of 'OutputForm'.
@@ -211,6 +218,7 @@
   CmpSorts _ i _    -> i
   Guard o _         -> outputFormId o
   Assign i _        -> i
+  TypedAssign i _ _ -> i
   IsEmptyType _     -> __IMPOSSIBLE__   -- Should never be used on IsEmpty constraints
 
 instance Functor (OutputForm a) where
@@ -223,13 +231,14 @@
     fmap f (CmpSorts cmp e e')    = CmpSorts cmp (f e) (f e')
     fmap f (Guard o os)           = Guard (fmap f o) (fmap (fmap f) os)
     fmap f (Assign m e)           = Assign (f m) e
+    fmap f (TypedAssign m e a)    = TypedAssign (f m) e a
     fmap f (IsEmptyType a)        = IsEmptyType a
 
 instance Reify Constraint (OutputForm Expr Expr) where
-    reify (ValueCmp cmp t u v) = CmpInType cmp <$> reify t <*> reify u <*> reify v
-    reify (TypeCmp cmp t t')   = CmpTypes cmp <$> reify t <*> reify t'
-    reify (TelCmp  cmp t t')   = CmpTeles cmp <$> (ETel <$> reify t) <*> (ETel <$> reify t')
-    reify (SortCmp cmp s s')   = CmpSorts cmp <$> reify s <*> reify s'
+    reify (ValueCmp cmp t u v)   = CmpInType cmp <$> reify t <*> reify u <*> reify v
+    reify (TypeCmp cmp t t')     = CmpTypes cmp <$> reify t <*> reify t'
+    reify (TelCmp  cmp t t')     = CmpTeles cmp <$> (ETel <$> reify t) <*> (ETel <$> reify t')
+    reify (SortCmp cmp s s')     = CmpSorts cmp <$> reify s <*> reify s'
     reify (Guarded c cs) = do
 	o  <- reify c
 	os <- mapM (withConstraint reify) cs
@@ -242,8 +251,9 @@
             m' <- reify (MetaV m [])
             return $ Assign m' e
           PostponedTypeCheckingProblem cl -> enterClosure cl $ \(e, a, _) -> do
-            a <- reify a
-            return $ OfType e a
+            a  <- reify a
+            m' <- reify (MetaV m [])
+            return $ TypedAssign m' e a
           Open{}  -> __IMPOSSIBLE__
           InstS{} -> __IMPOSSIBLE__
           InstV{} -> __IMPOSSIBLE__
@@ -261,8 +271,9 @@
     show (CmpTypes  cmp t t')   = show t ++ showComparison cmp ++ show t'
     show (CmpTeles  cmp t t')   = show t ++ showComparison cmp ++ show t'
     show (CmpSorts cmp s s')    = show s ++ showComparison cmp ++ show s'
-    show (Guard o os)           = show o ++ "  |  " ++ show os
+    show (Guard o os)           = show o ++ "  if  " ++ show os
     show (Assign m e)           = show m ++ " := " ++ show e
+    show (TypedAssign m e a)    = show m ++ " := " ++ show e ++ " : " ++ show a
     show (IsEmptyType a)        = "Is empty: " ++ show a
 
 instance (ToConcrete a c, ToConcrete b d) =>
@@ -277,6 +288,7 @@
     toConcrete (CmpSorts cmp e e') = CmpSorts cmp <$> toConcrete e <*> toConcrete e'
     toConcrete (Guard o os) = Guard <$> toConcrete o <*> toConcrete os
     toConcrete (Assign m e) = Assign <$> toConcrete m <*> toConcrete e
+    toConcrete (TypedAssign m e a) = TypedAssign <$> toConcrete m <*> toConcrete e <*> toConcrete a
     toConcrete (IsEmptyType a) = IsEmptyType <$> toConcrete a
 
 instance (Pretty a, Pretty b) => Pretty (OutputForm' a b) where
@@ -296,10 +308,6 @@
 judgToOutputForm (HasType e t) = OfType e t
 judgToOutputForm (IsSort s)    = JustSort s
 
-
-mkUndo :: TCM ()
-mkUndo = undo
-
 --- Printing Operations
 getConstraint :: Int -> TCM (OutputForm Expr Expr)
 getConstraint ci =
@@ -335,7 +343,7 @@
             unsol = return []
         case mvInstantiation mv of
           InstV{}                        -> sol (MetaV m args)
-          InstS{}                        -> sol (Sort $ MetaS m)
+          InstS{}                        -> sol (Sort $ MetaS m args)
           Open{}                         -> unsol
           BlockedConst{}                 -> unsol
           PostponedTypeCheckingProblem{} -> unsol
@@ -421,11 +429,71 @@
   info <- lookupMeta m
   withMetaInfo (mvInfo info) ret
 
--------------------------------
------ Help Functions ----------
--------------------------------
+-- The intro tactic
 
+-- Returns the terms (as strings) that can be
+-- used to refine the goal. Uses the coverage checker
+-- to find out which constructors are possible.
+introTactic :: InteractionId -> TCM [String]
+introTactic ii = do
+  mi <- lookupInteractionId ii
+  mv <- lookupMeta mi
+  withMetaInfo (getMetaInfo mv) $ case mvJudgement mv of
+    HasType _ t -> do
+        t <- normalise =<< piApply t <$> getContextArgs
+        case unEl t of
+          I.Def d _ -> do
+            def <- getConstInfo d
+            case theDef def of
+              Datatype{} -> introData t
+              Record{}   -> introRec d
+              _          -> return []
+          _ -> case telView t of
+            TelV EmptyTel _ -> return []
+            TelV tel _      -> introFun tel
+     `catchError` \_ -> return []
+    _ -> __IMPOSSIBLE__
+  where
+    conName [Arg _ (I.ConP c _)] = [c]
+    conName [_]                = []
+    conName _                  = __IMPOSSIBLE__
 
+    showTCM v = show <$> prettyTCM v
 
+    introFun tel = addCtxTel tel' $ do
+        imp <- showImplicitArguments
+        let okHiding h = imp || h == NotHidden
+        vars <- mapM showTCM [ Arg h (I.Var i [])
+                             | (h, i) <- zip hs $ reverse [0..n - 1]
+                             , okHiding h
+                             ]
+        return [ unwords $ ["λ"] ++ vars ++ ["→", "?"] ]
+      where
+        n = size tel
+        hs   = map argHiding $ telToList tel
+        tel' = telFromList [ fmap makeName b | b <- telToList tel ]
+        makeName ("_", t) = ("x", t)
+        makeName (x, t)   = (x, t)
 
+    introData t = do
+      let tel  = telFromList [Arg NotHidden ("_", t)]
+          perm = idP 1
+          pat  = [Arg NotHidden (I.VarP "c")]
+      r <- split tel perm pat 0
+      case r of
+        Left err -> return []
+        Right cs -> mapM showTCM $ concatMap (conName . scPats) cs
+
+    introRec d = do
+      hfs <- getRecordFieldNames d
+      fs <- ifM showImplicitArguments
+            (return $ map snd hfs)
+            (return [ f | (NotHidden, f) <- hfs ])
+      return
+        [ concat $
+            "record " :
+            zipWith (\c f -> unwords [c, show f, "= ?"])
+                    ("{":repeat ";") fs ++
+            [" }"]
+        ]
 
diff --git a/src/full/Agda/Interaction/CommandLine/CommandLine.hs b/src/full/Agda/Interaction/CommandLine/CommandLine.hs
--- a/src/full/Agda/Interaction/CommandLine/CommandLine.hs
+++ b/src/full/Agda/Interaction/CommandLine/CommandLine.hs
@@ -10,7 +10,7 @@
 import Data.Map as Map
 import Data.List as List
 import Data.Maybe
-import qualified System.IO.UTF8 as UTF8
+import qualified Agda.Utils.IO.Locale as LocIO
 
 import Agda.Interaction.BasicOps as BasicOps
 import Agda.Interaction.Monad
@@ -39,7 +39,6 @@
 
 import Agda.Utils.Monad
 import Agda.Utils.Fresh
-import Agda.Utils.Monad.Undo
 
 #include "../../undefined.h"
 import Agda.Utils.Impossible
@@ -70,32 +69,39 @@
 			do  case matchCommand cmd cmds of
 				Right c	-> go =<< liftTCM (c args)
 				Left []	->
-				    do	liftIO $ UTF8.putStrLn $ "Unknown command '" ++ cmd ++ "'"
+				    do	liftIO $ LocIO.putStrLn $ "Unknown command '" ++ cmd ++ "'"
 					loop
 				Left xs	->
-				    do	liftIO $ UTF8.putStrLn $ "More than one command match: " ++ concat (intersperse ", " xs)
+				    do	liftIO $ LocIO.putStrLn $ "More than one command match: " ++ concat (intersperse ", " xs)
 					loop
 		    Just _ ->
 			do  go =<< liftTCM (eval $ fromJust ms)
 	    `catchError` \e ->
 		do  s <- prettyError e
-		    liftIO $ UTF8.putStrLn s
+		    liftIO $ LocIO.putStrLn s
 		    loop
 
 -- | The interaction loop.
-interactionLoop :: TCM (ScopeInfo, a) -> IM ()
+interactionLoop :: TCM (Maybe Interface) -> IM ()
 interactionLoop typeCheck =
     do  liftTCM reload
 	interaction "Main> " commands evalTerm
     where
 	reload = do
-	    setUndo
-	    (scope, a) <- typeCheck
-	    setScope scope
+	    mi <- typeCheck
+            -- Note that mi is Nothing if (1) there is no input file or
+            -- (2) the file type checked with unsolved metas and
+            -- --allow-unsolved-metas was used. In the latter case the
+            -- behaviour of agda -I may be surprising. If agda -I ever
+            -- becomes properly supported again, then this behaviour
+            -- should perhaps be fixed.
+            setScope $ case mi of
+              Just i  -> iInsideScope i
+              Nothing -> emptyScopeInfo
 	  `catchError` \e -> do
 	    s <- prettyError e
-	    liftIO $ UTF8.putStrLn s
-	    liftIO $ UTF8.putStrLn "Failed."
+	    liftIO $ LocIO.putStrLn s
+	    liftIO $ LocIO.putStrLn "Failed."
 
 	commands =
 	    [ "quit"	    |>  \_ -> return $ Return ()
@@ -107,13 +113,11 @@
             , "give"	    |> \args -> continueAfter $ giveMeta args
             , "Refine"	    |> \args -> continueAfter $ refineMeta args
 	    , "metas"	    |> \args -> continueAfter $ showMetas args
-            , "undo"	    |> \_ -> continueAfter $ mkUndo
             , "load"	    |> \args -> continueAfter $ loadFile reload args
 	    , "eval"	    |> \args -> continueAfter $ evalIn args
             , "typeOf"      |> \args -> continueAfter $ typeOf args
             , "typeIn"      |> \args -> continueAfter $ typeIn args
 	    , "wakeup"	    |> \_ -> continueAfter $ retryConstraints
-	    , "noundo"	    |> \_ -> continueAfter $ clearUndoHistory
 	    , "scope"	    |> \_ -> continueAfter $ showScope
 	    ]
 	    where
@@ -126,18 +130,18 @@
 loadFile reload [file] =
     do	setInputFile file
 	reload
-loadFile _ _ = liftIO $ UTF8.putStrLn ":load file"
+loadFile _ _ = liftIO $ LocIO.putStrLn ":load file"
 
 showConstraints :: [String] -> TCM ()
 showConstraints [c] =
     do	i  <- readM c
 	cc <- normalise =<< lookupConstraint i
 	d  <- prettyTCM $ clValue cc
-	liftIO $ UTF8.print d
+	liftIO $ LocIO.print d
 showConstraints [] =
     do	cs <- BasicOps.getConstraints
-	liftIO $ UTF8.putStrLn $ unlines (List.map show cs)
-showConstraints _ = liftIO $ UTF8.putStrLn ":constraints [cid]"
+	liftIO $ LocIO.putStrLn $ unlines (List.map show cs)
+showConstraints _ = liftIO $ LocIO.putStrLn ":constraints [cid]"
 
 
 showMetas :: [String] -> TCM ()
@@ -147,16 +151,16 @@
 	  s <- typeOfMeta AsIs i
 	  r <- getInteractionRange i
 	  d <- showA s
-	  liftIO $ UTF8.putStrLn $ d ++ " " ++ show r
+	  liftIO $ LocIO.putStrLn $ d ++ " " ++ show r
 showMetas [m,"normal"] =
     do	i <- InteractionId <$> readM m
 	withInteractionId i $ do
 	  s <- showA =<< typeOfMeta Normalised i
 	  r <- getInteractionRange i
-	  liftIO $ UTF8.putStrLn $ s ++ " " ++ show r
+	  liftIO $ LocIO.putStrLn $ s ++ " " ++ show r
 showMetas [] =
     do  (interactionMetas,hiddenMetas) <- typeOfMetas AsIs
-        mapM_ (liftIO . UTF8.putStrLn) =<< mapM showII interactionMetas
+        mapM_ (liftIO . LocIO.putStrLn) =<< mapM showII interactionMetas
 	mapM_ print' hiddenMetas
     where
 	showII o = withInteractionId (outputFormId o) $ showA o
@@ -170,21 +174,21 @@
 	print' x = do
 	    r <- getMetaRange (metaId x)
 	    d <- showM x
-	    liftIO $ UTF8.putStrLn $ d ++ "  [ at " ++ show r ++ " ]"
-showMetas _ = liftIO $ UTF8.putStrLn $ ":meta [metaid]"
+	    liftIO $ LocIO.putStrLn $ d ++ "  [ at " ++ show r ++ " ]"
+showMetas _ = liftIO $ LocIO.putStrLn $ ":meta [metaid]"
 
 
 showScope :: TCM ()
 showScope = do
   scope <- getScope
-  liftIO $ UTF8.print scope
+  liftIO $ LocIO.print scope
 
 metaParseExpr ::  InteractionId -> String -> TCM A.Expr
 metaParseExpr ii s =
     do	m <- lookupInteractionId ii
         scope <- getMetaScope <$> lookupMeta m
         r <- getRange <$> lookupMeta m
-        --liftIO $ UTF8.putStrLn $ show scope
+        --liftIO $ LocIO.putStrLn $ show scope
         let pos = case rStart r of
                     Nothing  -> __IMPOSSIBLE__
                     Just pos -> pos
@@ -204,7 +208,7 @@
 giveMeta s | length s >= 2 =
     do  actOnMeta s (\ii -> \e  -> give ii Nothing e)
         return ()
-giveMeta _ = liftIO $ UTF8.putStrLn $ ": give" ++ " metaid expr"
+giveMeta _ = liftIO $ LocIO.putStrLn $ ": give" ++ " metaid expr"
 
 
 
@@ -212,7 +216,7 @@
 refineMeta s | length s >= 2 =
     do  actOnMeta s (\ii -> \e  -> refine ii Nothing e)
         return ()
-refineMeta _ = liftIO $ UTF8.putStrLn $ ": refine" ++ " metaid expr"
+refineMeta _ = liftIO $ LocIO.putStrLn $ ": refine" ++ " metaid expr"
 
 
 
@@ -223,8 +227,8 @@
 evalIn :: [String] -> TCM ()
 evalIn s | length s >= 2 =
     do	d <- actOnMeta s $ \_ e -> prettyA =<< evalInCurrent e
-        liftIO $ UTF8.print d
-evalIn _ = liftIO $ UTF8.putStrLn ":eval metaid expr"
+        liftIO $ LocIO.print d
+evalIn _ = liftIO $ LocIO.putStrLn ":eval metaid expr"
 
 parseExpr :: String -> TCM A.Expr
 parseExpr s = do
@@ -236,7 +240,7 @@
     do	e <- parseExpr s
         v <- evalInCurrent e
 	e <- prettyTCM v
-	liftIO $ UTF8.putStrLn $ show e
+	liftIO $ LocIO.putStrLn $ show e
 	return Continue
     where
 	evalInCurrent e = do
@@ -251,15 +255,15 @@
     do  e  <- parseExpr (unwords s)
         e0 <- typeInCurrent Normalised e
         e1 <- typeInCurrent AsIs e
-	liftIO . UTF8.putStrLn =<< showA e1
+	liftIO . LocIO.putStrLn =<< showA e1
 
 typeIn :: [String] -> TCM ()
 typeIn s@(_:_:_) =
     actOnMeta s $ \i e ->
     do	e1  <- typeInMeta i Normalised e
         e2 <- typeInMeta i AsIs e
-	liftIO . UTF8.putStrLn =<< showA e1
-typeIn _ = liftIO $ UTF8.putStrLn ":typeIn meta expr"
+	liftIO . LocIO.putStrLn =<< showA e1
+typeIn _ = liftIO $ LocIO.putStrLn ":typeIn meta expr"
 
 showContext :: [String] -> TCM ()
 showContext (meta:args) = do
@@ -274,8 +278,8 @@
 		    ["normal"] -> normalise $ raise n t
 		    _	       -> return $ raise n t
 	    d <- prettyTCM t
-	    liftIO $ UTF8.print $ text x <+> text ":" <+> d
-showContext _ = liftIO $ UTF8.putStrLn ":Context meta"
+	    liftIO $ LocIO.print $ text x <+> text ":" <+> d
+showContext _ = liftIO $ LocIO.putStrLn ":Context meta"
 
 -- | The logo that prints when Agda is started in interactive mode.
 splashScreen :: String
@@ -295,7 +299,7 @@
 
 -- | The help message
 help :: [Command a] -> IO ()
-help cs = UTF8.putStr $ unlines $
+help cs = LocIO.putStr $ unlines $
     [ "Command overview" ] ++ List.map explain cs ++
     [ "<exp> Infer type of expression <exp> and evaluate it." ]
     where
diff --git a/src/full/Agda/Interaction/Exceptions.hs b/src/full/Agda/Interaction/Exceptions.hs
--- a/src/full/Agda/Interaction/Exceptions.hs
+++ b/src/full/Agda/Interaction/Exceptions.hs
@@ -3,24 +3,21 @@
 -}
 module Agda.Interaction.Exceptions where
 
-import Control.OldException
+import Prelude hiding (catch)
+import Control.Exception
 import Control.Monad.Trans
 import System.Exit
-import qualified System.IO.UTF8 as UTF8
 
 import Agda.Syntax.Position
-import Agda.Syntax.Parser		    ( ParseError(..)	       )
-import Agda.Syntax.Concrete.Definitions  ( DeclarationException(..) )
+import Agda.Syntax.Parser ( ParseError(..) )
 
 handleParseException :: (ParseError -> IO a) -> ParseError -> IO a
 handleParseException crash e = crash e
 
-handleDeclarationException :: (DeclarationException -> IO a) -> DeclarationException -> IO a
-handleDeclarationException crash e = crash e
+-- | Note that 'failOnException' only catches 'ParseError's.
 
 failOnException :: (Range -> String -> IO a) -> IO a -> IO a
-failOnException h m = m `catchDyn` handleParseException handler
-		        `catchDyn` handleDeclarationException handler
+failOnException h m = m `catch` handleParseException handler
     where
 	handler x = h (getRange x) (show x)
 
diff --git a/src/full/Agda/Interaction/FindFile.hs b/src/full/Agda/Interaction/FindFile.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Interaction/FindFile.hs
@@ -0,0 +1,163 @@
+------------------------------------------------------------------------
+-- | Functions which map between module names and file names.
+--
+-- Note that file name lookups are cached in the 'TCState'. The code
+-- assumes that no Agda source files are added or removed from the
+-- include directories while the code is being type checked.
+------------------------------------------------------------------------
+
+module Agda.Interaction.FindFile
+  ( toIFile
+  , FindError(..), findErrorToTypeError
+  , findFile, findFile', findFile''
+  , findInterfaceFile
+  , checkModuleName
+  , ModuleToSource
+  , SourceToModule, sourceToModule
+  , tests
+  ) where
+
+import Control.Applicative
+import Control.Monad
+import Control.Monad.State.Class
+import Control.Monad.Trans
+import Data.List
+import Data.Map (Map)
+import qualified Data.Map as Map
+import System.FilePath
+import System.Directory
+
+import Agda.Syntax.Concrete.Name
+import Agda.TypeChecking.Monad
+import Agda.Utils.FileName
+import Agda.Utils.Monad
+
+-- | Converts an Agda file name to the corresponding interface file
+-- name.
+
+toIFile :: AbsolutePath -> AbsolutePath
+toIFile f = mkAbsolute (replaceExtension (filePath f) ".agdai")
+
+-- | Errors which can arise when trying to find a source file.
+--
+-- Invariant: All paths are absolute.
+
+data FindError
+  = NotFound [AbsolutePath]
+    -- ^ The file was not found. It should have had one of the given
+    -- file names.
+  | Ambiguous [AbsolutePath]
+    -- ^ Several matching files were found.
+    --
+    -- Invariant: The list of matching files has at least two
+    -- elements.
+
+-- | Given the module name which the error applies to this function
+-- converts a 'FindError' to a 'TypeError'.
+
+findErrorToTypeError :: TopLevelModuleName -> FindError -> TypeError
+findErrorToTypeError m (NotFound  files) = FileNotFound m files
+findErrorToTypeError m (Ambiguous files) =
+  AmbiguousTopLevelModuleName m files
+
+-- | Finds the source file corresponding to a given top-level module
+-- name. The returned paths are absolute.
+--
+-- Raises an error if the file cannot be found.
+
+findFile :: TopLevelModuleName -> TCM AbsolutePath
+findFile m = do
+  mf <- findFile' m
+  case mf of
+    Left err -> typeError $ findErrorToTypeError m err
+    Right f  -> return f
+
+-- | Tries to find the source file corresponding to a given top-level
+-- module name. The returned paths are absolute.
+
+findFile' :: TopLevelModuleName -> TCM (Either FindError AbsolutePath)
+findFile' m = do
+    dirs         <- getIncludeDirs
+    modFile      <- stModuleToSource <$> get
+    (r, modFile) <- liftIO $ findFile'' dirs m modFile
+    modify $ \s -> s { stModuleToSource = modFile }
+    return r
+
+-- | A variant of 'findFile'' which does not require 'TCM'.
+
+findFile''
+  :: [AbsolutePath]
+  -- ^ Include paths.
+  -> TopLevelModuleName
+  -> ModuleToSource
+  -- ^ Cached invocations of 'findFile'''. An updated copy is returned.
+  -> IO (Either FindError AbsolutePath, ModuleToSource)
+findFile'' dirs m modFile =
+    case Map.lookup m modFile of
+      Just f  -> return (Right f, modFile)
+      Nothing -> do
+        existingFiles <-
+          liftIO $ filterM (doesFileExist . filePath) files
+        return $ case nub existingFiles of
+          []     -> (Left (NotFound files), modFile)
+          [file] -> (Right file, Map.insert m file modFile)
+          files  -> (Left (Ambiguous files), modFile)
+    where
+    files = [ mkAbsolute (filePath dir </> file)
+            | dir  <- dirs
+            , file <- map (moduleNameToFileName m) [".agda", ".lagda"]
+            ]
+
+-- | Finds the interface file corresponding to a given top-level
+-- module name. The returned paths are absolute.
+--
+-- Raises an error if the source file cannot be found, and returns
+-- 'Nothing' if the source file can be found but not the interface
+-- file.
+
+findInterfaceFile :: TopLevelModuleName -> TCM (Maybe AbsolutePath)
+findInterfaceFile m = do
+  f  <- toIFile <$> findFile m
+  ex <- liftIO $ doesFileExist $ filePath f
+  return $ if ex then Just f else Nothing
+
+-- | Ensures that the module name matches the file name. The file
+-- corresponding to the module name (according to the include path)
+-- has to be the same as the given file name.
+
+checkModuleName :: TopLevelModuleName
+                   -- ^ The name of the module.
+                -> AbsolutePath
+                   -- ^ The file from which it was loaded.
+                -> TCM ()
+checkModuleName name file = do
+  moduleShouldBeIn <- findFile' name
+  case moduleShouldBeIn of
+    Left (NotFound files)  -> typeError $
+                                ModuleNameDoesntMatchFileName name files
+    Left (Ambiguous files) -> typeError $
+                                AmbiguousTopLevelModuleName name files
+    Right file' ->
+      ifM (liftIO $ filePath file === filePath file')
+          (return ())
+          (typeError $ ModuleDefinedInOtherFile name file file')
+
+-- | Maps top-level module names to the corresponding source file
+-- names.
+
+type ModuleToSource = Map TopLevelModuleName AbsolutePath
+
+-- | Maps source file names to the corresponding top-level module
+-- names.
+
+type SourceToModule = Map AbsolutePath TopLevelModuleName
+
+-- | Creates a 'SourceToModule' map based on 'stModuleToSource'.
+
+sourceToModule :: TCM SourceToModule
+sourceToModule =
+  Map.fromList
+     .  map (\(m, f) -> (f, m))
+     .  Map.toList
+     .  stModuleToSource
+    <$> get
diff --git a/src/full/Agda/Interaction/FindFile.hs-boot b/src/full/Agda/Interaction/FindFile.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Interaction/FindFile.hs-boot
@@ -0,0 +1,7 @@
+module Agda.Interaction.FindFile where
+
+import Data.Map (Map)
+import Agda.Syntax.Concrete.Name (TopLevelModuleName)
+import Agda.Utils.FileName (AbsolutePath)
+
+type ModuleToSource = Map TopLevelModuleName AbsolutePath
diff --git a/src/full/Agda/Interaction/GhciTop.hs b/src/full/Agda/Interaction/GhciTop.hs
--- a/src/full/Agda/Interaction/GhciTop.hs
+++ b/src/full/Agda/Interaction/GhciTop.hs
@@ -21,24 +21,28 @@
   , module Agda.Syntax.Abstract.Name
 
   , module Agda.Interaction.Exceptions
+
+  , mkAbsolute
   )
   where
 
 import System.Directory
+import qualified System.IO as IO
 import System.IO.Unsafe
 import Data.Char
+import Data.Maybe
 import Data.IORef
 import Data.Function
 import Control.Applicative
-import qualified System.IO.UTF8 as UTF8
 
 import Agda.Utils.Fresh
 import Agda.Utils.Monad
-import Agda.Utils.Monad.Undo
 import Agda.Utils.Pretty as P
 import Agda.Utils.String
 import Agda.Utils.FileName
 import Agda.Utils.Tuple
+import qualified Agda.Utils.IO.Locale as LocIO
+import qualified Agda.Utils.IO.UTF8 as UTF8
 
 import Control.Monad.Error
 import Control.Monad.Reader
@@ -48,6 +52,8 @@
 import qualified Data.Map as Map
 import System.Exit
 import qualified System.Mem as System
+import System.Time
+import Text.PrettyPrint
 
 import Agda.TypeChecker
 import Agda.TypeChecking.Monad as TM
@@ -77,6 +83,7 @@
 import Agda.Syntax.Abstract.Name
 
 import Agda.Interaction.Exceptions
+import Agda.Interaction.FindFile
 import Agda.Interaction.Options
 import Agda.Interaction.MakeCase
 import qualified Agda.Interaction.BasicOps as B
@@ -89,143 +96,245 @@
 
 import qualified Agda.Compiler.MAlonzo.Compiler as MAlonzo
 
+import qualified Agda.Auto.Auto as Auto
+
 #include "../undefined.h"
 import Agda.Utils.Impossible
 
 data State = State
   { theTCState           :: TCState
-  , theUndoStack         :: [TCState]
-  , theTopLevel          :: Maybe TopLevelInfo
-    -- ^ Invariant: The 'TopLevelInfo' corresponds to a type-correct
-    --   module.
   , theInteractionPoints :: [InteractionId]
     -- ^ The interaction points of the buffer, in the order in which
     --   they appear in the buffer. The interaction points are
     --   recorded in 'theTCState', but when new interaction points are
     --   added by give or refine Agda does not ensure that the ranges
     --   of later interaction points are updated.
+  , theCurrentFile       :: Maybe (AbsolutePath, ClockTime)
+    -- ^ The file which the state applies to. Only stored if the
+    -- module was successfully type checked (potentially with
+    -- warnings). The 'ClockTime' is the modification time stamp of
+    -- the file when it was last loaded.
   }
 
 initState :: State
 initState = State
   { theTCState           = TM.initState
-  , theUndoStack         = []
-  , theTopLevel          = Nothing
   , theInteractionPoints = []
+  , theCurrentFile       = Nothing
   }
 
 {-# NOINLINE theState #-}
 theState :: IORef State
 theState = unsafePerformIO $ newIORef initState
 
-ioTCM :: TCM a -> IO a
-ioTCM cmd = infoOnException $ do
-  State { theTCState   = st
-        , theUndoStack = us
+-- | An interactive computation.
+
+data Interaction = Interaction
+  { isIndependent :: Bool
+    -- ^ Can the command run even if the relevant file has not been
+    -- loaded into the state?
+  , command :: TCM (Maybe ModuleName)
+    -- ^ If a module name is returned, then syntax highlighting
+    -- information will be written for the given module (by 'ioTCM').
+  }
+
+-- | Run a TCM computation in the current state. Should only
+--   be used for debugging.
+ioTCM_ :: TCM a -> IO a
+ioTCM_ m = do
+  tcs <- readIORef theState
+  Right (x, s) <- runTCM $ do
+    put $ theTCState tcs
+    x <- withEnv initEnv m
+    s <- get
+    return (x, s)
+  writeIORef theState $ tcs { theTCState = s }
+  return x
+
+-- | Runs a 'TCM' computation. All calls from the Emacs mode should be
+-- wrapped in this function.
+
+ioTCM :: FilePath
+         -- ^ The current file. If this file does not match
+         -- 'theCurrentFile', and the 'Interaction' is not
+         -- \"independent\", then an error is raised.
+      -> Maybe FilePath
+         -- ^ Syntax highlighting information will be written to this
+         -- file, if any.
+      -> Interaction
+      -> IO ()
+ioTCM current highlightingFile cmd = infoOnException $ do
+#if MIN_VERSION_base(4,2,0)
+  -- Ensure that UTF-8 is used for communication with the Emacs mode.
+  IO.hSetEncoding IO.stdout IO.utf8
+#endif
+
+  current <- absolute current
+
+  -- Read the state.
+  State { theTCState     = st
+        , theCurrentFile = f
         } <- readIORef theState
-  r <- runTCM $ do
-      putUndoStack us
-      put st
-      x <- withEnv initEnv cmd
-      st <- get
-      us <- getUndoStack
-      return (x,st,us)
+
+  -- Run the computation.
+  r <- if not (isIndependent cmd) && Just current /= (fst <$> f) then
+         let s = "Error: First load the file." in
+         return $ Right $ Left (s, TCErr Nothing $ Exception noRange s)
+        else
+         runTCM $ catchError (do
+             put st
+             x  <- withEnv initEnv $ command cmd
+             st <- get
+             return (Right (x, st))
+           ) (\e -> do
+             s <- prettyError e
+             return (Left (s, e))
+           )
+
+  -- Update the state.
   case r of
-    Right (a,st',ss') -> do
+    Right (Right (m, st')) ->
       modifyIORef theState $ \s ->
-        s { theTCState = st'
-          , theUndoStack = ss'
+        s { theTCState   = st'
           }
-      return a
-    Left err -> displayErrorAndExit (Left err)
+    _ | isIndependent cmd ->
+      modifyIORef theState $ \s ->
+        s { theCurrentFile = Nothing }
+    _ -> return ()
 
+  -- Write out syntax highlighting info.
+  case highlightingFile of
+    Nothing -> return ()
+    Just f  -> do
+      let errHi e s = errHighlighting e
+                        `mplus`
+                      ((\h -> (h, Map.empty)) <$>
+                           generateErrorInfo (getRange e) s)
+      UTF8.writeFile f $
+        showHighlightingInfo $
+          case r of
+            Right (Right (mm, st')) -> do
+              m  <- mm
+              mi <- Map.lookup (SA.toTopLevelModuleName m)
+                               (stVisitedModules st')
+              return ( iHighlighting $ miInterface mi
+                     , stModuleToSource st'
+                     )
+            Right (Left (s, e)) -> errHi e (Just s)
+            Left e              -> errHi e Nothing
+
+  -- If an error was encountered, display an error message and exit
+  -- with an error code.
+  let errStatus = Status { sChecked               = False
+                         , sShowImplicitArguments =
+                             optShowImplicit $ stPragmaOptions st
+                         }
+  case r of
+    Right (Right _)     -> return ()
+    Right (Left (s, e)) -> displayErrorAndExit errStatus (getRange e) s
+    Left e              -> displayErrorAndExit errStatus (getRange e) $
+                             tcErrString e
+
 -- | @cmd_load m includes@ loads the module in file @m@, using
 -- @includes@ as the include directories.
 
-cmd_load :: FilePath -> [FilePath] -> IO ()
+cmd_load :: FilePath -> [FilePath] -> Interaction
 cmd_load m includes =
-  cmd_load' m includes True (\_ -> return ()) cmd_metas
+  cmd_load' m includes True (\_ -> command cmd_metas >> return ())
 
 -- | @cmd_load' m includes cmd cmd2@ loads the module in file @m@,
 -- using @includes@ as the include directories.
 --
 -- If type checking completes without any exceptions having been
 -- encountered then the command @cmd r@ is executed, where @r@ is the
--- second component of the result of 'Imp.createInterface'.
---
--- The command @cmd2@ is executed as the final step of @cmd_load'@,
--- unless an exception is encountered.
+-- result of 'Imp.typeCheck'.
 
 cmd_load' :: FilePath -> [FilePath]
           -> Bool -- ^ Allow unsolved meta-variables?
-          -> (Imp.CreateInterfaceResult -> TCM ()) -> IO ()
-          -> IO ()
-cmd_load' file includes unsolvedOK cmd cmd2 = infoOnException $ do
-    -- canonicalizePath seems to return absolute paths.
-    file <- liftIO $ canonicalizePath file
-    clearSyntaxInfo file
-    ioTCM $ do
-            clearUndoHistory
-	    preserveDecodedModules resetState
-            decodedModules <- stDecodedModules <$> get
-            setUndo
+          -> ((Interface, Maybe Imp.Warnings) -> TCM ())
+          -> Interaction
+cmd_load' file includes unsolvedOK cmd = Interaction True $ do
+  -- Forget the previous "current file" and interaction points.
+  liftIO $ modifyIORef theState $ \s ->
+    s { theInteractionPoints = []
+      , theCurrentFile       = Nothing
+      }
 
-            -- All options are reset when a file is reloaded,
-            -- including the choice of whether or not to display
-            -- implicit arguments.
-            (topLevel, ok) <- Imp.createInterface
-              (defaultOptions { optGenerateEmacsFile = True
-                              , optAllowUnsolved     = unsolvedOK
-                              , optIncludeDirs       = includes })
-              noTrace [] Map.empty
-              decodedModules emptySignature
-              Map.empty Nothing file True
+  f <- liftIO $ absolute file
+  t <- liftIO $ getModificationTime file
 
-            -- The module type checked, so let us store the abstract
-            -- syntax information and the interaction points.
-            is <- sortInteractionPoints =<< getInteractionPoints
-            liftIO $ modifyIORef theState $ \s ->
-              s { theTopLevel          = Just topLevel
-                , theInteractionPoints = is
-                }
-            cmd ok
+  -- All options are reset when a file is reloaded, including the
+  -- choice of whether or not to display implicit arguments.
+  oldIncs <- getIncludeDirs
+  setCommandLineOptions $
+    defaultOptions { optAllowUnsolved = unsolvedOK
+                   , optIncludeDirs   = includes
+                   }
 
-            liftIO tellEmacsToReloadSyntaxInfo
+  -- Reset the state, preserving options and decoded modules. Note
+  -- that Imp.typeCheck resets the decoded modules if the include
+  -- directories have changed.
+  preserveDecodedModules resetState
 
-    cmd2
-    System.performGC
+  ok <- Imp.typeCheck file Imp.ProjectRoot (Just oldIncs)
 
+  -- The module type checked. If the file was not changed while the
+  -- type checker was running then the interaction points and the
+  -- "current file" are stored.
+  t' <- liftIO $ getModificationTime file
+  when (t == t') $ do
+    is <- sortInteractionPoints =<< getInteractionPoints
+    liftIO $ modifyIORef theState $ \s ->
+      s { theInteractionPoints = is
+        , theCurrentFile       = Just (f, t)
+        }
+
+  cmd ok
+
+  liftIO System.performGC
+
+  return $ Just $ iModuleName (fst ok)
+
 -- | @cmd_compile m includes@ compiles the module in file @m@, using
 -- @includes@ as the include directories.
 
-cmd_compile :: FilePath -> [FilePath] -> IO ()
+cmd_compile :: FilePath -> [FilePath] -> Interaction
 cmd_compile file includes =
-  cmd_load' file includes False (\r ->
-    case r of
-      Imp.Success { Imp.cirInterface = i } -> do
-        MAlonzo.compilerMain (return i)
+  cmd_load' file includes False (\(i, mw) ->
+    case mw of
+      Nothing -> do
+        MAlonzo.compilerMain i
         display_info "*Compilation result*"
                    "The module was successfully compiled."
-      Imp.Warnings {} ->
+      Just w ->
         display_info errorTitle $ unlines
           [ "You can only compile modules without unsolved metavariables"
           , "or termination checking problems."
           ])
-    (return ())
 
-cmd_constraints :: IO ()
-cmd_constraints = ioTCM $ do
+cmd_constraints :: Interaction
+cmd_constraints = Interaction False $ do
     cs <- map show <$> B.getConstraints
     display_info "*Constraints*" (unlines cs)
-
+    return Nothing
 
-cmd_metas :: IO ()
-cmd_metas = ioTCM $ do -- CL.showMetas []
+-- Show unsolved metas. If there are no unsolved metas but unsolved constraints
+-- show those instead.
+cmd_metas :: Interaction
+cmd_metas = Interaction False $ do -- CL.showMetas []
   ims <- fst <$> B.typeOfMetas B.AsIs
   hms <- snd <$> B.typeOfMetas B.Normalised -- show unsolved implicit arguments normalised
-  di <- mapM (\i -> B.withInteractionId (B.outputFormId i) (showA i)) ims
-  dh <- mapM showA' hms
-  display_info "*All Goals*" $ unlines $ di ++ dh
+  if not $ null ims && null hms
+    then do
+      di <- mapM (\i -> B.withInteractionId (B.outputFormId i) (showA i)) ims
+      dh <- mapM showA' hms
+      display_info "*All Goals*" $ unlines $ di ++ dh
+      return Nothing
+    else do
+      cs <- B.getConstraints
+      if null cs
+        then display_info "*All Goals*" "" >> return Nothing
+        else command cmd_constraints
   where
     metaId (B.OfType i _) = i
     metaId (B.JustType i) = i
@@ -237,38 +346,71 @@
       d <- B.withMetaId (B.outputFormId m) (showA m)
       return $ d ++ "  [ at " ++ show r ++ " ]"
 
-cmd_undo :: IO ()
-cmd_undo = ioTCM undo
-
-cmd_reset :: IO ()
-cmd_reset = ioTCM $ do putUndoStack []; preserveDecodedModules resetState
+cmd_reset :: Interaction
+cmd_reset = Interaction True $ do
+  preserveDecodedModules resetState
+  return Nothing
 
-type GoalCommand = InteractionId -> Range -> String -> IO()
+type GoalCommand = InteractionId -> Range -> String -> Interaction
 
 cmd_give :: GoalCommand
 cmd_give = give_gen B.give $ \s ce -> case ce of (SC.Paren _ _)-> "'paren"
                                                  _             -> "'no-paren"
 
 cmd_refine :: GoalCommand
-cmd_refine = give_gen B.refine $ \s -> emacsStr . show
+cmd_refine = give_gen B.refine $ \s -> quote . show
 
-give_gen give_ref mk_newtxt ii rng s = do
-    ioTCM $ do
-      scope     <- getInteractionScope ii
-      (ae, iis) <- give_ref ii Nothing =<< B.parseExprIn ii rng s
-      let newtxt = A . mk_newtxt s $ abstractToConcrete (makeEnv scope) ae
-      iis       <- sortInteractionPoints iis
-      liftIO $ modifyIORef theState $ \s ->
-                 s { theInteractionPoints =
-                       replace ii iis (theInteractionPoints s) }
-      liftIO $ UTF8.putStrLn $ response $
-                 L [A "agda2-give-action", showNumIId ii, newtxt]
-      liftIO tellEmacsToUpdateGoals
-    cmd_metas
+give_gen give_ref mk_newtxt ii rng s = Interaction False $ do
+  scope     <- getInteractionScope ii
+  (ae, iis) <- give_ref ii Nothing =<< B.parseExprIn ii rng s
+  let newtxt = A . mk_newtxt s $ abstractToConcrete (makeEnv scope) ae
+  iis       <- sortInteractionPoints iis
+  liftIO $ modifyIORef theState $ \s ->
+             s { theInteractionPoints =
+                   replace ii iis (theInteractionPoints s) }
+  liftIO $ LocIO.putStrLn $ response $
+             L [A "agda2-give-action", showNumIId ii, newtxt]
+  command cmd_metas
+  return Nothing
   where
   -- Substitutes xs for x in ys.
   replace x xs ys = concatMap (\y -> if y == x then xs else [y]) ys
 
+cmd_intro :: GoalCommand
+cmd_intro ii rng _ = Interaction False $ do
+  ss <- B.introTactic ii
+  B.withInteractionId ii $ case ss of
+    []    -> do
+      display_infoD "*Intro*" $ text "No introduction forms found."
+      return Nothing
+    [s]   -> command $ cmd_refine ii rng s
+    _:_:_ -> do
+      display_infoD "*Intro*" $
+        sep [ text "Don't know which constructor to introduce of"
+            , let mkOr []     = []
+                  mkOr [x, y] = [text x <+> text "or" <+> text y]
+                  mkOr (x:xs) = text x : mkOr xs
+              in nest 2 $ fsep $ punctuate comma (mkOr ss)
+            ]
+      return Nothing
+
+cmd_refine_or_intro :: GoalCommand
+cmd_refine_or_intro ii rng s =
+  (if null s then cmd_intro else cmd_refine) ii rng s
+
+cmd_auto :: GoalCommand
+cmd_auto ii rng s = Interaction False $ do
+  (xs, msg) <- Auto.auto ii rng s
+  mapM_ (\(ii, s) -> do
+    liftIO $ modifyIORef theState $ \s ->
+      s { theInteractionPoints = filter (/= ii) (theInteractionPoints s) }
+    liftIO $ LocIO.putStrLn $ response $ L [A "agda2-give-action", showNumIId ii, A $ quote s]
+   ) xs
+  case msg of
+   Nothing -> command cmd_metas >> return ()
+   Just msg -> display_info "*Auto*" msg
+  return Nothing
+
 -- | Sorts interaction points based on their ranges.
 
 sortInteractionPoints :: [InteractionId] -> TCM [InteractionId]
@@ -306,86 +448,150 @@
 longNameLength = 10
 
 cmd_context :: B.Rewrite -> GoalCommand
-cmd_context norm ii _ _ = ioTCM $
+cmd_context norm ii _ _ = Interaction False $ do
   display_infoD "*Context*" =<< prettyContext norm ii
+  return Nothing
 
 cmd_infer :: B.Rewrite -> GoalCommand
-cmd_infer norm ii rng s = ioTCM $
+cmd_infer norm ii rng s = Interaction False $ do
   display_infoD "*Inferred Type*"
     =<< B.withInteractionId ii
           (prettyA =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s)
+  return Nothing
 
 cmd_goal_type :: B.Rewrite -> GoalCommand
-cmd_goal_type norm ii _ _ = ioTCM $ do
-    s <- B.withInteractionId ii $ prettyTypeOfMeta norm ii
-    display_infoD "*Current Goal*" s
+cmd_goal_type norm ii _ _ = Interaction False $ do
+  s <- B.withInteractionId ii $ prettyTypeOfMeta norm ii
+  display_infoD "*Current Goal*" s
+  return Nothing
 
 -- | Displays the current goal and context plus the given document.
 
-cmd_goal_type_context_and :: Doc -> B.Rewrite -> GoalCommand
-cmd_goal_type_context_and s norm ii _ _ = ioTCM $ do
-    goal <- B.withInteractionId ii $ prettyTypeOfMeta norm ii
-    ctx  <- prettyContext norm ii
-    display_infoD "*Goal type etc.*"
-                  (ctx $+$
-                   text (replicate 60 '\x2014') $+$
-                   text "Goal:" <+> goal $+$
-                   s)
+cmd_goal_type_context_and doc norm ii _ _ = do
+  goal <- B.withInteractionId ii $ prettyTypeOfMeta norm ii
+  ctx  <- prettyContext norm ii
+  display_infoD "*Goal type etc.*"
+                (ctx $+$
+                 text (replicate 60 '\x2014') $+$
+                 text "Goal:" <+> goal $+$
+                 doc)
+  return Nothing
 
 -- | Displays the current goal and context.
 
 cmd_goal_type_context :: B.Rewrite -> GoalCommand
-cmd_goal_type_context = cmd_goal_type_context_and P.empty
+cmd_goal_type_context norm ii rng s = Interaction False $
+  cmd_goal_type_context_and P.empty norm ii rng s
 
 -- | Displays the current goal and context /and/ infers the type of an
 -- expression.
 
 cmd_goal_type_context_infer :: B.Rewrite -> GoalCommand
-cmd_goal_type_context_infer norm ii rng s = ioTCM $ do
-    typ <- B.withInteractionId ii $
-             prettyA =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s
-    liftIO $ cmd_goal_type_context_and
-               (text "Have:" <+> typ)
-               norm ii rng s
+cmd_goal_type_context_infer norm ii rng s = Interaction False $ do
+  typ <- B.withInteractionId ii $
+           prettyA =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s
+  cmd_goal_type_context_and (text "Have:" <+> typ) norm ii rng s
 
 -- | Sets the command line options and updates the status information.
 
 setCommandLineOptions :: CommandLineOptions -> TCM ()
 setCommandLineOptions opts = do
-  TM.setCommandLineOptions opts
-  displayStatus
+  TM.setCommandLineOptions PersistentOptions opts
+  liftIO . displayStatus =<< status
 
--- | Displays\/updates some status information (currently just
--- indicates whether or not implicit arguments are shown).
+-- | Status information.
 
-displayStatus :: TCM ()
-displayStatus = do
+data Status = Status
+  { sShowImplicitArguments :: Bool
+    -- ^ Are implicit arguments displayed?
+  , sChecked               :: Bool
+    -- ^ Has the module been successfully type checked?
+  }
+
+-- | Computes some status information.
+
+status :: TCM Status
+status = do
   showImpl <- showImplicitArguments
-  let statusString = if showImpl then "ShowImplicit" else ""
-  liftIO $ UTF8.putStrLn $ response $
-    L [A "agda2-status-action", A (quote statusString)]
 
--- | @display_info header content@ displays @content@ (with header
--- @header@) in some suitable way, and also displays some status
--- information (see 'displayStatus').
+  -- Check if the file was successfully type checked, and has not
+  -- changed since. Note: This code does not check if any dependencies
+  -- have changed, and uses a time stamp to check for changes.
+  cur      <- theCurrentFile <$> liftIO (readIORef theState)
+  checked  <- case cur of
+    Nothing     -> return False
+    Just (f, t) -> do
+      t' <- liftIO $ getModificationTime $ filePath f
+      case t == t' of
+        False -> return False
+        True  ->
+          not . miWarnings . maybe __IMPOSSIBLE__ id <$>
+            (getVisitedModule =<<
+               maybe __IMPOSSIBLE__ id .
+                 Map.lookup f <$> sourceToModule)
 
-display_info :: String -> String -> TCM ()
-display_info bufname content = do
-  displayStatus
-  liftIO $ UTF8.putStrLn $ response $
+  return $ Status { sShowImplicitArguments = showImpl
+                  , sChecked               = checked
+                  }
+
+-- | Shows status information.
+
+showStatus :: Status -> String
+showStatus s = intercalate "," $ catMaybes [checked, showImpl]
+  where
+  boolToMaybe b x = if b then Just x else Nothing
+
+  checked  = boolToMaybe (sChecked               s) "Checked"
+  showImpl = boolToMaybe (sShowImplicitArguments s) "ShowImplicit"
+
+-- | Displays\/updates status information.
+
+displayStatus :: Status -> IO ()
+displayStatus s =
+  LocIO.putStrLn $ response $
+    L [A "agda2-status-action", A (quote $ showStatus s)]
+
+-- | @display_info' header content@ displays @content@ (with header
+-- @header@) in some suitable way.
+
+display_info' :: String -> String -> IO ()
+display_info' bufname content =
+  LocIO.putStrLn $ response $
     L [ A "agda2-info-action"
       , A (quote bufname)
       , A (quote content)
       ]
 
+-- | @display_info@ does what 'display_info'' does, but additionally
+-- displays some status information (see 'status' and
+-- 'displayStatus').
+
+display_info :: String -> String -> TCM ()
+display_info bufname content = do
+  liftIO . displayStatus =<< status
+  liftIO $ display_info' bufname content
+
 -- | Like 'display_info', but takes a 'Doc' instead of a 'String'.
 
 display_infoD :: String -> Doc -> TCM ()
 display_infoD bufname content = display_info bufname (render content)
 
+-- | Formats a response command.
+
 response :: Lisp String -> String
 response l = show (text "agda2_mode_code" <+> pretty l)
 
+-- | Formats a response string.
+
+responseString :: Lisp String -> String
+responseString s = response $
+  L [A "setq", A "agda2-response", s]
+
+-- | Responds to a query.
+
+respond :: Lisp String -> IO ()
+respond = LocIO.putStrLn . responseString
+
 data Lisp a = A a | L [Lisp a] | Q (Lisp a)
 
 instance Pretty a => Pretty (Lisp a) where
@@ -418,20 +624,22 @@
 nameModifiers = "" : "'" : "''" : [show i | i <-[3..]]
 
 cmd_make_case :: GoalCommand
-cmd_make_case ii rng s = ioTCM $ do
+cmd_make_case ii rng s = Interaction False $ do
   cs <- makeCase ii rng s
   B.withInteractionId ii $ do
     pcs <- mapM prettyA cs
-    liftIO $ UTF8.putStrLn $ response $
+    liftIO $ LocIO.putStrLn $ response $
       L [ A "agda2-make-case-action",
-          Q $ L $ List.map (A . quote . show) pcs
+          Q $ L $ List.map (A . quote . renderStyle (style { mode = OneLineMode })) pcs
         ]
+  return Nothing
 
-cmd_solveAll :: IO ()
-cmd_solveAll = ioTCM $ do
-    out <- getInsts
-    liftIO $ UTF8.putStrLn $ response $
-      L[ A"agda2-solveAll-action" , Q . L $ concatMap prn out]
+cmd_solveAll :: Interaction
+cmd_solveAll = Interaction False $ do
+  out <- getInsts
+  liftIO $ LocIO.putStrLn $ response $
+    L[ A"agda2-solveAll-action" , Q . L $ concatMap prn out]
+  return Nothing
   where
   getInsts = mapM lowr =<< B.getSolvedInteractionPoints
     where
@@ -439,7 +647,7 @@
         mi <- getMetaInfo <$> lookupMeta m
         e <- withMetaInfo mi $ lowerMeta <$> abstractToConcrete_ e
         return (i, e)
-  prn (ii,e)= [showNumIId ii, A $ emacsStr $ show e]
+  prn (ii,e)= [showNumIId ii, A $ quote $ show e]
 
 class LowerMeta a where lowerMeta :: a -> a
 instance LowerMeta SC.Expr where
@@ -492,25 +700,25 @@
 instance LowerMeta SC.Declaration where
   lowerMeta = go where
     go d = case d of
-      TypeSig n e1            -> TypeSig n (lowerMeta e1)
-      SC.Field n e1           -> SC.Field n (lowerMeta e1)
-      FunClause lhs rhs whcl  -> FunClause lhs (lowerMeta rhs) (lowerMeta whcl)
-      Data r ind n tel e1 cs  -> Data r ind n
-                                 (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)
-      SC.Record r n tel e1 cs -> SC.Record r n
-                                 (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)
-      Infix _ _               -> d
-      Mutual r ds             -> Mutual r (lowerMeta ds)
-      Abstract r ds           -> Abstract r (lowerMeta ds)
-      Private r ds            -> Private r (lowerMeta ds)
-      Postulate r sigs        -> Postulate r (lowerMeta sigs)
-      SC.Primitive r sigs     -> SC.Primitive r (lowerMeta sigs)
-      SC.Open _ _ _           -> d
-      SC.Import _ _ _ _ _     -> d
-      SC.Pragma _	      -> d
+      TypeSig n e1                  -> TypeSig n (lowerMeta e1)
+      SC.Field h n e1               -> SC.Field h n (lowerMeta e1)
+      FunClause lhs rhs whcl        -> FunClause lhs (lowerMeta rhs) (lowerMeta whcl)
+      Data r ind n tel e1 cs        -> Data r ind n
+                                         (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)
+      SC.Record r n c tel e1 cs     -> SC.Record r n c
+                                         (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)
+      Infix _ _                     -> d
+      Mutual r ds                   -> Mutual r (lowerMeta ds)
+      Abstract r ds                 -> Abstract r (lowerMeta ds)
+      Private r ds                  -> Private r (lowerMeta ds)
+      Postulate r sigs              -> Postulate r (lowerMeta sigs)
+      SC.Primitive r sigs           -> SC.Primitive r (lowerMeta sigs)
+      SC.Open _ _ _                 -> d
+      SC.Import _ _ _ _ _           -> d
+      SC.Pragma _                   -> d
       ModuleMacro r n tel e1 op dir -> ModuleMacro r n
-                                    (lowerMeta tel) (lowerMeta e1) op dir
-      SC.Module r qn tel ds   -> SC.Module r qn (lowerMeta tel) (lowerMeta ds)
+                                         (lowerMeta tel) (lowerMeta e1) op dir
+      SC.Module r qn tel ds         -> SC.Module r qn (lowerMeta tel) (lowerMeta ds)
 
 instance LowerMeta SC.WhereClause where
   lowerMeta SC.NoWhere		= SC.NoWhere
@@ -532,15 +740,16 @@
 
 cmd_compute :: Bool -- ^ Ignore abstract?
                -> GoalCommand
-cmd_compute ignore ii rng s = ioTCM $ do
+cmd_compute ignore ii rng s = Interaction False $ do
   e <- B.parseExprIn ii rng s
   d <- B.withInteractionId ii $ do
          let c = B.evalInCurrent e
          v <- if ignore then ignoreAbstractMode c else c
          prettyA v
   display_info "*Normal Form*" (show d)
+  return Nothing
 
--- | Parses and scope checks an expression (using insideScope topLevel
+-- | Parses and scope checks an expression (using the \"inside scope\"
 -- as the scope), performs the given command with the expression as
 -- input, and displays the result.
 
@@ -551,16 +760,21 @@
      -- ^ The name to used for the buffer displaying the output.
   -> String
      -- ^ The expression to parse.
-  -> IO ()
-parseAndDoAtToplevel cmd title s = infoOnException $ do
-  e <- parse exprParser s
-  mTopLevel <- theTopLevel <$> readIORef theState
-  ioTCM $ display_info title =<<
-    case mTopLevel of
-      Nothing       -> return "Error: First load the file."
-      Just topLevel -> do
-        setScope $ insideScope topLevel
-        showA =<< cmd =<< concreteToAbstract_ e
+  -> Interaction
+parseAndDoAtToplevel cmd title s = Interaction False $ do
+  e <- liftIO $ parse exprParser s
+  display_info title =<< do
+    mCurrent <- stCurrentModule <$> get
+    case mCurrent of
+      Nothing      -> return "Error: First load the file."
+      Just current -> do
+        r <- getVisitedModule (SA.toTopLevelModuleName current)
+        case r of
+          Nothing -> __IMPOSSIBLE__
+          Just mi -> do
+            setScope $ iInsideScope $ miInterface mi
+            showA =<< cmd =<< concreteToAbstract_ e
+  return Nothing
 
 -- | Parse the given expression (as if it were defined at the
 -- top-level of the current module) and infer its type.
@@ -568,7 +782,7 @@
 cmd_infer_toplevel
   :: B.Rewrite  -- ^ Normalise the type?
   -> String
-  -> IO ()
+  -> Interaction
 cmd_infer_toplevel norm =
   parseAndDoAtToplevel (B.typeInCurrent norm) "*Inferred Type*"
 
@@ -576,58 +790,83 @@
 -- at the top-level of the current module) and normalise it.
 
 cmd_compute_toplevel :: Bool -- ^ Ignore abstract?
-                     -> String -> IO ()
+                     -> String -> Interaction
 cmd_compute_toplevel ignore =
   parseAndDoAtToplevel (if ignore then ignoreAbstractMode . c else c)
                        "*Normal Form*"
   where c = B.evalInCurrent
 
--- change "\<decimal>" to a single character
--- TODO: This seems to be the wrong solution to the problem. Attack
--- the source instead.
-emacsStr s = go (show s) where
-  go ('\\':ns@(n:_))
-     | isDigit n = toEnum (read digits :: Int) : go rest
-     where (digits, rest) = span isDigit ns
-  go (c:s) = c : go s
-  go []    = []
-
 ------------------------------------------------------------------------
 -- Syntax highlighting
 
--- | Tell the Emacs mode to rescan the buffer for goals.
+-- | @cmd_write_highlighting_info source target@ writes syntax
+-- highlighting information for the module in @source@ into @target@.
+-- If the module does not exist, or its module name is malformed or
+-- cannot be determined, or the module has not already been visited,
+-- or the cached info is out of date, then the representation of \"no
+-- highlighting information available\" is instead written to
+-- @target@.
 
-tellEmacsToUpdateGoals :: IO ()
-tellEmacsToUpdateGoals = do
-  is <- theInteractionPoints <$> readIORef theState
-  UTF8.putStrLn $ response $ L [A "agda2-annotate", format is]
-  where format = Q . L . List.map showNumIId
+cmd_write_highlighting_info :: FilePath -> FilePath -> Interaction
+cmd_write_highlighting_info source target = Interaction True $ do
+  liftIO . UTF8.writeFile target . showHighlightingInfo =<< do
+    ex <- liftIO $ doesFileExist source
+    case ex of
+      False -> return Nothing
+      True  -> do
+        mmi <- (getVisitedModule =<< Imp.moduleName source)
+                 `catchError`
+               \_ -> return Nothing
+        case mmi of
+          Nothing     -> return Nothing
+          Just mi -> do
+            sourceT <- liftIO $ getModificationTime source
+            if sourceT <= miTimeStamp mi
+             then do
+              modFile <- stModuleToSource <$> get
+              return $ Just (iHighlighting $ miInterface mi, modFile)
+             else
+              return Nothing
+  return Nothing
 
--- | Tell the Emacs mode to reload the highlighting information. This
--- includes rescanning the buffer for goals.
+-- | Returns the interaction ids for all goals in the current module,
+-- in the order in which they appear in the module. If there is no
+-- current module, then an empty list of goals is returned.
 
-tellEmacsToReloadSyntaxInfo :: IO ()
-tellEmacsToReloadSyntaxInfo = do
-  -- agda2-highlight-reload should run before agda2-annotate, because
-  -- the latter command can change the contents of the buffer, and
-  -- this can invalidate the ranges of the syntax-info.
-  UTF8.putStrLn $ response $ L [A "agda2-highlight-reload"]
-  tellEmacsToUpdateGoals
+cmd_goals :: FilePath
+             -- ^ If the module name in this file does not match that
+             -- of the current module (or the module name cannot be
+             -- determined), then an empty list of goals is returned.
+          -> Interaction
+cmd_goals f = Interaction True $ do
+  is <- do
+    ex <- liftIO $ doesFileExist f
+    case ex of
+      False -> return []
+      True  -> do
+        mm       <- (Just <$> Imp.moduleName f)
+                      `catchError`
+                    \_ -> return Nothing
+        mCurrent <- stCurrentModule <$> get
+        if mm == (SA.toTopLevelModuleName <$> mCurrent) then
+          theInteractionPoints <$> liftIO (readIORef theState)
+         else
+          return []
+  liftIO $ respond $ Q $ L $ List.map showNumIId is
+  return Nothing
 
--- | Tells the Emacs mode to reload the highlighting information and
--- go to the first error position (if any).
+-- | Tells the Emacs mode to go to the first error position (if any).
 
 tellEmacsToJumpToError :: Range -> IO ()
 tellEmacsToJumpToError r = do
   case rStart r of
-    Nothing                                -> return ()
-    -- Errors for expressions entered using the command line sometimes
-    -- have an empty file name component. This should be fixed.
-    Just (Pn { srcFile = "" })             -> return ()
-    Just (Pn { srcFile = f,  posPos = p }) ->
-      UTF8.putStrLn $ response $
-        L [A "annotation-goto", Q $ L [A (show f), A ".", A (show p)]]
-  tellEmacsToReloadSyntaxInfo
+    Nothing                                    -> return ()
+    Just (Pn { srcFile = Nothing })            -> return ()
+    Just (Pn { srcFile = Just f, posPos = p }) ->
+      LocIO.putStrLn $ response $
+        L [ A "annotation-goto"
+          , Q $ L [A (quote $ filePath f), A ".", A (show p)]
+          ]
 
 ------------------------------------------------------------------------
 -- Implicit arguments
@@ -635,18 +874,20 @@
 -- | Tells Agda whether or not to show implicit arguments.
 
 showImplicitArgs :: Bool -- ^ Show them?
-                 -> IO ()
-showImplicitArgs showImpl = ioTCM $ do
+                 -> Interaction
+showImplicitArgs showImpl = Interaction False $ do
   opts <- commandLineOptions
   setCommandLineOptions (opts { optShowImplicit = showImpl })
+  return Nothing
 
 -- | Toggle display of implicit arguments.
 
-toggleImplicitArgs :: IO ()
-toggleImplicitArgs = ioTCM $ do
+toggleImplicitArgs :: Interaction
+toggleImplicitArgs = Interaction False $ do
   opts <- commandLineOptions
   setCommandLineOptions (opts { optShowImplicit =
                                   not $ optShowImplicit opts })
+  return Nothing
 
 ------------------------------------------------------------------------
 -- Error handling
@@ -657,35 +898,28 @@
 errorTitle :: String
 errorTitle = "*Error*"
 
--- | Displays an error (represented either as a 'TCErr' or as a
--- 'Range' and a message) and terminates the program.
+-- | Displays an error, instructs Emacs to jump to the site of the
+-- error, and terminates the program. Because this function may switch
+-- the focus to another file the status information is also updated.
 
-displayErrorAndExit :: Either TCErr (Range, String) -> IO a
-displayErrorAndExit err = do
-  runTCM $ do
-    appendErrorToEmacsFile err'
-    display_info errorTitle =<< msg
-  tellEmacsToJumpToError rng
+displayErrorAndExit :: Status
+                       -- ^ The new status information.
+                    -> Range -> String -> IO a
+displayErrorAndExit status r s = do
+  display_info' errorTitle s
+  tellEmacsToJumpToError r
+  displayStatus status
   exitWith (ExitFailure 1)
-  where
-  err' = case err of
-    Left e           -> e
-    Right (rng, msg) -> Exception rng msg
 
-  msg = case err of
-    Left e             -> prettyError e
-    Right (rng, msg)
-      | rng == noRange -> return msg
-      | otherwise      -> return (show rng ++ "\n" ++ msg)
-
-  rng = case err of
-    Left  e          -> getRange e
-    Right (rng, msg) -> rng
-
--- | Outermost error handler. Should wrap all functions called from
--- Emacs (directly or indirectly).
+-- | Outermost error handler.
 
 infoOnException m =
-  failOnException inform m `catchImpossible` \e ->
-    inform noRange (show e)
-  where inform rng msg = displayErrorAndExit (Right (rng, msg))
+  failOnException (displayErrorAndExit s) m `catchImpossible` \e ->
+    displayErrorAndExit s noRange (show e)
+  where
+  s = Status { sChecked               = False
+             , sShowImplicitArguments = False
+               -- Educated guess... This field is not important, so it
+               -- does not really matter if it is displayed
+               -- incorrectly when an unexpected error has occurred.
+             }
diff --git a/src/full/Agda/Interaction/Highlighting/Emacs.hs b/src/full/Agda/Interaction/Highlighting/Emacs.hs
--- a/src/full/Agda/Interaction/Highlighting/Emacs.hs
+++ b/src/full/Agda/Interaction/Highlighting/Emacs.hs
@@ -1,16 +1,16 @@
+{-# LANGUAGE CPP #-}
+
 -- | Functions which give precise syntax highlighting info to Emacs.
 
 module Agda.Interaction.Highlighting.Emacs
-  ( clearSyntaxInfo
-  , writeEmacsFile
-  , appendErrorToEmacsFile
+  ( showHighlightingInfo
   , Agda.Interaction.Highlighting.Emacs.tests
   ) where
 
+import Agda.Interaction.FindFile
 import Agda.Interaction.Highlighting.Precise
 import Agda.Interaction.Highlighting.Range
 import Agda.Interaction.Highlighting.Generate
-import Agda.TypeChecking.Monad (TCM, TCErr)
 import Agda.Syntax.Abstract (QName)
 import Agda.Syntax.Common
 import qualified Agda.Syntax.Position as P
@@ -20,11 +20,14 @@
 import Agda.Utils.String
 import Agda.Utils.TestHelpers
 
+import Agda.Utils.Impossible
+#include "../../undefined.h"
+
 import Control.Monad.Trans
 import Data.List
+import qualified Data.Map as Map
 import Data.Char
 import Data.Maybe
-import qualified System.IO.UTF8 as UTF8
 
 ------------------------------------------------------------------------
 -- Read/show functions
@@ -51,88 +54,38 @@
 -- | Shows meta information in such a way that it can easily be read
 -- by Emacs.
 
-showMetaInfo :: (Range, MetaInfo) -> String
-showMetaInfo (r, m) =
-     "(annotation-annotate "
+showMetaInfo :: ModuleToSource
+                -- ^ Must contain a mapping for the definition site's
+                -- module, if any.
+             -> (Range, MetaInfo) -> String
+showMetaInfo modFile (r, m) =
+     "("
   ++ show (from r)
   ++ " "
   ++ show (to r)
-  ++ " '("
+  ++ " ("
   ++ concat (intersperse " " (toAtoms m))
   ++ ")"
   ++ (maybe " nil" ((" " ++) . quote) $ note m)
-  ++ (maybe ""
-            (\(_, f, p) -> " '(" ++ quote f ++ " . " ++ show p ++ ")")
-        $ definitionSite m)
+  ++ defSite
   ++ ")"
-
--- | Shows a file in an Emacsy fashion.
-
-showFile :: CompressedFile -> String
-showFile = unlines . map showMetaInfo
-
-------------------------------------------------------------------------
--- IO
-
--- | Gives the syntax highlighting information file name associated
--- with the given Agda file.
-
-infoFileName :: FilePath -> String
-infoFileName path | null dir  = base
-                  | otherwise = dir ++ slash : base
   where
-  (dir, name, ext) = splitFilePath path
-  base = '.' : name ++ ext ++ ".el"
-
--- | Clears a syntax highlighting information file.
---
--- The output file name is constructed from the given file name by
--- prepending \".\" and appending \".el\".
-
-clearSyntaxInfo
-  :: FilePath
-     -- ^ The path to the file which should be highlighted
-     -- (not the file which should be cleared).
-  -> IO ()
-clearSyntaxInfo path = UTF8.writeFile (infoFileName path) ""
-
--- | Appends to a file with syntax highlighting information.
-
-appendSyntaxInfo :: HighlightingInfo -> IO ()
-appendSyntaxInfo highlighting =
-  UTF8.appendFile (infoFileName $ source highlighting)
-                  (showFile $ info highlighting)
-
-------------------------------------------------------------------------
--- Driver which uses the code in
--- Agda.Interaction.Highlighting.Generate to create syntax
--- highlighting files
-
--- | Outputs syntax highlighting information after clearing existing
--- highlighting info.
-
-writeEmacsFile :: HighlightingInfo -> TCM ()
-writeEmacsFile highlighting = do
-  liftIO $ clearSyntaxInfo (source highlighting)
-  liftIO $ appendSyntaxInfo highlighting
+  defSite = case definitionSite m of
+    Nothing     -> ""
+    Just (m, p) -> case Map.lookup m modFile of
+      Nothing -> __IMPOSSIBLE__
+      Just f  -> " (" ++ quote (filePath f) ++ " . " ++ show p ++ ")"
 
--- | Appends information about an error to the highlighting file
--- relevant for the error.
+-- | Shows syntax highlighting information in an Emacsy fashion.
 
-appendErrorToEmacsFile :: TCErr -> TCM ()
-appendErrorToEmacsFile err = do
-  let r = P.getRange err
-  s <- prettyError err
-  case P.rStart r of
-    Nothing                                         -> return ()
-    -- Errors for expressions entered using the command line sometimes
-    -- have an empty file name component. This should be fixed.
-    Just     (P.Pn { P.srcFile = "" })              -> return ()
-    Just pos@(P.Pn { P.srcFile = f, P.posPos = p }) -> do
-      liftIO $ appendSyntaxInfo $
-        HighlightingInfo { source = f
-                         , info   = compress $ generateErrorInfo r s
-                         }
+showHighlightingInfo
+  :: Maybe (HighlightingInfo, ModuleToSource)
+     -- ^ The 'ModuleToSource' must contain a mapping for every
+     -- definition site's module.
+  -> String
+showHighlightingInfo Nothing             = ""
+showHighlightingInfo (Just (h, modFile)) =
+  "(" ++ unlines (map (showMetaInfo modFile) h) ++ ")"
 
 ------------------------------------------------------------------------
 -- All tests
diff --git a/src/full/Agda/Interaction/Highlighting/Generate.hs b/src/full/Agda/Interaction/Highlighting/Generate.hs
--- a/src/full/Agda/Interaction/Highlighting/Generate.hs
+++ b/src/full/Agda/Interaction/Highlighting/Generate.hs
@@ -3,21 +3,23 @@
 -- | Generates data used for precise syntax highlighting.
 
 module Agda.Interaction.Highlighting.Generate
-  ( TypeCheckingState(..)
-  , generateSyntaxInfo
+  ( generateSyntaxInfo
   , generateErrorInfo
   , Agda.Interaction.Highlighting.Generate.tests
   )
   where
 
+import Agda.Interaction.FindFile
 import Agda.Interaction.Highlighting.Precise hiding (tests)
 import Agda.Interaction.Highlighting.Range   hiding (tests)
+import qualified Agda.TypeChecking.Errors as E
 import Agda.TypeChecking.MetaVars (isBlockedTerm)
 import Agda.TypeChecking.Monad
   hiding (MetaInfo, Primitive, Constructor, Record, Function, Datatype)
 import qualified Agda.TypeChecking.Monad as M
 import qualified Agda.TypeChecking.Reduce as R
 import qualified Agda.Syntax.Abstract as A
+import qualified Agda.Syntax.Common as SC
 import qualified Agda.Syntax.Concrete as C
 import qualified Agda.Syntax.Info as SI
 import qualified Agda.Syntax.Internal as I
@@ -50,63 +52,86 @@
 #include "../../undefined.h"
 
 -- | Generates syntax highlighting information for an error,
--- represented as a range and a string. The range is first completed
--- so that there are no gaps in it.
+-- represented as a range and an optional string. The error range is
+-- completed so that there are no gaps in it.
+--
+-- Nothing is generated unless the file name component of the range is
+-- defined.
 
-generateErrorInfo :: P.Range -> String -> File
+generateErrorInfo :: P.Range -> Maybe String -> Maybe HighlightingInfo
 generateErrorInfo r s =
-  several (rToR $ P.continuousPerLine r)
-          (mempty { otherAspects = [Error], note = Just s })
+  case P.rStart r of
+    Nothing                                          -> Nothing
+    Just (P.Pn { P.srcFile = Nothing })              -> Nothing
+    Just (P.Pn { P.srcFile = Just f, P.posPos = p }) ->
+      Just $ compress $ generateErrorFile r s
 
--- | Has typechecking been done yet?
+-- | Generates syntax highlighting information for an error,
+-- represented as a range and an optional string. The error range is
+-- completed so that there are no gaps in it.
 
-data TypeCheckingState = TypeCheckingDone | TypeCheckingNotDone
-  deriving (Show, Eq)
+generateErrorFile :: P.Range -> Maybe String -> File
+generateErrorFile r s =
+  several (rToR $ P.continuousPerLine r)
+          (mempty { otherAspects = [Error]
+                  , note         = s
+                  })
 
 -- | Generates syntax highlighting information.
 
 generateSyntaxInfo
-  :: FilePath               -- ^ The module to highlight.
-  -> TypeCheckingState      -- ^ Has it been type checked?
+  :: AbsolutePath           -- ^ The module to highlight.
+  -> Maybe TCErr            -- ^ 'Nothing' if the module has been
+                            --   successfully type checked (perhaps
+                            --   with warnings), otherwise the
+                            --   offending error.
+                            --
+                            --   Precondition: The range of the error
+                            --   must match the file name given in the
+                            --   previous argument.
   -> CA.TopLevelInfo        -- ^ The abstract syntax of the module.
   -> [([A.QName], [Range])] -- ^ Functions which failed to termination
                             --   check (grouped if they are mutual),
                             --   along with ranges for problematic
                             --   call sites.
   -> TCM HighlightingInfo
-generateSyntaxInfo file tcs top termErrs =
+generateSyntaxInfo file mErr top termErrs =
   M.withScope_ (CA.insideScope top) $ M.ignoreAbstractMode $ do
-    modMap <- sourceToModule file (CA.topLevelModuleName top)
+    modMap <- sourceToModule
     tokens <- liftIO $ Pa.parseFile' Pa.tokensParser file
-    kinds  <- nameKinds tcs decls
+    kinds  <- nameKinds mErr decls
     let nameInfo = mconcat $ map (generate modMap file kinds)
                                  (Fold.toList names)
     -- Constructors are only highlighted after type checking, since they
     -- can be overloaded.
-    constructorInfo <-
-      if tcs == TypeCheckingNotDone
-         then return mempty
-         else generateConstructorInfo modMap file kinds decls
-    metaInfo <- if tcs == TypeCheckingNotDone
-                   then return mempty
-                   else computeUnsolvedMetaWarnings
+    constructorInfo <- case mErr of
+      Nothing -> generateConstructorInfo modMap file kinds decls
+      Just _  -> return mempty
+    metaInfo <- case mErr of
+      Nothing -> computeUnsolvedMetaWarnings
+      Just _  -> return mempty
+    errorInfo <- case mErr of
+      Nothing -> return mempty
+      Just e  -> let r = P.getRange e in
+        case P.rStart r of
+          Just p | P.srcFile p == Just file ->
+            generateErrorFile r . Just <$> E.prettyError e
+          _ -> __IMPOSSIBLE__
     -- theRest needs to be placed before nameInfo here since record
     -- field declarations contain QNames. constructorInfo also needs
     -- to be placed before nameInfo since, when typechecking is done,
     -- constructors are included in both lists. Finally tokInfo is
     -- placed last since token highlighting is more crude than the
     -- others.
-    return $ HighlightingInfo
-               { source = file
-               , info   = compress $
-                            mconcat [ constructorInfo
-                                    , theRest modMap
-                                    , nameInfo
-                                    , metaInfo
-                                    , termInfo
-                                    , tokInfo tokens
-                                    ]
-               }
+    return $ compress $ mconcat
+      [ errorInfo
+      , constructorInfo
+      , theRest modMap
+      , nameInfo
+      , metaInfo
+      , termInfo
+      , tokInfo tokens
+      ]
   where
     decls = CA.topLevelDecls top
 
@@ -122,6 +147,7 @@
       tokenToFile (T.TokKeyword T.KwForall i)      = aToF Symbol (P.getRange i)
       tokenToFile (T.TokKeyword _ i)               = aToF Keyword (P.getRange i)
       tokenToFile (T.TokSymbol  _ i)               = aToF Symbol (P.getRange i)
+      tokenToFile (T.TokLiteral (L.LitLevel  r _)) = aToF Number r
       tokenToFile (T.TokLiteral (L.LitInt    r _)) = aToF Number r
       tokenToFile (T.TokLiteral (L.LitFloat  r _)) = aToF Number r
       tokenToFile (T.TokLiteral (L.LitString r _)) = aToF String r
@@ -211,10 +237,10 @@
       getPattern _             = mempty
 
       getFieldDecl :: A.Definition -> File
-      getFieldDecl (A.RecDef _ _ _ _ fs) = Fold.foldMap extractField fs
+      getFieldDecl (A.RecDef _ _ _ _ _ fs) = Fold.foldMap extractField fs
         where
         extractField (A.ScopedDecl _ ds) = Fold.foldMap extractField ds
-        extractField (A.Field _ x _)     = field (concreteQualifier x)
+        extractField (A.Field _ _ x _)   = field (concreteQualifier x)
                                                  (concreteBase x)
         extractField _                   = mempty
       getFieldDecl _                   = mempty
@@ -234,14 +260,15 @@
 
 -- | Builds a 'NameKinds' function.
 
-nameKinds :: TypeCheckingState
+nameKinds :: Maybe TCErr  -- ^ 'Nothing' if type checking completed
+                          --   successfully.
           -> [A.Declaration]
           -> TCM NameKinds
-nameKinds tcs decls = do
+nameKinds mErr decls = do
   imported <- fix . stImports <$> get
-  local    <- case tcs of
-    TypeCheckingDone    -> fix . stSignature <$> get
-    TypeCheckingNotDone -> return $
+  local    <- case mErr of
+    Nothing -> fix . stSignature <$> get
+    Just _  -> return $
       -- Traverses the syntax tree and constructs a map from qualified
       -- names to name kinds. TODO: Handle open public.
       everything' union (Map.empty `mkQ` getDef `extQ` getDecl) decls
@@ -273,17 +300,22 @@
   getAxiomName _               = __IMPOSSIBLE__
 
   getDef :: A.Definition -> Map A.QName NameKind
-  getDef (A.FunDef  _ q _)      = Map.singleton q Function
-  getDef (A.DataDef _ q i _ cs) = Map.singleton q Datatype `union`
-                                  (Map.unions $
-                                   map (\q -> Map.singleton q (Constructor i)) $
-                                   map getAxiomName cs)
-  getDef (A.RecDef  _ q _ _ _)  = Map.singleton q Record
-  getDef (A.ScopedDef {})       = Map.empty
+  getDef (A.FunDef  _ q _)       = Map.singleton q Function
+  getDef (A.DataDef _ q i _ cs)  = Map.singleton q Datatype `union`
+                                   (Map.unions $
+                                    map (\q -> Map.singleton q (Constructor i)) $
+                                    map getAxiomName cs)
+  getDef (A.RecDef  _ q c _ _ _) = Map.singleton q Record `union`
+                                   case c of
+                                     Nothing -> Map.empty
+                                     Just (A.Axiom _ q _) ->
+                                       Map.singleton q (Constructor SC.Inductive)
+                                     Just _ -> __IMPOSSIBLE__
+  getDef (A.ScopedDef {})        = Map.empty
 
   getDecl :: A.Declaration -> Map A.QName NameKind
   getDecl (A.Axiom _ q _)     = Map.singleton q Postulate
-  getDecl (A.Field _ q _)     = Map.singleton q Field
+  getDecl (A.Field _ _ q _)   = Map.singleton q Field
   getDecl (A.Primitive _ q _) = Map.singleton q Primitive
   getDecl (A.Definition {})   = Map.empty
   getDecl (A.Section {})      = Map.empty
@@ -302,7 +334,7 @@
 
 generateConstructorInfo
   :: SourceToModule  -- ^ Maps source file paths to module names.
-  -> FilePath        -- ^ The module to highlight.
+  -> AbsolutePath    -- ^ The module to highlight.
   -> NameKinds
   -> [A.Declaration]
   -> TCM File
@@ -335,7 +367,7 @@
   getConstructor :: I.Term -> TCM (Seq A.QName)
   getConstructor (I.Con q _) = return $ Seq.singleton q
   getConstructor (I.Def c _)
-    | fmap P.srcFile (P.rStart (P.getRange c)) == Just file
+    | fmap P.srcFile (P.rStart (P.getRange c)) == Just (Just file)
                              = retrieveCoconstructor c
   getConstructor _           = return Seq.empty
 
@@ -347,14 +379,23 @@
   retrieveCoconstructor c = do
     def <- getConstInfo c
     case defDelayed def of
-      NotDelayed -> return Seq.empty  -- not a coconstructor
-      Delayed -> case defClauses def of
-        [I.Clause{ I.clauseBody = body}] -> case getRHS body of
-          Just (I.Con c args) -> do
-            s <- everything' (liftM2 (><)) query args
-            return $ Seq.singleton c >< s
-          _                   -> return Seq.empty
-        _ -> return Seq.empty
+      -- Not a coconstructor.
+      NotDelayed -> return Seq.empty
+
+      Delayed -> do
+        clauses <- R.instantiateFull $ defClauses def
+        case clauses of
+          [I.Clause{ I.clauseBody = body }] -> case getRHS body of
+            Just (I.Con c args) -> do
+              s <- everything' (liftM2 (><)) query args
+              return $ Seq.singleton c >< s
+
+            -- The meta variable could not be instantiated.
+            Just (I.MetaV {})   -> return Seq.empty
+
+            _                   -> __IMPOSSIBLE__
+
+          _ -> __IMPOSSIBLE__
     where
       getRHS (I.Body v)   = Just v
       getRHS I.NoBody     = Nothing
@@ -382,7 +423,7 @@
 
 generate :: SourceToModule
             -- ^ Maps source file paths to module names.
-         -> FilePath
+         -> AbsolutePath
             -- ^ The module to highlight.
          -> NameKinds
          -> A.AmbiguousQName
@@ -404,7 +445,7 @@
 
 nameToFile :: SourceToModule
               -- ^ Maps source file paths to module names.
-           -> FilePath
+           -> AbsolutePath
               -- ^ The file name of the current module. Used for
               -- consistency checking.
            -> [C.Name]
@@ -421,7 +462,7 @@
            -> File
 nameToFile modMap file xs x m mR =
   -- Make sure that we don't get any funny ranges.
-  if all (== file) $ catMaybes $
+  if all (== Just file) $ catMaybes $
      map (fmap P.srcFile . P.rStart . P.getRange) (x : xs) then
     several rs' ((m isOp) { definitionSite = mFilePos })
    else
@@ -431,15 +472,15 @@
   rs'        = rs ++ concatMap (fst . getRanges) xs
   mFilePos   = do
     r <- mR
-    P.Pn { P.srcFile = f, P.posPos = p } <- P.rStart r
+    P.Pn { P.srcFile = Just f, P.posPos = p } <- P.rStart r
     mod <- Map.lookup f modMap
-    return (toStrings mod, f, toInteger p)
+    return (mod, toInteger p)
 
 -- | A variant of 'nameToFile' for qualified abstract names.
 
 nameToFileA :: SourceToModule
                -- ^ Maps source file paths to module names.
-            -> FilePath
+            -> AbsolutePath
                -- ^ The file name of the current module. Used for
                -- consistency checking.
             -> A.QName
@@ -461,23 +502,6 @@
 concreteBase      = A.nameConcrete . A.qnameName
 concreteQualifier = map A.nameConcrete . A.mnameToList . A.qnameModule
 bindingSite       = A.nameBindingSite . A.qnameName
-toStrings         = map show . A.mnameToList
-
--- | Maps source file names to the corresponding top-level module
--- names.
-
-type SourceToModule = Map FilePath A.ModuleName
-
-sourceToModule
-  :: FilePath            -- ^ The current source file.
-  -> A.ModuleName        -- ^ The current top-level module name.
-  -> TCM SourceToModule
-sourceToModule file mod =
-  Map.fromList .
-  (:) (file, mod) .
-  map (\(m, (i, _)) -> (source $ M.iHighlighting i, m)) .
-  Map.toList <$>
-  M.getVisitedModules
 
 -- | Like 'everything', but modified so that it does not descend into
 -- everything.
diff --git a/src/full/Agda/Interaction/Highlighting/HTML.hs b/src/full/Agda/Interaction/Highlighting/HTML.hs
--- a/src/full/Agda/Interaction/Highlighting/HTML.hs
+++ b/src/full/Agda/Interaction/Highlighting/HTML.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
 -- | Function for generating highlighted, hyperlinked HTML from Agda
 -- sources.
 
@@ -8,6 +10,7 @@
 import Control.Applicative
 import Control.Monad
 import Control.Monad.Trans
+import Control.Monad.State.Class
 import Control.Arrow ((***))
 import System.FilePath
 import System.Directory
@@ -17,22 +20,28 @@
 import Data.Maybe
 import qualified Data.Map  as Map
 import qualified Data.List as List
-import qualified Agda.Utils.IO as UTF8
 
 import Paths_Agda
 
+import Agda.Interaction.FindFile
 import Agda.Interaction.Highlighting.Generate
 import Agda.Interaction.Highlighting.Precise
 import Agda.Interaction.Highlighting.Range
-import qualified Agda.Interaction.Imports as Imp
 import Agda.TypeChecking.Monad (TCM)
 import qualified Agda.TypeChecking.Monad as TCM
 import qualified Agda.Syntax.Abstract as A
+import qualified Agda.Syntax.Concrete as C
 import Agda.Syntax.Common
 import qualified Agda.Syntax.Scope.Monad as Scope
 import Agda.Syntax.Translation.ConcreteToAbstract
 import Agda.Interaction.Options
+import Agda.Utils.FileName (filePath)
+import qualified Agda.Utils.IO.UTF8 as UTF8
+import Agda.Utils.Pretty
 
+import Agda.Utils.Impossible
+#include "../../undefined.h"
+
 -- | The name of the default CSS file.
 
 defaultCSSFile :: FilePath
@@ -58,48 +67,55 @@
         cssFile <- getDataFileName defaultCSSFile
         copyFile cssFile (dir </> defaultCSSFile)
 
-      TCM.reportSLn "html" 1 $
-        "\nWarning: HTML is currently generated for ALL files which can be\n\
-        \reached from the given module, including library files.\n"
+      TCM.reportSLn "html" 1 $ unlines
+        [ ""
+        , "Warning: HTML is currently generated for ALL files which can be"
+        , "reached from the given module, including library files."
+        ]
 
       -- Pull highlighting info from the state and generate all the
       -- web pages.
       mapM_ (\(m, h) -> generatePage dir m h) =<<
-        map (id *** TCM.iHighlighting) . Map.toList <$>
-          TCM.getAllModules
+        map (id *** TCM.iHighlighting . TCM.miInterface) .
+          Map.toList <$> TCM.getVisitedModules
 
 -- | Converts module names to the corresponding HTML file names.
 
-modToFile :: [String] -> FilePath
-modToFile m = List.intercalate "." m <.> "html"
+modToFile :: C.TopLevelModuleName -> FilePath
+modToFile m = render (pretty m) <.> "html"
 
 -- | Generates an HTML file with a highlighted, hyperlinked version of
 -- the given module.
 
 generatePage
-  :: FilePath         -- ^ Directory in which to create files.
-  -> A.ModuleName     -- ^ Module to be highlighted.
-  -> HighlightingInfo -- ^ Syntax highlighting info for the module.
+  :: FilePath              -- ^ Directory in which to create files.
+  -> C.TopLevelModuleName  -- ^ Module to be highlighted.
+  -> HighlightingInfo      -- ^ Syntax highlighting info for the module.
   -> TCM ()
 generatePage dir mod highlighting = do
-  contents <- liftIO $ UTF8.readTextFile (source highlighting)
-  css      <- maybe defaultCSSFile id . optCSSFile <$>
-                TCM.commandLineOptions
-  let html = page css mod contents (info highlighting)
-  TCM.reportSLn "html" 1 $ "Generating HTML for " ++ show mod ++
-                           " (" ++ target ++ ")."
-  liftIO $ UTF8.writeFile target (renderHtml html)
-  where target = dir </> modToFile (map show $ A.mnameToList mod)
+  mf <- Map.lookup mod . TCM.stModuleToSource <$> get
+  case mf of
+    Nothing -> __IMPOSSIBLE__
+    Just f  -> do
+      contents <- liftIO $ UTF8.readTextFile $ filePath f
+      css      <- maybe defaultCSSFile id . optCSSFile <$>
+                    TCM.commandLineOptions
+      let html = page css mod contents highlighting
+      TCM.reportSLn "html" 1 $ "Generating HTML for " ++
+                               render (pretty mod) ++
+                               " (" ++ target ++ ")."
+      liftIO $ UTF8.writeFile target (renderHtml html)
+  where target = dir </> modToFile mod
 
 -- | Constructs the web page, including headers.
 
-page :: FilePath       -- ^ URL to the CSS file.
-     -> A.ModuleName   -- ^ Module to be highlighted.
-     -> String         -- ^ The contents of the module.
-     -> CompressedFile -- ^ Highlighting information.
+page :: FilePath              -- ^ URL to the CSS file.
+     -> C.TopLevelModuleName  -- ^ Module to be highlighted.
+     -> String                -- ^ The contents of the module.
+     -> CompressedFile        -- ^ Highlighting information.
      -> Html
 page css modName contents info =
-  header (thetitle << show modName
+  header (thetitle << render (pretty modName)
             +++
           meta ! [ httpequiv "Content-Type"
                  , content "text/html; charset=UTF-8"
@@ -163,4 +179,4 @@
     -- Notes are not included.
     noteClasses s = []
 
-    link (m, f, pos) = [href $ modToFile m ++ "#" ++ show pos]
+    link (m, pos) = [href $ modToFile m ++ "#" ++ show pos]
diff --git a/src/full/Agda/Interaction/Highlighting/Precise.hs b/src/full/Agda/Interaction/Highlighting/Precise.hs
--- a/src/full/Agda/Interaction/Highlighting/Precise.hs
+++ b/src/full/Agda/Interaction/Highlighting/Precise.hs
@@ -8,7 +8,7 @@
   , OtherAspect(..)
   , MetaInfo(..)
   , File
-  , HighlightingInfo(..)
+  , HighlightingInfo
   , singleton
   , several
   , smallestPos
@@ -33,6 +33,7 @@
 
 import qualified Agda.Syntax.Abstract.Name as A
 import qualified Agda.Syntax.Common as C
+import qualified Agda.Syntax.Concrete as SC
 
 import Agda.Interaction.Highlighting.Range
 
@@ -88,11 +89,9 @@
     -- something like that. It should contain useful information about
     -- the range (like the module containing a certain identifier, or
     -- the fixity of an operator).
-  , definitionSite :: Maybe ([String], FilePath, Integer)
+  , definitionSite :: Maybe (SC.TopLevelModuleName, Integer)
     -- ^ The definition site of the annotated thing, if applicable and
-    --   known. File positions are counted from 1. The list of strings
-    --   is the name of the /top-level/ module in which the thing is
-    --   defined.
+    --   known. File positions are counted from 1.
   }
   deriving (Eq, Show, Typeable, Data)
 
@@ -110,13 +109,7 @@
 
 -- | Syntax highlighting information for a given source file.
 
-data HighlightingInfo =
-  HighlightingInfo { source :: FilePath
-                     -- ^ The source file.
-                   , info :: CompressedFile
-                     -- ^ Highlighting info.
-                   }
-  deriving (Typeable, Data)
+type HighlightingInfo = CompressedFile
 
 ------------------------------------------------------------------------
 -- Creation
@@ -275,10 +268,10 @@
 
 instance Arbitrary MetaInfo where
   arbitrary = do
-    aspect  <- maybeGen arbitrary
+    aspect  <- arbitrary
     other   <- arbitrary
     note    <- maybeGen string
-    defSite <- maybeGen (liftM3 (,,) (listOf string) string arbitrary)
+    defSite <- arbitrary
     return (MetaInfo { aspect = aspect, otherAspects = other
                      , note = note, definitionSite = defSite })
     where string = listOfElements "abcdefABCDEF/\\.\"'@()åäö\n"
diff --git a/src/full/Agda/Interaction/Highlighting/Vim.hs b/src/full/Agda/Interaction/Highlighting/Vim.hs
--- a/src/full/Agda/Interaction/Highlighting/Vim.hs
+++ b/src/full/Agda/Interaction/Highlighting/Vim.hs
@@ -6,7 +6,7 @@
 import Data.Char
 import Data.Set ( Set )
 import Data.Map ( Map )
-import qualified System.IO.UTF8 as UTF8
+import System.FilePath
 
 import qualified Data.List as List
 import qualified Data.Map as Map
@@ -17,7 +17,7 @@
 
 import Agda.TypeChecking.Monad
 
-import Agda.Utils.FileName
+import qualified Agda.Utils.IO.UTF8 as UTF8
 import Agda.Utils.Tuple
 
 #include "../../undefined.h"
@@ -27,8 +27,8 @@
 
 vimFile :: FilePath -> FilePath
 vimFile file =
-    case splitFilePath file of
-	(path,name,ext)	-> path ++ "." ++ name ++ ext ++ ".vim"
+    case splitFileName file of
+	(path, name) -> path </> "" <.> name <.> "vim"
 
 escape :: String -> String
 escape = concatMap esc
diff --git a/src/full/Agda/Interaction/Imports.hs b/src/full/Agda/Interaction/Imports.hs
--- a/src/full/Agda/Interaction/Imports.hs
+++ b/src/full/Agda/Interaction/Imports.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE CPP #-}
-{-| This modules deals with how to find imported modules and loading their
+{-| This module deals with finding imported modules and loading their
     interface files.
 -}
 module Agda.Interaction.Imports where
@@ -8,6 +8,7 @@
 
 import Control.Monad.Error
 import Control.Monad.State
+import qualified Control.Exception as E
 import qualified Data.Map as Map
 import qualified Data.List as List
 import qualified Data.Set as Set
@@ -15,11 +16,11 @@
 import Data.Generics
 import Data.List
 import Data.Map (Map)
+import Data.Set (Set)
 import System.Directory
 import System.Time
-import Control.OldException
-import qualified System.IO.UTF8 as UTF8
-import System.FilePath (isAbsolute)
+import qualified Agda.Utils.IO.Locale as LocIO
+import System.FilePath hiding (splitPath)
 
 import Agda.Syntax.Position
 import qualified Agda.Syntax.Concrete as C
@@ -39,26 +40,50 @@
 import Agda.TypeChecking.Primitive
 import Agda.TypeChecker
 
+import Agda.Interaction.FindFile
 import Agda.Interaction.Options
 import Agda.Interaction.Highlighting.Precise (HighlightingInfo)
 import Agda.Interaction.Highlighting.Generate
-import Agda.Interaction.Highlighting.Emacs
 import Agda.Interaction.Highlighting.Vim
 import qualified Agda.Interaction.Highlighting.Range as R
 
 import Agda.Utils.FileName
 import Agda.Utils.Monad
-import Agda.Utils.IO
+import Agda.Utils.IO.Binary
+import Agda.Utils.Pretty
 
 import Agda.Utils.Impossible
 #include "../undefined.h"
 
--- | Converts an Agda file name to the corresponding interface file
--- name.
+-- | Which directory should form the base of relative include paths?
 
-toIFile :: FilePath -> FilePath
-toIFile = setExtension ".agdai"
+data RelativeTo
+  = ProjectRoot
+    -- ^ The root directory of the \"project\" containing the current
+    -- file.
+  | CurrentDir
+    -- ^ The current working directory.
 
+-- | A variant of 'moduleName'' which raises an error if the file name
+-- does not match the module name.
+--
+-- The file name is interpreted relative to the current working
+-- directory (unless it is absolute).
+
+moduleName :: FilePath -> TCM C.TopLevelModuleName
+moduleName file = do
+  file <- liftIO (absolute file)
+  m <- moduleName' file
+  checkModuleName m file
+  return m
+
+-- | Computes the module name of the top-level module in the given
+-- file.
+
+moduleName' :: AbsolutePath -> TCM C.TopLevelModuleName
+moduleName' file = liftIO $ do
+  C.topLevelModuleName <$> parseFile' moduleParser file
+
 -- | Merge an interface into the current proof state.
 mergeInterface :: Interface -> TCM ()
 mergeInterface i = do
@@ -75,9 +100,7 @@
       []               -> return ()
       (b, Builtin x):_ -> typeError $ DuplicateBuiltinBinding b x x
       (_, Prim{}):_    -> __IMPOSSIBLE__
-    modify $ \st -> st { stImports	    = unionSignatures [stImports st, sig]
-		       , stImportedBuiltins = stImportedBuiltins st `Map.union` bi
-		       }
+    addImportedThings sig bi (iHaskellImports i)
     reportSLn "import.iface.merge" 20 $
       "  Rebinding primitives " ++ show prim
     prim <- Map.fromList <$> mapM rebind prim
@@ -88,104 +111,214 @@
 	    PrimImpl _ pf <- lookupPrimitiveFunction x
 	    return (x, Prim pf)
 
-addImportedThings :: Signature -> BuiltinThings PrimFun -> TCM ()
-addImportedThings isig ibuiltin =
+addImportedThings ::
+  Signature -> BuiltinThings PrimFun -> Set String -> TCM ()
+addImportedThings isig ibuiltin hsImports =
   modify $ \st -> st
     { stImports          = unionSignatures [stImports st, isig]
     , stImportedBuiltins = Map.union (stImportedBuiltins st) ibuiltin
+    , stHaskellImports   = Set.union (stHaskellImports st) hsImports
     }
 
--- TODO: move
-data FileType = SourceFile | InterfaceFile
-
-findFile :: FileType -> ModuleName -> TCM FilePath
-findFile ft m = do
-    let x = mnameToConcrete m
-    dirs <- getIncludeDirs
-    let files = [ dir ++ [slash] ++ file
-		| dir  <- dirs
-		, file <- map (C.moduleNameToFileName x) exts
-		]
-    files' <- liftIO $ filterM doesFileExist files
-    files' <- liftIO $ nubFiles files'
-    case files' of
-	[]	-> typeError $ FileNotFound m files
-	file:_	-> return file
-    where
-	exts = case ft of
-		SourceFile    -> [".agda", ".lagda"]
-		InterfaceFile -> [".agdai"]
-
 -- | Scope checks the given module. A proper version of the module
 -- name (with correct definition sites) is returned.
 
 scopeCheckImport :: ModuleName -> TCM (ModuleName, Map ModuleName Scope)
 scopeCheckImport x = do
     reportSLn "import.scope" 5 $ "Scope checking " ++ show x
-    visited <- Map.keys <$> getVisitedModules
-    reportSLn "import.scope" 10 $ "  visited: " ++ show visited
-    (i,t)   <- getInterface x
+    verboseS "import.scope" 10 $ do
+      visited <- Map.keys <$> getVisitedModules
+      liftIO $ LocIO.putStrLn $
+        "  visited: " ++ intercalate ", " (map (render . pretty) visited)
+    i <- fst <$> getInterface x
     addImport x
     return (iModuleName i `withRangesOfQ` mnameToConcrete x, iScope i)
 
-alreadyVisited :: ModuleName -> TCM (Interface, ClockTime) -> TCM (Interface, ClockTime)
+-- | If the module has already been visited (without warnings), then
+-- its interface is returned directly. Otherwise the computation is
+-- used to find the interface and the computed interface is stored for
+-- potential later use.
+
+alreadyVisited :: C.TopLevelModuleName ->
+                  TCM (Interface, Either Warnings ClockTime) ->
+                  TCM (Interface, Either Warnings ClockTime)
 alreadyVisited x getIface = do
     mm <- getVisitedModule x
     case mm of
-	Just it	-> do
-            reportSLn "import.visit" 10 $ "  Already visited " ++ show x
-            return it
-	Nothing	-> do
-	    reportSLn "import.visit" 5 $ "  Getting interface for " ++ show x
-	    (i, t) <- getIface
-	    reportSLn "import.visit" 5 $ "  Now we've looked at " ++ show x
-	    visitModule x i t
-	    return (i, t)
+        -- A module with warnings should never be allowed to be
+        -- imported from another module.
+	Just mi | not (miWarnings mi) -> do
+          reportSLn "import.visit" 10 $ "  Already visited " ++ render (pretty x)
+          return (miInterface mi, Right $ miTimeStamp mi)
+	_ -> do
+          reportSLn "import.visit" 5 $ "  Getting interface for " ++ render (pretty x)
+          r@(i, wt) <- getIface
+          reportSLn "import.visit" 5 $ "  Now we've looked at " ++ render (pretty x)
+          case wt of
+            Left _ -> do
+              t <- liftIO getClockTime
+              visitModule $ ModuleInfo
+                { miInterface  = i
+                , miWarnings   = True
+                , miTimeStamp  = t
+                }
+            Right t ->
+              visitModule $ ModuleInfo
+                { miInterface  = i
+                , miWarnings   = False
+                , miTimeStamp  = t
+                }
+          return r
 
+-- | Warnings.
+--
+-- Invariant: The fields are never empty at the same time.
+
+data Warnings = Warnings
+  { terminationProblems   :: [([QName], [R.Range])]
+    -- ^ Termination checking problems are not reported if
+    -- 'optTerminationCheck' is 'False'.
+  , unsolvedMetaVariables :: [Range]
+    -- ^ Meta-variable problems are reported as type errors unless
+    -- 'optAllowUnsolved' is 'True'.
+  , unsolvedConstraints   :: Constraints
+    -- ^ Same as 'unsolvedMetaVariables'.
+  }
+
+-- | Turns warnings into an error. Even if several errors are possible
+-- only one is raised.
+
+warningsToError :: Warnings -> TypeError
+warningsToError (Warnings [] [] [])    = __IMPOSSIBLE__
+warningsToError (Warnings _ w@(_:_) _) = UnsolvedMetas w
+warningsToError (Warnings _ _ w@(_:_)) = UnsolvedConstraints w
+warningsToError (Warnings w@(_:_) _ _) = TerminationCheckFailed w
+
+-- | Type checks the given module (if necessary).
+--
+-- The function also makes relative directories absolute, based on the
+-- 'RelativeTo' argument. If this argument is 'ProjectRoot', then the
+-- \"current file\" is taken to be the one given as the first
+-- argument.
+
+typeCheck :: FilePath
+          -- ^ The file name is interpreted relative to the current
+          -- working directory (unless it is absolute).
+          -> RelativeTo
+          -> Maybe [AbsolutePath]
+          -- ^ If this argument is given, and it does not coincide
+          -- with the new value of the include directories (after
+          -- making them absolute), the state is reset (but the
+          -- command-line options are preserved).
+          -> TCM (Interface, Maybe Warnings)
+typeCheck f relativeTo oldIncs = do
+  f <- liftIO (absolute f)
+  m <- moduleName' f
+
+  makeIncludeDirsAbsolute =<< case relativeTo of
+    CurrentDir  -> liftIO (absolute =<< getCurrentDirectory)
+    ProjectRoot -> return $ C.projectRoot f m
+
+  -- If the include directories have changed the state is reset.
+  incs <- getIncludeDirs
+  case oldIncs of
+    Just incs' | incs' /= incs -> resetState
+    _                          -> return ()
+
+  checkModuleName m f
+
+  (i, wt) <- getInterface' m True
+  return (i, case wt of
+    Left w  -> Just w
+    Right _ -> Nothing)
+
+-- | Tries to return the interface associated to the given module. The
+-- time stamp of the relevant interface file is also returned. May
+-- type check the module. An error is raised if a warning is
+-- encountered.
+
 getInterface :: ModuleName -> TCM (Interface, ClockTime)
-getInterface x = alreadyVisited x $ addImportCycleCheck x $ do
-    file <- findFile SourceFile x	-- requires source to exist
+getInterface x = do
+  (i, wt) <- getInterface' (toTopLevelModuleName x) False
+  case wt of
+    Left  w -> typeError $ warningsToError w
+    Right t -> return (i, t)
 
+-- | A more precise variant of 'getInterface'. If warnings are
+-- encountered then they are returned instead of being turned into
+-- errors.
+
+getInterface' :: C.TopLevelModuleName
+              -> Bool  -- ^ If type checking is necessary, should all
+                       -- state changes inflicted by 'createInterface'
+                       -- be preserved?
+              -> TCM (Interface, Either Warnings ClockTime)
+getInterface' x includeStateChanges =
+  -- Preserve the pragma options unless includeStateChanges is True.
+  bracket (stPragmaOptions <$> get)
+          (unless includeStateChanges .
+             setCommandLineOptions PragmaOptions) $ \_ -> do
+   -- Forget the pragma options (locally).
+   setCommandLineOptions PersistentOptions . stPersistentOptions =<< get
+
+   alreadyVisited x $ addImportCycleCheck x $ do
+    file <- findFile x  -- requires source to exist
+
     reportSLn "import.iface" 10 $ "  Check for cycle"
     checkForImportCycle
 
     uptodate <- ifM ignoreInterfaces
 		    (return False)
-		    (liftIO $ toIFile file `isNewerThan` file)
+		    (liftIO $ filePath (toIFile file)
+                                `isNewerThan`
+                              filePath file)
 
-    reportSLn "import.iface" 5 $ "  " ++ show x ++ " is " ++ (if uptodate then "" else "not ") ++ "up-to-date."
+    reportSLn "import.iface" 5 $
+      "  " ++ render (pretty x) ++ " is " ++
+      (if uptodate then "" else "not ") ++ "up-to-date."
 
-    (i,t) <- if uptodate
-	then skip x file
-	else typeCheck file
+    (stateChangesIncluded, (i, wt)) <-
+      if uptodate then skip x file else typeCheck file
 
+    -- Ensure that the given module name matches the one in the file.
+    let topLevelName = toTopLevelModuleName $ iModuleName i
+    unless (topLevelName == x) $ do
+      checkModuleName topLevelName file
+      typeError $ OverlappingProjects file topLevelName x
+
     visited <- isVisited x
     reportSLn "import.iface" 5 $ if visited then "  We've been here. Don't merge."
-			         else "  New module. Let's check it out."
-    unless visited $ mergeInterface i
+                                 else "  New module. Let's check it out."
+    unless (visited || stateChangesIncluded) $ mergeInterface i
 
-    storeDecodedModule x i t
-    return (i,t)
+    modify (\s -> s { stCurrentModule = Just $ iModuleName i })
 
+    -- Interfaces are only stored if no warnings were encountered.
+    case wt of
+      Left  w -> return ()
+      Right t -> storeDecodedModule i t
+
+    return (i, wt)
+
     where
 	skip x file = do
 	    -- Examine the mtime of the interface file. If it is newer than the
 	    -- stored version (in stDecodedModules), or if there is no stored version,
 	    -- read and decode it. Otherwise use the stored version.
-            let ifile = toIFile file
-	    t  <- liftIO $ getModificationTime ifile
-	    mm <- getDecodedModule x
-	    mi <- case mm of
-		      Just (im, tm) ->
-			 if tm < t
+            let ifile = filePath $ toIFile file
+	    t            <- liftIO $ getModificationTime ifile
+	    mm           <- getDecodedModule x
+	    (cached, mi) <- case mm of
+		      Just (mi, mt) ->
+			 if mt < t
 			 then do dropDecodedModule x
 				 reportSLn "import.iface" 5 $ "  file is newer, re-reading " ++ ifile
-				 liftIO $ readInterface ifile
+				 (,) False <$> readInterface ifile
 			 else do reportSLn "import.iface" 5 $ "  using stored version of " ++ ifile
-				 return (Just im)
+				 return (True, Just mi)
 		      Nothing ->
 			 do reportSLn "import.iface" 5 $ "  no stored version, reading " ++ ifile
-			    liftIO $ readInterface ifile
+			    (,) False <$> readInterface ifile
 
 	    -- Check that it's the right version
 	    case mi of
@@ -204,148 +337,134 @@
 			    -- liftIO close	-- Close the interface file. See above.
 			    typeCheck file
 			else do
-			    reportSLn "" 1 $ "Skipping " ++ show x ++ " (" ++ ifile ++ ")."
-			    return (i, t)
+			    reportSLn "" 1 $
+                              "Skipping " ++ render (pretty x) ++
+                                " (" ++ (if cached then "cached" else ifile) ++ ")."
+			    return (False, (i, Right t))
 
 	typeCheck file = do
-	    -- Do the type checking
-	    ms       <- getImportPath
-	    vs       <- getVisitedModules
-	    ds       <- getDecodedModules
-	    opts     <- commandLineOptions
-	    trace    <- getTrace
-            isig     <- getImportedSignature
-            ibuiltin <- gets stImportedBuiltins
-	    r <- liftIO $ runTCM $ -- Every interface should be
-	                           -- treated in isolation.
-                   createInterface opts trace ms vs ds
-                                   isig ibuiltin (Just x) file False
+	    -- Do the type checking.
+            reportSLn "" 1 $ "Checking " ++ render (pretty x) ++ " (" ++ filePath file ++ ")."
+            if includeStateChanges then do
+              r <- createInterface file x
 
-	    case r of
-		Left err -> throwError err
-                Right (_, Warnings termErrs@(_:_) []) -> do
-                  typeError $ TerminationCheckFailed termErrs
-                Right (_, Warnings _ _) -> __IMPOSSIBLE__
-		Right (_, Success vs ds i isig ibuiltin)  -> do
-                  -- writeInterface (used by createInterface) may
-                  -- remove ifile.
-                  let ifile = toIFile file
-                  t <- liftIO $ ifM (doesFileExist ifile)
-                         (getModificationTime ifile)
-                         getClockTime
-                  setVisitedModules vs
-                  setDecodedModules ds
-                  -- We need to add things imported when checking
-                  -- the imported modules.
-                  addImportedThings isig ibuiltin
-                  return (i, t)
+              -- Merge the signature with the signature for imported
+              -- things.
+              sig <- getSignature
+              addImportedThings sig Map.empty Set.empty
+              setSignature emptySignature
 
-readInterface :: FilePath -> IO (Maybe Interface)
+              return (True, r)
+             else do
+              ms       <- getImportPath
+              mf       <- stModuleToSource <$> get
+              vs       <- getVisitedModules
+              ds       <- getDecodedModules
+              opts     <- stPersistentOptions <$> get
+              trace    <- getTrace
+              isig     <- getImportedSignature
+              ibuiltin <- gets stImportedBuiltins
+              -- Every interface is treated in isolation.
+              r <- liftIO $ runTCM $
+                     withImportPath ms $ do
+                       setDecodedModules ds
+                       setTrace trace
+                       setCommandLineOptions PersistentOptions opts
+                       modify $ \s -> s { stModuleToSource = mf }
+                       setVisitedModules vs
+                       addImportedThings isig ibuiltin Set.empty
+
+                       r <- createInterface file x
+
+                       mf        <- stModuleToSource <$> get
+                       vs        <- getVisitedModules
+                       ds        <- getDecodedModules
+                       isig      <- getImportedSignature
+                       ibuiltin  <- gets stImportedBuiltins
+                       hsImports <- getHaskellImports
+                       return (r, do
+                         modify $ \s -> s { stModuleToSource = mf }
+                         setVisitedModules vs
+                         setDecodedModules ds
+
+                         addImportedThings isig ibuiltin hsImports)
+
+              case r of
+                  Left err               -> throwError err
+                  Right (result, update) -> do
+                    update
+                    return (False, result)
+
+readInterface :: FilePath -> TCM (Maybe Interface)
 readInterface file = do
     -- Decode the interface file
-    (s, close) <- readBinaryFile' file
-    do  i <- decode s
-
-        -- Force the entire string, to allow the file to be closed.
-        let n = BS.length s
-        () <- when (n == n) $ return ()
+    (s, close) <- liftIO $ readBinaryFile' file
+    do  i <- liftIO . E.evaluate =<< decode s
 
-        -- Close the file
-        close
+        -- Close the file. Note
+        -- ⑴ that evaluate ensures that i is evaluated to WHNF (before
+        --   the next IO operation is executed), and
+        -- ⑵ that decode returns Nothing if an error is encountered,
+        -- so it is safe to close the file here.
+        liftIO close
 
-	-- Force the interface to make sure the interface version is looked at
-        i `seq` return $ Just i
+        return i
       -- Catch exceptions and close
-      `catch` \e -> close >> handler e
+      `catchError` \e -> liftIO close >> handler e
   -- Catch exceptions
-  `catch` handler
+  `catchError` handler
   where
-    handler e = case e of
-      ErrorCall _   -> return Nothing
-      IOException e -> do
-          UTF8.putStrLn $ "IO exception: " ++ show e
-          return Nothing   -- work-around for file locking bug
-      _		    -> throwIO e
+    handler e = case errError e of
+      IOException _ e -> do
+        liftIO $ LocIO.putStrLn $ "IO exception: " ++ show e
+        return Nothing   -- Work-around for file locking bug.
+                         -- TODO: What does this refer to? Please
+                         -- document.
+      _               -> throwError e
 
-writeInterface :: FilePath -> Interface -> IO ()
+-- | Writes the given interface to the given file. Returns the file's
+-- new modification time stamp, or 'Nothing' if the write failed.
+
+writeInterface :: FilePath -> Interface -> TCM ClockTime
 writeInterface file i = do
     encodeFile file i
-  `catch` \e -> do
-    UTF8.putStrLn $ "failed to write interface " ++ file ++ " : " ++ show e
-    removeFile file
-    return ()
-
--- | Return type used by 'createInterface'.
-
-data CreateInterfaceResult
-  = Success { cirVisited   :: VisitedModules
-            , cirDecoded   :: DecodedModules
-            , cirInterface :: Interface
-            , cirSignature :: Signature
-            , cirBuiltin   :: BuiltinThings PrimFun
-            }
-    -- ^ Everything completed successfully, and an interface file was
-    -- written.
-  | Warnings { terminationProblems   :: [([QName], [R.Range])]
-             , unsolvedMetaVariables :: [Range]
-             }
-    -- ^ Type checking was successful, except for some termination
-    -- checking problems or unsolved meta-variables.
-    --
-    -- Meta-variable problems are reported as type errors unless we
-    -- are type checking a top-level module and the flag to allow
-    -- unsolved meta-variables has been selected.
+    liftIO $ getModificationTime file
+  `catchError` \e -> do
+    reportSLn "" 1 $
+      "Failed to write interface " ++ file ++ "."
+    liftIO $
+      whenM (doesFileExist file) $ removeFile file
+    throwError e
 
--- | Tries to type check a module and write out its interface.
+-- | Tries to type check a module and write out its interface. The
+-- function only writes out an interface file if it does not encounter
+-- any warnings.
 --
 -- If appropriate this function writes out syntax highlighting
 -- information.
 
 createInterface
-  :: CommandLineOptions
-  -> CallTrace
-  -> [ModuleName]
-  -> VisitedModules
-  -> DecodedModules
-  -> Signature
-  -> BuiltinThings PrimFun
-  -> Maybe ModuleName       -- ^ Expected module name.
-  -> FilePath               -- ^ The file to type check.
-                            --   Must be an absolute path.
-  -> Bool                   -- ^ Should the working directory be
-                            --   changed to the root directory of
-                            --   the \"project\" containing the
-                            --   file?
-  -> TCM (TopLevelInfo, CreateInterfaceResult)
-createInterface opts trace path visited decoded
-                isig ibuiltin mname file changeDir
-  | not (isAbsolute file) = __IMPOSSIBLE__
-  | otherwise             = withImportPath path $ do
-    setDecodedModules decoded
-    setTrace trace
-    setCommandLineOptions opts
-    setVisitedModules visited
-
-    reportSLn "" 1 $ "Checking " ++ (case mname of
-                        Nothing -> file
-                        Just m  -> show m ++ " (" ++ file ++ ")") ++ "."
-    reportSLn "import.iface.create" 5  $ "Creating interface for " ++ show mname
-    reportSLn "import.iface.create" 10 $ "  visited: " ++ show (Map.keys visited)
+  :: AbsolutePath          -- ^ The file to type check.
+  -> C.TopLevelModuleName  -- ^ The expected module name.
+  -> TCM (Interface, Either Warnings ClockTime)
+createInterface file mname = do
+    reportSLn "import.iface.create" 5  $
+      "Creating interface for " ++ render (pretty mname) ++ "."
+    verboseS "import.iface.create" 10 $ do
+      visited <- Map.keys <$> getVisitedModules
+      liftIO $ LocIO.putStrLn $
+        "  visited: " ++ intercalate ", " (map (render . pretty) visited)
 
-    addImportedThings isig ibuiltin
+    previousHsImports <- getHaskellImports
 
     (pragmas, top) <- liftIO $ parseFile' moduleParser file
-    when changeDir $
-      liftIO $ setWorkingDirectory file top
+
     pragmas <- concat <$> concreteToAbstract_ pragmas
                -- identity for top-level pragmas at the moment
-    -- Note that pragmas can affect scope checking.
     setOptionsFromPragmas pragmas
     topLevel <- concreteToAbstract_ (TopLevel top)
 
     termErrs <- catchError (do
-      checkModuleName mname file topLevel
-
       -- Type checking.
       checkDecls (topLevelDecls topLevel)
 
@@ -360,65 +479,68 @@
       return termErrs
       ) (\e -> do
         -- If there is an error syntax highlighting info can still be
-        -- generated. Since there is no Vim highlighting for errors no
-        -- Vim highlighting is generated, though.
-        whenM (optGenerateEmacsFile <$> commandLineOptions) $ do
-          writeEmacsFile =<<
-            generateSyntaxInfo file TypeCheckingNotDone topLevel []
-
-        throwError e)
+        -- generated.
+        case rStart $ getRange e of
+          Just (Pn { srcFile = Just f }) | f == file -> do
+            syntaxInfo <- generateSyntaxInfo file (Just e) topLevel []
+            modFile    <- stModuleToSource <$> get
+            -- The highlighting info is included with the error.
+            case errHighlighting e of
+              Just _  -> __IMPOSSIBLE__
+              Nothing ->
+                throwError $ e { errHighlighting =
+                                   Just (syntaxInfo, modFile) }
+          _ -> throwError e
+      )
 
     -- Generate syntax highlighting info.
-    syntaxInfo <- generateSyntaxInfo file TypeCheckingDone
-                                     topLevel termErrs
-
-    -- Write Emacs file.
-    whenM (optGenerateEmacsFile <$> commandLineOptions) $
-      writeEmacsFile syntaxInfo
+    syntaxInfo <- generateSyntaxInfo file Nothing topLevel termErrs
 
     -- Generate Vim file.
     whenM (optGenerateVimFile <$> commandLineOptions) $
-	withScope_ (insideScope topLevel) $ generateVimFile file
+	withScope_ (insideScope topLevel) $ generateVimFile $ filePath file
 
-    -- Check if there are unsolved meta-variables.
+    -- Check if there are unsolved meta-variables...
     unsolvedMetas <- List.nub <$> (mapM getMetaRange =<< getOpenMetas)
-    case unsolvedMetas of
-	[]  -> return ()
-	_   -> do
-          unsolvedOK <- optAllowUnsolved <$> commandLineOptions
-          unless (unsolvedOK && path == []) $ do
-            typeError $ UnsolvedMetas unsolvedMetas
+    unless (null unsolvedMetas) $ do
+      unsolvedOK <- optAllowUnsolved <$> commandLineOptions
+      unless unsolvedOK $
+        typeError $ UnsolvedMetas unsolvedMetas
 
+    -- ...or unsolved constraints
+    unsolvedConstraints <- getConstraints
+    unless (null unsolvedConstraints) $ do
+      unsolvedOK <- optAllowUnsolved <$> commandLineOptions
+      unless unsolvedOK $
+        typeError $ UnsolvedConstraints unsolvedConstraints
+
     setScope $ outsideScope topLevel
 
     reportSLn "scope.top" 50 $ "SCOPE " ++ show (insideScope topLevel)
 
-    -- True if the file was successfully and completely
-    -- type-checked.
-    let ok = null termErrs && null unsolvedMetas
+    i <- buildInterface topLevel syntaxInfo previousHsImports
 
-    (,) topLevel <$> if ok then do
-      i        <- buildInterface (topLevelModuleName topLevel) syntaxInfo
-      isig     <- getImportedSignature
-      vs       <- getVisitedModules
-      ds       <- getDecodedModules
-      ibuiltin <- gets stImportedBuiltins
-      liftIO $ writeInterface (toIFile file) i
-      modify (\s -> s { stCurrentModule =
-                          Just (topLevelModuleName topLevel, i) })
-      return (Success vs ds i isig ibuiltin)
+    if and [ null termErrs, null unsolvedMetas, null unsolvedConstraints ]
+     then do
+      -- The file was successfully type-checked (and no warnings were
+      -- encountered), so the interface should be written out.
+      t <- writeInterface (filePath $ toIFile file) i
+      return (i, Right t)
      else
-      return (Warnings termErrs unsolvedMetas)
+      return (i, Left $ Warnings termErrs unsolvedMetas unsolvedConstraints)
 
 -- | Builds an interface for the current module, which should already
 -- have been successfully type checked.
 
-buildInterface :: ModuleName
-                  -- ^ The name of the current module.
+buildInterface :: TopLevelInfo
+                  -- ^ 'TopLevelInfo' for the current module.
                -> HighlightingInfo
                   -- ^ Syntax highlighting info for the module.
+               -> Set String
+                  -- ^ Haskell modules imported in imported modules
+                  -- (transitively).
                -> TCM Interface
-buildInterface m syntaxInfo = do
+buildInterface topLevel syntaxInfo previousHsImports = do
     reportSLn "import.iface" 5 "Building interface..."
     scope'  <- getScope
     let scope = scope' { scopeCurrent = m }
@@ -432,60 +554,16 @@
 			{ iImportedModules = Set.toList ms
                         , iModuleName      = m
 			, iScope	   = publicModules scope
+                        , iInsideScope     = insideScope topLevel
 			, iSignature	   = sig
 			, iBuiltin	   = builtin'
-                        , iHaskellImports  = hsImps
+                        , iHaskellImports  = Set.difference hsImps
+                                                            previousHsImports
                         , iHighlighting    = syntaxInfo
 			}
     reportSLn "import.iface" 7 "  interface complete"
     return i
-
--- | Set the current working directory based on the file name of the
--- current module and its module name, so that when the module is
--- imported qualified it will be found.
---
--- The given list of declarations should correspond to a module, i.e.
--- it should be non-empty and the last declaration should be
--- 'C.Module' something.
-
-setWorkingDirectory :: FilePath -> [C.Declaration] -> IO ()
-setWorkingDirectory _    [] = __IMPOSSIBLE__
-setWorkingDirectory file xs = case last xs of
-  C.Module _ n _ _ -> do
-    -- canonicalizePath seems to return absolute paths.
-    absolute <- canonicalizePath file
-    let (path, _, _)  = splitFilePath absolute
-    setCurrentDirectory (dropDirectory (countDots n) path)
-  _                -> __IMPOSSIBLE__
-  where
-  countDots (C.QName _)  = 0
-  countDots (C.Qual _ n) = 1 + countDots n
-
--- | Move somewhere else.
-matchFileName :: ModuleName -> FilePath -> Bool
-matchFileName mname file = expected `isSuffixOf` given || literate `isSuffixOf` given
-  where
-    given    = splitPath file
-    expected = splitPath $ C.moduleNameToFileName (mnameToConcrete mname) ".agda"
-    literate = splitPath $ C.moduleNameToFileName (mnameToConcrete mname) ".lagda"
-
--- | Checks that the top-level module name, the file name and what we
--- expect are consistent.
-
-checkModuleName
-  :: Maybe ModuleName  -- ^ The module should have this name (might be
-                       --   unknown).
-  -> FilePath          -- ^ The module is defined in this file, whose
-                       --   file name is known to be consistent with the
-                       --   previous argument.
-  -> TopLevelInfo      -- ^ The module.
-  -> TCM ()
-checkModuleName mname file topLevel = case mname of
-    Nothing -> unless (matchFileName actualName file) err
-    Just expectedName -> unless (actualName == expectedName) err
-  where
-  actualName = topLevelModuleName topLevel
-  err = typeError $ ModuleNameDoesntMatchFileName actualName
+  where m = topLevelModuleName topLevel
 
 -- | True if the first file is newer than the second file. If a file doesn't
 -- exist it is considered to be infinitely old.
diff --git a/src/full/Agda/Interaction/MakeCase.hs b/src/full/Agda/Interaction/MakeCase.hs
--- a/src/full/Agda/Interaction/MakeCase.hs
+++ b/src/full/Agda/Interaction/MakeCase.hs
@@ -37,7 +37,7 @@
 --   Raises an error if there is no such clause.
 findClause :: MetaId -> TCM (QName, Clause)
 findClause m = do
-  sig <- getSignature
+  sig <- getImportedSignature
   let res = do
         def <- Map.elems $ sigDefinitions sig
         Function{funClauses = cs} <- [theDef def]
diff --git a/src/full/Agda/Interaction/Monad.hs b/src/full/Agda/Interaction/Monad.hs
--- a/src/full/Agda/Interaction/Monad.hs
+++ b/src/full/Agda/Interaction/Monad.hs
@@ -1,44 +1,25 @@
-
+{-# LANGUAGE TypeSynonymInstances, MultiParamTypeClasses #-}
 module Agda.Interaction.Monad where
 
 import Agda.TypeChecking.Monad
 
 import Control.Monad.Trans
+import Control.Monad.Error
 import System.Console.Haskeline
 
 -- | Interaction monad.
 
 type IM = TCMT (InputT IO)
 
+instance MonadError TCErr IM where
+  throwError = liftIO . throwIO
+  catchError m h = mapTCMT liftIO $ runIM m `catchError` (runIM . h)
+
 -- | Line reader. The line reader history is not stored between
 -- sessions.
 
 readline :: String -> IM (Maybe String)
 readline s = lift (getInputLine s)
-
-{-
-data CurrentPoint = InInteractionPoint InteractionId | TopLevel
-
-newtype IM a = IM {unIM :: StateT [CurrentPoint] TCM a}
-   deriving (Monad,MonadIO)
-
-
-instance MonadError e IM where
-    throwError	   = lift . throwError
-    catchError m h = IM $ catchError (unIM m) (unIM . h)
-
-
-
-instance MonadUndo [CurrentPoint] IM where
-    undo =
-
-
-run
-
--}
-
--- instance MonadTCM IM where
---     liftTCM = id
 
 runIM :: IM a -> TCM a
 runIM = mapTCMT (runInputT defaultSettings)
diff --git a/src/full/Agda/Interaction/Options.hs b/src/full/Agda/Interaction/Options.hs
--- a/src/full/Agda/Interaction/Options.hs
+++ b/src/full/Agda/Interaction/Options.hs
@@ -23,7 +23,6 @@
 import Agda.Utils.TestHelpers   ( runTests )
 import Agda.Utils.QuickCheck    ( quickCheck' )
 import Agda.Utils.Monad		( readM )
-import Agda.Utils.FileName		( slash )
 import Agda.Utils.List               ( wordsBy )
 import Agda.Utils.Trie               ( Trie )
 import qualified Agda.Utils.Trie as Trie
@@ -43,34 +42,35 @@
     fmap f (OptArg p s) = OptArg (f . p) s
 
 data CommandLineOptions =
-    Options { optProgramName	   :: String
-	    , optInputFile	   :: Maybe FilePath
-	    , optIncludeDirs	   :: [FilePath]
-	    , optShowVersion	   :: Bool
-	    , optShowHelp	   :: Bool
-	    , optInteractive	   :: Bool
-	    , optVerbose	   :: Trie String Int
-	    , optProofIrrelevance  :: Bool
-	    , optAllowUnsolved	   :: Bool
-	    , optShowImplicit	   :: Bool
-	    , optRunTests	   :: Bool
-	    , optCompile	   :: Bool
-	    , optGenerateVimFile   :: Bool
-	    , optGenerateEmacsFile :: Bool
-	    , optGenerateHTML      :: Bool
-	    , optHTMLDir           :: FilePath
-	    , optCSSFile           :: Maybe FilePath
-	    , optIgnoreInterfaces  :: Bool
-	    , optDisablePositivity :: Bool
-	    , optCompileAlonzo     :: Bool
-            , optCompileMAlonzo    :: Bool
-            , optMAlonzoDir        :: FilePath
-	    , optTerminationCheck  :: Bool
-	    , optCompletenessCheck :: Bool
-            , optUnreachableCheck  :: Bool
-	    , optUniverseCheck     :: Bool
-            , optSizedTypes        :: Bool
-            , optGhcFlags          :: [String]
+    Options { optProgramName          :: String
+	    , optInputFile            :: Maybe FilePath
+	    , optIncludeDirs          :: [FilePath]
+	    , optShowVersion          :: Bool
+	    , optShowHelp             :: Bool
+	    , optInteractive          :: Bool
+	    , optVerbose              :: Trie String Int
+	    , optProofIrrelevance     :: Bool
+	    , optAllowUnsolved        :: Bool
+	    , optShowImplicit         :: Bool
+	    , optRunTests             :: Bool
+	    , optCompile              :: Bool
+	    , optGenerateVimFile      :: Bool
+	    , optGenerateHTML         :: Bool
+	    , optHTMLDir              :: FilePath
+	    , optCSSFile              :: Maybe FilePath
+	    , optIgnoreInterfaces     :: Bool
+	    , optDisablePositivity    :: Bool
+	    , optCompileAlonzo        :: Bool
+            , optCompileMAlonzo       :: Bool
+            , optMAlonzoDir           :: Maybe FilePath
+              -- ^ In the absence of a path the project root is used.
+	    , optTerminationCheck     :: Bool
+	    , optCompletenessCheck    :: Bool
+            , optUnreachableCheck     :: Bool
+	    , optUniverseCheck        :: Bool
+            , optSizedTypes           :: Bool
+            , optUniversePolymorphism :: Bool
+            , optGhcFlags             :: [String]
 	    }
     deriving Show
 
@@ -81,40 +81,36 @@
 
 defaultOptions :: CommandLineOptions
 defaultOptions =
-    Options { optProgramName	   = "agda"
-	    , optInputFile	   = Nothing
-	    , optIncludeDirs	   = []
-	    , optShowVersion	   = False
-	    , optShowHelp	   = False
-	    , optInteractive	   = False
-	    , optVerbose	   = Trie.singleton [] 1
-	    , optProofIrrelevance  = False
-	    , optAllowUnsolved	   = False
-	    , optShowImplicit	   = False
-	    , optRunTests	   = False
-	    , optCompile	   = False
-	    , optGenerateVimFile   = False
-	    , optGenerateEmacsFile = False
-	    , optGenerateHTML      = False
-	    , optHTMLDir           = defaultHTMLDir
-	    , optCSSFile           = Nothing
-	    , optIgnoreInterfaces  = False
-	    , optDisablePositivity = False
-	    , optCompileAlonzo     = False
-	    , optCompileMAlonzo    = False
-            , optMAlonzoDir        = defaultMAlonzoDir
-            , optTerminationCheck  = True
-            , optCompletenessCheck = True
-            , optUnreachableCheck  = True
-            , optUniverseCheck     = True
-            , optSizedTypes        = False
-            , optGhcFlags          = []
+    Options { optProgramName          = "agda"
+	    , optInputFile            = Nothing
+	    , optIncludeDirs          = []
+	    , optShowVersion          = False
+	    , optShowHelp             = False
+	    , optInteractive          = False
+	    , optVerbose              = Trie.singleton [] 1
+	    , optProofIrrelevance     = False
+	    , optAllowUnsolved        = False
+	    , optShowImplicit         = False
+	    , optRunTests             = False
+	    , optCompile              = False
+	    , optGenerateVimFile      = False
+	    , optGenerateHTML         = False
+	    , optHTMLDir              = defaultHTMLDir
+	    , optCSSFile              = Nothing
+	    , optIgnoreInterfaces     = False
+	    , optDisablePositivity    = False
+	    , optCompileAlonzo        = False
+	    , optCompileMAlonzo       = False
+            , optMAlonzoDir           = Nothing
+            , optTerminationCheck     = True
+            , optCompletenessCheck    = True
+            , optUnreachableCheck     = True
+            , optUniverseCheck        = True
+            , optSizedTypes           = False
+            , optUniversePolymorphism = False
+            , optGhcFlags             = []
 	    }
 
--- | The default output directory for MAlonzo.
-
-defaultMAlonzoDir = "."
-
 -- | The default output directory for HTML.
 
 defaultHTMLDir = "html"
@@ -135,22 +131,23 @@
 checkOpts opts
   | not (atMostOne compilerOpts) =
     Left "At most one compiler may be used.\n"
-  | optAllowUnsolved opts && or compilerOpts = Left
+  | not (atMostOne $ optAllowUnsolved : compilerOpts) = Left
       "Unsolved meta variables are not allowed when compiling.\n"
-  | not (atMostOne [or compilerOpts, optInteractive opts]) =
+  | not (atMostOne $ optInteractive : compilerOpts) =
       Left "Choose at most one: compiler or interactive mode.\n"
-  | not (atMostOne [optGenerateHTML opts, optInteractive opts]) =
+  | not (atMostOne [optGenerateHTML, optInteractive]) =
       Left "Choose at most one: HTML generator or interactive mode.\n"
+  | not (atMostOne [optUniversePolymorphism, not . optUniverseCheck]) =
+      Left "Cannot have both universe polymorphism and type in type.\n"
   | otherwise = Right opts
   where
-  atMostOne bs = length (filter id bs) <= 1
+  atMostOne bs = length (filter ($ opts) bs) <= 1
 
   compilerOpts =
-    map ($ opts)
-      [ optCompile
-      , optCompileAlonzo
-      , optCompileMAlonzo
-      ]
+    [ optCompile
+    , optCompileAlonzo
+    , optCompileMAlonzo
+    ]
 
 inputFlag :: FilePath -> CommandLineOptions -> Either String CommandLineOptions
 inputFlag f o	    =
@@ -158,21 +155,21 @@
 	Nothing  -> checkOpts $ o { optInputFile = Just f }
 	Just _	 -> fail "only one input file allowed"
 
-versionFlag               o = checkOpts $ o { optShowVersion       = True }
-helpFlag                  o = checkOpts $ o { optShowHelp	       = True }
-proofIrrelevanceFlag      o = checkOpts $ o { optProofIrrelevance  = True }
-ignoreInterfacesFlag      o = checkOpts $ o { optIgnoreInterfaces  = True }
-allowUnsolvedFlag         o = checkOpts $ o { optAllowUnsolved     = True }
-showImplicitFlag          o = checkOpts $ o { optShowImplicit      = True }
-runTestsFlag              o = checkOpts $ o { optRunTests	       = True }
-vimFlag                   o = checkOpts $ o { optGenerateVimFile   = True }
-emacsFlag                 o = checkOpts $ o { optGenerateEmacsFile = True }
-noPositivityFlag          o = checkOpts $ o { optDisablePositivity = True }
-dontTerminationCheckFlag  o = checkOpts $ o { optTerminationCheck  = False }
-dontCompletenessCheckFlag o = checkOpts $ o { optCompletenessCheck = False }
-noUnreachableCheckFlag    o = checkOpts $ o { optUnreachableCheck  = False }
-dontUniverseCheckFlag     o = checkOpts $ o { optUniverseCheck     = False }
-sizedTypes                o = checkOpts $ o { optSizedTypes        = True }
+versionFlag               o = checkOpts $ o { optShowVersion          = True  }
+helpFlag                  o = checkOpts $ o { optShowHelp             = True  }
+proofIrrelevanceFlag      o = checkOpts $ o { optProofIrrelevance     = True  }
+ignoreInterfacesFlag      o = checkOpts $ o { optIgnoreInterfaces     = True  }
+allowUnsolvedFlag         o = checkOpts $ o { optAllowUnsolved        = True  }
+showImplicitFlag          o = checkOpts $ o { optShowImplicit         = True  }
+runTestsFlag              o = checkOpts $ o { optRunTests             = True  }
+vimFlag                   o = checkOpts $ o { optGenerateVimFile      = True  }
+noPositivityFlag          o = checkOpts $ o { optDisablePositivity    = True  }
+dontTerminationCheckFlag  o = checkOpts $ o { optTerminationCheck     = False }
+dontCompletenessCheckFlag o = checkOpts $ o { optCompletenessCheck    = False }
+noUnreachableCheckFlag    o = checkOpts $ o { optUnreachableCheck     = False }
+dontUniverseCheckFlag     o = checkOpts $ o { optUniverseCheck        = False }
+sizedTypes                o = checkOpts $ o { optSizedTypes           = True  }
+universePolymorphismFlag  o = checkOpts $ o { optUniversePolymorphism = True  }
 
 interactiveFlag o = checkOpts $ o { optInteractive   = True
 			          , optAllowUnsolved = True
@@ -181,7 +178,7 @@
 agateFlag        o = checkOpts $ o { optCompile        = True }
 alonzoFlag       o = checkOpts $ o { optCompileAlonzo  = True }
 malonzoFlag      o = checkOpts $ o { optCompileMAlonzo = True }
-malonzoDirFlag f o = checkOpts $ o { optMAlonzoDir     = f }
+malonzoDirFlag f o = checkOpts $ o { optMAlonzoDir     = Just f }
 ghcFlag        f o = checkOpts $ o { optGhcFlags       = f : optGhcFlags o }
 
 htmlFlag      o = checkOpts $ o { optGenerateHTML = True }
@@ -213,23 +210,14 @@
 		    "start in interactive mode"
     , Option ['c']  ["compile"] (NoArg compileFlag)
                     "compile program (experimental)"
-    , Option []	    ["agate"] (NoArg agateFlag)
-		    "use the Agate compiler (only with --compile)"
-    , Option []     ["alonzo"] (NoArg alonzoFlag)
-		    "use the Alonzo compiler (only with --compile)"
-    , Option []     ["malonzo"] (NoArg malonzoFlag)
-		    "use the MAlonzo compiler (DEFAULT) (only with --compile)"
-    , Option []     ["malonzo-dir"] (ReqArg malonzoDirFlag "DIR")
-		    ("directory for MAlonzo output (default: " ++
-                     defaultMAlonzoDir ++ ")")
+    , Option []     ["compile-dir"] (ReqArg malonzoDirFlag "DIR")
+		    ("directory for compiler output (default: the project root)")
     , Option []     ["ghc-flag"] (ReqArg ghcFlag "GHC-FLAG")
-                    "give the flag GHC-FLAG to GHC when compiling using MAlonzo"
+                    "give the flag GHC-FLAG to GHC when compiling"
     , Option []	    ["test"] (NoArg runTestsFlag)
 		    "run internal test suite"
     , Option []	    ["vim"] (NoArg vimFlag)
 		    "generate Vim highlighting files"
-    , Option []	    ["emacs"] (NoArg emacsFlag)
-		    "generate Emacs highlighting files"
     , Option []	    ["html"] (NoArg htmlFlag)
 		    "generate HTML files with highlighted source code"
     , Option []	    ["html-dir"] (ReqArg htmlDirFlag "DIR")
@@ -239,18 +227,18 @@
 		    "the CSS file used by the HTML files (can be relative)"
     , Option []	    ["ignore-interfaces"] (NoArg ignoreInterfacesFlag)
 		    "ignore interface files (re-type check everything)"
+    , Option ['i']  ["include-path"] (ReqArg includeFlag "DIR")
+		    "look for imports in DIR"
     ] ++ pragmaOptions
 
 pragmaOptions :: [OptDescr (Flag CommandLineOptions)]
 pragmaOptions =
-    [ Option ['i']  ["include-path"] (ReqArg includeFlag "DIR")
-		    "look for imports in DIR"
-    , Option ['v']  ["verbose"]	(ReqArg verboseFlag "N")
+    [ Option ['v']  ["verbose"]	(ReqArg verboseFlag "N")
 		    "set verbosity level to N"
     , Option []	    ["show-implicit"] (NoArg showImplicitFlag)
 		    "show implicit arguments when printing"
-    , Option []	    ["proof-irrelevance"] (NoArg proofIrrelevanceFlag)
-		    "enable proof irrelevance (experimental feature)"
+    -- , Option []	    ["proof-irrelevance"] (NoArg proofIrrelevanceFlag)
+    --     	    "enable proof irrelevance (experimental feature)"
     , Option []	    ["allow-unsolved-metas"] (NoArg allowUnsolvedFlag)
 		    "allow unsolved meta variables (only needed in batch mode)"
     , Option []	    ["no-positivity-check"] (NoArg noPositivityFlag)
@@ -265,6 +253,8 @@
 		    "ignore universe levels (this makes Agda inconsistent)"
     , Option []     ["sized-types"] (NoArg sizedTypes)
                     "use sized datatypes"
+    , Option []     ["universe-polymorphism"] (NoArg universePolymorphismFlag)
+                    "enable universe polymorphism (experimental feature)"
     ]
 
 -- | Used for printing usage info.
diff --git a/src/full/Agda/Main.hs b/src/full/Agda/Main.hs
--- a/src/full/Agda/Main.hs
+++ b/src/full/Agda/Main.hs
@@ -16,7 +16,8 @@
 import System.Environment
 import System.Exit
 import System.FilePath
-import qualified System.IO.UTF8 as UTF8
+import qualified Agda.Utils.IO.Locale as LocIO
+import System.Time
 
 import Agda.Syntax.Position
 import Agda.Syntax.Parser
@@ -34,7 +35,7 @@
 import Agda.Interaction.CommandLine.CommandLine
 import Agda.Interaction.Options
 import Agda.Interaction.Monad
-import Agda.Interaction.GhciTop ()	-- to make sure it compiles
+import Agda.Interaction.GhciTop ()      -- to make sure it compiles
 import qualified Agda.Interaction.Imports as Imp
 import Agda.Interaction.Highlighting.HTML
 
@@ -64,124 +65,110 @@
 
 -- | The main function
 runAgda :: TCM ()
-runAgda =
-    do	progName <- liftIO getProgName
-	argv	 <- liftIO getArgs
-	let opts = parseStandardOptions progName argv
-	case opts of
-	    Left err -> liftIO $ optionError err
-	    Right opts
-		| optShowHelp opts      -> liftIO printUsage
-		| optShowVersion opts   -> liftIO printVersion
-		| optRunTests opts      -> liftIO $ do
-                    ok <- testSuite
-                    unless ok exitFailure
-		| isNothing (optInputFile opts)
-		    && not (optInteractive opts)
-					-> liftIO printUsage
-		| otherwise		-> do setCommandLineOptions opts
-					      checkFile
-    where
-	checkFile :: TCM ()
-	checkFile =
-	    do	i	<- optInteractive <$> liftTCM commandLineOptions
-		compile <- optCompile <$> liftTCM commandLineOptions
-		alonzo  <- optCompileAlonzo <$> liftTCM commandLineOptions
-                malonzo <- optCompileMAlonzo <$> liftTCM commandLineOptions
-		when i $ liftIO $ UTF8.putStr splashScreen
-		let failIfError (_, Right _)  = return ()
-                    failIfError (_, Left err) = typeError err
-
-                    failIfNoInt (_, Right (Just i)) = return i
-                    -- The allowed combinations of command-line
-                    -- options should rule out Right Nothing here.
-                    failIfNoInt (_, Right Nothing)  = __IMPOSSIBLE__
-                    failIfNoInt (_, Left err)       = typeError err
-
-                    interaction
-                      :: TCM (ScopeInfo, Either TypeError (Maybe Interface))
-                      -> TCM ()
-                    interaction | i	  = runIM . interactionLoop
-				| compile = Agate.compilerMain   . (failIfError =<<)
-				| alonzo  = Alonzo.compilerMain  . (failIfError =<<)
-                                | malonzo = MAlonzo.compilerMain . (failIfNoInt =<<)
-				| otherwise = (failIfError =<<)
-		interaction $
-		    do	hasFile <- hasInputFile
-			resetState
-			if hasFile then
-			    do	file    <- getInputFile
-                                options <- commandLineOptions
+runAgda = do
+  progName <- liftIO getProgName
+  argv   <- liftIO getArgs
+  let opts = parseStandardOptions progName argv
+  case opts of
+    Left err -> liftIO $ optionError err
+    Right opts
+      | optShowHelp opts    -> liftIO printUsage
+      | optShowVersion opts -> liftIO printVersion
+      | optRunTests opts    -> liftIO $ do
+          ok <- testSuite
+          unless ok exitFailure
+      | isNothing (optInputFile opts)
+          && not (optInteractive opts)
+                            -> liftIO printUsage
+      | otherwise           -> do
+          setCommandLineOptions PersistentOptions opts
+          checkFile
+  where
+    checkFile :: TCM ()
+    checkFile = do
+      i       <- optInteractive    <$> liftTCM commandLineOptions
+      compile <- optCompile        <$> liftTCM commandLineOptions
+      alonzo  <- optCompileAlonzo  <$> liftTCM commandLineOptions
+      malonzo <- optCompileMAlonzo <$> liftTCM commandLineOptions
+      when i $ liftIO $ LocIO.putStr splashScreen
+      let failIfNoInt (Just i) = return i
+          -- The allowed combinations of command-line
+          -- options should rule out Nothing here.
+          failIfNoInt Nothing  = __IMPOSSIBLE__
 
-                                (topLevel, ok) <- Imp.createInterface options
-                                  noTrace [] Map.empty
-                                  Map.empty emptySignature
-                                  Map.empty Nothing file False
+          interaction :: TCM (Maybe Interface) -> TCM ()
+          interaction | i         = runIM . interactionLoop
+                      | compile   = Agate.compilerMain         . (() <$)
+                      | alonzo    = Alonzo.compilerMain        . (() <$)
+                      | malonzo   = (MAlonzo.compilerMain =<<) . (failIfNoInt =<<)
+                      | otherwise = (() <$)
+      interaction $ do
+        hasFile <- hasInputFile
+        resetState
+        if not hasFile then return Nothing else do
+          file    <- getInputFile
+          (i, mw) <- Imp.typeCheck file Imp.CurrentDir Nothing
 
-                                -- The value of options from above
-                                -- cannot be reused here, because then
-                                -- options set in pragmas would have
-                                -- no effect.
-                                unsolvedOK <- optAllowUnsolved <$> commandLineOptions
+          unsolvedOK <- optAllowUnsolved <$> commandLineOptions
 
-                                let result = case ok of
-                                      Imp.Warnings []             [] -> __IMPOSSIBLE__
-                                      Imp.Warnings _  unsolved@(_:_)
-                                        | unsolvedOK -> Right Nothing
-                                        | otherwise  -> Left $ UnsolvedMetas unsolved
-                                      Imp.Warnings termErrs@(_:_) _  ->
-                                        Left (TerminationCheckFailed termErrs)
-                                      Imp.Success { Imp.cirInterface = i } ->
-                                        Right (Just i)
+          result <- case mw of
+            Just (Imp.Warnings [] [] []) -> __IMPOSSIBLE__
+            Just (Imp.Warnings _ unsolved@(_:_) _)
+              | not unsolvedOK -> typeError $ UnsolvedMetas unsolved
+            Just (Imp.Warnings _ _ unsolved@(_:_))
+              | not unsolvedOK -> typeError $ UnsolvedConstraints unsolved
+            Just (Imp.Warnings termErrs@(_:_) _ _) ->
+              typeError $ TerminationCheckFailed termErrs
+            Just _  -> return Nothing
+            Nothing -> return $ Just i
 
-				-- Print stats
-				stats <- Map.toList <$> getStatistics
-				case stats of
-				    []	-> return ()
-				    _	-> liftIO $ do
-					UTF8.putStrLn "Statistics"
-					UTF8.putStrLn "----------"
-					mapM_ (\ (s,n) -> UTF8.putStrLn $ s ++ " : " ++ show n) $
-					    sortBy (\x y -> compare (snd x) (snd y)) stats
+          -- Print stats
+          stats <- Map.toList <$> getStatistics
+          case stats of
+            []      -> return ()
+            _       -> liftIO $ do
+              LocIO.putStrLn "Statistics"
+              LocIO.putStrLn "----------"
+              mapM_ (\ (s,n) -> LocIO.putStrLn $ s ++ " : " ++ show n) $
+                sortBy (\x y -> compare (snd x) (snd y)) stats
 
-                                whenM (optGenerateHTML <$> commandLineOptions) $ do
-                                  case ok of
-                                    Imp.Success {} -> generateHTML $ topLevelModuleName topLevel
-                                    _ -> return ()
-                                         -- The error will be handled by interaction.
+          whenM (optGenerateHTML <$> commandLineOptions) $ do
+            case mw of
+              Nothing -> generateHTML $ iModuleName i
+              Just _  -> reportSLn "" 1
+                "HTML is not generated (unsolved meta-variables)."
 
-				return (insideScope topLevel, result)
-			  else return (emptyScopeInfo, Right Nothing)
+          return result
 
 -- | Print usage information.
 printUsage :: IO ()
-printUsage =
-    do	progName <- getProgName
-	UTF8.putStr $ usage standardOptions_ [] progName
+printUsage = do
+  progName <- getProgName
+  LocIO.putStr $ usage standardOptions_ [] progName
 
 -- | Print version information.
 printVersion :: IO ()
 printVersion =
-    UTF8.putStrLn $ "Agda version " ++ version
+  LocIO.putStrLn $ "Agda version " ++ version
 
 -- | What to do for bad options.
 optionError :: String -> IO ()
-optionError err =
-    do	UTF8.putStrLn $ "Error: " ++ err
-	printUsage
-	exitFailure
+optionError err = do
+  LocIO.putStrLn $ "Error: " ++ err
+  printUsage
+  exitFailure
 
 -- | Main
 main :: IO ()
 main = do
     r <- runTCM $ runAgda `catchError` \err -> do
-	s <- prettyError err
-	liftIO $ UTF8.putStrLn s
-	throwError err
+      s <- prettyError err
+      liftIO $ LocIO.putStrLn s
+      throwError err
     case r of
-	Right _	-> exitSuccess
-	Left _	-> exitFailure
+      Right _ -> exitSuccess
+      Left _  -> exitFailure
   `catchImpossible` \e -> do
-    UTF8.putStr $ show e
+    LocIO.putStr $ show e
     exitFailure
 
diff --git a/src/full/Agda/Syntax/Abstract.hs b/src/full/Agda/Syntax/Abstract.hs
--- a/src/full/Agda/Syntax/Abstract.hs
+++ b/src/full/Agda/Syntax/Abstract.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveDataTypeable, CPP #-}
 {-| The abstract syntax. This is what you get after desugaring and scope
     analysis of the concrete syntax. The type checker works on abstract syntax,
     producing internal syntax ("Agda.Syntax.Internal").
@@ -27,6 +27,9 @@
 
 import Agda.Utils.Tuple
 
+#include "../undefined.h"
+import Agda.Utils.Impossible
+
 data Expr
         = Var  Name			     -- ^ Bound variables
         | Def  QName			     -- ^ Constants (i.e. axioms, functions, and datatypes)
@@ -46,12 +49,12 @@
         | ETel Telescope                     -- ^ only used when printing telescopes
 	| Rec  ExprInfo [(C.Name, Expr)]     -- ^ record construction
 	| ScopedExpr ScopeInfo Expr	     -- ^ scope annotation
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 data Declaration
-	= Axiom      DefInfo QName Expr				-- ^ postulate
-	| Field      DefInfo QName Expr				-- ^ record field
-	| Primitive  DefInfo QName Expr				-- ^ primitive function
+	= Axiom      DefInfo        QName Expr			-- ^ postulate
+	| Field      DefInfo Hiding QName Expr			-- ^ record field
+	| Primitive  DefInfo        QName Expr			-- ^ primitive function
 	| Definition DeclInfo [TypeSignature] [Definition]	-- ^ a bunch of mutually recursive definitions
 	| Section    ModuleInfo ModuleName [TypedBindings] [Declaration]
 	| Apply	     ModuleInfo ModuleName [TypedBindings] ModuleName [NamedArg Expr] (Map QName QName) (Map ModuleName ModuleName)
@@ -60,29 +63,30 @@
         | Open       ModuleInfo ModuleName
           -- ^ only retained for highlighting purposes
 	| ScopedDecl ScopeInfo [Declaration]  -- ^ scope annotation
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 data Pragma = OptionsPragma [String]
 	    | BuiltinPragma String Expr
             | CompiledPragma QName String
             | CompiledTypePragma QName String
             | CompiledDataPragma QName String [String]
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 data LetBinding = LetBind LetInfo Name Expr Expr    -- ^ LetBind info name type defn
                 | LetApply ModuleInfo ModuleName [TypedBindings] ModuleName [NamedArg Expr] (Map QName QName) (Map ModuleName ModuleName)
                 | LetOpen ModuleInfo ModuleName  -- ^ only for highlighting
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 -- | A definition without its type signature.
 data Definition
 	= FunDef     DefInfo QName [Clause]
 	| DataDef    DefInfo QName Induction [LamBinding] [Constructor]
 	    -- ^ the 'LamBinding's are 'DomainFree' and binds the parameters of the datatype.
-	| RecDef     DefInfo QName [LamBinding] Expr [Declaration]
-	    -- ^ the 'Expr' gives the constructor type telescope: @(x1 : A1)..(xn : An) -> Prop@
+	| RecDef     DefInfo QName (Maybe Constructor) [LamBinding] Expr [Declaration]
+	    -- ^ The 'Expr' gives the constructor type telescope, @(x1 : A1)..(xn : An) -> Prop@,
+            --   and the optional name is the constructor's name.
         | ScopedDef ScopeInfo Definition
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 -- | Only 'Axiom's.
 type TypeSignature  = Declaration
@@ -92,12 +96,12 @@
 data LamBinding
 	= DomainFree Hiding Name    -- ^ . @x@ or @{x}@
 	| DomainFull TypedBindings  -- ^ . @(xs:e)@ or @{xs:e}@
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 -- | Typed bindings with hiding information.
 data TypedBindings = TypedBindings Range Hiding [TypedBinding]
 	    -- ^ . @(xs:e;..;ys:e')@ or @{xs:e;..;ys:e'}@
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 -- | A typed binding. Appears in dependent function spaces, typed lambdas, and
 --   telescopes. I might be tempting to simplify this to only bind a single
@@ -107,7 +111,7 @@
 --   you have to.
 data TypedBinding = TBind Range [Name] Expr
 		  | TNoBind Expr
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 type Telescope	= [TypedBindings]
 
@@ -115,14 +119,18 @@
 --   @let@. It's not obvious how to remember that the @let@ was really a
 --   @where@ clause though, so for the time being we keep it here.
 data Clause	= Clause LHS RHS [Declaration]
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 data RHS	= RHS Expr
 		| AbsurdRHS
 		| WithRHS QName [Expr] [Clause] -- ^ The 'QName' is the name of the with function.
-  deriving (Typeable, Data)
+                | RewriteRHS [QName] [Expr] RHS [Declaration]
+                    -- ^ The 'QName's are the names of the generated with functions.
+                    --   One for each 'Expr'.
+                    --   The RHS shouldn't be another RewriteRHS
+  deriving (Typeable, Data, Show)
 
 data LHS	= LHS LHSInfo QName [NamedArg Pattern] [Pattern]
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 -- | Parameterised over the type of dot patterns.
 data Pattern' e	= VarP Name
@@ -134,7 +142,7 @@
 		| AbsurdP PatInfo
 		| LitP Literal
 		| ImplicitP PatInfo	-- ^ generated at type checking for implicit arguments
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 type Pattern = Pattern' Expr
 
@@ -214,7 +222,7 @@
 
 instance HasRange Declaration where
     getRange (Axiom      i _ _	       ) = getRange i
-    getRange (Field      i _ _         ) = getRange i
+    getRange (Field      i _ _ _       ) = getRange i
     getRange (Definition i _ _	       ) = getRange i
     getRange (Section    i _ _ _       ) = getRange i
     getRange (Apply	 i _ _ _ _ _ _ ) = getRange i
@@ -227,7 +235,7 @@
 instance HasRange Definition where
     getRange (FunDef  i _ _    )   = getRange i
     getRange (DataDef i _ _ _ _  ) = getRange i
-    getRange (RecDef  i _ _ _ _)   = getRange i
+    getRange (RecDef  i _ _ _ _ _) = getRange i
     getRange (ScopedDef _ d)       = getRange d
 
 instance HasRange (Pattern' e) where
@@ -248,9 +256,10 @@
     getRange (Clause lhs rhs ds) = getRange (lhs,rhs,ds)
 
 instance HasRange RHS where
-    getRange AbsurdRHS        = noRange
-    getRange (RHS e)          = getRange e
-    getRange (WithRHS _ e cs) = fuseRange e cs
+    getRange AbsurdRHS                = noRange
+    getRange (RHS e)                  = getRange e
+    getRange (WithRHS _ e cs)         = fuseRange e cs
+    getRange (RewriteRHS _ es rhs wh) = getRange (es, rhs, wh)
 
 instance HasRange LetBinding where
     getRange (LetBind  i _ _ _       ) = getRange i
@@ -290,7 +299,7 @@
 
 instance KillRange Declaration where
   killRange (Axiom      i a b         ) = killRange3 Axiom      i a b
-  killRange (Field      i a b         ) = killRange3 Field      i a b
+  killRange (Field      i h a b       ) = killRange4 Field      i h a b
   killRange (Definition i a b         ) = killRange3 Definition i a b
   killRange (Section    i a b c       ) = killRange4 Section    i a b c
   killRange (Apply      i a b c d e f ) = killRange5 Apply      i a b c d e f
@@ -301,10 +310,10 @@
   killRange (ScopedDecl a d           ) = killRange1 (ScopedDecl a) d
 
 instance KillRange Definition where
-  killRange (FunDef  i a b    ) = killRange3 FunDef  i a b
-  killRange (DataDef i a b c d) = killRange5 DataDef i a b c d
-  killRange (RecDef  i a b c d) = killRange5 RecDef  i a b c d
-  killRange (ScopedDef s a)     = killRange1 (ScopedDef s) a
+  killRange (FunDef  i a b    )   = killRange3 FunDef  i a b
+  killRange (DataDef i a b c d)   = killRange5 DataDef i a b c d
+  killRange (RecDef  i a b c d e) = killRange6 RecDef  i a b c d e
+  killRange (ScopedDef s a)       = killRange1 (ScopedDef s) a
 
 instance KillRange e => KillRange (Pattern' e) where
   killRange (VarP x)      = killRange1 VarP x
@@ -324,9 +333,10 @@
   killRange (Clause lhs rhs ds) = killRange3 Clause lhs rhs ds
 
 instance KillRange RHS where
-  killRange AbsurdRHS        = AbsurdRHS
-  killRange (RHS e)          = killRange1 RHS e
-  killRange (WithRHS q e cs) = killRange3 WithRHS q e cs
+  killRange AbsurdRHS                = AbsurdRHS
+  killRange (RHS e)                  = killRange1 RHS e
+  killRange (WithRHS q e cs)         = killRange3 WithRHS q e cs
+  killRange (RewriteRHS x es rhs wh) = killRange4 RewriteRHS x es rhs wh
 
 instance KillRange LetBinding where
   killRange (LetBind  i a b c       ) = killRange4 LetBind  i a b c
@@ -342,28 +352,40 @@
 -- include local modules and where clauses.
 
 allNames :: Declaration -> Seq QName
-allNames (Axiom     _ q _)     = Seq.singleton q
-allNames (Field     _ q _)     = Seq.singleton q
-allNames (Primitive _ q _)     = Seq.singleton q
+allNames (Axiom     _   q _)   = Seq.singleton q
+allNames (Field     _ _ q _)   = Seq.singleton q
+allNames (Primitive _   q _)   = Seq.singleton q
 allNames (Definition _ _ defs) = Fold.foldMap allNamesD defs
   where
   allNamesD :: Definition -> Seq QName
-  allNamesD (FunDef _ q cls)        = q <| Fold.foldMap allNamesC cls
-  allNamesD (DataDef _ q _ _ decls) = q <| Fold.foldMap allNames decls
-  allNamesD (RecDef _ q _ _ decls)  = q <| Fold.foldMap allNames decls
-  allNamesD (ScopedDef _ def)       = allNamesD def
+  allNamesD (FunDef _ q cls)         = q <| Fold.foldMap allNamesC cls
+  allNamesD (DataDef _ q _ _ decls)  = q <| Fold.foldMap allNames decls
+  allNamesD (ScopedDef _ def)        = allNamesD def
+  allNamesD (RecDef _ q c _ _ decls) =
+    q <| Fold.foldMap allNames c >< Fold.foldMap allNames decls
 
   allNamesC :: Clause -> Seq QName
   allNamesC (Clause _ rhs decls) = allNamesR rhs ><
                                    Fold.foldMap allNames decls
 
   allNamesR :: RHS -> Seq QName
-  allNamesR RHS {}            = Seq.empty
-  allNamesR AbsurdRHS {}      = Seq.empty
-  allNamesR (WithRHS q _ cls) = q <| Fold.foldMap allNamesC cls
+  allNamesR RHS {}                = Seq.empty
+  allNamesR AbsurdRHS {}          = Seq.empty
+  allNamesR (WithRHS q _ cls)     = q <| Fold.foldMap allNamesC cls
+  allNamesR (RewriteRHS qs _ rhs cls) =
+    Seq.fromList qs >< allNamesR rhs
+                    >< Fold.foldMap allNames cls
 allNames (Section _ _ _ decls) = Fold.foldMap allNames decls
 allNames Apply {}              = Seq.empty
 allNames Import {}             = Seq.empty
 allNames Pragma {}             = Seq.empty
 allNames Open {}               = Seq.empty
 allNames (ScopedDecl _ decls)  = Fold.foldMap allNames decls
+
+-- | The name defined by the given axiom.
+--
+-- Precondition: The declaration has to be an 'Axiom'.
+
+axiomName :: Declaration -> QName
+axiomName (Axiom _ q _) = q
+axiomName _             = __IMPOSSIBLE__
diff --git a/src/full/Agda/Syntax/Abstract/Name.hs b/src/full/Agda/Syntax/Abstract/Name.hs
--- a/src/full/Agda/Syntax/Abstract/Name.hs
+++ b/src/full/Agda/Syntax/Abstract/Name.hs
@@ -54,7 +54,7 @@
 -- Invariant: All the names in the list must have the same concrete,
 -- unqualified name.
 newtype AmbiguousQName = AmbQ { unAmbQ :: [QName] }
-  deriving (Typeable, Data, HasRange)
+  deriving (Typeable, Data, HasRange, Show)
 
 instance HasRange ModuleName where
   getRange (MName []) = noRange
@@ -129,6 +129,15 @@
 mnameToConcrete (MName xs) = foldr C.Qual (C.QName $ last cs) $ init cs
   where
     cs = map nameConcrete xs
+
+-- | Computes the 'TopLevelModuleName' corresponding to the given
+-- module name, which is assumed to represent a top-level module name.
+--
+-- Precondition: The module name must be well-formed.
+
+toTopLevelModuleName :: ModuleName -> C.TopLevelModuleName
+toTopLevelModuleName (MName []) = __IMPOSSIBLE__
+toTopLevelModuleName (MName ms) = C.TopLevelModuleName (map show ms)
 
 qualifyM :: ModuleName -> ModuleName -> ModuleName
 qualifyM m1 m2 = mnameFromList $ mnameToList m1 ++ mnameToList m2
diff --git a/src/full/Agda/Syntax/Common.hs b/src/full/Agda/Syntax/Common.hs
--- a/src/full/Agda/Syntax/Common.hs
+++ b/src/full/Agda/Syntax/Common.hs
@@ -18,17 +18,17 @@
 import Agda.Utils.Impossible
 
 data Induction = Inductive | CoInductive
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Typeable, Data, Show, Eq, Ord)
 
 data Hiding  = Hidden | NotHidden
-    deriving (Typeable, Data, Show, Eq)
+    deriving (Typeable, Data, Show, Eq, Ord)
 
 instance KillRange Induction where killRange = id
 instance KillRange Hiding    where killRange = id
 
 -- | A function argument can be hidden.
 data Arg e  = Arg { argHiding :: Hiding, unArg :: e }
-    deriving (Typeable, Data, Eq)
+    deriving (Typeable, Data, Eq, Ord)
 
 instance Functor Arg where
     fmap f (Arg h x) = Arg h $ f x
@@ -56,7 +56,7 @@
     Named { nameOf     :: Maybe name
 	  , namedThing :: a
 	  }
-    deriving (Eq, Typeable, Data)
+    deriving (Eq, Ord, Typeable, Data)
 
 unnamed :: a -> Named name a
 unnamed = Named Nothing
@@ -92,15 +92,15 @@
 -- | Functions can be defined in both infix and prefix style. See
 --   'Agda.Syntax.Concrete.LHS'.
 data IsInfix = InfixDef | PrefixDef
-    deriving (Typeable, Data, Show, Eq)
+    deriving (Typeable, Data, Show, Eq, Ord)
 
 -- | Access modifier.
 data Access = PrivateAccess | PublicAccess
-    deriving (Typeable, Data, Show, Eq)
+    deriving (Typeable, Data, Show, Eq, Ord)
 
 -- | Abstract or concrete
 data IsAbstract = AbstractDef | ConcreteDef
-    deriving (Typeable, Data, Show, Eq)
+    deriving (Typeable, Data, Show, Eq, Ord)
 
 type Nat    = Integer
 type Arity  = Nat
diff --git a/src/full/Agda/Syntax/Concrete.hs b/src/full/Agda/Syntax/Concrete.hs
--- a/src/full/Agda/Syntax/Concrete.hs
+++ b/src/full/Agda/Syntax/Concrete.hs
@@ -28,6 +28,8 @@
     , LHS(..), Pattern(..)
     , RHS(..), WhereClause(..)
     , Pragma(..)
+    , Module
+    , topLevelModuleName
     )
     where
 
@@ -40,6 +42,9 @@
 
 import Agda.Syntax.Concrete.Name
 
+import Agda.Utils.Impossible
+#include "../undefined.h"
+
 -- | Concrete expressions. Should represent exactly what the user wrote.
 data Expr
 	= Ident QName			       -- ^ ex: @x@
@@ -128,12 +133,15 @@
 
    We use fixity information to see which name is actually defined.
 -}
-data LHS = LHS Pattern [Pattern] [Expr]
-         -- ^ original pattern, with-patterns and with-expressions
-         | Ellipsis Range [Pattern] [Expr]
-         -- ^ new with-patterns and with-expressions
+data LHS = LHS Pattern [Pattern] [RewriteEqn] [WithExpr]
+         -- ^ original pattern, with-patterns, rewrite equations and with-expressions
+         | Ellipsis Range [Pattern] [RewriteEqn] [WithExpr]
+         -- ^ new with-patterns, rewrite equations and with-expressions
   deriving (Typeable, Data, Eq)
 
+type RewriteEqn = Expr
+type WithExpr   = Expr
+
 data RHS = AbsurdRHS
 	 | RHS Expr
     deriving (Typeable, Data, Eq)
@@ -204,10 +212,11 @@
 -}
 data Declaration
 	= TypeSig Name Expr
-        | Field Name Expr
+        | Field Hiding Name Expr
 	| FunClause LHS RHS WhereClause
 	| Data        !Range Induction Name [TypedBindings] Expr [Constructor]
-	| Record      !Range Name [TypedBindings] Expr [Field]
+	| Record      !Range Name (Maybe Name) [TypedBindings] Expr [Declaration]
+          -- ^ The optional name is a name for the record constructor.
 	| Infix Fixity [Name]
 	| Mutual      !Range [Declaration]
 	| Abstract    !Range [Declaration]
@@ -228,13 +237,31 @@
 
 data Pragma = OptionsPragma     !Range [String]
 	    | BuiltinPragma     !Range String Expr
-	    | LinePragma        !Range Int String
             | CompiledDataPragma !Range QName String [String]
             | CompiledTypePragma !Range QName String
             | CompiledPragma    !Range QName String
             | ImportPragma      !Range String
+              -- ^ Invariant: The string must be a valid Haskell
+              -- module name.
+            | ImpossiblePragma !Range
     deriving (Eq, Typeable, Data)
 
+---------------------------------------------------------------------------
+
+-- | Modules: Top-level pragmas plus other top-level declarations.
+
+type Module = ([Pragma], [Declaration])
+
+-- | Computes the top-level module name.
+--
+-- Precondition: The 'Module' has to be well-formed.
+
+topLevelModuleName :: Module -> TopLevelModuleName
+topLevelModuleName (_, []) = __IMPOSSIBLE__
+topLevelModuleName (_, ds) = case last ds of
+  Module _ n _ _ -> toTopLevelModuleName n
+  _              -> __IMPOSSIBLE__
+
 {--------------------------------------------------------------------------
     Views
  --------------------------------------------------------------------------}
@@ -308,10 +335,10 @@
 
 instance HasRange Declaration where
     getRange (TypeSig x t)		= fuseRange x t
-    getRange (Field x t)                = fuseRange x t
+    getRange (Field _ x t)              = fuseRange x t
     getRange (FunClause lhs rhs wh)	= fuseRange lhs rhs `fuseRange` wh
     getRange (Data r _ _ _ _ _)		= r
-    getRange (Record r _ _ _ _)		= r
+    getRange (Record r _ _ _ _ _)	= r
     getRange (Mutual r _)		= r
     getRange (Abstract r _)		= r
     getRange (Open r _ _)		= r
@@ -325,8 +352,8 @@
     getRange (Pragma p)			= getRange p
 
 instance HasRange LHS where
-  getRange (LHS p ps es) = fuseRange p (fuseRange ps es)
-  getRange (Ellipsis r _ _) = r
+  getRange (LHS p ps eqns ws) = fuseRange p (fuseRange ps (eqns ++ ws))
+  getRange (Ellipsis r _ _ _) = r
 
 instance HasRange RHS where
     getRange AbsurdRHS = noRange
@@ -335,11 +362,11 @@
 instance HasRange Pragma where
     getRange (OptionsPragma r _)          = r
     getRange (BuiltinPragma r _ _)        = r
-    getRange (LinePragma r _ _)           = r
     getRange (CompiledDataPragma r _ _ _) = r
     getRange (CompiledTypePragma r _ _)   = r
     getRange (CompiledPragma r _ _)       = r
     getRange (ImportPragma r _)           = r
+    getRange (ImpossiblePragma r)         = r
 
 instance HasRange UsingOrHiding where
     getRange (Using xs)	    = getRange xs
diff --git a/src/full/Agda/Syntax/Concrete/Definitions.hs b/src/full/Agda/Syntax/Concrete/Definitions.hs
--- a/src/full/Agda/Syntax/Concrete/Definitions.hs
+++ b/src/full/Agda/Syntax/Concrete/Definitions.hs
@@ -4,7 +4,6 @@
     ( NiceDeclaration(..)
     , NiceDefinition(..)
     , NiceConstructor, NiceTypeSignature
-    , NiceField
     , Clause(..)
     , DeclarationException(..)
     , Nice, runNice
@@ -12,13 +11,14 @@
     , notSoNiceDeclarations
     ) where
 
-import Control.Exception
 import Control.Applicative
 
 import Data.Generics (Data, Typeable)
 import qualified Data.Map as Map
 import Control.Monad.Error
 import Data.List
+import Data.Maybe
+import qualified Data.Traversable as Trav
 
 import Agda.Syntax.Concrete
 import Agda.Syntax.Common
@@ -41,7 +41,7 @@
 -}
 data NiceDeclaration
 	= Axiom Range Fixity Access IsAbstract Name Expr
-        | NiceField Range Fixity Access IsAbstract Name Expr
+        | NiceField Range Fixity Access IsAbstract Hiding Name Expr
 	| PrimitiveFunction Range Fixity Access IsAbstract Name Expr
 	| NiceDef Range [Declaration] [NiceTypeSignature] [NiceDefinition]
 	    -- ^ A bunch of mutually recursive functions\/datatypes.
@@ -58,12 +58,13 @@
 data NiceDefinition
 	= FunDef  Range [Declaration] Fixity Access IsAbstract Name [Clause]
 	| DataDef Range Induction Fixity Access IsAbstract Name [LamBinding] [NiceConstructor]
-	| RecDef Range Fixity Access IsAbstract Name [LamBinding] [NiceField]
+	| RecDef Range Fixity Access IsAbstract Name (Maybe NiceConstructor) [LamBinding] [NiceDeclaration]
+          -- ^ The 'NiceConstructor' has a dummy type field (the
+          --   record constructor type has not been computed yet).
     deriving (Typeable, Data)
 
 -- | Only 'Axiom's.
 type NiceConstructor = NiceTypeSignature
-type NiceField = NiceTypeSignature
 
 -- | Only 'Axiom's.
 type NiceTypeSignature	= NiceDeclaration
@@ -95,7 +96,7 @@
 
 instance HasRange NiceDeclaration where
     getRange (Axiom r _ _ _ _ _)	       = r
-    getRange (NiceField r _ _ _ _ _)	       = r
+    getRange (NiceField r _ _ _ _ _ _)	       = r
     getRange (NiceDef r _ _ _)		       = r
     getRange (NiceModule r _ _ _ _ _)	       = r
     getRange (NiceModuleMacro r _ _ _ _ _ _ _) = r
@@ -107,7 +108,7 @@
 instance HasRange NiceDefinition where
   getRange (FunDef r _ _ _ _ _ _)    = r
   getRange (DataDef r _ _ _ _ _ _ _) = r
-  getRange (RecDef r _ _ _ _ _ _)    = r
+  getRange (RecDef r _ _ _ _ _ _ _)  = r
 
 instance Error DeclarationException where
   noMsg  = strMsg ""
@@ -132,7 +133,7 @@
     [text $ decl nd] ++ pwords "are not allowed in mutual blocks"
     where
       decl (Axiom _ _ _ _ _ _)		     = "Postulates"
-      decl (NiceField _ _ _ _ _ _)           = "Fields"
+      decl (NiceField _ _ _ _ _ _ _)         = "Fields"
       decl (NiceDef _ _ _ _)		     = "Record types"
       decl (NiceModule _ _ _ _ _ _)	     = "Modules"
       decl (NiceModuleMacro _ _ _ _ _ _ _ _) = "Modules"
@@ -172,12 +173,12 @@
 	declaredNames :: Declaration -> [Name]
 	declaredNames d = case d of
 	  TypeSig x _				       -> [x]
-          Field x _                                    -> [x]
-	  FunClause (LHS p [] _) _ _
+          Field _ x _                                  -> [x]
+	  FunClause (LHS p [] _ _) _ _
             | IdentP (QName x) <- noSingletonRawAppP p -> [x]
 	  FunClause{}				       -> []
 	  Data _ _ x _ _ cs			       -> x : concatMap declaredNames cs
-	  Record _ x _ _ _			       -> [x]
+	  Record _ x c _ _ _			       -> x : maybeToList c
 	  Infix _ _				       -> []
 	  Mutual _ ds				       -> concatMap declaredNames ds
 	  Abstract _ ds				       -> concatMap declaredNames ds
@@ -207,7 +208,7 @@
 			  d <- mkFunDef fixs x (Just t) ds0
                           return $ d : ds1
 
-		cl@(FunClause lhs@(LHS p [] _) _ _)
+		cl@(FunClause lhs@(LHS p [] _ _) _ _)
                   | IdentP (QName x) <- noSingletonRawAppP p
                                   -> do
 		      ds <- nice fixs ds
@@ -218,9 +219,13 @@
 		_   -> liftM2 (++) nds (nice fixs ds)
 		    where
 			nds = case d of
-                            Field x t               -> return $ niceAxioms fixs [ Field x t ]
+                            Field h x t             -> return $ niceAxioms fixs [ Field h x t ]
 			    Data   r ind x tel t cs -> dataOrRec (flip DataDef ind) niceAx r x tel t cs
-			    Record r x tel t cs     -> dataOrRec RecDef (const niceDeclarations) r x tel t cs
+			    Record r x c tel t cs   -> do
+                              let dummyType = Prop noRange
+                                  c'        = (\c -> niceAxiom fixs (TypeSig c dummyType)) <$> c
+                              dataOrRec (\x1 x2 x3 x4 x5 -> RecDef x1 x2 x3 x4 x5 c')
+                                        (const niceDeclarations) r x tel t cs
 			    Mutual r ds -> do
 			      d <- mkMutual r [d] =<< niceFix fixs ds
 			      return [d]
@@ -280,17 +285,15 @@
         niceAx fixs ds = return $ niceAxioms fixs ds
 
 	niceAxioms :: Map.Map Name Fixity -> [TypeSignature] -> [NiceDeclaration]
-	niceAxioms fixs ds = nice ds
-	    where
-		nice [] = []
-		nice (d@(TypeSig x t) : ds) =
-		    Axiom (getRange d) (fixity x fixs) PublicAccess ConcreteDef x t
-		    : nice ds
-		nice (d@(Field x t) : ds) =
-		    NiceField (getRange d) (fixity x fixs) PublicAccess ConcreteDef x t
-		    : nice ds
-		nice _ = __IMPOSSIBLE__
+	niceAxioms fixs ds = map (niceAxiom fixs) ds
 
+        niceAxiom :: Map.Map Name Fixity -> TypeSignature -> NiceDeclaration
+        niceAxiom fixs d@(TypeSig x t) =
+            Axiom (getRange d) (fixity x fixs) PublicAccess ConcreteDef x t
+        niceAxiom fixs d@(Field h x t) =
+            NiceField (getRange d) (fixity x fixs) PublicAccess ConcreteDef h x t
+        niceAxiom _ _ = __IMPOSSIBLE__
+
 	toPrim :: NiceDeclaration -> NiceDeclaration
 	toPrim (Axiom r f a c x t) = PrimitiveFunction r f a c x t
 	toPrim _		   = __IMPOSSIBLE__
@@ -313,19 +316,19 @@
 
         expandEllipsis :: [Declaration] -> [Declaration]
         expandEllipsis [] = []
-        expandEllipsis (d@(FunClause (Ellipsis _ _ _) _ _) : ds) =
+        expandEllipsis (d@(FunClause Ellipsis{} _ _) : ds) =
           d : expandEllipsis ds
-        expandEllipsis (d@(FunClause lhs@(LHS p ps _) _ _) : ds) =
+        expandEllipsis (d@(FunClause lhs@(LHS p ps _ _) _ _) : ds) =
           d : expand p ps ds
           where
             expand _ _ [] = []
-            expand p ps (FunClause (Ellipsis _ ps' []) rhs wh : ds) =
-              FunClause (LHS p (ps ++ ps') []) rhs wh : expand p ps ds
-            expand p ps (FunClause (Ellipsis _ ps' es) rhs wh : ds) =
-              FunClause (LHS p (ps ++ ps') es) rhs wh : expand p (ps ++ ps') ds
-            expand p ps (d@(FunClause (LHS _ _ []) _ _) : ds) =
+            expand p ps (FunClause (Ellipsis _ ps' eqs []) rhs wh : ds) =
+              FunClause (LHS p (ps ++ ps') eqs []) rhs wh : expand p ps ds
+            expand p ps (FunClause (Ellipsis _ ps' eqs es) rhs wh : ds) =
+              FunClause (LHS p (ps ++ ps') eqs es) rhs wh : expand p (ps ++ ps') ds
+            expand p ps (d@(FunClause (LHS _ _ _ []) _ _) : ds) =
               d : expand p ps ds
-            expand _ _ (d@(FunClause (LHS p ps (_ : _)) _ _) : ds) =
+            expand _ _ (d@(FunClause (LHS p ps _ (_ : _)) _ _) : ds) =
               d : expand p ps ds
             expand _ _ (_ : ds) = __IMPOSSIBLE__
         expandEllipsis (_ : ds) = __IMPOSSIBLE__
@@ -334,9 +337,9 @@
         -- Turn function clauses into nice function clauses.
         mkClauses :: Name -> [Declaration] -> Nice [Clause]
         mkClauses _ [] = return []
-        mkClauses x (FunClause lhs@(LHS _ _ []) rhs wh : cs) =
+        mkClauses x (FunClause lhs@(LHS _ _ _ []) rhs wh : cs) =
           (Clause x lhs rhs wh [] :) <$> mkClauses x cs
-        mkClauses x (FunClause lhs@(LHS _ ps es) rhs wh : cs) = do
+        mkClauses x (FunClause lhs@(LHS _ ps _ es) rhs wh : cs) = do
           when (null with) $ throwError $ MissingWithClauses x
           wcs <- mkClauses x with
           (Clause x lhs rhs wh wcs :) <$> mkClauses x cs'
@@ -346,18 +349,19 @@
             -- A clause is a subclause if the number of with-patterns is
             -- greater or equal to the current number of with-patterns plus the
             -- number of with arguments.
-            subClause (FunClause (LHS _ ps' _) _ _)      = length ps' >= length ps + length es
-            subClause (FunClause (Ellipsis _ ps' _) _ _) = True
+            subClause (FunClause (LHS _ ps' _ _) _ _)      =
+              length ps' >= length ps + length es
+            subClause (FunClause (Ellipsis _ ps' _ _) _ _) = True
             subClause _                                  = __IMPOSSIBLE__
-        mkClauses x (FunClause lhs@(Ellipsis _ _ _) rhs wh : cs) =
+        mkClauses x (FunClause lhs@Ellipsis{} rhs wh : cs) =
           (Clause x lhs rhs wh [] :) <$> mkClauses x cs   -- Will result in an error later.
         mkClauses _ _ = __IMPOSSIBLE__
 
 	noSingletonRawAppP (RawAppP _ [p]) = noSingletonRawAppP p
 	noSingletonRawAppP p		   = p
 
-        isFunClauseOf x (FunClause (Ellipsis _ _ _) _ _) = True
-	isFunClauseOf x (FunClause (LHS p _ _) _ _) = case noSingletonRawAppP p of
+        isFunClauseOf x (FunClause Ellipsis{} _ _) = True
+	isFunClauseOf x (FunClause (LHS p _ _ _) _ _) = case noSingletonRawAppP p of
 	    IdentP (QName q)	-> x == q
 	    _			-> True
 		-- more complicated lhss must come with type signatures, so we just assume
@@ -389,7 +393,7 @@
 	mkAbstract d =
 	    case d of
 		Axiom r f a _ x e		    -> Axiom r f a AbstractDef x e
-		NiceField r f a _ x e		    -> NiceField r f a AbstractDef x e
+		NiceField r f a _ h x e		    -> NiceField r f a AbstractDef h x e
 		PrimitiveFunction r f a _ x e	    -> PrimitiveFunction r f a AbstractDef x e
 		NiceDef r cs ts ds		    -> NiceDef r cs (map mkAbstract ts)
 								 (map mkAbstractDef ds)
@@ -404,7 +408,7 @@
 		FunDef r ds f a _ x cs      -> FunDef r ds f a AbstractDef x
 						  (map mkAbstractClause cs)
 		DataDef r ind f a _ x ps cs -> DataDef r ind f a AbstractDef x ps $ map mkAbstract cs
-		RecDef r f a _ x ps cs      -> RecDef r f a AbstractDef x ps $ map mkAbstract cs
+		RecDef r f a _ x c ps cs    -> RecDef r f a AbstractDef x (mkAbstract <$> c) ps $ map mkAbstract cs
 
 	mkAbstractClause (Clause x lhs rhs wh with) =
 	    Clause x lhs rhs (mkAbstractWhere wh) (map mkAbstractClause with)
@@ -417,7 +421,7 @@
 	mkPrivate d =
 	    case d of
 		Axiom r f _ a x e		    -> Axiom r f PrivateAccess a x e
-		NiceField r f _ a x e		    -> NiceField r f PrivateAccess a x e
+		NiceField r f _ a h x e		    -> NiceField r f PrivateAccess a h x e
 		PrimitiveFunction r f _ a x e	    -> PrimitiveFunction r f PrivateAccess a x e
 		NiceDef r cs ts ds		    -> NiceDef r cs (map mkPrivate ts)
 								    (map mkPrivateDef ds)
@@ -432,7 +436,7 @@
 		FunDef r ds f _ a x cs      -> FunDef r ds f PrivateAccess a x
 						  (map mkPrivateClause cs)
 		DataDef r ind f _ a x ps cs -> DataDef r ind f PrivateAccess a x ps (map mkPrivate cs)
-		RecDef r f _ a x ps cs      -> RecDef r f PrivateAccess a x ps cs
+		RecDef r f _ a x c ps cs    -> RecDef r f PrivateAccess a x (mkPrivate <$> c) ps cs
 
 	mkPrivateClause (Clause x lhs rhs wh with) =
 	    Clause x lhs rhs (mkPrivateWhere wh) (map mkPrivateClause with)
@@ -466,7 +470,7 @@
 notSoNiceDeclarations = concatMap notNice
   where
     notNice (Axiom _ _ _ _ x e)                   = [TypeSig x e]
-    notNice (NiceField _ _ _ _ x e)               = [Field x e]
+    notNice (NiceField _ _ _ _ h x e)             = [Field h x e]
     notNice (PrimitiveFunction r _ _ _ x e)       = [Primitive r [TypeSig x e]]
     notNice (NiceDef _ ds _ _)                    = ds
     notNice (NiceModule r _ _ x tel ds)           = [Module r x tel ds]
diff --git a/src/full/Agda/Syntax/Concrete/Name.hs b/src/full/Agda/Syntax/Concrete/Name.hs
--- a/src/full/Agda/Syntax/Concrete/Name.hs
+++ b/src/full/Agda/Syntax/Concrete/Name.hs
@@ -5,13 +5,20 @@
 -}
 module Agda.Syntax.Concrete.Name where
 
+import Control.Applicative
+
+import Data.List
 import Data.Maybe
 import Data.Generics (Typeable, Data)
 
+import System.FilePath
+
+import Test.QuickCheck
+
 import Agda.Syntax.Common
 import Agda.Syntax.Position
 import Agda.Utils.FileName
-import Agda.Utils.TestHelpers
+import Agda.Utils.Pretty
 
 #include "../../undefined.h"
 import Agda.Utils.Impossible
@@ -115,6 +122,43 @@
            | QName Name
   deriving (Typeable, Data, Eq, Ord)
 
+-- | Top-level module names.
+--
+-- Invariant: The list must not be empty.
+
+newtype TopLevelModuleName
+  = TopLevelModuleName { moduleNameParts :: [String] }
+  deriving (Show, Eq, Ord, Typeable, Data)
+
+-- | Turns a qualified name into a 'TopLevelModuleName'. The qualified
+-- name is assumed to represent a top-level module name.
+
+toTopLevelModuleName :: QName -> TopLevelModuleName
+toTopLevelModuleName = TopLevelModuleName . map show . qnameParts
+
+-- | Turns a top-level module name into a file name with the given
+-- suffix.
+
+moduleNameToFileName :: TopLevelModuleName -> String -> FilePath
+moduleNameToFileName (TopLevelModuleName []) ext = __IMPOSSIBLE__
+moduleNameToFileName (TopLevelModuleName ms) ext =
+  joinPath (init ms) </> last ms <.> ext
+
+-- | Finds the current project's \"root\" directory, given a project
+-- file and the corresponding top-level module name.
+--
+-- Example: If the module \"A.B.C\" is located in the file
+-- \"/foo/A/B/C.agda\", then the root is \"/foo/\".
+--
+-- Precondition: The module name must be well-formed.
+
+projectRoot :: AbsolutePath -> TopLevelModuleName -> AbsolutePath
+projectRoot file (TopLevelModuleName m) =
+  mkAbsolute $
+  foldr (.) id (replicate (length m - 1) takeDirectory) $
+  takeDirectory $
+  filePath file
+
 isHole :: NamePart -> Bool
 isHole Hole = True
 isHole _    = False
@@ -125,14 +169,6 @@
 isInfix   x =      isHole (head xs)  &&      isHole (last xs)  where xs = nameParts x
 isNonfix  x = not (isHole (head xs)) && not (isHole (last xs)) where xs = nameParts x
 
-type Suffix = String
-
--- | Turns a module name into a file name with the given suffix.
-
-moduleNameToFileName :: QName -> Suffix -> FilePath
-moduleNameToFileName (QName  x) ext = show x ++ ext
-moduleNameToFileName (Qual m x) ext = show m ++ [slash] ++ moduleNameToFileName x ext
-
 instance Show Name where
     show (Name _ xs)  = concatMap show xs
     show (NoName _ _) = "_"
@@ -145,6 +181,15 @@
     show (Qual m x) = show m ++ "." ++ show x
     show (QName x)  = show x
 
+instance Pretty TopLevelModuleName where
+  pretty (TopLevelModuleName ms) = text $ intercalate "." ms
+
+instance Arbitrary TopLevelModuleName where
+  arbitrary = TopLevelModuleName <$> listOf1 (listOf1 $ elements "AB")
+
+instance CoArbitrary TopLevelModuleName where
+  coarbitrary (TopLevelModuleName m) = coarbitrary m
+
 instance HasRange Name where
     getRange (Name r ps)  = r
     getRange (NoName r _) = r
@@ -164,4 +209,3 @@
 instance KillRange Name where
   killRange (Name r ps)  = Name (killRange r) ps
   killRange (NoName r i) = NoName (killRange r) i
-
diff --git a/src/full/Agda/Syntax/Concrete/Pretty.hs b/src/full/Agda/Syntax/Concrete/Pretty.hs
--- a/src/full/Agda/Syntax/Concrete/Pretty.hs
+++ b/src/full/Agda/Syntax/Concrete/Pretty.hs
@@ -13,6 +13,7 @@
 import Agda.Syntax.Literal
 
 import Agda.Utils.Pretty
+import Agda.Utils.String
 
 #include "../../undefined.h"
 import Agda.Utils.Impossible
@@ -40,6 +41,7 @@
     pretty = text . show
 
 instance Pretty Literal where
+    pretty (LitLevel _ n)   = __IMPOSSIBLE__
     pretty (LitInt _ n)	    = text $ show n
     pretty (LitFloat _ x)   = text $ show x
     pretty (LitString _ s)  = text $ showString' s ""
@@ -104,7 +106,7 @@
 		    ]
 	    Set _   -> text "Set"
 	    Prop _  -> text "Prop"
-	    SetN _ n	-> text "Set" <> text (show n)
+	    SetN _ n	-> text "Set" <> text (showIndex n)
 	    Let _ ds e	->
 		sep [ text "let" <+> vcat (map pretty ds)
 		    , text "in" <+> pretty e
@@ -160,17 +162,18 @@
 
 instance Pretty LHS where
   pretty lhs = case lhs of
-    LHS p ps es  -> pr (pretty p) ps es
-    Ellipsis _ ps es -> pr (text "...") ps es
+    LHS p ps eqs es  -> pr (pretty p) ps eqs es
+    Ellipsis _ ps eqs es -> pr (text "...") ps eqs es
     where
-      pr d ps es =
+      pr d ps eqs es =
         sep [ d
             , nest 2 $ fsep $ map ((text "|" <+>) . pretty) ps
-            , nest 2 $ pWith es
+            , nest 2 $ pThing "rewrite" eqs
+            , nest 2 $ pThing "with" es
             ]
-      pWith []	     = empty
-      pWith (e : es) = fsep $ (text "with" <+> pretty e)
-			    : map ((text "|" <+>) . pretty) es
+      pThing thing []       = empty
+      pThing thing (e : es) = fsep $ (text thing <+> pretty e)
+			           : map ((text "|" <+>) . pretty) es
 
 instance Pretty [Declaration] where
   pretty = vcat . map pretty
@@ -181,7 +184,9 @@
 	    TypeSig x e	-> sep [ pretty x <+> text ":"
 			       , nest 2 $ pretty e
 			       ]
-            Field x e -> sep [ text "field", nest 2 $ pretty (TypeSig x e) ]
+            Field h x e -> sep [ text "field"
+                               , nest 2 $ pHidden h (TypeSig x e)
+                               ]
 	    FunClause lhs rhs wh ->
 		sep [ pretty lhs
 		    , nest 2 $ pretty rhs
@@ -197,7 +202,7 @@
 			    , text "where"
 			    ]
 		    ] $$ nest 2 (vcat $ map pretty cs)
-	    Record _ x tel e cs ->
+	    Record _ x con tel e cs ->
 		sep [ hsep  [ text "record"
 			    , pretty x
 			    , fcat (map pretty tel)
@@ -207,7 +212,9 @@
 			    , pretty e
 			    , text "where"
 			    ]
-		    ] $$ nest 2 (vcat $ map pretty cs)
+		    ] $$ nest 2 (vcat $ maybe [] (\c -> [text "constructor" <+> pretty c])
+                                              con ++
+                                        map pretty cs)
 	    Infix f xs	->
 		pretty f <+> (fsep $ punctuate comma $ map pretty xs)
 
@@ -246,7 +253,6 @@
 instance Pretty Pragma where
     pretty (OptionsPragma _ opts) = fsep $ map text $ "OPTIONS" : opts
     pretty (BuiltinPragma _ b x)  = hsep [ text "BUILTIN", text b, pretty x ]
-    pretty (LinePragma _ n f)	  = hsep [ text "LINE", text (show n), text (show f) ]
     pretty (CompiledPragma _ x hs) =
       hsep [ text "COMPILED", pretty x, text hs ]
     pretty (CompiledTypePragma _ x hs) =
@@ -255,6 +261,8 @@
       hsep $ [text "COMPILED_DATA", pretty x] ++ map text (hs : hcs)
     pretty (ImportPragma _ i) =
       hsep $ [text "IMPORT", text i]
+    pretty (ImpossiblePragma _) =
+      hsep $ [text "IMPOSSIBLE"]
 
 instance Pretty Fixity where
     pretty (LeftAssoc _ n)  = text "infixl" <+> text (show n)
diff --git a/src/full/Agda/Syntax/Info.hs b/src/full/Agda/Syntax/Info.hs
--- a/src/full/Agda/Syntax/Info.hs
+++ b/src/full/Agda/Syntax/Info.hs
@@ -8,6 +8,8 @@
 module Agda.Syntax.Info where
 
 import Data.Generics(Data,Typeable)
+import Text.Show.Functions
+
 import qualified Agda.Syntax.Concrete.Name as C
 import Agda.Syntax.Common
 import Agda.Syntax.Position
@@ -30,7 +32,7 @@
 		 , metaScope	:: ScopeInfo
 		 , metaNumber	:: Maybe Nat
 		 }
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 instance HasRange MetaInfo where
   getRange = metaRange
@@ -49,7 +51,7 @@
 	| ExprSource Range (Precedence -> Expr)
 	    -- ^ Even if we store the original expression we have to know
 	    --	 whether to put parenthesis around it.
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 instance HasRange ExprInfo where
   getRange (ExprRange  r  ) = r
@@ -72,7 +74,7 @@
                      -- The \"as\" module name, if any. Retained for
                      -- highlighting purposes.
 		   }
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 instance HasRange ModuleInfo where
   getRange = minfoRange
@@ -85,7 +87,7 @@
 ---------------------------------------------------------------------------
 
 newtype LetInfo = LetRange Range
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 instance HasRange LetInfo where
   getRange (LetRange r)   = r
@@ -103,7 +105,7 @@
 		, defAbstract :: IsAbstract
 		, defInfo     :: DeclInfo
 		}
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 mkDefInfo :: Name -> Fixity -> Access -> IsAbstract -> Range -> DefInfo
 mkDefInfo x f a ab r = DefInfo f a ab (DeclInfo x r)
@@ -122,7 +124,7 @@
 	DeclInfo { declName  :: Name
 		 , declRange :: Range
 		 }
-  deriving (Eq, Typeable, Data)
+  deriving (Eq, Typeable, Data, Show)
 
 instance HasRange DeclInfo where
   getRange = declRange
@@ -135,7 +137,7 @@
  --------------------------------------------------------------------------}
 
 newtype LHSInfo = LHSRange Range
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 instance HasRange LHSInfo where
   getRange (LHSRange r) = r
@@ -153,6 +155,10 @@
 data PatInfo = PatRange Range
 	     | PatSource Range (Precedence -> Pattern)
   deriving (Typeable, Data)
+
+instance Show PatInfo where
+  show (PatRange r) = "PatRange " ++ show r
+  show (PatSource r _) = "PatSource " ++ show r
 
 instance HasRange PatInfo where
   getRange (PatRange r)    = r
diff --git a/src/full/Agda/Syntax/Internal.hs b/src/full/Agda/Syntax/Internal.hs
--- a/src/full/Agda/Syntax/Internal.hs
+++ b/src/full/Agda/Syntax/Internal.hs
@@ -10,6 +10,7 @@
 import Data.Generics
 import Data.Foldable
 import Data.Traversable
+import Data.Function
 
 import Agda.Syntax.Position
 import Agda.Syntax.Common
@@ -39,22 +40,27 @@
 	  | Fun (Arg Type) Type
 	  | Sort Sort
 	  | MetaV MetaId Args
-  deriving (Typeable, Data, Eq, Show)
+  deriving (Typeable, Data, Eq, Ord, Show)
 
 data Type = El Sort Term
-  deriving (Typeable, Data, Eq, Show)
+  deriving (Typeable, Data, Eq, Ord, Show)
 
-data Sort = Type Nat
+data Sort = Type Term   -- A term of type Nat
 	  | Prop
 	  | Lub Sort Sort
 	  | Suc Sort
-	  | MetaS MetaId
-  deriving (Typeable, Data, Eq, Show)
+	  | MetaS MetaId Args
+          | Inf
+          | DLub Sort (Abs Sort)
+            -- ^ if the free variable occurs in the second sort
+            --   the whole thing should reduce to Inf, otherwise
+            --   it's the normal Lub
+  deriving (Typeable, Data, Eq, Ord, Show)
 
 -- | Something where a meta variable may block reduction.
 data Blocked t = Blocked MetaId t
                | NotBlocked t
-    deriving (Typeable, Data, Eq)
+    deriving (Typeable, Data, Eq, Ord)
 
 instance Show t => Show (Blocked t) where
   showsPrec p (Blocked m x) = showParen (p > 0) $
@@ -109,7 +115,14 @@
   killRange (El s v) = killRange2 El s v
 
 instance KillRange Sort where
-  killRange = id
+  killRange s = case s of
+    Prop       -> Prop
+    Inf        -> Inf
+    Type a     -> killRange1 Type a
+    Suc s      -> killRange1 Suc s
+    Lub s1 s2  -> killRange2 Lub s1 s2
+    DLub s1 s2 -> killRange2 DLub s1 s2
+    MetaS x as -> killRange1 (MetaS x) as
 
 instance KillRange Telescope where
   killRange EmptyTel = EmptyTel
@@ -129,7 +142,7 @@
 --   and so on.
 data Telescope = EmptyTel
 	       | ExtendTel (Arg Type) (Abs Telescope)
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Typeable, Data, Show, Eq, Ord)
 
 instance Sized Telescope where
   size  EmptyTel	 = 0
@@ -139,8 +152,14 @@
 data Abs a = Abs { absName :: String
 		 , absBody :: a
 		 }
-  deriving (Typeable, Data, Eq)
+  deriving (Typeable, Data)
 
+instance Eq a => Eq (Abs a) where
+  (==) = (==) `on` absBody
+
+instance Ord a => Ord (Abs a) where
+  compare = compare `on` absBody
+
 instance Show a => Show (Abs a) where
   showsPrec p (Abs x a) = showParen (p > 0) $
     showString "Abs " . shows x . showString " " . showsPrec 10 a
@@ -261,11 +280,13 @@
 ignoreBlocking (Blocked _ x) = x
 ignoreBlocking (NotBlocked x) = x
 
-set0   = sort (Type 0)
-set n  = sort (Type n)
+set0   = set 0
+set n  = sort $ mkType n
 prop   = sort Prop
 sort s = El (sSuc s) $ Sort s
 
+mkType n = Type $ Lit $ LitLevel noRange n
+
 teleLam :: Telescope -> Term -> Term
 teleLam  EmptyTel	  t = t
 teleLam (ExtendTel u tel) t = Lam (argHiding u) $ flip teleLam t <$> tel
@@ -278,17 +299,32 @@
 
 -- | Get the next higher sort.
 sSuc :: Sort -> Sort
-sSuc Prop	 = Type 1
-sSuc (Type n)	 = Type (n + 1)
-sSuc (Lub s1 s2) = sSuc s1 `sLub` sSuc s2
-sSuc s		 = Suc s
+sSuc Prop                      = mkType 1
+sSuc (Type (Lit (LitLevel _ n))) = mkType (n + 1)
+sSuc Inf                       = Inf
+sSuc s                         = Suc s
 
 sLub :: Sort -> Sort -> Sort
-sLub (Type 0) Prop     = Prop   -- (x:A) -> B prop if A type0, B prop [x:A]
-sLub (Type n) Prop     = Type n
-sLub Prop (Type n)     = Type n
-sLub (Type n) (Type m) = Type $ max n m
+sLub (Type (Lit (LitLevel _ 0))) Prop                      = Prop   -- (x:A) -> B prop if A type0, B prop [x:A]
+sLub (Type (Lit (LitLevel _ n))) Prop                      = mkType n
+sLub Prop (Type (Lit (LitLevel _ n)))                      = mkType n
+sLub (Type (Lit (LitLevel _ n))) (Type (Lit (LitLevel _ m))) = mkType $ max n m
+sLub (Suc a) (Suc b) = Suc (sLub a b)
+sLub (Type (Lit (LitLevel _ n))) (Suc a)
+  | n > 0     = sSuc (mkType (n - 1) `sLub` a)
+  | otherwise = Suc a
+sLub (Suc a) (Type (Lit (LitLevel _ n)))
+  | n > 0     = sSuc (a `sLub` mkType (n - 1))
+  | otherwise = Suc a
+sLub Inf _ = Inf
+sLub _ Inf = Inf
 sLub s1 s2
     | s1 == s2	= s1
     | otherwise	= Lub s1 s2
+
+impossibleTerm :: String -> Int -> Term
+impossibleTerm file line = Lit $ LitString noRange $ unlines
+  [ "An internal error has occurred. Please report this as a bug."
+  , "Location of the error: " ++ file ++ ":" ++ show line
+  ]
 
diff --git a/src/full/Agda/Syntax/Literal.hs b/src/full/Agda/Syntax/Literal.hs
--- a/src/full/Agda/Syntax/Literal.hs
+++ b/src/full/Agda/Syntax/Literal.hs
@@ -6,31 +6,51 @@
 import Agda.Syntax.Position
 
 data Literal = LitInt    Range Integer
+             | LitLevel  Range Integer
 	     | LitFloat  Range Double
 	     | LitString Range String
 	     | LitChar   Range Char
   deriving (Typeable, Data, Show)
 
 instance Eq Literal where
+  LitLevel _ n  == LitLevel _ m  = n == m
   LitInt _ n    == LitInt _ m    = n == m
   LitFloat _ x  == LitFloat _ y  = x == y
   LitString _ s == LitString _ t = s == t
   LitChar _ c   == LitChar _ d   = c == d
   _             == _             = False
 
+instance Ord Literal where
+  LitLevel _ n  `compare` LitLevel _ m  = n `compare` m
+  LitInt _ n    `compare` LitInt _ m    = n `compare` m
+  LitFloat _ x  `compare` LitFloat _ y  = x `compare` y
+  LitString _ s `compare` LitString _ t = s `compare` t
+  LitChar _ c   `compare` LitChar _ d   = c `compare` d
+  compare LitLevel{}    _ = LT
+  compare _ LitLevel{} = GT
+  compare LitInt{}    _ = LT
+  compare _ LitInt{} = GT
+  compare LitFloat{}  _ = LT
+  compare _ LitFloat{} = GT
+  compare LitString{} _ = LT
+  compare _ LitString{} = GT
+
 instance HasRange Literal where
-  getRange (LitInt    r _)	= r
-  getRange (LitFloat  r _)	= r
-  getRange (LitString r _)	= r
-  getRange (LitChar   r _)	= r
+  getRange (LitLevel  r _) = r
+  getRange (LitInt    r _) = r
+  getRange (LitFloat  r _) = r
+  getRange (LitString r _) = r
+  getRange (LitChar   r _) = r
 
 instance SetRange Literal where
-  setRange r (LitInt    _ x)	= LitInt    r x
-  setRange r (LitFloat  _ x)	= LitFloat  r x
-  setRange r (LitString _ x)	= LitString r x
-  setRange r (LitChar   _ x)	= LitChar   r x
+  setRange r (LitLevel  _ x) = LitLevel  r x
+  setRange r (LitInt    _ x) = LitInt    r x
+  setRange r (LitFloat  _ x) = LitFloat  r x
+  setRange r (LitString _ x) = LitString r x
+  setRange r (LitChar   _ x) = LitChar   r x
 
 instance KillRange Literal where
+  killRange (LitLevel  r x) = LitLevel  (killRange r) x
   killRange (LitInt    r x) = LitInt    (killRange r) x
   killRange (LitFloat  r x) = LitFloat  (killRange r) x
   killRange (LitString r x) = LitString (killRange r) x
diff --git a/src/full/Agda/Syntax/Parser.hs b/src/full/Agda/Syntax/Parser.hs
--- a/src/full/Agda/Syntax/Parser.hs
+++ b/src/full/Agda/Syntax/Parser.hs
@@ -15,7 +15,7 @@
     , ParseError(..)
     ) where
 
-import Control.OldException
+import Control.Exception
 import Data.List
 import System.Directory
 
@@ -28,19 +28,21 @@
 import Agda.Syntax.Concrete
 import Agda.Syntax.Parser.Tokens
 
+import Agda.Utils.FileName
+
 ------------------------------------------------------------------------
 -- Wrapping parse results
 
 wrap :: Strict a => ParseResult a -> a
 wrap (ParseOk _ x)	= x
-wrap (ParseFailed err)	= throwDyn err
+wrap (ParseFailed err)	= throw err
 
 wrapM:: (Strict a, Monad m) => m (ParseResult a) -> m a
 wrapM m =
     do	r <- m
 	case r of
 	    ParseOk _ x	    -> return x
-	    ParseFailed err -> throwDyn err
+	    ParseFailed err -> throw err
 
 ------------------------------------------------------------------------
 -- Parse functions
@@ -55,14 +57,14 @@
 parse :: Strict a => Parser a -> String -> IO a
 parse p = wrapM . return . M.parse (parseFlags p) [normal] (parser p)
 
-parseFile :: Strict a => Parser a -> FilePath -> IO a
+parseFile :: Strict a => Parser a -> AbsolutePath -> IO a
 parseFile p = wrapM . M.parseFile (parseFlags p) [normal] (parser p)
 
 parseLiterate :: Strict a => Parser a -> String -> IO a
 parseLiterate p =
   wrapM . return . M.parse (parseFlags p) [literate, code] (parser p)
 
-parseLiterateFile :: Strict a => Parser a -> FilePath -> IO a
+parseLiterateFile :: Strict a => Parser a -> AbsolutePath -> IO a
 parseLiterateFile p =
   wrapM . M.parseFile (parseFlags p) [literate, code] (parser p)
 
@@ -70,9 +72,9 @@
 parsePosString p pos =
   wrapM . return . M.parsePosString pos (parseFlags p) [normal] (parser p)
 
-parseFile' :: Strict a => Parser a -> FilePath -> IO a
+parseFile' :: Strict a => Parser a -> AbsolutePath -> IO a
 parseFile' p file =
-  if "lagda" `isSuffixOf` file then
+  if "lagda" `isSuffixOf` filePath file then
     Agda.Syntax.Parser.parseLiterateFile p file
    else
     Agda.Syntax.Parser.parseFile p file
@@ -82,7 +84,7 @@
 
 -- | Parses a module.
 
-moduleParser :: Parser ([Pragma], [Declaration])
+moduleParser :: Parser Module
 moduleParser = Parser { parser = P.moduleParser
                       , parseFlags = withoutComments }
 
diff --git a/src/full/Agda/Syntax/Parser/LexActions.hs b/src/full/Agda/Syntax/Parser/LexActions.hs
--- a/src/full/Agda/Syntax/Parser/LexActions.hs
+++ b/src/full/Agda/Syntax/Parser/LexActions.hs
@@ -64,9 +64,13 @@
         flags <- getParseFlags
 	case alexScanUser (lss, flags) (foolAlex inp) ls of
 	    AlexEOF			-> returnEOF inp
-	    AlexError _			-> parseError "Lexical error"
 	    AlexSkip inp' len		-> skipTo (newInput inp inp' len)
 	    AlexToken inp' len action	-> fmap postToken $ action inp (newInput inp inp' len) len
+	    AlexError i			-> parseError $ "Lexical error" ++
+              (case lexInput i of
+                 '\t' : _ -> " (you may want to replace tabs with spaces)"
+                 _        -> "") ++
+              ":"
 
 postToken :: Token -> Token
 postToken (TokId (r, "\x03bb")) = TokSymbol SymLambda r
diff --git a/src/full/Agda/Syntax/Parser/Lexer.x b/src/full/Agda/Syntax/Parser/Lexer.x
--- a/src/full/Agda/Syntax/Parser/Lexer.x
+++ b/src/full/Agda/Syntax/Parser/Lexer.x
@@ -37,8 +37,8 @@
 $endcomment  = ~ [ $idchar ]
 $nonalpha    = $idchar # $alpha
 $nonalphanum = $nonalpha # $digit
-
-$white_nonl  = $white # \n
+$white_notab = $white # \t
+$white_nonl  = $white_notab # \n
 
 @number	     = $digit+ | "0x" $hexdigit+
 @exponent    = [eE] [\-\+]? @number
@@ -67,7 +67,7 @@
 <0,code,bol_,layout_,empty_layout_,imp_dir_>
     $white_nonl+    ;
 
-<pragma_> $white ;
+<pragma_> $white_notab ;
 
 -- Pragmas
 <0,code>    "{-#"		{ begin pragma }
@@ -79,6 +79,7 @@
 <pragma_>   "COMPILED_TYPE"	{ keyword KwCOMPILED_TYPE }
 <pragma_>   "COMPILED"	        { keyword KwCOMPILED }
 <pragma_>   "IMPORT"	        { keyword KwIMPORT }
+<pragma_>   "IMPOSSIBLE"	{ keyword KwIMPOSSIBLE }
 <pragma_>   "LINE"		{ keyword KwLINE }
 <pragma_>   . # [ $white ] +    { withInterval $ TokString }
 
@@ -124,6 +125,7 @@
 <0,code> where		{ keyword KwWhere }
 <0,code> field		{ keyword KwField }
 <0,code> with           { keyword KwWith }
+<0,code> rewrite        { keyword KwRewrite }
 <0,code> postulate	{ keyword KwPostulate }
 <0,code> primitive	{ keyword KwPrimitive }
 <0,code> open		{ keyword KwOpen }
@@ -132,6 +134,7 @@
 <0,code> data		{ keyword KwData }
 <0,code> codata		{ keyword KwCoData }
 <0,code> record		{ keyword KwRecord }
+<0,code> constructor    { keyword KwConstructor }
 <0,code> infix		{ keyword KwInfix }
 <0,code> infixl		{ keyword KwInfixL }
 <0,code> infixr		{ keyword KwInfixR }
diff --git a/src/full/Agda/Syntax/Parser/Monad.hs b/src/full/Agda/Syntax/Parser/Monad.hs
--- a/src/full/Agda/Syntax/Parser/Monad.hs
+++ b/src/full/Agda/Syntax/Parser/Monad.hs
@@ -28,6 +28,7 @@
     )
     where
 
+import Control.Exception
 import Data.Char
 import Data.Typeable
 
@@ -35,10 +36,10 @@
 import Control.Monad.Error
 import Control.Applicative
 
-import qualified Agda.Utils.IO as UTF8
-
 import Agda.Syntax.Position
 
+import Agda.Utils.FileName
+import qualified Agda.Utils.IO.UTF8 as UTF8
 import Agda.Utils.Monad
 
 {--------------------------------------------------------------------------
@@ -95,6 +96,8 @@
 		    }
     deriving (Typeable)
 
+instance Exception ParseError
+
 -- | The result of parsing something.
 data ParseResult a  = ParseOk ParseState a
 		    | ParseFailed ParseError
@@ -173,7 +176,8 @@
 -- | Constructs the initial state of the parser. The string argument
 --   is the input string, the file path is only there because it's part
 --   of a position.
-initState :: FilePath -> ParseFlags -> String -> [LexState] -> ParseState
+initState :: Maybe AbsolutePath -> ParseFlags -> String -> [LexState]
+          -> ParseState
 initState file = initStatePos (startPos file)
 
 -- | The default flags.
@@ -184,7 +188,7 @@
 --   more specialised functions that supply the 'ParseFlags' and the
 --   'LexState'.
 parse :: ParseFlags -> [LexState] -> Parser a -> String -> ParseResult a
-parse flags st p input = unP p (initState "" flags input st)
+parse flags st p input = unP p (initState Nothing flags input st)
 
 -- | The even more general way of parsing a string.
 parsePosString :: Position -> ParseFlags -> [LexState] -> Parser a -> String ->
@@ -194,10 +198,14 @@
 -- | The most general way of parsing a file. The "Agda.Syntax.Parser" will define
 --   more specialised functions that supply the 'ParseFlags' and the
 --   'LexState'.
-parseFile :: ParseFlags -> [LexState] -> Parser a -> FilePath -> IO (ParseResult a)
+--
+--   Note that Agda source files always use the UTF-8 character
+--   encoding.
+parseFile :: ParseFlags -> [LexState] -> Parser a -> AbsolutePath
+          -> IO (ParseResult a)
 parseFile flags st p file =
-    do	input <- liftIO $ UTF8.readTextFile file
-	return $ unP p (initState file flags input st)
+    do	input <- liftIO $ UTF8.readTextFile $ filePath file
+	return $ unP p (initState (Just file) flags input st)
 
 {--------------------------------------------------------------------------
     Manipulating the state
diff --git a/src/full/Agda/Syntax/Parser/Parser.y b/src/full/Agda/Syntax/Parser/Parser.y
--- a/src/full/Agda/Syntax/Parser/Parser.y
+++ b/src/full/Agda/Syntax/Parser/Parser.y
@@ -6,16 +6,18 @@
       moduleParser
     , exprParser
     , tokensParser
+    , tests
     ) where
 
+import Control.Arrow
 import Control.Monad
 import Control.Monad.State
-import Data.Char  (isDigit)
+import Data.Char
 import Data.List
 import Data.Maybe
 import qualified Data.Traversable as T
 
-import Agda.Syntax.Position
+import Agda.Syntax.Position hiding (tests)
 import Agda.Syntax.Parser.Monad
 import Agda.Syntax.Parser.Lexer
 import Agda.Syntax.Parser.Tokens
@@ -27,6 +29,8 @@
 import Agda.Syntax.Literal
 
 import Agda.Utils.Monad
+import Agda.Utils.QuickCheck
+import Agda.Utils.TestHelpers
 
 }
 
@@ -44,40 +48,42 @@
 %nonassoc '->'
 
 %token
-    'let'	{ TokKeyword KwLet $$ }
-    'in'	{ TokKeyword KwIn $$ }
-    'where'	{ TokKeyword KwWhere $$ }
-    'with'	{ TokKeyword KwWith $$ }
-    'postulate' { TokKeyword KwPostulate $$ }
-    'primitive' { TokKeyword KwPrimitive $$ }
-    'open'	{ TokKeyword KwOpen $$ }
-    'import'	{ TokKeyword KwImport $$ }
-    'using'	{ TokKeyword KwUsing $$ }
-    'hiding'	{ TokKeyword KwHiding $$ }
-    'renaming'	{ TokKeyword KwRenaming $$ }
-    'to'	{ TokKeyword KwTo $$ }
-    'public'	{ TokKeyword KwPublic $$ }
-    'module'	{ TokKeyword KwModule $$ }
-    'data'	{ TokKeyword KwData $$ }
-    'codata'	{ TokKeyword KwCoData $$ }
-    'record'	{ TokKeyword KwRecord $$ }
-    'field'	{ TokKeyword KwField $$ }
-    'infix'	{ TokKeyword KwInfix $$ }
-    'infixl'	{ TokKeyword KwInfixL $$ }
-    'infixr'	{ TokKeyword KwInfixR $$ }
-    'mutual'	{ TokKeyword KwMutual $$ }
-    'abstract'	{ TokKeyword KwAbstract $$ }
-    'private'	{ TokKeyword KwPrivate $$ }
-    'Prop'	{ TokKeyword KwProp $$ }
-    'Set'	{ TokKeyword KwSet $$ }
-    'forall'	{ TokKeyword KwForall $$ }
-    'OPTIONS'	{ TokKeyword KwOPTIONS $$ }
-    'BUILTIN'	{ TokKeyword KwBUILTIN $$ }
-    'IMPORT'	{ TokKeyword KwIMPORT $$ }
-    'COMPILED'	{ TokKeyword KwCOMPILED $$ }
+    'let'           { TokKeyword KwLet $$ }
+    'in'            { TokKeyword KwIn $$ }
+    'where'         { TokKeyword KwWhere $$ }
+    'with'          { TokKeyword KwWith $$ }
+    'rewrite'       { TokKeyword KwRewrite $$ }
+    'postulate'     { TokKeyword KwPostulate $$ }
+    'primitive'     { TokKeyword KwPrimitive $$ }
+    'open'          { TokKeyword KwOpen $$ }
+    'import'        { TokKeyword KwImport $$ }
+    'using'         { TokKeyword KwUsing $$ }
+    'hiding'        { TokKeyword KwHiding $$ }
+    'renaming'      { TokKeyword KwRenaming $$ }
+    'to'            { TokKeyword KwTo $$ }
+    'public'        { TokKeyword KwPublic $$ }
+    'module'        { TokKeyword KwModule $$ }
+    'data'          { TokKeyword KwData $$ }
+    'codata'        { TokKeyword KwCoData $$ }
+    'record'        { TokKeyword KwRecord $$ }
+    'constructor'   { TokKeyword KwConstructor $$ }
+    'field'         { TokKeyword KwField $$ }
+    'infix'         { TokKeyword KwInfix $$ }
+    'infixl'        { TokKeyword KwInfixL $$ }
+    'infixr'        { TokKeyword KwInfixR $$ }
+    'mutual'        { TokKeyword KwMutual $$ }
+    'abstract'      { TokKeyword KwAbstract $$ }
+    'private'       { TokKeyword KwPrivate $$ }
+    'Prop'          { TokKeyword KwProp $$ }
+    'Set'           { TokKeyword KwSet $$ }
+    'forall'        { TokKeyword KwForall $$ }
+    'OPTIONS'       { TokKeyword KwOPTIONS $$ }
+    'BUILTIN'       { TokKeyword KwBUILTIN $$ }
+    'IMPORT'        { TokKeyword KwIMPORT $$ }
+    'IMPOSSIBLE'    { TokKeyword KwIMPOSSIBLE $$ }
+    'COMPILED'      { TokKeyword KwCOMPILED $$ }
     'COMPILED_DATA' { TokKeyword KwCOMPILED_DATA $$ }
     'COMPILED_TYPE' { TokKeyword KwCOMPILED_TYPE $$ }
-    'LINE'	{ TokKeyword KwLINE $$ }
 
     setN	{ TokSetN $$ }
     tex		{ TokTeX $$ }
@@ -133,6 +139,7 @@
     | 'in'	    { TokKeyword KwIn $1 }
     | 'where'	    { TokKeyword KwWhere $1 }
     | 'with'	    { TokKeyword KwWith $1 }
+    | 'rewrite'	    { TokKeyword KwRewrite $1 }
     | 'postulate'   { TokKeyword KwPostulate $1 }
     | 'primitive'   { TokKeyword KwPrimitive $1 }
     | 'open'	    { TokKeyword KwOpen $1 }
@@ -146,6 +153,7 @@
     | 'data'	    { TokKeyword KwData $1 }
     | 'codata'	    { TokKeyword KwCoData $1 }
     | 'record'	    { TokKeyword KwRecord $1 }
+    | 'constructor' { TokKeyword KwConstructor $1 }
     | 'field'       { TokKeyword KwField $1 }
     | 'infix'	    { TokKeyword KwInfix $1 }
     | 'infixl'	    { TokKeyword KwInfixL $1 }
@@ -162,7 +170,6 @@
     | 'COMPILED'    { TokKeyword KwCOMPILED $1 }
     | 'COMPILED_DATA'{ TokKeyword KwCOMPILED_DATA $1 }
     | 'COMPILED_TYPE'{ TokKeyword KwCOMPILED_TYPE $1 }
-    | 'LINE'	    { TokKeyword KwLINE $1 }
 
     | setN	    { TokSetN $1 }
     | tex	    { TokTeX $1 }
@@ -269,6 +276,21 @@
 Id :: { Name }
 Id : id	    {% mkName $1 }
 
+-- Space separated list of one or more identifiers.
+SpaceIds :: { [Name] }
+SpaceIds
+    : Id SpaceIds { $1 : $2 }
+    | Id	  { [$1] }
+
+-- Space separated list of one or more identifiers, some of which may
+-- be surrounded by braces.
+HiddenIds :: { [(Hiding, Name)] }
+HiddenIds
+    : Id HiddenIds               { (NotHidden, $1) : $2 }
+    | Id	                 { [(NotHidden, $1)] }
+    | '{' SpaceIds '}' HiddenIds { map ((,) Hidden) $2 ++ $4 }
+    | '{' SpaceIds '}'           { map ((,) Hidden) $2 }
+
 -- Qualified operators are treated as identifiers, i.e. they have to be back
 -- quoted to appear infix.
 QId :: { QName }
@@ -323,7 +345,7 @@
 
 {-  Expressions. You might expect lambdas and lets to appear in the first
     expression category (lowest precedence). The reason they don't is that we
-    wan't to parse things like
+    want to parse things like
 
 	m >>= \x -> k x
 
@@ -566,8 +588,10 @@
 -- A left hand side of a function clause. We parse it as an expression, and
 -- then check that it is a valid left hand side.
 LHS :: { LHS }
-LHS : Expr1 WithExpressions	     {% exprToLHS $1 >>= \p -> return (p $2) }
-    | '...' WithPats WithExpressions { Ellipsis (fuseRange $1 $3) $2 $3 }
+LHS : Expr1 RewriteEquations WithExpressions
+        {% exprToLHS $1 >>= \p -> return (p $2 $3) }
+    | '...' WithPats RewriteEquations WithExpressions
+        { Ellipsis (fuseRange $1 $3) $2 $3 $4 }
 
 WithPats :: { [Pattern] }
 WithPats : {- empty -}	{ [] }
@@ -579,8 +603,15 @@
 WithExpressions :: { [Expr] }
 WithExpressions
   : {- empty -}	{ [] }
-  | 'with' Expr { case $2 of { WithApp _ e es -> e : es; e -> [e] } }
+  | 'with' Expr
+      { case $2 of { WithApp _ e es -> e : es; e -> [e] } }
 
+RewriteEquations :: { [Expr] }
+RewriteEquations
+  : {- empty -}	{ [] }
+  | 'rewrite' Expr
+      { case $2 of { WithApp _ e es -> e : es; e -> [e] } }
+
 -- Where clauses are optional.
 WhereClause :: { WhereClause }
 WhereClause
@@ -593,7 +624,7 @@
     Different kinds of declarations
  --------------------------------------------------------------------------}
 
--- Top-level defintions.
+-- Top-level definitions.
 Declaration :: { [Declaration] }
 Declaration
     : TypeSig	    { [$1] }
@@ -623,7 +654,16 @@
 TypeSig :: { Declaration }
 TypeSig : Id ':' Expr   { TypeSig $1 $3 }
 
+-- Type signatures of the form "n1 n2 n3 ... : Type", with at least
+-- one bound name.
+TypeSigs :: { [Declaration] }
+TypeSigs : SpaceIds ':' Expr { map (flip TypeSig $3) $1 }
 
+-- A variant of TypeSigs where any sub-sequence of names can be marked
+-- as hidden using braces: {n1 n2} n3 n4 {n5} {n6} ... : Type.
+HiddenTypeSigs :: { [(Hiding, Declaration)] }
+HiddenTypeSigs : HiddenIds ':' Expr { map (id *** flip TypeSig $3) $1 }
+
 -- Function declarations. The left hand side is parsed as an expression to allow
 -- declarations like 'x::xs ++ ys = e', when '::' has higher precedence than '++'.
 FunClause :: { Declaration }
@@ -644,8 +684,12 @@
 -- Record declarations.
 Record :: { Declaration }
 Record : 'record' Id LamBindings0 ':' Expr 'where'
-	    Declarations0 { Record (getRange ($1, $6, $7)) $2 (map addType $3) $5 $7 }
+	    RecordDeclarations
+         { Record (getRange ($1, $6, $7)) $2 (fst $7) (map addType $3) $5 (snd $7) }
 
+-- Declaration of record constructor name.
+RecordConstructorName :: { Name }
+RecordConstructorName : 'constructor' Id { $2 }
 
 -- Fixity declarations.
 Infix :: { Declaration }
@@ -655,7 +699,8 @@
 
 -- Field declarations.
 Fields :: { [Declaration] }
-Fields : 'field' TypeSignatures { let toField (TypeSig x t) = Field x t in map toField $2 }
+Fields : 'field' HiddenTypeSignatures
+            { let toField (h, TypeSig x t) = Field h x t in map toField $2 }
 
 -- Mutually recursive declarations.
 Mutual :: { Declaration }
@@ -676,12 +721,10 @@
 Postulate :: { Declaration }
 Postulate : 'postulate' TypeSignatures	{ Postulate (fuseRange $1 $2) $2 }
 
-
 -- Primitives. Can only contain type signatures.
 Primitive :: { Declaration }
 Primitive : 'primitive' TypeSignatures	{ Primitive (fuseRange $1 $2) $2 }
 
-
 -- Open
 Open :: { Declaration }
 Open : 'open' ModuleName OpenArgs ImportDirective {
@@ -739,16 +782,15 @@
 TopLevelPragma :: { Pragma }
 TopLevelPragma
   : OptionsPragma { $1 }
-  | LinePragma	  { $1 }
 
 DeclarationPragma :: { Pragma }
 DeclarationPragma
   : BuiltinPragma      { $1 }
-  | LinePragma	       { $1 }
   | CompiledPragma     { $1 }
   | CompiledDataPragma { $1 }
   | CompiledTypePragma { $1 }
   | ImportPragma       { $1 }
+  | ImpossiblePragma   { $1 }
 
 OptionsPragma :: { Pragma }
 OptionsPragma : '{-#' 'OPTIONS' PragmaStrings '#-}' { OptionsPragma (fuseRange $1 $4) $3 }
@@ -775,40 +817,22 @@
 
 ImportPragma :: { Pragma }
 ImportPragma
-  : '{-#' 'IMPORT' PragmaStrings '#-}'
-    { ImportPragma (fuseRange $1 $4) (unwords $3) }
-
--- TODO: When a line pragma is encountered the line and column numbers
--- are updated, but the linear position is preserved. Is this what we
--- want?
-
-LinePragma :: { Pragma }
-LinePragma
-    : '{-#' 'LINE' string string '#-}' {% do
-      let r = fuseRange $1 $5
-	  parseFile (i, f)
-	    | head f == '"' && last f == '"'  = return $ init (tail f)
-	    | otherwise	= parseErrorAt (iStart i) $ "Expected \"filename\", found " ++ f
-	  parseLine (i, l)
-	    | all isDigit l = return $ read l
-	    | otherwise	    = parseErrorAt (iStart i) $ "Expected line number, found " ++ l
-      line <- parseLine $3
-      file <- parseFile $4
-      currentPos <- fmap parsePos get
-      setParsePos $ Pn
-	{ srcFile = file
-	, posPos  = posPos currentPos
-	, posLine = line
-	, posCol  = 1
-	}
-      return $ LinePragma r line file
+  : '{-#' 'IMPORT' string '#-}'
+    {% let s = snd $3 in
+       if validHaskellModuleName s
+       then return $ ImportPragma (fuseRange $1 $4) s
+       else parseError $ "Malformed module name: " ++ s ++ "."
     }
 
+ImpossiblePragma :: { Pragma }
+  : '{-#' 'IMPOSSIBLE' '#-}'  { ImpossiblePragma (fuseRange $1 $3) }
+
 {--------------------------------------------------------------------------
     Sequences of declarations
  --------------------------------------------------------------------------}
 
--- Non-empty list of type signatures. Used in postulates.
+-- Non-empty list of type signatures, with several identifiers allowed
+-- for every signature.
 TypeSignatures :: { [TypeSignature] }
 TypeSignatures
     : TeX vopen TypeSignatures1 TeX close   { reverse $3 }
@@ -816,15 +840,35 @@
 -- Inside the layout block.
 TypeSignatures1 :: { [TypeSignature] }
 TypeSignatures1
-    : TypeSignatures1 semi TeX TypeSig  { $4 : $1 }
-    | TeX TypeSig			{ [$2] }
+    : TypeSignatures1 semi TeX TypeSigs { reverse $4 ++ $1 }
+    | TeX TypeSigs			{ reverse $2 }
 
+-- A variant of TypeSignatures which uses HiddenTypeSigs instead of
+-- TypeSigs.
+HiddenTypeSignatures :: { [(Hiding, TypeSignature)] }
+HiddenTypeSignatures
+    : TeX vopen HiddenTypeSignatures1 TeX close   { reverse $3 }
+
+-- Inside the layout block.
+HiddenTypeSignatures1 :: { [(Hiding, TypeSignature)] }
+HiddenTypeSignatures1
+    : HiddenTypeSignatures1 semi TeX HiddenTypeSigs { reverse $4 ++ $1 }
+    | TeX HiddenTypeSigs		            { reverse $2 }
+
 -- Constructors are type signatures. But constructor lists can be empty.
 Constructors :: { [Constructor] }
 Constructors
-    : TypeSignatures	  { $1 }
-    | TeX vopen TeX close { [] }
+    : TeX vopen TeX close { [] }
+    | TypeSignatures	  { $1 }
 
+-- Record declarations, including an optional record constructor name.
+RecordDeclarations :: { (Maybe Name, [Declaration]) }
+RecordDeclarations
+    : TeX vopen                                              TeX close { (Nothing, []) }
+    | TeX vopen TeX RecordConstructorName                    TeX close { (Just $4, []) }
+    | TeX vopen TeX RecordConstructorName semi Declarations1 TeX close { (Just $4, reverse $6) }
+    | TeX vopen                                Declarations1 TeX close { (Nothing, reverse $3) }
+
 -- Arbitrary declarations
 Declarations :: { [Declaration] }
 Declarations
@@ -855,7 +899,7 @@
 exprParser :: Parser Expr
 
 -- | Parse a module.
-moduleParser :: Parser ([Pragma], [Declaration])
+moduleParser :: Parser Module
 
 
 {--------------------------------------------------------------------------
@@ -939,12 +983,50 @@
 	names (Using xs)    = xs
 	names (Hiding xs)   = xs
 
+-- | Breaks up a string into substrings. Returns every maximal
+-- subsequence of zero or more characters distinct from @'.'@.
+--
+-- > splitOnDots ""         == [""]
+-- > splitOnDots "foo.bar"  == ["foo", "bar"]
+-- > splitOnDots ".foo.bar" == ["", "foo", "bar"]
+-- > splitOnDots "foo.bar." == ["foo", "bar", ""]
+-- > splitOnDots "foo..bar" == ["foo", "", "bar"]
+splitOnDots :: String -> [String]
+splitOnDots ""        = [""]
+splitOnDots ('.' : s) = [] : splitOnDots s
+splitOnDots (c   : s) = case splitOnDots s of
+  p : ps -> (c : p) : ps
+
+prop_splitOnDots = and
+  [ splitOnDots ""         == [""]
+  , splitOnDots "foo.bar"  == ["foo", "bar"]
+  , splitOnDots ".foo.bar" == ["", "foo", "bar"]
+  , splitOnDots "foo.bar." == ["foo", "bar", ""]
+  , splitOnDots "foo..bar" == ["foo", "", "bar"]
+  ]
+
+-- | Returns 'True' iff the name is a valid Haskell (hierarchical)
+-- module name.
+validHaskellModuleName :: String -> Bool
+validHaskellModuleName = all ok . splitOnDots
+  where
+  -- Checks if a dot-less module name is well-formed.
+  ok :: String -> Bool
+  ok []      = False
+  ok (c : s) =
+    isUpper c &&
+    all (\c -> isLower c || c == '_' ||
+               isUpper c ||
+               generalCategory c == DecimalNumber ||
+               c == '\'')
+        s
+
 {--------------------------------------------------------------------------
     Patterns
  --------------------------------------------------------------------------}
 
 -- | Turn an expression into a left hand side.
-exprToLHS :: Expr -> Parser ([Expr] -> LHS)
+exprToLHS :: Expr -> Parser ([Expr] -> [Expr] -> LHS)
 exprToLHS e = case e of
   WithApp r e es -> LHS <$> exprToPattern e <*> mapM exprToPattern es
   _		 -> LHS <$> exprToPattern e <*> return []
@@ -971,5 +1053,15 @@
 	_			->
           let Just pos = rStart $ getRange e in
           parseErrorAt pos $ "Not a valid pattern: " ++ show e
+
+{--------------------------------------------------------------------------
+    Tests
+ --------------------------------------------------------------------------}
+
+-- | Test suite.
+tests :: IO Bool
+tests = runTests "Agda.Syntax.Parser.Parser"
+  [ quickCheck' prop_splitOnDots
+  ]
 
 }
diff --git a/src/full/Agda/Syntax/Parser/Tokens.hs b/src/full/Agda/Syntax/Parser/Tokens.hs
--- a/src/full/Agda/Syntax/Parser/Tokens.hs
+++ b/src/full/Agda/Syntax/Parser/Tokens.hs
@@ -14,11 +14,12 @@
 	= KwLet | KwIn | KwWhere | KwData | KwCoData
 	| KwPostulate | KwMutual | KwAbstract | KwPrivate
 	| KwOpen | KwImport | KwModule | KwPrimitive
-	| KwInfix | KwInfixL | KwInfixR | KwWith
-	| KwSet | KwProp | KwForall | KwRecord | KwField
+	| KwInfix | KwInfixL | KwInfixR | KwWith | KwRewrite
+	| KwSet | KwProp | KwForall | KwRecord | KwConstructor | KwField
 	| KwHiding | KwUsing | KwRenaming | KwTo | KwPublic
 	| KwOPTIONS | KwBUILTIN | KwLINE
         | KwCOMPILED_DATA | KwCOMPILED_TYPE | KwCOMPILED | KwIMPORT
+        | KwIMPOSSIBLE
     deriving (Eq, Show)
 
 layoutKeywords :: [Keyword]
diff --git a/src/full/Agda/Syntax/Position.hs b/src/full/Agda/Syntax/Position.hs
--- a/src/full/Agda/Syntax/Position.hs
+++ b/src/full/Agda/Syntax/Position.hs
@@ -49,6 +49,7 @@
 import Agda.Utils.QuickCheck
 import Control.Applicative
 import Control.Monad
+import Agda.Utils.FileName hiding (tests)
 import Agda.Utils.TestHelpers
 
 #include "../undefined.h"
@@ -68,7 +69,7 @@
 -- messages for the user.
 --
 -- Note the invariant which positions have to satisfy: 'positionInvariant'.
-data Position = Pn { srcFile :: FilePath
+data Position = Pn { srcFile :: Maybe AbsolutePath
                    , posPos  :: !Int
 		   , posLine :: !Int
 		   , posCol  :: !Int
@@ -135,6 +136,10 @@
 instance (HasRange a, HasRange b, HasRange c) => HasRange (a,b,c) where
     getRange (x,y,z) = getRange (x,(y,z))
 
+instance HasRange a => HasRange (Maybe a) where
+    getRange Nothing  = noRange
+    getRange (Just a) = getRange a
+
 -- | If it is also possible to set the range, this is the class.
 --
 --   Instances should satisfy @'getRange' ('setRange' r x) == r@.
@@ -177,8 +182,8 @@
  --------------------------------------------------------------------------}
 
 instance Show Position where
-    show (Pn "" _ l c)	= show l ++ "," ++ show c
-    show (Pn f  _ l c)	= f ++ ":" ++ show l ++ "," ++ show c
+    show (Pn Nothing  _ l c) = show l ++ "," ++ show c
+    show (Pn (Just f) _ l c) = filePath f ++ ":" ++ show l ++ "," ++ show c
 
 instance Show Interval where
     show (Interval s e) = file ++ start ++ "-" ++ end
@@ -188,9 +193,9 @@
 	    el	= posLine e
 	    sc	= posCol s
 	    ec	= posCol e
-	    file
-		| null f    = ""
-		| otherwise = f ++ ":"
+	    file = case f of
+                     Nothing -> ""
+                     Just f  -> filePath f ++ ":"
 	    start = show sl ++ "," ++ show sc
 	    end
 		| sl == el  = show ec
@@ -206,7 +211,7 @@
  --------------------------------------------------------------------------}
 
 -- | The first position in a file: position 1, line 1, column 1.
-startPos :: FilePath -> Position
+startPos :: Maybe AbsolutePath -> Position
 startPos f = Pn { srcFile = f, posPos = 1, posLine = 1, posCol = 1 }
 
 -- | Ranges between two unknown positions
@@ -214,12 +219,10 @@
 noRange = Range []
 
 -- | Advance the position by one character.
---   A tab character (@'\t'@) will move the position to the next
---   tabstop (tab size is 8). A newline character (@'\n'@) moves
---   the position to the first character in the next line. Any
---   other character moves the position to the next column.
+--   A newline character (@'\n'@) moves the position to the first
+--   character in the next line. Any other character moves the
+--   position to the next column.
 movePos :: Position -> Char -> Position
-movePos (Pn f p l c) '\t' = Pn f (p + 1) l (div (c + 7) 8 * 8 + 1)
 movePos (Pn f p l c) '\n' = Pn f (p + 1) (l + 1) 1
 movePos (Pn f p l c) _	  = Pn f (p + 1) l (c + 1)
 
@@ -231,7 +234,7 @@
 
 -- | Backup the position by one character.
 --
--- Precondition: The character must not be @'\t'@ or @'\n'@.
+-- Precondition: The character must not be @'\n'@.
 backupPos :: Position -> Position
 backupPos (Pn f p l c) = Pn f (p - 1) l (c - 1)
 
@@ -370,11 +373,12 @@
   rPositions cr == makeInterval (rPositions r)
   where cr = continuous r
 
-prop_fuseIntervals i1 i2 =
-  intervalInvariant i &&
-  iPositions i ==
-    makeInterval (Set.union (iPositions i1) (iPositions i2))
-  where i = fuseIntervals i1 i2
+prop_fuseIntervals i1 =
+  forAll (intervalInSameFileAs i1) $ \i2 ->
+    let i = fuseIntervals i1 i2 in
+    intervalInvariant i &&
+    iPositions i ==
+      makeInterval (Set.union (iPositions i1) (iPositions i2))
 
 prop_fuseRanges :: Range -> Range -> Bool
 prop_fuseRanges r1 r2 =
@@ -386,27 +390,47 @@
 
 instance Arbitrary Position where
   arbitrary = do
+    srcFile                    <- arbitrary
     NonZero (NonNegative pos') <- arbitrary
     let pos  = fromInteger pos'
         line = pred pos `div` 10 + 1
         col  = pred pos `mod` 10 + 1
-    return (Pn {srcFile = "file name", posPos = pos,
+    return (Pn {srcFile = srcFile, posPos = pos,
                 posLine = line, posCol = col })
 
+-- | Sets the 'srcFile' components of the interval.
+
+setFile :: Maybe AbsolutePath -> Interval -> Interval
+setFile f (Interval p1 p2) =
+  Interval (p1 { srcFile = f }) (p2 { srcFile = f })
+
+-- | Generates an interval located in the same file as the given
+-- interval.
+
+intervalInSameFileAs i = setFile (srcFile $ iStart i) <$> arbitrary
+
+prop_intervalInSameFileAs i =
+  forAll (intervalInSameFileAs i) $ \i' ->
+    intervalInvariant i' &&
+    srcFile (iStart i) == srcFile (iStart i')
+
 instance Arbitrary Interval where
   arbitrary = do
     (p1, p2) <- liftM2 (,) arbitrary arbitrary
-    let [p1', p2'] = sort [p1, p2]
+    let [p1', p2'] = sort [p1, p2 { srcFile = srcFile p1 }]
     return (Interval p1' p2')
 
 instance Arbitrary Range where
-  arbitrary = Range . fixUp . sort <$> arbitrary
+  arbitrary = Range . fuse . sort . fixFiles <$> arbitrary
     where
-    fixUp (i1 : i2 : is)
-      | iEnd i1 >= iStart i2 = fixUp (fuseIntervals i1 i2 : is)
-      | otherwise            = i1 : fixUp (i2 : is)
-    fixUp is = is
+    fixFiles []       = []
+    fixFiles (i : is) = i : map (setFile $ srcFile $ iStart i) is
 
+    fuse (i1 : i2 : is)
+      | iEnd i1 >= iStart i2 = fuse (fuseIntervals i1 i2 : is)
+      | otherwise            = i1 : fuse (i2 : is)
+    fuse is = is
+
 -- | Test suite.
 tests :: IO Bool
 tests = runTests "Agda.Syntax.Position"
@@ -422,4 +446,5 @@
   , quickCheck' prop_fuseIntervals
   , quickCheck' prop_fuseRanges
   , quickCheck' prop_beginningOf
+  , quickCheck' prop_intervalInSameFileAs
   ]
diff --git a/src/full/Agda/Syntax/Strict.hs b/src/full/Agda/Syntax/Strict.hs
--- a/src/full/Agda/Syntax/Strict.hs
+++ b/src/full/Agda/Syntax/Strict.hs
@@ -33,11 +33,13 @@
 
 instance Strict Sort where
     force s = case s of
-	Type n	  -> fromIntegral n
-	Prop	  -> 0
-	Lub s1 s2 -> force (s1,s2)
-	Suc s	  -> force s
-	MetaS _   -> 0
+	Type n     -> force n
+	Prop       -> 0
+	Lub s1 s2  -> force (s1,s2)
+	Suc s      -> force s
+	MetaS _ as -> force as
+        Inf        -> 0
+        DLub s1 s2 -> force (s1, s2)
 
 instance Strict ClauseBody where
     force (Body t)   = force t
diff --git a/src/full/Agda/Syntax/Translation/AbstractToConcrete.hs b/src/full/Agda/Syntax/Translation/AbstractToConcrete.hs
--- a/src/full/Agda/Syntax/Translation/AbstractToConcrete.hs
+++ b/src/full/Agda/Syntax/Translation/AbstractToConcrete.hs
@@ -29,6 +29,7 @@
 import qualified Data.Set as Set
 import Data.Set (Set)
 import Data.List as List
+import qualified Data.Traversable as Trav
 
 import Agda.Syntax.Common
 import Agda.Syntax.Position
@@ -44,7 +45,7 @@
 import Agda.TypeChecking.Monad.Base  (MonadTCM)
 
 import Agda.Utils.Maybe
-import Agda.Utils.Monad
+import Agda.Utils.Monad hiding (bracket)
 import Agda.Utils.Tuple
 import Agda.Utils.Suffix
 
@@ -406,8 +407,11 @@
 instance ToConcrete LetBinding [C.Declaration] where
     bindToConcrete (LetBind i x t e) ret =
         bindToConcrete x $ \x ->
-        do  (t,(e, [], [])) <- toConcrete (t, A.RHS e)
-            ret [C.TypeSig x t, C.FunClause (C.LHS (C.IdentP $ C.QName x) [] []) e C.NoWhere]
+        do  (t,(e, [], [], [])) <- toConcrete (t, A.RHS e)
+            ret [ C.TypeSig x t
+                , C.FunClause (C.LHS (C.IdentP $ C.QName x) [] [] [])
+                              e C.NoWhere
+                ]
     bindToConcrete (LetApply i x tel y es _ _) ret = do
       x  <- unsafeQNameToName <$> toConcrete x
       y  <- toConcrete y
@@ -428,15 +432,22 @@
 instance ToConcrete [A.Declaration] [C.Declaration] where
     toConcrete ds = concat <$> mapM toConcrete ds
 
-instance ToConcrete A.RHS (C.RHS, [C.Expr], [C.Declaration]) where
+instance ToConcrete A.RHS (C.RHS, [C.Expr], [C.Expr], [C.Declaration]) where
     toConcrete (A.RHS e) = do
       e <- toConcrete e
-      return (C.RHS e, [], [])
-    toConcrete A.AbsurdRHS = return (C.AbsurdRHS, [], [])
+      return (C.RHS e, [], [], [])
+    toConcrete A.AbsurdRHS = return (C.AbsurdRHS, [], [], [])
     toConcrete (A.WithRHS _ es cs) = do
       es <- toConcrete es
       cs <- toConcrete cs
-      return (C.AbsurdRHS, es, concat cs)
+      return (C.AbsurdRHS, [], es, concat cs)
+    toConcrete (A.RewriteRHS _ eqs rhs wh) = do
+      wh <- toConcrete wh
+      (rhs, eqs', es, whs) <- toConcrete rhs
+      unless (null eqs')
+        __IMPOSSIBLE__
+      eqs <- toConcrete eqs
+      return (rhs, eqs, es, wh ++ whs)
 
 data TypeAndDef = TypeAndDef A.TypeSignature A.Definition
 
@@ -468,17 +479,20 @@
       mkTel n (A.Pi _ b t) = (b++) -*- id $ mkTel (n - 1) t
       mkTel _ _            = __IMPOSSIBLE__
 
-  toConcrete (TypeAndDef (Axiom _ x t) (RecDef  i _ bs _ cs)) =
+  toConcrete (TypeAndDef (Axiom _ x t) (RecDef  i _ c bs _ cs)) =
     withAbstractPrivate i $
     bindToConcrete tel $ \tel' -> do
       t'       <- toConcreteCtx TopCtx t0
       (x',cs') <- (unsafeQNameToName -*- id) <$> toConcrete (x, map Constr cs)
-      return [ C.Record (getRange i) x' tel' t' cs' ]
+      c'       <- Trav.mapM (\d -> unsafeQNameToName <$>
+                                     toConcrete (axiomName d)) c
+      return [ C.Record (getRange i) x' c' tel' t' cs' ]
     where
       (tel, t0) = mkTel (length bs) t
-      mkTel 0 t            = ([], t)
-      mkTel n (A.Pi _ b t) = (b++) -*- id $ mkTel (n - 1) t
-      mkTel _ _            = __IMPOSSIBLE__
+      mkTel n (A.ScopedExpr _ t) = mkTel n t
+      mkTel 0 t                  = ([], t)
+      mkTel n (A.Pi _ b t)       = (b++) -*- id $ mkTel (n - 1) t
+      mkTel _ _                  = __IMPOSSIBLE__
 
   toConcrete _ = __IMPOSSIBLE__
 
@@ -489,17 +503,17 @@
     x' <- unsafeQNameToName <$> toConcrete x
     t' <- toConcreteCtx TopCtx t
     return $ C.TypeSig x' t'
-  toConcrete _ = __IMPOSSIBLE__
+  toConcrete (Constr d) = head <$> toConcrete d
 
 instance ToConcrete A.Clause [C.Declaration] where
   toConcrete (A.Clause lhs rhs wh) =
-      bindToConcrete lhs $ \(C.LHS p wps _) -> do
-          (rhs', with, wcs) <- toConcreteCtx TopCtx rhs
+      bindToConcrete lhs $ \(C.LHS p wps _ _) -> do
+          (rhs', eqs, with, wcs) <- toConcreteCtx TopCtx rhs
           ds         <- toConcrete wh
           let wh' = case ds of
                 []  -> C.NoWhere
                 _   -> C.AnyWhere ds
-          return $ FunClause (C.LHS p wps with) rhs' wh' : wcs
+          return $ FunClause (C.LHS p wps eqs with) rhs' wh' : wcs
 
 instance ToConcrete A.Declaration [C.Declaration] where
   toConcrete (ScopedDecl scope ds) =
@@ -512,12 +526,12 @@
       t' <- toConcreteCtx TopCtx t
       return [C.Postulate (getRange i) [C.TypeSig x' t']]
 
-  toConcrete (A.Field i x t) = do
+  toConcrete (A.Field i h x t) = do
     x' <- unsafeQNameToName <$> toConcrete x
     withAbstractPrivate i $
       withInfixDecl i x'  $ do
       t' <- toConcreteCtx TopCtx t
-      return [C.Field x' t']
+      return [C.Field h x' t']
 
   toConcrete (A.Primitive i x t) = do
     x' <- unsafeQNameToName <$> toConcrete x
@@ -600,7 +614,7 @@
     bindToConcrete (A.LHS i x args wps) ret = do
       bindToConcreteCtx TopCtx (A.DefP info x args) $ \lhs ->
         bindToConcreteCtx TopCtx (noImplicitPats wps) $ \wps ->
-          ret $ C.LHS lhs wps []
+          ret $ C.LHS lhs wps [] []
       where info = PatRange (getRange i)
 
 appBrackets' :: [arg] -> Precedence -> Bool
@@ -670,7 +684,8 @@
     | all notHidden args  -> do
       let  args' = map (namedThing . unArg) args
       case hd of
-        HdVar n  -> do
+        HdVar n | isNoName n -> mdefault
+                | otherwise  -> do
           x <- toConcrete n
           doCName (nameFixity n) x args'
         HdDef qn -> doQName qn args'
@@ -678,6 +693,8 @@
     | otherwise -> mdefault
   where
 
+  isNoName x = C.isNoName $ A.nameConcrete x
+
   notHidden (Arg h _) = h == NotHidden
 
   -- qualified names can't use mixfix syntax
@@ -689,6 +706,7 @@
 
   -- fall-back (wrong number of arguments or no holes)
   doCName _ cn@(C.Name _ xs) es
+    | length xs == 1        = mdefault
     | length es /= numHoles = mdefault
     | List.null es          = mdefault
     where numHoles = length [ () | Hole <- xs ]
@@ -700,7 +718,9 @@
     , Hole <- last xs = do
         let a1     = head as
             an     = last as
-            as'    = init $ tail as
+            as'    = case as of
+                       as@(_:_:_) -> init $ tail as
+                       _          -> __IMPOSSIBLE__
         e1 <- toConcreteCtx (LeftOperandCtx fixity) a1
         es <- mapM (toConcreteCtx InsideOperandCtx) as'
         en <- toConcreteCtx (RightOperandCtx fixity) an
@@ -711,7 +731,9 @@
   doCName fixity cn@(C.Name _ xs) as
     | Hole <- last xs = do
         let an  = last as
-            as' = init as
+            as' = case as of
+                    as@(_:_) -> init as
+                    _        -> __IMPOSSIBLE__
         es <- mapM (toConcreteCtx InsideOperandCtx) as'
         en <- toConcreteCtx (RightOperandCtx fixity) an
         bracket (opBrackets fixity)
diff --git a/src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs b/src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs
--- a/src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs
+++ b/src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs
@@ -30,7 +30,7 @@
 import Data.List ((\\), nub)
 import qualified Data.Map as Map
 
-import Agda.Syntax.Concrete as C
+import Agda.Syntax.Concrete as C hiding (topLevelModuleName)
 import Agda.Syntax.Abstract as A
 import Agda.Syntax.Position
 import Agda.Syntax.Common
@@ -42,7 +42,8 @@
 import Agda.Syntax.Scope.Monad
 import Agda.Syntax.Strict
 
-import Agda.TypeChecking.Monad.Base (TypeError(..), Call(..), typeError, TCErr(..))
+import Agda.TypeChecking.Monad.Base (TypeError(..), Call(..), typeError,
+                                     TCErr(..), TCErr'(..))
 import Agda.TypeChecking.Monad.Trace (traceCall, traceCallCPS, setCurrentRange)
 import Agda.TypeChecking.Monad.State
 import Agda.TypeChecking.Monad.Options
@@ -119,9 +120,9 @@
   return $ ScopedExpr s e
 
 expandEllipsis :: C.Pattern -> [C.Pattern] -> C.Clause -> C.Clause
-expandEllipsis _ _ c@(C.Clause _ (C.LHS _ _ _) _ _ _) = c
-expandEllipsis p ps (C.Clause x (C.Ellipsis _ ps' es) rhs wh wcs) =
-  C.Clause x (C.LHS p (ps ++ ps') es) rhs wh wcs
+expandEllipsis _ _ c@(C.Clause _ C.LHS{} _ _ _) = c
+expandEllipsis p ps (C.Clause x (C.Ellipsis _ ps' eqs es) rhs wh wcs) =
+  C.Clause x (C.LHS p (ps ++ ps') eqs es) rhs wh wcs
 
 -- | Make sure that each variable occurs only once.
 checkPatternLinearity :: [A.Pattern' e] -> ScopeM ()
@@ -151,9 +152,9 @@
     notField NiceField{} = False
     notField _           = True
 
-    build (NiceField r f _ _ x e : fs) = C.Pi [C.TypedBindings r NotHidden
-                                                [C.TBind r [BName x f] e]
-                                              ] $ build fs
+    build (NiceField r f _ _ h x e : fs) = C.Pi [C.TypedBindings r h
+                                                  [C.TBind r [BName x f] e]
+                                                ] $ build fs
       where r = getRange x
     build (d : fs)                     = C.Let noRange (notSoNiceDeclarations [d]) $ build fs
     build []                           = C.Prop noRange
@@ -318,7 +319,9 @@
       (DefinedName d, C.QName x) | DefName == anameKind d -> return $ Left x
       (UnknownName,   C.QName x)                          -> return $ Left x
       (ConstructorName ds, _)                             -> return $ Right ds
-      _                                                   -> fail $ "not a constructor: " ++ show x -- TODO
+      _                                                   ->
+        typeError $ GenericError $
+          "Cannot pattern match on " ++ show x ++ ", because it is not a constructor"
     case z of
       Left x  -> do
         reportSLn "scope.pat" 10 $ "it was a var: " ++ show x
@@ -548,7 +551,7 @@
 
 niceDecls :: [C.Declaration] -> ScopeM [NiceDeclaration]
 niceDecls ds = case runNice $ niceDeclarations ds of
-  Left e   -> throwError $ Exception (getRange e) (show e)
+  Left e   -> throwError $ TCErr Nothing $ Exception (getRange e) (show e)
   Right ds -> return ds
 
 instance ToAbstract [C.Declaration] [A.Declaration] where
@@ -588,7 +591,7 @@
 
             _   -> notAValidLetBinding d
         where
-            letToAbstract (C.Clause top clhs@(C.LHS p [] []) (C.RHS rhs) NoWhere []) = do
+            letToAbstract (C.Clause top clhs@(C.LHS p [] [] []) (C.RHS rhs) NoWhere []) = do
                 p    <- parseLHS (Just top) p
                 localToAbstract (snd $ lhsArgs p) $ \args ->
                     do  rhs <- toAbstract rhs
@@ -628,10 +631,10 @@
     toAbstract (C.BuiltinPragma _ b e) = do
         e <- toAbstract e
         return [ A.BuiltinPragma b e ]
-    toAbstract (C.LinePragma _ _ _) = return []
     toAbstract (C.ImportPragma _ i) = do
       addHaskellImport i
       return []
+    toAbstract (C.ImpossiblePragma _) = __IMPOSSIBLE__
 
 -- Only constructor names are bound by definitions.
 instance ToAbstract NiceDefinition Definition where
@@ -667,7 +670,7 @@
           conName _ = __IMPOSSIBLE__
 
     -- Record definitions (mucho interesting)
-      C.RecDef r f p a x pars fields ->
+      C.RecDef r f p a x c pars fields ->
         traceCall (ScopeCheckDefinition d) $
         withLocalVars $ do
           pars   <- toAbstract pars
@@ -686,7 +689,8 @@
           -- popScope p
           bindModule p x m
           printScope "rec" 15 "record complete"
-          return $ A.RecDef (mkDefInfo x f p a r) x' pars contel afields
+          c' <- mapM (toAbstract . Constr) c
+          return $ A.RecDef (mkDefInfo x f p a r) x' c' pars contel afields
 
 -- The only reason why we return a list is that open declarations disappears.
 -- For every other declaration we get a singleton list.
@@ -704,11 +708,11 @@
       return [ A.Axiom (mkDefInfo x f p a r) y t' ]
 
   -- Fields
-    C.NiceField r f p a x t -> do
+    C.NiceField r f p a h x t -> do
       t' <- toAbstractCtx TopCtx t
       y  <- freshAbstractQName f x
       bindName p DefName x y
-      return [ A.Field (mkDefInfo x f p a r) y t' ]
+      return [ A.Field (mkDefInfo x f p a r) h y t' ]
 
   -- Primitive function
     PrimitiveFunction r f p a x t -> do
@@ -816,8 +820,8 @@
     toAbstract _ = __IMPOSSIBLE__    -- a constructor is always an axiom
 
 instance ToAbstract C.Clause A.Clause where
-    toAbstract (C.Clause top (C.Ellipsis _ _ _) _ _ _) = fail "bad '...'" -- TODO: errors message
-    toAbstract (C.Clause top lhs@(C.LHS p wps with) rhs wh wcs) = withLocalVars $ do
+    toAbstract (C.Clause top C.Ellipsis{} _ _ _) = fail "bad '...'" -- TODO: errors message
+    toAbstract (C.Clause top lhs@(C.LHS p wps eqs with) rhs wh wcs) = withLocalVars $ do
       let wcs' = map (expandEllipsis p wps) wcs
       lhs' <- toAbstract (LeftHandSide top p wps)
       printLocals 10 "after lhs:"
@@ -825,50 +829,74 @@
             NoWhere        -> (Nothing, [])
             AnyWhere ds    -> (Nothing, ds)
             SomeWhere m ds -> (Just m, ds)
-      case whds of
-        [] -> do
-          rhs <- toAbstract =<< toAbstractCtx TopCtx (RightHandSide with wcs' rhs)
+      if not (null eqs)
+        then do
+          rhs <- toAbstract =<< toAbstractCtx TopCtx (RightHandSide eqs with wcs' rhs whds)
           return $ A.Clause lhs' rhs []
-        _       -> do
-          m <- maybe (nameConcrete <$> freshNoName noRange) return whname
-          let acc = maybe PrivateAccess (const PublicAccess) whname  -- unnamed where's are private
-          let tel = []
-          old <- getCurrentModule
-          am  <- toAbstract (NewModuleName m)
-          (scope, ds) <- scopeCheckModule (getRange wh) (C.QName m) am tel whds
-          setScope scope
+        else do
           -- the right hand side is checked inside the module of the local definitions
-          rhs <- toAbstractCtx TopCtx (RightHandSide with wcs' rhs)
-          setCurrentModule old
---        case acc of
---          PublicAccess  -> popScope PublicAccess
---          PrivateAccess -> popScope_  -- unnamed where clauses are not in scope
-          bindModule acc m am
+          (rhs, ds) <- whereToAbstract (getRange wh) whname whds $
+                        toAbstractCtx TopCtx (RightHandSide eqs with wcs' rhs [])
           rhs <- toAbstract rhs
           return $ A.Clause lhs' rhs ds
 
-data RightHandSide = RightHandSide [C.Expr] [C.Clause] C.RHS
+whereToAbstract :: Range -> Maybe C.Name -> [C.Declaration] -> ScopeM a -> ScopeM (a, [A.Declaration])
+whereToAbstract _ _ [] inner = do
+  x <- inner
+  return (x, [])
+whereToAbstract r whname whds inner = do
+  m <- maybe (nameConcrete <$> freshNoName noRange) return whname
+  let acc = maybe PrivateAccess (const PublicAccess) whname  -- unnamed where's are private
+  let tel = []
+  old <- getCurrentModule
+  am  <- toAbstract (NewModuleName m)
+  (scope, ds) <- scopeCheckModule r (C.QName m) am tel whds
+  setScope scope
+  x <- inner
+  setCurrentModule old
+  bindModule acc m am
+  return (x, ds)
+
+data RightHandSide = RightHandSide [C.Expr] [C.Expr] [C.Clause] C.RHS [C.Declaration]
 data AbstractRHS = AbsurdRHS'
                  | WithRHS' [A.Expr] [C.Clause]  -- ^ The with clauses haven't been translated yet
                  | RHS' A.Expr
+                 | RewriteRHS' [A.Expr] AbstractRHS [A.Declaration]
 
+withFunctionName :: String -> ScopeM A.QName
+withFunctionName s = do
+  m <- getCurrentModule
+  NameId i _ <- fresh
+  A.qualify m <$> freshName_ (s ++ show i)
+
 instance ToAbstract AbstractRHS A.RHS where
-  toAbstract AbsurdRHS'       = return A.AbsurdRHS
-  toAbstract (RHS' e)         = return $ A.RHS e
+  toAbstract AbsurdRHS'            = return A.AbsurdRHS
+  toAbstract (RHS' e)              = return $ A.RHS e
+  toAbstract (RewriteRHS' eqs rhs wh) = do
+    auxs <- replicateM (length eqs) $ withFunctionName "rewrite-"
+    rhs  <- toAbstract rhs
+    return $ RewriteRHS auxs eqs rhs wh
   toAbstract (WithRHS' es cs) = do
-    m   <- getCurrentModule
-    -- Hack
-    NameId i _ <- fresh
-    aux <- A.qualify m <$> freshName_ ("aux" ++ show i)
+    aux <- withFunctionName "with-"
     A.WithRHS aux es <$> toAbstract cs
 
 instance ToAbstract RightHandSide AbstractRHS where
-  toAbstract (RightHandSide [] (_ : _) _)        = __IMPOSSIBLE__
-  toAbstract (RightHandSide (_ : _) _ (C.RHS _)) = typeError $ BothWithAndRHS
-  toAbstract (RightHandSide [] [] rhs)           = toAbstract rhs
-  toAbstract (RightHandSide es cs C.AbsurdRHS)   = do
+  toAbstract (RightHandSide eqs@(_:_) es cs rhs wh) = do
+    eqs <- toAbstractCtx TopCtx eqs
+                 -- TODO: remember named where
+    (rhs, ds) <- whereToAbstract (getRange wh) Nothing wh $
+                  toAbstract (RightHandSide [] es cs rhs [])
+    return $ RewriteRHS' eqs rhs ds
+  toAbstract (RightHandSide [] [] (_ : _) _ _)        = __IMPOSSIBLE__
+  toAbstract (RightHandSide [] (_ : _) _ (C.RHS _) _) = typeError $ BothWithAndRHS
+  toAbstract (RightHandSide [] [] [] rhs [])          = toAbstract rhs
+  toAbstract (RightHandSide [] es cs C.AbsurdRHS [])  = do
     es <- toAbstractCtx TopCtx es
     return $ WithRHS' es cs
+  -- TODO: some of these might be possible
+  toAbstract (RightHandSide [] (_ : _) _ C.AbsurdRHS (_ : _)) = __IMPOSSIBLE__
+  toAbstract (RightHandSide [] [] [] (C.RHS _) (_ : _))       = __IMPOSSIBLE__
+  toAbstract (RightHandSide [] [] [] C.AbsurdRHS (_ : _))     = __IMPOSSIBLE__
 
 instance ToAbstract C.RHS AbstractRHS where
     toAbstract C.AbsurdRHS = return $ AbsurdRHS'
diff --git a/src/full/Agda/Syntax/Translation/InternalToAbstract.hs b/src/full/Agda/Syntax/Translation/InternalToAbstract.hs
--- a/src/full/Agda/Syntax/Translation/InternalToAbstract.hs
+++ b/src/full/Agda/Syntax/Translation/InternalToAbstract.hs
@@ -16,6 +16,7 @@
 module Agda.Syntax.Translation.InternalToAbstract where
 
 import Prelude hiding (mapM_, mapM)
+import Control.Arrow
 import Control.Monad.State hiding (mapM_, mapM)
 import Control.Monad.Error hiding (mapM_, mapM)
 
@@ -26,6 +27,7 @@
 import Data.List hiding (sort)
 import Data.Traversable
 
+import Agda.Syntax.Literal
 import Agda.Syntax.Position
 import Agda.Syntax.Common
 import Agda.Syntax.Info as Info
@@ -40,6 +42,8 @@
 import Agda.TypeChecking.Reduce
 import {-# SOURCE #-} Agda.TypeChecking.Records
 import Agda.TypeChecking.DisplayForm
+import Agda.TypeChecking.Level
+import Agda.TypeChecking.Monad.Builtin
 
 import Agda.Utils.Monad
 import Agda.Utils.Tuple
@@ -152,6 +156,21 @@
         termToPat (I.Def _ []) = return $ A.WildP info
         termToPat v = A.DotP info <$> reify v -- __IMPOSSIBLE__
 
+-- Level literals should be expanded.
+
+instance Reify Literal Expr where
+  reify (LitLevel r n) = do
+    levelZero <- primLevelZero
+    levelSuc  <- levelSucFunction
+    reify $ fold levelSuc levelZero n
+    where
+    fold s z n | n < 0     = __IMPOSSIBLE__
+               | otherwise = foldr (.) id (genericReplicate n s) z
+  reify l@(LitInt    {}) = return (A.Lit l)
+  reify l@(LitFloat  {}) = return (A.Lit l)
+  reify l@(LitString {}) = return (A.Lit l)
+  reify l@(LitChar   {}) = return (A.Lit l)
+
 instance Reify Term Expr where
     reify v =
 	do  v <- instantiate v
@@ -166,9 +185,11 @@
 		  isR <- isRecord x
 		  case isR of
 		    True -> do
+		      showImp <- showImplicitArguments
+                      let keep ((h, x), v) = showImp || h == NotHidden
 		      xs <- getRecordFieldNames x
 		      vs <- reify $ map unArg vs
-		      return $ A.Rec exprInfo $ zip xs vs
+		      return $ A.Rec exprInfo $ map (snd *** id) $ filter keep $ zip xs vs
 		    False -> reifyDisplayForm x vs $ do
                       let hide (Arg _ x) = Arg Hidden x
                       Constructor{conPars = np} <- theDef <$> getConstInfo x
@@ -181,7 +202,7 @@
 		I.Lam h b    ->
 		    do	(x,e) <- reify b
 			return $ A.Lam exprInfo (DomainFree h x) e
-		I.Lit l	     -> return $ A.Lit l
+		I.Lit l	     -> reify l
 		I.Pi a b     ->
 		    do	Arg h a <- reify a
 			(x,b)   <- reify b
@@ -201,17 +222,25 @@
   reify (NoBind b) = reify b
   reify (Bind b)   = reify $ absBody b  -- the variables should already be bound
 
-stripImplicits :: MonadTCM tcm => [NamedArg A.Pattern] -> [A.Pattern] -> tcm [NamedArg A.Pattern]
+stripImplicits :: MonadTCM tcm => [NamedArg A.Pattern] -> [A.Pattern] ->
+                  tcm ([NamedArg A.Pattern], [A.Pattern])
 stripImplicits ps wps =
-  ifM showImplicitArguments (return ps) $ do
+  ifM showImplicitArguments (return (ps, wps)) $ do
   let vars = dotVars (ps, wps)
   reportSLn "syntax.reify.implicit" 30 $ unlines
     [ "stripping implicits"
---     , "  ps   = " ++ show ps
---     , "  wps  = " ++ show wps
+    , "  ps   = " ++ show ps
+    , "  wps  = " ++ show wps
     , "  vars = " ++ show vars
     ]
-  return $ strip vars ps
+  let allps       = ps ++ map (Arg NotHidden . unnamed) wps
+      sps         = foldl (.) (strip vars) (map rearrangeBinding $ Set.toList vars) $ allps
+      (ps', wps') = splitAt (length sps - length wps) sps
+  reportSLn "syntax.reify.implicit" 30 $ unlines
+    [ "  ps'  = " ++ show ps'
+    , "  wps' = " ++ show (map (namedThing . unArg) wps')
+    ]
+  return (ps', map (namedThing . unArg) wps')
   where
     argsVars = Set.unions . map argVars
     argVars = patVars . namedThing . unArg
@@ -226,14 +255,20 @@
       A.ImplicitP _ -> Set.empty
       A.AsP _ _ p   -> patVars p
 
-    strip dvs = stripArgs
+    -- Pick the "best" place to bind the variable. Best in this case
+    -- is the left-most explicit binding site. But, of course we can't
+    -- do this since binding site might be forced by a parent clause.
+    -- Why? Because the binding site we pick might not exist in the
+    -- generated with function if it corresponds to a dot pattern.
+    rearrangeBinding x ps = ps
+
+    strip dvs ps = stripArgs ps
       where
         stripArgs [] = []
         stripArgs (a : as) = case argHiding a of
           Hidden | canStrip a as -> stripArgs as
           _                      -> stripArg a : stripArgs as
 
-        -- TODO: use named implicits (need to get the names from somewhere!)
         canStrip a as = and
           [ varOrDot p
           , noInterestingBindings p
@@ -257,11 +292,11 @@
         noInterestingBindings p =
           Set.null $ dvs `Set.intersection` patVars p
 
-        varOrDot (A.VarP _)      = True
-        varOrDot (A.WildP _)     = True
-        varOrDot (A.DotP _ _)    = True
-        varOrDot (A.ImplicitP _) = True
-        varOrDot _               = False
+        varOrDot A.VarP{}      = True
+        varOrDot A.WildP{}     = True
+        varOrDot A.DotP{}      = True
+        varOrDot A.ImplicitP{} = True
+        varOrDot _             = False
 
 
 class DotVars a where
@@ -345,7 +380,8 @@
         if Set.member "()" vars
           then return $ A.DotP i $ A.Underscore mi
           else lift $ A.DotP i <$> reify v
-      I.LitP l    -> return $ A.LitP l
+      I.LitP (LitLevel {}) -> __IMPOSSIBLE__
+      I.LitP l             -> return (A.LitP l)
       I.ConP c ps -> A.ConP i (AmbQ [c]) <$> reifyArgs ps
       where
         i = PatRange noRange
@@ -363,7 +399,7 @@
       info = LHSRange noRange
       dropParams n (LHS i f ps wps) = LHS i f (genericDrop n ps) wps
       stripImps (LHS i f ps wps) = do
-        ps <- stripImplicits ps wps
+        (ps, wps) <- stripImplicits ps wps
         return $ LHS i f ps wps
 
 instance Reify Type Expr where
@@ -371,15 +407,25 @@
 
 instance Reify Sort Expr where
     reify s =
-	do  s <- normalise s
+	do  s <- instantiateFull s
 	    case s of
-		I.Type n  -> return $ A.Set exprInfo n
-		I.Prop	  -> return $ A.Prop exprInfo
-		I.MetaS x -> reify x
-		I.Suc s	  ->
+                I.Type (I.Lit (LitLevel _ n)) -> return $ A.Set exprInfo n
+                I.Type a -> do
+                  a <- reify a
+                  return $ A.App exprInfo (A.Set exprInfo 0)
+                                          (Arg NotHidden (unnamed a))
+		I.Prop	     -> return $ A.Prop exprInfo
+		I.MetaS x as -> apps =<< reify (x, as)
+		I.Suc s	     ->
 		    do	suc <- freshName_ "suc"	-- TODO: hack
 			e   <- reify s
 			return $ A.App exprInfo (A.Var suc) (Arg NotHidden $ unnamed e)
+                I.Inf       -> A.Var <$> freshName_ "Setω"
+                I.DLub s1 s2 -> do
+                  lub <- freshName_ "dLub" -- TODO: hack
+                  (e1,e2) <- reify (s1, I.Lam NotHidden $ fmap Sort s2)
+                  let app x y = A.App exprInfo x (Arg NotHidden $ unnamed y)
+                  return $ A.Var lub `app` e1 `app` e2
 		I.Lub s1 s2 ->
 		    do	lub <- freshName_ "\\/"	-- TODO: hack
 			(e1,e2) <- reify (s1,s2)
diff --git a/src/full/Agda/Termination/TermCheck.hs b/src/full/Agda/Termination/TermCheck.hs
--- a/src/full/Agda/Termination/TermCheck.hs
+++ b/src/full/Agda/Termination/TermCheck.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, PatternGuards #-}
 
 {- Checking for Structural recursion
    Authors: Andreas Abel, Nils Anders Danielsson, Ulf Norell,
@@ -20,7 +20,6 @@
 import qualified Data.Set as Set
 import Data.Set (Set)
 import Text.PrettyPrint (Doc)
-import qualified System.IO.UTF8 as UTF8
 
 import qualified Agda.Syntax.Abstract as A
 import Agda.Syntax.Internal
@@ -69,20 +68,39 @@
 
 -- | Termination check a single declaration.
 termDecl :: A.Declaration -> TCM Result
-termDecl d =
-    case d of
-	A.Axiom {}		 -> return []
-        A.Field {}               -> return []
-	A.Primitive {}  	 -> return []
-	A.Definition i ts ds	 -> termMutual i ts ds
-	A.Section i x tel ds	 -> termSection i x tel ds
-	A.Apply {}               -> return []
-	A.Import {}		 -> return []
-	A.Pragma {}		 -> return []
-	A.ScopedDecl scope ds	 -> setScope scope >> termDecls ds
-        A.Open {}                -> return []
-	    -- open is just an artifact from the concrete syntax
+termDecl (A.ScopedDecl scope ds) = do
+  setScope scope
+  termDecls ds
+termDecl d = case d of
+    A.Axiom {}            -> return []
+    A.Field {}            -> return []
+    A.Primitive {}        -> return []
+    A.Definition _ _ ds
+      | [A.RecDef _ r _ _ _ rds] <- unscopeDefs ds
+                          -> do
+        let m = mnameFromList $ qnameToList r
+        setScopeFromDefs ds
+        termSection m rds
+    A.Definition i ts ds  -> termMutual i ts ds
+    A.Section _ x _ ds    -> termSection x ds
+    A.Apply {}            -> return []
+    A.Import {}           -> return []
+    A.Pragma {}           -> return []
+    A.Open {}             -> return []
+        -- open is just an artifact from the concrete syntax
+    A.ScopedDecl{}        -> __IMPOSSIBLE__
+        -- taken care of above
+  where
+    setScopeFromDefs = mapM_ setScopeFromDef
+    setScopeFromDef (A.ScopedDef scope d) =
+      setScope scope >> setScopeFromDef d
+    setScopeFromDef _ = return ()
 
+    unscopeDefs = concatMap unscopeDef
+
+    unscopeDef (A.ScopedDef _ d) = unscopeDef d
+    unscopeDef d = [d]
+
 collectCalls :: (a -> TCM Calls) -> [a] -> TCM Calls
 collectCalls f [] = return Term.empty
 collectCalls f (a : as) = do c1 <- f a
@@ -141,10 +159,16 @@
                      (show (names) ++ " does termination check")
          return []
   where
-  getName (A.FunDef i x cs) = [x]
-  getName (A.ScopedDef _ d) = getName d
-  getName _                 = []
+  getName (A.FunDef i x cs)       = [x]
+  getName (A.ScopedDef _ d)       = getName d
+  getName (A.RecDef _ _ _ _ _ ds) = concatMap getNameD ds
+  getName _                       = []
 
+  getNameD (A.Definition _ _ ds) = concatMap getName ds
+  getNameD (A.Section _ _ _ ds)  = concatMap getNameD ds
+  getNameD (A.ScopedDecl _ ds)   = concatMap getNameD ds
+  getNameD _                     = []
+
   -- the mutual names mentioned in the abstract syntax
   names = concatMap getName ds
 
@@ -152,45 +176,17 @@
   concat' = Set.toList . Set.unions
 
 -- | Termination check a module.
-termSection :: Info.ModuleInfo -> ModuleName -> A.Telescope -> [A.Declaration] -> TCM Result
-termSection i x tel ds =
-  termTelescope tel $ \tel' -> do
-    addSection x (size tel')
-    verboseS "term.section" 10 $ do
-      dx   <- prettyTCM x
-      dtel <- mapM prettyA tel
-      dtel' <- prettyTCM =<< lookupSection x
-      liftIO $ UTF8.putStrLn $ "termination checking section " ++ show dx ++ " " ++ show dtel
-      liftIO $ UTF8.putStrLn $ "    actual tele: " ++ show dtel'
-    withCurrentModule x $ termDecls ds
-
--- | Termination check a telescope. Binds the variables defined by the telescope.
-termTelescope :: A.Telescope -> (Telescope -> TCM a) -> TCM a
-termTelescope [] ret = ret EmptyTel
-termTelescope (b : tel) ret =
-    termTypedBindings b $ \tel1 ->
-    termTelescope tel   $ \tel2 ->
-	ret $ abstract tel1 tel2
+termSection :: ModuleName -> [A.Declaration] -> TCM Result
+termSection x ds = do
+  tel <- lookupSection x
+  reportSDoc "term.section" 10 $
+    sep [ text "termination checking section"
+          , prettyTCM x
+          , prettyTCM tel
+          ]
+  withCurrentModule x $ addCtxTel tel $ termDecls ds
 
 
--- | Termination check a typed binding and extends the context with the bound variables.
---   The telescope passed to the continuation is valid in the original context.
-termTypedBindings :: A.TypedBindings -> (Telescope -> TCM a) -> TCM a
-termTypedBindings (A.TypedBindings i h bs) ret =
-    thread (termTypedBinding h) bs $ \bss ->
-    ret $ foldr (\(x,t) -> ExtendTel (Arg h t) . Abs x) EmptyTel (concat bss)
-
-termTypedBinding :: Hiding -> A.TypedBinding -> ([(String,Type)] -> TCM a) -> TCM a
-termTypedBinding h (A.TBind i xs e) ret = do
-    t <- isType_ e
-    addCtxs xs (Arg h t) $ ret $ mkTel xs t
-    where
-	mkTel [] t     = []
-	mkTel (x:xs) t = (show $ nameConcrete x,t) : mkTel xs (raise 1 t)
-termTypedBinding h (A.TNoBind e) ret = do
-    t <- isType_ e
-    ret [("_",t)]
-
 -- | Termination check a definition by pattern matching.
 termDef :: DBPConf -> MutualNames -> QName -> TCM Calls
 termDef use names name = do
@@ -527,7 +523,23 @@
   | c == c' = compareConArgs suc ts ps
 compareTerm' suc (Def s ts) (ConDBP s' ps)
   | s == s' && Just s == suc = compareConArgs suc ts ps
+compareTerm' _ t@Con{} (ConDBP _ ps)
+  | any (isSubTerm t) ps = return Lt
 compareTerm' _ _ _ = return Term.Unknown
+
+isSubTerm :: Term -> DeBruijnPat -> Bool
+isSubTerm t p = equal t p || properSubTerm t p
+  where
+    equal (Con c ts) (ConDBP c' ps) =
+      and $ (c == c')
+          : (length ts == length ps)
+          : zipWith equal (map unArg ts) ps
+    equal (Var i []) (VarDBP j) = i == j
+    equal (Lit l) (LitDBP l') = l == l'
+    equal _ _ = False
+
+    properSubTerm t (ConDBP _ ps) = any (isSubTerm t) ps
+    properSubTerm _ _ = False
 
 compareConArgs :: Maybe QName -> Args -> [DeBruijnPat] -> TCM Term.Order
 compareConArgs suc ts ps =
diff --git a/src/full/Agda/Termination/Termination.hs b/src/full/Agda/Termination/Termination.hs
--- a/src/full/Agda/Termination/Termination.hs
+++ b/src/full/Agda/Termination/Termination.hs
@@ -1,13 +1,9 @@
 -- | Termination checker, based on
 --     \"A Predicative Analysis of Structural Recursion\" by
---     Andreas Abel and Thorsten Altenkirch (JFP'01).
+--     Andreas Abel and Thorsten Altenkirch (JFP'01),
 --   and
 --     \"The Size-Change Principle for Program Termination\" by
 --     Chin Soon Lee, Neil Jones, and Amir Ben-Amram (POPL'01).
---
--- TODO: Note that we should also check that data type definitions are
--- strictly positive. Furthermore, for inductive-recursive families we
--- may need to do something more clever.
 
 module Agda.Termination.Termination
   ( terminates
diff --git a/src/full/Agda/Tests.hs b/src/full/Agda/Tests.hs
--- a/src/full/Agda/Tests.hs
+++ b/src/full/Agda/Tests.hs
@@ -10,6 +10,7 @@
 import Agda.Interaction.Highlighting.Precise  as IntePrec   (tests)
 import Agda.Interaction.Highlighting.Range    as InteRang   (tests)
 import Agda.Interaction.Options               as InteOpti   (tests)
+import Agda.Syntax.Parser.Parser              as SyntPars   (tests)
 import Agda.Syntax.Position                   as SyntPosi   (tests)
 import Agda.Termination.Termination	      as TermTerm   (tests)
 import Agda.Termination.CallGraph	      as TermCall   (tests)
@@ -30,6 +31,7 @@
   , IntePrec.tests
   , InteRang.tests
   , InteOpti.tests
+  , SyntPars.tests
   , SyntPosi.tests
   , TermTerm.tests
   , TermRing.tests
diff --git a/src/full/Agda/TypeChecking/Constraints.hs b/src/full/Agda/TypeChecking/Constraints.hs
--- a/src/full/Agda/TypeChecking/Constraints.hs
+++ b/src/full/Agda/TypeChecking/Constraints.hs
@@ -1,12 +1,15 @@
 {-# LANGUAGE CPP #-}
 module Agda.TypeChecking.Constraints where
 
+import System.IO
+
 import Control.Monad.State
 import Control.Monad.Reader
 import Control.Monad.Error
 import Control.Applicative
 import Data.Map as Map
 import Data.List as List
+import Data.Set as Set
 
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad
@@ -18,6 +21,7 @@
 import {-# SOURCE #-} Agda.TypeChecking.Conversion
 import {-# SOURCE #-} Agda.TypeChecking.MetaVars
 import {-# SOURCE #-} Agda.TypeChecking.Empty
+import Agda.TypeChecking.Free
 
 import Agda.Utils.Fresh
 
@@ -29,7 +33,7 @@
 catchConstraint :: MonadTCM tcm => Constraint -> TCM Constraints -> tcm Constraints
 catchConstraint c v = liftTCM $
    catchError v $ \err ->
-   case err of
+   case errError err of
        PatternErr s -> put s >> buildConstraint c
        _	    -> throwError err
 
@@ -48,18 +52,18 @@
 guardConstraint :: MonadTCM tcm => tcm Constraints -> Constraint -> tcm Constraints
 guardConstraint m c = do
     cs <- solveConstraints =<< m
-    case List.partition isSortConstraint cs of   -- sort constraints doesn't block anything
+    case List.partition isNonBlocking cs of
 	(scs, []) -> (scs ++) <$> solveConstraint c
 	(scs, cs) -> (scs ++) <$> buildConstraint (Guarded c cs)
     where
-	isSortConstraint = isSC . clValue
-	isSC SortCmp{}     = True
-	isSC ValueCmp{}    = False
-	isSC TypeCmp{}     = False
-	isSC TelCmp{}      = False
-	isSC (Guarded c _) = isSC c
-	isSC UnBlock{}     = False
-        isSC IsEmpty{}     = False
+	isNonBlocking = isNB . clValue
+	isNB SortCmp{}        = True
+	isNB ValueCmp{}       = False
+	isNB TypeCmp{}        = False
+	isNB TelCmp{}         = False
+	isNB (Guarded c _)    = isNB c
+	isNB UnBlock{}        = False
+        isNB IsEmpty{}        = False
 
 -- | We ignore the constraint ids and (as in Agda) retry all constraints every time.
 --   We probably generate very few constraints.
@@ -70,13 +74,21 @@
     addConstraints cs
 
 solveConstraints :: MonadTCM tcm => Constraints -> tcm Constraints
+solveConstraints [] = return []
 solveConstraints cs = do
+    reportSDoc "tc.constr.solve" 60 $
+      sep [ text "{ solving", nest 2 $ prettyTCM cs ]
     n  <- length <$> getInstantiatedMetas
+    cs0 <- return cs
     cs <- concat <$> mapM (withConstraint solveConstraint) cs
     n' <- length <$> getInstantiatedMetas
-    if (n' > n)
+    reportSDoc "tc.constr.solve" 70 $
+      sep [ text "new constraints", nest 2 $ prettyTCM cs ]
+    cs <- if (n' > n)
 	then solveConstraints cs -- Go again if we made progress
 	else return cs
+    reportSLn "tc.constr.solve" 60 $ "solved constraints }"
+    return cs
 
 solveConstraint :: MonadTCM tcm => Constraint -> tcm Constraints
 solveConstraint (ValueCmp cmp a u v) = compareTerm cmp a u v
@@ -87,12 +99,11 @@
 solveConstraint (IsEmpty t)          = isEmptyTypeC t
 solveConstraint (UnBlock m)          = do
     inst <- mvInstantiation <$> lookupMeta m
-    reportSDoc "tc.constr.unblock" 15 $ text ("unblocking a metavar yields the constraint:" ++ show inst)
+    reportSDoc "tc.constr.unblock" 15 $ text ("unblocking a metavar yields the constraint: " ++ show inst)
     case inst of
       BlockedConst t -> do
-        verboseS "tc.constr.blocked" 15 $ do
-            d <- prettyTCM t
-            debug $ show m ++ " := " ++ show d
+        reportSDoc "tc.constr.blocked" 15 $
+          text ("blocked const " ++ show m ++ " :=") <+> prettyTCM t
         assignTerm m t
         return []
       PostponedTypeCheckingProblem cl -> enterClosure cl $ \(e, t, unblock) -> do
diff --git a/src/full/Agda/TypeChecking/Conversion.hs b/src/full/Agda/TypeChecking/Conversion.hs
--- a/src/full/Agda/TypeChecking/Conversion.hs
+++ b/src/full/Agda/TypeChecking/Conversion.hs
@@ -7,9 +7,11 @@
 import Control.Monad.State
 import Control.Monad.Error
 import Data.Generics
-import Data.Traversable hiding (mapM)
+import Data.Traversable hiding (mapM, sequence)
 import Data.List hiding (sort)
+import qualified Data.List as List
 
+import Agda.Syntax.Literal
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad
@@ -24,6 +26,8 @@
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Injectivity
 import Agda.TypeChecking.SizedTypes
+import Agda.TypeChecking.Monad.Builtin
+import Agda.TypeChecking.Level
 
 import Agda.Utils.Monad
 
@@ -66,10 +70,12 @@
     proofIrr <- proofIrrelevance
     isSize   <- isSizeType a'
     s        <- reduce $ getSort a'
+    mlvl     <- liftTCM $ (Just <$> primLevel) `catchError` \_ -> return Nothing
     case s of
       Prop | proofIrr -> return []
       _    | isSize   -> compareSizes cmp m n
       _               -> case unEl a' of
+        a | Just a == mlvl && cmp == CmpEq -> equalLevel m n
         Pi a _    -> equalFun (a,a') m n
         Fun a _   -> equalFun (a,a') m n
         MetaV x _ -> do
@@ -198,7 +204,7 @@
 	    _ | f1@(FunV _ _) <- funView m
 	      , f2@(FunV _ _) <- funView n -> equalFun f1 f2
 
-	    (Sort s1, Sort s2) -> compareSort cmp s1 s2
+	    (Sort s1, Sort s2) -> compareSort CmpEq s1 s2
 
 	    (Lit l1, Lit l2) | l1 == l2 -> return []
 	    (Var i iArgs, Var j jArgs) | i == j -> do
@@ -274,6 +280,13 @@
 compareArgs pols0 a (arg1 : args1) (arg2 : args2) = do
     let (pol, pols) = nextPolarity pols0
     a <- reduce a
+    reportSDoc "tc.conv.args" 30 $
+      sep [ text "compareArgs"
+          , nest 2 $ sep [ prettyTCM (arg1 : args1)
+                         , prettyTCM (arg2 : args2)
+                         ]
+          , nest 2 $ text ":" <+> prettyTCM a
+          ]
     case funView (unEl a) of
 	FunV (Arg _ b) _ -> do
 	    reportSDoc "tc.conv.args" 10 $
@@ -289,16 +302,16 @@
                             Contravariant -> compareTerm CmpLeq b y x
             cs1 <- cmp (unArg arg1) (unArg arg2)
 	    case (cs1, unEl a) of
-		(_:_, Pi _ c) | 0 `freeIn` absBody c
+                                -- We can safely ignore sort annotations here.
+		(_:_, Pi _ c) | 0 `freeInIgnoringSorts` absBody c
 		    -> do
                         reportSDoc "tc.conv.args" 15 $ sep
                           [ text "aborting compareArgs" <+> parens (text $ show pol)
-                          , nest 2 $ sep
-                              [ parens $ text (show pol)
-                              , prettyTCM arg1
+                          , nest 2 $ fsep
+                              [ prettyTCM arg1
                               , text "~~" <+> prettyTCM arg2
                               , text ":" <+> prettyTCM b
-                              , text "-->" <+> prettyTCM cs1
+                              , text "--->" <+> prettyTCM cs1
                               ]
                           ]
                         patternViolation   -- TODO: will duplicate work (all arguments checked so far)
@@ -323,14 +336,21 @@
           [ hsep [ text "compareType", prettyTCM ty1, prettyTCM cmp, prettyTCM ty2 ]
           , hsep [ text "   sorts:", prettyTCM s1, text " and ", prettyTCM s2 ]
           ]
-	cs1 <- compareSort cmp s1 s2 `catchError` \err -> case err of
-                  TypeError _ _ -> typeError $ UnequalTypes cmp ty1 ty2
+	cs1 <- compareSort CmpEq s1 s2 `catchError` \err -> case errError err of
+                  TypeError _ _ -> do
+                    -- This error will probably be more informative
+                    compareTerm cmp (sort s1) a1 a2
+                    -- Throw the original error if the above doesn't
+                    -- give an error (for instance, due to pending
+                    -- constraints).
+                    throwError err
                   _             -> throwError err
 	cs2 <- compareTerm cmp (sort s1) a1 a2
-        unless (null $ cs1 ++ cs2) $
+        cs  <- solveConstraints $ cs1 ++ cs2
+        unless (null cs) $
           reportSDoc "tc.conv.type" 9 $
-            text "   --> " <+> prettyTCM (cs1 ++ cs2)
-	return $ cs1 ++ cs2
+            text "   --> " <+> prettyTCM cs
+	return cs
 
 leqType :: MonadTCM tcm => Type -> Type -> tcm Constraints
 leqType = compareType CmpLeq
@@ -341,7 +361,10 @@
 
 compareSort :: MonadTCM tcm => Comparison -> Sort -> Sort -> tcm Constraints
 compareSort CmpEq  = equalSort
-compareSort CmpLeq = equalSort -- TODO: change to leqSort when we have better constraint solving
+compareSort CmpLeq = leqSort
+  -- TODO: change to leqSort when we have better constraint solving
+  --       or not? might not be needed if we get universe polymorphism
+  --       leqSort is still used when checking datatype declarations though
 
 -- | Check that the first sort is less or equal to the second.
 leqSort :: MonadTCM tcm => Sort -> Sort -> tcm Constraints
@@ -349,9 +372,11 @@
   ifM typeInType (return []) $
     catchConstraint (SortCmp CmpLeq s1 s2) $
     do	(s1,s2) <- reduce (s1,s2)
--- 	do  d1 <- prettyTCM s1
--- 	    d2 <- prettyTCM s2
--- 	    debug $ "leqSort   " ++ show d1 ++ " <= " ++ show d2
+        reportSDoc "tc.conv.sort" 10 $
+          sep [ text "leqSort"
+              , nest 2 $ fsep [ prettyTCM s1 <+> text "=<"
+                              , prettyTCM s2 ]
+              ]
 	case (s1,s2) of
 
 	    (Prop    , Prop    )	     -> return []
@@ -359,60 +384,267 @@
 	    (Suc _   , Prop    )	     -> notLeq s1 s2
 
 	    (Prop    , Type _  )	     -> return []
-	    (Type n  , Type m  ) | n <= m    -> return []
-				 | otherwise -> notLeq s1 s2
-	    (Suc s   , Type n  ) | 1 <= n    -> leqSort s (Type $ n - 1)
-				 | otherwise -> notLeq s1 s2
+	    (Type (Lit (LitLevel _ n)), Type (Lit (LitLevel _ m)))
+              | n <= m    -> return []
+	      | otherwise -> notLeq s1 s2
+            (Type a, Type b) -> leqLevel a b
+
+	    (Suc s   , Type (Lit (LitLevel _ n)))
+              | 1 <= n    -> leqSort s (mkType $ n - 1)
+	    (Suc s   , Type b  ) -> notLeq s1 s2  -- TODO
+            (Suc s1  , Suc s2  ) -> leqSort s1 s2 -- TODO: not what we want for Prop(?)
 	    (_	     , Suc _   )	     -> equalSort s1 s2
 
 	    (Lub a b , _       )	     -> liftM2 (++) (leqSort a s2) (leqSort b s2)
 	    (_	     , Lub _ _ )	     -> equalSort s1 s2
 
-	    (MetaS x , MetaS y ) | x == y    -> return []
-	    (MetaS x , _       )	     -> equalSort s1 s2
-	    (_	     , MetaS x )	     -> equalSort s1 s2
+	    (MetaS{} , _       )	     -> equalSort s1 s2
+	    (_	     , MetaS{} )	     -> equalSort s1 s2
+            (Inf     , Inf     )             -> return []
+            (Inf     , _       )             -> notLeq s1 s2
+            (_       , Inf     )             -> return []
+            (DLub{}  , _       )             -> equalSort s1 s2
+            (_       , DLub{}  )             -> equalSort s1 s2
     where
 	notLeq s1 s2 = typeError $ NotLeqSort s1 s2
 
+leqLevel :: MonadTCM tcm => Term -> Term -> tcm Constraints
+leqLevel a b = liftTCM $ do
+  reportSDoc "tc.conv.nat" 10 $
+    text "compareLevel" <+>
+      sep [ prettyTCM a <+> text "=<"
+          , prettyTCM b ]
+  n <- levelView a
+  m <- levelView b
+  leqView n m
+  where
+    leqView n@(Max as) m@(Max bs) = do
+      reportSDoc "tc.conv.nat" 10 $
+        text "compareLevelView" <+>
+          sep [ text (show n) <+> text "=<"
+              , text (show m) ]
+      case (as, bs) of
+        (_, [])  -> concat <$> sequence [ leqPlusView a (ClosedLevel 0) | a <- as ]
+        (_, [b]) -> concat <$> sequence [ leqPlusView a b | a <- as ]
+        _        -> do
+          -- Each a needs to be less than at least one of the b's
+          sequence [ choice [ leqPlusView a b | b <- bs ] | a <- as ]
+          return []
+    leqPlusView n m = do
+      reportSDoc "tc.conv.nat" 10 $
+        text "comparePlusView" <+>
+          sep [ text (show n) <+> text "=<"
+              , text (show m) ]
+      case (n, m) of
+        -- Both closed
+        (ClosedLevel n, ClosedLevel m)
+          | n <= m -> ok
+
+        -- Both neutral
+        (Plus n (NeutralLevel a), Plus m (NeutralLevel b))
+          | n <= m -> do
+            lvl <- primLevel
+            equalTerm (El (mkType 0) lvl) a b
+
+        -- closed ≤ any
+        (ClosedLevel n, Plus m _)
+          | n <= m -> ok
+
+        -- Any blocked or meta
+        (Plus _ BlockedLevel{}, _) -> postpone
+        (_, Plus _ BlockedLevel{}) -> postpone
+        (Plus _ MetaLevel{}, _)    -> postpone
+        (_, Plus _ MetaLevel{})    -> postpone
+
+        _ -> notok
+    ok       = return []
+    notok    = typeError $ NotLeqSort (Type a) (Type b)
+    postpone = patternViolation
+
+    choice []     = patternViolation
+    choice (m:ms) = noConstraints m `catchError` \_ -> choice ms
+--       case errError e of
+--         PatternErr{} -> choice ms
+--         _            -> throwError e
+
+equalLevel :: MonadTCM tcm => Term -> Term -> tcm Constraints
+equalLevel a b = do
+  Max as <- levelView a
+  Max bs <- levelView b
+  a <- unLevelView (Max as)
+  b <- unLevelView (Max bs)
+  liftTCM $ check a b as bs
+  where
+    check a b as bs = do
+      let getLvl = El (mkType 0) <$> primLevel
+      reportSDoc "tc.conv.nat" 20 $
+        sep [ text "equalLevel"
+            , nest 2 $ sep [ prettyTCM a <+> text "=="
+                           , prettyTCM b
+                           ]
+            , nest 2 $ sep [ text (show (Max as)) <+> text "=="
+                           , text (show (Max bs))
+                           ]
+            ]
+      let a === b   = do
+            lvl <- getLvl
+            equalAtom lvl a b
+          as =!= bs = do a <- unLevelView (Max as)
+                         b <- unLevelView (Max bs)
+                         a === b
+      case (as, bs) of
+        _ | List.sort as == List.sort bs -> ok
+          | any isBlocked (as ++ bs) -> do
+              lvl <- getLvl
+              liftTCM $ useInjectivity CmpEq lvl a b
+
+        -- 0 == any
+        ([], _) -> wrap $ concat <$> sequence [ as =!= [b] | b <- bs ]
+        (_, []) -> wrap $ concat <$> sequence [ [a] =!= bs | a <- as ]
+
+        -- closed == closed
+        ([ClosedLevel n], [ClosedLevel m])
+          | n == m    -> ok
+          | otherwise -> notok
+
+        -- closed == neutral
+        ([ClosedLevel{}], _) | any isNeutral bs -> notok
+        (_, [ClosedLevel{}]) | any isNeutral as -> notok
+
+        -- meta == any
+        ([Plus n (MetaLevel x as)], _)
+          | any (isThisMeta x) bs -> postpone
+          | otherwise             -> do
+            bs' <- mapM (subtr n) bs
+            lvl <- getLvl
+            assignV lvl x as =<< unLevelView (Max bs')
+        (_, [Plus n (MetaLevel x bs)])
+          | any (isThisMeta x) as -> postpone
+          | otherwise             -> do
+            as' <- mapM (subtr n) as
+            lvl <- getLvl
+            assignV lvl x bs =<< unLevelView (Max as')
+
+        -- any other metas
+        _ | any isMeta (as ++ bs) -> postpone
+
+        -- neutral/closed == neutral/closed
+        _ | all isNeutralOrClosed (as ++ bs) -> as =!= bs
+
+        -- more cases?
+        _ -> postpone
+
+      where
+        ok       = return []
+        notok    = typeError $ UnequalSorts (Type a) (Type b)
+        postpone = patternViolation
+
+        -- Make sure to give a sensible error message
+        wrap m = m `catchError` \err ->
+          case errError err of
+            TypeError{} -> notok
+            _           -> throwError err
+
+        subtr n (ClosedLevel m)
+          | m >= n    = return $ ClosedLevel (m - n)
+          | otherwise = notok
+        subtr n (Plus m a)
+          | m >= n    = return $ Plus (m - n) a
+        subtr _ (Plus _ BlockedLevel{}) = postpone
+        subtr _ (Plus _ MetaLevel{})    = postpone
+        subtr _ (Plus _ NeutralLevel{}) = notok
+
+        isNeutral (Plus _ NeutralLevel{}) = True
+        isNeutral _                       = False
+
+        isClosed ClosedLevel{} = True
+        isClosed _             = False
+
+        isNeutralOrClosed l = isClosed l || isNeutral l
+
+        isBlocked (Plus _ BlockedLevel{}) = True
+        isBlocked _                     = False
+
+        isMeta (Plus _ MetaLevel{}) = True
+        isMeta _                  = False
+
+        isThisMeta x (Plus _ (MetaLevel y _)) = x == y
+        isThisMeta _ _                      = False
+
+
 -- | Check that the first sort equal to the second.
 equalSort :: MonadTCM tcm => Sort -> Sort -> tcm Constraints
 equalSort s1 s2 =
   ifM typeInType (return []) $
-    catchConstraint (SortCmp CmpEq s1 s2) $
-    do	(s1,s2) <- reduce (s1,s2)
--- 	do  d1 <- prettyTCM s1
--- 	    d2 <- prettyTCM s2
--- 	    debug $ "equalSort " ++ show d1 ++ " == " ++ show d2
+    catchConstraint (SortCmp CmpEq s1 s2) $ do
+        (s1,s2) <- reduce (s1,s2)
+        reportSDoc "tc.conv.sort" 10 $
+          sep [ text "equalSort"
+              , nest 2 $ fsep [ prettyTCM s1 <+> text "=="
+                              , prettyTCM s2 ]
+              ]
 	case (s1,s2) of
 
-	    (MetaS x , MetaS y ) | x == y    -> return []
-				 | otherwise -> do
+	    (MetaS x us , MetaS y vs) -> do
+              s1 <- normalise s1
+              s2 <- normalise s2
+              if s1 == s2 then return []
+			  else do
 		[p1, p2] <- mapM getMetaPriority [x, y]
-		if p1 >= p2 then assignS x s2
-			    else assignS y s1
-	    (MetaS x , _       )	     -> assignS x s2
-	    (_	     , MetaS x )	     -> equalSort s2 s1
+		if p1 >= p2 then assignS x us s2
+			    else assignS y vs s1
+	    (MetaS x vs, _       ) -> assignS x vs s2
+	    (_	     , MetaS{} ) -> equalSort s2 s1
 
-	    (Prop    , Prop    )	     -> return []
-	    (Type _  , Prop    )	     -> notEq s1 s2
-	    (Prop    , Type _  )	     -> notEq s1 s2
+	    (Prop    , Prop    ) -> return []
+	    (Type _  , Prop    ) -> notEq s1 s2
+	    (Prop    , Type _  ) -> notEq s1 s2
 
-	    (Type n  , Type m  ) | n == m    -> return []
-				 | otherwise -> notEq s1 s2
-	    (Suc s   , Prop    )	     -> notEq s1 s2
-	    (Suc s   , Type 0  )	     -> notEq s1 s2
-	    (Suc s   , Type 1  )	     -> buildConstraint (SortCmp CmpEq s1 s2)
-	    (Suc s   , Type n  )	     -> equalSort s (Type $ n - 1)
-	    (Prop    , Suc s   )	     -> notEq s1 s2
-	    (Type 0  , Suc s   )	     -> notEq s1 s2
-	    (Type 1  , Suc s   )	     -> buildConstraint (SortCmp CmpEq s1 s2)
-	    (Type n  , Suc s   )	     -> equalSort (Type $ n - 1) s
-	    (_	     , Suc _   )	     -> buildConstraint (SortCmp CmpEq s1 s2)
-	    (Suc _   , _       )	     -> buildConstraint (SortCmp CmpEq s1 s2)
+            (Type (Lit n), Type (Lit m))
+              | n == m           -> return []
+              | otherwise        -> notEq s1 s2
+            (Type a  , Type b  ) -> equalLevel a b
+	    (Suc s   , Prop    ) -> notEq s1 s2
+	    (Suc s   , Type (Lit (LitLevel _ 0))) -> notEq s1 s2
+	    (Suc s   , Type (Lit (LitLevel _ 1))) -> buildConstraint (SortCmp CmpEq s1 s2)
+	    (Suc s   , Type (Lit (LitLevel _ n))) -> equalSort s (mkType $ n - 1)
+	    (Prop    , Suc s   ) -> notEq s1 s2
+	    (Type (Lit (LitLevel _ 0))  , Suc s   ) -> notEq s1 s2
+	    (Type (Lit (LitLevel _ 1))  , Suc s   ) -> buildConstraint (SortCmp CmpEq s1 s2)
+	    (Type (Lit (LitLevel _ n))  , Suc s   ) -> equalSort (mkType $ n - 1) s
+            (Suc s1  , Suc s2  ) -> equalSort s1 s2 -- TODO: not what we want for Prop(?)
+	    (_	     , Suc _   ) -> buildConstraint (SortCmp CmpEq s1 s2)
+	    (Suc _   , _       ) -> buildConstraint (SortCmp CmpEq s1 s2)
 
-	    (Lub _ _ , _       )	     -> buildConstraint (SortCmp CmpEq s1 s2)
-	    (_	     , Lub _ _ )	     -> buildConstraint (SortCmp CmpEq s1 s2)
+            (Inf     , Inf     )             -> return []
+            (Inf     , _       )             -> notEq s1 s2
+            (_       , Inf     )             -> notEq s1 s2
+            (s0@(Type (Lit (LitLevel _ 0))), Lub s1 s2) -> do
+              cs1 <- equalSort s0 s1
+              cs2 <- equalSort s0 s2
+              return $ cs1 ++ cs2
+            (Lub s1 s2, s0@(Type (Lit (LitLevel _ 0)))) -> do
+              cs1 <- equalSort s1 s0
+              cs2 <- equalSort s2 s0
+              return $ cs1 ++ cs2
+            (Lub{}   , Lub{}   ) -> do
+              (s1, s2) <- normalise (s1, s2)
+              if s1 == s2
+                then return []
+                else buildConstraint (SortCmp CmpEq s1 s2)
+	    (Lub _ _ , _       ) -> buildConstraint (SortCmp CmpEq s1 s2)
+	    (_	     , Lub _ _ ) -> buildConstraint (SortCmp CmpEq s1 s2)
 
+            (DLub s1 s2, s0@(Type (Lit (LitLevel _ 0)))) -> do
+              cs1 <- equalSort s1 s0
+              cs2 <- underAbstraction_ s2 $ \s2 -> equalSort s2 s0
+              return $ cs1 ++ cs2
+            (s0@(Type (Lit (LitLevel _ 0))), DLub s1 s2) -> do
+              cs1 <- equalSort s0 s1
+              cs2 <- underAbstraction_ s2 $ \s2 -> equalSort s0 s2
+              return $ cs1 ++ cs2
+            (DLub{}  , _       )             -> buildConstraint (SortCmp CmpEq s1 s2)
+            (_       , DLub{}  )             -> buildConstraint (SortCmp CmpEq s1 s2)
     where
 	notEq s1 s2 = typeError $ UnequalSorts s1 s2
 
diff --git a/src/full/Agda/TypeChecking/Conversion.hs-boot b/src/full/Agda/TypeChecking/Conversion.hs-boot
--- a/src/full/Agda/TypeChecking/Conversion.hs-boot
+++ b/src/full/Agda/TypeChecking/Conversion.hs-boot
@@ -15,6 +15,5 @@
 equalArgs :: MonadTCM tcm => Type -> Args -> Args -> tcm Constraints
 equalType :: MonadTCM tcm => Type -> Type -> tcm Constraints
 equalSort :: MonadTCM tcm => Sort -> Sort -> tcm Constraints
-leqSort   :: MonadTCM tcm => Sort -> Sort -> tcm Constraints
 
 
diff --git a/src/full/Agda/TypeChecking/Errors.hs b/src/full/Agda/TypeChecking/Errors.hs
--- a/src/full/Agda/TypeChecking/Errors.hs
+++ b/src/full/Agda/TypeChecking/Errors.hs
@@ -2,6 +2,7 @@
 module Agda.TypeChecking.Errors
     ( prettyError
     , PrettyTCM(..)
+    , tcErrString
     ) where
 
 import Control.Applicative ( (<$>) )
@@ -26,6 +27,7 @@
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Pretty
 
+import Agda.Utils.FileName
 import Agda.Utils.Monad
 import Agda.Utils.Trace
 import Agda.Utils.Size
@@ -69,11 +71,12 @@
     r = nameBindingSite $ qnameName q
 
 tcErrString :: TCErr -> String
-tcErrString err = show (getRange err) ++ " " ++ case err of
-    TypeError _ cl -> errorString $ clValue cl
-    Exception r s  -> show r ++ " " ++ s
-    PatternErr _   -> "PatternErr"
-    AbortAssign _  -> "AbortAssign"
+tcErrString err = show (getRange err) ++ " " ++ case errError err of
+    TypeError _ cl  -> errorString $ clValue cl
+    Exception r s   -> show r ++ " " ++ s
+    IOException r e -> show r ++ " " ++ show e
+    PatternErr _    -> "PatternErr"
+    AbortAssign _   -> "AbortAssign"
 
 errorString :: TypeError -> String
 errorString err = case err of
@@ -81,6 +84,7 @@
     AmbiguousName _ _			       -> "AmbiguousName"
     AmbiguousParseForApplication _ _	       -> "AmbiguousParseForApplication"
     AmbiguousParseForLHS _ _		       -> "AmbiguousParseForLHS"
+    AmbiguousTopLevelModuleName {}	       -> "AmbiguousTopLevelModuleName"
     BothWithAndRHS                             -> "BothWithAndRHS"
     BuiltinInParameterisedModule _	       -> "BuiltinInParameterisedModule"
     BuiltinMustBeConstructor _ _               -> "BuiltinMustBeConstructor"
@@ -113,8 +117,9 @@
     MetaCannotDependOn _ _ _		       -> "MetaCannotDependOn"
     MetaOccursInItself _		       -> "MetaOccursInItself"
     ModuleArityMismatch _ _ _                  -> "ModuleArityMismatch"
+    ModuleDefinedInOtherFile {}                -> "ModuleDefinedInOtherFile"
     ModuleDoesntExport _ _		       -> "ModuleDoesntExport"
-    ModuleNameDoesntMatchFileName _	       -> "ModuleNameDoesntMatchFileName"
+    ModuleNameDoesntMatchFileName {}	       -> "ModuleNameDoesntMatchFileName"
     NoBindingForBuiltin _		       -> "NoBindingForBuiltin"
     NoParseForApplication _		       -> "NoParseForApplication"
     NoParseForLHS _			       -> "NoParseForLHS"
@@ -134,6 +139,7 @@
     NotLeqSort _ _			       -> "NotLeqSort"
     NotStrictlyPositive _ _		       -> "NotStrictlyPositive"
     NothingAppliedToHiddenArg _		       -> "NothingAppliedToHiddenArg"
+    OverlappingProjects {}                     -> "OverlappingProjects"
     PatternShadowsConstructor {}               -> "PatternShadowsConstructor"
     PropMustBeSingleton			       -> "PropMustBeSingleton"
     RepeatedVariablesInPattern _	       -> "RepeatedVariablesInPattern"
@@ -167,16 +173,17 @@
     WrongNumberOfConstructorArguments _ _ _    -> "WrongNumberOfConstructorArguments"
 
 instance PrettyTCM TCErr where
-    prettyTCM err = case err of
+    prettyTCM err = case errError err of
 	TypeError s e -> do
 	    s0 <- get
 	    put s
 	    d <- sayWhen (clTrace e) $ prettyTCM e
 	    put s0
 	    return d
-	Exception r s -> sayWhere r $ fwords s
-	PatternErr _  -> sayWhere err $ panic "uncaught pattern violation"
-	AbortAssign _ -> sayWhere err $ panic "uncaught aborted assignment"
+	Exception r s   -> sayWhere r $ fwords s
+	IOException r e -> sayWhere r $ fwords $ show e
+	PatternErr _    -> sayWhere err $ panic "uncaught pattern violation"
+	AbortAssign _   -> sayWhere err $ panic "uncaught aborted assignment"
 
 instance PrettyTCM TypeError where
     prettyTCM err = do
@@ -348,23 +355,35 @@
 		$$ nest 2 (vcat $ map prettyTCM cs)
 	    CyclicModuleDependency ms ->
 		fsep (pwords "cyclic module dependency:")
-		$$ nest 2 (vcat $ map (text . show) ms)
+		$$ nest 2 (vcat $ map pretty ms)
 	    FileNotFound x files ->
-		fsep ( pwords "Failed to find source of module" ++ [text $ show x] ++
+		fsep ( pwords "Failed to find source of module" ++ [pretty x] ++
 		       pwords "in any of the following locations:"
-		     ) $$ nest 2 (vcat $ map text files)
+		     ) $$ nest 2 (vcat $ map (text . filePath) files)
+            OverlappingProjects f m1 m2 ->
+	        fsep ( pwords "The file" ++ [text (filePath f)] ++
+                       pwords "can be accessed via several project roots. Both" ++
+                       [pretty m1] ++ pwords "and" ++ [pretty m2] ++
+                       pwords "point to this file."
+                     )
+	    AmbiguousTopLevelModuleName x files ->
+		fsep ( pwords "Ambiguous module name. The module name" ++
+                       [pretty x] ++
+		       pwords "could refer to any of the following files:"
+		     ) $$ nest 2 (vcat $ map (text . filePath) files)
 	    ClashingFileNamesFor x files ->
 		fsep ( pwords "Multiple possible sources for module" ++ [text $ show x] ++
 		       pwords "found:"
-		     ) $$ nest 2 (vcat $ map text files)
-	    ModuleNameDoesntMatchFileName given -> fsep $
-              pwords "The name of the top level module does not match the file name. The module" ++
-              [ text (show given) ] ++ pwords "should be defined in either" ++
-              [ text ("<top-level>" </> mod ".agda")
-              , text "or"
-              , text ("<top-level>" </> mod ".lagda") <> text "."
-              ]
-              where mod = C.moduleNameToFileName (mnameToConcrete given)
+		     ) $$ nest 2 (vcat $ map (text . filePath) files)
+            ModuleDefinedInOtherFile mod file file' -> fsep $
+              pwords "You tried to load" ++ [text (filePath file)] ++
+              pwords "which defines the module" ++ [pretty mod <> text "."] ++
+              pwords "However, according to the include path this module should" ++
+              pwords "be defined in" ++ [text (filePath file') <> text "."]
+	    ModuleNameDoesntMatchFileName given files ->
+              fsep (pwords "The name of the top level module does not match the file name. The module" ++
+                   [ pretty given ] ++ pwords "should be defined in one of the following files:")
+	      $$ nest 2 (vcat $ map (text . filePath) files)
             BothWithAndRHS -> fsep $
               pwords "Unexpected right hand side"
 	    NotInScope xs ->
@@ -584,8 +603,8 @@
 		[ C.Data r ind d (map bind bs) (C.Underscore noRange Nothing)
 		    $ map simpleDecl cs
 		]
-	      D.RecDef r fx p a d bs cs ->
-		[ C.Record r d (map bind bs) (C.Underscore noRange Nothing)
+	      D.RecDef r fx p a d c bs cs ->
+		[ C.Record r d (name <$> c) (map bind bs) (C.Underscore noRange Nothing)
 		    $ map simpleDecl cs
 		]
 	      where
@@ -593,11 +612,13 @@
 		bind (C.DomainFull b) = b
 		bind (C.DomainFree h x) = C.TypedBindings r h [C.TBind r [x] (C.Underscore r Nothing)]
 		  where r = getRange x
-		-- bind _		      = __IMPOSSIBLE__
 
+                name (D.Axiom _ _ _ _ n _) = n
+                name _                     = __IMPOSSIBLE__
+
 	    simpleDecl d = case d of
 		D.Axiom _ _ _ _ x e		       -> C.TypeSig x e
-		D.NiceField _ _ _ _ x e		       -> C.Field x e
+		D.NiceField _ _ _ _ h x e	       -> C.Field h x e
 		D.PrimitiveFunction r _ _ _ x e	       -> C.Primitive r [C.TypeSig x e]
 		D.NiceDef r ds _ _		       -> C.Mutual r ds
 		D.NiceModule r _ _ x tel _	       -> C.Module r x tel []
diff --git a/src/full/Agda/TypeChecking/Free.hs b/src/full/Agda/TypeChecking/Free.hs
--- a/src/full/Agda/TypeChecking/Free.hs
+++ b/src/full/Agda/TypeChecking/Free.hs
@@ -3,9 +3,11 @@
 -- | Computing the free variables of a term.
 module Agda.TypeChecking.Free
     ( FreeVars(..)
-    , Free(..)
+    , Free
+    , freeVars
     , allVars
     , freeIn
+    , freeInIgnoringSorts
     ) where
 
 import qualified Data.Set as Set
@@ -52,45 +54,69 @@
 
 -- | Doesn't go inside metas.
 class Free a where
-  freeVars :: a -> FreeVars
+  freeVars' :: FreeConf -> a -> FreeVars
 
+data FreeConf = FreeConf
+  { fcIgnoreSorts :: Bool
+    -- ^ Ignore free variables in sorts.
+  }
+
+freeVars :: Free a => a -> FreeVars
+freeVars = freeVars' FreeConf{ fcIgnoreSorts = False }
+
 instance Free Term where
-  freeVars t = case t of
-    Var n ts   -> singleton n `union` freeVars ts
-    Lam _ t    -> freeVars t
+  freeVars' conf t = case t of
+    Var n ts   -> singleton n `union` freeVars' conf ts
+    Lam _ t    -> freeVars' conf t
     Lit _      -> empty
-    Def _ ts   -> freeVars ts
-    Con _ ts   -> freeVars ts
-    Pi a b     -> freeVars (a,b)
-    Fun a b    -> freeVars (a,b)
-    Sort _     -> empty
-    MetaV _ ts -> flexible $ freeVars ts
+    Def _ ts   -> freeVars' conf ts
+    Con _ ts   -> freeVars' conf ts
+    Pi a b     -> freeVars' conf (a,b)
+    Fun a b    -> freeVars' conf (a,b)
+    Sort s     -> freeVars' conf s
+    MetaV _ ts -> flexible $ freeVars' conf ts
 
 instance Free Type where
-  freeVars (El _ t) = freeVars t
+  freeVars' conf (El s t) = freeVars' conf (s, t)
 
+instance Free Sort where
+  freeVars' conf s
+    | fcIgnoreSorts conf = empty
+    | otherwise          = case s of
+      Type a     -> freeVars' conf a
+      Suc s      -> freeVars' conf s
+      Lub s1 s2  -> freeVars' conf (s1, s2)
+      Prop       -> empty
+      Inf        -> empty
+      MetaS _ ts -> flexible $ freeVars' conf ts
+      DLub s1 s2 -> freeVars' conf (s1, s2)
+
 instance Free a => Free [a] where
-  freeVars xs = unions $ map freeVars xs
+  freeVars' conf xs = unions $ map (freeVars' conf) xs
 
 instance (Free a, Free b) => Free (a,b) where
-  freeVars (x,y) = freeVars x `union` freeVars y
+  freeVars' conf (x,y) = freeVars' conf x `union` freeVars' conf y
 
 instance Free a => Free (Arg a) where
-  freeVars = freeVars . unArg
+  freeVars' conf = freeVars' conf . unArg
 
 instance Free a => Free (Abs a) where
-  freeVars (Abs _ b) = mapFV (subtract 1) $ delete 0 $ freeVars b
+  freeVars' conf (Abs _ b) = mapFV (subtract 1) $ delete 0 $ freeVars' conf b
 
 instance Free Telescope where
-  freeVars EmptyTel	     = empty
-  freeVars (ExtendTel a tel) = freeVars (a, tel)
+  freeVars' conf EmptyTel	     = empty
+  freeVars' conf (ExtendTel a tel) = freeVars' conf (a, tel)
 
 instance Free ClauseBody where
-  freeVars (Body t)   = freeVars t
-  freeVars (Bind b)   = freeVars b
-  freeVars (NoBind b) = freeVars b
-  freeVars  NoBody    = empty
+  freeVars' conf (Body t)   = freeVars' conf t
+  freeVars' conf (Bind b)   = freeVars' conf b
+  freeVars' conf (NoBind b) = freeVars' conf b
+  freeVars' conf  NoBody    = empty
 
 freeIn :: Free a => Nat -> a -> Bool
 freeIn v t = v `Set.member` allVars (freeVars t)
+
+freeInIgnoringSorts :: Free a => Nat -> a -> Bool
+freeInIgnoringSorts v t =
+  v `Set.member` allVars (freeVars' FreeConf{ fcIgnoreSorts = True } t)
 
diff --git a/src/full/Agda/TypeChecking/Injectivity.hs b/src/full/Agda/TypeChecking/Injectivity.hs
--- a/src/full/Agda/TypeChecking/Injectivity.hs
+++ b/src/full/Agda/TypeChecking/Injectivity.hs
@@ -186,11 +186,12 @@
           case h of
             Just h  -> compareTerm cmp a u v
             Nothing -> patternViolation
-        `catchError` \err -> case err of
-          TypeError _ _ -> throwError err
-          Exception _ _ -> throwError err
-          PatternErr _  -> fallBack
-          AbortAssign _ -> fallBack
+        `catchError` \err -> case errError err of
+          TypeError   {} -> throwError err
+          Exception   {} -> throwError err
+          IOException {} -> throwError err
+          PatternErr  {} -> fallBack
+          AbortAssign {} -> fallBack
 
     nextMeta = do
       m : ms <- get
diff --git a/src/full/Agda/TypeChecking/Level.hs b/src/full/Agda/TypeChecking/Level.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/Level.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE CPP #-}
+module Agda.TypeChecking.Level where
+
+import Control.Monad.Error
+import Control.Applicative
+import Data.List as List
+
+import Agda.Syntax.Position
+import Agda.Syntax.Common
+import Agda.Syntax.Literal
+import Agda.Syntax.Internal
+import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Monad.Builtin
+
+import Agda.Utils.Impossible
+#include "../undefined.h"
+
+newtype LevelView = Max [PlusView]
+  deriving (Show)
+
+data PlusView = ClosedLevel Integer
+              | Plus Integer LevelAtom
+  deriving (Show, Eq)
+
+data LevelAtom = MetaLevel MetaId Args
+             | BlockedLevel Term
+             | NeutralLevel Term
+  deriving (Show, Eq, Ord)
+
+instance Ord PlusView where
+  compare ClosedLevel{} Plus{}            = LT
+  compare Plus{} ClosedLevel{}            = GT
+  compare (ClosedLevel n) (ClosedLevel m) = compare n m
+  compare (Plus n a) (Plus m b)           = compare (a,n) (b,m)
+
+
+data LevelKit = LevelKit
+  { levelSuc   :: Term -> Term
+  , levelMax   :: Term -> Term -> Term
+  , levelZero  :: Term
+  , sucName  :: QName
+  , maxName  :: QName
+  , zeroName :: QName
+  }
+
+levelSucFunction :: MonadTCM tcm => tcm (Term -> Term)
+levelSucFunction = do
+  suc <- primLevelSuc
+  return $ \a -> suc `apply` [Arg NotHidden a]
+
+builtinLevelKit :: MonadTCM tcm => tcm (Maybe LevelKit)
+builtinLevelKit = liftTCM $ do
+    zero@(Con z []) <- primLevelZero
+    suc@(Con s []) <- primLevelSuc
+    max@(Def m []) <- primLevelMax
+    let a @@ b = a `apply` [Arg NotHidden b]
+    return $ Just $ LevelKit
+      { levelSuc = \a -> suc @@ a
+      , levelMax = \a b -> max @@ a @@ b
+      , levelZero = zero
+      , sucName = s
+      , maxName = m
+      , zeroName = z
+      }
+  `catchError` \_ -> return Nothing
+
+unLevelAtom :: LevelAtom -> Term
+unLevelAtom (MetaLevel x as) = MetaV x as
+unLevelAtom (BlockedLevel a) = a
+unLevelAtom (NeutralLevel a) = a
+
+unLevelView :: MonadTCM tcm => LevelView -> tcm Term
+unLevelView nv = case nv of
+    Max []            -> return $ Lit $ LitLevel noRange 0
+    Max [ClosedLevel n] -> return $ Lit $ LitLevel noRange n
+    Max [Plus 0 a]    -> return $ unLevelAtom a
+    Max [a]           -> do
+      suc <- primLevelSuc
+      return $ unPlusV (\n -> suc `apply` [Arg NotHidden n]) a
+    Max as -> do
+      Just LevelKit{ levelSuc = suc, levelMax = max } <- builtinLevelKit
+      return $ case map (unPlusV suc) as of
+        [a] -> a
+        []  -> __IMPOSSIBLE__
+        as  -> foldr1 max as
+  where
+    unPlusV suc (ClosedLevel n) = Lit (LitLevel noRange n)
+    unPlusV suc (Plus n a)    = foldr (.) id (genericReplicate n suc) (unLevelAtom a)
+
+maybePrimCon :: MonadTCM tcm => TCM Term -> tcm (Maybe QName)
+maybePrimCon prim = liftTCM $ do
+    Con c [] <- prim
+    return (Just c)
+  `catchError` \_ -> return Nothing
+
+maybePrimDef :: MonadTCM tcm => TCM Term -> tcm (Maybe QName)
+maybePrimDef prim = liftTCM $ do
+    Def f [] <- prim
+    return (Just f)
+  `catchError` \_ -> return Nothing
+
+levelView :: MonadTCM tcm => Term -> tcm LevelView
+levelView a = do
+  msuc <- maybePrimCon primLevelSuc
+  mzer <- maybePrimCon primLevelZero
+  mmax <- maybePrimDef primLevelMax
+  let view a =
+        case a of
+          Con s [Arg NotHidden a]
+            | Just s == msuc -> inc <$> view a
+          Con z []
+            | Just z == mzer -> return $ closed 0
+          Lit (LitLevel _ n)   -> return $ closed n
+          Def m [Arg NotHidden a, Arg NotHidden b]
+            | Just m == mmax -> lub <$> view a <*> view b
+          _                  -> mkAtom a
+  view =<< normalise a
+  where
+    mkAtom a = do
+      b <- reduceB a
+      return $ case b of
+        NotBlocked (MetaV m as) -> atom $ MetaLevel m as
+        NotBlocked a            -> atom $ NeutralLevel a
+        Blocked _ a             -> atom $ BlockedLevel a
+
+    atom a = Max [Plus 0 a]
+
+    closed n = maxim [ClosedLevel n]
+
+    inc (Max as) = Max $ map inc' as
+      where
+        inc' (ClosedLevel n) = ClosedLevel $ n + 1
+        inc' (Plus n a)    = Plus (n + 1) a
+
+    maxim as = Max $ ns ++ List.sort bs
+      where
+        ns = case [ n | ClosedLevel n <- as, n > 0 ] of
+          []  -> []
+          ns  -> [ClosedLevel $ maximum ns]
+        bs = subsume [ b | b@Plus{} <- as ]
+        
+        subsume (ClosedLevel{} : _) = __IMPOSSIBLE__
+        subsume [] = []
+        subsume (Plus n a : bs)
+          | not $ null ns = subsume bs
+          | otherwise     = Plus n a : subsume [ b | b@(Plus _ a') <- bs, a /= a' ]
+          where
+            ns = [ m | Plus m a'  <- bs, a == a', m > n ]
+
+    lub (Max as) (Max bs) = maxim $ as ++ bs
+
diff --git a/src/full/Agda/TypeChecking/MetaVars.hs b/src/full/Agda/TypeChecking/MetaVars.hs
--- a/src/full/Agda/TypeChecking/MetaVars.hs
+++ b/src/full/Agda/TypeChecking/MetaVars.hs
@@ -11,15 +11,17 @@
 import Data.List as List hiding (sort)
 import qualified Data.Map as Map
 import qualified Data.Set as Set
-import qualified System.IO.UTF8 as UTF8
+import qualified Agda.Utils.IO.Locale as LocIO
 
 import Agda.Syntax.Common
 import qualified Agda.Syntax.Info as Info
 import Agda.Syntax.Internal
 import Agda.Syntax.Position
+import Agda.Syntax.Literal
 import qualified Agda.Syntax.Abstract as A
 
 import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Constraints
@@ -29,6 +31,8 @@
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.EtaContract
 
+import Agda.TypeChecking.MetaVars.Occurs
+
 import {-# SOURCE #-} Agda.TypeChecking.Conversion
 
 import Agda.Utils.Fresh
@@ -52,7 +56,7 @@
 -- | Check whether a meta variable is a place holder for a blocked term.
 isBlockedTerm :: MonadTCM tcm => MetaId -> tcm Bool
 isBlockedTerm x = do
-    reportS "tc.meta.blocked" 12 $ "is " ++ show x ++ " a blocked term? "
+    reportSLn "tc.meta.blocked" 12 $ "is " ++ show x ++ " a blocked term? "
     i <- mvInstantiation <$> lookupMeta x
     let r = case i of
 	    BlockedConst{}                 -> True
@@ -60,7 +64,7 @@
 	    InstV{}                        -> False
 	    InstS{}                        -> False
 	    Open{}                         -> False
-    reportSLn "tc.meta.blocked" 12 $ if r then "yes" else "no"
+    reportSLn "tc.meta.blocked" 12 $ if r then "  yes" else "  no"
     return r
 
 class HasMeta t where
@@ -72,18 +76,34 @@
     metaVariable = MetaV
 
 instance HasMeta Sort where
-    metaInstance     = return . InstS
-    metaVariable x _ = MetaS x
+    metaInstance = return . InstS . Sort
+    metaVariable = MetaS
 
+-- TODO
+(=:=) :: (MonadTCM tcm) => MetaId -> Term -> tcm ()
+x =:= t = do
+    reportSLn "tc.meta.assign" 70 $ show x ++ " := " ++ show t
+    store <- getMetaStore
+    modify $ \st -> st { stMetaStore = ins x (InstS $ killRange t) store }
+    etaExpandListeners x
+    wakeupConstraints
+    reportSLn "tc.meta.assign" 20 $ "completed assignment of " ++ show x
+  where
+    ins x i store = Map.adjust (inst i) x store
+    inst i mv = mv { mvInstantiation = i }
+
 -- | The instantiation should not be an 'InstV' or 'InstS' and the 'MetaId'
 --   should point to something 'Open' or a 'BlockedConst'.
-(=:) :: (MonadTCM tcm, HasMeta t) => MetaId -> t -> tcm ()
+(=:) :: (MonadTCM tcm, HasMeta t, KillRange t, Show t) =>
+        MetaId -> t -> tcm ()
 x =: t = do
-    i <- metaInstance t
+    reportSLn "tc.meta.assign" 70 $ show x ++ " := " ++ show t
+    i <- metaInstance (killRange t)
     store <- getMetaStore
     modify $ \st -> st { stMetaStore = ins x i store }
     etaExpandListeners x
     wakeupConstraints
+    reportSLn "tc.meta.assign" 20 $ "completed assignment of " ++ show x
   where
     ins x i store = Map.adjust (inst i) x store
     inst i mv = mv { mvInstantiation = i }
@@ -91,11 +111,23 @@
 assignTerm :: MonadTCM tcm => MetaId -> Term -> tcm ()
 assignTerm = (=:)
 
+assignSort :: MonadTCM tcm => MetaId -> Sort -> tcm ()
+assignSort = (=:)
+
 newSortMeta :: MonadTCM tcm => tcm Sort
 newSortMeta =
-  ifM typeInType (return $ Type 0) $ do
+  ifM typeInType (return $ mkType 0) $
+  ifM hasUniversePolymorphism (newSortMetaCtx =<< getContextArgs)
+  $ do i <- createMetaInfo
+       x <- newMeta i normalMetaPriority (IsSort())
+       return $ MetaS x []
+
+newSortMetaCtx :: MonadTCM tcm => Args -> tcm Sort
+newSortMetaCtx vs =
+  ifM typeInType (return $ mkType 0) $ do
     i <- createMetaInfo
-    MetaS <$> newMeta i normalMetaPriority (IsSort ())
+    x <- newMeta i normalMetaPriority (IsSort ())
+    return $ MetaS x vs
 
 newTypeMeta :: MonadTCM tcm => Sort -> tcm Type
 newTypeMeta s = El s <$> newValueMeta (sort s)
@@ -166,7 +198,8 @@
 newRecordMetaCtx r pars tel ctx = do
   ftel	 <- flip apply pars <$> getRecordFieldTypes r
   fields <- newArgsMetaCtx (telePi_ ftel $ sort Prop) tel ctx
-  return $ Con r fields
+  con    <- getRecordConstructor r
+  return $ Con con fields
 
 newQuestionMark :: MonadTCM tcm => Type -> tcm Term
 newQuestionMark t = do
@@ -193,8 +226,8 @@
                 dx  <- prettyTCM (MetaV x [])
                 dv  <- escapeContext (size tel) $ prettyTCM $ abstract tel v
                 dcs <- mapM prettyTCM cs
-                liftIO $ UTF8.putStrLn $ "blocked " ++ show dx ++ " := " ++ show dv
-                liftIO $ UTF8.putStrLn $ "     by " ++ show dcs
+                liftIO $ LocIO.putStrLn $ "blocked " ++ show dx ++ " := " ++ show dv
+                liftIO $ LocIO.putStrLn $ "     by " ++ show dcs
 	    addConstraints c
 	    return $ MetaV x vs
 
@@ -238,91 +271,44 @@
   case unEl <$> bb of
     Blocked x _            -> listenToMeta m x
     NotBlocked (MetaV x _) -> listenToMeta m x
-    NotBlocked (Def r ps)  ->
+    NotBlocked lvl@(Def r ps)  ->
       ifM (isRecord r) (do
 	rng <- getMetaRange m
 	u   <- setCurrentRange rng $ newRecordMetaCtx r ps tel args
 	inContext [] $ addCtxTel tel $ do
 	  verboseS "tc.meta.eta" 20 $ do
 	    du <- prettyTCM u
-	    liftIO $ UTF8.putStrLn $ "eta expanding: " ++ show m ++ " --> " ++ show du
+	    liftIO $ LocIO.putStrLn $ "eta expanding: " ++ show m ++ " --> " ++ show du
 	  noConstraints $ assignV b m args u  -- should never produce any constraints
-      ) $ return ()
+      ) $ do
+      mlvl <- getBuiltin' builtinLevel
+      tt   <- typeInType
+      if tt && Just lvl == mlvl
+       then do
+        reportSLn "tc.meta.eta" 20 $ "Expanding level meta to 0 (type-in-type)"
+        noConstraints $ assignV b m args (Lit $ LitLevel noRange 0)
+       else
+        return ()
     _		-> return ()
 
   return ()
 
--- | Extended occurs check.
-class Occurs t where
-  occurs :: (TypeError -> TCM ()) -> MetaId -> [Nat] -> t -> TCM t
-
-occursCheck :: (MonadTCM tcm, Occurs a) => MetaId -> [Nat] -> a -> tcm a
-occursCheck m xs = liftTCM . occurs typeError m xs
-
-instance Occurs Term where
-    occurs abort m xs v = do
-	v <- reduceB v
-	case v of
-	    -- Don't fail on blocked terms or metas
-	    Blocked _ v          -> occurs' (const patternViolation) v
-	    NotBlocked v         -> occurs' abort v
-	where
-	    occurs' abort v = case v of
-		Var i vs   -> do
-		  unless (i `elem` xs) $ abort $ MetaCannotDependOn m xs i
-		  Var i <$> occ vs
-		Lam h f	    -> Lam h <$> occ f
-		Lit l	    -> return v
-		Def c vs    -> Def c <$> occ vs
-		Con c vs    -> Con c <$> occ vs
-		Pi a b	    -> uncurry Pi <$> occ (a,b)
-		Fun a b	    -> uncurry Fun <$> occ (a,b)
-		Sort s	    -> Sort <$> occ s
-		MetaV m' vs -> do
-		    when (m == m') $ abort $ MetaOccursInItself m
-		    -- Don't fail on flexible occurrence
-		    MetaV m' <$> occurs (const patternViolation) m xs vs
-		where
-		    occ x = occurs abort m xs x
-
-instance Occurs Type where
-    occurs abort m xs (El s v) = uncurry El <$> occurs abort m xs (s,v)
-
-instance Occurs Sort where
-    occurs abort m xs s =
-	do  s' <- reduce s
-	    case s' of
-		MetaS m'  -> do
-		  when (m == m') $ abort $ MetaOccursInItself m
-		  return s'
-		Lub s1 s2 -> uncurry Lub <$> occurs abort m xs (s1,s2)
-		Suc s	  -> Suc <$> occurs abort m xs s
-		Type _	  -> return s'
-		Prop	  -> return s'
-
-instance Occurs a => Occurs (Abs a) where
-    occurs abort m xs (Abs s x) = Abs s <$> occurs abort m (0 : map (1+) xs) x
-
-instance Occurs a => Occurs (Arg a) where
-    occurs abort m xs (Arg h x) = Arg h <$> occurs abort m xs x
-
-instance (Occurs a, Occurs b) => Occurs (a,b) where
-    occurs abort m xs (x,y) = (,) <$> occurs abort m xs x <*> occurs abort m xs y
-
-instance Occurs a => Occurs [a] where
-    occurs abort m xs ys = mapM (occurs abort m xs) ys
-
 abortAssign :: MonadTCM tcm => tcm a
 abortAssign =
     do	s <- get
-	liftTCM $ throwError $ AbortAssign s
+	liftTCM $ throwError $ TCErr Nothing $ AbortAssign s
 
 handleAbort :: MonadTCM tcm => TCM a -> TCM a -> tcm a
 handleAbort h m = liftTCM $
     m `catchError` \e ->
-	case e of
+	case errError e of
 	    AbortAssign s -> do put s; h
-	    _		  -> throwError e
+            PatternErr{}  -> do
+              reportSLn "tc.meta.assign" 50 "Pattern violation!"
+              throwError e
+	    _		  -> do
+              reportSLn "tc.meta.assign" 50 "Some exception"
+              throwError e
 
 -- | Assign to an open metavar.
 --   First check that metavar args are in pattern fragment.
@@ -332,8 +318,13 @@
 assignV t x args v =
     handleAbort handler $ do
 	reportSDoc "tc.meta.assign" 10 $ do
-	  prettyTCM (MetaV x args) <+> text ":=" <+> prettyTCM v
+	  text "term" <+> prettyTCM (MetaV x args) <+> text ":=" <+> prettyTCM v
 
+        v <- normalise v
+        case v of
+          Sort Inf  -> typeError $ GenericError "Setω is not a valid type."
+          _         -> return ()
+
 	-- We don't instantiate blocked terms
 	whenM (isBlockedTerm x) patternViolation	-- TODO: not so nice
 
@@ -361,7 +352,7 @@
 		     , nest 2 $ text "type" <+> prettyTCM t
 		     , nest 2 $ text "term" <+> prettyTCM v
 		     ]
-	    liftIO $ UTF8.print d
+	    liftIO $ LocIO.print d
 
 	reportSLn "tc.meta.assign" 15 "passed occursCheck"
 
@@ -403,13 +394,95 @@
 	    reportSLn "tc.meta.assign" 10 $ "Oops. Undo " ++ show x ++ " := ..."
 	    equalTerm t (MetaV x args) v
 
-assignS :: MonadTCM tcm => MetaId -> Sort -> tcm Constraints
-assignS x s =
-    handleAbort (equalSort (MetaS x) s) $ do
-	s <- occursCheck x [] s
-	x =: s
+-- TODO: Unify with assignV
+assignS :: MonadTCM tcm => MetaId -> Args -> Sort -> tcm Constraints
+assignS x args s =
+  ifM (not <$> hasUniversePolymorphism) (noPolyAssign x s) $
+    handleAbort handler $ do
+	reportSDoc "tc.meta.assign" 10 $ do
+	  text "sort" <+> prettyTCM (MetaS x args) <+> text ":=" <+> prettyTCM s
+
+	-- We don't instantiate blocked terms
+	whenM (isBlockedTerm x) patternViolation	-- TODO: not so nice
+
+	-- Check that the arguments are distinct variables
+        reportSDoc "tc.meta.assign" 20 $
+            let pr (Var n []) = text (show n)
+                pr (Def c []) = prettyTCM c
+                pr _          = text ".."
+            in
+            text "args:" <+> sep (map (pr . unArg) args)
+
+        -- TODO Hack
+        let fv = flexibleVars $ freeVars s
+        when (any (< 0) $ Set.toList fv) $ do
+            reportSLn "tc.meta.assign" 10 "negative variables!"
+            patternViolation
+
+	ids <- checkArgs x args
+
+	reportSDoc "tc.meta.assign" 15 $
+	    text "preparing to instantiate: " <+> prettyTCM s
+
+	-- Check that the x doesn't occur in the right hand side
+	v <- liftTCM $ occursCheck x (map unArg ids) (Sort s)
+
+	verboseS "tc.conv.assign" 30 $ do
+	  let n = size v
+	  when (n > 200) $ do
+	    r <- getMetaRange x
+	    d <- sep [ text "size" <+> text (show n)
+		     , nest 2 $ text "sort" <+> prettyTCM v
+		     ]
+	    liftIO $ LocIO.print d
+
+	reportSLn "tc.meta.assign" 15 "passed occursCheck"
+
+	-- Rename the variables in v to make it suitable for abstraction over ids.
+	v' <- do
+	    -- Basically, if
+	    --   Γ   = a b c d e
+	    --   ids = d b e
+	    -- then
+	    --   v' = (λ a b c d e. v) _ 1 _ 2 0
+	    tel  <- getContextTelescope
+	    args <- map (Arg NotHidden) <$> getContextTerms
+	    let iargs = reverse $ zipWith (rename $ reverse $ map unArg ids) [0..] $ reverse args
+		v'    = raise (size ids) (abstract tel v) `apply` iargs
+	    return v'
+
+	let extTel (Arg h i) m = do
+	      tel <- m
+	      t	  <- typeOfBV i
+	      x	  <- nameOfBV i
+	      return $ ExtendTel (Arg h t) (Abs (show x) tel)
+	tel' <- foldr extTel (return EmptyTel) ids
+
+	reportSDoc "tc.meta.assign" 15 $
+	  text "final instantiation:" <+> prettyTCM (abstract tel' v')
+
+	-- Perform the assignment (and wake constraints). Metas
+	-- are top-level so we do the assignment at top-level.
+	n <- size <$> getContextTelescope
+	escapeContext n $ x =:= killRange (abstract tel' v')
 	return []
+    where
+	rename ids i arg = case findIndex (==i) ids of
+	    Just j  -> fmap (const $ Var (fromIntegral j) []) arg
+	    Nothing -> fmap (const __IMPOSSIBLE__) arg
+              -- we will end up here, but never look at the result
 
+	handler :: MonadTCM tcm => tcm Constraints
+	handler = do
+	    reportSLn "tc.meta.assign" 10 $ "Oops. Undo " ++ show x ++ " := ..."
+	    equalSort (MetaS x args) s
+
+        noPolyAssign x s =
+          handleAbort (equalSort (MetaS x []) s) $ do
+            Sort s <- occursCheck x [] (Sort s)
+            x =: s
+            return []
+
 -- | Check that arguments to a metavar are in pattern fragment.
 --   Assumes all arguments already in whnf.
 --   Parameters are represented as @Var@s so @checkArgs@ really
@@ -454,5 +527,5 @@
 		  assignV (t `piApply` args) mI args v
 		updV _ _	     = __IMPOSSIBLE__
 
-		updS s = assignS mI s
+		updS s = assignS mI args s
 
diff --git a/src/full/Agda/TypeChecking/MetaVars.hs-boot b/src/full/Agda/TypeChecking/MetaVars.hs-boot
--- a/src/full/Agda/TypeChecking/MetaVars.hs-boot
+++ b/src/full/Agda/TypeChecking/MetaVars.hs-boot
@@ -1,8 +1,9 @@
 
 module Agda.TypeChecking.MetaVars where
 
-import Agda.Syntax.Internal	       ( MetaId, Term )
+import Agda.Syntax.Internal	       ( MetaId, Term, Sort )
 import Agda.TypeChecking.Monad.Base ( MonadTCM )
 
 assignTerm :: MonadTCM tcm => MetaId -> Term -> tcm ()
+assignSort :: MonadTCM tcm => MetaId -> Sort -> tcm ()
 
diff --git a/src/full/Agda/TypeChecking/MetaVars/Occurs.hs b/src/full/Agda/TypeChecking/MetaVars/Occurs.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/MetaVars/Occurs.hs
@@ -0,0 +1,109 @@
+
+module Agda.TypeChecking.MetaVars.Occurs where
+
+import Control.Applicative
+import Control.Monad
+import Control.Monad.Error
+
+import Agda.Syntax.Common
+import Agda.Syntax.Internal
+import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Pretty
+import Agda.Utils.Monad
+
+-- | Extended occurs check.
+class Occurs t where
+  occurs :: (TypeError -> TCM ()) -> MetaId -> [Nat] -> t -> TCM t
+
+occursCheck :: MonadTCM tcm => MetaId -> [Nat] -> Term -> tcm Term
+occursCheck m xs v = liftTCM $ do
+  v <- instantiate v
+  case v of
+    -- Don't fail if trying to instantiate to just itself
+    MetaV m' _        | m == m' -> patternViolation
+    Sort (MetaS m' _) | m == m' -> patternViolation
+    _                           ->
+                              -- Produce nicer error messages
+      occurs typeError m xs v `catchError` \err -> case errError err of
+        TypeError _ cl -> case clValue cl of
+          MetaOccursInItself{} ->
+            typeError . GenericError . show =<<
+              fsep [ text ("Refuse to construct infinite term by instantiating " ++ show m ++ " to")
+                   , prettyTCM v
+                   ]
+          MetaCannotDependOn _ _ i ->
+            ifM ((&&) <$> isSortMeta m <*> (not <$> hasUniversePolymorphism))
+            ( typeError . GenericError . show =<<
+              fsep [ text ("Cannot instantiate the metavariable " ++ show m ++ " to")
+                   , prettyTCM v
+                   , text "since universe polymorphism is not enabled"
+                   , text "(use the --universe-polymorphism flag to enable)"
+                   ]
+            )
+            ( typeError . GenericError . show =<<
+              fsep [ text ("Cannot instantiate the metavariable " ++ show m ++ " to")
+                   , prettyTCM v
+                   , text "since it contains the variable"
+                   , enterClosure cl $ \_ -> prettyTCM (Var i [])
+                   , text $ "which " ++ show m ++ " cannot depend on"
+                   ]
+            )
+          _ -> throwError err
+        _ -> throwError err
+
+instance Occurs Term where
+    occurs abort m xs v = do
+	v <- reduceB v
+	case v of
+	    -- Don't fail on blocked terms or metas
+	    Blocked _ v  -> occurs' (const patternViolation) v
+	    NotBlocked v -> occurs' abort v
+	where
+	    occurs' abort v = case v of
+		Var i vs   -> do
+		  unless (i `elem` xs) $ abort $ MetaCannotDependOn m xs i
+		  Var i <$> occ vs
+		Lam h f	    -> Lam h <$> occ f
+		Lit l	    -> return v
+		Def c vs    -> Def c <$> occ vs
+		Con c vs    -> Con c <$> occ vs
+		Pi a b	    -> uncurry Pi <$> occ (a,b)
+		Fun a b	    -> uncurry Fun <$> occ (a,b)
+		Sort s	    -> Sort <$> occ s
+		MetaV m' vs -> do
+		    when (m == m') $ abort $ MetaOccursInItself m
+		    -- Don't fail on flexible occurrence
+		    MetaV m' <$> occurs (const patternViolation) m xs vs
+		where
+		    occ x = occurs abort m xs x
+
+instance Occurs Type where
+    occurs abort m xs (El s v) = uncurry El <$> occurs abort m xs (s,v)
+
+instance Occurs Sort where
+    occurs abort m xs s =
+	do  s' <- reduce s
+	    case s' of
+		MetaS m' args -> do
+		  when (m == m') $ abort $ MetaOccursInItself m
+		  MetaS m' <$> occurs (const patternViolation) m xs args
+		Lub s1 s2  -> uncurry Lub <$> occurs abort m xs (s1,s2)
+                DLub s1 s2 -> uncurry DLub <$> occurs abort m xs (s1, s2)
+		Suc s      -> Suc <$> occurs abort m xs s
+		Type a     -> Type <$> occurs abort m xs a
+		Prop       -> return s'
+		Inf        -> return s'
+
+instance Occurs a => Occurs (Abs a) where
+    occurs abort m xs (Abs s x) = Abs s <$> occurs abort m (0 : map (1+) xs) x
+
+instance Occurs a => Occurs (Arg a) where
+    occurs abort m xs (Arg h x) = Arg h <$> occurs abort m xs x
+
+instance (Occurs a, Occurs b) => Occurs (a,b) where
+    occurs abort m xs (x,y) = (,) <$> occurs abort m xs x <*> occurs abort m xs y
+
+instance Occurs a => Occurs [a] where
+    occurs abort m xs ys = mapM (occurs abort m xs) ys
+
diff --git a/src/full/Agda/TypeChecking/Monad/Base.hs b/src/full/Agda/TypeChecking/Monad/Base.hs
--- a/src/full/Agda/TypeChecking/Monad/Base.hs
+++ b/src/full/Agda/TypeChecking/Monad/Base.hs
@@ -4,10 +4,10 @@
   #-}
 module Agda.TypeChecking.Monad.Base where
 
+import Control.Exception as E
 import Control.Monad.Error
 import Control.Monad.State
 import Control.Monad.Reader
-import Control.OldException
 import Control.Applicative
 import Data.Map as Map
 import Data.Set as Set
@@ -25,13 +25,14 @@
 import Agda.Syntax.Scope.Base
 
 import Agda.Interaction.Exceptions
+import {-# SOURCE #-} Agda.Interaction.FindFile
 import Agda.Interaction.Options
 import qualified Agda.Interaction.Highlighting.Range as R
 import Agda.Interaction.Highlighting.Precise (HighlightingInfo)
 
+import Agda.Utils.FileName
 import Agda.Utils.Fresh
 import Agda.Utils.Monad
-import Agda.Utils.Monad.Undo
 import Agda.Utils.Trace
 
 #include "../../undefined.h"
@@ -49,21 +50,27 @@
 	 , stSignature	       :: Signature
 	 , stImports	       :: Signature
 	 , stImportedModules   :: Set ModuleName
+         , stModuleToSource    :: ModuleToSource
 	 , stVisitedModules    :: VisitedModules
 	 , stDecodedModules    :: DecodedModules
-         , stCurrentModule     :: Maybe (ModuleName, Interface)
+         , stCurrentModule     :: Maybe ModuleName
            -- ^ The current module is available after it has been type
            -- checked.
 	 , stScope	       :: ScopeInfo
-	 , stOptions	       :: CommandLineOptions
+	 , stPersistentOptions :: CommandLineOptions
+           -- ^ Options which apply to all files, unless overridden.
+	 , stPragmaOptions     :: CommandLineOptions
+           -- ^ Options applying to the current file. @OPTIONS@
+           -- pragmas only affect this field.
 	 , stStatistics	       :: Statistics
 	 , stTrace	       :: CallTrace
 	     -- ^ record what is happening (for error msgs)
 	 , stMutualBlocks      :: Map MutualId (Set QName)
 	 , stLocalBuiltins     :: BuiltinThings PrimFun
          , stImportedBuiltins  :: BuiltinThings PrimFun
-         , stHaskellImports    :: [String]  -- ^ imports that should be generated
-                                            --   by the compiler
+         , stHaskellImports    :: Set String
+           -- ^ Imports that should be generated by the compiler (this
+           -- includes imports from imported modules).
 	 }
 
 data FreshThings =
@@ -86,17 +93,19 @@
 	 , stSignature	       = emptySignature
 	 , stImports	       = emptySignature
 	 , stImportedModules   = Set.empty
+         , stModuleToSource    = Map.empty
 	 , stVisitedModules    = Map.empty
 	 , stDecodedModules    = Map.empty
          , stCurrentModule     = Nothing
 	 , stScope	       = emptyScopeInfo
-	 , stOptions	       = defaultOptions
+	 , stPersistentOptions = defaultOptions
+	 , stPragmaOptions     = defaultOptions
 	 , stStatistics	       = Map.empty
 	 , stTrace	       = noTrace
 	 , stMutualBlocks      = Map.empty
 	 , stLocalBuiltins     = Map.empty
 	 , stImportedBuiltins  = Map.empty
-         , stHaskellImports    = []
+         , stHaskellImports    = Set.empty
 	 }
 
 stBuiltinThings :: TCState -> BuiltinThings PrimFun
@@ -141,19 +150,40 @@
 -- ** Interface
 ---------------------------------------------------------------------------
 
-type VisitedModules = Map ModuleName (Interface, ClockTime)
-type DecodedModules = Map ModuleName (Interface, ClockTime)
+data ModuleInfo = ModuleInfo
+  { miInterface  :: Interface
+  , miWarnings   :: Bool
+    -- ^ 'True' if warnings were encountered when the module was type
+    -- checked.
+  , miTimeStamp  :: ClockTime
+    -- ^ The modification time stamp of the interface file when the
+    -- interface was read or written. Alternatively, if warnings were
+    -- encountered (in which case there may not be any up-to-date
+    -- interface file), the time at which the interface was produced
+    -- (approximately).
+  }
 
+-- Note that the use of 'C.TopLevelModuleName' here is a potential
+-- performance problem, because these names do not contain unique
+-- identifiers.
+
+type VisitedModules = Map C.TopLevelModuleName ModuleInfo
+type DecodedModules = Map C.TopLevelModuleName (Interface, ClockTime)
+
 data Interface = Interface
 	{ iImportedModules :: [ModuleName]
         , iModuleName      :: ModuleName
-	, iScope	   :: Map A.ModuleName Scope
+	, iScope	   :: Map ModuleName Scope
+        , iInsideScope     :: ScopeInfo
 	, iSignature	   :: Signature
 	, iBuiltin	   :: BuiltinThings String
-        , iHaskellImports  :: [String]
+        , iHaskellImports  :: Set String
+                              -- ^ Haskell imports listed in
+                              -- (transitively) imported modules are
+                              -- not included here.
         , iHighlighting    :: HighlightingInfo
 	}
-    deriving (Typeable, Data)
+    deriving (Typeable, Data, Show)
 
 ---------------------------------------------------------------------------
 -- ** Closure
@@ -167,6 +197,9 @@
 			 }
     deriving (Typeable, Data)
 
+instance Show a => Show (Closure a) where
+  show cl = "Closure " ++ show (clValue cl)
+
 instance HasRange a => HasRange (Closure a) where
     getRange = getRange . clValue
 
@@ -191,10 +224,10 @@
 		| UnBlock MetaId
 		| Guarded Constraint Constraints
                 | IsEmpty Type
-  deriving (Typeable)
+  deriving (Typeable, Show)
 
 data Comparison = CmpEq | CmpLeq
-  deriving (Eq, Typeable)
+  deriving (Eq, Typeable, Show)
 
 type Constraints = [ConstraintClosure]
 
@@ -204,7 +237,7 @@
 
 -- | A thing tagged with the context it came from.
 data Open a = OpenThing [CtxId] a
-    deriving (Typeable, Data)
+    deriving (Typeable, Data, Show)
 
 ---------------------------------------------------------------------------
 -- * Judgements
@@ -246,7 +279,7 @@
 
 data MetaInstantiation
 	= InstV Term
-	| InstS Sort
+	| InstS Term  -- should be Lam .. Sort s
 	| Open
 	| BlockedConst Term
         | PostponedTypeCheckingProblem (Closure (A.Expr, Type, TCM Bool))
@@ -314,7 +347,7 @@
       { sigSections    :: Sections
       , sigDefinitions :: Definitions
       }
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 type Sections	 = Map ModuleName Section
 type Definitions = Map QName Definition
@@ -328,7 +361,7 @@
 				    --	 section to when translating from
 				    --	 abstract to internal syntax.
       }
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 emptySignature :: Signature
 emptySignature = Sig Map.empty Map.empty
@@ -357,7 +390,7 @@
 		       , defMutual   :: MutualId
 		       , theDef	     :: Defn
 		       }
-    deriving (Typeable, Data)
+    deriving (Typeable, Data, Show)
 
 type HaskellCode = String
 type HaskellType = String
@@ -402,9 +435,10 @@
 	  | Record
             { recPars           :: Nat
             , recClause         :: Maybe Clause
-            , recFields         :: [A.QName]
+            , recCon            :: Maybe QName          -- ^ Constructor name.
+            , recConType        :: Type                 -- ^ The record constructor's type.
+            , recFields         :: [(Hiding, A.QName)]
             , recTel            :: Telescope
-            , recSort           :: Sort
             , recPolarity       :: [Polarity]
             , recArgOccurrences :: [Occurrence]
             , recAbstr          :: IsAbstract
@@ -412,17 +446,20 @@
 	  | Constructor
             { conPars   :: Nat         -- nof parameters
 	    , conSrcCon :: QName       -- original constructor (this might be in a module instance)
-	    , conData   :: QName       -- name of datatype
+	    , conData   :: QName       -- name of datatype or record type
             , conHsCode :: Maybe (HaskellType, HaskellCode) -- used by the compiler
 	    , conAbstr  :: IsAbstract
             , conInd    :: Induction   -- ^ Inductive or coinductive?
             }
-	  | Primitive -- PrimFun
+	  | Primitive
             { primAbstr :: IsAbstract
             , primName  :: String
-            , primClauses :: [Clause]
+            , primClauses :: Maybe [Clause]
+              -- ^ 'Nothing' for primitive functions, @'Just'
+              -- something@ for builtin functions.
             }
-    deriving (Typeable, Data)
+            -- ^ Primitive or builtin functions.
+    deriving (Typeable, Data, Show)
 
 newtype Fields = Fields [(C.Name, Type)]
   deriving (Typeable, Data)
@@ -438,11 +475,11 @@
     deriving (Typeable)
 
 defClauses :: Definition -> [Clause]
-defClauses Defn{theDef = Function{funClauses = cs}}	= cs
-defClauses Defn{theDef = Primitive{primClauses = cs}}	= cs
-defClauses Defn{theDef = Datatype{dataClause = Just c}} = [c]
-defClauses Defn{theDef = Record{recClause = Just c}}    = [c]
-defClauses _					        = []
+defClauses Defn{theDef = Function{funClauses = cs}}        = cs
+defClauses Defn{theDef = Primitive{primClauses = Just cs}} = cs
+defClauses Defn{theDef = Datatype{dataClause = Just c}}    = [c]
+defClauses Defn{theDef = Record{recClause = Just c}}       = [c]
+defClauses _                                               = []
 
 -- | Used to specify whether something should be delayed.
 data Delayed = Delayed | NotDelayed
@@ -469,7 +506,7 @@
 
 data FunctionInverse = NotInjective
                      | Inverse (Map TermHead Clause)
-  deriving (Typeable, Data)
+  deriving (Typeable, Data, Show)
 
 data TermHead = SortHead
               | PiHead
@@ -503,7 +540,7 @@
 	  | CheckLetBinding A.LetBinding (Maybe ())
 	  | InferExpr A.Expr (Maybe (Term, Type))
 	  | CheckExpr A.Expr Type (Maybe Term)
-	  | CheckDotPattern A.Expr Term (Maybe ())
+	  | CheckDotPattern A.Expr Term (Maybe Constraints)
 	  | CheckPatternShadowing A.Clause (Maybe ())
 	  | IsTypeCall A.Expr Sort (Maybe Type)
 	  | IsType_ A.Expr (Maybe Type)
@@ -584,7 +621,7 @@
 data Builtin pf
 	= Builtin Term
 	| Prim pf
-    deriving (Typeable, Data)
+    deriving (Typeable, Data, Show)
 
 instance Functor Builtin where
     fmap f (Builtin t) = Builtin t
@@ -607,7 +644,7 @@
 	  , envLetBindings         :: LetBindings
 	  , envCurrentModule       :: ModuleName
           , envAnonymousModules    :: [(ModuleName, Nat)] -- ^ anonymous modules and their number of free variables
-	  , envImportPath          :: [ModuleName]   -- ^ to detect import cycles
+	  , envImportPath          :: [C.TopLevelModuleName] -- ^ to detect import cycles
 	  , envMutualBlock         :: Maybe MutualId -- ^ the current (if any) mutual block
 	  , envAbstractMode        :: AbstractMode
 		-- ^ When checking the typesignature of a public definition
@@ -774,11 +811,16 @@
 	| LocalVsImportedModuleClash ModuleName
 	| UnsolvedMetas [Range]
 	| UnsolvedConstraints Constraints
-	| CyclicModuleDependency [ModuleName]
-	| FileNotFound ModuleName [FilePath]
-	| ClashingFileNamesFor ModuleName [FilePath]
+	| CyclicModuleDependency [C.TopLevelModuleName]
+	| FileNotFound C.TopLevelModuleName [AbsolutePath]
+        | OverlappingProjects AbsolutePath C.TopLevelModuleName C.TopLevelModuleName
+        | AmbiguousTopLevelModuleName C.TopLevelModuleName [AbsolutePath]
+	| ModuleNameDoesntMatchFileName C.TopLevelModuleName [AbsolutePath]
+	| ClashingFileNamesFor ModuleName [AbsolutePath]
+        | ModuleDefinedInOtherFile C.TopLevelModuleName AbsolutePath AbsolutePath
+          -- ^ Module name, file from which it was loaded, file which
+          -- the include path says contains the module.
     -- Scope errors
-	| ModuleNameDoesntMatchFileName ModuleName -- ^ @NoMatch given@
 	| BothWithAndRHS
 	| NotInScope [C.QName]
 	| NoSuchModule C.QName
@@ -808,43 +850,68 @@
     -- Usage errors
           deriving (Typeable)
 
-data TCErr = TypeError TCState (Closure TypeError)
-	   | Exception Range String
-	   | PatternErr  TCState -- ^ for pattern violations
-	   | AbortAssign TCState -- ^ used to abort assignment to meta when there are instantiations
+instance Show TypeError where
+  show _ = "<TypeError>" -- TODO: more info?
+
+instance Error TypeError where
+    noMsg  = strMsg ""
+    strMsg = GenericError
+
+-- | Type-checking errors.
+
+data TCErr' = TypeError TCState (Closure TypeError)
+	    | Exception Range String
+            | IOException Range E.IOException
+	    | PatternErr  TCState -- ^ for pattern violations
+	    | AbortAssign TCState -- ^ used to abort assignment to meta when there are instantiations
   deriving (Typeable)
 
+-- | Type-checking errors, potentially paired with relevant syntax
+-- highlighting information.
+
+data TCErr =
+  TCErr { errHighlighting :: Maybe (HighlightingInfo, ModuleToSource)
+          -- ^ The 'ModuleToSource' can be used to map the module
+          -- names in the 'HighlightingInfo' to file names.
+        , errError        :: TCErr'
+        }
+  deriving (Typeable)
+
 instance Error TCErr where
     noMsg  = strMsg ""
-    strMsg = Exception noRange . strMsg
+    strMsg = TCErr Nothing . Exception noRange . strMsg
 
-{-
 instance Show TCErr where
+  show = show . errError
+
+instance Show TCErr' where
     show (TypeError _ e) = show (getRange $ clTrace e) ++ ": " ++ show (clValue e)
     show (Exception r s) = show r ++ ": " ++ s
+    show (IOException r e) = show r ++ ": " ++ show e
     show (PatternErr _)  = "Pattern violation (you shouldn't see this)"
     show (AbortAssign _) = "Abort assignment (you shouldn't see this)"
--}
 
+instance HasRange TCErr' where
+    getRange (TypeError _ cl)  = getRange $ clTrace cl
+    getRange (Exception r _)   = r
+    getRange (IOException r _) = r
+    getRange (PatternErr s)    = getRange $ stTrace s
+    getRange (AbortAssign s)   = getRange $ stTrace s
+
 instance HasRange TCErr where
-    getRange (TypeError _ cl) = getRange $ clTrace cl
-    getRange (Exception r _)  = r
-    getRange (PatternErr s)   = getRange $ stTrace s
-    getRange (AbortAssign s)  = getRange $ stTrace s
+    getRange = getRange . errError
 
+instance Exception TCErr
+
 ---------------------------------------------------------------------------
 -- * Type checking monad transformer
 ---------------------------------------------------------------------------
 
-newtype TCMT m a = TCM { unTCM :: UndoT TCState
-			          (StateT TCState
-			          (ReaderT TCEnv
-			          (ErrorT TCErr m))) a
+newtype TCMT m a = TCM { unTCM :: StateT TCState
+			          (ReaderT TCEnv m) a
 		       }
     deriving ( MonadState TCState
              , MonadReader TCEnv
-             , MonadError TCErr
-             , MonadUndo TCState
              )
 
 type TCM = TCMT IO
@@ -855,21 +922,34 @@
       ) => MonadTCM tcm where
     liftTCM :: TCM a -> tcm a
 
-mapTCMT :: (m (Either TCErr ((a, [TCState]), TCState)) ->
-            n (Either TCErr ((b, [TCState]), TCState))
-           ) -> TCMT m a -> TCMT n b
-mapTCMT f = TCM . mapUndoT (mapStateT (mapReaderT (mapErrorT f))) . unTCM
+instance MonadError TCErr (TCMT IO) where
+  throwError = liftIO . throwIO
+  catchError m h = TCM $ StateT $ \s -> ReaderT $ \e ->
+    runReaderT (runStateT (unTCM m) s) e
+    `E.catch` \err -> runReaderT (runStateT (unTCM (h err)) s) e
 
+mapTCMT :: (forall a. m a -> n a) -> TCMT m a -> TCMT n a
+mapTCMT f = TCM . mapStateT (mapReaderT f) . unTCM
+
+pureTCM :: Monad m => (TCState -> TCEnv -> a) -> TCMT m a
+pureTCM f = TCM $ StateT $ \s -> ReaderT $ \e -> return (f s e, s)
+
 instance MonadIO m => MonadTCM (TCMT m) where
     liftTCM = mapTCMT liftIO
 
+instance (Error err, MonadTCM tcm) => MonadTCM (ErrorT err tcm) where
+  liftTCM = lift . liftTCM
+
 instance MonadTrans TCMT where
-    lift = TCM . lift . lift . lift . lift
+    lift = TCM . lift . lift
 
 -- We want a special monad implementation of fail.
 instance MonadIO m => Monad (TCMT m) where
     return  = TCM . return
-    m >>= k = TCM $ unTCM m >>= unTCM . k
+--     m >>= k = TCM $ unTCM m >>= unTCM . k
+    m >>= k = TCM $ StateT $ \s -> ReaderT $ \e -> do
+                (x, s') <- runReaderT (runStateT (unTCM m) s) e
+                runReaderT (runStateT (unTCM (k x)) s') e
     fail    = internalError
 
 instance MonadIO m => Functor (TCMT m) where
@@ -880,21 +960,21 @@
     (<*>) = ap
 
 instance MonadIO m => MonadIO (TCMT m) where
-  liftIO m = TCM $ do tr <- gets stTrace
-                      lift $ lift $ lift $ ErrorT $ liftIO $
-                        handle (handleIOException $ getRange tr)
-                        (failOnException
-                         (\r -> return . throwError . Exception r)
-                         (return <$> m) )
+  liftIO m = TCM $ do r <- gets $ getRange . stTrace
+                      liftIO $ wrap r $ do
+                        x <- m
+                        x `seq` return x
     where
-      handleIOException r e = case e of
-        IOException _ -> return . throwError . Exception r . show $ e
-        _             -> throwIO e
+      wrap r m = failOnException handleException
+               $ E.catch m (handleIOException r)
 
+      handleIOException r e = throwIO $ TCErr Nothing $ IOException r e
+      handleException   r s = throwIO $ TCErr Nothing $ Exception r s
+
 patternViolation :: MonadTCM tcm => tcm a
 patternViolation = liftTCM $ do
     s <- get
-    throwError $ PatternErr s
+    throwError $ TCErr Nothing $ PatternErr s
 
 internalError :: MonadTCM tcm => String -> tcm a
 internalError s = typeError $ InternalError s
@@ -903,18 +983,14 @@
 typeError err = liftTCM $ do
     cl <- buildClosure err
     s  <- get
-    throwError $ TypeError s cl
-
-handleTypeErrorException :: MonadTCM tcm => IO a -> tcm a
-handleTypeErrorException m = do
-    r <- liftIO $ liftM Right m `catchDyn` (return . Left)
-    either typeError return r
+    throwError $ TCErr Nothing $ TypeError s cl
 
 -- | Running the type checking monad
-runTCM :: Monad m => TCMT m a -> m (Either TCErr a)
-runTCM m = runErrorT
-	 $ flip runReaderT initEnv
-	 $ flip evalStateT initState
-	 $ runUndoT
-	 $ unTCM m
+runTCM :: TCMT IO a -> IO (Either TCErr a)
+runTCM m = (Right <$> runTCM' m) `E.catch` (return . Left)
+
+runTCM' :: Monad m => TCMT m a -> m a
+runTCM' m = flip runReaderT initEnv
+          $ flip evalStateT initState
+          $ unTCM m
 
diff --git a/src/full/Agda/TypeChecking/Monad/Builtin.hs b/src/full/Agda/TypeChecking/Monad/Builtin.hs
--- a/src/full/Agda/TypeChecking/Monad/Builtin.hs
+++ b/src/full/Agda/TypeChecking/Monad/Builtin.hs
@@ -4,6 +4,7 @@
 import Control.Monad.State
 import qualified Data.Map as Map
 
+import Agda.Syntax.Position
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad.Base
 
@@ -41,7 +42,7 @@
 getBuiltin' x = do
     builtin <- getBuiltinThings
     case Map.lookup x builtin of
-	Just (Builtin t) -> return $ Just t
+	Just (Builtin t) -> return $ Just (killRange t)
 	_		 -> return Nothing
 
 getPrimitive :: MonadTCM tcm => String -> tcm PrimFun
@@ -58,7 +59,8 @@
 primInteger, primFloat, primChar, primString, primBool, primTrue, primFalse,
     primList, primNil, primCons, primIO, primNat, primSuc, primZero,
     primNatPlus, primNatMinus, primNatTimes, primNatDivSucAux, primNatModSucAux,
-    primNatEquality, primNatLess, primSize, primSizeSuc, primSizeInf
+    primNatEquality, primNatLess, primSize, primSizeSuc, primSizeInf,
+    primEquality, primRefl, primLevel, primLevelZero, primLevelSuc, primLevelMax
     :: MonadTCM tcm => tcm Term
 primInteger      = getBuiltin builtinInteger
 primFloat        = getBuiltin builtinFloat
@@ -84,6 +86,12 @@
 primSize         = getBuiltin builtinSize
 primSizeSuc      = getBuiltin builtinSizeSuc
 primSizeInf      = getBuiltin builtinSizeInf
+primEquality     = getBuiltin builtinEquality
+primRefl         = getBuiltin builtinRefl
+primLevel        = getBuiltin builtinLevel
+primLevelZero    = getBuiltin builtinLevelZero
+primLevelSuc     = getBuiltin builtinLevelSuc
+primLevelMax     = getBuiltin builtinLevelMax
 
 builtinNat          = "NATURAL"
 builtinSuc          = "SUC"
@@ -109,6 +117,12 @@
 builtinSize         = "SIZE"
 builtinSizeSuc      = "SIZESUC"
 builtinSizeInf      = "SIZEINF"
+builtinEquality     = "EQUALITY"
+builtinRefl         = "REFL"
+builtinLevelMax     = "LEVELMAX"
+builtinLevel        = "LEVEL"
+builtinLevelZero    = "LEVELZERO"
+builtinLevelSuc     = "LEVELSUC"
 
 builtinTypes :: [String]
 builtinTypes =
@@ -118,5 +132,6 @@
     , builtinString
     , builtinBool
     , builtinNat
+    , builtinLevel
     ]
 
diff --git a/src/full/Agda/TypeChecking/Monad/Debug.hs b/src/full/Agda/TypeChecking/Monad/Debug.hs
--- a/src/full/Agda/TypeChecking/Monad/Debug.hs
+++ b/src/full/Agda/TypeChecking/Monad/Debug.hs
@@ -1,8 +1,8 @@
 
 module Agda.TypeChecking.Monad.Debug where
 
-import qualified System.IO.UTF8 as UTF8
+import qualified Agda.Utils.IO.Locale as LocIO
 import Control.Monad.Trans ( MonadIO(liftIO) )
 
 debug :: MonadIO m => String -> m ()
-debug s = liftIO $ UTF8.putStrLn s
+debug s = liftIO $ LocIO.putStrLn s
diff --git a/src/full/Agda/TypeChecking/Monad/Imports.hs b/src/full/Agda/TypeChecking/Monad/Imports.hs
--- a/src/full/Agda/TypeChecking/Monad/Imports.hs
+++ b/src/full/Agda/TypeChecking/Monad/Imports.hs
@@ -14,6 +14,7 @@
 import System.Time
 
 import Agda.Syntax.Abstract.Name
+import qualified Agda.Syntax.Concrete.Name as C
 import Agda.TypeChecking.Monad.Base
 import Agda.Utils.Monad
 
@@ -21,7 +22,7 @@
 addImport m =
     modify $ \s -> s { stImportedModules = Set.insert m $ stImportedModules s }
 
-addImportCycleCheck :: ModuleName -> TCM a -> TCM a
+addImportCycleCheck :: C.TopLevelModuleName -> TCM a -> TCM a
 addImportCycleCheck m =
     local $ \e -> e { envImportPath = m : envImportPath e }
 
@@ -31,11 +32,15 @@
 isImported :: ModuleName -> TCM Bool
 isImported m = Set.member m <$> getImports
 
-getImportPath :: TCM [ModuleName]
+getImportPath :: TCM [C.TopLevelModuleName]
 getImportPath = asks envImportPath
 
-visitModule :: ModuleName -> Interface -> ClockTime -> TCM ()
-visitModule x i t = modify $ \s -> s { stVisitedModules = Map.insert x (i,t) $ stVisitedModules s }
+visitModule :: ModuleInfo -> TCM ()
+visitModule mi = modify $ \s ->
+  s { stVisitedModules =
+        Map.insert (toTopLevelModuleName $ iModuleName $ miInterface mi)
+                   mi $
+          stVisitedModules s }
 
 setVisitedModules :: VisitedModules -> TCM ()
 setVisitedModules ms = modify $ \s -> s { stVisitedModules = ms }
@@ -43,23 +48,13 @@
 getVisitedModules :: TCM VisitedModules
 getVisitedModules = gets stVisitedModules
 
-isVisited :: ModuleName -> TCM Bool
+isVisited :: C.TopLevelModuleName -> TCM Bool
 isVisited x = gets $ Map.member x . stVisitedModules
 
-getVisitedModule :: ModuleName -> TCM (Maybe (Interface, ClockTime))
+getVisitedModule :: C.TopLevelModuleName
+                 -> TCM (Maybe ModuleInfo)
 getVisitedModule x = gets $ Map.lookup x . stVisitedModules
 
--- | This map includes the current module, if it has been type
--- checked, along with the visited modules.
-
-getAllModules :: TCM (Map ModuleName Interface)
-getAllModules = do
-  visited <- Map.map fst <$> getVisitedModules
-  current <- stCurrentModule <$> get
-  case current of
-    Nothing      -> return visited
-    Just (m, i)  -> return (Map.insert m i visited)
-
 getDecodedModules :: TCM DecodedModules
 getDecodedModules = gets stDecodedModules
 
@@ -72,16 +67,19 @@
                                 setDecodedModules ms
                                 return a
 
-getDecodedModule :: ModuleName -> TCM (Maybe (Interface, ClockTime))
+getDecodedModule :: C.TopLevelModuleName -> TCM (Maybe (Interface, ClockTime))
 getDecodedModule x = gets $ Map.lookup x . stDecodedModules
 
-storeDecodedModule :: ModuleName -> Interface -> ClockTime -> TCM ()
-storeDecodedModule x i t = modify $ \s -> s { stDecodedModules = Map.insert x (i,t) $ stDecodedModules s }
+storeDecodedModule :: Interface -> ClockTime -> TCM ()
+storeDecodedModule i t = modify $ \s ->
+  s { stDecodedModules =
+        Map.insert (toTopLevelModuleName $ iModuleName i) (i, t) $
+          stDecodedModules s }
 
-dropDecodedModule :: ModuleName -> TCM ()
+dropDecodedModule :: C.TopLevelModuleName -> TCM ()
 dropDecodedModule x = modify $ \s -> s { stDecodedModules = Map.delete x $ stDecodedModules s }
 
-withImportPath :: [ModuleName] -> TCM a -> TCM a
+withImportPath :: [C.TopLevelModuleName] -> TCM a -> TCM a
 withImportPath path = local $ \e -> e { envImportPath = path }
 
 -- | Assumes that the first module in the import path is the module we are
diff --git a/src/full/Agda/TypeChecking/Monad/MetaVars.hs b/src/full/Agda/TypeChecking/Monad/MetaVars.hs
--- a/src/full/Agda/TypeChecking/Monad/MetaVars.hs
+++ b/src/full/Agda/TypeChecking/Monad/MetaVars.hs
@@ -45,6 +45,13 @@
 getMetaPriority :: MonadTCM tcm => MetaId -> tcm MetaPriority
 getMetaPriority i = mvPriority <$> lookupMeta i
 
+isSortMeta :: MonadTCM tcm => MetaId -> tcm Bool
+isSortMeta m = do
+  mv <- lookupMeta m
+  return $ case mvJudgement mv of
+    HasType{} -> False
+    IsSort{}  -> True
+
 createMetaInfo :: MonadTCM tcm => tcm MetaInfo
 createMetaInfo =
     do  r <- getCurrentRange
diff --git a/src/full/Agda/TypeChecking/Monad/Options.hs b/src/full/Agda/TypeChecking/Monad/Options.hs
--- a/src/full/Agda/TypeChecking/Monad/Options.hs
+++ b/src/full/Agda/TypeChecking/Monad/Options.hs
@@ -6,12 +6,14 @@
 import Control.Monad.State
 import Data.Maybe
 import Text.PrettyPrint
-import qualified System.IO.UTF8 as UTF8
+import qualified Agda.Utils.IO.Locale as LocIO
 import System.Directory
+import System.FilePath
 
 import Agda.TypeChecking.Monad.Base
 import Agda.Interaction.Options
 import Agda.Syntax.Abstract
+import Agda.Utils.FileName
 import Agda.Utils.Monad
 import Agda.Utils.List
 import Agda.Utils.Trie (Trie)
@@ -20,11 +22,24 @@
 #include "../../undefined.h"
 import Agda.Utils.Impossible
 
--- | Sets the command line options. Ensures that the 'optInputFile'
--- field contains an absolute path.
+-- | Does the operation apply to the persistent options or only to the
+-- pragma options? In the former case the pragma options are also
+-- updated.
 
-setCommandLineOptions :: MonadTCM tcm => CommandLineOptions -> tcm ()
-setCommandLineOptions opts =
+data Target = PersistentOptions | PragmaOptions
+
+-- | Sets the command line options.
+--
+-- Ensures that the 'optInputFile' field contains an absolute path.
+--
+-- An empty list of include directories is interpreted as @["."]@.
+
+setCommandLineOptions
+  :: MonadTCM tcm
+  => Target
+  -> CommandLineOptions
+  -> tcm ()
+setCommandLineOptions target opts =
   case checkOpts opts of
     Left err   -> __IMPOSSIBLE__
     Right opts -> do
@@ -34,17 +49,29 @@
           -- canonicalizePath seems to return absolute paths.
           f <- liftIO $ canonicalizePath f
           return (opts { optInputFile = Just f })
-      liftTCM $ modify $ \s -> s { stOptions = opts }
+      let newOpts = opts { optIncludeDirs =
+              case optIncludeDirs opts of
+                [] -> ["."]
+                is -> is
+            }
+      case target of
+        PersistentOptions ->
+          modify $ \s -> s { stPersistentOptions = newOpts
+                           , stPragmaOptions     = newOpts
+                           }
+        PragmaOptions ->
+          modify $ \s -> s { stPragmaOptions     = newOpts
+                           }
 
 commandLineOptions :: MonadTCM tcm => tcm CommandLineOptions
-commandLineOptions = liftTCM $ gets stOptions
+commandLineOptions = liftTCM $ gets stPragmaOptions
 
 setOptionsFromPragma :: MonadTCM tcm => Pragma -> tcm ()
 setOptionsFromPragma (OptionsPragma xs) = do
     opts <- commandLineOptions
     case parsePragmaOptions xs opts of
 	Left err    -> typeError $ GenericError err
-	Right opts' -> setCommandLineOptions opts'
+	Right opts' -> setCommandLineOptions PragmaOptions opts'
 setOptionsFromPragma _ = return ()
 
 setOptionsFromPragmas :: MonadTCM tcm => [Pragma] -> tcm ()
@@ -72,16 +99,29 @@
 shouldReifyInteractionPoints :: MonadTCM tcm => tcm Bool
 shouldReifyInteractionPoints = asks envReifyInteractionPoints
 
-getIncludeDirs :: MonadTCM tcm => tcm [FilePath]
-getIncludeDirs = addDot . optIncludeDirs <$> commandLineOptions
-    where
-	addDot [] = ["."]   -- if there are no include dirs we use .
-	addDot is = is
+-- | Gets the include directories.
 
+getIncludeDirs :: MonadTCM tcm => tcm [AbsolutePath]
+getIncludeDirs =
+  map mkAbsolute . optIncludeDirs <$> commandLineOptions
+
+-- | Makes the include directories absolute.
+--
+-- Relative directories are made absolute with respect to the given
+-- path.
+
+makeIncludeDirsAbsolute :: MonadTCM tcm => AbsolutePath -> tcm ()
+makeIncludeDirsAbsolute root = do
+  opts <- commandLineOptions
+  setCommandLineOptions PersistentOptions $
+    opts { optIncludeDirs =
+             map (filePath root </>) $ optIncludeDirs opts }
+
 setInputFile :: MonadTCM tcm => FilePath -> tcm ()
 setInputFile file =
     do	opts <- commandLineOptions
-	setCommandLineOptions $ opts { optInputFile = Just file }
+	setCommandLineOptions PersistentOptions $
+          opts { optInputFile = Just file }
 
 -- | Should only be run if 'hasInputFile'.
 getInputFile :: MonadTCM tcm => tcm FilePath
@@ -97,6 +137,9 @@
 proofIrrelevance :: MonadTCM tcm => tcm Bool
 proofIrrelevance = optProofIrrelevance <$> commandLineOptions
 
+hasUniversePolymorphism :: MonadTCM tcm => tcm Bool
+hasUniversePolymorphism = optUniversePolymorphism <$> commandLineOptions
+
 showImplicitArguments :: MonadTCM tcm => tcm Bool
 showImplicitArguments = optShowImplicit <$> commandLineOptions
 
@@ -104,10 +147,12 @@
 setShowImplicitArguments showImp ret = do
   opts <- commandLineOptions
   let imp = optShowImplicit opts
-  setCommandLineOptions $ opts { optShowImplicit = showImp }
+  setCommandLineOptions PersistentOptions $
+    opts { optShowImplicit = showImp }
   x <- ret
   opts <- commandLineOptions
-  setCommandLineOptions $ opts { optShowImplicit = imp }
+  setCommandLineOptions PersistentOptions $
+    opts { optShowImplicit = imp }
   return x
 
 ignoreInterfaces :: MonadTCM tcm => tcm Bool
@@ -134,11 +179,11 @@
     when (n <= m) action
 
 reportS :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm ()
-reportS k n s = verboseS k n $ liftIO $ UTF8.putStr s
+reportS k n s = verboseS k n $ liftIO $ LocIO.putStr s
 
 reportSLn :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm ()
-reportSLn k n s = verboseS k n $ liftIO $ UTF8.putStrLn s
+reportSLn k n s = verboseS k n $ liftIO $ LocIO.putStrLn s
 
 reportSDoc :: MonadTCM tcm => VerboseKey -> Int -> tcm Doc -> tcm ()
-reportSDoc k n d = verboseS k n $ liftIO . UTF8.print =<< d
+reportSDoc k n d = verboseS k n $ liftIO . LocIO.print =<< d
 
diff --git a/src/full/Agda/TypeChecking/Monad/Signature.hs b/src/full/Agda/TypeChecking/Monad/Signature.hs
--- a/src/full/Agda/TypeChecking/Monad/Signature.hs
+++ b/src/full/Agda/TypeChecking/Monad/Signature.hs
@@ -9,7 +9,7 @@
 import qualified Data.Map as Map
 import Data.List
 import Data.Function
-import qualified System.IO.UTF8 as UTF8
+import qualified Agda.Utils.IO.Locale as LocIO
 
 import Agda.Syntax.Abstract.Name
 import Agda.Syntax.Common
@@ -204,8 +204,10 @@
                   oldDef { conPars = np - size ts, conData = copyName d }
                 Datatype{ dataPars = np, dataCons = cs } ->
                   oldDef { dataPars = np - size ts, dataClause = Just cl, dataCons = map copyName cs }
-                Record{ recPars = np, recTel = tel } ->
-                  oldDef { recPars = np - size ts, recClause = Just cl, recTel = apply tel ts }
+                Record{ recPars = np, recConType = t, recTel = tel } ->
+                  oldDef { recPars = np - size ts, recClause = Just cl
+                         , recConType = apply t ts, recTel = apply tel ts
+                         }
 		_ ->
                   Function { funClauses        = [cl]
                            , funDelayed        = NotDelayed
@@ -266,18 +268,34 @@
     Constructor{ conInd = i }     -> return i
     _                             -> __IMPOSSIBLE__
 
+-- | Does the given constructor come from a single-constructor type?
+--
+-- Precondition: The name has to refer to a constructor.
+singleConstructorType :: QName -> TCM Bool
+singleConstructorType q = do
+  d <- theDef <$> getConstInfo q
+  case d of
+    Record {}                   -> return True
+    Constructor { conData = d } -> do
+      di <- theDef <$> getConstInfo d
+      return $ case di of
+        Record {}                  -> True
+        Datatype { dataCons = cs } -> length cs == 1
+        _                          -> __IMPOSSIBLE__
+    _ -> __IMPOSSIBLE__
+
 -- | Lookup the definition of a name. The result is a closed thing, all free
 --   variables have been abstracted over.
 getConstInfo :: MonadTCM tcm => QName -> tcm Definition
-getConstInfo q = liftTCM $ do
-  ab    <- treatAbstractly q
-  defs  <- sigDefinitions <$> getSignature
-  idefs <- sigDefinitions <$> getImportedSignature
-  let smash = (++) `on` maybe [] (:[])
-  case smash (Map.lookup q defs) (Map.lookup q idefs) of
-      []  -> fail $ show (getRange q) ++ ": no such name " ++ show q
+getConstInfo q = liftTCM $ join $ pureTCM $ \st env ->
+  let defs  = sigDefinitions $ stSignature st
+      idefs = sigDefinitions $ stImports st
+      ab    = treatAbstractly' q env
+      smash = (++) `on` maybe [] (:[])
+  in case smash (Map.lookup q defs) (Map.lookup q idefs) of
+      []  -> fail $ "Unbound name: " ++ show q
       [d] -> mkAbs ab d
-      ds  -> fail $ show (getRange q) ++ ": ambiguous name " ++ show q
+      ds  -> fail $ "Ambiguous name: " ++ show q
   where
     mkAbs True d =
       case makeAbstract d of
@@ -346,10 +364,11 @@
 --   number of parameters if we're currently inside the section and 0 otherwise.
 getSecFreeVars :: MonadTCM tcm => ModuleName -> tcm Nat
 getSecFreeVars m = do
-  sig <- sigSections <$> getSignature
+  sig  <- sigSections <$> getSignature
+  isig <- sigSections <$> getImportedSignature
   top <- currentModule
   case top `isSubModuleOf` m || top == m of
-    True  -> return $ maybe 0 secFreeVars $ Map.lookup m sig
+    True  -> return $ maybe 0 secFreeVars $ Map.lookup m (Map.union sig isig)
     False -> return 0
 
 -- | Compute the number of free variables of a module. This is the sum of
@@ -376,7 +395,7 @@
   verboseS "tc.sig.inst" 30 $ do
     ctx <- getContext
     m   <- currentModule
-    liftIO $ UTF8.putStrLn $ "instDef in " ++ show m ++ ": " ++ show (defName d) ++ " " ++
+    liftIO $ LocIO.putStrLn $ "instDef in " ++ show m ++ ": " ++ show (defName d) ++ " " ++
 			unwords (map show . take (size vs) . reverse . map (fst . unArg) $ ctx)
   return $ d `apply` vs
 
diff --git a/src/full/Agda/TypeChecking/Monad/SizedTypes.hs b/src/full/Agda/TypeChecking/Monad/SizedTypes.hs
--- a/src/full/Agda/TypeChecking/Monad/SizedTypes.hs
+++ b/src/full/Agda/TypeChecking/Monad/SizedTypes.hs
@@ -24,7 +24,7 @@
   `catchError` \_ -> return False
 
 sizeType :: MonadTCM tcm => tcm Type
-sizeType = El (Type 0) <$> primSize
+sizeType = El (mkType 0) <$> primSize
 
 sizeSuc :: MonadTCM tcm => tcm (Maybe QName)
 sizeSuc = liftTCM $
diff --git a/src/full/Agda/TypeChecking/Monad/State.hs b/src/full/Agda/TypeChecking/Monad/State.hs
--- a/src/full/Agda/TypeChecking/Monad/State.hs
+++ b/src/full/Agda/TypeChecking/Monad/State.hs
@@ -3,6 +3,8 @@
 
 import Control.Applicative
 import Control.Monad.State
+import Data.Set (Set)
+import qualified Data.Set as Set
 
 import Agda.Syntax.Common
 import Agda.Syntax.Scope.Base
@@ -14,14 +16,14 @@
 
 import Agda.Utils.Hash
 
--- | Resets the type checking state. The command line options are
--- preserved.
+-- | Resets the type checking state. The persistent command line
+-- options are preserved.
 
 resetState :: MonadTCM tcm => tcm ()
 resetState = liftTCM $ do
-    opts <- commandLineOptions
+    opts <- stPersistentOptions <$> get
     put initState
-    setCommandLineOptions opts
+    setCommandLineOptions PersistentOptions opts
 
 -- | Set the current scope.
 setScope :: MonadTCM tcm => ScopeInfo -> tcm ()
@@ -82,9 +84,9 @@
 -- | Tell the compiler to import the given Haskell module.
 addHaskellImport :: MonadTCM tcm => String -> tcm ()
 addHaskellImport i =
-  modify $ \s -> s { stHaskellImports = i : stHaskellImports s }
+  modify $ \s -> s { stHaskellImports = Set.insert i $ stHaskellImports s }
 
 -- | Get the Haskell imports.
-getHaskellImports :: MonadTCM tcm => tcm [String]
+getHaskellImports :: MonadTCM tcm => tcm (Set String)
 getHaskellImports = gets stHaskellImports
 
diff --git a/src/full/Agda/TypeChecking/Pretty.hs b/src/full/Agda/TypeChecking/Pretty.hs
--- a/src/full/Agda/TypeChecking/Pretty.hs
+++ b/src/full/Agda/TypeChecking/Pretty.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeSynonymInstances, UndecidableInstances #-}
+{-# LANGUAGE CPP, TypeSynonymInstances, UndecidableInstances #-}
 module Agda.TypeChecking.Pretty where
 
 import Control.Applicative hiding (empty)
@@ -15,7 +15,10 @@
 import Agda.TypeChecking.Monad
 
 import qualified Agda.Utils.Pretty as P
+import Agda.Utils.Impossible
 
+#include "../undefined.h"
+
 ---------------------------------------------------------------------------
 -- * Wrappers for pretty printing combinators
 ---------------------------------------------------------------------------
@@ -107,10 +110,22 @@
 		, nest 2 $ brackets $ sep $ punctuate comma $ map prettyTCM cs
 		]
 	UnBlock m   -> do
-	    BlockedConst t <- mvInstantiation <$> lookupMeta m
-	    sep [ text (show m) <+> text ":="
-		, nest 2 $ prettyTCM t
-		]
+	    -- BlockedConst t <- mvInstantiation <$> lookupMeta m
+	    mi <- mvInstantiation <$> lookupMeta m
+            case mi of
+              BlockedConst t ->
+                sep [ text (show m) <+> text ":="
+                    , nest 2 $ prettyTCM t
+                    ]
+              PostponedTypeCheckingProblem cl -> enterClosure cl $ \(e, a, _) ->
+                sep [ text (show m) <+> text ":="
+                    , nest 2 $ sep [ prettyA e <+> text ":"
+                                   , prettyTCM a
+                                   ]
+                    ]
+              Open{}  -> __IMPOSSIBLE__
+              InstS{} -> __IMPOSSIBLE__
+              InstV{} -> __IMPOSSIBLE__
         IsEmpty t ->
             sep [ text "Is empty:", nest 2 $ prettyTCM t ]
 
diff --git a/src/full/Agda/TypeChecking/Primitive.hs b/src/full/Agda/TypeChecking/Primitive.hs
--- a/src/full/Agda/TypeChecking/Primitive.hs
+++ b/src/full/Agda/TypeChecking/Primitive.hs
@@ -7,6 +7,7 @@
 module Agda.TypeChecking.Primitive where
 
 import Control.Monad
+import Control.Monad.Error
 import Data.Map (Map)
 import qualified Data.Map as Map
 import Data.Char
@@ -25,6 +26,8 @@
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Errors
 import Agda.TypeChecking.Pretty ()  -- instances only
+import {-# SOURCE #-} Agda.TypeChecking.Conversion
+import Agda.TypeChecking.Constraints
 
 import Agda.Utils.Monad
 import Agda.Utils.Pretty (pretty)
@@ -34,13 +37,17 @@
 
 -- | Rewrite a literal to constructor form if possible.
 constructorForm :: MonadTCM tcm => Term -> tcm Term
-constructorForm v@(Lit (LitInt r n))
-    | n == 0	= primZero
-    | n > 0	= do
-	s <- primSuc
-	return $ s `apply` [Arg NotHidden $ Lit $ LitInt r $ n - 1]
-    | otherwise	= return v
-constructorForm v = return v
+constructorForm v = case v of
+    Lit (LitInt r n)   -> cons primZero primSuc (LitInt r) n
+    Lit (LitLevel r n) -> cons primLevelZero primLevelSuc (LitLevel r) n
+    _                  -> return v
+  where
+    cons pZero pSuc lit n
+      | n == 0  = pZero
+      | n > 0   = do
+        s <- pSuc
+        return $ s `apply` [Arg NotHidden $ Lit $ lit $ n - 1]
+      | otherwise	= return v
 
 ---------------------------------------------------------------------------
 -- * Primitive functions
@@ -56,6 +63,12 @@
 newtype Nat = Nat { unNat :: Integer }
     deriving (Eq, Ord, Num, Integral, Enum, Real)
 
+newtype Lvl = Lvl { unLvl :: Integer }
+  deriving (Eq, Ord)
+
+instance Show Lvl where
+  show = show . unLvl
+
 instance Show Nat where
     show = show . unNat
 
@@ -75,6 +88,7 @@
 instance PrimTerm Double  where primTerm _ = primFloat
 instance PrimTerm Str	  where primTerm _ = primString
 instance PrimTerm Nat	  where primTerm _ = primNat
+instance PrimTerm Lvl     where primTerm _ = primLevel
 
 instance PrimTerm a => PrimTerm [a] where
     primTerm _ = list (primTerm (undefined :: a))
@@ -89,6 +103,7 @@
 
 instance ToTerm Integer where toTerm = return $ Lit . LitInt noRange
 instance ToTerm Nat	where toTerm = return $ Lit . LitInt noRange . unNat
+instance ToTerm Lvl	where toTerm = return $ Lit . LitLevel noRange . unLvl
 instance ToTerm Double  where toTerm = return $ Lit . LitFloat noRange
 instance ToTerm Char	where toTerm = return $ Lit . LitChar noRange
 instance ToTerm Str	where toTerm = return $ Lit . LitString noRange . unStr
@@ -133,6 +148,11 @@
 	LitInt _ n -> Just $ Nat n
 	_	   -> Nothing
 
+instance FromTerm Lvl where
+    fromTerm = fromLiteral $ \l -> case l of
+	LitLevel _ n -> Just $ Lvl n
+	_	     -> Nothing
+
 instance FromTerm Double where
     fromTerm = fromLiteral $ \l -> case l of
 	LitFloat _ x -> Just x
@@ -219,6 +239,18 @@
     Lit lit -> f lit
     _	    -> Nothing
 
+-- trustMe : {A : Set}{a b : A} -> a ≡ b
+primTrustMe :: MonadTCM tcm => tcm PrimitiveImpl
+primTrustMe = do
+  refl <- primRefl
+  t    <- hPi "A" tset $ hPi "a" (el $ var 0) $ hPi "b" (el $ var 1) $
+          el (primEquality <#> var 2 <@> var 1 <@> var 0)
+  return $ PrimImpl t $ PrimFun __IMPOSSIBLE__ 3 $ \[t, a, b] -> liftTCM $ do
+      noConstraints $ equalTerm (El (mkType 0) $ unArg t) (unArg a) (unArg b)
+      rf <- return refl <#> return (unArg t) <#> return (unArg a)
+      redReturn rf
+    `catchError` \_ -> return (NoReduction [t, a, b])
+
 -- Tying the knot
 mkPrimFun1 :: (MonadTCM tcm, PrimType a, PrimType b, FromTerm a, ToTerm b) =>
 	      (a -> b) -> tcm PrimitiveImpl
@@ -326,10 +358,10 @@
 io t = primIO <@> t
 
 el :: MonadTCM tcm => tcm Term -> tcm Type
-el t = El (Type 0) <$> t
+el t = El (mkType 0) <$> t
 
 tset :: MonadTCM tcm => tcm Type
-tset = return $ sort (Type 0)
+tset = return $ sort (mkType 0)
 
 ---------------------------------------------------------------------------
 -- * The actual primitive functions
@@ -367,6 +399,7 @@
         in mkPrimFun4 aux
     , "primNatEquality"	    |-> mkPrimFun2 ((==)		    :: Rel Nat)
     , "primNatLess"	    |-> mkPrimFun2 ((<)			    :: Rel Nat)
+    , "primLevelMax"	    |-> mkPrimFun2 (max			    :: Op Lvl)
 
     -- Floating point functions
     , "primIntegerToFloat"  |-> mkPrimFun1 (fromIntegral :: Integer -> Double)
@@ -405,6 +438,9 @@
     , "primStringAppend"    |-> mkPrimFun2 (\s1 s2 -> Str $ unStr s1 ++ unStr s2)
     , "primStringEquality"  |-> mkPrimFun2 ((==) :: Rel Str)
     , "primShowString"	    |-> mkPrimFun1 (Str . show . pretty . LitString noRange . unStr)
+
+    -- Other stuff
+    , "primTrustMe"         |-> primTrustMe
     ]
     where
 	(|->) = (,)
diff --git a/src/full/Agda/TypeChecking/Records.hs b/src/full/Agda/TypeChecking/Records.hs
--- a/src/full/Agda/TypeChecking/Records.hs
+++ b/src/full/Agda/TypeChecking/Records.hs
@@ -3,6 +3,7 @@
 module Agda.TypeChecking.Records where
 
 import Control.Applicative
+import Control.Arrow ((***))
 import Control.Monad
 import Data.List
 
@@ -10,6 +11,7 @@
 import qualified Agda.Syntax.Concrete.Name as C
 import Agda.Syntax.Abstract.Name
 import Agda.Syntax.Internal
+import Agda.Syntax.Position
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Pretty
@@ -55,19 +57,27 @@
     _        -> typeError $ ShouldBeRecordType (El Prop $ Def r [])
 
 -- | Get the field names of a record.
-getRecordFieldNames :: MonadTCM tcm => QName -> tcm [C.Name]
-getRecordFieldNames r = map (nameConcrete . qnameName) . recFields <$> getRecordDef r
+getRecordFieldNames :: MonadTCM tcm => QName -> tcm [(Hiding, C.Name)]
+getRecordFieldNames r =
+  map (id *** nameConcrete . qnameName) . recFields <$> getRecordDef r
 
 -- | Get the field types of a record.
 getRecordFieldTypes :: MonadTCM tcm => QName -> tcm Telescope
 getRecordFieldTypes r = recTel <$> getRecordDef r
 
 -- | Get the type of the record constructor.
-getRecordConstructorType :: MonadTCM tcm => QName -> [Arg Term] -> tcm Type
-getRecordConstructorType r pars = do
-  Record{ recTel = tel, recSort = s} <- getRecordDef r
-  return $ telePi (apply tel pars) $ El s $ Def r pars
+getRecordConstructorType :: MonadTCM tcm => QName -> tcm Type
+getRecordConstructorType r = recConType <$> getRecordDef r
 
+-- | Returns the given record type's constructor name (with an empty
+-- range).
+getRecordConstructor :: MonadTCM tcm => QName -> tcm QName
+getRecordConstructor r = killRange <$> do
+  c <- recCon <$> getRecordDef r
+  case c of
+    Nothing -> return r
+    Just c  -> return c
+
 -- | Check if a name refers to a record.
 isRecord :: MonadTCM tcm => QName -> tcm Bool
 isRecord r = do
@@ -86,8 +96,8 @@
 etaExpandRecord :: MonadTCM tcm => QName -> Args -> Term -> tcm (Telescope, Args)
 etaExpandRecord r pars u = do
   Record{ recFields = xs, recTel = tel } <- getRecordDef r
-  let tel'   = apply tel pars
-      proj x = Arg NotHidden $ Def x $ map hide pars ++ [Arg NotHidden u]
+  let tel'        = apply tel pars
+      proj (h, x) = Arg h $ Def x $ map hide pars ++ [Arg NotHidden u]
   reportSDoc "tc.record.eta" 20 $ vcat
     [ text "eta expanding" <+> prettyTCM u <+> text ":" <+> prettyTCM r
     , nest 2 $ vcat
@@ -103,18 +113,16 @@
 etaContractRecord :: MonadTCM tcm => QName -> Args -> tcm Term
 etaContractRecord r args = do
   Record{ recFields = xs } <- getRecordDef r
-  let check (Arg _ v) x = do
+  let check (Arg _ v) (_, x) = do
         case v of
           Def y args@(_:_) | x == y -> return (Just $ unArg $ last args)
           _                         -> return Nothing
   unless (length args == length xs) __IMPOSSIBLE__
   cs <- zipWithM check args xs
+  let fallBack = Con <$> getRecordConstructor r <*> return args
   case sequence cs of
     Just (c:cs) -> do
       if all (c ==) cs
         then return c
         else fallBack
     _ -> fallBack
-  where
-    fallBack = return (Con r args)
-
diff --git a/src/full/Agda/TypeChecking/Records.hs-boot b/src/full/Agda/TypeChecking/Records.hs-boot
--- a/src/full/Agda/TypeChecking/Records.hs-boot
+++ b/src/full/Agda/TypeChecking/Records.hs-boot
@@ -2,8 +2,9 @@
 module Agda.TypeChecking.Records where
 
 import Agda.Syntax.Abstract.Name
+import Agda.Syntax.Common (Hiding)
 import qualified Agda.Syntax.Concrete.Name as C
 import Agda.TypeChecking.Monad
 
 isRecord :: MonadTCM tcm => QName -> tcm Bool
-getRecordFieldNames :: MonadTCM tcm => QName -> tcm [C.Name]
+getRecordFieldNames :: MonadTCM tcm => QName -> tcm [(Hiding, C.Name)]
diff --git a/src/full/Agda/TypeChecking/Reduce.hs b/src/full/Agda/TypeChecking/Reduce.hs
--- a/src/full/Agda/TypeChecking/Reduce.hs
+++ b/src/full/Agda/TypeChecking/Reduce.hs
@@ -5,9 +5,11 @@
 import Prelude hiding (mapM)
 import Control.Monad.State hiding (mapM)
 import Control.Monad.Reader hiding (mapM)
+import Control.Monad.Error hiding (mapM)
 import Control.Applicative
 import Data.List as List hiding (sort)
 import Data.Map as Map
+import qualified Data.Set as Set
 import Data.Generics
 import Data.Traversable
 
@@ -21,6 +23,7 @@
 import Agda.TypeChecking.Monad.Context
 import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Free
 
 import {-# SOURCE #-} Agda.TypeChecking.Patterns.Match
 
@@ -29,6 +32,20 @@
 #include "../undefined.h"
 import Agda.Utils.Impossible
 
+traceFun :: MonadTCM tcm => String -> tcm a -> tcm a
+traceFun s m = do
+  reportSLn "tc.inst" 100 $ "[ " ++ s
+  x <- m
+  reportSLn "tc.inst" 100 $ "]"
+  return x
+
+traceFun' :: (Show a, MonadTCM tcm) => String -> tcm a -> tcm a
+traceFun' s m = do
+  reportSLn "tc.inst" 100 $ "[ " ++ s
+  x <- m
+  reportSLn "tc.inst" 100 $ "  result = " ++ show x ++ "\n]"
+  return x
+
 -- | Instantiate something.
 --   Results in an open meta variable or a non meta.
 --   Doesn't do any reduction, and preserves blocking tags (when blocking meta
@@ -37,15 +54,16 @@
     instantiate :: MonadTCM tcm => t -> tcm t
 
 instance Instantiate Term where
-    instantiate t@(MetaV x args) =
-	do  mi <- mvInstantiation <$> lookupMeta x
-	    case mi of
-		InstV a                        -> instantiate $ a `apply` args
-		Open                           -> return t
-		BlockedConst _                 -> return t
-                PostponedTypeCheckingProblem _ -> return t
-		InstS _                        -> __IMPOSSIBLE__
-    instantiate t = return t
+  instantiate t@(MetaV x args) = do
+    mi <- mvInstantiation <$> lookupMeta x
+    case mi of
+      InstV a                        -> instantiate $ a `apply` args
+      Open                           -> return t
+      BlockedConst _                 -> return t
+      PostponedTypeCheckingProblem _ -> return t
+      InstS _                        -> __IMPOSSIBLE__
+  instantiate (Sort s) = Sort <$> instantiate s
+  instantiate t = return t
 
 instance Instantiate a => Instantiate (Blocked a) where
   instantiate v@NotBlocked{} = return v
@@ -59,23 +77,27 @@
       InstS _                        -> __IMPOSSIBLE__
 
 instance Instantiate Type where
-    instantiate (El s t) = El s <$> instantiate t
+    instantiate (El s t) = El <$> instantiate s <*> instantiate t
 
 instance Instantiate Sort where
     instantiate s = case s of
-	MetaS x -> do
+	MetaS x as -> do
 	    mi <- mvInstantiation <$> lookupMeta x
 	    case mi of
-		InstS s'                       -> instantiate s'
+		InstS s'                       -> do
+                  v <- instantiate (s' `apply` as)
+                  case v of
+                    Sort s -> return s
+                    _      -> __IMPOSSIBLE__
 		Open                           -> return s
 		InstV{}                        -> __IMPOSSIBLE__
 		BlockedConst{}                 -> __IMPOSSIBLE__
                 PostponedTypeCheckingProblem{} -> __IMPOSSIBLE__
-	Type _	  -> return s
-	Prop	  -> return s
-	Suc s	  -> sSuc <$> instantiate s
-	Lub s1 s2 -> sLub <$> instantiate s1 <*> instantiate s2
+        _ -> return s
 
+instance Instantiate t => Instantiate (Abs t) where
+  instantiate = traverse instantiate
+
 instance Instantiate t => Instantiate (Arg t) where
     instantiate = traverse instantiate
 
@@ -101,12 +123,12 @@
     instantiate (ValueCmp cmp t u v) =
 	do  (t,u,v) <- instantiate (t,u,v)
 	    return $ ValueCmp cmp t u v
-    instantiate (TypeCmp cmp a b) = uncurry (TypeCmp cmp) <$> instantiate (a,b)
-    instantiate (TelCmp cmp a b)  = uncurry (TelCmp cmp)  <$> instantiate (a,b)
-    instantiate (SortCmp cmp a b) = uncurry (SortCmp cmp) <$> instantiate (a,b)
-    instantiate (Guarded c cs)    = uncurry Guarded <$> instantiate (c,cs)
-    instantiate (UnBlock m)       = return $ UnBlock m
-    instantiate (IsEmpty t)       = IsEmpty <$> instantiate t
+    instantiate (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> instantiate (a,b)
+    instantiate (TelCmp cmp a b)     = uncurry (TelCmp cmp)  <$> instantiate (a,b)
+    instantiate (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> instantiate (a,b)
+    instantiate (Guarded c cs)       = uncurry Guarded <$> instantiate (c,cs)
+    instantiate (UnBlock m)          = return $ UnBlock m
+    instantiate (IsEmpty t)          = IsEmpty <$> instantiate t
 
 instance (Ord k, Instantiate e) => Instantiate (Map k e) where
     instantiate = traverse instantiate
@@ -131,16 +153,40 @@
       return (El s <$> t)
 
 instance Reduce Sort where
-    reduce s =
-	{-# SCC "reduce<Sort>" #-}
-	do  s <- instantiate s
-	    case s of
-		Suc s'	  -> sSuc <$> reduce s'
-		Lub s1 s2 -> sLub <$> reduce s1 <*> reduce s2
-		Prop	  -> return s
-		Type _	  -> return s
-		MetaS _   -> return s
+    reduce s = {-# SCC "reduce<Sort>" #-}
+      ifM (not <$> hasUniversePolymorphism) (red sSuc sLub s)
+      $ liftTCM $ do
+        suc  <- do sc <- primLevelSuc
+                   return $ \x -> case x of
+                                    Type n -> Type (sc `apply` [Arg NotHidden n])
+                                    _      -> sSuc x
+          `catchError` \_ -> return sSuc
+        lub <- do mx <- primLevelMax
+                  return $ \x y -> case (x, y) of
+                    (Type n, Type m) -> Type (mx `apply` List.map (Arg NotHidden) [n, m])
+                    _                -> sLub x y
+          `catchError` \_ -> return sLub
+        -- need to instantiate all meta to know if we need a DLub or a Lub
+        red suc lub =<< instantiateFull s
+      where
+        red suc lub s = do
+          s <- instantiate s
+          case s of
+            Suc s'     -> suc <$> reduce s'
+            Lub s1 s2  -> lub <$> reduce s1 <*> reduce s2
+            DLub s1 s2 -> do
+              s <- dLub <$> reduce s1 <*> reduce s2
+              case s of
+                DLub{}  -> return s
+                _       -> reduce s   -- TODO: not so nice
+            Prop       -> return s
+            Type s'    -> Type <$> reduce s'
+            MetaS m as -> MetaS m <$> reduce as
+            Inf        -> return Inf
 
+instance Reduce t => Reduce (Abs t) where
+  reduce b = Abs (absName b) <$> underAbstraction_ b reduce
+
 -- Lists are never blocked
 instance Reduce t => Reduce [t] where
     reduce = traverse reduce
@@ -176,19 +222,24 @@
 		Lam _ _    -> return $ notBlocked v
 	where
 	    reduceNat v@(Con c []) = do
-		mz <- getBuiltin' builtinZero
-		case mz of
-		    Just (Con z []) | c == z -> return $ Lit $ LitInt (getRange c) 0
-		    _			     -> return v
+		mz  <- getBuiltin' builtinZero
+                mlz <- getBuiltin' builtinLevelZero
+		case v of
+                  _ | Just v == mz  -> return $ Lit $ LitInt (getRange c) 0
+                    | Just v == mlz -> return $ Lit $ LitLevel (getRange c) 0
+		  _		    -> return v
 	    reduceNat v@(Con c [Arg NotHidden w]) = do
-		ms <- getBuiltin' builtinSuc
-		case ms of
-		    Just (Con s []) | c == s -> do
-			w <- reduce w
-			case w of
-			    Lit (LitInt r n) -> return $ Lit $ LitInt (fuseRange c r) $ n + 1
-			    _		     -> return $ Con c [Arg NotHidden w]
-		    _	-> return v
+		ms  <- getBuiltin' builtinSuc
+                mls <- getBuiltin' builtinLevelSuc
+		case v of
+                  _ | Just (Con c []) == ms ||
+                      Just (Con c []) == mls -> inc <$> reduce w
+		  _	                     -> return v
+                  where
+                    inc w = case w of
+                      Lit (LitInt r n) -> Lit (LitInt (fuseRange c r) $ n + 1)
+                      Lit (LitLevel r n) -> Lit (LitLevel (fuseRange c r) $ n + 1)
+                      _                  -> Con c [Arg NotHidden w]
 	    reduceNat v = return v
 
 -- | If the first argument is 'True', then a single delayed clause may
@@ -204,12 +255,12 @@
               return $ notBlocked $ Con (c `withRangeOf` f) args
             Primitive ConcreteDef x cls -> do
                 pf <- getPrimitive x
-                reducePrimitive x v0 f args pf (defDelayed info) cls
+                reducePrimitive x v0 f args pf (defDelayed info) (maybe [] id cls)
             _  -> reduceNormal v0 f args (defDelayed info) (defClauses info)
   where
     reducePrimitive x v0 f args pf delayed cls
         | n < ar    = return $ notBlocked $ v0 `apply` args -- not fully applied
-        | otherwise = do
+        | otherwise = {-# SCC "reducePrimitive" #-} do
             let (args1,args2) = genericSplitAt ar args
             r <- def args1
             case r of
@@ -221,7 +272,7 @@
             ar  = primFunArity pf
             def = primFunImplementation pf
 
-    reduceNormal v0 f args delayed def = do
+    reduceNormal v0 f args delayed def = {-# SCC "reduceNormal" #-} do
         case (delayed, def) of
             (Delayed, _) | not unfoldDelayed -> defaultResult
             (_, []) -> defaultResult -- no definition for head
@@ -238,7 +289,7 @@
     -- Apply a defined function to it's arguments.
     --   The original term is the first argument applied to the third.
     appDef :: MonadTCM tcm => Term -> [Clause] -> Args -> tcm (Reduced (Blocked Term) Term)
-    appDef v cls args = goCls cls args where
+    appDef v cls args = {-# SCC "appDef" #-} goCls cls args where
 
         goCls :: MonadTCM tcm => [Clause] -> Args -> tcm (Reduced (Blocked Term) Term)
         goCls [] args = typeError $ IncompletePatternMatching v args
@@ -262,7 +313,7 @@
         hasBody (NoBind b)	 = hasBody b
 
         app []		 (Body v')	     = v'
-        app (arg : args) (Bind (Abs _ body)) = app args $ subst arg body -- CBN
+        app (arg : args) (Bind (Abs _ body)) = {-# SCC "instRHS" #-} app args $ subst arg body -- CBN
         app (_   : args) (NoBind body)	     = app args body
         app  _		  NoBody	     = __IMPOSSIBLE__
         app (_ : _)	 (Body _)	     = __IMPOSSIBLE__
@@ -282,12 +333,12 @@
     reduce (ValueCmp cmp t u v) =
 	do  (t,u,v) <- reduce (t,u,v)
 	    return $ ValueCmp cmp t u v
-    reduce (TypeCmp cmp a b) = uncurry (TypeCmp cmp) <$> reduce (a,b)
-    reduce (TelCmp  cmp a b) = uncurry (TelCmp cmp)  <$> reduce (a,b)
-    reduce (SortCmp cmp a b) = uncurry (SortCmp cmp) <$> reduce (a,b)
-    reduce (Guarded c cs)    = uncurry Guarded <$> reduce (c,cs)
-    reduce (UnBlock m)       = return $ UnBlock m
-    reduce (IsEmpty t)       = IsEmpty <$> reduce t
+    reduce (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> reduce (a,b)
+    reduce (TelCmp  cmp a b)    = uncurry (TelCmp cmp)  <$> reduce (a,b)
+    reduce (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> reduce (a,b)
+    reduce (Guarded c cs)       = uncurry Guarded <$> reduce (c,cs)
+    reduce (UnBlock m)          = return $ UnBlock m
+    reduce (IsEmpty t)          = IsEmpty <$> reduce t
 
 instance (Ord k, Reduce e) => Reduce (Map k e) where
     reduce = traverse reduce
@@ -300,7 +351,16 @@
     normalise :: MonadTCM tcm => t -> tcm t
 
 instance Normalise Sort where
-    normalise = reduce
+    normalise s = do
+      s <- reduce s
+      case s of
+        Suc s'     -> sSuc <$> normalise s'
+        Lub s1 s2  -> sLub <$> normalise s1 <*> normalise s2
+        DLub s1 s2 -> dLub <$> normalise s1 <*> normalise s2
+        Prop       -> return s
+        Type s'    -> Type <$> normalise s'
+        MetaS m as -> MetaS m <$> normalise as
+        Inf        -> return Inf
 
 instance Normalise Type where
     normalise (El s t) = El <$> normalise s <*> normalise t
@@ -355,12 +415,12 @@
     normalise (ValueCmp cmp t u v) =
 	do  (t,u,v) <- normalise (t,u,v)
 	    return $ ValueCmp cmp t u v
-    normalise (TypeCmp cmp a b) = uncurry (TypeCmp cmp) <$> normalise (a,b)
-    normalise (TelCmp cmp a b)  = uncurry (TelCmp cmp)  <$> normalise (a,b)
-    normalise (SortCmp cmp a b) = uncurry (SortCmp cmp) <$> normalise (a,b)
-    normalise (Guarded c cs)    = uncurry Guarded <$> normalise (c,cs)
-    normalise (UnBlock m)       = return $ UnBlock m
-    normalise (IsEmpty t)       = IsEmpty <$> normalise t
+    normalise (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> normalise (a,b)
+    normalise (TelCmp cmp a b)     = uncurry (TelCmp cmp)  <$> normalise (a,b)
+    normalise (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> normalise (a,b)
+    normalise (Guarded c cs)       = uncurry Guarded <$> normalise (c,cs)
+    normalise (UnBlock m)          = return $ UnBlock m
+    normalise (IsEmpty t)          = IsEmpty <$> normalise t
 
 instance Normalise Pattern where
   normalise p = case p of
@@ -393,28 +453,31 @@
     instantiateFull s = do
 	s <- instantiate s
 	case s of
-	    MetaS x   -> return $ MetaS x
-	    Type _    -> return s
-	    Prop      -> return s
-	    Suc s     -> sSuc <$> instantiateFull s
-	    Lub s1 s2 -> sLub <$> instantiateFull s1 <*> instantiateFull s2
+	    MetaS x as -> MetaS x <$> instantiateFull as
+	    Type n     -> Type <$> instantiateFull n
+	    Prop       -> return s
+	    Suc s      -> sSuc <$> instantiateFull s
+	    Lub s1 s2  -> sLub <$> instantiateFull s1 <*> instantiateFull s2
+	    DLub s1 s2 -> dLub <$> instantiateFull s1 <*> instantiateFull s2
+            Inf        -> return s
 
 instance InstantiateFull Type where
-    instantiateFull (El s t) = El <$> instantiateFull s <*> instantiateFull t
+    instantiateFull (El s t) =
+      El <$> instantiateFull s <*> instantiateFull t
 
 instance InstantiateFull Term where
-    instantiateFull v =
-	do  v <- instantiate v
-	    case v of
-		Var n vs   -> Var n <$> instantiateFull vs
-		Con c vs   -> Con c <$> instantiateFull vs
-		Def f vs   -> Def f <$> instantiateFull vs
-		MetaV x vs -> MetaV x <$> instantiateFull vs
-		Lit _	   -> return v
-		Lam h b    -> Lam h <$> instantiateFull b
-		Sort s	   -> Sort <$> instantiateFull s
-		Pi a b	   -> uncurry Pi <$> instantiateFull (a,b)
-		Fun a b    -> uncurry Fun <$> instantiateFull (a,b)
+    instantiateFull v = do
+      v <- instantiate v
+      case v of
+          Var n vs   -> Var n <$> instantiateFull vs
+          Con c vs   -> Con c <$> instantiateFull vs
+          Def f vs   -> Def f <$> instantiateFull vs
+          MetaV x vs -> MetaV x <$> instantiateFull vs
+          Lit _	   -> return v
+          Lam h b    -> Lam h <$> instantiateFull b
+          Sort s	   -> Sort <$> instantiateFull s
+          Pi a b	   -> uncurry Pi <$> instantiateFull (a,b)
+          Fun a b    -> uncurry Fun <$> instantiateFull (a,b)
 
 instance InstantiateFull ClauseBody where
     instantiateFull (Body   t) = Body   <$> instantiateFull t
@@ -445,15 +508,16 @@
 	return $ cl { clValue = x }
 
 instance InstantiateFull Constraint where
-    instantiateFull (ValueCmp cmp t u v) =
-	do  (t,u,v) <- instantiateFull (t,u,v)
-	    return $ ValueCmp cmp t u v
-    instantiateFull (TypeCmp cmp a b) = uncurry (TypeCmp cmp) <$> instantiateFull (a,b)
-    instantiateFull (TelCmp cmp a b)  = uncurry (TelCmp cmp)  <$> instantiateFull (a,b)
-    instantiateFull (SortCmp cmp a b) = uncurry (SortCmp cmp) <$> instantiateFull (a,b)
-    instantiateFull (Guarded c cs)    = uncurry Guarded <$> instantiateFull (c,cs)
-    instantiateFull (UnBlock m)       = return $ UnBlock m
-    instantiateFull (IsEmpty t)       = IsEmpty <$> instantiateFull t
+  instantiateFull c = case c of
+    ValueCmp cmp t u v -> do
+      (t,u,v) <- instantiateFull (t,u,v)
+      return $ ValueCmp cmp t u v
+    TypeCmp cmp a b    -> uncurry (TypeCmp cmp) <$> instantiateFull (a,b)
+    TelCmp cmp a b     -> uncurry (TelCmp cmp)  <$> instantiateFull (a,b)
+    SortCmp cmp a b    -> uncurry (SortCmp cmp) <$> instantiateFull (a,b)
+    Guarded c cs       -> uncurry Guarded <$> instantiateFull (c,cs)
+    UnBlock m          -> return $ UnBlock m
+    IsEmpty t          -> IsEmpty <$> instantiateFull t
 
 instance (Ord k, InstantiateFull e) => InstantiateFull (Map k e) where
     instantiateFull = traverse instantiateFull
@@ -502,11 +566,11 @@
 	s  <- instantiateFull s
 	cl <- instantiateFull cl
 	return $ d { dataSort = s, dataClause = cl }
-      Record{ recSort = s, recClause = cl, recTel = tel } -> do
-        s   <- instantiateFull s
+      Record{ recConType = t, recClause = cl, recTel = tel } -> do
+        t   <- instantiateFull t
         cl  <- instantiateFull cl
         tel <- instantiateFull tel
-        return $ d { recSort = s, recClause = cl, recTel = tel }
+        return $ d { recConType = t, recClause = cl, recTel = tel }
       Constructor{} -> return d
       Primitive{ primClauses = cs } -> do
         cs <- instantiateFull cs
@@ -524,8 +588,9 @@
        <*> instantiateFull b
 
 instance InstantiateFull Interface where
-    instantiateFull (Interface ms mod scope sig b hsImports highlighting) =
-	Interface ms mod scope
+    instantiateFull (Interface ms mod scope inside
+                               sig b hsImports highlighting) =
+	Interface ms mod scope inside
 	    <$> instantiateFull sig
 	    <*> instantiateFull b
             <*> return hsImports
diff --git a/src/full/Agda/TypeChecking/Rules/Builtin.hs b/src/full/Agda/TypeChecking/Rules/Builtin.hs
--- a/src/full/Agda/TypeChecking/Rules/Builtin.hs
+++ b/src/full/Agda/TypeChecking/Rules/Builtin.hs
@@ -17,6 +17,7 @@
 import Agda.TypeChecking.Primitive
 import Agda.TypeChecking.Constraints
 import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Pretty
 
 import Agda.TypeChecking.Rules.Term ( checkExpr )
 
@@ -26,73 +27,112 @@
 -- * Checking builtin pragmas
 ---------------------------------------------------------------------------
 
-ensureInductive :: Term -> TCM ()
-ensureInductive t = do
-  t <- normalise t
-  let err = typeError (NotInductive t)
-  case t of
-    Def t _ -> do
-      t <- theDef <$> getConstInfo t
+-- Buitin datatypes and the number of constructors
+builtinDatatypes :: [(String, Int)]
+builtinDatatypes =
+  [ (builtinList, 2)
+  , (builtinBool, 2)
+  , (builtinNat, 2)
+  , (builtinLevel, 2)
+  ]
+
+inductiveCheck :: String -> Term -> TCM ()
+inductiveCheck b t =
+  case lookup b builtinDatatypes of
+    Nothing -> return ()
+    Just n  -> do
+      t <- normalise t
+      let err = typeError (NotInductive t)
       case t of
-        Datatype { dataInduction = Inductive } -> return ()
+        Def t _ -> do
+          t <- theDef <$> getConstInfo t
+          case t of
+            Datatype { dataInduction = Inductive
+                     , dataCons      = cs
+                     }
+              | length cs == n -> return ()
+              | otherwise ->
+                typeError $ GenericError $ unwords
+                            [ "The builtin", b
+                            , "must be a datatype with", show n
+                            , "constructors" ]
+            _ -> err
         _ -> err
-    _ -> err
 
 bindBuiltinType :: String -> A.Expr -> TCM ()
 bindBuiltinType b e = do
-    t <- checkExpr e (sort $ Type 0)
-    when (b `elem` [builtinBool, builtinNat]) $ do
-      ensureInductive t
+    let s = sort $ mkType 0
+    reportSDoc "tc.builtin" 20 $ text "checking builtin type" <+> prettyA e <+> text ":" <+> text (show s)
+    t <- checkExpr e (sort $ mkType 0)
+    inductiveCheck b t
     bindBuiltinName b t
 
+    -- NAT and LEVEL must be different. (Why?)
+    when (b `elem` [builtinNat, builtinLevel]) $ do
+      nat   <- getBuiltin' builtinNat
+      level <- getBuiltin' builtinLevel
+      case (nat, level) of
+        (Just nat, Just level) -> do
+          Def nat   _ <- normalise nat
+          Def level _ <- normalise level
+          when (nat == level) $ typeError $ GenericError $
+            builtinNat ++ " and " ++ builtinLevel ++
+            " have to be different types."
+        _ -> return ()
+
 bindBuiltinBool :: String -> A.Expr -> TCM ()
 bindBuiltinBool b e = do
     bool <- primBool
-    t	 <- checkExpr e $ El (Type 0) bool
+    t    <- checkExpr e $ El (mkType 0) bool
     bindBuiltinName b t
 
 -- | Bind something of type @Set -> Set@.
 bindBuiltinType1 :: String -> A.Expr -> TCM ()
 bindBuiltinType1 thing e = do
-    let set	 = sort (Type 0)
-	setToSet = El (Type 1) $ Fun (Arg NotHidden set) set
+    let set      = sort (mkType 0)
+        setToSet = El (mkType 1) $ Fun (Arg NotHidden set) set
     f <- checkExpr e setToSet
-    when (thing `elem` [builtinList]) $ do
-      ensureInductive f
+    inductiveCheck thing f
     bindBuiltinName thing f
 
-bindBuiltinZero :: A.Expr -> TCM ()
-bindBuiltinZero e = do
-    nat  <- primNat
-    zero <- checkExpr e (El (Type 0) nat)
-    bindBuiltinName builtinZero zero
+bindBuiltinZero' :: String -> TCM Term -> A.Expr -> TCM ()
+bindBuiltinZero' bZero pNat e = do
+    nat  <- pNat
+    zero <- checkExpr e (El (mkType 0) nat)
+    bindBuiltinName bZero zero
 
-bindBuiltinSuc :: A.Expr -> TCM ()
-bindBuiltinSuc e = do
-    nat  <- primNat
-    let	nat' = El (Type 0) nat
-	natToNat = El (Type 0) $ Fun (Arg NotHidden nat') nat'
+bindBuiltinSuc' :: String -> TCM Term -> A.Expr -> TCM ()
+bindBuiltinSuc' bSuc pNat e = do
+    nat  <- pNat
+    let nat' = El (mkType 0) nat
+        natToNat = El (mkType 0) $ Fun (Arg NotHidden nat') nat'
     suc <- checkExpr e natToNat
-    bindBuiltinName builtinSuc suc
+    bindBuiltinName bSuc suc
 
+bindBuiltinZero e = bindBuiltinZero' builtinZero primNat e
+bindBuiltinSuc  e = bindBuiltinSuc'  builtinSuc primNat e
+
+bindBuiltinLevelZero e = bindBuiltinZero' builtinLevelZero primLevel e
+bindBuiltinLevelSuc  e = bindBuiltinSuc'  builtinLevelSuc  primLevel e
+
 typeOfSizeInf :: TCM Type
 typeOfSizeInf = do
     sz  <- primSize
-    return $ (El (Type 0) sz)
+    return $ (El (mkType 0) sz)
 
 typeOfSizeSuc :: TCM Type
 typeOfSizeSuc = do
     sz  <- primSize
-    let	sz' = El (Type 0) sz
-    return $ El (Type 0) $ Fun (Arg NotHidden sz') sz'
+    let sz' = El (mkType 0) sz
+    return $ El (mkType 0) $ Fun (Arg NotHidden sz') sz'
 
 -- | Built-in nil should have type @{A:Set} -> List A@
 bindBuiltinNil :: A.Expr -> TCM ()
 bindBuiltinNil e = do
     list' <- primList
-    let set	= sort (Type 0)
-	list a	= El (Type 0) (list' `apply` [Arg NotHidden a])
-	nilType = telePi (telFromList [Arg Hidden ("A",set)]) $ list (Var 0 [])
+    let set     = sort (mkType 0)
+        list a  = El (mkType 0) (list' `apply` [Arg NotHidden a])
+        nilType = telePi (telFromList [Arg Hidden ("A",set)]) $ list (Var 0 [])
     nil <- checkExpr e nilType
     bindBuiltinName builtinNil nil
 
@@ -100,13 +140,13 @@
 bindBuiltinCons :: A.Expr -> TCM ()
 bindBuiltinCons e = do
     list' <- primList
-    let set	  = sort (Type 0)
-	el	  = El (Type 0)
-	a	  = Var 0 []
-	list x	  = el $ list' `apply` [Arg NotHidden x]
-	hPi x a b = telePi (telFromList [Arg Hidden (x,a)]) b
-	fun a b	  = el $ Fun (Arg NotHidden a) b
-	consType  = hPi "A" set $ el a `fun` (list a `fun` list a)
+    let set       = sort (mkType 0)
+        el        = El (mkType 0)
+        a         = Var 0 []
+        list x    = el $ list' `apply` [Arg NotHidden x]
+        hPi x a b = telePi (telFromList [Arg Hidden (x,a)]) b
+        fun a b   = el $ Fun (Arg NotHidden a) b
+        consType  = hPi "A" set $ el a `fun` (list a `fun` list a)
     cons <- checkExpr e consType
     bindBuiltinName builtinCons cons
 
@@ -122,9 +162,9 @@
 
     info <- getConstInfo qx
     let cls = defClauses info
-	a   = defAbstract info
+        a   = defAbstract info
     bindPrimitive name $ pf { primFunName = qx }
-    addConstant qx $ info { theDef = Primitive a name cls }
+    addConstant qx $ info { theDef = Primitive a name (Just cls) }
 
     -- needed? yes, for checking equations for mul
     bindBuiltinName builtin v
@@ -132,140 +172,184 @@
 
 builtinPrimitives :: [ (String, (String, Term -> TCM ())) ]
 builtinPrimitives =
-    [ "NATPLUS"      |-> ("primNatPlus", verifyPlus)
-    , "NATMINUS"     |-> ("primNatMinus", verifyMinus)
-    , "NATTIMES"     |-> ("primNatTimes", verifyTimes)
-    , "NATDIVSUCAUX" |-> ("primNatDivSucAux", verifyDivSucAux)
-    , "NATMODSUCAUX" |-> ("primNatModSucAux", verifyModSucAux)
-    , "NATEQUALS"    |-> ("primNatEquality", verifyEquals)
-    , "NATLESS"      |-> ("primNatLess", verifyLess)
+    [ "NATPLUS"       |-> ("primNatPlus", verifyPlus)
+    , "NATMINUS"      |-> ("primNatMinus", verifyMinus)
+    , "NATTIMES"      |-> ("primNatTimes", verifyTimes)
+    , "NATDIVSUCAUX"  |-> ("primNatDivSucAux", verifyDivSucAux)
+    , "NATMODSUCAUX"  |-> ("primNatModSucAux", verifyModSucAux)
+    , "NATEQUALS"     |-> ("primNatEquality", verifyEquals)
+    , "NATLESS"       |-> ("primNatLess", verifyLess)
+    , builtinLevelMax |-> ("primLevelMax", verifyMax)
     ]
     where
-	(|->) = (,)
+        (|->) = (,)
 
-	verifyPlus plus =
-	    verify ["n","m"] $ \(@@) zero suc (==) choice -> do
-		let m = Var 0 []
-		    n = Var 1 []
-		    x + y = plus @@ x @@ y
+        verifyPlus plus =
+            verify ["n","m"] $ \(@@) zero suc (==) choice -> do
+                let m = Var 0 []
+                    n = Var 1 []
+                    x + y = plus @@ x @@ y
 
-		-- We allow recursion on any argument
-		choice
-		    [ do n + zero  == n
-			 n + suc m == suc (n + m)
-		    , do suc n + m == suc (n + m)
-			 zero  + m == m
-		    ]
+                -- We allow recursion on any argument
+                choice
+                    [ do n + zero  == n
+                         n + suc m == suc (n + m)
+                    , do suc n + m == suc (n + m)
+                         zero  + m == m
+                    ]
 
-	verifyMinus minus =
-	    verify ["n","m"] $ \(@@) zero suc (==) choice -> do
-		let m = Var 0 []
-		    n = Var 1 []
-		    x - y = minus @@ x @@ y
+        verifyMinus minus =
+            verify ["n","m"] $ \(@@) zero suc (==) choice -> do
+                let m = Var 0 []
+                    n = Var 1 []
+                    x - y = minus @@ x @@ y
 
-		-- We allow recursion on any argument
-		zero  - zero  == zero
-		zero  - suc m == zero
-		suc n - zero  == suc n
-		suc n - suc m == (n - m)
+                -- We allow recursion on any argument
+                zero  - zero  == zero
+                zero  - suc m == zero
+                suc n - zero  == suc n
+                suc n - suc m == (n - m)
 
-	verifyTimes times = do
-	    plus <- primNatPlus
-	    verify ["n","m"] $ \(@@) zero suc (==) choice -> do
-		let m = Var 0 []
-		    n = Var 1 []
-		    x + y = plus  @@ x @@ y
-		    x * y = times @@ x @@ y
+        verifyTimes times = do
+            plus <- primNatPlus
+            verify ["n","m"] $ \(@@) zero suc (==) choice -> do
+                let m = Var 0 []
+                    n = Var 1 []
+                    x + y = plus  @@ x @@ y
+                    x * y = times @@ x @@ y
 
-		choice
-		    [ do n * zero == zero
-			 choice [ (n * suc m) == (n + (n * m))
-				, (n * suc m) == ((n * m) + n)
-				]
-		    , do zero * n == zero
-			 choice [ (suc n * m) == (m + (n * m))
-				, (suc n * m) == ((n * m) + m)
-				]
-		    ]
+                choice
+                    [ do n * zero == zero
+                         choice [ (n * suc m) == (n + (n * m))
+                                , (n * suc m) == ((n * m) + n)
+                                ]
+                    , do zero * n == zero
+                         choice [ (suc n * m) == (m + (n * m))
+                                , (suc n * m) == ((n * m) + m)
+                                ]
+                    ]
 
-	verifyDivSucAux dsAux =
-	    verify ["k","m","n","j"] $ \(@@) zero suc (==) choice -> do
-		let aux k m n j = dsAux @@ k @@ m @@ n @@ j
-		    k	        = Var 0 []
-		    m	        = Var 1 []
-		    n	        = Var 2 []
-		    j	        = Var 3 []
+        verifyDivSucAux dsAux =
+            verify ["k","m","n","j"] $ \(@@) zero suc (==) choice -> do
+                let aux k m n j = dsAux @@ k @@ m @@ n @@ j
+                    k           = Var 0 []
+                    m           = Var 1 []
+                    n           = Var 2 []
+                    j           = Var 3 []
 
                 aux k m zero    j       == k
                 aux k m (suc n) zero    == aux (suc k) m n m
                 aux k m (suc n) (suc j) == aux k m n j
 
-	verifyModSucAux dsAux =
-	    verify ["k","m","n","j"] $ \(@@) zero suc (==) choice -> do
-		let aux k m n j = dsAux @@ k @@ m @@ n @@ j
-		    k	        = Var 0 []
-		    m	        = Var 1 []
-		    n	        = Var 2 []
-		    j	        = Var 3 []
+        verifyModSucAux dsAux =
+            verify ["k","m","n","j"] $ \(@@) zero suc (==) choice -> do
+                let aux k m n j = dsAux @@ k @@ m @@ n @@ j
+                    k           = Var 0 []
+                    m           = Var 1 []
+                    n           = Var 2 []
+                    j           = Var 3 []
 
                 aux k m zero    j       == k
                 aux k m (suc n) zero    == aux zero m n m
                 aux k m (suc n) (suc j) == aux (suc k) m n j
 
-	verifyEquals eq =
-	    verify ["n","m"] $ \(@@) zero suc (===) choice -> do
-	    true  <- primTrue
-	    false <- primFalse
-	    let x == y = eq @@ x @@ y
-		m      = Var 0 []
-		n      = Var 1 []
-	    (zero  == zero ) === true
-	    (suc n == suc m) === (n == m)
-	    (suc n == zero ) === false
-	    (zero  == suc n) === false
+        verifyEquals eq =
+            verify ["n","m"] $ \(@@) zero suc (===) choice -> do
+            true  <- primTrue
+            false <- primFalse
+            let x == y = eq @@ x @@ y
+                m      = Var 0 []
+                n      = Var 1 []
+            (zero  == zero ) === true
+            (suc n == suc m) === (n == m)
+            (suc n == zero ) === false
+            (zero  == suc n) === false
 
-	verifyLess leq =
-	    verify ["n","m"] $ \(@@) zero suc (===) choice -> do
-	    true  <- primTrue
-	    false <- primFalse
-	    let x < y = leq @@ x @@ y
-		m     = Var 0 []
-		n     = Var 1 []
-	    (n     < zero)  === false
-	    (suc n < suc m) === (n < m)
-	    (zero  < suc m) === true
+        verifyLess leq =
+            verify ["n","m"] $ \(@@) zero suc (===) choice -> do
+            true  <- primTrue
+            false <- primFalse
+            let x < y = leq @@ x @@ y
+                m     = Var 0 []
+                n     = Var 1 []
+            (n     < zero)  === false
+            (suc n < suc m) === (n < m)
+            (zero  < suc m) === true
 
-	verify :: [String] -> ( (Term -> Term -> Term) -> Term -> (Term -> Term) ->
-				(Term -> Term -> TCM ()) ->
-				([TCM ()] -> TCM ()) -> TCM a) -> TCM a
-	verify xs f = do
-	    nat	 <- El (Type 0) <$> primNat
-	    zero <- primZero
-	    s    <- primSuc
-	    let x @@ y = x `apply` [Arg NotHidden y]
-		x == y = noConstraints $ equalTerm nat x y
-		suc n  = s @@ n
-		choice = foldr1 (\x y -> x `catchError` \_ -> y)
-	    xs <- mapM freshName_ xs
-	    addCtxs xs (Arg NotHidden nat) $ f (@@) zero suc (==) choice
+        verifyMax maxV =
+            verify' primLevel primLevelZero primLevelSuc ["n","m"] $
+              \(@@) zero suc (==) choice -> do
+                let m = Var 0 []
+                    n = Var 1 []
+                    max x y = maxV @@ x @@ y
 
+                max zero (suc n)    == suc n
+                max (suc n) zero    == suc n
+                max (suc n) (suc m) == suc (max n m)
+
+        verify xs = verify' primNat primZero primSuc xs
+
+        verify' ::  TCM Term -> TCM Term -> TCM Term ->
+                    [String] -> ( (Term -> Term -> Term) -> Term -> (Term -> Term) ->
+                                (Term -> Term -> TCM ()) ->
+                                ([TCM ()] -> TCM ()) -> TCM a) -> TCM a
+        verify' pNat pZero pSuc xs f = do
+            nat  <- El (mkType 0) <$> pNat
+            zero <- pZero
+            s    <- pSuc
+            let x @@ y = x `apply` [Arg NotHidden y]
+                x == y = noConstraints $ equalTerm nat x y
+                suc n  = s @@ n
+                choice = foldr1 (\x y -> x `catchError` \_ -> y)
+            xs <- mapM freshName_ xs
+            addCtxs xs (Arg NotHidden nat) $ f (@@) zero suc (==) choice
+
+bindBuiltinEquality :: A.Expr -> TCM ()
+bindBuiltinEquality e = do
+  let set       = sort (mkType 0)
+      el        = El (mkType 0)
+      a         = Var 0 []
+      hPi x a b = telePi (telFromList [Arg Hidden (x,a)]) b
+      fun a b   = El (mkType 1) $ Fun (Arg NotHidden a) b
+      eqType    = hPi "A" set $ el a `fun` (el a `fun` set)
+  eq <- checkExpr e eqType
+  bindBuiltinName builtinEquality eq
+
+
+bindBuiltinRefl :: A.Expr -> TCM ()
+bindBuiltinRefl e = do
+  eq' <- primEquality
+  let set       = sort (mkType 0)
+      el        = El (mkType 0)
+      v0        = Var 0 []
+      v1        = Var 1 []
+      hPi x a b = telePi (telFromList [Arg Hidden (x, a)]) b
+      fun a b   = el $ Fun (Arg NotHidden a) b
+      eq a b c  = el $ eq' `apply` [Arg Hidden a, Arg NotHidden b, Arg NotHidden c]
+      reflType  = hPi "A" set $ hPi "x" (el v0) $ eq v1 v0 v0
+  refl <- checkExpr e reflType
+  bindBuiltinName builtinRefl refl
+
 -- | Builtin constructors
 builtinConstructors :: [(String, A.Expr -> TCM ())]
 builtinConstructors =
-  [ (builtinNil,     bindBuiltinNil               )
-  , (builtinCons,    bindBuiltinCons              )
-  , (builtinZero,    bindBuiltinZero              )
-  , (builtinSuc,     bindBuiltinSuc               )
-  , (builtinTrue,    bindBuiltinBool builtinTrue  )
-  , (builtinFalse,   bindBuiltinBool builtinFalse )
+  [ (builtinNil,       bindBuiltinNil               )
+  , (builtinCons,      bindBuiltinCons              )
+  , (builtinZero,      bindBuiltinZero              )
+  , (builtinSuc,       bindBuiltinSuc               )
+  , (builtinTrue,      bindBuiltinBool builtinTrue  )
+  , (builtinFalse,     bindBuiltinBool builtinFalse )
+  , (builtinRefl,      bindBuiltinRefl              )
+  , (builtinLevelZero, bindBuiltinLevelZero         )
+  , (builtinLevelSuc,  bindBuiltinLevelSuc          )
   ]
 
 -- | Builtin postulates
 builtinPostulates :: [(String, TCM Type)]
 builtinPostulates =
-  [ (builtinSize,    return $ sort $ Type 0 )
-  , (builtinSizeSuc, typeOfSizeSuc          )
-  , (builtinSizeInf, typeOfSizeInf          )
+  [ (builtinSize,    return $ sort $ mkType 0 )
+  , (builtinSizeSuc, typeOfSizeSuc            )
+  , (builtinSizeInf, typeOfSizeInf            )
   ]
 
 -- | Bind a builtin constructor. Pre-condition: argument is an element of
@@ -303,11 +387,12 @@
     unless top $ typeError $ BuiltinInParameterisedModule b
     bind b e
     where
-	bind b e
-	    | elem b builtinTypes                        = bindBuiltinType b e
-	    | elem b [builtinList]                       = bindBuiltinType1 b e
+        bind b e
+            | elem b builtinTypes                        = bindBuiltinType b e
+            | elem b [builtinList]                       = bindBuiltinType1 b e
+            | b == builtinEquality                       = bindBuiltinEquality e
             | Just bind  <- lookup b builtinConstructors = bindConstructor b bind e
-	    | Just (s,v) <- lookup b builtinPrimitives   = bindBuiltinPrimitive s b e v
+            | Just (s,v) <- lookup b builtinPrimitives   = bindBuiltinPrimitive s b e v
             | Just typ   <- lookup b builtinPostulates   = bindPostulate b typ e
-	    | otherwise                                  = typeError $ NoSuchBuiltinName b
+            | otherwise                                  = typeError $ NoSuchBuiltinName b
 
diff --git a/src/full/Agda/TypeChecking/Rules/Data.hs b/src/full/Agda/TypeChecking/Rules/Data.hs
--- a/src/full/Agda/TypeChecking/Rules/Data.hs
+++ b/src/full/Agda/TypeChecking/Rules/Data.hs
@@ -5,7 +5,6 @@
 import Control.Applicative
 import Control.Monad
 import Control.Monad.Trans
-import qualified System.IO.UTF8 as UTF8
 
 import qualified Agda.Syntax.Abstract as A
 import Agda.Syntax.Internal
@@ -21,6 +20,7 @@
 import Agda.TypeChecking.Constraints
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Polarity
+import Agda.TypeChecking.Free
 
 import Agda.TypeChecking.Rules.Term ( isType_ )
 
@@ -57,6 +57,24 @@
 	    -- the indices. We count the number of indices and return s.
             (nofIxs, s) <- splitType =<< normalise t0
 
+            when (any (`freeIn` s) [0..nofIxs - 1]) $ do
+              err <- fsep [ text "The sort of" <+> prettyTCM name
+                          , text "cannot depend on its indices in the type"
+                          , prettyTCM t0
+                          ]
+              typeError $ GenericError $ show err
+
+            s <- return $ raise (-nofIxs) s
+
+            reportSDoc "tc.data.sort" 20 $ vcat
+              [ text "checking datatype" <+> prettyTCM name
+              , nest 2 $ vcat
+                [ text "type:   " <+> prettyTCM t0
+                , text "sort:   " <+> prettyTCM s
+                , text "indices:" <+> text (show nofIxs)
+                ]
+              ]
+
 	    -- Change the datatype from an axiom to a datatype with no constructors.
             let dataDef = Datatype { dataPars           = npars
                                    , dataIxs            = nofIxs
@@ -108,7 +126,7 @@
 	hideTel (ExtendTel (Arg _ t) tel) = ExtendTel (Arg Hidden t) $ hideTel <$> tel
 
 	splitType (El _ (Pi _ b))  = ((+ 1) -*- id) <$> splitType (absBody b)
-	splitType (El _ (Fun _ b)) = ((+ 1) -*- id) <$> splitType b
+	splitType (El _ (Fun _ b)) = ((+ 1) -*- raise 1) <$> splitType b
 	splitType (El _ (Sort s))  = return (0, s)
 	splitType (El _ t)	   = typeError $ DataMustEndInSort t
 
@@ -124,14 +142,18 @@
     traceCall (CheckConstructor d tel s con) $ do
 	t <- isType_ e
 	n <- size <$> getContextTelescope
-	verboseS "tc.data.con" 15 $ do
-	    td <- prettyTCM t
-	    liftIO $ UTF8.putStrLn $ "checking that " ++ show td ++ " ends in " ++ show d
-	    liftIO $ UTF8.putStrLn $ "  nofPars = " ++ show n
+	reportSDoc "tc.data.con" 15 $ vcat
+          [ sep [ text "checking that"
+                , nest 2 $ prettyTCM t
+                , text "ends in" <+> prettyTCM d
+                ]
+	  , nest 2 $ text "nofPars =" <+> text (show n)
+          ]
 	constructs n t d
-	verboseS "tc.data.con" 15 $ do
-	    d <- prettyTCM s
-	    liftIO $ UTF8.putStrLn $ "checking that the type fits in " ++ show d
+	reportSDoc "tc.data.con" 15 $ sep
+          [ text "checking that the type fits in"
+          , nest 2 $ prettyTCM s
+          ]
 	t `fitsIn` s
 	escapeContext (size tel)
 	    $ addConstant c
@@ -163,17 +185,27 @@
 -- | Check that the arguments to a constructor fits inside the sort of the datatype.
 --   The first argument is the type of the constructor.
 fitsIn :: Type -> Sort -> TCM ()
-fitsIn t s =
-    do	t <- instantiate t
-	case funView $ unEl t of
-	    FunV arg@(Arg h a) _ -> do
-		let s' = getSort a
-                s' `leqSort` s
-		x <- freshName_ (argName t)
-		let v  = Arg h $ Var 0 []
-		    t' = piApply (raise 1 t) [v]
-		addCtx x arg $ fitsIn t' s
-	    _		     -> return ()
+fitsIn t s = do
+  t <- instantiateFull t
+  s' <- instantiateFull (getSort t)
+  reportSDoc "tc.data.fits" 10 $
+    sep [ text "does" <+> prettyTCM t
+        , text "of sort" <+> prettyTCM s'
+        , text "fit in" <+> prettyTCM s <+> text "?"
+        ]
+  -- The line below would be simpler, but doesn't allow datatypes
+  -- to be indexed by the universe level.
+--   noConstraints $ s' `leqSort` s
+  case funView $ unEl t of
+    FunV arg@(Arg h a) _ -> do
+      let s' = getSort a
+      cs <- s' `leqSort` s
+      addConstraints cs
+      x <- freshName_ (argName t)
+      let v  = Arg h $ Var 0 []
+          t' = piApply (raise 1 t) [v]
+      addCtx x arg $ fitsIn t' (raise 1 s)
+    _		     -> return ()
 
 -- | Check that a type constructs something of the given datatype. The first
 --   argument is the number of parameters to the datatype.
@@ -202,7 +234,7 @@
 
 		sameVar v i = do
 		    t <- typeOfBV i
-		    noConstraints $ equalTerm t v (Var i [])
+		    addConstraints =<< equalTerm t v (Var i [])
 
 
 -- | Force a type to be a specific datatype.
diff --git a/src/full/Agda/TypeChecking/Rules/Decl.hs b/src/full/Agda/TypeChecking/Rules/Decl.hs
--- a/src/full/Agda/TypeChecking/Rules/Decl.hs
+++ b/src/full/Agda/TypeChecking/Rules/Decl.hs
@@ -6,7 +6,7 @@
 import Control.Monad.Trans
 import qualified Data.Map as Map
 import Data.Map (Map)
-import qualified System.IO.UTF8 as UTF8
+import qualified Agda.Utils.IO.Locale as LocIO
 
 import qualified Agda.Syntax.Abstract as A
 import Agda.Syntax.Internal
@@ -50,7 +50,7 @@
 checkDecl d = do
     case d of
 	A.Axiom i x e		     -> checkAxiom i x e
-        A.Field _ _ _                -> typeError FieldOutsideRecord
+        A.Field _ _ _ _              -> typeError FieldOutsideRecord
 	A.Primitive i x e	     -> checkPrimitive i x e
 	A.Definition i ts ds	     -> checkMutual i ts ds
 	A.Section i x tel ds	     -> checkSection i x tel ds
@@ -70,7 +70,7 @@
   t <- isType_ e
   reportSDoc "tc.decl.ax" 10 $ sep
     [ text "checked axiom"
-    , nest 2 $ prettyTCM x <+> text ":" <+> prettyTCM t
+    , nest 2 $ prettyTCM x <+> text ":" <+> (prettyTCM =<< instantiateFull t)
     ]
   addConstant x (Defn x t (defaultDisplayForm x) 0 $ Axiom Nothing)
   solveSizeConstraints
@@ -85,7 +85,7 @@
     noConstraints $ equalType t t'
     let s  = show $ nameConcrete $ qnameName x
     bindPrimitive s $ pf { primFunName = x }
-    addConstant x (Defn x t (defaultDisplayForm x) 0 $ Primitive (Info.defAbstract i) s [])
+    addConstant x (Defn x t (defaultDisplayForm x) 0 $ Primitive (Info.defAbstract i) s Nothing)
     where
 	nameString (Name _ x _ _) = show x
 
@@ -99,13 +99,21 @@
           def <- getConstInfo x
           case theDef def of
             Axiom{} -> addHaskellType x hs
-            _       -> typeError $ GenericError "COMPILED_TYPE directive only works on postulates."
+            _       -> typeError $ GenericError
+                        "COMPILED_TYPE directive only works on postulates."
           -- TODO: hack
           when (hs == builtinIO) $
             bindBuiltinType1 builtinIO (A.Def x)
         A.CompiledDataPragma x hs hcs -> do
-          def <- theDef <$> getConstInfo x
-          case def of
+          def <- getConstInfo x
+          -- Check that the pragma appears in the same module
+          -- as the datatype.
+          do m <- currentModule
+             let m' = qnameModule $ defName def
+             unless (m == m') $ typeError $ GenericError $
+              "COMPILED_DATA directives must appear in the same module " ++
+              "as their corresponding datatype definition,"
+          case theDef def of
             Datatype{dataCons = cs}
               | length cs /= length hcs -> do
                   let n_forms_are = case length hcs of
@@ -171,10 +179,10 @@
 checkDefinition :: A.Definition -> TCM ()
 checkDefinition d =
     case d of
-	A.FunDef i x cs         -> abstract (Info.defAbstract i) $ checkFunDef NotDelayed i x cs
-	A.DataDef i x ind ps cs -> abstract (Info.defAbstract i) $ checkDataDef i ind x ps cs
-	A.RecDef i x ps tel cs  -> abstract (Info.defAbstract i) $ checkRecDef i x ps tel cs
-        A.ScopedDef scope d     -> setScope scope >> checkDefinition d
+	A.FunDef i x cs          -> abstract (Info.defAbstract i) $ checkFunDef NotDelayed i x cs
+	A.DataDef i x ind ps cs  -> abstract (Info.defAbstract i) $ checkDataDef i ind x ps cs
+	A.RecDef i x c ps tel cs -> abstract (Info.defAbstract i) $ checkRecDef i x c ps tel cs
+        A.ScopedDef scope d      -> setScope scope >> checkDefinition d
     where
 	-- Concrete definitions cannot use information about abstract things.
 	abstract ConcreteDef = inConcreteMode
@@ -190,8 +198,8 @@
       dx   <- prettyTCM x
       dtel <- mapM prettyA tel
       dtel' <- prettyTCM =<< lookupSection x
-      liftIO $ UTF8.putStrLn $ "checking section " ++ show dx ++ " " ++ show dtel
-      liftIO $ UTF8.putStrLn $ "    actual tele: " ++ show dtel'
+      liftIO $ LocIO.putStrLn $ "checking section " ++ show dx ++ " " ++ show dtel
+      liftIO $ LocIO.putStrLn $ "    actual tele: " ++ show dtel'
     withCurrentModule x $ checkDecls ds
 
 checkModuleArity :: ModuleName -> Telescope -> [NamedArg A.Expr] -> TCM Telescope
diff --git a/src/full/Agda/TypeChecking/Rules/Def.hs b/src/full/Agda/TypeChecking/Rules/Def.hs
--- a/src/full/Agda/TypeChecking/Rules/Def.hs
+++ b/src/full/Agda/TypeChecking/Rules/Def.hs
@@ -11,7 +11,7 @@
 import Data.Traversable
 import Data.Set (Set)
 import qualified Data.Set as Set
-import qualified System.IO.UTF8 as UTF8
+import qualified Agda.Utils.IO.Locale as LocIO
 
 import Agda.Syntax.Common
 import Agda.Syntax.Position
@@ -21,8 +21,10 @@
 import qualified Agda.Syntax.Abstract.Pretty as A
 import Agda.Syntax.Fixity
 import Agda.Syntax.Translation.InternalToAbstract
-
+import Agda.Syntax.Info
+import Agda.Syntax.Scope.Base (emptyScopeInfo)
 import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Monad.Builtin (primRefl, primEquality)
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Substitute
@@ -106,13 +108,24 @@
         verboseS "tc.def.fun" 10 $ do
           dx <- prettyTCM name
           t' <- prettyTCM . defType =<< getConstInfo name
-          liftIO $ UTF8.putStrLn $ "added " ++ show dx ++ " : " ++ show t'
+          liftIO $ LocIO.putStrLn $ "added " ++ show dx ++ " : " ++ show t'
 
         -- Check pattern coverage
         checkCoverage name
     where
         npats = size . clausePats
 
+
+-- | Insert some patterns in the in with-clauses LHS of the given RHS
+insertPatterns :: [A.Pattern] -> A.RHS -> A.RHS
+insertPatterns pats (A.WithRHS aux es cs) = A.WithRHS aux es (map insertToClause cs)
+    where insertToClause (A.Clause (A.LHS i x aps ps) rhs ds) 
+--              = A.Clause (A.LHS i x (aps ++ map (Arg NotHidden . unnamed) pats) (ps)) (insertPatterns pats rhs) ds
+              = A.Clause (A.LHS i x aps (pats ++ ps)) (insertPatterns pats rhs) ds
+insertPatterns pats (A.RewriteRHS qs eqs rhs wh) = A.RewriteRHS qs eqs (insertPatterns pats rhs) wh
+insertPatterns pats rhs = rhs
+
+
 data WithFunctionProblem
       = NoWithFunction
       | WithFunction QName          -- parent function name
@@ -129,11 +142,12 @@
 
 -- | Type check a function clause.
 checkClause :: Type -> A.Clause -> TCM Clause
-checkClause t c@(A.Clause (A.LHS i x aps []) rhs wh) =
+checkClause t c@(A.Clause (A.LHS i x aps []) rhs0 wh) =
     traceCall (CheckClause t c) $
     checkLeftHandSide c aps t $ \gamma delta sub xs ps t' perm -> do
       let mkBody v = foldr (\x t -> Bind $ Abs x t) (Body $ substs sub v) xs
-      (body, with) <- checkWhere (size delta) wh $
+      (body, with) <- checkWhere (size delta) wh $ let
+          handleRHS rhs =
               case rhs of
                 A.RHS e
                   | any (containsAbsurdPattern . namedThing . unArg) aps ->
@@ -145,8 +159,56 @@
                   | any (containsAbsurdPattern . namedThing . unArg) aps
                               -> return (NoBody, NoWithFunction)
                   | otherwise -> typeError $ NoRHSRequiresAbsurdPattern aps
+                A.RewriteRHS [] (_:_) _ _ -> __IMPOSSIBLE__
+                A.RewriteRHS (_:_) [] _ _ -> __IMPOSSIBLE__
+                A.RewriteRHS [] [] rhs [] -> handleRHS rhs
+                A.RewriteRHS [] [] _ (_:_) -> __IMPOSSIBLE__
+                A.RewriteRHS (qname:names) (eq:eqs) rhs wh -> do
+                     (proof,t) <- inferExpr eq
+                     t' <- reduce =<< instantiateFull t
+                     equality <- primEquality >>= \eq -> return $ case eq of
+                        Lam Hidden (Abs _ (Def equality _)) -> equality
+                        _                                   -> __IMPOSSIBLE__
+                     reflCon <- primRefl >>= \refl -> return $ case refl of
+                         Lam Hidden (Abs _typ (Lam Hidden (Abs _val (Con reflCon [])))) -> reflCon
+                         _ -> __IMPOSSIBLE__
+                     (rewriteType,rewriteFrom,rewriteTo) <- case t' of
+                         El _Set0 (Def equality' [Arg Hidden rewriteType,
+                                                  Arg NotHidden rewriteFrom, Arg NotHidden rewriteTo])
+                            | equality' == equality ->
+                              return (rewriteType, rewriteFrom, rewriteTo)
+                         -- Universe polymorphic equality
+                         El _Set0 (Def equality' [_level,Arg Hidden rewriteType,
+                                                  Arg NotHidden rewriteFrom, Arg NotHidden rewriteTo])
+                            | equality' == equality ->
+                              return (rewriteType, rewriteFrom, rewriteTo)
+                         _ -> do
+                          err <- text "Cannot rewrite by equation of type" <+> prettyTCM t'
+                          typeError $ GenericError $ show err
+                         
+                     let info = PatRange noRange
+                         metaInfo = Info.MetaInfo noRange emptyScopeInfo Nothing
+                         underscore = A.Underscore metaInfo
+                         
+                     [rewriteFromExpr,rewriteToExpr,rewriteTypeExpr, proofExpr] <- setShowImplicitArguments True $ reify
+                      [rewriteFrom,   rewriteTo,    rewriteType    , proof]
+                     let (inner, outer) -- the where clauses should go on the inner-most with
+                           | null eqs  = ([], wh)
+                           | otherwise = (wh, [])
+                         newRhs = A.WithRHS qname [rewriteFromExpr, proofExpr] 
+                                  [A.Clause (A.LHS i x aps pats)
+                                    (A.RewriteRHS names eqs (insertPatterns pats rhs) inner)
+                                    outer]
+                         pats = [A.DotP info underscore, -- rewriteToExpr,
+                                 A.ConP info (AmbQ [reflCon]) []]
+                     reportSDoc "tc.rewrite.top" 25 $ vcat 
+                                         [ text "from = " <+> prettyTCM rewriteFromExpr,
+                                           text "to = " <+> prettyTCM rewriteToExpr,
+                                           text "typ = " <+> prettyTCM rewriteType,
+                                           text "proof = " <+> prettyTCM proofExpr,
+                                           text "equ = " <+> prettyTCM t' ]
+                     handleRHS newRhs
                 A.WithRHS aux es cs -> do
-
                   -- Infer the types of the with expressions
                   vas <- mapM inferExpr es
                   (vs, as) <- instantiateFull $ unzip vas
@@ -195,6 +257,7 @@
                     ]
 
                   return (mkBody v, WithFunction x aux gamma delta1 delta2 vs as t' ps finalPerm cs)
+          in handleRHS rhs0
       escapeContext (size delta) $ checkWithFunction with
 
       reportSDoc "tc.lhs.top" 10 $ vcat
@@ -293,8 +356,8 @@
       dx   <- prettyTCM m
       dtel <- mapM prettyA tel
       dtel' <- prettyTCM =<< lookupSection m
-      liftIO $ UTF8.putStrLn $ "checking where section " ++ show dx ++ " " ++ show dtel
-      liftIO $ UTF8.putStrLn $ "        actual tele: " ++ show dtel'
+      liftIO $ LocIO.putStrLn $ "checking where section " ++ show dx ++ " " ++ show dtel
+      liftIO $ LocIO.putStrLn $ "        actual tele: " ++ show dtel'
     x <- withCurrentModule m $ checkDecls ds >> ret
     return x
 checkWhere _ _ _ = __IMPOSSIBLE__
@@ -320,7 +383,7 @@
     verbose 15 $ do
       dt  <- prettyTCM t
       dps <- mapM prettyA ps
-      liftIO $ UTF8.putStrLn $ "checking clause " ++ show dps ++ " : " ++ show dt
+      liftIO $ LocIO.putStrLn $ "checking clause " ++ show dps ++ " : " ++ show dt
 
     -- Save the state for later. (should this be done with the undo monad, or
     -- would that interfere with normal undo?)
@@ -341,18 +404,18 @@
         d0 <- A.showA ps0
         d1 <- A.showA ps1
         liftIO $ do
-        UTF8.putStrLn $ "first check"
-        UTF8.putStrLn $ "  xs    = " ++ show xs
-        UTF8.putStrLn $ "  metas = " ++ show metas
-        UTF8.putStrLn $ "  ps0   = " ++ d0
-        UTF8.putStrLn $ "  ps1   = " ++ d1
+        LocIO.putStrLn $ "first check"
+        LocIO.putStrLn $ "  xs    = " ++ show xs
+        LocIO.putStrLn $ "  metas = " ++ show metas
+        LocIO.putStrLn $ "  ps0   = " ++ d0
+        LocIO.putStrLn $ "  ps1   = " ++ d1
 
     verbose 10 $ do
         is <- mapM (instantiateFull . flip MetaV []) metas
         ds <- mapM prettyTCM is
         dts <- mapM prettyTCM =<< mapM instantiateFull ts
-        liftIO $ UTF8.putStrLn $ "  is    = " ++ concat (intersperse ", " $ map show ds)
-        liftIO $ UTF8.putStrLn $ "  ts    = " ++ concat (intersperse ", " $ map show dts)
+        liftIO $ LocIO.putStrLn $ "  is    = " ++ concat (intersperse ", " $ map show ds)
+        liftIO $ LocIO.putStrLn $ "  ts    = " ++ concat (intersperse ", " $ map show dts)
 
     -- Now we forget that we ever type checked anything and type check the new
     -- pattern.
@@ -363,14 +426,14 @@
     mapM_ isEmptyType emptyTypes
 
     verbose 10 $ liftIO $ do
-        UTF8.putStrLn $ "second check"
-        UTF8.putStrLn $ "  xs    = " ++ show xs
-        UTF8.putStrLn $ "  metas = " ++ show metas
+        LocIO.putStrLn $ "second check"
+        LocIO.putStrLn $ "  xs    = " ++ show xs
+        LocIO.putStrLn $ "  metas = " ++ show metas
 
     verbose 10 $ do
         is <- mapM (instantiateFull . flip MetaV []) metas
         ds <- mapM prettyTCM is
-        liftIO $ UTF8.putStrLn $ "  is    = " ++ concat (intersperse ", " $ map show ds)
+        liftIO $ LocIO.putStrLn $ "  is    = " ++ concat (intersperse ", " $ map show ds)
 
     -- Finally we type check the dot patterns and check that they match their
     -- instantiations.
@@ -412,8 +475,8 @@
         verbose 20 $ do
             d <- prettyTCM ctx
             dt <- prettyTCM (substs sub a)
-            liftIO $ UTF8.putStrLn $ "context = " ++ show d
-            liftIO $ UTF8.putStrLn $ "type    = " ++ show dt
+            liftIO $ LocIO.putStrLn $ "context = " ++ show d
+            liftIO $ LocIO.putStrLn $ "type    = " ++ show dt
 
         reportLn 20 $ "finished type checking left hand side"
         ret rsub xs ps (substs sub a)
@@ -434,7 +497,7 @@
             v <- lift $ instantiate (MetaV x [])
             lift $ verbose 6 $ do
                 d <- prettyTCM v
-                liftIO $ UTF8.putStrLn $ "new pattern for " ++ show x ++ " = " ++ show d
+                liftIO $ LocIO.putStrLn $ "new pattern for " ++ show x ++ " = " ++ show d
             case v of
                 -- Unsolved metas become variables
                 MetaV y _ | x == y  -> return $ A.WildP i
@@ -442,7 +505,7 @@
                 _                   -> do
                     lift $ verbose 6 $ do
                         d <- prettyTCM =<< instantiateFull v
-                        liftIO $ UTF8.putStrLn $ show x ++ " := " ++ show d
+                        liftIO $ LocIO.putStrLn $ show x ++ " := " ++ show d
                     scope <- lift getScope
                     return $ A.DotP i (A.Underscore $ info scope)
                     where info s = Info.MetaInfo (getRange i) s Nothing
@@ -506,7 +569,7 @@
                     xs   <- free t
                     verbose 20 $ do
                         d <- prettyTCM t
-                        liftIO $ UTF8.putStrLn $ "freeIn " ++ show x ++ " : " ++ show d ++ " are " ++ show xs
+                        liftIO $ LocIO.putStrLn $ "freeIn " ++ show x ++ " : " ++ show d ++ " are " ++ show xs
                     case intersect (map (fst . unArg) tel') xs of
                         [] -> return $ Arg h (x,t) : tel'
                         zs -> return $ ins zs (Arg h (x,t)) tel'
@@ -543,7 +606,7 @@
                 par Hidden    s = "{" ++ s ++ "}"
                 par NotHidden s = "(" ++ s ++ ")"
             ds <- mapM pr ctx
-            liftIO $ UTF8.putStr $ unlines $ reverse ds
+            liftIO $ LocIO.putStr $ unlines $ reverse ds
 -}
 
 actualConstructor :: MonadTCM tcm => QName -> tcm QName
diff --git a/src/full/Agda/TypeChecking/Rules/LHS.hs b/src/full/Agda/TypeChecking/Rules/LHS.hs
--- a/src/full/Agda/TypeChecking/Rules/LHS.hs
+++ b/src/full/Agda/TypeChecking/Rules/LHS.hs
@@ -203,7 +203,7 @@
       Con   {} -> __IMPOSSIBLE__
 
 -- | Check that a dot pattern matches it's instantiation.
-checkDotPattern :: DotPatternInst -> TCM ()
+checkDotPattern :: DotPatternInst -> TCM Constraints
 checkDotPattern (DPI e v a) =
   traceCall (CheckDotPattern e v) $ do
   reportSDoc "tc.lhs.dot" 15 $
@@ -213,7 +213,9 @@
         , nest 2 $ text ":" <+> prettyTCM a
         ]
   u <- checkExpr e a
+  -- Should be ok to do noConstraints here
   noConstraints $ equalTerm a u v
+  return []
 
 -- | Bind the variables in a left hand side. Precondition: the patterns should
 --   all be 'A.VarP', 'A.WildP', or 'A.ImplicitP' and the telescope should have
@@ -320,7 +322,11 @@
          ]
   bindLHSVars ps delta $ bindAsPatterns asb $ do
     reportSDoc "tc.lhs.top" 10 $ nest 2 $ text "type  = " <+> prettyTCM b'
-    mapM_ checkDotPattern dpi
+
+    -- Check dot patterns
+    cs <- concat <$> mapM checkDotPattern dpi
+    noConstraints $ solveConstraints cs
+
     let rho = renamingR perm -- I'm not certain about this...
         Perm n _ = perm
         xs  = replicate (fromIntegral n) "h"
diff --git a/src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs b/src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs
--- a/src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs
+++ b/src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs
@@ -28,6 +28,8 @@
 instantiateTel :: MonadTCM tcm => Substitution -> Telescope -> tcm (Telescope, Permutation, [Term], [Type])
 instantiateTel s tel = liftTCM $ do
 
+  tel <- normalise tel
+
   reportSDoc "tc.lhs.inst" 10 $ sep
     [ text "instantiateTel "
     , nest 2 $ fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) s
diff --git a/src/full/Agda/TypeChecking/Rules/LHS/Split.hs b/src/full/Agda/TypeChecking/Rules/LHS/Split.hs
--- a/src/full/Agda/TypeChecking/Rules/LHS/Split.hs
+++ b/src/full/Agda/TypeChecking/Rules/LHS/Split.hs
@@ -31,13 +31,6 @@
 #include "../../../undefined.h"
 import Agda.Utils.Impossible
 
-instance (Monad m, Error err) => Applicative (ErrorT err m) where
-  pure	= return
-  (<*>) = ap
-
-instance (Error err, MonadTCM tcm) => MonadTCM (ErrorT err tcm) where
-  liftTCM = lift . liftTCM
-
 -- | TODO: move to Agda.Syntax.Abstract.View
 asView :: A.Pattern -> ([Name], A.Pattern)
 asView (A.AsP _ x p) = (x :) -*- id $ asView p
@@ -123,6 +116,7 @@
 				 (fmap (const $ Focus c args (getRange p) q i d pars ixs) a)
 				 (fmap (Problem ps ()) tel)
 		-- TODO: record patterns
+		Record{} -> typeError $ NotImplemented "Pattern matching for records"
 		_ -> keepGoing
 	    _	-> keepGoing
 	p -> keepGoing
diff --git a/src/full/Agda/TypeChecking/Rules/LHS/Unify.hs b/src/full/Agda/TypeChecking/Rules/LHS/Unify.hs
--- a/src/full/Agda/TypeChecking/Rules/LHS/Unify.hs
+++ b/src/full/Agda/TypeChecking/Rules/LHS/Unify.hs
@@ -9,7 +9,8 @@
 
 import Data.Map (Map)
 import qualified Data.Map as Map
-import Data.List
+import Data.List hiding (sort)
+import Data.Traversable (traverse)
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
@@ -184,6 +185,7 @@
       case funView $ unEl a of
 	FunV (Arg _ b) _  -> do
 	  unify b u v
+          arg <- traverse ureduce arg
 	  unifyArgs (a `piApply` [arg]) us vs
 	_	  -> __IMPOSSIBLE__
 
@@ -230,16 +232,7 @@
 	(u, Var j []) | flexible j -> j |->> (u, a)
 	(Con c us, Con c' vs)
           | c == c' -> do
-              -- The type is a datatype or a record.
-              Def d args <- reduce $ unEl a
-              -- Get the number of parameters.
-              def <- theDef <$> getConstInfo d
-              a'  <- case def of
-                Datatype{dataPars = n} -> do
-                  a <- defType <$> getConstInfo c
-                  return $ piApply a (genericTake n args)
-                Record{recPars = n} -> getRecordConstructorType d (genericTake n args)
-                _		    -> __IMPOSSIBLE__
+              a' <- dataOrRecordType c a
               unifyArgs a' us vs
           | otherwise -> constructorMismatch a u v
         -- Definitions are ok as long as they can't reduce (i.e. datatypes/axioms)
@@ -278,6 +271,9 @@
                   else addEquality a u v
 	_  -> addEquality a u v
 
+    -- The contexts are transient when unifying, so we should just instantiate to
+    -- constructor heads and generate fresh metas for the arguments. Beware of
+    -- constructors that aren't fully applied.
     instMeta a m us v = do
       app <- inertApplication a v
       reportSDoc "tc.lhs.unify" 50 $
@@ -287,14 +283,21 @@
             ]
       case app of
         Nothing -> return False
-        Just (v', b, _) -> do
+        Just (v', b, vs) -> do
             margs <- do
               -- The new metas should have the same dependencies as the original meta
               mi <- getMetaInfo <$> lookupMeta m
+
+              -- Only generate metas for the arguments v' is actually applied to
+              -- (in case of partial application)
+              let b' = telePi tel (sort Prop)
+                    where
+                      TelV tel0 _ = telView b
+                      tel = telFromList $ take (length vs) $ telToList tel0
               withMetaInfo mi $ do
                 tel <- getContextTelescope
                 -- important: create the meta in the same environment as the original meta
-                newArgsMetaCtx b tel us
+                newArgsMetaCtx b' tel us
             noConstraints $ assignV a m us (v' `apply` margs)
             return True
           `catchError` \_ -> return False
@@ -303,14 +306,7 @@
     inertApplication a v =
       case v of
         Con c vs -> do
-          Def d args <- reduce $ unEl a
-          def <- theDef <$> getConstInfo d
-          b   <- case def of
-            Datatype{dataPars = n} -> do
-              a <- defType <$> getConstInfo c
-              return $ piApply a (genericTake n args)
-            Record{recPars = n} -> getRecordConstructorType d (genericTake n args)
-            _		    -> __IMPOSSIBLE__
+          b <- dataOrRecordType c a
           return $ Just (Con c [], b, vs)
         Def d vs -> do
           def <- getConstInfo d
@@ -322,3 +318,22 @@
             _          -> Nothing
         _        -> return Nothing
 
+-- | Given the type of a constructor application the corresponding
+-- data or record type, applied to its parameters (extracted from the
+-- given type), is returned.
+--
+-- Precondition: The type has to correspond to an application of the
+-- given constructor.
+
+dataOrRecordType :: MonadTCM tcm
+                 => QName -- ^ Constructor name.
+                 -> Type -> tcm Type
+dataOrRecordType c a = do
+  -- The telescope ends with a datatype or a record.
+  TelV _ (El _ (Def d args)) <- telView <$> reduce a
+  def <- theDef <$> getConstInfo d
+  (n, a')  <- case def of
+    Datatype{dataPars = n} -> ((,) n) . defType <$> getConstInfo c
+    Record  {recPars  = n} -> ((,) n) <$> getRecordConstructorType d
+    _		           -> __IMPOSSIBLE__
+  return (a' `apply` genericTake n args)
diff --git a/src/full/Agda/TypeChecking/Rules/Record.hs b/src/full/Agda/TypeChecking/Rules/Record.hs
--- a/src/full/Agda/TypeChecking/Rules/Record.hs
+++ b/src/full/Agda/TypeChecking/Rules/Record.hs
@@ -5,6 +5,7 @@
 import Control.Applicative
 import Control.Monad.Trans
 import Control.Monad.Reader
+import qualified Agda.Utils.IO.Locale as LocIO
 
 import qualified Agda.Syntax.Abstract as A
 import Agda.Syntax.Common
@@ -32,8 +33,9 @@
 -- * Records
 ---------------------------------------------------------------------------
 
-checkRecDef :: Info.DefInfo -> QName -> [A.LamBinding] -> A.Expr -> [A.Constructor] -> TCM ()
-checkRecDef i name ps contel fields =
+checkRecDef :: Info.DefInfo -> QName -> Maybe A.Constructor ->
+               [A.LamBinding] -> A.Expr -> [A.Constructor] -> TCM ()
+checkRecDef i name con ps contel fields =
   noMutualBlock $ -- records can't be recursive anyway
   traceCall (CheckRecDef (getRange i) (qnameName name) ps fields) $ do
     reportSDoc "tc.rec" 10 $ vcat
@@ -60,7 +62,7 @@
           extWithR ret   = underAbstraction (Arg NotHidden rect) (Abs "r" ()) $ \_ -> ret
           ext (Arg h (x, t)) = addCtx x (Arg h t)
 
-      let getName (A.Field _ x _)      = [x]
+      let getName (A.Field _ h x _)    = [(h, x)]
 	  getName (A.ScopedDecl _ [f]) = getName f
 	  getName _		       = []
 
@@ -70,6 +72,7 @@
       -- Check the field telescope
       contype <- killRange <$> (instantiateFull =<< isType_ contel)
       let TelV ftel _ = telView contype
+      let contype = telePi ftel (raise (size ftel) rect)
 
       escapeContext (size tel) $ flip (foldr ext) ctx $ extWithR $ do
 	reportSDoc "tc.rec.def" 10 $ sep
@@ -80,27 +83,46 @@
             ]
 	  ]
         reportSDoc "tc.rec.def" 15 $ nest 2 $ vcat
-          [ text "field tel =" <+> prettyTCM ftel
+          [ text "field tel =" <+> escapeContext 1 (prettyTCM ftel)
           ]
 	addSection m (size tel')
 
         -- Check the types of the fields
         -- ftel <- checkRecordFields m name tel s [] (size fields) fields
-        withCurrentModule m $ checkRecordProjections m name tel' (raise 1 ftel) s fields
-
-      -- Check that the fields fit inside the sort
-      telePi ftel t0 `fitsIn` s
+        withCurrentModule m $
+          checkRecordProjections m (maybe name A.axiomName con)
+                                 tel' (raise 1 ftel) fields
 
       addConstant name $ Defn name t0 (defaultDisplayForm name) 0
-		       $ Record { recPars           = size tel
+		       $ Record { recPars           = 0
                                 , recClause         = Nothing
+                                , recCon            = A.axiomName <$> con
+                                , recConType        = contype
 				, recFields         = concatMap getName fields
                                 , recTel            = ftel
-                                , recSort           = s
 				, recAbstr          = Info.defAbstract i
                                 , recPolarity       = []
                                 , recArgOccurrences = []
                                 }
+      case con of
+        Nothing              -> return ()
+        Just (A.Axiom i c _) -> do
+          addConstant c $
+            Defn c contype (defaultDisplayForm name) 0 $
+                 Constructor { conPars   = 0
+                             , conSrcCon = c
+                             , conData   = name
+                             , conHsCode = Nothing
+                             , conAbstr  = Info.defAbstract i
+                             , conInd    = Inductive
+                             }
+          verboseS "tc.rec.def" 20 $ liftIO . LocIO.print =<< getConstInfo c
+        Just _ -> __IMPOSSIBLE__
+
+      -- Check that the fields fit inside the sort
+      let dummy = Var 0 []  -- We're only interested in the sort here
+      telePi ftel (El s dummy) `fitsIn` s
+
       computePolarity name
 
       return ()
@@ -116,15 +138,15 @@
     @fs@: the fields to be checked
 -}
 checkRecordProjections ::
-  ModuleName -> QName -> Telescope -> Telescope -> Sort ->
+  ModuleName -> QName -> Telescope -> Telescope ->
   [A.Declaration] -> TCM ()
-checkRecordProjections m q tel ftel s fs = checkProjs EmptyTel ftel fs
+checkRecordProjections m q tel ftel fs = checkProjs EmptyTel ftel fs
   where
     checkProjs :: Telescope -> Telescope -> [A.Declaration] -> TCM ()
     checkProjs _ _ [] = return ()
     checkProjs ftel1 ftel2 (A.ScopedDecl scope fs' : fs) =
       setScope scope >> checkProjs ftel1 ftel2 (fs' ++ fs)
-    checkProjs ftel1 (ExtendTel (Arg _ _) ftel2) (A.Field info x t : fs) = do
+    checkProjs ftel1 (ExtendTel (Arg _ _) ftel2) (A.Field info h x t : fs) = do
       -- check the type (in the context of the telescope)
       -- the previous fields will be free in
       reportSDoc "tc.rec.proj" 5 $ sep
@@ -136,9 +158,6 @@
 	  , text "t     =" <+> prettyTCM t
 	  ]
 	]
-      let add (x, t) = addCtx x (Arg NotHidden t)
-          n          = size ftel
-
       t <- isType_ t
 
       -- create the projection functions (instantiate the type with the values
@@ -168,8 +187,9 @@
       let ptel   = telFromList $ take (size tel - 1) $ telToList tel
           hps	 = map (fmap $ VarP . fst) $ telToList ptel
 	  conp	 = Arg NotHidden
-		 $ ConP q $ map (Arg NotHidden)
-			    [ VarP "x" | _ <- [1..n] ]
+		 $ ConP q $ zipWith Arg
+                              (map argHiding (telToList ftel))
+			      [ VarP "x" | _ <- [1..size ftel] ]
 	  nobind 0 = id
 	  nobind n = NoBind . nobind (n - 1)
 	  body	 = nobind (size tel - 1)
@@ -179,13 +199,13 @@
 		 $ Body $ Var 0 []
           cltel  = ptel `abstract` ftel
 	  clause = Clause { clauseRange = getRange info
-                          , clauseTel   = cltel
+                          , clauseTel   = killRange cltel
                           , clausePerm  = idP $ size ptel + size ftel
                           , clausePats  = hps ++ [conp]
                           , clauseBody  = body
                           }
       escapeContext (size tel) $ do
-	addConstant projname $ Defn projname finalt (defaultDisplayForm projname) 0
+	addConstant projname $ Defn projname (killRange finalt) (defaultDisplayForm projname) 0
           $ Function { funClauses        = [clause]
                      , funDelayed        = NotDelayed
                      , funInv            = NotInjective
@@ -195,7 +215,7 @@
                      }
         computePolarity projname
 
-      checkProjs (abstract ftel1 $ ExtendTel (Arg NotHidden t)
+      checkProjs (abstract ftel1 $ ExtendTel (Arg h t)
                                  $ Abs (show $ qnameName projname) EmptyTel
                  ) (absBody ftel2) fs
     checkProjs ftel1 ftel2 (d : fs) = do
diff --git a/src/full/Agda/TypeChecking/Rules/Term.hs b/src/full/Agda/TypeChecking/Rules/Term.hs
--- a/src/full/Agda/TypeChecking/Rules/Term.hs
+++ b/src/full/Agda/TypeChecking/Rules/Term.hs
@@ -8,8 +8,9 @@
 import Control.Monad.Error
 import Data.Maybe
 import Data.List hiding (sort)
-import qualified System.IO.UTF8 as UTF8
+import qualified Agda.Utils.IO.Locale as LocIO
 import qualified Data.Map as Map
+import qualified Data.Set as Set
 
 import qualified Agda.Syntax.Abstract as A
 import qualified Agda.Syntax.Abstract.Views as A
@@ -32,6 +33,7 @@
 import Agda.TypeChecking.Conversion
 import Agda.TypeChecking.Primitive
 import Agda.TypeChecking.Constraints
+import Agda.TypeChecking.Free
 
 import Agda.Utils.Fresh
 import Agda.Utils.Tuple
@@ -133,12 +135,13 @@
 
 litType :: Literal -> TCM Type
 litType l = case l of
+    LitLevel _ _  -> el <$> primLevel
     LitInt _ _	  -> el <$> primNat
     LitFloat _ _  -> el <$> primFloat
     LitChar _ _   -> el <$> primChar
     LitString _ _ -> el <$> primString
   where
-    el t = El (Type 0) t
+    el t = El (mkType 0) t
 
 ---------------------------------------------------------------------------
 -- * Terms
@@ -177,6 +180,10 @@
         text "    --> " <+> prettyTCM t
     let scopedExpr (A.ScopedExpr scope e) = setScope scope >> scopedExpr e
 	scopedExpr e			  = return e
+
+        unScope (A.ScopedExpr scope e) = unScope e
+        unScope e                      = e
+
     e <- scopedExpr e
     case e of
 
@@ -220,13 +227,14 @@
                         text "target type: " <+> prettyTCM t1
                       case t1 of
                         NotBlocked (Def d _) -> do
+                          let dataOrRec = case [ c | (d', c) <- dcs, d == d' ] of
+                                c:_ -> return (Just c)
+                                []  -> typeError $ DoesNotConstructAnElementOf
+                                                     (head cs) (Def d [])
                           defn <- theDef <$> getConstInfo d
                           case defn of
-                            Datatype{} ->
-                              case [ c | (d', c) <- dcs, d == d' ] of
-                                c:_   -> return (Just c)
-                                []    -> typeError $ DoesNotConstructAnElementOf
-                                          (head cs) (Def d [])
+                            Datatype{} -> dataOrRec
+                            Record{}   -> dataOrRec
                             _ -> typeError $ DoesNotConstructAnElementOf (head cs) (ignoreBlocking t1)
                         NotBlocked (MetaV _ _)  -> return Nothing
                         Blocked{} -> return Nothing
@@ -241,6 +249,19 @@
 
 	A.WithApp _ e es -> typeError $ NotImplemented "type checking of with application"
 
+        A.App i s (Arg NotHidden l)
+          | A.Set _ 0 <- unScope s ->
+          ifM (not <$> hasUniversePolymorphism)
+              (typeError $ GenericError "Use --universe-polymorphism to enable level arguments to Set")
+          $ do
+            lvl <- primLevel
+            suc <- do s <- primLevelSuc
+                      return $ \x -> s `apply` [Arg NotHidden x]
+            n   <- checkExpr (namedThing l) (El (mkType 0) lvl)
+            reportSDoc "tc.univ.poly" 10 $
+              text "checking Set " <+> prettyTCM n <+> text "against" <+> prettyTCM t
+            blockTerm t (Sort $ Type n) $ leqType (sort $ Type $ suc n) t
+
 	A.App i e arg -> do
 	    (v0, t0)	 <- inferExpr e
 	    checkArguments' ExpandLast (getRange e) [arg] t0 t e $ \vs t1 cs ->
@@ -329,8 +350,17 @@
 	A.Lit lit    -> checkLiteral lit t
 	A.Let i ds e -> checkLetBindings ds $ checkExpr e t
 	A.Pi _ tel e -> do
-	    t' <- checkTelescope tel $ \tel -> telePi_ tel <$> isType_ e
-	    blockTerm t (unEl t') $ leqType (sort $ getSort t') t
+	    t' <- checkTelescope tel $ \tel -> do
+                    t   <- instantiateFull =<< isType_ e
+                    tel <- instantiateFull tel
+                    return $ telePi_ tel t
+            s  <- return $ getSort t'
+            when (s == Inf) $ reportSDoc "tc.term.sort" 20 $
+              vcat [ text ("reduced to omega:")
+                   , nest 2 $ text "t   =" <+> prettyTCM t'
+                   , nest 2 $ text "cxt =" <+> (prettyTCM =<< getContextTelescope)
+                   ]
+	    blockTerm t (unEl t') $ leqType (sort s) t
 	A.Fun _ (Arg h a) b -> do
 	    a' <- isType_ a
 	    b' <- isType_ b
@@ -338,24 +368,25 @@
 	    blockTerm t (Fun (Arg h a') b') $ leqType (sort s) t
 	A.Set _ n    -> do
           n <- ifM typeInType (return 0) (return n)
-	  blockTerm t (Sort (Type n)) $ leqType (sort $ Type $ n + 1) t
+	  blockTerm t (Sort (mkType n)) $ leqType (sort $ mkType $ n + 1) t
 	A.Prop _     -> do
-          s <- ifM typeInType (return $ Type 0) (return Prop)
-	  blockTerm t (Sort Prop) $ leqType (sort $ Type 1) t
+          s <- ifM typeInType (return $ mkType 0) (return Prop)
+	  blockTerm t (Sort Prop) $ leqType (sort $ mkType 1) t
 
 	A.Rec _ fs  -> do
 	  t <- normalise t
 	  case unEl t of
 	    Def r vs  -> do
-	      xs    <- getRecordFieldNames r
-	      ftel  <- getRecordFieldTypes r
-              scope <- getScope
+	      (hs, xs) <- unzip <$> getRecordFieldNames r
+	      ftel     <- getRecordFieldTypes r
+              con      <- getRecordConstructor r
+              scope    <- getScope
               let meta = A.Underscore $ A.MetaInfo (getRange e) scope Nothing
 	      es   <- orderFields r meta xs fs
 	      let tel = ftel `apply` vs
 	      (args, cs) <- checkArguments_ ExpandLast (getRange e)
-			      (map (Arg NotHidden . unnamed) es) tel
-	      blockTerm t (Con (killRange r) args) $ return cs
+			      (zipWith (\h e -> Arg h (unnamed e)) hs es) tel
+	      blockTerm t (Con con args) $ return cs
             MetaV _ _ -> do
               reportSDoc "tc.term.expr.rec" 10 $ sep
                 [ text "Postponing type checking of"
@@ -393,7 +424,7 @@
   Constructor{conPars = n} <- theDef <$> (instantiateDef =<< getConstInfo c)
 
   verboseS "tc.term.con" 7 $ do
-    liftIO $ UTF8.putStrLn $ unwords [show c, "has", show n, "parameters."]
+    liftIO $ LocIO.putStrLn $ unwords [show c, "has", show n, "parameters."]
 
   -- So when applying the constructor throw away the parameters.
   return (apply u . genericDrop n, a)
@@ -408,7 +439,7 @@
       ds <- mapM prettyTCM vs
       dx <- prettyTCM x
       dt <- prettyTCM $ defType d
-      liftIO $ UTF8.putStrLn $ "inferred def " ++ unwords (show dx : map show ds) ++ " : " ++ show dt
+      liftIO $ LocIO.putStrLn $ "inferred def " ++ unwords (show dx : map show ds) ++ " : " ++ show dt
     return (mkTerm x vs, defType d)
 
 -- | @checkHeadApplication e t hd args@ checks that @e@ has type @t@,
diff --git a/src/full/Agda/TypeChecking/Serialise.hs b/src/full/Agda/TypeChecking/Serialise.hs
--- a/src/full/Agda/TypeChecking/Serialise.hs
+++ b/src/full/Agda/TypeChecking/Serialise.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE OverlappingInstances,
              TypeSynonymInstances,
+             IncoherentInstances,
              ExistentialQuantification,
              ScopedTypeVariables,
              CPP
@@ -13,9 +14,6 @@
 -- version number should be bumped _in the same patch_.
 -- -!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-
 
--- TODO: It should be easy to produce a decent QuickCheck test suite
--- for this file.
-
 module Agda.TypeChecking.Serialise
   ( encode
   , encodeFile
@@ -25,11 +23,14 @@
   )
   where
 
+import qualified Control.Exception as E
 import Control.Monad
-import Control.Monad.State.Strict
 import Control.Monad.Reader
+import Control.Monad.State.Strict
+import Control.Monad.Error
 import Data.Array.IArray
 import Data.Bits (shiftR)
+import Data.Word
 import Data.ByteString.Lazy as L
 import Data.Char (ord, chr)
 import Data.HashTable (HashTable)
@@ -38,6 +39,8 @@
 import Data.IORef
 import Data.Map (Map)
 import qualified Data.Map as M
+import Data.Set (Set)
+import qualified Data.Set as S
 import qualified Data.Binary as B
 import qualified Data.Binary.Get as B
 import qualified Data.List as List
@@ -58,17 +61,24 @@
 import Agda.Syntax.Literal
 import qualified Agda.Interaction.Highlighting.Range   as HR
 import qualified Agda.Interaction.Highlighting.Precise as HP
+import Agda.Interaction.FindFile
 
 import Agda.TypeChecking.Monad
+import Agda.Utils.FileName
+import Agda.Utils.Monad
 import Agda.Utils.Tuple
 import Agda.Utils.Permutation
 
 #include "../undefined.h"
 import Agda.Utils.Impossible
 
-currentInterfaceVersion :: Int
-currentInterfaceVersion = 20090421 * 10 + 2
+-- Note that the Binary instance for Int writes 64 bits, but throws
+-- away the 32 high bits when reading (at the time of writing, on
+-- 32-bit machines). Word64 does not have these problems.
 
+currentInterfaceVersion :: Word64
+currentInterfaceVersion = 20091123 * 10 + 0
+
 type Node = [Int] -- constructor tag (maybe omitted) and arg indices
 
 data Dict = Dict{ nodeD     :: !(HashTable Node    Int)
@@ -79,57 +89,135 @@
                 , stringC   :: !(IORef Int)
                 , integerC  :: !(IORef Int)
                 , doubleC   :: !(IORef Int)
+                , fileMod   :: !SourceToModule
                 }
 
 data U    = forall a . Data a => U !a
 type Memo = HashTable (Int, Int) U    -- (node index, type rep key)
 
-data Env  = Env { nodeE     :: !(Array Int Node)
-                , stringE   :: !(Array Int String)
-                , integerE  :: !(Array Int Integer)
-                , doubleE   :: !(Array Int Double)
-                , nodeMemo  :: !Memo
-                }
+data St = St
+  { nodeE     :: !(Array Int Node)
+  , stringE   :: !(Array Int String)
+  , integerE  :: !(Array Int Integer)
+  , doubleE   :: !(Array Int Double)
+  , nodeMemo  :: !Memo
+  , modFile   :: !ModuleToSource
+    -- ^ Maps module names to file names. This is the only component
+    -- of the state which is updated by the decoder.
+  , includes  :: [AbsolutePath]
+    -- ^ The include directories.
+  }
 
+-- | Monad used by the encoder.
+
 type S a = ReaderT Dict IO a
-type R a = ReaderT Env  IO a
 
+-- | Monad used by the decoder.
+--
+-- 'TCM' is not used because the associated overheads would make
+-- decoding slower.
+
+type R a = ErrorT TypeError (StateT St IO) a
+
+-- | Throws an error which is suitable when the data stream is
+-- malformed.
+
+malformed :: R a
+malformed = throwError $ GenericError "Malformed input."
+
 class Data a => EmbPrj a where
   icode :: a -> S Int
   value :: Int -> R a
 
+-- | Encodes something. To ensure relocatability file paths in
+-- positions are replaced with module names.
 
-encode :: EmbPrj a => a -> IO ByteString
+encode :: EmbPrj a => a -> TCM ByteString
 encode a = do
-    newD@(Dict nD sD iD dD _ _ _ _) <- emptyDict
-    root <- runReaderT (icode a) newD
-    nL <- l nD; sL <- l sD; iL <- l iD; dL <- l dD
-    return $ B.encode currentInterfaceVersion `L.append`
-             G.compress (B.encode (root, nL, sL, iL, dL))
+    fileMod <- sourceToModule
+    liftIO $ do
+      newD@(Dict nD sD iD dD _ _ _ _ _) <- emptyDict fileMod
+      root <- runReaderT (icode a) newD
+      nL <- l nD; sL <- l sD; iL <- l iD; dL <- l dD
+      return $ B.encode currentInterfaceVersion `L.append`
+               G.compress (B.encode (root, nL, sL, iL, dL))
   where l = fmap (List.map fst . List.sortBy (compare `on` snd)) . H.toList
 
-decode :: EmbPrj a => ByteString -> IO a
-decode s | ver /= currentInterfaceVersion = error "Wrong interface version"
-         | otherwise = runReaderT (value r) . env =<< H.new (==) hashInt2
-  where (ver                , s1, _) = B.runGetState B.get s                 0
-        ((r, nL, sL, iL, dL), s2, _) = B.runGetState B.get (G.decompress s1) 0
-        ar l = listArray (0, List.length l - 1) l
-        env  = Env (ar nL) (ar sL) (ar iL) (ar dL)
+-- | Decodes something. The result depends on the include path.
+--
+-- Returns 'Nothing' if the input does not start with the right magic
+-- number or some other decoding error is encountered.
 
-encodeFile :: EmbPrj a => FilePath -> a -> IO ()
-encodeFile f x = L.writeFile f =<< encode x
+decode :: EmbPrj a => ByteString -> TCM (Maybe a)
+decode s = do
+  mf   <- stModuleToSource <$> get
+  incs <- getIncludeDirs
 
-decodeFile :: EmbPrj a => FilePath -> IO a
-decodeFile f = decode =<< L.readFile f
+  -- Note that B.runGetState and G.decompress can raise errors if the
+  -- input is malformed. The decoder is (intended to be) strict enough
+  -- to ensure that all such errors can be caught by the handler here.
 
+  (mf, x) <- liftIO $ E.handle (\(E.ErrorCall {}) -> noResult) $ do
 
+    (ver, s, _) <- return $ B.runGetState B.get s 0
+    if ver /= currentInterfaceVersion
+     then noResult
+     else do
+
+      ((r, nL, sL, iL, dL), s, _) <-
+        return $ B.runGetState B.get (G.decompress s) 0
+      if s /= L.empty
+         -- G.decompress seems to throw away garbage at the end, so
+         -- the then branch is possibly dead code.
+       then noResult
+       else do
+
+        st <- St (ar nL) (ar sL) (ar iL) (ar dL)
+                <$> liftIO (H.new (==) hashInt2)
+                <*> return mf <*> return incs
+        (r, st) <- runStateT (runErrorT (value r)) st
+        return (Just (modFile st), case r of
+          Left  _ -> Nothing
+          Right x -> Just x)
+
+  case mf of
+    Nothing -> return ()
+    Just mf -> modify $ \s -> s { stModuleToSource = mf }
+
+  return x
+
+  where
+  ar l = listArray (0, List.length l - 1) l
+
+  noResult = return (Nothing, Nothing)
+
+-- | Encodes something. To ensure relocatability file paths in
+-- positions are replaced with module names.
+
+encodeFile :: EmbPrj a
+           => FilePath
+              -- ^ The encoded data is written to this file.
+           -> a
+              -- ^ Something.
+           -> TCM ()
+encodeFile f x = liftIO . L.writeFile f =<< encode x
+
+-- | Decodes something. The result depends on the include path.
+--
+-- Returns 'Nothing' if the file does not start with the right magic
+-- number or some other decoding error is encountered.
+
+decodeFile :: EmbPrj a => FilePath -> TCM (Maybe a)
+decodeFile f = decode =<< liftIO (L.readFile f)
+
+
 instance EmbPrj String where
   icode   = icodeX stringD stringC
-  value i = (! i) `fmap` asks stringE
+  value i = (! i) `fmap` gets stringE
 
 instance EmbPrj Integer where
   icode   = icodeX integerD integerC
-  value i = (! i) `fmap` asks integerE
+  value i = (! i) `fmap` gets integerE
 
 instance EmbPrj Int where
   icode i = return i
@@ -141,37 +229,60 @@
 
 instance EmbPrj Double where
   icode   = icodeX doubleD doubleC
-  value i = (! i) `fmap` asks doubleE
+  value i = (! i) `fmap` gets doubleE
 
 instance (EmbPrj a, EmbPrj b) => EmbPrj (a, b) where
   icode (a, b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 (,) a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance (EmbPrj a, EmbPrj b, EmbPrj c) => EmbPrj (a, b, c) where
   icode (a, b, c) = icode3' a b c
   value = vcase valu where valu [a, b, c] = valu3 (,,) a b c
-                           valu _         = __IMPOSSIBLE__
+                           valu _         = malformed
 
 instance EmbPrj a => EmbPrj (Maybe a) where
   icode Nothing  = icode0'
   icode (Just x) = icode1' x
   value = vcase valu where valu []  = valu0 Nothing
                            valu [x] = valu1 Just x
-                           valu _   = __IMPOSSIBLE__
+                           valu _   = malformed
 
 instance EmbPrj Bool where
   icode True  = icode0 0
   icode False = icode0 1
   value = vcase valu where valu [0] = valu0 True
                            valu [1] = valu0 False
-                           valu _   = __IMPOSSIBLE__
+                           valu _   = malformed
 
+instance EmbPrj AbsolutePath where
+  icode file = do
+    mm <- M.lookup file . fileMod <$> ask
+    case mm of
+      Just m  -> icode m
+      Nothing -> __IMPOSSIBLE__
+  value m = do
+    m       <- value m
+    mf      <- modFile  <$> get
+    incs    <- includes <$> get
+    (r, mf) <- liftIO $ findFile'' incs m mf
+    modify $ \s -> s { modFile = mf }
+    case r of
+      Left err -> throwError $ findErrorToTypeError m err
+      Right f  -> return f
+
 instance EmbPrj Position where
   icode (P.Pn file pos line col) = icode4' file pos line col
-  value = vcase valu where valu [f, p, l, c] = valu4 P.Pn f p l c
-                           valu _            = __IMPOSSIBLE__
+  value = vcase valu
+    where
+    valu [f, p, l, c] = valu4 P.Pn f p l c
+    valu _            = malformed
 
+instance EmbPrj TopLevelModuleName where
+  icode (TopLevelModuleName a) = icode1' a
+  value = vcase valu where valu [a] = valu1 TopLevelModuleName a
+                           valu _   = malformed
+
 instance EmbPrj a => EmbPrj [a] where
   icode xs = icodeN =<< mapM icode xs
   value = vcase $ mapM value
@@ -179,69 +290,73 @@
 --   icode (x : xs) = icode2' x xs
 --   value = vcase valu where valu []      = valu0 []
 --                            valu [x, xs] = valu2 (:) x xs
---                            valu _       = __IMPOSSIBLE__
+--                            valu _       = malformed
 
 instance (Ord a, EmbPrj a, EmbPrj b) => EmbPrj (Map a b) where
   icode m = icode (M.toList m)
   value m = M.fromList `fmap` value m
 
+instance (Ord a, EmbPrj a) => EmbPrj (Set a) where
+  icode s = icode (S.toList s)
+  value s = S.fromList `fmap` value s
+
 instance EmbPrj P.Interval where
   icode (P.Interval p q) = icode2' p q
   value = vcase valu where valu [p, q] = valu2 P.Interval p q
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj Range where
   icode (P.Range is) = icode1' is
   value = vcase valu where valu [is] = valu1 P.Range is
-                           valu _    = __IMPOSSIBLE__
+                           valu _    = malformed
 
 instance EmbPrj HR.Range where
   icode (HR.Range a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 HR.Range a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj C.Name where
   icode (C.NoName a b) = icode2 0 a b
   icode (C.Name r xs)  = icode2 1 r xs
   value = vcase valu where valu [0, a, b]  = valu2 C.NoName a b
                            valu [1, r, xs] = valu2 C.Name   r xs
-                           valu _          = __IMPOSSIBLE__
+                           valu _          = malformed
 
 instance EmbPrj NamePart where
   icode Hole   = icode0'
   icode (Id a) = icode1' a
   value = vcase valu where valu []  = valu0 Hole
                            valu [a] = valu1 Id a
-                           valu _   = __IMPOSSIBLE__
+                           valu _   = malformed
 
 instance EmbPrj C.QName where
   icode (Qual    a b) = icode2' a b
   icode (C.QName a  ) = icode1' a
   value = vcase valu where valu [a, b] = valu2 Qual    a b
                            valu [a]    = valu1 C.QName a
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj Scope where
   icode (Scope a b c d e f) = icode6' a b c d e f
   value = vcase valu where valu [a, b, c, d, e, f] = valu6 Scope a b c d e f
-                           valu _                  = __IMPOSSIBLE__
+                           valu _                  = malformed
 
 instance EmbPrj Access where
   icode PrivateAccess = icode0 0
   icode PublicAccess  = icode0 1
   value = vcase valu where valu [0] = valu0 PrivateAccess
                            valu [1] = valu0 PublicAccess
-                           valu _   = __IMPOSSIBLE__
+                           valu _   = malformed
 
 instance EmbPrj NameSpace where
   icode (NameSpace a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 NameSpace a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj AbstractName where
   icode (AbsName a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 AbsName a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj AbstractModule where
   icode (AbsModule a) = icode a
@@ -252,7 +367,7 @@
   icode ConName = icode0 1
   value = vcase valu where valu [0] = valu0 DefName
                            valu [1] = valu0 ConName
-                           valu _   = __IMPOSSIBLE__
+                           valu _   = malformed
 
 instance EmbPrj Agda.Syntax.Fixity.Fixity where
   icode (LeftAssoc  a b) = icode2 0 a b
@@ -261,12 +376,12 @@
   value = vcase valu where valu [0, a, b] = valu2 LeftAssoc  a b
                            valu [1, a, b] = valu2 RightAssoc a b
                            valu [2, a, b] = valu2 NonAssoc   a b
-                           valu _         = __IMPOSSIBLE__
+                           valu _         = malformed
 
 instance EmbPrj A.QName where
   icode (A.QName a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 A.QName a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj A.ModuleName where
   icode (A.MName a) = icode a
@@ -275,58 +390,58 @@
 instance EmbPrj A.Name where
   icode (A.Name a b c d) = icode4' a b c d
   value = vcase valu where valu [a, b, c, d] = valu4 A.Name a b c d
-                           valu _            = __IMPOSSIBLE__
+                           valu _            = malformed
 
 instance EmbPrj NameId where
   icode (NameId a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 NameId a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj Signature where
   icode (Sig a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 Sig a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj Section where
   icode (Section a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 Section a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj Telescope where
   icode EmptyTel        = icode0'
   icode (ExtendTel a b) = icode2' a b
   value = vcase valu where valu []     = valu0 EmptyTel
                            valu [a, b] = valu2 ExtendTel a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj Permutation where
   icode (Perm a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 Perm a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance (EmbPrj a) => EmbPrj (Agda.Syntax.Common.Arg a) where
   icode (Arg a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 Arg a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj Agda.Syntax.Common.Induction where
   icode Inductive   = icode0 0
   icode CoInductive = icode0 1
   value = vcase valu where valu [0] = valu0 Inductive
                            valu [1] = valu0 CoInductive
-                           valu _   = __IMPOSSIBLE__
+                           valu _   = malformed
 
 instance EmbPrj Agda.Syntax.Common.Hiding where
   icode Hidden    = icode0 0
   icode NotHidden = icode0 1
   value = vcase valu where valu [0] = valu0 Hidden
                            valu [1] = valu0 NotHidden
-                           valu _   = __IMPOSSIBLE__
+                           valu _   = malformed
 
 instance EmbPrj I.Type where
   icode (El a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 El a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj I.MetaId where
   icode (MetaId a) = icode a
@@ -335,7 +450,7 @@
 instance (EmbPrj a) => EmbPrj (I.Abs a) where
   icode (Abs a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 Abs a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj I.Term where
   icode (Var      a b) = icode2 0 a b
@@ -356,41 +471,47 @@
                            valu [6, a, b] = valu2 Fun   a b
                            valu [7, a]    = valu1 Sort  a
                            valu [8, a, b] = valu2 MetaV a b
-                           valu _         = __IMPOSSIBLE__
+                           valu _         = malformed
 
 instance EmbPrj I.Sort where
   icode (Type  a  ) = icode1 0 a
   icode Prop        = icode0 1
   icode (Lub   a b) = icode2 2 a b
   icode (Suc   a  ) = icode1 3 a
-  icode (MetaS a )  = icode1 4 a
+  icode (MetaS a b) = icode2 4 a b
+  icode Inf         = icode0 5
+  icode (DLub a b)  = icode2 6 a b
   value = vcase valu where valu [0, a]    = valu1 Type  a
                            valu [1]       = valu0 Prop
                            valu [2, a, b] = valu2 Lub   a b
                            valu [3, a]    = valu1 Suc   a
-                           valu [4, a]    = valu1 MetaS a
-                           valu _         = __IMPOSSIBLE__
+                           valu [4, a, b] = valu2 MetaS a b
+                           valu [5]       = valu0 Inf
+                           valu [6, a, b] = valu2 DLub a b
+                           valu _         = malformed
 
 instance EmbPrj Agda.Syntax.Literal.Literal where
   icode (LitInt    a b) = icode2 0 a b
   icode (LitFloat  a b) = icode2 1 a b
   icode (LitString a b) = icode2 2 a b
   icode (LitChar   a b) = icode2 3 a b
+  icode (LitLevel  a b) = icode2 4 a b
   value = vcase valu where valu [0, a, b] = valu2 LitInt    a b
                            valu [1, a, b] = valu2 LitFloat  a b
                            valu [2, a, b] = valu2 LitString a b
                            valu [3, a, b] = valu2 LitChar   a b
-                           valu _         = __IMPOSSIBLE__
+                           valu [4, a, b] = valu2 LitLevel  a b
+                           valu _         = malformed
 
 instance EmbPrj DisplayForm where
   icode (Display a b c) = icode3' a b c
   value = vcase valu where valu [a, b, c] = valu3 Display a b c
-                           valu _         = __IMPOSSIBLE__
+                           valu _         = malformed
 
 instance EmbPrj a => EmbPrj (Open a) where
   icode (OpenThing a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 OpenThing a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj CtxId where
   icode (CtxId a) = icode a
@@ -401,7 +522,7 @@
   icode (DWithApp a b) = icode2' a b
   value = vcase valu where valu [a]    = valu1 DTerm a
                            valu [a, b] = valu2 DWithApp a b
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj MutualId where
   icode (MutId a) = icode a
@@ -410,7 +531,7 @@
 instance EmbPrj Definition where
   icode (Defn a b c d e) = icode5' a b c d e
   value = vcase valu where valu [a, b, c, d, e] = valu5 Defn a b c d e
-                           valu _               = __IMPOSSIBLE__
+                           valu _               = malformed
 
 instance EmbPrj HaskellRepresentation where
   icode (HsType a)   = icode1 0 a
@@ -419,7 +540,7 @@
   value = vcase valu where
     valu [0, a]    = valu1 HsType a
     valu [1, a, b] = valu2 HsDefn a b
-    valu _         = __IMPOSSIBLE__
+    valu _         = malformed
 
 instance EmbPrj Polarity where
   icode Covariant     = icode0 0
@@ -430,7 +551,7 @@
     valu [0] = valu0 Covariant
     valu [1] = valu0 Contravariant
     valu [2] = valu0 Invariant
-    valu _   = __IMPOSSIBLE__
+    valu _   = malformed
 
 instance EmbPrj Occurrence where
   icode Positive = icode0 0
@@ -441,30 +562,30 @@
     valu [0] = valu0 Positive
     valu [1] = valu0 Negative
     valu [2] = valu0 Unused
-    valu _   = __IMPOSSIBLE__
+    valu _   = malformed
 
 instance EmbPrj Defn where
   icode (Axiom       a)                   = icode1 0 a
   icode (Function    a b c d e f)         = icode6 1 a b c d e f
   icode (Datatype    a b c d e f g h i j) = icode10 2 a b c d e f g h i j
-  icode (Record      a b c d e f g h)     = icode8 3 a b c d e f g h
+  icode (Record      a b c d e f g h i)   = icode9 3 a b c d e f g h i
   icode (Constructor a b c d e f)         = icode6 4 a b c d e f
   icode (Primitive   a b c)               = icode3 5 a b c
   value = vcase valu where
     valu [0, a]                            = valu1 Axiom       a
     valu [1, a, b, c, d, e, f]             = valu6 Function    a b c d e f
     valu [2, a, b, c, d, e, f, g, h, i, j] = valu10 Datatype    a b c d e f g h i j
-    valu [3, a, b, c, d, e, f, g, h]       = valu8 Record      a b c d e f g h
+    valu [3, a, b, c, d, e, f, g, h, i]    = valu9 Record      a b c d e f g h i
     valu [4, a, b, c, d, e, f]             = valu6 Constructor a b c d e f
     valu [5, a, b, c]                      = valu3 Primitive   a b c
-    valu _                                 = __IMPOSSIBLE__
+    valu _                                 = malformed
 
 instance EmbPrj FunctionInverse where
   icode NotInjective = icode0'
   icode (Inverse a)  = icode1' a
   value = vcase valu where valu []  = valu0 NotInjective
                            valu [a] = valu1 Inverse a
-                           valu _   = __IMPOSSIBLE__
+                           valu _   = malformed
 
 instance EmbPrj TermHead where
   icode SortHead    = icode0 0
@@ -473,19 +594,19 @@
   value = vcase valu where valu [0]    = return SortHead
                            valu [1]    = return PiHead
                            valu [2, a] = valu1 ConHead a
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj Agda.Syntax.Common.IsAbstract where
   icode AbstractDef = icode0 0
   icode ConcreteDef = icode0 1
   value = vcase valu where valu [0] = valu0 AbstractDef
                            valu [1] = valu0 ConcreteDef
-                           valu _   = __IMPOSSIBLE__
+                           valu _   = malformed
 
 instance EmbPrj I.Clause where
   icode (Clause a b c d e) = icode5' a b c d e
   value = vcase valu where valu [a, b, c, d, e] = valu5 Clause a b c d e
-                           valu _               = __IMPOSSIBLE__
+                           valu _               = malformed
 
 instance EmbPrj I.ClauseBody where
   icode (Body   a) = icode1 0 a
@@ -496,14 +617,14 @@
                            valu [1, a] = valu1 Bind   a
                            valu [2, a] = valu1 NoBind a
                            valu []     = valu0 NoBody
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj Delayed where
   icode Delayed    = icode0 0
   icode NotDelayed = icode0 1
   value = vcase valu where valu [0] = valu0 Delayed
                            valu [1] = valu0 NotDelayed
-                           valu _   = __IMPOSSIBLE__
+                           valu _   = malformed
 
 instance EmbPrj I.Pattern where
   icode (VarP a  ) = icode1 0 a
@@ -514,14 +635,14 @@
                            valu [1, a, b] = valu2 ConP a b
                            valu [2, a]    = valu1 LitP a
                            valu [3, a]    = valu1 DotP a
-                           valu _         = __IMPOSSIBLE__
+                           valu _         = malformed
 
 instance EmbPrj a => EmbPrj (Builtin a) where
   icode (Prim    a) = icode1 0 a
   icode (Builtin a) = icode1 1 a
   value = vcase valu where valu [0, a] = valu1 Prim    a
                            valu [1, a] = valu1 Builtin a
-                           valu _      = __IMPOSSIBLE__
+                           valu _      = malformed
 
 instance EmbPrj HP.NameKind where
   icode HP.Bound           = icode0 0
@@ -544,7 +665,7 @@
     valu [6]     = valu0 HP.Postulate
     valu [7]     = valu0 HP.Primitive
     valu [8]     = valu0 HP.Record
-    valu _       = __IMPOSSIBLE__
+    valu _       = malformed
 
 instance EmbPrj HP.Aspect where
   icode HP.Comment       = icode0 0
@@ -563,7 +684,7 @@
     valu [4]        = valu0 HP.Symbol
     valu [5]        = valu0 HP.PrimitiveType
     valu [6, mk, b] = valu2 HP.Name mk b
-    valu _          = __IMPOSSIBLE__
+    valu _          = malformed
 
 instance EmbPrj HP.OtherAspect where
   icode HP.Error              = icode0 0
@@ -578,26 +699,49 @@
     valu [2] = valu0 HP.UnsolvedMeta
     valu [3] = valu0 HP.TerminationProblem
     valu [4] = valu0 HP.IncompletePattern
-    valu _   = __IMPOSSIBLE__
+    valu _   = malformed
 
 instance EmbPrj HP.MetaInfo where
   icode (HP.MetaInfo a b c d) = icode4' a b c d
 
   value = vcase valu where
     valu [a, b, c, d] = valu4 HP.MetaInfo a b c d
-    valu _            = __IMPOSSIBLE__
+    valu _            = malformed
 
-instance EmbPrj HP.HighlightingInfo where
-  icode (HP.HighlightingInfo a b) = icode2' a b
+instance EmbPrj Precedence where
+  icode TopCtx                 = icode0 0
+  icode FunctionSpaceDomainCtx = icode0 1
+  icode (LeftOperandCtx a)     = icode1 2 a
+  icode (RightOperandCtx a)    = icode1 3 a
+  icode FunctionCtx            = icode0 4
+  icode ArgumentCtx            = icode0 5
+  icode InsideOperandCtx       = icode0 6
+  icode WithFunCtx             = icode0 7
+  icode WithArgCtx             = icode0 8
+  icode DotPatternCtx          = icode0 9
+  value = vcase valu
+    where
+    valu [0]    = valu0 TopCtx
+    valu [1]    = valu0 FunctionSpaceDomainCtx
+    valu [2, a] = valu1 LeftOperandCtx a
+    valu [3, a] = valu1 RightOperandCtx a
+    valu [4]    = valu0 FunctionCtx
+    valu [5]    = valu0 ArgumentCtx
+    valu [6]    = valu0 InsideOperandCtx
+    valu [7]    = valu0 WithFunCtx
+    valu [8]    = valu0 WithArgCtx
+    valu [9]    = valu0 DotPatternCtx
+    valu _      = malformed
 
-  value = vcase valu where
-    valu [a, b] = valu2 HP.HighlightingInfo a b
-    valu _      = __IMPOSSIBLE__
+instance EmbPrj ScopeInfo where
+  icode (ScopeInfo a b c d) = icode4' a b c d
+  value = vcase valu where valu [a, b, c, d] = valu4 ScopeInfo a b c d
+                           valu _            = malformed
 
 instance EmbPrj Interface where
-  icode (Interface a b c d e f g) = icode7' a b c d e f g
-  value = vcase valu where valu [a, b, c, d, e, f, g] = valu7 Interface a b c d e f g
-                           valu _                     = __IMPOSSIBLE__
+  icode (Interface a b c d e f g h) = icode8' a b c d e f g h
+  value = vcase valu where valu [a, b, c, d, e, f, g, h] = valu8 Interface a b c d e f g h
+                           valu _                        = malformed
 
 
 
@@ -618,14 +762,16 @@
 
 vcase :: forall a . EmbPrj a => ([Int] -> R a) -> Int -> R a
 vcase valu ix = do
-    aTyp <- lift $ typeRepKey $ typeOf (undefined :: a)
-    memo <- asks nodeMemo
-    maybeU <- lift $ H.lookup memo (ix, aTyp)
+    memo <- gets nodeMemo
+    (aTyp, maybeU) <- liftIO $ do
+      aTyp   <- typeRepKey $ typeOf (undefined :: a)
+      maybeU <- H.lookup memo (ix, aTyp)
+      return (aTyp, maybeU)
     case maybeU of
-      Just (U u) -> maybe (__IMPOSSIBLE__) return (cast u)
+      Just (U u) -> maybe malformed return (cast u)
       Nothing    -> do
-          v <- valu . (! ix) =<< asks nodeE
-          lift $ H.insert memo (ix, aTyp) (U v)
+          v <- valu . (! ix) =<< gets nodeE
+          liftIO $ H.insert memo (ix, aTyp) (U v)
           return v
 
 icode0  tag                     = icodeN [tag]
@@ -664,19 +810,23 @@
 valu9  z a b c d e f g h i   = valu8 z a b c d e f g h   `ap` value i
 valu10 z a b c d e f g h i j = valu9 z a b c d e f g h i `ap` value j
 
-test :: EmbPrj a => a -> IO a
-test x = decode =<< encode x
+-- | Creates an empty dictionary.
 
-emptyDict :: IO Dict
-emptyDict = liftM5 Dict
-            (H.new (==) hashNode)
-            (H.new (==) H.hashString)
-            (H.new (==) (H.hashInt . fromIntegral))
-            (H.new (==) (H.hashInt . floor))
-            (newIORef 0)
-            `ap` (newIORef 0)
-            `ap` (newIORef 0)
-            `ap` (newIORef 0)
+emptyDict :: SourceToModule
+             -- ^ Maps file names to the corresponding module names.
+             -- Must contain a mapping for every file name that is
+             -- later encountered.
+          -> IO Dict
+emptyDict fileMod = Dict
+  <$> H.new (==) hashNode
+  <*> H.new (==) H.hashString
+  <*> H.new (==) (H.hashInt . fromIntegral)
+  <*> H.new (==) (H.hashInt . floor)
+  <*> newIORef 0
+  <*> newIORef 0
+  <*> newIORef 0
+  <*> newIORef 0
+  <*> return fileMod
 
 hashNode :: [ Int ] -> Int32
 hashNode is = List.foldl' f golden is
diff --git a/src/full/Agda/TypeChecking/SizedTypes.hs b/src/full/Agda/TypeChecking/SizedTypes.hs
--- a/src/full/Agda/TypeChecking/SizedTypes.hs
+++ b/src/full/Agda/TypeChecking/SizedTypes.hs
@@ -115,7 +115,7 @@
     (a, n) <- sizeExpr u
     (b, m) <- sizeExpr v
     return $ Just $ Leq a (m - n) b
-  `catchError` \err -> case err of
+  `catchError` \err -> case errError err of
     PatternErr _ -> return Nothing
     _            -> throwError err
 
diff --git a/src/full/Agda/TypeChecking/Substitute.hs b/src/full/Agda/TypeChecking/Substitute.hs
--- a/src/full/Agda/TypeChecking/Substitute.hs
+++ b/src/full/Agda/TypeChecking/Substitute.hs
@@ -7,6 +7,7 @@
 import Data.List hiding (sort)
 import Data.Map (Map)
 import qualified Data.Map as Map
+import qualified Data.Set as Set
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
@@ -62,8 +63,10 @@
       d { funClauses = apply cs args, funInv = apply inv args }
     Datatype{ dataPars = np, dataClause = cl } ->
       d { dataPars = np - size args, dataClause = apply cl args }
-    Record{ recPars = np, recClause = cl, recTel = tel } ->
-      d { recPars = np - size args, recClause = apply cl args, recTel = apply tel args }
+    Record{ recPars = np, recConType = t, recClause = cl, recTel = tel } ->
+      d { recPars = np - size args, recConType = apply t args
+        , recClause = apply cl args, recTel = apply tel args
+        }
     Constructor{ conPars = np } ->
       d { conPars = np - size args }
     Primitive{ primClauses = cs } ->
@@ -157,8 +160,10 @@
       d { funClauses = abstract tel cs, funInv = abstract tel inv }
     Datatype{ dataPars = np, dataClause = cl } ->
       d { dataPars = np + size tel, dataClause = abstract tel cl }
-    Record{ recPars = np, recClause = cl, recTel = tel' } ->
-      d { recPars = np + size tel, recClause = abstract tel cl, recTel = abstract tel tel' }
+    Record{ recPars = np, recConType = t, recClause = cl, recTel = tel' } ->
+      d { recPars = np + size tel, recConType = abstract tel t
+        , recClause = abstract tel cl, recTel = abstract tel tel'
+        }
     Constructor{ conPars = np } ->
       d { conPars = np + size tel }
     Primitive{ primClauses = cs } ->
@@ -223,7 +228,7 @@
 	    Lit l      -> Lit l
 	    Pi a b     -> uncurry Pi $ substs us (a,b)
 	    Fun a b    -> uncurry Fun $ substs us (a,b)
-	    Sort s     -> Sort s
+	    Sort s     -> Sort $ substs us s
         where
             []     !!! n = error "unbound variable"
             (x:xs) !!! 0 = x
@@ -241,12 +246,33 @@
 	    Lit l      -> Lit l
 	    Pi a b     -> uncurry Pi $ substUnder n u (a,b)
 	    Fun a b    -> uncurry Fun $ substUnder n u (a,b)
-	    Sort s     -> Sort s
+	    Sort s     -> Sort $ substUnder n u s
 
 instance Subst Type where
-    substs us (El s t) = El s $ substs us t
-    substUnder n u (El s t) = El s $ substUnder n u t
+    substs us (El s t) = substs us s `El` substs us t
+    substUnder n u (El s t) = substUnder n u s `El` substUnder n u t
 
+instance Subst Sort where
+    substs us s = case s of
+      Type n     -> Type $ sub n
+      Prop       -> Prop
+      Suc s      -> Suc $ sub s
+      Lub s1 s2  -> Lub (sub s1) (sub s2)
+      MetaS m as -> MetaS m (sub as)
+      Inf        -> Inf
+      DLub s1 s2 -> DLub (sub s1) (sub s2)
+      where sub x = substs us x
+
+    substUnder n u s = case s of
+      Type n     -> Type $ sub n
+      Prop       -> Prop
+      Suc s      -> Suc $ sub s
+      Lub s1 s2  -> Lub (sub s1) (sub s2)
+      MetaS m as -> MetaS m (sub as)
+      Inf        -> Inf
+      DLub s1 s2 -> DLub (sub s1) (sub s2)
+      where sub x = substUnder n u x
+
 instance Subst Pattern where
   substs us p = case p of
     VarP s    -> VarP s
@@ -326,13 +352,24 @@
 	    Lit l	    -> Lit l
 	    Pi a b	    -> uncurry Pi $ rf (a,b)
 	    Fun a b	    -> uncurry Fun $ rf (a,b)
-	    Sort s	    -> Sort s
+	    Sort s	    -> Sort $ rf s
 	where
 	    rf x = raiseFrom m k x
 
 instance Raise Type where
-    raiseFrom m k (El s t) = El s $ raiseFrom m k t
+    raiseFrom m k (El s t) = raiseFrom m k s `El` raiseFrom m k t
 
+instance Raise Sort where
+    raiseFrom m k s = case s of
+      Type n     -> Type $ rf n
+      Prop       -> Prop
+      Suc s      -> Suc $ rf s
+      Lub s1 s2  -> Lub (rf s1) (rf s2)
+      MetaS m as -> MetaS m (rf as)
+      Inf        -> Inf
+      DLub s1 s2 -> DLub (rf s1) (rf s2)
+      where rf x = raiseFrom m k x
+
 instance Raise Telescope where
     raiseFrom m k EmptyTel	    = EmptyTel
     raiseFrom m k (ExtendTel a tel) = uncurry ExtendTel $ raiseFrom m k (a, tel)
@@ -383,10 +420,10 @@
 telePi  EmptyTel	 t = t
 telePi (ExtendTel u tel) t = el $ fn u b
   where
-    el = El (sLub s1 s2)
+    el = El (dLub s1 s2)
     b = fmap (flip telePi t) tel
     s1 = getSort $ unArg u
-    s2 = getSort $ absBody b
+    s2 = fmap getSort b
 
     fn a b
       | 0 `freeIn` absBody b = Pi a b
@@ -397,8 +434,19 @@
 telePi_  EmptyTel	 t = t
 telePi_ (ExtendTel u tel) t = el $ Pi u b
   where
-    el = El (sLub s1 s2)
-    b = fmap (flip telePi_ t) tel
+    el = El (dLub s1 s2)
+    b  = fmap (flip telePi_ t) tel
     s1 = getSort $ unArg u
-    s2 = getSort $ absBody b
+    s2 = fmap getSort b
+
+dLub :: Sort -> Abs Sort -> Sort
+dLub s1 s2
+  | 0 `Set.member` rv = Inf
+  | 0 `Set.member` fv = DLub s1 s2
+  | otherwise         = sLub s1 (absApp s2 __IMPOSSIBLE__)
+  where
+    vs = freeVars (absBody s2)
+    fv = flexibleVars vs
+    rv = rigidVars vs
+
 
diff --git a/src/full/Agda/TypeChecking/Telescope.hs b/src/full/Agda/TypeChecking/Telescope.hs
--- a/src/full/Agda/TypeChecking/Telescope.hs
+++ b/src/full/Agda/TypeChecking/Telescope.hs
@@ -52,7 +52,7 @@
   Just p  -> p
   where
     tel' = reverse $ zip [0..] $ reverse tel
-    (i, _) `comesBefore` (_, a) = i `freeIn` a
+    (i, _) `comesBefore` (_, a) = i `freeIn` unEl (unArg a) -- a tiny bit unsafe
 
 -- | Unflatten: turns a flattened telescope into a proper telescope. Must be
 --   properly ordered.
@@ -62,7 +62,7 @@
   where
     tel' = unflattenTel xs tel
     a'   = substs rho a
-    rho  = replicate (size tel + 1) __IMPOSSIBLE__ ++ map var [0..]
+    rho  = replicate (size tel + 1) __IMPOSSIBLE_TERM__ ++ map var [0..]
       where var i = Var i []
 unflattenTel [] (_ : _) = __IMPOSSIBLE__
 unflattenTel (_ : _) [] = __IMPOSSIBLE__
diff --git a/src/full/Agda/TypeChecking/Test/Generators.hs b/src/full/Agda/TypeChecking/Test/Generators.hs
--- a/src/full/Agda/TypeChecking/Test/Generators.hs
+++ b/src/full/Agda/TypeChecking/Test/Generators.hs
@@ -203,7 +203,7 @@
 instance GenC Sort where
   genC conf = frequency $
     (propF, return Prop) :
-    zip setFs (map (return . Type) [0..])
+    zip setFs (map (return . mkType) [0..])
     where
       freq f = f $ tcFrequencies conf
       setFs = freq (setFreqs . sortFreqs)
@@ -382,6 +382,7 @@
 instance ShrinkC Literal Literal where
   shrinkC _ (LitInt _ 0) = []
   shrinkC conf l	 = LitInt noRange 0 : case l of
+      LitLevel  r n -> LitLevel  r <$> shrink n
       LitInt    r n -> LitInt    r <$> shrink n
       LitString r s -> LitString r <$> shrinkC conf s
       LitChar   r c -> LitChar   r <$> shrinkC conf c
@@ -414,11 +415,13 @@
 instance ShrinkC Sort Sort where
   shrinkC conf Prop = []
   shrinkC conf s = Prop : case s of
-    Type n    -> Type <$> shrink n
-    Lub s1 s2 -> s1 : s2 : (uncurry Lub <$> shrinkC conf (s1, s2))
-    Suc s     -> s : (Suc <$> shrinkC conf s)
-    MetaS m   -> []
-    Prop      -> __IMPOSSIBLE__
+    Type n     -> Type <$> shrinkC conf n
+    Lub s1 s2  -> s1 : s2 : (uncurry Lub <$> shrinkC conf (s1, s2))
+    Suc s      -> s : (Suc <$> shrinkC conf s)
+    MetaS m _  -> []
+    Prop       -> __IMPOSSIBLE__
+    Inf        -> []
+    DLub s1 s2 -> __IMPOSSIBLE__
   noShrink = id
 
 instance ShrinkC Telescope Telescope where
diff --git a/src/full/Agda/TypeChecking/With.hs b/src/full/Agda/TypeChecking/With.hs
--- a/src/full/Agda/TypeChecking/With.hs
+++ b/src/full/Agda/TypeChecking/With.hs
@@ -52,9 +52,10 @@
       (ps1, ps2)  <- genericSplitAt n1 <$> stripWithClausePatterns gamma qs perm ps
       return $ A.Clause (LHS i aux (ps1 ++ ps0 ++ ps2) wps1) rhs wh
 
-    buildRHS rhs@(RHS _)     = return rhs
-    buildRHS rhs@AbsurdRHS   = return rhs
-    buildRHS (WithRHS q es cs) = WithRHS q es <$> mapM buildWithClause cs
+    buildRHS rhs@(RHS _)               = return rhs
+    buildRHS rhs@AbsurdRHS             = return rhs
+    buildRHS (WithRHS q es cs)         = WithRHS q es <$> mapM buildWithClause cs
+    buildRHS (RewriteRHS q eqs rhs wh) = flip (RewriteRHS q eqs) wh <$> buildRHS rhs
 
 {-| @stripWithClausePatterns Γ qs π ps = ps'@
 
@@ -254,6 +255,7 @@
 updateWithConstructorRanges tel ps A.RHS{}            = ps
 updateWithConstructorRanges tel ps A.AbsurdRHS{}      = ps
 updateWithConstructorRanges tel ps (A.WithRHS _ _ cs) = ps
+updateWithConstructorRanges tel ps A.RewriteRHS{}     = ps
 
 constructorsInClauses :: ConPos -> [A.Clause] -> [Range]
 constructorsInClauses pos cs = concatMap (constructorsInClause pos) cs
diff --git a/src/full/Agda/Utils/FileName.hs b/src/full/Agda/Utils/FileName.hs
--- a/src/full/Agda/Utils/FileName.hs
+++ b/src/full/Agda/Utils/FileName.hs
@@ -1,246 +1,91 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, DeriveDataTypeable #-}
 
 {-| Operations on file names. -}
-module Agda.Utils.FileName where
+module Agda.Utils.FileName
+  ( AbsolutePath
+  , filePath
+  , mkAbsolute
+  , absolute
+  , (===)
+  , tests
+  ) where
 
 import Agda.Utils.TestHelpers
 import Agda.Utils.QuickCheck
+import Data.Function
+import Data.Generics
 import Data.List
+import Data.Maybe
+import Control.Applicative
 import Control.Monad
 import System.Directory
-
-splitFilePath :: FilePath -> (FilePath, String, String)
-#ifdef mingw32_HOST_OS
-splitFilePath (drive:':':s) = let (path, file, ext) = splitFilePath s
-                              in (drive:':':path, file, ext)
-#endif
-splitFilePath s =
-    case span (`notElem` slashes) $ reverse s of
-	(elif, sl:htap)
-	    | sl `elem` slashes -> let (n,e) = splitExt $ reverse elif in
-                                    (reverse (slash:htap), n, e)
-	(elif, "")	    -> let (n,e) = splitExt $ reverse elif in
-				("", n, e)
-	_		    -> error $ "impossible: splitFilePath " ++ show s
-
--- | The extension includes the dot
-splitExt :: FilePath -> (String, String)
-splitExt x =
-    case span (/='.') $ reverse x of
-	(txe, '.':elif)	-> (reverse elif, '.' : reverse txe)
-	(elif, "")	-> (reverse elif, "")
-	_		-> error $ "impossible: splitExt " ++ show x
-
--- | Change the extension of a filename
-setExtension :: String -> FilePath -> FilePath
-setExtension ext x = p ++ n ++ ext
-    where
-	(p,n,_) = splitFilePath x
-
--- | Breaks up a path (possibly including a file) into a list of
--- drives\/directories (with the file at the end).
-
-splitPath :: FilePath -> [FilePath]
-#ifdef mingw32_HOST_OS
-splitPath (drive:':':cs) = case splitPath cs of
-                             (path:paths) -> (drive:':':path):paths
-                             []           -> [[drive,':',slash]]
-#endif
-splitPath "" = []
-splitPath (c : cs) | c `elem` slashes = split cs
-                   | otherwise        = split (c : cs)
-  where
-  split path = case span (`notElem` slashes) path of
-    ("", "")        -> []
-    (dir, "")       -> [dir]
-    (dir, _ : path) -> dir : split path
-
--- | The moral inverse of splitPath.
-
-unsplitPath :: [FilePath] -> FilePath
-#ifdef mingw32_HOST_OS
-unsplitPath ((drive:':':path):paths) = drive:':':unsplitPath (path:paths)
-#endif
-unsplitPath dirs = concat $ intersperse [slash] $ "" : dirs ++ [""]
-
-prop_splitPath_unsplitPath =
-  forAll (listOf name) $ \dirs ->
-    splitPath (unsplitPath dirs) == dirs
+import System.FilePath
 
-prop_splitPath =
-  forAll positive		   $ \n ->
-  forAll (vectorOf n nonEmptyName) $ \dirs ->
-    let path = concat $ intersperse [slash] dirs
-    in
-    genericLength (splitPath   path)                    == n
-    &&
-    genericLength (splitPath $ slash : path)            == n
-    &&
-    genericLength (splitPath $ path ++ [slash])         == n
-    &&
-    genericLength (splitPath $ slash : path ++ [slash]) == n
+#include "../undefined.h"
+import Agda.Utils.Impossible
 
--- | Given a path (not including a file) @'dropDirectory' n@ removes
--- the last @n@ directories in the path (if any).
+-- | Paths which are known to be absolute.
 --
--- Precondition: @n '>=' 0@, and the path has to be absolute.
+-- Note that the 'Eq' and 'Ord' instances do not check if different
+-- paths point to the same files or directories.
 
-dropDirectory :: Integral i => i -> FilePath -> FilePath
-dropDirectory n =
-  unsplitPath . reverse . genericDrop n . reverse . splitPath
+newtype AbsolutePath = AbsolutePath { filePath :: FilePath }
+  deriving (Show, Eq, Ord, Typeable, Data)
 
--- The complexity of the following property, coupled with the
--- simplicity of dropDirectory, indicates that another representation
--- of paths should be used.
+-- | The paths have to be absolute, valid and normalised, without
+-- trailing path separators.
 
-prop_dropDirectory =
-  forAll natural	  $ \n ->
-  forAll path		  $ \p ->
-  forAll (pathOfLength n) $ \dirs ->
-  forAll nonEmptyName $ \name ->
-    dropDirectory n "" == "/"
-    &&
-    dropDirectory n [slash] == "/"
-    &&
-    dropDirectory n (addSlash p) == dropDirectory n p
-    &&
-    let p' = p ++ name in
-    dropDirectory n (p' ++ dirs) =^= p'
-  where
-  infix 4 =^=
-  p1 =^= p2 = surround p1 == surround p2
+absolutePathInvariant :: AbsolutePath -> Bool
+absolutePathInvariant (AbsolutePath f) =
+  isAbsolute f &&
+  isValid f &&
+  f == normalise f &&
+  f == dropTrailingPathSeparator f
 
-  surround = addSlash . addInitSlash
-  addInitSlash cs@(c : _) | c == slash = cs
-  addInitSlash cs                      = slash : cs
+-- | Constructs 'AbsolutePath's.
+--
+-- Precondition: The path must be absolute.
 
-#if 0
-#ifdef mingw32_HOST_OS
-canonify (drive:':':xs) ys =
-    case ys of
-	drive':':':ys'
-	    | drive == drive'	-> canonify' xs ys'
-	    | otherwise		-> ys
-	_			-> canonify' xs ys
-#endif
-canonify xs ys = canonify' xs ys
+mkAbsolute :: FilePath -> AbsolutePath
+mkAbsolute f
+  | isAbsolute f =
+      AbsolutePath $ dropTrailingPathSeparator $ normalise f
+  | otherwise    = __IMPOSSIBLE__
 
-canonify' (x:xs) (y:ys)
-    | x == y	    = canonify' xs ys
-canonify' [] ys	    = ys
-canonify' (s:_) ys
-    | s == slash    = ys
-canonify' xs ys	    = dotdot xs ++ ys
+prop_mkAbsolute f =
+  absolutePathInvariant $ mkAbsolute (pathSeparator : f)
 
-dotdot []	    = []
-dotdot (s:xs)
-    | s == slash    = slash : dotdot xs
-dotdot xs	    =
-    case break (== slash) xs of
-	(_, xs)	-> ".." ++ dotdot xs
-#endif
+-- | Makes the path absolute.
+--
+-- This function raises an @\_\_IMPOSSIBLE\_\_@ error if
+-- 'canonicalizePath' does not return an absolute path.
 
-addSlash "" = ""
-addSlash [c]
-    | c `elem` slashes = [slash]
-    | otherwise	       = [c,slash]
-addSlash (c:s) = c : addSlash s
+absolute :: FilePath -> IO AbsolutePath
+absolute f = mkAbsolute <$> canonicalizePath f
 
-#ifdef mingw32_HOST_OS
-slash   = '\\'
-slashes = ['\\','/']
-#else
-slash = '/'
-slashes = ['/']
-#endif
+-- | Tries to establish if the two file paths point to the same file
+-- (or directory).
 
--- | Removes duplicate file names from the list. Nonexisting files are
--- compared by name only. Two existing files are considered to be
--- equal if
---
--- * 'canonicalizePath' returns the same canonical path for them,
---
--- * and they have the same modification time.
---
--- Nonexisting and existing files are not compared.
---
--- Note that in the case of existing files the returned file names
--- are canonicalised.
---
--- The modification time test for existing files is included since the
--- first method may not always give correct results. I would want to
--- check the files' sizes instead of their modification times, but
--- "System.Directory" does not contain a function for querying the
--- size of a file.
---
--- This function is of course prone to errors if files are changed
--- while it is running.
---
--- To summarise: There are no guarantees that this function gives
--- correct results. Do not use it for mission-critical code.
+infix 4 ===
 
-nubFiles :: [FilePath] -> IO [FilePath]
-nubFiles fs = do
-  infos <- mapM getInfo fs
-  return (map (either id fst) . nub $ infos)
-  where
-  getInfo f = do
-    ex <- doesFileExist f
-    if ex then do
-      f' <- canonicalizePath f
-      t  <- getModificationTime f
-      return $ Right (f', t)
-     else
-      return $ Left f
+(===) :: FilePath -> FilePath -> IO Bool
+p1 === p2 = do
+  p1 <- canonicalizePath p1
+  p2 <- canonicalizePath p2
+  return $ equalFilePath p1 p2
 
 ------------------------------------------------------------------------
 -- Generators
 
--- | Generates a character distinct from 'slash' (it may be @\'.\'@).
-
-nameChar :: Gen Char
-nameChar = elements $ filter (not . (`elem` forbidden)) chars
-  where
-  chars = "." ++ ['a' .. 'g']
-  forbidden = [slash]
-
--- | Generates a possibly empty string of 'nameChar's.
-
-name :: Gen FilePath
-name = listOf nameChar
-
--- | Generates a non-empty string of 'nameChar's.
-
-nonEmptyName :: Gen FilePath
-nonEmptyName = listOf1 nameChar
-
--- | Generates a possibly empty path (without any drive).
-
-path :: Gen FilePath
-path = listOfElements chars
-  where
-  chars = "/." ++ ['a' .. 'g']
-
--- | @'pathOfLength' n@ generates a path which contains @n '+' 1@
--- 'slash'es and starts and ends with a 'slash'.
-
-pathOfLength :: Int -> Gen FilePath
-pathOfLength n = fmap ((++ [slash]) . concat) $
-  vectorOf n (fmap (slash :) name)
-
-prop_pathOfLength =
-  forAll natural	  $ \n ->
-  forAll (pathOfLength n) $ \path ->
-    dropDirectory n path == [slash]
-    &&
-    genericLength (filter (== slash) path) == n + 1
+instance Arbitrary AbsolutePath where
+  arbitrary = mk . take 3 . map (take 2) <$>
+                listOf (listOf1 (elements "a1"))
+    where mk ps = AbsolutePath (joinPath $ [pathSeparator] : ps)
 
 ------------------------------------------------------------------------
 -- All tests
 
 tests = runTests "Agda.Utils.FileName"
-  [ quickCheck' prop_splitPath_unsplitPath
-  , quickCheck' prop_splitPath
-  , quickCheck' prop_dropDirectory
-  , quickCheck' prop_pathOfLength
+  [ quickCheck' absolutePathInvariant
+  , quickCheck' prop_mkAbsolute
   ]
diff --git a/src/full/Agda/Utils/IO.hs b/src/full/Agda/Utils/IO.hs
deleted file mode 100644
--- a/src/full/Agda/Utils/IO.hs
+++ /dev/null
@@ -1,27 +0,0 @@
-module Agda.Utils.IO
-  ( readBinaryFile'
-  , readTextFile
-  , module System.IO.UTF8
-  ) where
-
-import System.IO.UTF8
-import qualified System.IO.UTF8 as UTF8
-import qualified System.IO as IO
-import qualified Data.ByteString.Lazy as BS
-import Control.Applicative
-
-import Agda.Utils.Unicode
-
--- | Returns a close function for the file together with the contents.
-
-readBinaryFile' :: FilePath -> IO (BS.ByteString, IO ())
-readBinaryFile' file = do
-    h <- IO.openBinaryFile file IO.ReadMode
-    s <- BS.hGetContents h
-    return (s, IO.hClose h)
-
--- | Reads a UTF8-encoded file in binary mode and converts all Unicode
--- line endings into '\n'.
-
-readTextFile :: FilePath -> IO String
-readTextFile file = convertLineEndings <$> UTF8.readFile file
diff --git a/src/full/Agda/Utils/IO/Binary.hs b/src/full/Agda/Utils/IO/Binary.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Utils/IO/Binary.hs
@@ -0,0 +1,16 @@
+-- | Binary IO.
+
+module Agda.Utils.IO.Binary
+  ( readBinaryFile'
+  ) where
+
+import System.IO
+import Data.ByteString.Lazy as BS
+
+-- | Returns a close function for the file together with the contents.
+
+readBinaryFile' :: FilePath -> IO (ByteString, IO ())
+readBinaryFile' file = do
+    h <- openBinaryFile file ReadMode
+    s <- BS.hGetContents h
+    return (s, hClose h)
diff --git a/src/full/Agda/Utils/IO/Locale.hs b/src/full/Agda/Utils/IO/Locale.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Utils/IO/Locale.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE CPP #-}
+
+-- | IO functions which are used when reading from standard input and
+-- writing to standard output. Uses the UTF-8 character encoding under
+-- versions of the base library up to 4.1, and whatever the locale
+-- specifies under base 4.2 (and later?; only if the locale is
+-- supported, see "System.IO").
+--
+-- Note that @'hSetEncoding' 'stdin'@ and @'hSetEncoding' 'stdout'@
+-- can be used to change the behaviour of the functions below if base
+-- 4.2 (or later?) is used.
+
+module Agda.Utils.IO.Locale
+  ( print
+  , putStr
+  , putStrLn
+  , hGetContents
+  ) where
+
+import Prelude (Show, IO, String)
+import System.IO (Handle)
+#if MIN_VERSION_base(4,2,0)
+import qualified Prelude
+import qualified System.IO as IO
+#else
+import qualified System.IO.UTF8 as UTF8
+#endif
+
+-- | Prints the value.
+
+print :: Show a => a -> IO ()
+#if MIN_VERSION_base(4,2,0)
+print = Prelude.print
+#else
+print = UTF8.print
+#endif
+
+-- | Prints the string.
+
+putStr :: String -> IO ()
+#if MIN_VERSION_base(4,2,0)
+putStr = Prelude.putStr
+#else
+putStr = UTF8.putStr
+#endif
+
+-- | Prints the string with an appended newline.
+
+putStrLn :: String -> IO ()
+#if MIN_VERSION_base(4,2,0)
+putStrLn = Prelude.putStrLn
+#else
+putStrLn = UTF8.putStrLn
+#endif
+
+-- | Returns the stream represented by the handle lazily.
+
+hGetContents :: Handle -> IO String
+#if MIN_VERSION_base(4,2,0)
+hGetContents = IO.hGetContents
+#else
+hGetContents = UTF8.hGetContents
+#endif
diff --git a/src/full/Agda/Utils/IO/UTF8.hs b/src/full/Agda/Utils/IO/UTF8.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Utils/IO/UTF8.hs
@@ -0,0 +1,43 @@
+{-# LANGUAGE CPP #-}
+
+-- | Text IO using the UTF8 character encoding.
+
+module Agda.Utils.IO.UTF8
+  ( readTextFile
+  , Agda.Utils.IO.UTF8.writeFile
+  ) where
+
+#if MIN_VERSION_base(4,2,0)
+import qualified System.IO as IO
+#else
+import qualified System.IO.UTF8 as UTF8
+#endif
+import Control.Applicative
+
+import Agda.Utils.Unicode
+
+-- | Reads a UTF8-encoded text file and converts all Unicode line
+-- endings into '\n'.
+
+readTextFile :: FilePath -> IO String
+readTextFile file = convertLineEndings <$> do
+#if MIN_VERSION_base(4,2,0)
+  h <- IO.openFile file IO.ReadMode
+  IO.hSetNewlineMode h IO.noNewlineTranslation
+  IO.hSetEncoding h IO.utf8
+  IO.hGetContents h
+#else
+  UTF8.readFile file
+#endif
+
+-- | Writes a UTF8-encoded text file. The native convention for line
+-- endings is used.
+
+writeFile :: FilePath -> String -> IO ()
+#if MIN_VERSION_base(4,2,0)
+writeFile file s = IO.withFile file IO.WriteMode $ \h -> do
+  IO.hSetEncoding h IO.utf8
+  IO.hPutStr h s
+#else
+writeFile = UTF8.writeFile
+#endif
diff --git a/src/full/Agda/Utils/Impossible.hs b/src/full/Agda/Utils/Impossible.hs
--- a/src/full/Agda/Utils/Impossible.hs
+++ b/src/full/Agda/Utils/Impossible.hs
@@ -6,7 +6,7 @@
 
 module Agda.Utils.Impossible where
 
-import Control.OldException
+import Control.Exception as E
 import Data.Typeable
 
 -- | \"Impossible\" errors, annotated with a file name and a line
@@ -20,13 +20,15 @@
     , "Location of the error: " ++ file ++ ":" ++ show line
     ]
 
+instance Exception Impossible
+
 -- | Abort by throwing an \"impossible\" error. You should not use
 -- this function directly. Instead use the macro in @undefined.h@.
 
 throwImpossible :: Impossible -> a
-throwImpossible i = throwDyn i
+throwImpossible = throw
 
 -- | Catch an \"impossible\" error, if possible.
 
 catchImpossible :: IO a -> (Impossible -> IO a) -> IO a
-catchImpossible = catchDyn
+catchImpossible = E.catch
diff --git a/src/full/Agda/Utils/Monad.hs b/src/full/Agda/Utils/Monad.hs
--- a/src/full/Agda/Utils/Monad.hs
+++ b/src/full/Agda/Utils/Monad.hs
@@ -11,6 +11,7 @@
 import Control.Monad.Error
 import Control.Monad.Reader
 import Control.Monad.State
+import qualified Control.Monad.State.Strict as SS
 import Control.Monad.Writer
 import Control.Applicative
 import Data.Traversable
@@ -26,6 +27,10 @@
   pure  = return
   (<*>) = ap
 
+instance (Error e, Monad m) => Applicative (ErrorT e m) where
+  pure  = return
+  (<*>) = ap
+
 instance Monad m => Applicative (ReaderT env m) where
   pure  = return
   (<*>) = ap
@@ -34,6 +39,10 @@
   pure  = return
   (<*>) = ap
 
+instance Monad m => Applicative (SS.StateT s m) where
+  pure  = return
+  (<*>) = ap
+
 instance (Monoid o, Monad m) => Applicative (WriterT o m) where
   pure	= return
   (<*>)	= ap
@@ -91,6 +100,28 @@
 zipWithM' f (x : xs) (y : ys) = liftM2 (:) (f x y) (zipWithM' f xs ys)
 zipWithM' f []	     (_ : _)  = {- ' -} __IMPOSSIBLE__
 zipWithM' f (_ : _)  []	      = {- ' -} __IMPOSSIBLE__
+
+-- | Finally for the 'Error' class. Errors in the finally part take
+-- precedence over prior errors.
+
+finally :: (Error e, MonadError e m) => m a -> m b -> m a
+first `finally` after = do
+  r <- catchError (liftM Right first) (return . Left)
+  after
+  case r of
+    Left e  -> throwError e
+    Right r -> return r
+
+-- | Bracket for the 'Error' class.
+
+bracket :: (Error e, MonadError e m)
+        => m a         -- ^ Acquires resource. Run first.
+        -> (a -> m c)  -- ^ Releases resource. Run last.
+        -> (a -> m b)  -- ^ Computes result. Run in-between.
+        -> m b
+bracket acquire release compute = do
+  resource <- acquire
+  compute resource `finally` release resource
 
 -- Maybe ------------------------------------------------------------------
 
diff --git a/src/full/Agda/Utils/Monad/Undo.hs b/src/full/Agda/Utils/Monad/Undo.hs
deleted file mode 100644
--- a/src/full/Agda/Utils/Monad/Undo.hs
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies,
-             FlexibleInstances, UndecidableInstances,
-             GeneralizedNewtypeDeriving
-  #-}
-module Agda.Utils.Monad.Undo where
-
-import Control.Monad.Trans
-import Control.Monad.State.Strict
-import Control.Monad.Reader
-import Control.Monad.Error
-
-import Agda.Utils.Monad
-
--- | An undo monad is a state monad with backtracking.
-class (Functor m, MonadState s m) => MonadUndo s m | m -> s where
-    undo    :: m ()
-    setUndo :: m ()
-    getUndoStack :: m [s]
-    putUndoStack :: [s] -> m ()
-
--- | The undo monad transformer turns any state monad into an undo monad.
-newtype UndoT s m a = UndoT { unUndoT :: StateT [s] m a }
-    deriving (Functor, Monad, MonadTrans, MonadIO)
-
-instance (MonadState s m, Monad m) => MonadUndo s (UndoT s m) where
-    undo =
-	do  xs <- UndoT get
-	    case xs of
-		[]   -> return ()
-		x:xs ->
-		    do	UndoT $ put xs
-			lift $ put x
-    setUndo =
-	do  x <- lift get
-	    UndoT $ modify (x:)
-
-    getUndoStack    = UndoT $ get
-    putUndoStack ss = UndoT $ put ss
-
-instance MonadState s m => MonadState s (UndoT s' m) where
-    get = lift get
-    put = lift . put
-
-instance MonadReader e m => MonadReader e (UndoT s m) where
-    ask	      = lift ask
-    local f m = UndoT $ local f $ unUndoT m
-
-instance MonadError e m => MonadError e (UndoT s m) where
-    throwError	   = lift . throwError
-    catchError m h = UndoT $ catchError (unUndoT m) (unUndoT . h)
-
-runUndoT :: Monad m => UndoT s m a -> m a
-runUndoT (UndoT sm) = evalStateT sm []
-
-mapUndoT :: (m (a, [s]) -> n (b, [s])) -> UndoT s m a -> UndoT s n b
-mapUndoT f = UndoT . mapStateT f . unUndoT
-
-getUndoStateNumber :: MonadUndo s m => m Int
-getUndoStateNumber = length <$> getUndoStack
-
-clearUndoHistory :: MonadUndo s m => m ()
-clearUndoHistory = putUndoStack []
-
diff --git a/src/full/Agda/Utils/QuickCheck.hs b/src/full/Agda/Utils/QuickCheck.hs
--- a/src/full/Agda/Utils/QuickCheck.hs
+++ b/src/full/Agda/Utils/QuickCheck.hs
@@ -17,8 +17,3 @@
 
 quickCheckWith' :: Testable prop => Args -> prop -> IO Bool
 quickCheckWith' args p = fmap isSuccess $ quickCheckWithResult args p
-
-instance Applicative Gen where
-  pure = return
-  (<*>) = ap
-
diff --git a/src/full/Agda/Utils/ReadP.hs b/src/full/Agda/Utils/ReadP.hs
--- a/src/full/Agda/Utils/ReadP.hs
+++ b/src/full/Agda/Utils/ReadP.hs
@@ -73,7 +73,7 @@
  where
 
 import Control.Monad
-import GHC.Prim
+import GHC.Exts
 import Data.Char
 
 infixr 5 +++, <++
diff --git a/src/full/Agda/Utils/Serialise.hs b/src/full/Agda/Utils/Serialise.hs
deleted file mode 100644
--- a/src/full/Agda/Utils/Serialise.hs
+++ /dev/null
@@ -1,163 +0,0 @@
-{-# LANGUAGE TypeSynonymInstances #-}
-module Agda.Utils.Serialise where
-
-import Control.Monad
-import Data.Generics
-import qualified Data.Map as Map
-import Data.Map (Map)
-import Data.Maybe
-import Data.Either
-import qualified Data.ByteString.Lazy as BS
-import Data.ByteString.Lazy (ByteString)
-import Codec.Binary.UTF8.String as UTF8
-
-import Agda.Utils.Tuple
-
-newtype Printer a = Printer { runPrinter :: a -> ShowS }
-newtype Parser  a = Parser  { runParser :: ByteString -> (a, ByteString) }
-
-data IFun a b = IFun (a -> b) (b -> a)
-
-class BiMonad m where
-    charS   :: m Char
-    stringS :: Int -> m String
-    returnS :: a -> m a
-    bindS   :: (b -> a) -> m a -> (a -> m b) -> m b
-
-instance BiMonad Printer where
-    charS = Printer (:)
-    stringS _ = Printer $ \s rest -> UTF8.encodeString s ++ rest
-    returnS _ = Printer $ const id
-    bindS mkA (Printer prA) k =
-	Printer $ \b -> let a = mkA b in prA a . runPrinter (k a) b
-
-bsToString :: ByteString -> String
-bsToString = UTF8.decodeString . map (toEnum . fromIntegral) . BS.unpack
-
-instance BiMonad Parser where
-    charS		 = Parser $ \s -> (toEnum . fromIntegral $ BS.head s, BS.tail s)
-    stringS n		 = Parser $ \s -> let (s0,rest) = BS.splitAt (fromIntegral n) s
-					  in (bsToString s0, rest)
-    returnS x		 = Parser $ \s -> (x,s)
-    bindS _ (Parser m) k = Parser $ \s -> let (x,s') = m s in runParser (k x) s'
-
-mapS :: BiMonad m => IFun a b -> m a -> m b
-mapS (IFun f g) sa = bindS g sa $ returnS . f
-
-(>->) :: BiMonad m => m a -> m b -> m (a,b)
-sa >-> sb = bindS fst sa $ \a ->
-	    bindS snd sb $ \b ->
-	    returnS (a,b)
-
-sequenceS :: BiMonad m => [m a] -> m [a]
-sequenceS []	 = returnS []
-sequenceS (s:ss) =
-    bindS head s	      $ \x ->
-    bindS tail (sequenceS ss) $ \xs ->
-    returnS (x : xs)
-
-replicateS :: BiMonad m => Int -> m a -> m [a]
-replicateS n = sequenceS . replicate n
-
-class Serialisable a where
-    serialiser :: BiMonad m => m a
-
-instance Serialisable () where
-    serialiser = returnS ()
-
-instance Serialisable Char where
-    serialiser = {-# SCC "charS" #-} charS
-
-instance Serialisable Int where
-    serialiser = {-# SCC "intS" #-} bindS small serialiser $ \c -> case c of
-	'\255'	-> mapS (fromChars `IFun` toChars) $ replicateS nChars serialiser
-	_	-> returnS $ fromEnum c
-	where
-	    nChars = 4
-
-	    small n | n >= 0 && n < 255	= toEnum n
-		    | otherwise		= '\255'
-
-	    toChars :: Int -> [Char]
-	    toChars n = map (toEnum . (`mod` 256))
-			$ scanl (\n _ -> div n 256) n
-			$ replicate (nChars - 1) ()
-
-	    fromChars :: [Char] -> Int
-	    fromChars bs = foldr (\b n -> fromEnum b + 256 * n) 0 bs
-
-instance Serialisable Bool where
-    serialiser = mapS (fromChar `IFun` toChar) serialiser
-	where
-	    fromChar 't' = True
-	    fromChar 'f' = False
-	    fromChar _   = error "deserialise Bool: no parse"
-	    toChar True  = 't'
-	    toChar False = 'f'
-
-instance Serialisable a => Serialisable (Maybe a) where
-    serialiser = bindS code serialiser $ \c -> case c of
-		    'j' -> mapS (IFun Just fromJust) serialiser
-		    'n' -> returnS Nothing
-		    _	-> error "deserialise Maybe: no parse"
-	where
-	    code Nothing  = 'n'
-	    code (Just _) = 'j'
-
-instance (Serialisable a, Serialisable b) => Serialisable (Either a b) where
-    serialiser = bindS code serialiser $ \c -> case c of
-		    'l' -> mapS (IFun Left  fromLeft ) serialiser
-		    'r' -> mapS (IFun Right fromRight) serialiser
-		    _	-> error "deserialise Either: no parse"
-	where
-	    code (Left  _) = 'l'
-	    code (Right _) = 'r'
-	    fromLeft  (Left x) = x
-	    fromLeft  _	       = error "fromLeft"
-	    fromRight (Right x) = x
-	    fromRight _	       = error "fromRight"
-
-instance (Serialisable a, Serialisable b) => Serialisable (a,b) where
-    serialiser = serialiser >-> serialiser
-
-instance (Serialisable a, Serialisable b, Serialisable c) => Serialisable (a,b,c) where
-    serialiser = mapS (IFun (\(x,(y,z)) -> (x,y,z)) (\(x,y,z) -> (x,(y,z))))
-		 serialiser
-
-instance (Serialisable a, Serialisable b, Serialisable c, Serialisable d)
-	=> Serialisable (a,b,c,d) where
-    serialiser = mapS (IFun (\((x,y),(z,w)) -> (x,y,z,w)) (\(x,y,z,w) -> ((x,y),(z,w))))
-		 serialiser
-
-instance (Serialisable a, Serialisable b, Serialisable c, Serialisable d, Serialisable e)
-	=> Serialisable (a,b,c,d,e) where
-    serialiser = mapS (IFun (\((x,y),(z,w,u)) -> (x,y,z,w,u)) (\(x,y,z,w,u) -> ((x,y),(z,w,u))))
-		 serialiser
-
-instance (Serialisable a, Serialisable b, Serialisable c, Serialisable d, Serialisable e, Serialisable f)
-	=> Serialisable (a,b,c,d,e,f) where
-    serialiser = mapS (IFun (\((x,y,v),(z,w,u)) -> (x,y,v,z,w,u)) (\(x,y,v,z,w,u) -> ((x,y,v),(z,w,u))))
-		 serialiser
-
-instance Serialisable String where
-    serialiser = {-# SCC "stringS" #-} bindS (length . UTF8.encodeString) serialiser stringS
-
-instance Serialisable a => Serialisable [a] where
-    serialiser = {-# SCC "listS" #-} bindS length serialiser $ \n -> replicateS n serialiser
-
-instance (Ord k, Serialisable k, Serialisable v) => Serialisable (Map k v) where
-    serialiser = mapS (Map.fromList `IFun` Map.toList) serialiser
-
-serialise :: Serialisable a => a -> String
-serialise x = runPrinter serialiser x ""
-
-deserialise :: Serialisable a => ByteString -> a
-deserialise s = case deserialiseLazy s of
-    (x,True) -> x
-    _	     -> error "deserialise: no parse"
-
--- | Force the Bool to force the a. True means ok and false means left-over garbage.
-deserialiseLazy :: Serialisable a => ByteString -> (a, Bool)
-deserialiseLazy s = case runParser serialiser s of
-    (x, s)  -> (x, BS.null s)
-
diff --git a/src/full/Agda/Utils/String.hs b/src/full/Agda/Utils/String.hs
--- a/src/full/Agda/Utils/String.hs
+++ b/src/full/Agda/Utils/String.hs
@@ -1,21 +1,26 @@
 module Agda.Utils.String
   ( quote
+  , showIndex
   , addFinalNewLine
   , indent
   ) where
 
 import Data.List
+import Numeric
 
 -- | 'quote' adds double quotes around the string, and escapes double
 -- quotes and backslashes within the string. This is different from
 -- the behaviour of 'show':
 --
 -- @
--- \> 'System.IO.UTF8.putStrLn' $ 'show' \"\\x2200\"
+-- \> 'putStrLn' $ 'show' \"\\x2200\"
 -- \"\\8704\"
--- \> 'System.IO.UTF8.putStrLn' $ 'quote' \"\\x2200\"
+-- \> 'putStrLn' $ 'quote' \"\\x2200\"
 -- \"&#x2200;\"
 -- @
+--
+-- (The code examples above have been tested using version 4.2.0.0 of
+-- the base library.)
 
 quote :: String -> String
 quote s = "\"" ++ concatMap escape s ++ "\""
@@ -24,6 +29,13 @@
            | otherwise            = [c]
 
   escapeChars = "\"\\"
+
+-- | Shows a non-negative integer using the characters ₀-₉ instead of
+-- 0-9.
+
+showIndex :: Integral i => i -> String
+showIndex n =
+  showIntAtBase 10 (\i -> toEnum (i + fromEnum '\x2080')) n ""
 
 -- | Adds a final newline if there is not already one.
 
diff --git a/src/full/Agda/Utils/TestHelpers.hs b/src/full/Agda/Utils/TestHelpers.hs
--- a/src/full/Agda/Utils/TestHelpers.hs
+++ b/src/full/Agda/Utils/TestHelpers.hs
@@ -22,7 +22,7 @@
 
 import Agda.Utils.QuickCheck
 import Data.List
-import qualified System.IO.UTF8 as UTF8
+import qualified Agda.Utils.IO.Locale as LocIO
 
 ------------------------------------------------------------------------
 -- Algebraic properties
@@ -125,5 +125,5 @@
          -> [IO Bool]
          -> IO Bool
 runTests name tests = do
-  UTF8.putStrLn name
+  LocIO.putStrLn name
   fmap and $ sequence tests
diff --git a/src/full/Agda/Utils/Trie.hs b/src/full/Agda/Utils/Trie.hs
--- a/src/full/Agda/Utils/Trie.hs
+++ b/src/full/Agda/Utils/Trie.hs
@@ -1,130 +1,82 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Unstable.Org.Lochan.Trie
--- Copyright   :  (c) Keith Wansbrough 2005
--- License     :  BSD-style
---
--- Maintainer  :  keith.hlib at lochan.org
---             :  modified and extended by Ulf Norell
--- Stability   :  experimental
--- Portability :  portable
---
---  This module provides a very basic implementation of the Trie data type,
---  with no great concern for efficiency, or for completeness of API.
---
------------------------------------------------------------------------------
 
 module Agda.Utils.Trie
-    (
-    -- * Data type
-    Trie,
-    -- * Constructors
-    empty, singleton, union, unionWith,
-    insert, insertWith,
-    -- * Primitive accessors and mutators
-    value, children, value_u, children_u,
-    lookup, lookupPath,
-    -- * Basic operations
-    preOrder, upwards, downwards,
-    -- * Derived operations
-    takeWhile, takeWhile_V, fringe,
-    ) where
-
+  ( Trie
+  , empty, singleton, insert, lookupPath, union
+  ) where
 
-import Prelude hiding (takeWhile, lookup)
+import Control.Applicative hiding (empty)
+import Control.Monad (mplus)
+import Data.Function
+import Data.List (nubBy, sortBy, isPrefixOf)
 import Data.Map (Map)
 import qualified Data.Map as Map
-import Data.Maybe
-import Control.Monad
+import Test.QuickCheck
 
--- |A Trie with key elements of type @k@ (keys of type @[k]@) and values of type @v@.
-data Trie k v = Trie { value    :: Maybe v
-                     , children :: Map k (Trie k v)
-                     }
+data Trie k v = Trie (Maybe v) (Map k (Trie k v))
   deriving Show
 
--- |Modify the 'children' field of a trie.
-value_u :: (Maybe v -> Maybe v) -> Trie k v -> Trie k v
-value_u f p = p { value = f (value p) }
-
--- |Modify the 'children' field of a trie.
-children_u :: (Map k (Trie k v) -> Map k (Trie k v)) -> Trie k v -> Trie k v
-children_u f p = p { children = f (children p) }
-
--- |The empty trie.
 empty :: Trie k v
-empty = Trie { value = Nothing, children = Map.empty }
+empty = Trie Nothing Map.empty
 
--- |The singleton trie.
-singleton :: Ord k => [k] -> v -> Trie k v
-singleton [] x     = Trie { value = Just x, children = Map.empty }
-singleton (k:ks) x = Trie { value = Nothing, children = Map.singleton k (singleton ks x) }
+singleton :: [k] -> v -> Trie k v
+singleton []     v = Trie (Just v) Map.empty
+singleton (x:xs) v = Trie Nothing $ Map.singleton x (singleton xs v)
 
--- |Combining two tries.  The first shadows the second.
+-- | Left biased union.
 union :: Ord k => Trie k v -> Trie k v -> Trie k v
-union p1 p2 =
-    Trie {
-          value    = mplus (value p1) (value p2),
-          children = Map.unionWith union (children p1) (children p2)
-         }
-
--- |Combining two tries.  If the two define the same key, the
--- specified combining function is used.
-unionWith :: Ord k => (v -> v -> v) -> Trie k v -> Trie k v -> Trie k v
-unionWith f p1 p2 =
-    Trie { value    = lift f (value p1) (value p2)
-         , children = Map.unionWith (unionWith f) (children p1) (children p2)
-         }
-    where lift _ Nothing y = y
-          lift _ x Nothing = x
-          lift _ (Just x) (Just y) = Just (f x y)
-
+union (Trie v ss) (Trie w ts) =
+  Trie (v `mplus` w) (Map.unionWith union ss ts)
 
--- |Insertion.
 insert :: Ord k => [k] -> v -> Trie k v -> Trie k v
 insert k v t = union (singleton k v) t
 
-insertWith :: Ord k => (v -> v -> v) -> [k] -> v -> Trie k v -> Trie k v
-insertWith f k v t = unionWith f (singleton k v) t
-
--- |Lookup an element.
-lookup :: Ord k => [k] -> Trie k v -> Maybe v
-lookup []       t = value t
-lookup (k : ks) t = lookup ks =<< Map.lookup k (children t)
-
--- |Lookup and return all values on the path.
 lookupPath :: Ord k => [k] -> Trie k v -> [v]
-lookupPath ks t = case ks of
-  []     -> list $ value t
-  k : ks -> concat $ list (value t) : list (fmap (lookupPath ks) (Map.lookup k $ children t))
+lookupPath xs (Trie v cs) = case xs of
+    []     -> val v
+    x : xs -> val v ++ maybe [] (lookupPath xs) (Map.lookup x cs)
   where
-    list = maybe [] (:[])
+    val = maybe [] (:[])
 
--- |Enumerate all (key,value) pairs, in preorder.
-preOrder :: Ord k => [k] -> Trie k v -> [([k],v)]
-preOrder ks p = getNode p
-                ++ concatMap (\(k,p') -> preOrder (ks++[k]) p')
-                             (Map.toList (children p))
-    where getNode p = maybe [] (\ v -> [(ks,v)]) (value p)
+-- Tests ------------------------------------------------------------------
 
--- |An upwards accumulation on the trie.
-upwards :: Ord k => (Trie k v -> Trie k v) -> Trie k v -> Trie k v
-upwards f = f . children_u (Map.map (upwards f))
+newtype Key = Key Int
+  deriving (Eq, Ord)
 
--- |A downwards accumulation on the trie.
-downwards :: Ord k => (Trie k v -> Trie k v) -> Trie k v -> Trie k v
-downwards f = children_u (Map.map (downwards f)) . f
+newtype Val = Val Int
+  deriving (Eq)
 
--- |Return the prefix of the trie satisfying @f@.
-takeWhile :: Ord k => (Trie k v -> Bool) -> Trie k v -> Trie k v
-takeWhile f = downwards (children_u (Map.filter f))
+newtype Model = Model [([Key], Val)]
+  deriving (Eq, Show)
 
--- |Return the prefix of the trie satisfying @f@ on all values present.
-takeWhile_V :: Ord k => (v -> Bool) -> Trie k v -> Trie k v
-takeWhile_V f = takeWhile (maybe True f . value)
+instance Show Key where
+  show (Key x) = show x
 
--- |Return the fringe of the trie (the trie composed of only the leaf nodes).
-fringe :: Ord k => Trie k v -> Trie k v
-fringe = upwards (\ p -> if Map.null (children p) then p else value_u (const Nothing) p)
+instance Show Val where
+  show (Val x) = show x
 
+instance Arbitrary Key where
+  arbitrary = elements $ map Key [1..2]
+  shrink (Key x) = Key <$> shrink x
+
+instance Arbitrary Val where
+  arbitrary = elements $ map Val [1..3]
+  shrink (Val x) = Val <$> shrink x
+
+instance Arbitrary Model where
+  arbitrary = Model <$> arbitrary
+  shrink (Model xs) = Model <$> shrink xs
+
+modelToTrie :: Model -> Trie Key Val
+modelToTrie (Model xs) = foldr (uncurry insert) empty xs
+
+modelPath :: [Key] -> Model -> [Val]
+modelPath ks (Model xs) =
+  map snd
+  $ sortBy (compare `on` length . fst)
+  $ nubBy ((==) `on` fst)
+  $ filter (flip isPrefixOf ks . fst) xs
+
+prop_path ks m =
+  collect (length $ modelPath ks m) $
+  lookupPath ks (modelToTrie m) == modelPath ks m
 
diff --git a/src/full/Agda/undefined.h b/src/full/Agda/undefined.h
--- a/src/full/Agda/undefined.h
+++ b/src/full/Agda/undefined.h
@@ -1,1 +1,2 @@
 #define __IMPOSSIBLE__ (throwImpossible (Impossible __FILE__ __LINE__))
+#define __IMPOSSIBLE_TERM__ (impossibleTerm __FILE__ __LINE__)
